Index: trunk/FACT++/src/feedback.cc
===================================================================
--- trunk/FACT++/src/feedback.cc	(revision 13477)
+++ trunk/FACT++/src/feedback.cc	(revision 13479)
@@ -776,4 +776,5 @@
             const float *ptr = reinterpret_cast<float*>(fBiasNom.getData());
             fVoltGapd.assign(ptr, ptr+416);
+            Info("Nominal bias voltages received.");
             return;
         }
@@ -1210,4 +1211,5 @@
         fBiasA("BIAS_CONTROL/CURRENT",  (void*)NULL, 0, this),
         fBiasData("FAD_CONTROL/FEEDBACK_DATA", (void*)NULL, 0, this),
+        fBiasNom("BIAS_CONTROL/NOMINAL", (void*)NULL, 0, this),
         fCameraTemp("FSC_CONTROL/TEMPERATURE", (void*)NULL, 0, this),
         fDimReference("FEEDBACK/REFERENCE", "F:416",
Index: trunk/FACT++/src/smartfact.cc
===================================================================
--- trunk/FACT++/src/smartfact.cc	(revision 13477)
+++ trunk/FACT++/src/smartfact.cc	(revision 13479)
@@ -143,5 +143,5 @@
 
         for (int i=0; i<7; i++)
-            out << fMagicWeatherData[i] << '\n';
+            out << "#ffffff\t" << fMagicWeatherData[i] << '\n';
 
         ofstream fout("www/magicweather.txt");
@@ -216,11 +216,11 @@
         out << fDriveControlSourceName << '\n';
         out << setprecision(5);
-        out << ra  << '\n';
-        out << dec << '\n';
+        out << "#ffffff\t" << ra  << '\n';
+        out << "#ffffff\t" << dec << '\n';
         out << setprecision(3);
-        out << woff << '\n';
-        out << wang << '\n';
-
-        ofstream fout("www/drive-source.txt");
+        out << "#ffffff\t" << woff << '\n';
+        out << "#ffffff\t" << wang << '\n';
+            
+        ofstream fout("www/drive.txt");
         fout << out.str();
     }
@@ -392,17 +392,52 @@
             return kStateRunning;
 
+        fLastUpdate=now;
+
         ostringstream out;
         out << uint64_t(nearbyint(now.UnixTime()*1000)) << '\n';
         out << setprecision(3);
 
+        // -------------- System status --------------
+        out << "n/a\n";
+
+        // ------------------ Drive -----------------
+        if (fStatusDriveControl.second>=5)   // Armed, Moving, Tracking
+        {
+            const State rc = fNetwork.GetState("DRIVE_CONTROL", fStatusDriveControl.second);
+            out << "#ffffff\t";
+            out << rc.name << '\t';
+            out << fDriveControlPointingZd  << '\t';
+            out << fDriveControlPointingAz  << '\t';
+            out << fDriveControlTrackingDev << '\t';
+            out << fDriveControlSourceName  << '\n';
+        }
+        else
+            out << "#ffffff\t\t\t\t\t\n";
+
         // --------------- MagicWeather -------------
         if (fStatusMagicWeather.second==3)
         {
-            out << fMagicWeatherData[kTemp]  << '\n';
+            const float diff = fMagicWeatherData[kTemp]-fMagicWeatherData[kDew];
+            string col1 = "#fff8f0";
+            if (diff>0.3)
+                col1="#fffff0";
+            if (diff>0.7)
+                col1="#f0fff0";
+
+            const float wind = fMagicWeatherData[kGusts];
+            string col2 = "#f0fff0";
+            if (wind>35)
+                col2="#fffff0";
+            if (wind>50)
+                col2="#fff8f0";
+
+            out << col1 << "\t";
+            out << fMagicWeatherData[kTemp]  << '\t';
             out << fMagicWeatherData[kDew]   << '\n';
+            out << col2 << "\t";
             out << fMagicWeatherData[kGusts] << '\n';
         }
         else
-            out << "\n\n\n";
+            out << "#ffffff\t\t\n\n";
 
         // --------------- BiasControl -------------
@@ -411,26 +446,21 @@
             fStatusBiasControl.second==9)   // Off
         {
+            string col = fBiasControlVoltageMed>3?"#fff8f0":"#ffffff";
+            if (fBiasControlCurrentMax>280)
+                col = "#fffff0";
+            if (fBiasControlCurrentMax>350)
+                col = "#fff8f0";
+
+            out << col << "\t";
+            out << fBiasControlCurrentMed << '\t';
+            out << fBiasControlCurrentMax << '\t';
             out << fBiasControlVoltageMed << '\n';
-            out << fBiasControlCurrentMed << '\n';
-            out << fBiasControlCurrentMax << '\n';
         }
         else
-            out << "\n\n\n";
-
-        // ------------------ Drive -----------------
-        if (fStatusDriveControl.second>=5)   // Armed, Moving, Tracking
-        {
-            const State rc = fNetwork.GetState("DRIVE_CONTROL", fStatusDriveControl.second);
-            out << rc.name << '\n';
-            out << fDriveControlPointingZd  << '\n';
-            out << fDriveControlPointingAz  << '\n';
-            out << fDriveControlTrackingDev << '\n';
-            out << fDriveControlSourceName  << '\n';
-        }
-        else
-            out << "\n\n\n\n\n";
+            out << "#ffffff\t\t\t\n";
+
 
         // ------------------------------------------
-        ofstream fout("www/status.txt");
+        ofstream fout("www/fact.txt");
         fout << out.str();
 
