Index: trunk/FACT++/src/DimNetwork.cc
===================================================================
--- trunk/FACT++/src/DimNetwork.cc	(revision 13835)
+++ trunk/FACT++/src/DimNetwork.cc	(revision 13836)
@@ -68,5 +68,5 @@
 void DimNetwork::AddServer(const string &s)
 {
-    DimServiceInfoList::AddServer(s);
+    DimServiceInfoListImp::AddServer(s);
     if (s=="DIM_DNS")
         return;
@@ -99,5 +99,5 @@
 void DimNetwork::RemoveServer(string s)
 {
-    DimServiceInfoList::RemoveServer(s);
+    DimServiceInfoListImp::RemoveServer(s);
     if (s=="DIM_DNS")
         return;
@@ -124,5 +124,5 @@
 void DimNetwork::RemoveAllServers()
 {
-    DimServiceInfoList::RemoveAllServers();
+    DimServiceInfoListImp::RemoveAllServers();
     DeleteClientList();
 }
Index: trunk/FACT++/src/DimNetwork.h
===================================================================
--- trunk/FACT++/src/DimNetwork.h	(revision 13835)
+++ trunk/FACT++/src/DimNetwork.h	(revision 13836)
@@ -59,5 +59,5 @@
 using namespace std;
 
-class DimNetwork : public MessageImp, public DimErrorRedirecter, public DimServiceInfoList
+class DimNetwork : public MessageImp, public DimErrorRedirecter, public DimServiceInfoListImp
 {
 private:
Index: trunk/FACT++/src/DimServerList.cc
===================================================================
--- trunk/FACT++/src/DimServerList.cc	(revision 13835)
+++ trunk/FACT++/src/DimServerList.cc	(revision 13836)
@@ -34,4 +34,6 @@
 using namespace std;
 
+
+
 // --------------------------------------------------------------------------
 //
@@ -39,5 +41,5 @@
 //! DIS_DNS/SERVER_LIST.
 //
-DimServerList::DimServerList() :
+DimServerList::DimServerList(DimServerListImp *list) : fList(list),
     fDimServers("DIS_DNS/SERVER_LIST", const_cast<char*>(""), this)
 {
@@ -61,5 +63,5 @@
     if (str[0]!='-' && str[0]!='+')
     {
-        RemoveAllServers();
+        fList->RemoveAllServers();
         fServerList.clear();
     }
@@ -92,5 +94,5 @@
             }
 
-            RemoveServer(trunc);
+            fList->RemoveServer(trunc);
             fServerList.erase(v);
 
@@ -108,5 +110,5 @@
             if (v!=fServerList.end())
             {
-                RemoveServer(trunc);
+                fList->RemoveServer(trunc);
                 fServerList.erase(v);
 
@@ -117,5 +119,5 @@
 
             fServerList.push_back(trunc);
-            AddServer(trunc);
+            fList->AddServer(trunc);
 
             continue;
@@ -124,5 +126,5 @@
         // In any other case we just add the entry to the list
         fServerList.push_back(server);
-        AddServer(server);
+        fList->AddServer(server);
     }
 }
Index: trunk/FACT++/src/DimServerList.h
===================================================================
--- trunk/FACT++/src/DimServerList.h	(revision 13835)
+++ trunk/FACT++/src/DimServerList.h	(revision 13836)
@@ -7,4 +7,6 @@
 #include "dic.hxx"
 
+class DimServerListImp;
+
 class DimServerList : public DimInfoHandler
 {
@@ -13,10 +15,7 @@
 
 private:
+    DimServerListImp *fList;
     ServerList fServerList;  /// A list with the available servers
     DimInfo    fDimServers;  /// A DimInfo to retrieve the SERVER_LIST from teh DNS server
-
-    virtual void AddServer(const std::string &) { };
-    virtual void RemoveServer(std::string) { };
-    virtual void RemoveAllServers() { };
 
 protected:
@@ -24,5 +23,5 @@
 
 public:
-    DimServerList();
+    DimServerList(DimServerListImp *list);
 
     /// @returns a reference to the list of servers
@@ -32,4 +31,24 @@
     /// @param server string with the server which availability should be checked
     bool HasServer(const std::string &server) const;
+};
+
+class DimServerListImp
+{
+    DimServerList fList;
+
+public:
+    DimServerListImp() : fList(this) { }
+    virtual ~DimServerListImp() { }
+
+    virtual void AddServer(const std::string &) { };
+    virtual void RemoveServer(std::string) { };
+    virtual void RemoveAllServers() { };
+
+    /// @returns a reference to the list of servers
+    const DimServerList::ServerList &GetServerList() const { return fList.GetServerList(); }
+
+    /// @returns whether the given server is in the list or not
+    /// @param server string with the server which availability should be checked
+    bool HasServer(const std::string &server) const { return fList.HasServer(server); }
 };
 
Index: trunk/FACT++/src/DimServiceInfoList.cc
===================================================================
--- trunk/FACT++/src/DimServiceInfoList.cc	(revision 13835)
+++ trunk/FACT++/src/DimServiceInfoList.cc	(revision 13836)
@@ -121,5 +121,5 @@
 void DimServiceInfoList::RemoveServer(const string s)
 {
-    RemoveAllServices(s);
+    fList->RemoveAllServices(s);
 
     const ServiceInfoList::iterator v = fServiceInfoList.find(s);
@@ -191,5 +191,5 @@
         if (str[0]!='+' && str[0]!='-')
         {
-            RemoveAllServices(server);
+            fList->RemoveAllServices(server);
             list.clear();
         }
@@ -239,5 +239,5 @@
                 }*/
 
-                RemoveService(server, name, iscmd);
+                fList->RemoveService(server, name, iscmd);
                 if (v!=list.end())
                     list.erase(v);
@@ -259,5 +259,5 @@
 
                 list[name] = make_pair(fmt, iscmd);
-                AddService(server, name, fmt, iscmd);
+                fList->AddService(server, name, fmt, iscmd);
 
                 continue;
@@ -266,5 +266,5 @@
             // Add name the the list
             list[name] = make_pair(fmt, iscmd);
-            AddService(server, name, fmt, iscmd);
+            fList->AddService(server, name, fmt, iscmd);
         }
 
@@ -294,5 +294,5 @@
             list[name] = make_pair(comment, vector<Description>(v.begin()+1, v.end()));
 
-            AddDescription(server, name, v);
+            fList->AddDescription(server, name, v);
         }
 
@@ -304,10 +304,8 @@
         vector<State> &vec = fServiceList[server].third;
         vec = State::SplitStates(getInfo()->getString());
-        AddStates(server, vec);
+        fList->AddStates(server, vec);
 
         return;
     }
-
-    DimServerList::infoHandler();
 }
 
@@ -755,2 +753,4 @@
     SendDimCommand(server, str, dummy);
 }
+
+DimServiceInfoList::DimServiceInfoList(DimServiceInfoListImp *list) : DimServerList(list), fList(list) { }
Index: trunk/FACT++/src/DimServiceInfoList.h
===================================================================
--- trunk/FACT++/src/DimServiceInfoList.h	(revision 13835)
+++ trunk/FACT++/src/DimServiceInfoList.h	(revision 13836)
@@ -11,4 +11,5 @@
 
 class DimInfo;
+class DimServiceInfoListImp;
 
 class DimServiceInfoList : public DimServerList
@@ -38,4 +39,5 @@
 
 private:
+    DimServiceInfoListImp *fList;
     ServiceInfoList fServiceInfoList; /// A map storing the service description to retrieve all informations
     ServiceList     fServiceList;     /// A mal containing all the available informations
@@ -46,9 +48,44 @@
     DimInfo *CreateDS(const std::string &str) const { return CreateDimInfo(str, "STATE_LIST"); }
 
-protected:
+public:
     void AddServer(const std::string &s);
     void RemoveServer(std::string);
     void RemoveAllServers();
 
+protected:
+    void infoHandler();
+
+public:
+    DimServiceInfoList(DimServiceInfoListImp *list);
+    ~DimServiceInfoList() {  }
+
+    std::vector<std::string> GetServiceList(bool iscmd=false) const;
+    std::vector<std::string> GetServiceList(const std::string &server, bool iscmd=false) const;
+
+    std::vector<Description> GetDescription(const std::string &server, const std::string &service) const;
+    std::vector<State>       GetStates(const std::string &server) const;
+    State                    GetState(const std::string &server, int state) const;
+
+    int IsCommand(const std::string &server, const std::string &service) const;
+
+    int PrintDescription(std::ostream &out, bool iscmd, const std::string &serv="", const std::string &service="") const;
+    int PrintStates(std::ostream &out, const std::string &serv="") const;
+
+    bool SendDimCommand(std::ostream &lout, const std::string &server, const std::string &str) const;
+    void SendDimCommand(const std::string &server, std::string str, std::ostream &lout) const;
+    void SendDimCommand(const std::string &server, const std::string &str) const;
+};
+
+class DimServiceInfoListImp : public DimServerListImp
+{
+public:
+    DimServiceInfoList fInfo;
+
+protected:
+    virtual void AddServer(const std::string &s) { fInfo.AddServer(s); }
+    virtual void RemoveServer(std::string s)     { fInfo.RemoveServer(s); }
+    virtual void RemoveAllServers()              { fInfo.RemoveAllServers(); }
+
+public:
     virtual void AddService(const std::string &, const std::string &, const std::string &, bool) { }
     virtual void RemoveService(std::string, std::string, bool) { }
@@ -57,30 +94,40 @@
     virtual void AddStates(const std::string &, const std::vector<State> &) { }
 
-protected:
-    void infoHandler();
-
-public:
-    DimServiceInfoList() { }
-    ~DimServiceInfoList() { RemoveAllServers(); }
-
-    std::vector<std::string> GetServiceList(bool iscmd=false) const;
-    std::vector<std::string> GetServiceList(const std::string &server, bool iscmd=false) const;
+public:
+    DimServiceInfoListImp() : fInfo(this) { }
+    ~DimServiceInfoListImp() { fInfo.RemoveAllServers(); }
+
+    std::vector<std::string> GetServiceList(bool iscmd=false) const
+    { return fInfo.GetServiceList(iscmd); }
+    std::vector<std::string> GetServiceList(const std::string &server, bool iscmd=false) const
+    { return fInfo.GetServiceList(server, iscmd); }
 
     std::vector<std::string> GetCommandList() const { return GetServiceList(true); }
     std::vector<std::string> GetCommandList(const std::string &server) const { return GetServiceList(server, true); }
 
-    std::vector<Description> GetDescription(const std::string &server, const std::string &service) const;
-    std::vector<State>       GetStates(const std::string &server) const;
-    State                    GetState(const std::string &server, int state) const;
-
-    int IsCommand(const std::string &server, const std::string &service) const;
-
-    int PrintDescription(std::ostream &out, bool iscmd, const std::string &serv="", const std::string &service="") const;
-    int PrintStates(std::ostream &out, const std::string &serv="") const;
-
-    bool SendDimCommand(std::ostream &lout, const std::string &server, const std::string &str) const;
-    void SendDimCommand(const std::string &server, std::string str, std::ostream &lout) const;
-    void SendDimCommand(const std::string &server, const std::string &str) const;
+    std::vector<Description> GetDescription(const std::string &server, const std::string &service) const
+    { return fInfo.GetDescription(server, service); }
+    std::vector<State>       GetStates(const std::string &server) const
+    { return fInfo.GetStates(server); }
+    State                    GetState(const std::string &server, int state) const
+    { return fInfo.GetState(server, state); }
+
+    int IsCommand(const std::string &server, const std::string &service) const
+    { return fInfo.IsCommand(server, service); }
+
+    int PrintDescription(std::ostream &out, bool iscmd, const std::string &serv="", const std::string &service="") const
+    { return fInfo.PrintDescription(out, iscmd, serv, service); }
+    int PrintStates(std::ostream &out, const std::string &serv="") const
+    { return fInfo.PrintStates(out, serv); }
+
+    bool SendDimCommand(std::ostream &lout, const std::string &server, const std::string &str) const
+    { return fInfo.SendDimCommand(lout, server, str); }
+    void SendDimCommand(const std::string &server, std::string str, std::ostream &lout) const
+    { return fInfo.SendDimCommand(server, str, lout); }
+    void SendDimCommand(const std::string &server, const std::string &str) const
+    { return fInfo.SendDimCommand(server, str); }
 };
+
+
 
 // ***************************************************************************
