Index: trunk/FACT++/src/drivectrl.cc
===================================================================
--- trunk/FACT++/src/drivectrl.cc	(revision 17003)
+++ trunk/FACT++/src/drivectrl.cc	(revision 17004)
@@ -78,5 +78,5 @@
 
 public:
-    virtual void UpdateSource()
+    virtual void UpdateSource(const string & = "", bool = false)
     {
     }
@@ -756,9 +756,11 @@
     }
 
-    void UpdateSource()
-    {
-        const vector<char> empty(6*sizeof(double)+31, 0);
-        fDimSource.setQuality(0);
-        fDimSource.Update(empty);
+    void UpdateSource(const string &name="", bool tracking=false)
+    {
+        vector<char> dat(6*sizeof(double)+31, 0);
+        strncpy(dat.data()+6*sizeof(double), name.c_str(), 30);
+
+        fDimSource.setQuality(tracking);
+        fDimSource.Update(dat);
     }
 
@@ -853,5 +855,5 @@
     }
 
-    int SendCommand(const string &str, bool upd=true)
+    int SendCommand(const string &str)
     {
         // This happens if fLastCommand should be send,
@@ -868,13 +870,20 @@
         T::Message("Sending: "+str);
 
-        if (upd)
-            fDrive.UpdateSource();
-
         return T::GetCurrentState();
     }
 
+    int TrackCelest(const string &cmd, const string &source)
+    {
+        SendCommand(cmd);
+
+        fDrive.UpdateSource(source, true);
+
+        return T::GetCurrentState();
+    }
+
     int Park()
     {
-        SendCommand("PREPS Park", false);
+        SendCommand("PREPS Park");
+        fDrive.UpdateSource("Park");
 
         // FIXME: Go to locked state only when park position properly reached
@@ -882,4 +891,12 @@
     }
 
+    int SendStop()
+    {
+        SendCommand("STOP!");
+        fDrive.UpdateSource();
+
+        return T::GetCurrentState();
+    }
+
     int Resume()
     {
@@ -892,5 +909,5 @@
         
         T::Info("Resume: "+fLastCommand);
-        return SendCommand(fLastCommand, false);
+        return SendCommand(fLastCommand);
     }
 
@@ -916,7 +933,10 @@
             fDrive.UpdateSource(dim);
         }
+        else
+            fDrive.UpdateSource("", false);
+
 
         command += AngleToStr(dat[0]) + ' ' + AngleToStr(dat[1]);
-        return SendCommand(command, type==kPoint);
+        return SendCommand(command);
     }
 
@@ -944,5 +964,5 @@
             string command = "RADEC ";
             command += AngleToStr(srcra) + ' ' + AngleToStr(srcdec);
-            return SendCommand(command, false);
+            return SendCommand(command);
         }
 
@@ -967,5 +987,5 @@
         string command = "RADEC ";
         command += AngleToStr(nra) + ' ' + AngleToStr(ndec);
-        return SendCommand(command, false);
+        return SendCommand(command);
     }
 
@@ -1107,5 +1127,5 @@
             src.erase(src.find_first_of(' '), 1);
 
-        SendCommand("TPOIN "+src+" "+to_string(mag), false);;
+        SendCommand("TPOIN "+src+" "+to_string(mag));;
 
         return T::GetCurrentState();
@@ -1119,7 +1139,5 @@
         const uint32_t *led = evt.Ptr<uint32_t>();
 
-        ostringstream cmd;
-        cmd << "LEDS " << led[0] << " " << led[1];
-        return SendCommand(cmd.str(), false);
+        return SendCommand("LEDS "+to_string(led[0])+" "+to_string(led[1]));
     }
 
@@ -1397,17 +1415,17 @@
 
         T::AddEvent("MOON", State::kArmed, State::kTracking, State::kOnTrack)
-            (bind(&StateMachineDrive::SendCommand, this, "MOON 0 0", true))
+            (bind(&StateMachineDrive::TrackCelest, this, "MOON 0 0", "Moon"))
             ("Start tracking the moon");
         T::AddEvent("VENUS", State::kArmed, State::kTracking, State::kOnTrack)
-            (bind(&StateMachineDrive::SendCommand, this, "CELEST 2 0 0", true))
+            (bind(&StateMachineDrive::TrackCelest, this, "CELEST 2 0 0", "Venus"))
             ("Start tracking Venus");
         T::AddEvent("MARS", State::kArmed, State::kTracking, State::kOnTrack)
-            (bind(&StateMachineDrive::SendCommand, this, "CELEST 4 0 0", true))
+            (bind(&StateMachineDrive::TrackCelest, this, "CELEST 4 0 0", "Mars"))
             ("Start tracking Mars");
         T::AddEvent("JUPITER", State::kArmed, State::kTracking, State::kOnTrack)
-            (bind(&StateMachineDrive::SendCommand, this, "CELEST 5 0 0", true))
+            (bind(&StateMachineDrive::TrackCelest, this, "CELEST 5 0 0", "Jupiter"))
             ("Start tracking Jupiter");
         T::AddEvent("SATURN", State::kArmed, State::kTracking, State::kOnTrack)
-            (bind(&StateMachineDrive::SendCommand, this, "CELEST 6 0 0", true))
+            (bind(&StateMachineDrive::TrackCelest, this, "CELEST 6 0 0", "Saturn"))
             ("Start tracking Saturn");
 
@@ -1417,5 +1435,5 @@
 
         T::AddEvent("TAKE_TPOINT")
-            (bind(&StateMachineDrive::SendCommand, this, "TPOIN FACT 0", false))
+            (bind(&StateMachineDrive::SendCommand, this, "TPOIN FACT 0"))
             ("Take a TPoint");
 
@@ -1433,9 +1451,9 @@
 
         T::AddEvent("LEDS_OFF")
-            (bind(&StateMachineDrive::SendCommand, this, "LEDS 0 0", false))
+            (bind(&StateMachineDrive::SendCommand, this, "LEDS 0 0"))
             ("Switch off TPoint LEDs");
 
         T::AddEvent("STOP")
-            (bind(&StateMachineDrive::SendCommand, this, "STOP!", true))
+            (bind(&StateMachineDrive::SendStop, this))
             ("Stop any kind of movement.");
 
