diff --git a/include/proto/hlua_fcn.h b/include/proto/hlua_fcn.h
index 179d40c..560d1f4 100644
--- a/include/proto/hlua_fcn.h
+++ b/include/proto/hlua_fcn.h
@@ -1,7 +1,11 @@
 #ifndef _PROTO_HLUA_FCN_H
 #define _PROTO_HLUA_FCN_H
 
+void hlua_class_const_int(lua_State *L, const char *name, int value);
+void hlua_class_const_str(lua_State *L, const char *name, const char *value);
+void hlua_class_function(lua_State *L, const char *name, int (*function)(lua_State *L));
 void *hlua_checkudata(lua_State *L, int ud, int class_ref);
 int hlua_fcn_reg_core_fcn(lua_State *L);
+int hlua_dump_object(lua_State *L);
 
 #endif /* _PROTO_HLUA_FCN_H */
diff --git a/src/hlua.c b/src/hlua.c
index 54fbc48..402595a 100644
--- a/src/hlua.c
+++ b/src/hlua.c
@@ -264,49 +264,6 @@
 	return lua_tostring(L, -1);
 }
 
-/* The three following functions are useful for adding entries
- * in a table. These functions takes a string and respectively an
- * integer, a string or a function and add it to the table in the
- * top of the stack.
- *
- * These functions throws an error if no more stack size is
- * available.
- */
-__LJMP static inline void hlua_class_const_int(lua_State *L, const char *name,
-                                               int value)
-{
-	if (!lua_checkstack(L, 2))
-	WILL_LJMP(luaL_error(L, "full stack"));
-	lua_pushstring(L, name);
-	lua_pushinteger(L, value);
-	lua_rawset(L, -3);
-}
-__LJMP static inline void hlua_class_const_str(lua_State *L, const char *name,
-                                        const char *value)
-{
-	if (!lua_checkstack(L, 2))
-		WILL_LJMP(luaL_error(L, "full stack"));
-	lua_pushstring(L, name);
-	lua_pushstring(L, value);
-	lua_rawset(L, -3);
-}
-__LJMP static inline void hlua_class_function(lua_State *L, const char *name,
-                                       int (*function)(lua_State *L))
-{
-	if (!lua_checkstack(L, 2))
-		WILL_LJMP(luaL_error(L, "full stack"));
-	lua_pushstring(L, name);
-	lua_pushcclosure(L, function, 0);
-	lua_rawset(L, -3);
-}
-
-__LJMP static int hlua_dump_object(struct lua_State *L)
-{
-	const char *name = (const char *)lua_tostring(L, lua_upvalueindex(1));
-	lua_pushfstring(L, "HAProxy class %s", name);
-	return 1;
-}
-
 /* This function check the number of arguments available in the
  * stack. If the number of arguments available is not the same
  * then <nb> an error is throwed.
diff --git a/src/hlua_fcn.c b/src/hlua_fcn.c
index 5adb128..c649aec 100644
--- a/src/hlua_fcn.c
+++ b/src/hlua_fcn.c
@@ -25,6 +25,47 @@
 /* Contains the class reference of the concat object. */
 static int class_concat_ref;
 
+/* The three following functions are useful for adding entries
+ * in a table. These functions takes a string and respectively an
+ * integer, a string or a function and add it to the table in the
+ * top of the stack.
+ *
+ * These functions throws an error if no more stack size is
+ * available.
+ */
+void hlua_class_const_int(lua_State *L, const char *name, int value)
+{
+	if (!lua_checkstack(L, 2))
+		luaL_error(L, "full stack");
+	lua_pushstring(L, name);
+	lua_pushinteger(L, value);
+	lua_rawset(L, -3);
+}
+void hlua_class_const_str(lua_State *L, const char *name, const char *value)
+{
+	if (!lua_checkstack(L, 2))
+		luaL_error(L, "full stack");
+	lua_pushstring(L, name);
+	lua_pushstring(L, value);
+	lua_rawset(L, -3);
+}
+void hlua_class_function(lua_State *L, const char *name, int (*function)(lua_State *L))
+{
+	if (!lua_checkstack(L, 2))
+		luaL_error(L, "full stack");
+	lua_pushstring(L, name);
+	lua_pushcclosure(L, function, 0);
+	lua_rawset(L, -3);
+}
+
+/* This function returns a string containg the HAProxy object name. */
+int hlua_dump_object(struct lua_State *L)
+{
+	const char *name = (const char *)lua_tostring(L, lua_upvalueindex(1));
+	lua_pushfstring(L, "HAProxy class %s", name);
+	return 1;
+}
+
 /* Return an object of the expected type, or throws an error. */
 void *hlua_checkudata(lua_State *L, int ud, int class_ref)
 {
