Index: /trunk/FACT++/src/smartfact.cc
===================================================================
--- /trunk/FACT++/src/smartfact.cc	(revision 14109)
+++ /trunk/FACT++/src/smartfact.cc	(revision 14110)
@@ -388,4 +388,6 @@
     string   fMcpConfigurationName;
     Time     fMcpConfigurationRunStart;
+    Time     fMcpConfigurationLastTime;
+    deque<string> fMcpConfigurationHist;
 
     enum weather_t { kWeatherBegin=0, kTemp = kWeatherBegin, kDew, kHum, kPress, kWind, kGusts, kDir, kWeatherEnd = kDir+1 };
@@ -694,11 +696,24 @@
         }
 
-        // If a run ends and no script is running play a tirili
-        if (fMcpConfigurationState==MCP::State::kTakingData && d.GetQoS()==MCP::State::kIdle && fDimControl.state()<-2)
-            SetAudio("sound_10");
-
-        // If a run ends and a script is running just play a simple 'tick'
-        if (fMcpConfigurationState==MCP::State::kTakingData && d.GetQoS()==MCP::State::kIdle && fDimControl.state()>=-2)
-            SetAudio("losticks");
+        if (d.GetTime()>fMcpConfigurationLastTime+boost::posix_time::hours(12))
+            fMcpConfigurationHist.clear();
+
+        // If a run ends...
+        if (fMcpConfigurationState==MCP::State::kTakingData && d.GetQoS()==MCP::State::kIdle)
+        {
+            //...and no script is running just play a simple 'tick'
+            if (fDimControl.state()<-2)
+                SetAudio("sound_10");
+
+            // ...and a script is running just play a simple 'tick'
+            if (fDimControl.state()>=-2)
+                SetAudio("losticks");
+
+            ostringstream out;
+            out << HTML::kBlue << '\t' << d.GetTimeAsStr("%H:%M:%S") << " " << d.Ptr<char>(16);
+            if (!fDriveControlSourceName.empty())
+                out << " [" << fDriveControlSourceName << "]\n";
+            fMcpConfigurationHist.push_back(out.str());
+        }
 
         if (d.GetQoS()==MCP::State::kTakingData)
@@ -706,4 +721,10 @@
             fMcpConfigurationRunStart = Time();
             SetAudio("losticks");
+
+            ostringstream out;
+            out << HTML::kGreen << '\t' << d.GetTimeAsStr("%H:%M:%S") << " " << fMcpConfigurationName << '\n';
+            fMcpConfigurationHist.push_back(out.str());
+            if (!fDriveControlSourceName.empty())
+                out << " [" << fDriveControlSourceName << "]\n";
         }
 
@@ -712,4 +733,12 @@
         fMcpConfigurationMaxEvents = d.Get<uint64_t>(8);
         fMcpConfigurationName      = d.Ptr<char>(16);
+        fMcpConfigurationLastTime  = d.GetTime();
+
+        ostringstream out;
+        out << d.GetJavaDate() << '\n';
+        for (auto it=fMcpConfigurationHist.rbegin(); it!=fMcpConfigurationHist.rend(); it++)
+            out << *it;
+
+        ofstream(fPath+"/observations.txt") << out.str();
 
         return GetCurrentState();
