Index: fact/Evidence/Evidence.cc
===================================================================
--- fact/Evidence/Evidence.cc	(revision 12891)
+++ fact/Evidence/Evidence.cc	(revision 12892)
@@ -93,6 +93,4 @@
 EvidenceServer *EvidenceServer::This = NULL;
 pthread_mutex_t EvidenceServer::Mutex;
-set<pthread_t> EvidenceServer::Threads;
-
 
 // Constructor
@@ -104,5 +102,4 @@
   ExitRequest = false;
   This = this;
-  Threads.insert(pthread_self());
 
   // Initialise mutex
@@ -258,15 +255,13 @@
 
   string Result;
-  bool Blocking = false;
   
   // If up-to-date data in configuration list available, return this
   Lock();
   if ((List.count(Item) > 0) && (List[Item].Time >= ConfClass->ConfigTimeStamp)) Result = List[Item].Value;
-  if (Threads.count(pthread_self()) != 0) Blocking = true;
   Unlock();
   if (!Result.empty()) return Result;
 
-  // Blocking configuration request
-  if (Blocking) {
+  if (inCallback() == 0) {
+	// Blocking configuration request
 	DimRpcInfo Config((char *) "ConfigRequest", NO_LINK);
 	Config.setData((char *) (Name + " " + Item).c_str());
@@ -292,7 +287,6 @@
 	}	
   }
-
-  // Non-blocking configuration request
-  if (!Blocking) {
+  else {
+	// Non-blocking configuration request
  	Lock();
 
@@ -346,13 +340,5 @@
 void EvidenceServer::CallConfigChanged() {
 
-  EvidenceServer::Lock();
-  EvidenceServer::Threads.insert(pthread_self());
-  EvidenceServer::Unlock();
-
   This->ConfigChanged();
-  
-  EvidenceServer::Lock();
-  EvidenceServer::Threads.erase(pthread_self());
-  EvidenceServer::Unlock();
 }
 
@@ -434,4 +420,7 @@
 	return Text.str();
   }
+
+  // Simplify format "?;1" to "?" 
+  if (strlen(Format)==3 && Format[2]=='1') Format[1] = '\0';
   
   // Structure: print hex representation 
@@ -450,5 +439,7 @@
   // Number array
   int ElementSize;
-  switch (*Format) {
+  switch (toupper(*Format)) {
+    case 'B':
+	case 'V':
     case 'C': ElementSize = sizeof(char);		break;
     case 'I':
@@ -466,5 +457,7 @@
 
 	// Translate data
-	switch (*Format) {
+	switch (toupper(*Format)) {
+	  case 'B':
+	  case 'V':
       case 'C': Text << *((char *) Data + i);		break;
       case 'I':
Index: fact/Evidence/Evidence.h
===================================================================
--- fact/Evidence/Evidence.h	(revision 12891)
+++ fact/Evidence/Evidence.h	(revision 12892)
@@ -59,5 +59,4 @@
 	class Config *ConfClass;
 	static pthread_mutex_t Mutex;
-	static std::set<pthread_t> Threads;
 	static EvidenceServer *This;
 
Index: fact/Evidence/readme.txt
===================================================================
--- fact/Evidence/readme.txt	(revision 12891)
+++ fact/Evidence/readme.txt	(revision 12892)
@@ -54,2 +54,4 @@
 6/7/2011	Missing pthread_mutexattr_init() in Evidence constructor caused spurious errors when
 			locking mutex
+2/8/2011	Used inCallback() method of DIM version v19r23 to decide between blocking or non-blocking config request.
+			Updated EvidenceServer::ToString() for B and V formats.
