Index: Evidence/Evidence.cc
===================================================================
--- Evidence/Evidence.cc	(revision 174)
+++ Evidence/Evidence.cc	(revision 178)
@@ -20,10 +20,9 @@
   class destructor.
   
-  Oliver Grimm, February 2009
+  Oliver Grimm, March 2009
  
 \********************************************************************/
 
 #include "Evidence.h"
-
 using namespace std;
 
@@ -33,5 +32,4 @@
 
 EvidenceServer *ThisServer;
-
 
 // Constructor starts server with given name
@@ -42,5 +40,6 @@
   ExitRequest = false;
   ThisServer = this;
-  
+  ServerName = Name;
+
   // Catch some signals
   signal(SIGQUIT, &SignalHandler);  // CTRL-Backspace
@@ -60,5 +59,5 @@
   if (asprintf(&InitMsg, "Server started (%s, compiled %s %s)", Rev.c_str(),__DATE__, __TIME__) == -1) InitMsg = NULL;
   
-  Status = new DimService((string(Name) + "/Status").c_str(), (char *) "C", InitMsg, strlen(InitMsg)+1);
+  Status = new DimService((ServerName+"/Status").c_str(), (char *) "C", InitMsg, strlen(InitMsg)+1);
 
   start(Name);
@@ -73,5 +72,4 @@
   
   for (unsigned int i=0; i<ConfigList.size(); i++) {
-  	delete[] ConfigList[i].Name;
 	delete[] ConfigList[i].Value;
   }
@@ -136,30 +134,27 @@
 // The memory allocated by all calls to this function will be freed by
 // the destructor.
-char* EvidenceServer::GetConfig(const char *Item, const char *Default) {
+char* EvidenceServer::GetConfig(string Item, const char *Default) {
   
   int ItemNo = -1;
   
   // Check if configuration request already in list
-  for (unsigned int i=0; i<ConfigList.size(); i++) {
-    if (strcmp(ConfigList[i].Name, Item) == 0) {
-	  // Return original value if still up to date
-	  if (ConfigList[i].Time >= ModifyInfo->LastModifyTime) return ConfigList[i].Value;
-
-	  // Otherwise, free memory of old value
-	  delete[] ConfigList[i].Name;
-	  delete[] ConfigList[i].Value;	  
-	  ItemNo = i;
-	  break;
-	}
+  for (unsigned int i=0; i<ConfigList.size(); i++) if (ConfigList[i].Name == Item) {
+	// Return original value if still up to date
+	if (ConfigList[i].Time >= ModifyInfo->LastModifyTime) return ConfigList[i].Value;
+
+	// Otherwise, free memory of old value
+	delete[] ConfigList[i].Value;
+	ItemNo = i;
+	break;
   } 
   
   // Make configuration request
   DimRpcInfo Config((char *) "ConfigRequest", (char *) "");
-  Config.setData((char *) Item);
+  Config.setData((char *) (ServerName + " " + Item).c_str());
   char *Result = Config.getString();
   
   // Terminate if not successful
   if (strlen(Result) == 0) {
-    if (Default == NULL) State(FATAL, "Missing configuration data '%s'", Item);
+    if (Default == NULL) State(FATAL, "Missing configuration data '%s'", Item.c_str());
 	Result = (char *) Default;
   }
@@ -174,6 +169,5 @@
   // 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);
+  ConfigList[ItemNo].Name = Item;
   strcpy(ConfigList[ItemNo].Value, Result);
   ConfigList[ItemNo].Time = ModifyInfo->LastModifyTime;
Index: Evidence/Evidence.h
===================================================================
--- Evidence/Evidence.h	(revision 174)
+++ Evidence/Evidence.h	(revision 178)
@@ -41,5 +41,5 @@
 
 	struct ConfigItem {
-	  char *Name;
+	  std::string Name;
 	  char *Value;
 	  int Time;
@@ -47,4 +47,5 @@
 	std::vector<struct ConfigItem> ConfigList;
 
+	std::string ServerName;
     DimService *Status;
 	class ConfigUpdate *ModifyInfo;
@@ -65,5 +66,5 @@
 
 	void State(StateType, const char *, ...);
-	char* GetConfig(const char *, const char * = NULL);
+	char* GetConfig(std::string, const char * = NULL);
 	static char* ToString(DimInfo *);
 	static bool ServiceOK(DimInfo *);
