Index: /trunk/FACT++/gui/FactGui.h
===================================================================
--- /trunk/FACT++/gui/FactGui.h	(revision 13483)
+++ /trunk/FACT++/gui/FactGui.h	(revision 13484)
@@ -45,319 +45,118 @@
 // #########################################################################
 
-/*
-class Camera : public TObject
+class DimSubscriptions
 {
-    typedef pair<double,double> Position;
-    typedef vector<Position> Positions;
-
-    Positions fGeom;
-
-    void CreatePalette()
-    {
-
-        double ss[5] = {0.00, 0.25, 0.50, 0.75, 1.00};
-        double rr[5] = {0.15, 0.00, 0.00, 1.00, 0.85};
-        double gg[5] = {0.15, 0.00, 1.00, 0.00, 0.85};
-        double bb[5] = {0.15, 1.00, 0.00, 0.00, 0.85};
-
-        const Int_t nn = 1440;
-
-        Int_t idx = TColor::CreateGradientColorTable(5, ss, rr, gg, bb, nn);
-        for (int i=0; i<nn; i++)
-            fPalette.push_back(idx++);
-    }
-
-    void CreateGeometry()
-    {
-        const double gsSin60 = sqrt(3.)/2;
-
-        const int rings = 23;
-
-        //  add the first pixel to the list
-
-        fGeom.push_back(make_pair(0, -0.5));
-
-        for (int ring=1; ring<=rings; ring++)
-        {
-            for (int s=0; s<6; s++)
-            {
-                for (int i=1; i<=ring; i++)
-                {
-                    double xx, yy;
-                    switch (s)
-                    {
-                    case 0: // Direction South East
-                        xx = (ring+i)*0.5;
-                        yy = (-ring+i)*gsSin60;
-                        break;
-
-                    case 1: // Direction North East
-                        xx = ring-i*0.5;
-                        yy = i*gsSin60;
-                        break;
-
-                    case 2: // Direction North
-                        xx = ring*0.5-i;
-                        yy = ring*gsSin60;
-                        break;
-
-                    case 3: // Direction North West
-                        xx = -(ring+i)*0.5;
-                        yy = (ring-i)*gsSin60;
-                        break;
-
-                    case 4: // Direction South West
-                        xx = 0.5*i-ring;
-                        yy = -i*gsSin60;
-                        break;
-
-                    case 5: // Direction South
-                        xx = i-ring*0.5;
-                        yy = -ring*gsSin60;
-                        break;
-                    }
-
-                    if (xx*xx + yy*yy - xx > 395.75)
-                        continue;
-
-                    fGeom.push_back(make_pair(yy, xx-0.5));
-                }
-            }
-        }
-    }
-
-    valarray<double> fData;
-    vector<bool>   fBold;
-    vector<bool>   fEnable;
-
-    int fWhite;
-
-    int64_t fMin;
-    int64_t fMax;
-
 public:
-    Camera() : fData(1440), fBold(1440), fEnable(1440), fWhite(-1), fMin(-1), fMax(-1)
-    {
-        CreatePalette();
-        CreateGeometry();
-
-	for (int i=0; i<1440; i++)
-	{
-	    fData[i] = i;
-	    fBold[i]=false;
-	    fEnable[i]=true;
-	}
-    }
-
-    void Reset() { fBold.assign(1440, false); }
-
-    void SetBold(int idx) { fBold[idx]=true; }
-    void SetWhite(int idx) { fWhite=idx; }
-    void SetEnable(int idx, bool b) { fEnable[idx]=b; }
-    void Toggle(int idx) { fEnable[idx]=!fEnable[idx]; }
-    double GetData(int idx) const { return fData[idx]; }
-    void SetMin(int64_t min) { fMin=min; }
-    void SetMax(int64_t max) { fMax=max; }
-
-    const char *GetName() const { return "Camera"; }
-
-    vector<Int_t> fPalette;
-
-    void Paint(const Position &p)
-    {
-        static const Double_t fgCos60 = 0.5;        // TMath::Cos(60/TMath::RadToDeg());
-        static const Double_t fgSin60 = sqrt(3.)/2; // TMath::Sin(60/TMath::RadToDeg());
-
-        static const Double_t fgDy[6] = { fgCos60,   0.,         -fgCos60,   -fgCos60,    0.,           fgCos60   };
-        static const Double_t fgDx[6] = { fgSin60/3, fgSin60*2/3, fgSin60/3, -fgSin60/3, -fgSin60*2/3, -fgSin60/3 };
-
-        //
-        //  calculate the positions of the pixel corners
-        //
-        static Double_t x[7], y[7];
-        for (Int_t i=0; i<7; i++)
-        {
-            x[i] = p.first  + fgDx[i%6];
-            y[i] = p.second + fgDy[i%6];
-        }
-
-        gPad->PaintFillArea(6, x, y);
-        gPad->PaintPolyLine(7, x, y);
-    }
-
-    int GetCol(double dmin, double val, double dmax, bool enable)
-    {
-        if (!enable)
-            return kWhite;
-
-        if (val<dmin)
-            return kBlue+4;//kBlack;
-
-        if (val>dmax)
-            return kRed+4;//kWhite;
-
-        const double min   = dmin;
-        const double scale = dmax==dmin ? 1 : dmax-dmin;
-
-        const int col = (val-min)/scale*(fPalette.size()-1);
-
-        return gStyle->GetColorPalette(col);
-    }
-
-    void Paint(Option_t *)
-    {
-        gStyle->SetPalette(fPalette.size(), fPalette.data());
-
-        const double r   = double(gPad->GetWw())/gPad->GetWh();
-        const double max = 20.5; // 20.5 rings in x and y
-
-        if (r>1)
-            gPad->Range(-r*max, -max, r*max, max);
-        else
-            gPad->Range(-max, -max/r, max, max/r);
-
-        Double_t x1, x2, y1, y2;
-        gPad->GetRange(x1, x2, y1, y2);
-
-        double dmin = fData[0];
-        double dmax = fData[0];
-
-        for (unsigned int i=0; i<fData.size(); i++)
-        {
-            if (!fEnable[i])
-                continue;
-
-            if (fData[i]>dmax)
-                dmax = fData[i];
-            if (fData[i]<dmin)
-                dmin = fData[i];
-        }
-
-        if (fMin>=0)
-            dmin = fMin;
-        if (fMax>=0)
-            dmax = fMax;
-
-//        const double min   = dmin;
-//        const double scale = dmax==dmin ? 1 : dmax-dmin;
-
-        TAttFill fill(0, 1001);
-        TAttLine line;
-
-        int cnt=0;
-        for (Positions::iterator p=fGeom.begin(); p!=fGeom.end(); p++, cnt++)
-        {
-            if (fBold[cnt])
-                continue;
-
-            const int col = GetCol(dmin, fData[cnt], dmax, fEnable[cnt]);
-
-            fill.SetFillColor(col);
-            fill.Modify();
-
-            Paint(*p);
-	}
-
-        line.SetLineWidth(2);
-        line.Modify();
-
-        cnt = 0;
-        for (Positions::iterator p=fGeom.begin(); p!=fGeom.end(); p++, cnt++)
-        {
-            if (!fBold[cnt])
-                continue;
-
-            const int col = GetCol(dmin, fData[cnt], dmax, fEnable[cnt]);
-
-            fill.SetFillColor(col);
-            fill.Modify();
-
-            Paint(*p);
-        }
-
-        TMarker m(0,0,kStar);
-        m.DrawMarker(0, 0);
-
-        if (fWhite<0)
-            return;
-
-        const Position &p = fGeom[fWhite];
-
-        line.SetLineColor(kWhite);
-        line.Modify();
-
-        const int col = GetCol(dmin, fData[fWhite], dmax, fEnable[fWhite]);
-
-        fill.SetFillColor(col);
-        fill.Modify();
-
-        Paint(p);
-    }
-
-    int GetIdx(float px, float py) const
-    {
-        static const double sqrt3 = sqrt(3);
-
-        int idx = 0;
-        for (Positions::const_iterator p=fGeom.begin(); p!=fGeom.end(); p++, idx++)
-        {
-            const Double_t dy = py - p->second;
-            if (fabs(dy)>0.5)
-                continue;
-
-            const Double_t dx = px - p->first;
-
-            if  (TMath::Abs(dy + dx*sqrt3) > 1)
-                continue;
-
-            if  (TMath::Abs(dy - dx*sqrt3) > 1)
-                continue;
-
-            return idx;
-        }
-        return -1;
-    }
-
-    char *GetObjectInfo(Int_t px, Int_t py) const
-    {
-        static stringstream stream;
-        static string       str;
-
-        const float x = gPad->AbsPixeltoX(px);
-        const float y = gPad->AbsPixeltoY(py);
-
-        const int idx = GetIdx(x, y);
-
-        stream.seekp(0);
-        if (idx>=0)
-        {
-            stream << "Pixel=" << idx << "   Data=" << fData[idx] << '\0';
-        }
-
-        str = stream.str();
-        return const_cast<char*>(str.c_str());
-    }
-
-    Int_t DistancetoPrimitive(Int_t px, Int_t py)
-    {
-        const float x = gPad->AbsPixeltoX(px);
-        const float y = gPad->AbsPixeltoY(py);
-
-        return GetIdx(x, y)>=0 ? 0 : 99999;
-    }
-
-    void SetData(const valarray<double> &data)
-    {
-        fData = data;
-    }
-
-    void SetData(const float *data)
-    {
-        for (int i=0; i<1440; i++)
-            fData[i] = data[i];
-    }
+    DimStampedInfo fDNS;
+
+    DimStampedInfo fLoggerStats;
+    DimStampedInfo fLoggerFilenameNight;
+    DimStampedInfo fLoggerFilenameRun;
+    DimStampedInfo fLoggerNumSubs;
+
+    DimStampedInfo fFtmPassport;
+    DimStampedInfo fFtmTriggerRates;
+    DimStampedInfo fFtmError;
+    DimStampedInfo fFtmFtuList;
+    DimStampedInfo fFtmStaticData;
+    DimStampedInfo fFtmDynamicData;
+    DimStampedInfo fFtmCounter;
+
+    DimStampedInfo fFadWriteStats;
+    DimStampedInfo fFadStartRun;
+    DimStampedInfo fFadRuns;
+    DimStampedInfo fFadEvents;
+    DimStampedInfo fFadRawData;
+    DimStampedInfo fFadEventData;
+    DimStampedInfo fFadConnections;
+    DimStampedInfo fFadFwVersion;
+    DimStampedInfo fFadRunNumber;
+    DimStampedInfo fFadDNA;
+    DimStampedInfo fFadTemperature;
+    DimStampedInfo fFadPrescaler;
+    DimStampedInfo fFadRefClock;
+    DimStampedInfo fFadRoi;
+    DimStampedInfo fFadDac;
+    DimStampedInfo fFadDrsCalibration;
+    DimStampedInfo fFadStatus;
+    DimStampedInfo fFadStatistics1;
+    DimStampedInfo fFadStatistics2;
+    DimStampedInfo fFadFileFormat;
+
+    DimStampedInfo fFscTemp;
+    DimStampedInfo fFscVolt;
+    DimStampedInfo fFscCurrent;
+    DimStampedInfo fFscHumidity;
+
+    DimStampedInfo fFeedbackDeviation;
+    DimStampedInfo fFeedbackReference;
+    DimStampedInfo fFeedbackCalibration;
+
+    DimStampedInfo fBiasNominal;
+    DimStampedInfo fBiasVolt;
+    DimStampedInfo fBiasDac;
+    DimStampedInfo fBiasCurrent;
+
+    DimStampedInfo fRateScan;
+
+    DimStampedInfo fMagicWeather;
+
+    DimSubscriptions(DimInfoHandler *ptr) :
+        fDNS("DIS_DNS/VERSION_NUMBER", 1, int(0), ptr),
+        //-
+        fLoggerStats        ("DATA_LOGGER/STATS",              (void*)NULL, 0, ptr),
+        fLoggerFilenameNight("DATA_LOGGER/FILENAME_NIGHTLY",   (void*)NULL, 0, ptr),
+        fLoggerFilenameRun  ("DATA_LOGGER/FILENAME_RUN",       (void*)NULL, 0, ptr),
+        fLoggerNumSubs      ("DATA_LOGGER/NUM_SUBS",           (void*)NULL, 0, ptr),
+        //-
+        fFtmPassport        ("FTM_CONTROL/PASSPORT",           (void*)NULL, 0, ptr),
+        fFtmTriggerRates    ("FTM_CONTROL/TRIGGER_RATES",      (void*)NULL, 0, ptr),
+        fFtmError           ("FTM_CONTROL/ERROR",              (void*)NULL, 0, ptr),
+        fFtmFtuList         ("FTM_CONTROL/FTU_LIST",           (void*)NULL, 0, ptr),
+        fFtmStaticData      ("FTM_CONTROL/STATIC_DATA",        (void*)NULL, 0, ptr),
+        fFtmDynamicData     ("FTM_CONTROL/DYNAMIC_DATA",       (void*)NULL, 0, ptr),
+        fFtmCounter         ("FTM_CONTROL/COUNTER",            (void*)NULL, 0, ptr),
+        //-
+        fFadWriteStats      ("FAD_CONTROL/STATS",              (void*)NULL, 0, ptr),
+        fFadStartRun        ("FAD_CONTROL/START_RUN",          (void*)NULL, 0, ptr),
+        fFadRuns            ("FAD_CONTROL/RUNS",               (void*)NULL, 0, ptr),
+        fFadEvents          ("FAD_CONTROL/EVENTS",             (void*)NULL, 0, ptr),
+        fFadRawData         ("FAD_CONTROL/RAW_DATA",           (void*)NULL, 0, ptr),
+        fFadEventData       ("FAD_CONTROL/EVENT_DATA",         (void*)NULL, 0, ptr),
+        fFadConnections     ("FAD_CONTROL/CONNECTIONS",        (void*)NULL, 0, ptr),
+        fFadFwVersion       ("FAD_CONTROL/FIRMWARE_VERSION",   (void*)NULL, 0, ptr),
+        fFadRunNumber       ("FAD_CONTROL/RUN_NUMBER",         (void*)NULL, 0, ptr),
+        fFadDNA             ("FAD_CONTROL/DNA",                (void*)NULL, 0, ptr),
+        fFadTemperature     ("FAD_CONTROL/TEMPERATURE",        (void*)NULL, 0, ptr),
+        fFadPrescaler       ("FAD_CONTROL/PRESCALER",          (void*)NULL, 0, ptr),
+        fFadRefClock        ("FAD_CONTROL/REFERENCE_CLOCK",    (void*)NULL, 0, ptr),
+        fFadRoi             ("FAD_CONTROL/REGION_OF_INTEREST", (void*)NULL, 0, ptr),
+        fFadDac             ("FAD_CONTROL/DAC",                (void*)NULL, 0, ptr),
+        fFadDrsCalibration  ("FAD_CONTROL/DRS_CALIBRATION",    (void*)NULL, 0, ptr),
+        fFadStatus          ("FAD_CONTROL/STATUS",             (void*)NULL, 0, ptr),
+        fFadStatistics1     ("FAD_CONTROL/STATISTICS1",        (void*)NULL, 0, ptr),
+        fFadStatistics2     ("FAD_CONTROL/STATISTICS2",        (void*)NULL, 0, ptr),
+        fFadFileFormat      ("FAD_CONTROL/FILE_FORMAT",        (void*)NULL, 0, ptr),
+        //-
+        fFscTemp            ("FSC_CONTROL/TEMPERATURE",        (void*)NULL, 0, ptr),
+        fFscVolt            ("FSC_CONTROL/VOLTAGE",            (void*)NULL, 0, ptr),
+        fFscCurrent         ("FSC_CONTROL/CURRENT",            (void*)NULL, 0, ptr),
+        fFscHumidity        ("FSC_CONTROL/HUMIDITY",           (void*)NULL, 0, ptr),
+        //-
+        fFeedbackDeviation  ("FEEDBACK/DEVIATION",             (void*)NULL, 0, ptr),
+        fFeedbackReference  ("FEEDBACK/REFERENCE",             (void*)NULL, 0, ptr),
+        fFeedbackCalibration("FEEDBACK/CALIBRATION",           (void*)NULL, 0, ptr),
+        //-
+        fBiasNominal        ("BIAS_CONTROL/NOMINAL",           (void*)NULL, 0, ptr),
+        fBiasVolt           ("BIAS_CONTROL/VOLTAGE",           (void*)NULL, 0, ptr),
+        fBiasDac            ("BIAS_CONTROL/DAC",               (void*)NULL, 0, ptr),
+        fBiasCurrent        ("BIAS_CONTROL/CURRENT",           (void*)NULL, 0, ptr),
+        //-
+        fRateScan           ("RATE_SCAN/DATA",                 (void*)NULL, 0, ptr),
+        //-
+        fMagicWeather       ("MAGIC_WEATHER/DATA",             (void*)NULL, 0, ptr)
+        {
+        }
 };
-*/
-// #########################################################################
 
 class FactGui : public MainWindow, public DimNetwork
@@ -387,59 +186,7 @@
     bool fInChooseBiasCam;   // FIXME. Find a better solution
 
-    DimStampedInfo fDimDNS;
-
-    DimStampedInfo fDimLoggerStats;
-    DimStampedInfo fDimLoggerFilenameNight;
-    DimStampedInfo fDimLoggerFilenameRun;
-    DimStampedInfo fDimLoggerNumSubs;
-
-    DimStampedInfo fDimFtmPassport;
-    DimStampedInfo fDimFtmTriggerRates;
-    DimStampedInfo fDimFtmError;
-    DimStampedInfo fDimFtmFtuList;
-    DimStampedInfo fDimFtmStaticData;
-    DimStampedInfo fDimFtmDynamicData;
-    DimStampedInfo fDimFtmCounter;
-
-    DimStampedInfo fDimFadWriteStats;
-    DimStampedInfo fDimFadStartRun;
-    DimStampedInfo fDimFadRuns;
-    DimStampedInfo fDimFadEvents;
-    DimStampedInfo fDimFadRawData;
-    DimStampedInfo fDimFadEventData;
-    DimStampedInfo fDimFadConnections;
-    DimStampedInfo fDimFadFwVersion;
-    DimStampedInfo fDimFadRunNumber;
-    DimStampedInfo fDimFadDNA;
-    DimStampedInfo fDimFadTemperature;
-    DimStampedInfo fDimFadPrescaler;
-    DimStampedInfo fDimFadRefClock;
-    DimStampedInfo fDimFadRoi;
-    DimStampedInfo fDimFadDac;
-    DimStampedInfo fDimFadDrsCalibration;
-    DimStampedInfo fDimFadStatus;
-    DimStampedInfo fDimFadStatistics1;
-    DimStampedInfo fDimFadStatistics2;
-    DimStampedInfo fDimFadFileFormat;
-
-    DimStampedInfo fDimFscTemp;
-    DimStampedInfo fDimFscVolt;
-    DimStampedInfo fDimFscCurrent;
-    DimStampedInfo fDimFscHumidity;
-
-    DimStampedInfo fDimFeedbackDeviation;
-    DimStampedInfo fDimFeedbackReference;
-    DimStampedInfo fDimFeedbackCalibration;
-
-    DimStampedInfo fDimBiasNominal;
-    DimStampedInfo fDimBiasVolt;
-    DimStampedInfo fDimBiasDac;
-    DimStampedInfo fDimBiasCurrent;
-
-    DimStampedInfo fDimRateScan;
-
-    DimStampedInfo fDimMagicWeather;
-
     map<string, DimInfo*> fServices;
+
+    DimSubscriptions *fDim;
 
     // ========================== LED Colors ================================
@@ -3347,10 +3094,10 @@
             getInfo()->getTimestamp();
 
-        if (getInfo()==&fDimDNS)
+        if (getInfo()==&fDim->fDNS)
             return PostInfoHandler(&FactGui::handleDimDNS);
 #ifdef DEBUG_DIM
         cout << "HandleDimInfo " << getInfo()->getName() << endl;
 #endif
-        if (getInfo()==&fDimLoggerStats)
+        if (getInfo()==&fDim->fLoggerStats)
             return PostInfoHandler(&FactGui::handleLoggerStats);
 
@@ -3358,62 +3105,62 @@
 //            return PostInfoHandler(&FactGui::handleFadFiles);
 
-        if (getInfo()==&fDimFadWriteStats)
+        if (getInfo()==&fDim->fFadWriteStats)
             return PostInfoHandler(&FactGui::handleFadWriteStats);
 
-        if (getInfo()==&fDimFadConnections)
+        if (getInfo()==&fDim->fFadConnections)
             return PostInfoHandler(&FactGui::handleFadConnections);
 
-        if (getInfo()==&fDimFadFwVersion)
+        if (getInfo()==&fDim->fFadFwVersion)
             return PostInfoHandler(&FactGui::handleFadFwVersion);
 
-        if (getInfo()==&fDimFadRunNumber)
+        if (getInfo()==&fDim->fFadRunNumber)
             return PostInfoHandler(&FactGui::handleFadRunNumber);
 
-        if (getInfo()==&fDimFadDNA)
+        if (getInfo()==&fDim->fFadDNA)
             return PostInfoHandler(&FactGui::handleFadDNA);
 
-        if (getInfo()==&fDimFadTemperature)
+        if (getInfo()==&fDim->fFadTemperature)
             return PostInfoHandler(&FactGui::handleFadTemperature);
 
-        if (getInfo()==&fDimFadRefClock)
+        if (getInfo()==&fDim->fFadRefClock)
             return PostInfoHandler(&FactGui::handleFadRefClock);
 
-	if (getInfo()==&fDimFadRoi)
+	if (getInfo()==&fDim->fFadRoi)
             return PostInfoHandler(&FactGui::handleFadRoi);
 
-        if (getInfo()==&fDimFadDac)
+        if (getInfo()==&fDim->fFadDac)
             return PostInfoHandler(&FactGui::handleFadDac);
 
-        if (getInfo()==&fDimFadDrsCalibration)
+        if (getInfo()==&fDim->fFadDrsCalibration)
             return PostInfoHandler(&FactGui::handleFadDrsCalibration);
 
-        if (getInfo()==&fDimFadPrescaler)
+        if (getInfo()==&fDim->fFadPrescaler)
             return PostInfoHandler(&FactGui::handleFadPrescaler);
 
-        if (getInfo()==&fDimFadStatus)
+        if (getInfo()==&fDim->fFadStatus)
             return PostInfoHandler(&FactGui::handleFadStatus);
 
-        if (getInfo()==&fDimFadStatistics1)
+        if (getInfo()==&fDim->fFadStatistics1)
             return PostInfoHandler(&FactGui::handleFadStatistics1);
 
-        if (getInfo()==&fDimFadStatistics2)
+        if (getInfo()==&fDim->fFadStatistics2)
             return PostInfoHandler(&FactGui::handleFadStatistics2);
 
-        if (getInfo()==&fDimFadFileFormat)
+        if (getInfo()==&fDim->fFadFileFormat)
             return PostInfoHandler(&FactGui::handleFadFileFormat);
 
-        if (getInfo()==&fDimFadEvents)
+        if (getInfo()==&fDim->fFadEvents)
             return PostInfoHandler(&FactGui::handleFadEvents);
 
-        if (getInfo()==&fDimFadRuns)
+        if (getInfo()==&fDim->fFadRuns)
             return PostInfoHandler(&FactGui::handleFadRuns);
 
-        if (getInfo()==&fDimFadStartRun)
+        if (getInfo()==&fDim->fFadStartRun)
             return PostInfoHandler(&FactGui::handleFadStartRun);
 
-	if (getInfo()==&fDimFadRawData)
+	if (getInfo()==&fDim->fFadRawData)
             return PostInfoHandler(&FactGui::handleFadRawData);
 
-        if (getInfo()==&fDimFadEventData)
+        if (getInfo()==&fDim->fFadEventData)
             return PostInfoHandler(&FactGui::handleFadEventData);
 
@@ -3422,71 +3169,71 @@
             return PostInfoHandler(&FactGui::handleFadSetup);
 */
-        if (getInfo()==&fDimLoggerFilenameNight)
+        if (getInfo()==&fDim->fLoggerFilenameNight)
             return PostInfoHandler(&FactGui::handleLoggerFilenameNight);
 
-        if (getInfo()==&fDimLoggerNumSubs)
+        if (getInfo()==&fDim->fLoggerNumSubs)
             return PostInfoHandler(&FactGui::handleLoggerNumSubs);
 
-        if (getInfo()==&fDimLoggerFilenameRun)
+        if (getInfo()==&fDim->fLoggerFilenameRun)
             return PostInfoHandler(&FactGui::handleLoggerFilenameRun);
 
-        if (getInfo()==&fDimFtmTriggerRates)
+        if (getInfo()==&fDim->fFtmTriggerRates)
             return PostInfoHandler(&FactGui::handleFtmTriggerRates);
 
-        if (getInfo()==&fDimFtmCounter)
+        if (getInfo()==&fDim->fFtmCounter)
             return PostInfoHandler(&FactGui::handleFtmCounter);
 
-        if (getInfo()==&fDimFtmDynamicData)
+        if (getInfo()==&fDim->fFtmDynamicData)
             return PostInfoHandler(&FactGui::handleFtmDynamicData);
 
-        if (getInfo()==&fDimFtmPassport)
+        if (getInfo()==&fDim->fFtmPassport)
             return PostInfoHandler(&FactGui::handleFtmPassport);
 
-        if (getInfo()==&fDimFtmFtuList)
+        if (getInfo()==&fDim->fFtmFtuList)
             return PostInfoHandler(&FactGui::handleFtmFtuList);
 
-        if (getInfo()==&fDimFtmStaticData)
+        if (getInfo()==&fDim->fFtmStaticData)
             return PostInfoHandler(&FactGui::handleFtmStaticData);
 
-        if (getInfo()==&fDimFtmError)
+        if (getInfo()==&fDim->fFtmError)
             return PostInfoHandler(&FactGui::handleFtmError);
 
-        if (getInfo()==&fDimFscTemp)
+        if (getInfo()==&fDim->fFscTemp)
             return PostInfoHandler(&FactGui::handleFscTemp);
 
-        if (getInfo()==&fDimFscVolt)
+        if (getInfo()==&fDim->fFscVolt)
             return PostInfoHandler(&FactGui::handleFscVolt);
 
-        if (getInfo()==&fDimFscCurrent)
+        if (getInfo()==&fDim->fFscCurrent)
             return PostInfoHandler(&FactGui::handleFscCurrent);
 
-        if (getInfo()==&fDimFscHumidity)
+        if (getInfo()==&fDim->fFscHumidity)
             return PostInfoHandler(&FactGui::handleFscHumidity);
 
-        if (getInfo()==&fDimBiasNominal)
+        if (getInfo()==&fDim->fBiasNominal)
             return PostInfoHandler(&FactGui::handleBiasNominal);
 
-        if (getInfo()==&fDimBiasVolt)
+        if (getInfo()==&fDim->fBiasVolt)
             return PostInfoHandler(&FactGui::handleBiasVolt);
 
-        if (getInfo()==&fDimBiasDac)
+        if (getInfo()==&fDim->fBiasDac)
             return PostInfoHandler(&FactGui::handleBiasDac);
 
-        if (getInfo()==&fDimBiasCurrent)
+        if (getInfo()==&fDim->fBiasCurrent)
             return PostInfoHandler(&FactGui::handleBiasCurrent);
 
-        if (getInfo()==&fDimFeedbackReference)
+        if (getInfo()==&fDim->fFeedbackReference)
             return PostInfoHandler(&FactGui::handleFeedbackReference);
 
-        if (getInfo()==&fDimFeedbackDeviation)
+        if (getInfo()==&fDim->fFeedbackDeviation)
             return PostInfoHandler(&FactGui::handleFeedbackDeviation);
 
-        if (getInfo()==&fDimFeedbackCalibration)
+        if (getInfo()==&fDim->fFeedbackCalibration)
             return PostInfoHandler(&FactGui::handleFeedbackCalibration);
 
-        if (getInfo()==&fDimRateScan)
+        if (getInfo()==&fDim->fRateScan)
             return PostInfoHandler(&FactGui::handleRateScan);
 
-        if (getInfo()==&fDimMagicWeather)
+        if (getInfo()==&fDim->fMagicWeather)
             return PostInfoHandler(&FactGui::handleMagicWeather);
 
@@ -4028,57 +3775,6 @@
         fInChoosePatchTH(false),
         fInChooseBiasHv(false), fInChooseBiasCam(false),
-        fDimDNS("DIS_DNS/VERSION_NUMBER", 1, int(0), this),
         //-
-        fDimLoggerStats        ("DATA_LOGGER/STATS",            (void*)NULL, 0, this),
-        fDimLoggerFilenameNight("DATA_LOGGER/FILENAME_NIGHTLY", (void*)NULL, 0, this),
-        fDimLoggerFilenameRun  ("DATA_LOGGER/FILENAME_RUN",     (void*)NULL, 0, this),
-        fDimLoggerNumSubs      ("DATA_LOGGER/NUM_SUBS",         (void*)NULL, 0, this),
-        //-
-        fDimFtmPassport        ("FTM_CONTROL/PASSPORT",         (void*)NULL, 0, this),
-        fDimFtmTriggerRates    ("FTM_CONTROL/TRIGGER_RATES",    (void*)NULL, 0, this),
-        fDimFtmError           ("FTM_CONTROL/ERROR",            (void*)NULL, 0, this),
-        fDimFtmFtuList         ("FTM_CONTROL/FTU_LIST",         (void*)NULL, 0, this),
-        fDimFtmStaticData      ("FTM_CONTROL/STATIC_DATA",      (void*)NULL, 0, this),
-        fDimFtmDynamicData     ("FTM_CONTROL/DYNAMIC_DATA",     (void*)NULL, 0, this),
-        fDimFtmCounter         ("FTM_CONTROL/COUNTER",          (void*)NULL, 0, this),
-        //-
-        fDimFadWriteStats      ("FAD_CONTROL/STATS",              (void*)NULL, 0, this),
-        fDimFadStartRun        ("FAD_CONTROL/START_RUN",          (void*)NULL, 0, this),
-        fDimFadRuns            ("FAD_CONTROL/RUNS",               (void*)NULL, 0, this),
-        fDimFadEvents          ("FAD_CONTROL/EVENTS",             (void*)NULL, 0, this),
-        fDimFadRawData         ("FAD_CONTROL/RAW_DATA",           (void*)NULL, 0, this),
-        fDimFadEventData       ("FAD_CONTROL/EVENT_DATA",         (void*)NULL, 0, this),
-        fDimFadConnections     ("FAD_CONTROL/CONNECTIONS",        (void*)NULL, 0, this),
-        fDimFadFwVersion       ("FAD_CONTROL/FIRMWARE_VERSION",   (void*)NULL, 0, this),
-        fDimFadRunNumber       ("FAD_CONTROL/RUN_NUMBER",         (void*)NULL, 0, this),
-        fDimFadDNA             ("FAD_CONTROL/DNA",                (void*)NULL, 0, this),
-        fDimFadTemperature     ("FAD_CONTROL/TEMPERATURE",        (void*)NULL, 0, this),
-        fDimFadPrescaler       ("FAD_CONTROL/PRESCALER",          (void*)NULL, 0, this),
-        fDimFadRefClock        ("FAD_CONTROL/REFERENCE_CLOCK",    (void*)NULL, 0, this),
-        fDimFadRoi             ("FAD_CONTROL/REGION_OF_INTEREST", (void*)NULL, 0, this),
-        fDimFadDac             ("FAD_CONTROL/DAC",                (void*)NULL, 0, this),
-        fDimFadDrsCalibration  ("FAD_CONTROL/XDRS_CALIBRATION",    (void*)NULL, 0, this),
-        fDimFadStatus          ("FAD_CONTROL/STATUS",             (void*)NULL, 0, this),
-        fDimFadStatistics1     ("FAD_CONTROL/STATISTICS1",        (void*)NULL, 0, this),
-        fDimFadStatistics2     ("FAD_CONTROL/STATISTICS2",        (void*)NULL, 0, this),
-        fDimFadFileFormat      ("FAD_CONTROL/FILE_FORMAT",        (void*)NULL, 0, this),
-        //-
-        fDimFscTemp            ("FSC_CONTROL/TEMPERATURE",        (void*)NULL, 0, this),
-        fDimFscVolt            ("FSC_CONTROL/VOLTAGE",            (void*)NULL, 0, this),
-        fDimFscCurrent         ("FSC_CONTROL/CURRENT",            (void*)NULL, 0, this),
-        fDimFscHumidity        ("FSC_CONTROL/HUMIDITY",           (void*)NULL, 0, this),
-        //-
-        fDimFeedbackDeviation  ("FEEDBACK/DEVIATION",             (void*)NULL, 0, this),
-        fDimFeedbackReference  ("FEEDBACK/REFERENCE",             (void*)NULL, 0, this),
-        fDimFeedbackCalibration("FEEDBACK/CALIBRATION",           (void*)NULL, 0, this),
-        //-
-        fDimBiasNominal        ("BIAS_CONTROL/NOMINAL",           (void*)NULL, 0, this),
-        fDimBiasVolt           ("BIAS_CONTROL/VOLTAGE",           (void*)NULL, 0, this),
-        fDimBiasDac            ("BIAS_CONTROL/DAC",               (void*)NULL, 0, this),
-        fDimBiasCurrent        ("BIAS_CONTROL/CURRENT",           (void*)NULL, 0, this),
-        //-
-        fDimRateScan           ("RATE_SCAN/DATA",                 (void*)NULL, 0, this),
-        //-
-        fDimMagicWeather       ("MAGIC_WEATHER/DATA",             (void*)NULL, 0, this),
+        fDim(0),
         //-
         fDimVersion(0),
@@ -4151,67 +3847,4 @@
         }
 
-        // --------------------------------------------------------------------------
-
-        /*
-        ifstream fin1("Trigger-Patches.txt");
-
-        string buf;
-
-        int l = 0;
-        while (getline(fin1, buf, '\n'))
-        {
-            buf = Tools::Trim(buf);
-            if (buf[0]=='#')
-                continue;
-
-            stringstream str(buf);
-            for (int i=0; i<9; i++)
-            {
-                unsigned int n;
-                str >> n;
-
-                if (n>=fPatchHW.size())
-                    continue;
-
-                fPatchHW[n] = l;
-            }
-            l++;
-        }
-
-        if (l!=160)
-            cerr << "WARNING - Problems reading Trigger-Patches.txt" << endl;
-        */
-        // --------------------------------------------------------------------------
-
-        /*
-        ifstream fin2("MasterList-v3.txt");
-
-        l = 0;
-
-        while (getline(fin2, buf, '\n'))
-        {
-            buf = Tools::Trim(buf);
-            if (buf[0]=='#')
-                continue;
-
-            unsigned int softid, hardid, dummy;
-
-            stringstream str(buf);
-
-            str >> softid;
-            str >> dummy;
-            str >> hardid;
-
-            if (softid>=fPixelMapHW.size())
-                continue;
-
-            fPixelMapHW[softid] = hardid;
-
-            l++;
-        }
-
-        if (l!=1440)
-            cerr << "WARNING - Problems reading MasterList-v3.txt" << endl;
-         */
         // --------------------------------------------------------------------------
 
@@ -4617,8 +4250,14 @@
         connect(fAdcDataCanv, SIGNAL(     RootEventProcessed(TObject*, unsigned int, TCanvas*)),
                 this,         SLOT  (slot_RootEventProcessed(TObject*, unsigned int, TCanvas*)));
+
+
+        fDim = new DimSubscriptions(this);
     }
 
     ~FactGui()
     {
+
+        delete fDim;
+
         // Unsubscribe all services
         for (map<string,DimInfo*>::iterator i=fServices.begin();
