diff --git a/lua/LuaFunctionSpace.cpp b/lua/LuaFunctionSpace.cpp
index 4124b255502229c14bcb3d232a9b4d8cd3d3a607..920cee66c7ec67f7f552666df99ac795e43e9da9 100644
--- a/lua/LuaFunctionSpace.cpp
+++ b/lua/LuaFunctionSpace.cpp
@@ -20,8 +20,9 @@ const struct luaL_Reg libsf_FunctionSpace_f[] = {
 };
 
 const struct luaL_Reg libsf_FunctionSpace_m[] = {
-  {"__gc", lua_FunctionSpace_delete},
-  {NULL,   NULL}
+  {"__tostring", lua_FunctionSpace_toString},
+  {"__gc",       lua_FunctionSpace_delete},
+  {NULL,         NULL}
 };
 
 extern "C" int luaopen_libsf_functionspace(lua_State *L){
@@ -136,4 +137,19 @@ int lua_FunctionSpace_delete(lua_State *L){
   return 0;
 }
 
+int lua_FunctionSpace_toString(lua_State *L){
+  FunctionSpace **lua =
+    (FunctionSpace**)luaL_checkudata(L, 1, "sf.FunctionSpace");
+  lua_pushstring(L, lua_FunctionSpace_toString(*lua).c_str());
+
+  return 1;
+}
+
+string lua_FunctionSpace_toString(FunctionSpace *fs){
+  stringstream str;
+  str << "Function space: " << fs;
+
+  return str.str();
+}
+
 #endif
diff --git a/lua/LuaFunctionSpace.h b/lua/LuaFunctionSpace.h
index 554d01cfcf7e034cfbcb9542a4be52aa286b6a12..c2cd420a3d50776b411a2b15be89989bcd42f5e9 100644
--- a/lua/LuaFunctionSpace.h
+++ b/lua/LuaFunctionSpace.h
@@ -4,6 +4,7 @@
 #include "SmallFemConfig.h"
 #ifdef HAVE_LUA
 
+#include "FunctionSpace.h"
 extern "C"{
 #include "lua.h"
 }
@@ -13,5 +14,8 @@ extern "C" int luaopen_libsf_functionspace(lua_State *L);
 int lua_FunctionSpace_new(lua_State *L);
 int lua_FunctionSpace_delete(lua_State *L);
 
+int         lua_FunctionSpace_toString(lua_State *L);
+std::string lua_FunctionSpace_toString(sf::FunctionSpace *fs);
+
 #endif
 #endif