Index: trunk/FACT++/src/Event.h
===================================================================
--- trunk/FACT++/src/Event.h	(revision 10298)
+++ trunk/FACT++/src/Event.h	(revision 10299)
@@ -7,10 +7,11 @@
 {
 private:
-    std::string fName;       /// A name associated with the event
-    std::string fFormat;     /// A string describing the format of the data
+    std::string fName;        /// A name associated with the event
+    std::string fFormat;      /// A string describing the format of the data
+    std::string fDescription; /// A human readable description of the event
 
-    std::vector<char> fData; /// Data associated with this event
+    std::vector<char> fData;  /// Data associated with this event
 
-    Time  fTime;             /// Time stamp
+    Time  fTime;              /// Time stamp
 
 public:
@@ -22,4 +23,6 @@
     Event(const EventImp &imp, const char *name, size_t siz);
 
+    void SetDescription(const std::string &str) { fDescription=str; }
+    std::string GetDescription() const { return fDescription; }
 
     /// Return the stored name of the event
Index: trunk/FACT++/src/EventDim.h
===================================================================
--- trunk/FACT++/src/EventDim.h	(revision 10298)
+++ trunk/FACT++/src/EventDim.h	(revision 10299)
@@ -20,9 +20,13 @@
 #include "dis.hxx" // DimCommand
 
+#include "DimDescriptionService.h"
+
 class EventDim : public EventImp, public DimCommand
 {
+    DimDescriptionService *fDescription;
+
 public:
     EventDim(int target, const std::string &name, const std::string &format, DimCommandHandler *handler)
-        : EventImp(target), DimCommand(name.c_str(), format.c_str(), handler)
+        : EventImp(target), DimCommand(name.c_str(), format.c_str(), handler), fDescription(0)
     {
         // Initialize these values from DimCommand, because DimCommand
@@ -34,4 +38,15 @@
         millisecs = 0;
     }
+    ~EventDim()
+    {
+        delete fDescription;
+    }
+    void SetDescription(const std::string &str)
+    {
+        if (fDescription)
+            delete fDescription;
+        fDescription = new DimDescriptionService(GetName(), str);
+    }
+    std::string GetDescription() const { return fDescription ? fDescription->GetDescription() : ""; }
 
     std::string GetName() const   { return const_cast<EventDim*>(this)->getName(); }
Index: trunk/FACT++/src/EventImp.cc
===================================================================
--- trunk/FACT++/src/EventImp.cc	(revision 10298)
+++ trunk/FACT++/src/EventImp.cc	(revision 10299)
@@ -113,4 +113,5 @@
 #include "Time.h"
 #include "WindowLog.h"
+#include "Description.h"
 
 using namespace std;
@@ -205,4 +206,13 @@
     if (!fmt.empty())
         out << kBold << "[" << fmt << "]";
+
+    vector<Description> v = Description::SplitDescription(GetDescription());
+
+    if (!GetDescription().empty())
+    {
+        for (vector<Description>::const_iterator j=v.begin()+1;
+             j!=v.end(); j++)
+            out << " <" << j->name << ">";
+    }
 
     out << kReset << ":";
@@ -233,6 +243,19 @@
     out << endl;
 
-    if (!fDescription.empty())
-        out << "     " << fDescription << endl;
+    if (GetDescription().empty())
+        return;
+
+    out << "   " << v[0].comment << endl;
+
+    for (vector<Description>::const_iterator j=v.begin()+1;
+         j!=v.end(); j++)
+    {
+        out << "    " << kGreen << j->name;
+        if (!j->comment.empty())
+            out << kReset << ": " << kBlue << j->comment;
+        if (!j->unit.empty())
+            out << kYellow << " [" << j->unit << "]";
+        out << endl;
+    }
 }
 
Index: trunk/FACT++/src/EventImp.h
===================================================================
--- trunk/FACT++/src/EventImp.h	(revision 10298)
+++ trunk/FACT++/src/EventImp.h	(revision 10299)
@@ -14,6 +14,4 @@
     std::vector<int> fAllowedStates; /// List of states in which this event is allowed
 
-    std::string      fDescription;   /// A human readable description of the event
-
     /// http://www.boost.org/doc/libs/1_45_0/libs/bind/bind.html
     boost::function<int(const EventImp &)> fFunction;
@@ -26,5 +24,6 @@
 
     // Description
-    EventImp &SetDescription(const std::string &str) { fDescription=str; return *this; }
+    virtual void SetDescription(const std::string &) { }
+    virtual std::string GetDescription() const { return ""; }
 
     // Function handling
@@ -35,6 +34,6 @@
     // Configuration helper
     EventImp &operator()(boost::function<int(const EventImp &)> func) { return AssignFunction(func); }
-    EventImp &operator()(const std::string str) { return SetDescription(str); }
-    EventImp &operator()(const char *str) { return SetDescription(str); }
+    EventImp &operator()(const std::string str) { SetDescription(str); return *this; }
+    EventImp &operator()(const char *str) { SetDescription(str); return *this; }
 
     // Print contents
