Index: /trunk/FACT++/src/DimDescriptionService.cc
===================================================================
--- /trunk/FACT++/src/DimDescriptionService.cc	(revision 15167)
+++ /trunk/FACT++/src/DimDescriptionService.cc	(revision 15168)
@@ -44,4 +44,6 @@
 int         DimDescriptionService::fCount   = 0;
 std::string DimDescriptionService::fData    = "";
+
+set<string> DimDescribedService::fServices;
 
 // --------------------------------------------------------------------------
Index: /trunk/FACT++/src/DimDescriptionService.h
===================================================================
--- /trunk/FACT++/src/DimDescriptionService.h	(revision 15167)
+++ /trunk/FACT++/src/DimDescriptionService.h	(revision 15168)
@@ -2,4 +2,5 @@
 #define FACT_DimDescriptionService
 
+#include <set>
 #include <array>
 #include <string>
@@ -28,4 +29,6 @@
 class DimDescribedService : public DimDescriptionService, public DimService
 {
+    static std::set<std::string> fServices;
+
 public:
     template<typename T>
@@ -33,4 +36,5 @@
         : DimDescriptionService(name.c_str(), desc), DimService(name.c_str(), const_cast<T&>(val))
     {
+        fServices.insert(getName());
         setQuality(0);
     }
@@ -40,4 +44,5 @@
         : DimDescriptionService(name.c_str(), desc), DimService(name.c_str(), format, const_cast<T*>(&val), sizeof(T))
     {
+        fServices.insert(getName());
         setQuality(0);
     }
@@ -46,7 +51,15 @@
        : DimDescriptionService(name.c_str(), desc), DimService(name.c_str(), format, (void*)NULL, 0)
     {
+        fServices.insert(getName());
         setQuality(0);
         // FIXME: compare number of ; with number of |
     }
+
+    ~DimDescribedService()
+    {
+        fServices.erase(getName());
+    }
+
+    static const std::set<std::string> &GetServices() { return fServices; }
 
     void setData(const void *ptr, size_t sz)
