Index: /Evidence/Alarm.cc
===================================================================
--- /Evidence/Alarm.cc	(revision 153)
+++ /Evidence/Alarm.cc	(revision 154)
@@ -112,6 +112,7 @@
 		strcmp(getInfo()->getString(), NO_LINK)==0) State[i] = 4;
 	else {
-	  State[i] = *(getInfo()->getString()+getInfo()->getSize());
+	  State[i] = *(getInfo()->getString()+getInfo()->getSize()-1);
 
+  printf("*** String length: %d  Message length: %d    Last number: %d\n",strlen(getInfo()->getString()),getInfo()->getSize(),State[i]);
 	  // Print message
 	  time_t RawTime = getInfo()->getTimestamp();
@@ -156,5 +157,5 @@
 
   // Check periodically if servers are up
-  while(!EvidenceServer::ExitRequest) {
+  while(!Alarm.ExitRequest) {
     for (int i=0; i<Alarm.NumServers; i++) {
       Exists = false;
Index: /Evidence/Config.cc
===================================================================
--- /Evidence/Config.cc	(revision 153)
+++ /Evidence/Config.cc	(revision 154)
@@ -158,7 +158,7 @@
 	  Notify = -1;
   }
-
+ 
   // Sleep until file changes or signal caught 
-  while (!EvidenceServer::ExitRequest) {
+  while (!Config.ExitRequest) {
     if (Notify != -1) {
 	  read(Notify, &Event, sizeof(Event));
Index: /Evidence/Edd/Edd.cc
===================================================================
--- /Evidence/Edd/Edd.cc	(revision 153)
+++ /Evidence/Edd/Edd.cc	(revision 154)
@@ -69,7 +69,7 @@
     // If this is a status indicator, adapt background colour
     if (Data.size() == Text.size()+2) {
-      switch (Data[Text.size() + 2]) {
+      switch (Data[Text.size() + 1]) {
         case 0:  Pal.setColor(QPalette::Base, Qt::white); break;
-        case 1:  Pal.setColor(QPalette::Base, Qt::cyan); break;
+        case 1:  Pal.setColor(QPalette::Base, Qt::yellow); break;
         case 2:  Pal.setColor(QPalette::Base, Qt::red); break;
         case 3:  Pal.setColor(QPalette::Base, Qt::red); break;
@@ -623,4 +623,10 @@
   MainLayout->addWidget(Textout, 1, 0, 1, 2);
 
+  QFrame *Val = new QFrame();
+  Val->setFrameStyle(QFrame::HLine);
+  Val->setLineWidth(10);
+  //Value->setMaximumWidth(200);
+  MainLayout->addWidget(Val, 2, 0, 2, 1);      
+
   Value = new Edd_Indicator("DColl/Status");
   Value->setMaximumWidth(200);
@@ -702,7 +708,7 @@
   // Tab widget
   TabWidget = new QTabWidget(Central);
-  TabWidget->addTab(MainWidget, "&Main");
   TabWidget->addTab(BiasWidget, "&Bias");
   TabWidget->addTab(EnvironmentWidget, "&Environment");
+  TabWidget->addTab(MainWidget, "Evidence");
 
   // Menu bar
Index: /Evidence/Evidence.cc
===================================================================
--- /Evidence/Evidence.cc	(revision 153)
+++ /Evidence/Evidence.cc	(revision 154)
@@ -25,6 +25,5 @@
 #include "Evidence.h"
 
-bool EvidenceServer::ExitRequest = false;
-string __StatusName;
+EvidenceServer *ThisServer;
 
 // Constructor starts server with given name
@@ -33,7 +32,6 @@
   // Initialize
   Status = NULL;
-  ConfigList = NULL;
-  ConfigNum = 0;
-  __StatusName = string(Name) + "/Status";
+  ExitRequest = false;
+  ThisServer = this;
   
   // Catch some signals
@@ -47,8 +45,10 @@
   
   // Start server
-  Status = new DimService(__StatusName.c_str(), (char *) "Server started");
+  static char Init[] = "Server started";
+  Status = new DimService((string(Name) + "/Status").c_str(), (char *) "C", Init, sizeof(Init));
 
   start(Name);
   addExitHandler(this);
+
 }
 
@@ -56,9 +56,8 @@
 EvidenceServer::~EvidenceServer() {
 
-  for (unsigned int i=0; i<ConfigNum; i++) {
+  for (unsigned int i=0; i<ConfigList.size(); i++) {
   	delete[] ConfigList[i].Name;
 	delete[] ConfigList[i].Value;
   }
-  free(ConfigList);
 }
 
@@ -93,7 +92,12 @@
   va_end(ArgumentPointer);
 
-  snprintf(TBuf, sizeof(TBuf), "%s (%s): %s", __StatusName.c_str(), StateString[Severity], Tmp); // Normal string
-  snprintf(SBuf, sizeof(SBuf), "%s*%c", Tmp, (char) Severity);
-  *(strrchr(SBuf, '*')) = '\0';  // String with severity encoding
+  // Create normal string
+  snprintf(TBuf, sizeof(TBuf), "%s (%s): %s", Status->getName(), StateString[Severity], Tmp);
+
+  // Create string with severity encoding
+  snprintf(SBuf, sizeof(SBuf), "%s**", Tmp);
+  SBuf[strlen(SBuf)-2] = '\0';
+  SBuf[strlen(SBuf)+1] = Severity;
+
   if (Tmp != ErrorString) free(Tmp);
   
@@ -120,5 +124,5 @@
   
   // Check if configuration request already in list
-  for (unsigned int i=0; i<ConfigNum; i++) {
+  for (unsigned int i=0; i<ConfigList.size(); i++) {
     if (strcmp(ConfigList[i].Name, Item) == 0) {
 	  // Return original value if still up to date
@@ -144,24 +148,18 @@
   }
 
-  // Enlarge memory to hold new pointer if necessary
+  // Enlarge list if necessary
   if (ItemNo == -1) {
-	void *N = realloc(ConfigList, sizeof(struct ConfigItem)*(++ConfigNum));
-	if (N == NULL) {
-	  State(WARN, "Could not realloc() memory for configuration, will lose memory (%s)", strerror(errno));
-	  ConfigNum--;  
-	}
-	else ConfigList = (struct ConfigItem *) N;
-	
-	ItemNo = ConfigNum-1;
-  }
-  
-  // Allocate memory for strings, and copy data to this memory
+    struct ConfigItem New;
+    ConfigList.push_back(New);
+	ItemNo = ConfigList.size()-1;
+  }
+
+  // Create new entry in item list, allocate memory and copy data to this memory
   ConfigList[ItemNo].Value = new char [strlen(Result)+1];
   ConfigList[ItemNo].Name = new char [strlen(Item)+1];
   strcpy(ConfigList[ItemNo].Name, Item);
   strcpy(ConfigList[ItemNo].Value, Result);
-
   ConfigList[ItemNo].Time = Time;
-  
+    
   // Return address to configuration value  
   return ConfigList[ItemNo].Value;
@@ -174,5 +172,5 @@
 void EvidenceServer::SignalHandler(int) {
 
-  EvidenceServer::ExitRequest = true;
+  ThisServer->ExitRequest = true;
 }
 
@@ -180,5 +178,6 @@
 void EvidenceServer::Terminate() {
 
-  string Msg = __StatusName + ": Caught unhandled exception";
+  string Msg = string(ThisServer->Status->getName()) + ": Caught unhandled exception";
+
   printf("%s\n", Msg.c_str());
   DimClient::sendCommand("DColl/Log", Msg.c_str());
@@ -187,6 +186,8 @@
 }
 
+
 // Translates DIMInfo to string (memory has to be freed by caller)
 // No DIM structures are supported (only a single number or string is converted)
+// For string conversion, a terminating \0 is enforced.
 char *EvidenceServer::ToString(DimInfo *Item) {
 
@@ -198,9 +199,11 @@
   switch (*(Item->getFormat())) {
     case 'I':  R = asprintf(&Text, "%d", Item->getInt());   break;
-    case 'C':  R = asprintf(&Text, "%s", Item->getString());   break;
     case 'S':  R = asprintf(&Text, "%hd", Item->getShort());   break;
     case 'F':  R = asprintf(&Text, "%.5f", Item->getFloat());   break;
     case 'D':  R = asprintf(&Text, "%.5f", Item->getDouble());   break;
     case 'X':  R = asprintf(&Text, "%lld", Item->getLonglong());   break;
+    case 'C':  *(Item->getString() + Item->getSize()) = '\0'; 
+			   R = asprintf(&Text, "%s", Item->getString());
+			   break;
     default: return NULL;
   }
Index: /Evidence/Evidence.h
===================================================================
--- /Evidence/Evidence.h	(revision 153)
+++ /Evidence/Evidence.h	(revision 154)
@@ -7,4 +7,5 @@
 #include <errno.h>
 #include <exception>
+#include <vector>
 
 #include "dis.hxx"
@@ -30,6 +31,6 @@
 	  char *Value;
 	  int Time;
-	} *ConfigList;
-	unsigned int ConfigNum;
+	};
+	vector<struct ConfigItem> ConfigList;
 
     DimService *Status;
@@ -50,5 +51,5 @@
 	static char* ToString(DimInfo *);
 
-    static bool ExitRequest;
+    bool ExitRequest;
 };
 
