Index: trunk/src/util/loading/load_param.cc
===================================================================
--- trunk/src/util/loading/load_param.cc	(revision 5653)
+++ trunk/src/util/loading/load_param.cc	(revision 5654)
@@ -13,4 +13,6 @@
    co-programmer: ...
 */
+
+#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_LOADING
 
 #include "functor_list.h"
@@ -114,18 +116,27 @@
  * @param executor the Executor, that executes the loading procedure.
  */
-LoadParamBase::LoadParamBase(const TiXmlElement* root, const char* paramName, BaseObject* object, const Executor& executor)
-{
-  this->loadString = grabParameter(root, paramName);
+LoadParamBase::LoadParamBase(const TiXmlElement* root, const char* paramName, BaseObject* object, const Executor& executor, bool inLoadCycle)
+{
   this->paramName = paramName;
   this->object = object;
-  if (root != NULL)
-  {
-    this->executor = executor.clone();
-  }
+  this->inLoadCycle = inLoadCycle;
+
+  // determin the LoadString.
+  if (likely(!inLoadCycle))
+    this->loadString = grabParameter(root, paramName);
   else
   {
-    this->executor = NULL;
+    if (!strcmp(root->Value(), paramName))
+    {
+      const TiXmlNode* val = root->FirstChild();
+      if( val->ToText())
+        this->loadString = val->Value();
+    }
+    else
+      this->loadString = NULL;
   }
 
+  // set the Executor.
+  this->executor = executor.clone();
 }
 
Index: trunk/src/util/loading/load_param.h
===================================================================
--- trunk/src/util/loading/load_param.h	(revision 5653)
+++ trunk/src/util/loading/load_param.h	(revision 5654)
@@ -46,8 +46,40 @@
  */
 #define LoadParamNEW(ROOT, PARAMETER_NAME, OBJECT, CLASS, FUNCTION) \
-         LoadParamBase(ROOT, PARAMETER_NAME, OBJECT, ExecutorObjective<CLASS>(&CLASS::FUNCTION))
+         LoadParamBase(ROOT, PARAMETER_NAME, OBJECT, ExecutorObjective<CLASS>(&CLASS::FUNCTION), false)
+
+#define LoadParam_CYCLE(ROOT, PARAMETER_NAME, OBJECT, CLASS, FUNCTION) \
+         LoadParamBase(ROOT, PARAMETER_NAME, OBJECT, ExecutorObjective<CLASS>(&CLASS::FUNCTION), true)
 
 #define LoadParamXML(ROOT, PARAMETER_NAME, OBJECT, CLASS, FUNCTION) \
-         LoadParamBase(ROOT, PARAMETER_NAME, OBJECT, ExecutorXML<CLASS>(&CLASS::FUNCTION, ROOT, PARAMETER_NAME))
+         LoadParamBase(ROOT, PARAMETER_NAME, OBJECT, ExecutorXML<CLASS>(&CLASS::FUNCTION, ROOT, PARAMETER_NAME), false)
+
+#define LoadParamXML_CYCLE(ROOT, PARAMETER_NAME, OBJECT, CLASS, FUNCTION) \
+         LoadParamBase(ROOT, PARAMETER_NAME, OBJECT, ExecutorXML<CLASS>(&CLASS::FUNCTION, ROOT, PARAMETER_NAME), true)
+
+
+/**
+ * this Starts a Cycle in the Loading Process
+ * be aware, that in the cycle the first parameter of load_param should because
+ * called element, and that you must say true at the Fith parameter, or it will fail
+ * also you will have to close the Cycle again with LOAD_PARAM_END_CYCLE
+ *
+ * @param ROOT The root XLM-element to search element under.
+ * @param ELEMENT the element to search
+ */
+#define LOAD_PARAM_START_CYCLE(ROOT, ELEMENT) \
+  const TiXmlElement* ELEMENT; \
+  ELEMENT= ROOT->FirstChildElement(); \
+  while( ELEMENT != NULL) \
+{
+/**
+   * closes a LoadParam Loop
+   * @see LOAD_PARAM_START_CYCLE
+   * @param ELEMENT the Element to step through.
+ */
+#define LOAD_PARAM_END_CYCLE(ELEMENT) \
+  ELEMENT = ELEMENT->NextSiblingElement(); \
+}
+
+
 
 
@@ -59,5 +91,5 @@
 {
   public:
-    LoadParamBase(const TiXmlElement* root, const char* paramName, BaseObject* object, const Executor& exeutor);
+    LoadParamBase(const TiXmlElement* root, const char* paramName, BaseObject* object, const Executor& executor, bool inLoadCycle = false);
     ~LoadParamBase();
 
@@ -69,5 +101,5 @@
 
   protected:
-    bool                     withLoadString;       //!< If we need the loadString to execute this.
+    bool                     inLoadCycle;
     Executor*                executor;
     BaseObject*              object;
@@ -82,36 +114,4 @@
 };
 
-
-//! macro that makes it even more easy to load a Parameter
-/**
- * @param className the name of the class to load
- * @param parameterName the name of the parameter to load as written in the XML-file
- * @param function the function to call
- */
-#define LOAD_PARAM(className, parameterName, paramFunction) \
-        LoadParam<className>(root, #parameterName, this, &className::paramFunction)
-
-/**
- * this Starts a Cycle in the Loading Process
- * be aware, that in the cycle the first parameter of load_param should because
- * called element, and that you must say true at the Fith parameter, or it will fail
- * also you will have to close the Cycle again with LOAD_PARAM_END_CYCLE
- *
- * @param ROOT The root XLM-element to search element under.
- * @param ELEMENT the element to search
- */
-#define LOAD_PARAM_START_CYCLE(ROOT, ELEMENT) \
-  const TiXmlElement* ELEMENT; \
-  ELEMENT= ROOT->FirstChildElement(); \
-  while( ELEMENT != NULL) \
-  {
-/**
- * closes a LoadParam Loop
- * @see LOAD_PARAM_START_CYCLE
- * @param ELEMENT the Element to step through.
- */
-#define LOAD_PARAM_END_CYCLE(ELEMENT) \
-  ELEMENT = ELEMENT->NextSiblingElement(); \
-  }
 
 
Index: trunk/src/util/track/track_manager.cc
===================================================================
--- trunk/src/util/track/track_manager.cc	(revision 5653)
+++ trunk/src/util/track/track_manager.cc	(revision 5654)
@@ -398,32 +398,33 @@
   double x, y, z, d;
 
-  LOAD_PARAM_START_CYCLE(root, element)
-
-      LoadParam<TrackManager>(element, "WorkOn", this, &TrackManager::workOnS, true)
+  LOAD_PARAM_START_CYCLE(root, element);
+  {
+
+    LoadParam_CYCLE(element, "WorkOn", this, TrackManager, workOnS)
         .describe("Selects a TrackElement (by name) to work on");
 
-      LoadParam<TrackManager>(element, "Point", this, &TrackManager::addPoint, true)
+    LoadParam_CYCLE(element, "Point", this, TrackManager, addPoint)
         .describe("Adds a new Point to the currently selected TrackElement");
 
-      LoadParam<TrackManager>(element, "Duration", this, &TrackManager::setDuration, true)
+    LoadParam_CYCLE(element, "Duration", this, TrackManager, setDuration)
         .describe("Sets the Duration of the currently selected TrackElement");
 
-      LoadParam<TrackManager>(element, "HotPoint", this, &TrackManager::addHotPoint, true)
+    LoadParam_CYCLE(element, "HotPoint", this, TrackManager, addHotPoint)
         .describe("Sets a new Point that acts as a hot point. meaning, the curve will flow through this Point");
 
-      LoadParam<TrackManager>(element, "SavePoint", this, &TrackManager::setSavePointS, true)
+    LoadParam_CYCLE(element, "SavePoint", this, TrackManager, setSavePointS)
         .describe("Sets the current selected Point to a Savepoint, meaning that the curve will be ended and a new one starts, and that one starts again from this point on");
 
-      LoadParam<TrackManager>(element, "Fork", this, &TrackManager::forkS, true)
+    LoadParam_CYCLE(element, "Fork", this, TrackManager, forkS)
         .describe("Forks the Path into multiple forked Path names seperated by ','");
 
-      LoadParam<TrackManager>(element, "Join", this, &TrackManager::joinS, true)
+    LoadParam_CYCLE(element, "Join", this, TrackManager, joinS)
         .describe("Joins multiple joining Path names seperated by ','");
 
       /*
-        if( !strcmp( element->Value(), "Fork"))
-        {
-        container = element->FirstChild();
-        if( container->ToText())
+    if( !strcmp( element->Value(), "Fork"))
+    {
+    container = element->FirstChild();
+    if( container->ToText())
         {
         assert( container->Value() != NULL);
@@ -445,5 +446,6 @@
         }
       */
-      LOAD_PARAM_END_CYCLE(element);
+  }
+  LOAD_PARAM_END_CYCLE(element);
 }
 
