Index: /trunk/FACT++/src/StateMachineDim.cc
===================================================================
--- /trunk/FACT++/src/StateMachineDim.cc	(revision 10378)
+++ /trunk/FACT++/src/StateMachineDim.cc	(revision 10379)
@@ -65,9 +65,13 @@
 StateMachineDim::StateMachineDim(ostream &out, const std::string &name)
 : StateMachine(out, name), DimStart(name, *this), fLog(name, out),
-fSrvState(Form("%s/STATE", name.c_str()).c_str(), const_cast<char*>("")),
-fSrvVersion(Form("%s/VERSION", name.c_str()).c_str(), const_cast<int&>(fVersion))
+    fSrvState(Form("%s/STATE", name.c_str()).c_str(), const_cast<char*>("")),
+    fSrvVersion(Form("%s/VERSION", name.c_str()).c_str(), const_cast<int&>(fVersion)),
+    fDescriptionStates(Form("%s/STATE_LIST", name.c_str()).c_str(), const_cast<char*>(""))
 {
     // WARNING: This exit handler is GLOBAL!
     DimServer::addExitHandler(this);
+
+    for (StateNames::const_iterator i=fStateNames.begin(); i!=fStateNames.end(); i++)
+        DistStateName(i->first, i->second.first, i->second.second);
 }
 
@@ -83,4 +87,20 @@
 {
     return new EventDim(targetstate, GetName()+"/"+name, fmt, this);
+}
+
+void StateMachineDim::DistStateName(const int state, const std::string &name, const std::string &doc)
+{
+    ostringstream out;
+    out << reinterpret_cast<char*>(fDescriptionStates.itsData);
+    out << state << ':' << name << '=' << doc << '\n';
+
+    fDescriptionStates.setData(const_cast<char*>(out.str().c_str()));
+    fDescriptionStates.updateService();
+}
+
+void StateMachineDim::AddStateName(const int state, const std::string &name, const std::string &doc)
+{
+    StateMachineImp::AddStateName(state, name, doc);
+    DistStateName(state, name, doc);
 }
 
Index: /trunk/FACT++/src/StateMachineDim.h
===================================================================
--- /trunk/FACT++/src/StateMachineDim.h	(revision 10378)
+++ /trunk/FACT++/src/StateMachineDim.h	(revision 10379)
@@ -33,6 +33,8 @@
     static const int fVersion;   /// Version number
 
-    DimService fSrvState;        /// DimService offering fCurrentState
-    DimService fSrvVersion;      /// DimService offering fVersion
+    DimService fSrvState;          /// DimService offering fCurrentState
+    DimService fSrvVersion;        /// DimService offering fVersion
+
+    DimService fDescriptionStates; /// DimService propagating the state descriptions
 
     void exitHandler(int code);  /// Overwritten DimCommand::exitHandler.
@@ -50,4 +52,7 @@
 public:
     StateMachineDim(std::ostream &out=std::cout, const std::string &name="DEFAULT");
+
+    void AddStateName(const int state, const std::string &name, const std::string &doc="");
+    void DistStateName(const int state, const std::string &name, const std::string &doc="");
 };
 
