Index: trunk/FACT++/src/EventBuilderWrapper.h
===================================================================
--- trunk/FACT++/src/EventBuilderWrapper.h	(revision 11166)
+++ trunk/FACT++/src/EventBuilderWrapper.h	(revision 11169)
@@ -722,4 +722,5 @@
     DimDescribedService fDimFwVersion;
     DimDescribedService fDimPllLock;
+    DimDescribedService fDimDrsEnabled;
     DimDescribedService fDimStatistics;
 
@@ -741,5 +742,6 @@
 	fDimEventData("FAD_CONTROL/EVENT_DATA", "S:1;I:1;S:1;I:2;S:1;S", ""),
         fDimFwVersion("FAD_CONTROL/FIRMWARE_VERSION", "F:43", ""),
-        fDimPllLock("FAD_CONTROL/PLL_LOCK", "C:43", ""),
+        fDimPllLock("FAD_CONTROL/PLL_LOCK", "C:41", ""),
+        fDimDrsEnabled("FAD_CONTROL/DRS_ENABLED", "C:41", ""),
         fDimStatistics("FAD_CONTROL/STATISTICS", "X:8", ""),
         fDebugStream(false), fDebugRead(false)
@@ -1353,5 +1355,5 @@
             const T *ref = reinterpret_cast<const T*>(base+offset);
 
-            vec[i+3] = *ref;
+            vec[i+3] = (*ref&mask)>>shift;
 
 //            if (gi_NumConnect[i/7]!=7)
@@ -1378,16 +1380,16 @@
             return make_pair(false, vec);
 
-        vec[0] =  *min;
+        vec[0] = (*min&mask)>>shift;
         vec[1] = (*val&mask)>>shift;
-        vec[2] =  *max;
+        vec[2] = (*max&mask)>>shift;
 
         return make_pair(rc, vec);
     }
 
-    template<typename T>
-    void Update(DimDescribedService &svc, const pair<bool,boost::array<T, 43>> &data)
+    template<typename T, size_t N>
+    void Update(DimDescribedService &svc, const pair<bool,boost::array<T, N>> &data)
     {
         svc.setQuality(data.first);
-        svc.setData(const_cast<T*>(data.second.data()), sizeof(T)*43);
+        svc.setData(const_cast<T*>(data.second.data()), sizeof(T)*N);
         svc.updateService();
     }
@@ -1444,16 +1446,21 @@
         {
             const pair<bool, boost::array<uint16_t,43>> pll = Compare(&h, &h.fStatus, 0xf<<12, 12);
+            pair<bool, boost::array<uint8_t,41>> data;
+            data.first = pll.first;
+            data.second[0] = pll.second[1];
+            for (int i=0; i<40; i++)
+                data.second[i+1] = pll.second[i+3];
+            Update(fDimPllLock, data);
+        }
+
+        if (old.HasDenable() != h.HasDenable())
+        {
+            const pair<bool, boost::array<uint16_t,43>> drs = Compare(&h, &h.fStatus, FAD::EventHeader::kDenable);
             pair<bool, boost::array<uint8_t,43>> data;
-            data.first = pll.first;
-
-            for (int i=0; i<43; i++)
-                data.second[i] = (pll.second[i]>>12)&0xf;
-            Update(fDimPllLock, data);
-        }
-
-        if (old.HasDenable() != h.HasDenable())
-        {
-            const pair<bool, boost::array<uint16_t,43>> drs = Compare(&h, &h.fStatus, FAD::EventHeader::kDenable);
-            Print("Drs", drs);
+            data.first = drs.first;
+            data.second[0] = drs.second[1];
+            for (int i=0; i<40; i++)
+                data.second[i+1] = drs.second[i+3];
+            Update(fDimDrsEnabled, data);
         }
 
