diff --git a/MAC/APL/CURTDBDaemons/src/KeyValueLogger/KeyValueLogger.cc b/MAC/APL/CURTDBDaemons/src/KeyValueLogger/KeyValueLogger.cc
index d38a624585ee9bd50f4ac5c12489e03982d1409a..ce8a6996560281576105f0ccaef4012f36e6d4aa 100644
--- a/MAC/APL/CURTDBDaemons/src/KeyValueLogger/KeyValueLogger.cc
+++ b/MAC/APL/CURTDBDaemons/src/KeyValueLogger/KeyValueLogger.cc
@@ -207,8 +207,22 @@ GCFEvent::TResult KeyValueLogger::operational(GCFEvent&			event,
 		answer.result = PVSS::SA_NO_ERROR;
 
 		int32	timeStamp = ACC::APS::indexValue(logEvent.key, "{}");
-		rtrim (logEvent.key, "{}01234565789");	 // cut off timestamp
-		replace(logEvent.key.begin(), logEvent.key.end(), '.', '_');
+		rtrim  (logEvent.key, "{}01234565789");	 // cut off timestamp
+		// replace all but last . with underscore.
+		string::reverse_iterator	riter	= logEvent.key.rbegin();
+		string::reverse_iterator	rend	= logEvent.key.rend();
+		bool	lastDot(true);
+		while (riter != rend) {
+			if (*riter == '.') {
+				if (lastDot) {
+					lastDot = false;
+				}
+				else {
+					*riter = '_';
+				}
+			}
+			riter++;
+		}
 		PVSSresult	result = itsDPservice->setValue(logEvent.key, 
 													GCFPVString(logEvent.value),
 													1.0 * timeStamp);
@@ -234,9 +248,28 @@ GCFEvent::TResult KeyValueLogger::operational(GCFEvent&			event,
 		answer.seqnr  = logEvent.seqnr;
 		answer.result = PVSS::SA_NO_ERROR;
 		for (uint32 i = 0; i < logEvent.msgCount; i++) {
-			PVSSresult	result;
-// = itsDPservice->setValue(logEvent.keys.theVector[i], 
-//											GCFPVString(logEvent.values.theVector[i]));
+			int32	timeStamp = ACC::APS::indexValue(logEvent.keys.theVector[i], "{}");
+			rtrim  (logEvent.keys.theVector[i], "{}01234565789");	 // cut off timestamp
+			// replace all but last . with underscore.
+			string::reverse_iterator	riter	= logEvent.keys.theVector[i].rbegin();
+			string::reverse_iterator	rend	= logEvent.keys.theVector[i].rend();
+			bool	lastDot(true);
+			while (riter != rend) {
+				if (*riter == '.') {
+					if (lastDot) {
+						lastDot = false;
+					}
+					else {
+						*riter = '_';
+					}
+				}
+				riter++;
+			}
+			PVSSresult	result = itsDPservice->setValue(logEvent.keys.theVector[i], 
+														GCFPVString(logEvent.values.theVector[i]),
+														1.0 * timeStamp);
+			itsClients[&port].msgCnt++;
+
 			switch (result) {
 			case PVSS::SA_NO_ERROR:
 				break;
@@ -248,7 +281,7 @@ GCFEvent::TResult KeyValueLogger::operational(GCFEvent&			event,
 				// _registerFailure(port);
 				answer.result |= result;
 			} // switch
-		} // for
+		} // for all msgs in the pool
 		port.send(answer);
 	}
 	break;
diff --git a/MAC/APL/CURTDBDaemons/test/tKeyValueLogger.cc b/MAC/APL/CURTDBDaemons/test/tKeyValueLogger.cc
index 6ba74327879423710335bcc1cc6b59382c8c89c9..3683998329f6052a87df3cbbe0e71d8cf79d5b3e 100644
--- a/MAC/APL/CURTDBDaemons/test/tKeyValueLogger.cc
+++ b/MAC/APL/CURTDBDaemons/test/tKeyValueLogger.cc
@@ -56,6 +56,29 @@ int main (int	argc, char*		argv[])
 
 	sleep(2);
 
+	// send a bunch of messages
+	for (int	i = 0; i < 20; i++) {
+		msgEvent.seqnr = i;
+		msgEvent.value = toString(25+i);
+		thePort.send(&msgEvent);
+		KVTSendMsgAckEvent		msgAck(thePort.receive());
+	}
+		
+	sleep(2);
+
+	// now send the same bunch as to pools
+	KVTSendMsgPoolEvent		poolEvent;
+	poolEvent.seqnr = 1;
+	poolEvent.msgCount = 20;
+	for (int i = 0; i < 20; i++) {
+		poolEvent.keys.theVector.push_back("LOFAR.ObsSW.ObsCtrl.OnlineCtrl.OLAP.InputAppl.packageLoss{1198368555}");
+		poolEvent.values.theVector.push_back(toString(50+i));
+	}
+	thePort.send(&poolEvent);
+	KVTSendMsgPoolAckEvent		poolAck(thePort.receive());
+
+	sleep (2);
+
 	return (0);
 }