Index: branches/script_engine/src/lib/coord/p_node.h
===================================================================
--- branches/script_engine/src/lib/coord/p_node.h	(revision 8417)
+++ branches/script_engine/src/lib/coord/p_node.h	(revision 8485)
@@ -103,4 +103,11 @@
   /** @returns the absolute position */
   inline const Vector& getAbsCoor () const { return this->absCoordinate; };
+  /** @returns the absolute X coordinate. */
+  inline float getAbsCoorX() { return this->absCoordinate.x; };
+  /** @returns the absolute Y Coordinate */
+  inline float getAbsCoorY() { return this->absCoordinate.y; };
+  /** @returns the absolute Z Coordinate */
+  inline float getAbsCoorZ() { return this->absCoordinate.z; };
+  
   void shiftCoor (const Vector& shift);
   void shiftCoor (float x, float y, float z) { this->shiftCoor(Vector(x, y, z)); };
Index: branches/script_engine/src/lib/script_engine/script.cc
===================================================================
--- branches/script_engine/src/lib/script_engine/script.cc	(revision 8417)
+++ branches/script_engine/src/lib/script_engine/script.cc	(revision 8485)
@@ -192,5 +192,5 @@
  bool Script::pushParam(int param, std::string& toFunction)
  {
-   if(currentFunction.compare(toFunction) == 0)
+   if(currentFunction == toFunction)
    {
      lua_pushnumber(luaState, (lua_Number) param);
@@ -267,4 +267,6 @@
        returnCount--;
      }
+     else
+       printf("ERROR: Form %s : trying to retreive non bolean value",this->currentFile.c_str());
    }
    return returnValue;
@@ -313,4 +315,33 @@
  }
 
+ bool Script::registerStandartClasses()
+ {
+   bool success = false;
+   
+   //success = this->registerClass(std::string("Vector"));
+   
+   return success;
+ }
+ 
+ 
+ bool Script::registerClass( const std::string& className)
+ {
+   BaseObject* scriptClass = ClassList::getObject(className, CL_SCRIPT_CLASS);
+   //printf("The script class for %s is at %p \n",className.c_str(),scriptClass);
+   WorldObject tmpObj;
+   if (scriptClass != NULL)
+   {
+     tmpObj.type = className;
+     if( !classIsRegistered(className) )
+     {
+       static_cast<ScriptClass*>(scriptClass)->registerClass(this);
+       tmpObj.name = "";
+       registeredObjects.push_back(tmpObj);
+       return true;
+     }
+   }
+   return false;
+ 
+ }
 
  bool Script::classIsRegistered(const std::string& type)
Index: branches/script_engine/src/lib/script_engine/script.h
===================================================================
--- branches/script_engine/src/lib/script_engine/script.h	(revision 8417)
+++ branches/script_engine/src/lib/script_engine/script.h	(revision 8485)
@@ -58,4 +58,6 @@
 
     int  reportError(int error);                      //!< Get errormessage from the lua stack and print it.
+    bool registerStandartClasses();                   //!< Register all the classes that the script might need
+    bool registerClass(const std::string& className); //!< Register a class but dont add any instances 
     bool classIsRegistered(const std::string& type);  //!< Checks wheter the class "type" has already been registered with the script
     bool objectIsAdded(const std::string& name);      //!< Checks wheter the object "name" has already been added to the script
Index: branches/script_engine/src/lib/util/executor/executor_lua.h
===================================================================
--- branches/script_engine/src/lib/util/executor/executor_lua.h	(revision 8417)
+++ branches/script_engine/src/lib/util/executor/executor_lua.h	(revision 8485)
@@ -183,4 +183,54 @@
 
 
+///////////
+//// 3 ////
+///////////
+//! Executes a Function with a lua_State* parameter.
+template<class T, typename type0, typename type1, typename type2> class ExecutorLua3 : public Executor
+{
+  public:
+    /**
+   * @brief Constructor of a ExecutorXML
+   * @param function a Function to call
+     */
+    ExecutorLua3(void(T::*function)(type0, type1, type2))
+  : Executor(ExecutorParamType<type0>(), ExecutorParamType<type1>(), ExecutorParamType<type2>())
+    {
+      this->functionPointer = function;
+      this->functorType = Executor_Objective | Executor_NoLoadString;
+    }
+
+    /**
+     * @brief executes the Command on BaseObject
+     * @param object the BaseObject to execute this Executor on
+     * @param loadString ignored in this case
+     */
+    virtual void operator()(BaseObject* object, const SubString& = SubString()) const
+    {
+      PRINTF(1)("no usefull executor\n");
+    }
+
+    virtual void operator()(BaseObject* object, int& count, void* values) const
+    {
+      lua_State* state = (lua_State*)values;
+      count = 0;
+
+      (dynamic_cast<T*>(object)->*(functionPointer))(
+          fromLua<type0>(state, 1),
+          fromLua<type1>(state, 2),
+          fromLua<type2>(state, 3) );
+    }
+
+    /**
+     * @returns a _new_ Copy of this Executor
+     */
+    virtual Executor* clone () const
+    {
+      return new ExecutorLua3<T, type0, type1, type2>(this->functionPointer);
+    }
+  private:
+    void          (T::*functionPointer)(type0, type1, type2);
+};
+
 
 
@@ -210,5 +260,5 @@
       this->functorType = Executor_Objective | Executor_NoLoadString;
     }
-
+    
     /**
      * @brief executes the Command on BaseObject
