Index: trunk/FACT++/src/feedback.cc
===================================================================
--- trunk/FACT++/src/feedback.cc	(revision 12346)
+++ trunk/FACT++/src/feedback.cc	(revision 12347)
@@ -58,4 +58,13 @@
     };
 
+    enum control_t
+    {
+        kIdle,
+        kTemp,
+        kFeedback
+    };
+
+    control_t fControlType;
+
     PixelMap fMap;
 
@@ -72,6 +81,6 @@
     DimStampedInfo fBias;
 
-    DimStampedInfo *fBiasData;
-    DimStampedInfo *fCameraTemp;
+    DimStampedInfo fBiasData;
+    DimStampedInfo fCameraTemp;
 
     DimDescribedService fDimReference;
@@ -164,5 +173,5 @@
         }
 
-        if (curr==fCameraTemp)
+        if (curr==&fCameraTemp)
         {
             if (curr->getSize()==0)
@@ -194,4 +203,7 @@
                 vec[i+416] = diff;
 
+            if (fControlType!=kTemp)
+                return;
+
             fDimDeviation.Update(vec);
 
@@ -206,5 +218,5 @@
         }
 
-        if (curr==fBiasData)
+        if (curr==&fBiasData && fControlType==kFeedback)
         {
             if (curr->getSize()==0)
@@ -400,5 +412,5 @@
 
                             for (int i=0; i<BIAS::kNumChannels; i++)
-                                vec[i+416] = correction[i];
+                                vec[i+416] = avg[i]<5*2.5 ? 0 : correction[i];
 
                             fDimDeviation.Update(vec);
@@ -529,7 +541,7 @@
     int StartFeedback()
     {
-        fBiasData = new DimStampedInfo("FAD_CONTROL/FEEDBACK_DATA", (void*)NULL, 0, this);
-
         ResetData();
+
+        fControlType = kFeedback;
 
         return GetCurrentState();
@@ -540,7 +552,4 @@
         if (!CheckEventSize(evt.GetSize(), "StartTempCtrl", 4))
             return kSM_FatalError;
-
-        fBiasOffset = evt.GetFloat();
-        fCameraTemp = new DimStampedInfo("FSC_CONTROL/TEMPERATURE", (void*)NULL, 0, this);
 
         ostringstream out;
@@ -548,4 +557,7 @@
         Message(out);
 
+        fBiasOffset = evt.GetFloat();
+        fControlType = kTemp;
+
         return GetCurrentState();
     }
@@ -553,15 +565,5 @@
     int StopFeedback()
     {
-        if (fBiasData)
-        {
-            delete fBiasData;
-            fBiasData = 0;
-        }
-
-        if (fCameraTemp)
-        {
-            delete fCameraTemp;
-            fCameraTemp = 0;
-        }
+        fControlType = kIdle;
 
         return GetCurrentState();
@@ -599,4 +601,5 @@
             return kSM_FatalError;
 
+        /*
         const float val = evt.GetFloat();
         if (!fPV[0].size() && !fPV[1].size() && !fPV[2].size())
@@ -604,5 +607,5 @@
             Warn("No values in memory. Take enough events first!");
             return GetCurrentState();
-        }
+        }*/
 
         vector<float> vec(BIAS::kNumChannels);
@@ -641,8 +644,8 @@
         // All subsystems are connected
 
-        if (fBiasData)
+        if (fControlType==kFeedback)
             return fOutputEnabled ? kStateFeedbackCtrlRunning : kStateFeedbackCtrlIdle;
 
-        if (fCameraTemp)
+        if (fControlType==kTemp)
             return fOutputEnabled ? kStateTempCtrlRunning : kStateTempCtrlIdle;
 
@@ -659,5 +662,6 @@
         fFSC("FSC_CONTROL/STATE",       (void*)NULL, 0, this),
         fBias("BIAS_CONTROL/STATE",     (void*)NULL, 0, this),
-        fBiasData(0), fCameraTemp(0),
+        fBiasData("FAD_CONTROL/FEEDBACK_DATA", (void*)NULL, 0, this),
+        fCameraTemp("FSC_CONTROL/TEMPERATURE", (void*)NULL, 0, this),
         fDimReference("FEEDBACK/REFERENCE", "F:416",        ""),
         fDimDeviation("FEEDBACK/DEVIATION", "F:416;F:416",  ""),
