Index: code/branches/network64/src/network/synchronisable/CMakeLists.txt
===================================================================
--- code/branches/network64/src/network/synchronisable/CMakeLists.txt	(revision 2255)
+++ code/branches/network64/src/network/synchronisable/CMakeLists.txt	(revision 2307)
@@ -1,4 +1,5 @@
 SET( SRC_FILES
   Synchronisable.cc
+  SynchronisableSpecialisations.cc
   SynchronisableVariable.cc
 )
Index: code/branches/network64/src/network/synchronisable/Synchronisable.cc
===================================================================
--- code/branches/network64/src/network/synchronisable/Synchronisable.cc	(revision 2255)
+++ code/branches/network64/src/network/synchronisable/Synchronisable.cc	(revision 2307)
@@ -40,5 +40,4 @@
 
 #include "Synchronisable.h"
-#include "SynchronisableSpecialisations.cc" // this defines all specialisations for registerVariable
 
 #include <cstring>
Index: code/branches/network64/src/network/synchronisable/Synchronisable.h
===================================================================
--- code/branches/network64/src/network/synchronisable/Synchronisable.h	(revision 2255)
+++ code/branches/network64/src/network/synchronisable/Synchronisable.h	(revision 2307)
@@ -148,17 +148,17 @@
   
   // ================= Specialisation declarations
-  template <> void Synchronisable::registerVariable( const ColourValue& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);template <> void Synchronisable::registerVariable( const ColourValue& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
-  template <> void Synchronisable::registerVariable( ColourValue& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
-  template <> void Synchronisable::registerVariable( const Vector2& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
-  template <> void Synchronisable::registerVariable( Vector2& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
-  template <> void Synchronisable::registerVariable( const Vector3& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
-  template <> void Synchronisable::registerVariable( Vector3& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
-  template <> void Synchronisable::registerVariable( const Vector4& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
-  template <> void Synchronisable::registerVariable( Vector4& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
-  template <> void Synchronisable::registerVariable( mbool& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
-  template <> void Synchronisable::registerVariable( const Quaternion& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
-  template <> void Synchronisable::registerVariable( Quaternion& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
-//   template <> void Synchronisable::registerVariable( LODParticle::LOD& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
-//   template <> void Synchronisable::registerVariable( Ogre::Light::LightTypes& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
+  template <> _NetworkExport void Synchronisable::registerVariable( const ColourValue& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
+  template <> _NetworkExport void Synchronisable::registerVariable( ColourValue& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
+  template <> _NetworkExport void Synchronisable::registerVariable( const Vector2& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
+  template <> _NetworkExport void Synchronisable::registerVariable( Vector2& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
+  template <> _NetworkExport void Synchronisable::registerVariable( const Vector3& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
+  template <> _NetworkExport void Synchronisable::registerVariable( Vector3& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
+  template <> _NetworkExport void Synchronisable::registerVariable( const Vector4& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
+  template <> _NetworkExport void Synchronisable::registerVariable( Vector4& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
+  template <> _NetworkExport void Synchronisable::registerVariable( mbool& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
+  template <> _NetworkExport void Synchronisable::registerVariable( const Quaternion& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
+  template <> _NetworkExport void Synchronisable::registerVariable( Quaternion& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
+//   template <> _NetworkExport void Synchronisable::registerVariable( LODParticle::LOD& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
+//   template <> _NetworkExport void Synchronisable::registerVariable( Ogre::Light::LightTypes& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);
 }
 
Index: code/branches/network64/src/network/synchronisable/SynchronisableSpecialisations.cc
===================================================================
--- code/branches/network64/src/network/synchronisable/SynchronisableSpecialisations.cc	(revision 2255)
+++ code/branches/network64/src/network/synchronisable/SynchronisableSpecialisations.cc	(revision 2307)
@@ -28,5 +28,5 @@
  */
 
-
+#include "network/synchronisable/Synchronisable.h"
 
 // ================ template spezialisation
Index: code/branches/network64/src/network/synchronisable/SynchronisableVariable.h
===================================================================
--- code/branches/network64/src/network/synchronisable/SynchronisableVariable.h	(revision 2255)
+++ code/branches/network64/src/network/synchronisable/SynchronisableVariable.h	(revision 2307)
@@ -31,9 +31,12 @@
 #define _NETWORK_SYNCHRONISABLEVARIABLE__
 
+#include "network/NetworkPrereqs.h"
+
+#include <string>
+#include <cassert>
+#include "util/Integers.h"
 #include "core/Core.h"
 #include "core/CoreIncludes.h"
-#include <string>
-#include <cassert>
-#include "network/NetworkPrereqs.h"
+#include "network/synchronisable/NetworkCallback.h"
 
 namespace orxonox{
@@ -64,5 +67,5 @@
 
   template <class T>
-  class _NetworkExport SynchronisableVariable: public SynchronisableVariableBase
+  class SynchronisableVariable: public SynchronisableVariableBase
   {
     public:
@@ -72,12 +75,12 @@
       virtual inline uint8_t getMode(){ return mode_; }
       virtual void getData(uint8_t*& mem, uint8_t mode);
-      virtual void putData(uint8_t*& mem, uint8_t mode, bool forceCallback = false);
-      virtual inline uint32_t getSize(uint8_t mode);
-      virtual void* getReference(){ return (void *)&this->variable_; }
+      virtual inline void putData(uint8_t*& mem, uint8_t mode, bool forceCallback = false);
+      virtual uint32_t getSize(uint8_t mode);
+      virtual inline void* getReference(){ return (void *)&this->variable_; }
     protected:
-      inline bool checkEquality(uint8_t* mem);
-      inline void setAndIncrease(uint8_t*& mem);
-      inline void getAndIncrease(uint8_t*& mem);
-      inline uint32_t returnSize();
+      bool checkEquality(uint8_t* mem);
+      void setAndIncrease(uint8_t*& mem);
+      void getAndIncrease(uint8_t*& mem);
+      uint32_t returnSize();
       
       T& variable_;
@@ -87,5 +90,5 @@
   
   template <class T>
-  class _NetworkExport SynchronisableVariableBidirectional: public SynchronisableVariable<T>
+  class SynchronisableVariableBidirectional: public SynchronisableVariable<T>
   {
     public:
@@ -96,5 +99,5 @@
       virtual void getData(uint8_t*& mem, uint8_t mode);
       virtual void putData(uint8_t*& mem, uint8_t mode, bool forceCallback = false);
-      virtual inline uint32_t getSize(uint8_t mode);
+      virtual uint32_t getSize(uint8_t mode);
     private:
       T varBuffer_;
@@ -153,4 +156,66 @@
       return 0;
   }
+
+  template <> _NetworkExport uint32_t SynchronisableVariable<const bool>::returnSize();
+  template <> _NetworkExport void     SynchronisableVariable<const bool>::setAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport void     SynchronisableVariable<const bool>::getAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport bool     SynchronisableVariable<const bool>::checkEquality(uint8_t* mem);
+  template <> _NetworkExport uint32_t SynchronisableVariable<const unsigned char>::returnSize();
+  template <> _NetworkExport void     SynchronisableVariable<const unsigned char>::setAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport void     SynchronisableVariable<const unsigned char>::getAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport bool     SynchronisableVariable<const unsigned char>::checkEquality(uint8_t* mem);
+  template <> _NetworkExport uint32_t SynchronisableVariable<const short>::returnSize();
+  template <> _NetworkExport void     SynchronisableVariable<const short>::setAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport void     SynchronisableVariable<const short>::getAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport bool     SynchronisableVariable<const short>::checkEquality(uint8_t* mem);
+  template <> _NetworkExport uint32_t SynchronisableVariable<const unsigned short>::returnSize();
+  template <> _NetworkExport void     SynchronisableVariable<const unsigned short>::setAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport void     SynchronisableVariable<const unsigned short>::getAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport bool     SynchronisableVariable<const unsigned short>::checkEquality(uint8_t* mem);
+  template <> _NetworkExport uint32_t SynchronisableVariable<const int>::returnSize();
+  template <> _NetworkExport void     SynchronisableVariable<const int>::setAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport void     SynchronisableVariable<const int>::getAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport bool     SynchronisableVariable<const int>::checkEquality(uint8_t* mem);
+  template <> _NetworkExport uint32_t SynchronisableVariable<const unsigned int>::returnSize();
+  template <> _NetworkExport void     SynchronisableVariable<const unsigned int>::setAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport void     SynchronisableVariable<const unsigned int>::getAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport bool     SynchronisableVariable<const unsigned int>::checkEquality(uint8_t* mem);
+  template <> _NetworkExport uint32_t SynchronisableVariable<const long>::returnSize();
+  template <> _NetworkExport void     SynchronisableVariable<const long>::setAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport void     SynchronisableVariable<const long>::getAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport bool     SynchronisableVariable<const long>::checkEquality(uint8_t* mem);
+  template <> _NetworkExport uint32_t SynchronisableVariable<const unsigned long>::returnSize();
+  template <> _NetworkExport void     SynchronisableVariable<const unsigned long>::setAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport void     SynchronisableVariable<const unsigned long>::getAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport bool     SynchronisableVariable<const unsigned long>::checkEquality(uint8_t* mem);
+  template <> _NetworkExport uint32_t SynchronisableVariable<const long long>::returnSize();
+  template <> _NetworkExport void     SynchronisableVariable<const long long>::setAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport void     SynchronisableVariable<const long long>::getAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport bool     SynchronisableVariable<const long long>::checkEquality(uint8_t* mem);
+  template <> _NetworkExport uint32_t SynchronisableVariable<const unsigned long long>::returnSize();
+  template <> _NetworkExport void     SynchronisableVariable<const unsigned long long>::setAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport void     SynchronisableVariable<const unsigned long long>::getAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport bool     SynchronisableVariable<const unsigned long long>::checkEquality(uint8_t* mem);
+  template <> _NetworkExport uint32_t SynchronisableVariable<const float>::returnSize();
+  template <> _NetworkExport void     SynchronisableVariable<const float>::setAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport void     SynchronisableVariable<const float>::getAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport bool     SynchronisableVariable<const float>::checkEquality(uint8_t* mem);
+  template <> _NetworkExport uint32_t SynchronisableVariable<const double>::returnSize();
+  template <> _NetworkExport void     SynchronisableVariable<const double>::setAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport void     SynchronisableVariable<const double>::getAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport bool     SynchronisableVariable<const double>::checkEquality(uint8_t* mem);
+  template <> _NetworkExport uint32_t SynchronisableVariable<const long double>::returnSize();
+  template <> _NetworkExport void     SynchronisableVariable<const long double>::setAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport void     SynchronisableVariable<const long double>::getAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport bool     SynchronisableVariable<const long double>::checkEquality(uint8_t* mem);
+  template <> _NetworkExport uint32_t SynchronisableVariable<const std::string>::returnSize();
+  template <> _NetworkExport void     SynchronisableVariable<const std::string>::setAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport void     SynchronisableVariable<const std::string>::getAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport bool     SynchronisableVariable<const std::string>::checkEquality(uint8_t* mem);
+  template <> _NetworkExport uint32_t SynchronisableVariable<const Degree>::returnSize();
+  template <> _NetworkExport void     SynchronisableVariable<const Degree>::setAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport void     SynchronisableVariable<const Degree>::getAndIncrease(uint8_t*& mem);
+  template <> _NetworkExport bool     SynchronisableVariable<const Degree>::checkEquality(uint8_t* mem);
+
 
 
Index: code/branches/network64/visual_studio/vc8/network.vcproj
===================================================================
--- code/branches/network64/visual_studio/vc8/network.vcproj	(revision 2255)
+++ code/branches/network64/visual_studio/vc8/network.vcproj	(revision 2307)
@@ -196,8 +196,4 @@
 				>
 			</File>
-			<File
-				RelativePath="..\..\src\network\Synchronisable.cc"
-				>
-			</File>
 			<Filter
 				Name="packet"
@@ -229,4 +225,20 @@
 				<File
 					RelativePath="..\..\src\network\packet\Welcome.cc"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="synchronisable"
+				>
+				<File
+					RelativePath="..\..\src\network\synchronisable\Synchronisable.cc"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\network\synchronisable\SynchronisableSpecialisations.cc"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\network\synchronisable\SynchronisableVariable.cc"
 					>
 				</File>
@@ -279,8 +291,4 @@
 			</File>
 			<File
-				RelativePath="..\..\src\network\NetworkCallback.h"
-				>
-			</File>
-			<File
 				RelativePath="..\..\src\network\NetworkPrereqs.h"
 				>
@@ -292,8 +300,4 @@
 			<File
 				RelativePath="..\..\src\network\Server.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\network\Synchronisable.h"
 				>
 			</File>
@@ -327,4 +331,20 @@
 				<File
 					RelativePath="..\..\src\network\packet\Welcome.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="synchronisable"
+				>
+				<File
+					RelativePath="..\..\src\network\synchronisable\NetworkCallback.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\network\synchronisable\Synchronisable.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\network\synchronisable\SynchronisableVariable.h"
 					>
 				</File>
