Index: code/branches/netp2/src/network/Client.cc
===================================================================
--- code/branches/netp2/src/network/Client.cc	(revision 2947)
+++ code/branches/netp2/src/network/Client.cc	(revision 2948)
@@ -47,4 +47,5 @@
 #include "core/CoreIncludes.h"
 #include "packet/Packet.h"
+#include "FunctionCallManager.h"
 
 // #include "packet/Acknowledgement.h"
@@ -149,4 +150,5 @@
         // gs gets automatically deleted by enet callback
       }
+      FunctionCallManager::sendCalls();
     }
     ENetEvent *event;
Index: code/branches/netp2/src/network/NetworkFunction.cc
===================================================================
--- code/branches/netp2/src/network/NetworkFunction.cc	(revision 2947)
+++ code/branches/netp2/src/network/NetworkFunction.cc	(revision 2948)
@@ -70,4 +70,5 @@
   NetworkFunctionStatic::~NetworkFunctionStatic()
   {
+    delete this->functor_;
   }
   
Index: code/branches/netp2/src/network/NetworkFunction.h
===================================================================
--- code/branches/netp2/src/network/NetworkFunction.h	(revision 2947)
+++ code/branches/netp2/src/network/NetworkFunction.h	(revision 2948)
@@ -38,4 +38,5 @@
 #include "util/MultiType.h"
 #include "synchronisable/Synchronisable.h"
+#include "OrxonoxConfig.h"
 #include "FunctionCallManager.h"
 
@@ -158,5 +159,8 @@
 {
 }
-
+template <class T> NetworkMemberFunction<T>::~NetworkMemberFunction()
+{
+  delete this->functor_;
+}
 
 template<class T> inline void copyPtr( T ptr, NetworkFunctionPointer& destptr)
@@ -173,5 +177,4 @@
   NetworkFunctionPointer destptr;
   copyPtr( ptr, destptr );
-  COUT(0) << "-==================== destptr: " << destptr.pointer[0] << ", " << destptr.pointer[1] << endl;
   new NetworkFunctionStatic( createFunctor(ptr), name, destptr );
   return 0;
@@ -182,12 +185,13 @@
   NetworkFunctionPointer destptr;
   copyPtr( ptr, destptr );
-  new NetworkMemberFunction<T>( new FunctorMember<T>(ptr), name, destptr );
+  new NetworkMemberFunction<T>( createFunctor(ptr), name, destptr );
   return 0;
 }
 
-#define registerStaticNetworkFunction( functionPointer, name ) \
-  void* NETWORK_FUNCTION_name##a = registerStaticNetworkFunctionFct( functionPointer, name );
-#define registerMemberNetworkFunction( functionPointer, class, name ) \
-  void* NETWORK_FUNCTION_class##name##a = registerMemberNetworkFunction<class>( functionPointer, name );
+#define registerStaticNetworkFunction( functionPointer ) \
+  static void* MACRO_CONCATENATE( NETWORK_FUNCTION_, __LINE__ ) = registerStaticNetworkFunctionFct( functionPointer, #functionPointer );
+#define registerMemberNetworkFunction( class, function ) \
+  static void* MACRO_CONCATENATE( NETWORK_FUNCTION_##class, __LINE__ ) = registerMemberNetworkFunctionFct<class>( &class::function, #class "_" #function);
+  // call it with functionPointer, clientID, args
 #define callStaticNetworkFunction( functionPointer, ...) \
   { \
@@ -196,9 +200,10 @@
     FunctionCallManager::addCallStatic(NetworkFunctionStatic::getFunction(p1)->getNetworkID(), __VA_ARGS__); \
   }
-#define callMemberNetworkFunction( functionPointer, objectID, ...) \
+  // call it with class, function, objectID, clientID, args
+#define callMemberNetworkFunction( class, function, objectID, ...) \
   { \
     NetworkFunctionPointer p1; \
-    copyPtr( functionPointer, p1 ); \
-    FunctionCallManager::addCallMember(NetworkMemberFunctionBase::getFunction(p1)->getNetworkID(), objectID, __VA_ARGS__) \
+    copyPtr( &class::function, p1 ); \
+    FunctionCallManager::addCallMember(NetworkMemberFunctionBase::getFunction(p1)->getNetworkID(), objectID, __VA_ARGS__); \
   }
 
Index: code/branches/netp2/src/orxonox/objects/Test.cc
===================================================================
--- code/branches/netp2/src/orxonox/objects/Test.cc	(revision 2947)
+++ code/branches/netp2/src/orxonox/objects/Test.cc	(revision 2948)
@@ -49,5 +49,6 @@
 //   NetworkFunctionBase* NETWORK_FUNCTION_TEST_C = new NetworkFunctionStatic( createFunctor(&Test::printV1), "bla", NETWORK_FUNCTION_POINTER );
   
-  registerStaticNetworkFunction( &Test::printV1, "printV1" );
+  registerStaticNetworkFunction( &Test::printV1 );
+  registerMemberNetworkFunction( Test, checkU1 );
   
   Test* Test::instance_ = 0;
@@ -101,4 +102,11 @@
   }
   
+  void Test::tick(float dt)
+  {
+    if(!Core::isMaster())
+      callMemberNetworkFunction( Test, checkU1, this->getObjectID(), 0 );
+//       callMemberNetworkFunction( &Test::printV1, this->getObjectID(), 0);
+  }
+  
   void Test::checkU1(){ COUT(1) << "U1 changed: " << u1 << std::endl; }
   void Test::checkU2(){ COUT(1) << "U2 changed: " << u2 << std::endl; }
Index: code/branches/netp2/src/orxonox/objects/Test.h
===================================================================
--- code/branches/netp2/src/orxonox/objects/Test.h	(revision 2947)
+++ code/branches/netp2/src/orxonox/objects/Test.h	(revision 2948)
@@ -33,4 +33,5 @@
 #include "core/BaseObject.h"
 #include "network/synchronisable/Synchronisable.h"
+#include "Tickable.h"
 
 
@@ -41,5 +42,5 @@
 namespace orxonox
 {
-  class _OrxonoxExport Test: public BaseObject, public Synchronisable
+  class _OrxonoxExport Test: public BaseObject, public Synchronisable, public Tickable
   {
     public:
@@ -51,4 +52,5 @@
       
       static void call(unsigned int clientID);
+      virtual void tick(float dt);
 
 
