Index: branches/atorf/NXC/MotorControl2/ControllerCore.nxc
===================================================================
--- branches/atorf/NXC/MotorControl2/ControllerCore.nxc	(revision 658)
+++ branches/atorf/NXC/MotorControl2/ControllerCore.nxc	(revision 663)
@@ -135,9 +135,21 @@
 //     * tacholimit already...
 
-    // do not yet enable speedreg
+
+    //TODO why exactly do we only power up to +/-1 here? couldn't it be full speed already?
+    // maybe it's because for speed monitor initialization, we use TachoCount and need it to remain
+    // constant etc?
     #ifdef RUNMOTOR2_SYNCMODE
+        //avoid already synced motors (that doesn't work as we know...)
+        until((MotorRegulation(port) == OUT_REGMODE_IDLE) && (MotorRegulation(port2) == OUT_REGMODE_IDLE)) {
+            // repeatedly setting this is not nice, but so
+            // we don't need a timeout...!
+            MotorOff(port);
+            MotorOff(port2);
+            // make sure VM applies our settings
+            Wait(1);
+        }//end until
         MotorCmdDoubleReset(port, powerSgn, tacholimit, port2);
     #else
-        MotorCmdSingleReset(port, powerSgn, tacholimit, false);
+        MotorCmdSingleReset(port, powerSgn, tacholimit, speedreg);
     #endif
     
@@ -241,10 +253,11 @@
 //      - direct command stopped us?
         // this is like an emergency-check to see if endgame should be enabled?
-        //TODO seems obsolete!
+        //TODO do we need this below?
+        /*
         if ( abs(tachoTarget - MotorTachoCount(port)) >= 2 ) {
             // we are almost already there :-)
             // or even too far :-/
         }//end if
-
+        */
         
         if ( MotorPower(port) == 0 ) {
@@ -291,9 +304,13 @@
                 // when rampup is done
                 if (rampupLoopCount >= SMOOTHSTARTSTEPS) {
-                    UpdatePower(port, power);
-                    #ifdef RUNMOTOR2_SYNCMODE
-                        UpdatePower(port2, power);
-                    #endif
-                    if (speedreg) { EnableSpeedRegWhithMotorOn(port); }
+                    if (speedreg) {
+                        //there's no speedreg for synced driving...
+                        UpdatePowerAndEnableSpeedReg(port, power);
+                    } else {
+                        UpdatePower(port, power);
+                        #ifdef RUNMOTOR2_SYNCMODE
+                            UpdatePower(port2, power);
+                        #endif
+                    }//end if
                     curStage = STAGE_DRIVING;
                 } else {
@@ -302,9 +319,13 @@
                     // if power < 100 we might be done sooner:
                     if (newPower > absPower) {
-                        UpdatePower(port, power);
-                        #ifdef RUNMOTOR2_SYNCMODE
-                            UpdatePower(port2, power);
-                        #endif
-                        if (speedreg) { EnableSpeedRegWhithMotorOn(port); }
+                        if (speedreg) {
+                            //there's no speedreg for synced driving...
+                            UpdatePowerAndEnableSpeedReg(port, power);
+                        } else {
+                            UpdatePower(port, power);
+                            #ifdef RUNMOTOR2_SYNCMODE
+                                UpdatePower(port2, power);
+                            #endif
+                        }//end if
                         curStage = STAGE_DRIVING;
                     } else {
@@ -320,10 +341,14 @@
             
                 // full power right away
-                UpdatePower(port, power);
-                #ifdef RUNMOTOR2_SYNCMODE
-                    UpdatePower(port2, power);
-                #endif
-                //there's no speedreg for synced driving...
-                if (speedreg) { EnableSpeedRegWhithMotorOn(port); }
+                if (speedreg) {
+                    //there's no speedreg for synced driving...
+                    UpdatePowerAndEnableSpeedReg(port, power);
+                } else {
+                    UpdatePower(port, power);
+                    #ifdef RUNMOTOR2_SYNCMODE
+                        UpdatePower(port2, power);
+                    #endif
+                }//end if
+
                 curStage = STAGE_DRIVING;
                 
