diff --git a/MAC/APL/PIC/TBBDriver/src/AllocCmd.cc b/MAC/APL/PIC/TBBDriver/src/AllocCmd.cc
index a6023941d4b531bd6359a11262e532676b8b5372..015b319b5f1a9c1b9a2a0ad1beac5a66b8e17fd5 100644
--- a/MAC/APL/PIC/TBBDriver/src/AllocCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/AllocCmd.cc
@@ -52,7 +52,7 @@ AllocCmd::AllocCmd(): itsStage(0),itsRcuStatus(0)
 AllocCmd::~AllocCmd()
 {
 	delete itsTPE;
-	delete itsTBBackE;
+	delete itsTBBackE;	
 }
 
 // ----------------------------------------------------------------------------
@@ -275,7 +275,6 @@ void AllocCmd::sendTbbAckEvent(GCFPortInterface* clientport)
 	}
 	
 	clientport->send(*itsTBBackE);
-	
 }
 
 // ----------------------------------------------------------------------------
diff --git a/MAC/APL/PIC/TBBDriver/src/BoardCmdHandler.cc b/MAC/APL/PIC/TBBDriver/src/BoardCmdHandler.cc
index 6a34ffd101eb6c6cc8e72ce7fcf4d9081264d068..fbbe05fa2174b2d7c6bb896cc62889bff5fd4dc9 100644
--- a/MAC/APL/PIC/TBBDriver/src/BoardCmdHandler.cc
+++ b/MAC/APL/PIC/TBBDriver/src/BoardCmdHandler.cc
@@ -52,7 +52,8 @@ GCFEvent::TResult BoardCmdHandler::idle_state(GCFEvent& event, GCFPortInterface&
   	} break;
   	
   	case F_ENTRY: {
-			itsCmd = 0;
+			//itsCmd = 0;
+			if (itsCmd) delete itsCmd;
 		} break;			
 	  
 	  case F_TIMER: {
diff --git a/MAC/APL/PIC/TBBDriver/src/ClearCmd.cc b/MAC/APL/PIC/TBBDriver/src/ClearCmd.cc
index 19f3beb0c2735cd81fdfbc83b82bb0b4e6ec9aca..f348d262e1da723a5faeb0fa806d032a3ba7a51d 100644
--- a/MAC/APL/PIC/TBBDriver/src/ClearCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/ClearCmd.cc
@@ -49,7 +49,7 @@ ClearCmd::ClearCmd()
 ClearCmd::~ClearCmd()
 {
 	delete itsTPE;
-	delete itsTBBackE;
+	delete itsTBBackE;	
 }
 
 // ----------------------------------------------------------------------------
diff --git a/MAC/APL/PIC/TBBDriver/src/ConfigCmd.cc b/MAC/APL/PIC/TBBDriver/src/ConfigCmd.cc
index 4a6c89c8f45766b5634abcdb6867066ebf62885e..2ff1a523d38b81d640d769abda791659f159eed3 100644
--- a/MAC/APL/PIC/TBBDriver/src/ConfigCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/ConfigCmd.cc
@@ -50,7 +50,7 @@ ConfigCmd::ConfigCmd()
 ConfigCmd::~ConfigCmd()
 {
 	delete itsTPE;
-	delete itsTBBackE;
+	delete itsTBBackE;	
 }
 
 // ----------------------------------------------------------------------------
diff --git a/MAC/APL/PIC/TBBDriver/src/DriverSettings.cc b/MAC/APL/PIC/TBBDriver/src/DriverSettings.cc
index 5bf79045a2f67431f2cfb64289ad530e663b7647..b25fcb0bcda0bbce2a23daa02d38f7da0139cfb6 100644
--- a/MAC/APL/PIC/TBBDriver/src/DriverSettings.cc
+++ b/MAC/APL/PIC/TBBDriver/src/DriverSettings.cc
@@ -52,7 +52,7 @@ TbbSettings* TbbSettings::instance()
 // Default constructor
 //
 TbbSettings::TbbSettings() :
-	itsDriverVersion(19),				  // driver version 1.9
+	itsDriverVersion(112),				// set cvs version of TBBDriver.c (now 1.12)
 	itsMaxBoards(0),							// max.number of boards on 1 driver 
 	itsMaxChannels(0),						// max.number of channels on 1 driver
 	itsMpsOnBoard(4),							// number of MPs on 1 board
@@ -82,6 +82,7 @@ TbbSettings::~TbbSettings()
 	if (itsCh2RcuTable) delete itsCh2RcuTable;
 	if (itsBoardInfo) delete itsBoardInfo;
 	if (itsChannelInfo) delete itsChannelInfo;
+	if (theirTbbSettings) delete theirTbbSettings;	
 }
 
 //---- get Tbb settings loaded from config file ---
diff --git a/MAC/APL/PIC/TBBDriver/src/ImageInfoCmd.cc b/MAC/APL/PIC/TBBDriver/src/ImageInfoCmd.cc
index 93e9308c1d70b6a91569ee1cc3b5aec4cc546794..e4c66cce3b328380bbfe66a44ea76a013617b1ea 100644
--- a/MAC/APL/PIC/TBBDriver/src/ImageInfoCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/ImageInfoCmd.cc
@@ -114,8 +114,21 @@ void ImageInfoCmd::saveTpAckEvent(GCFEvent& event)
 		itsTPackE = new TPReadfAckEvent(event);
 		
 		if (itsTPackE->status == 0) {
+			char info[256];
+			memset(info,0,256);
+			memcpy(info,&itsTPackE->data,256);
+			LOG_DEBUG_STR(formatString("ImageInfoCmd: %s",info)); 
+			
 			itsTBBackE->image_version[itsImage]= itsTPackE->data[0];	  
-			itsTBBackE->write_date[itsImage] = itsTPackE->data[1];		  		
+			itsTBBackE->write_date[itsImage] = itsTPackE->data[1];	
+			
+			sscanf(&info[8],"%s %s",
+						 &itsTBBackE->tp_file_name[itsImage][0],
+						 &itsTBBackE->mp_file_name[itsImage][0]);
+						
+			
+			//itsTBBackE->image_version[itsImage]= itsTPackE->data[0];	  
+			//itsTBBackE->write_date[itsImage] = itsTPackE->data[1];		  		
 		
 			itsImage++;
 			if (itsImage == 32) {
diff --git a/MAC/APL/PIC/TBBDriver/src/ReadfCmd.cc b/MAC/APL/PIC/TBBDriver/src/ReadfCmd.cc
index 38f6f1f4c25b8e1c199dcabb250aa1a7994e47a2..33ab1d00675d63b6e0a06948a107cbcd7b8c4c9b 100644
--- a/MAC/APL/PIC/TBBDriver/src/ReadfCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/ReadfCmd.cc
@@ -105,7 +105,7 @@ void ReadfCmd::sendTpEvent()
 {
 	itsTPE->addr		= static_cast<uint32>(itsBlock * FL_BLOCK_SIZE);
 	TS->boardPort(getBoardNr()).send(*itsTPE);
-	TS->boardPort(getBoardNr()).setTimer(0.2);
+	TS->boardPort(getBoardNr()).setTimer(TS->timeout());
 }
 
 // ----------------------------------------------------------------------------
diff --git a/MAC/APL/PIC/TBBDriver/src/ReadxCmd.cc b/MAC/APL/PIC/TBBDriver/src/ReadxCmd.cc
index 0cb42ac398d4779644d11fd1f65e564b45b56de9..f8dde5b124cde382a12225ed7a68c3d71b1faf6d 100644
--- a/MAC/APL/PIC/TBBDriver/src/ReadxCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/ReadxCmd.cc
@@ -47,7 +47,7 @@ ReadxCmd::ReadxCmd()
 ReadxCmd::~ReadxCmd()
 {
 	delete itsTPE;
-	delete itsTBBackE;
+	delete itsTBBackE;	
 }
 
 // ----------------------------------------------------------------------------
diff --git a/MAC/APL/PIC/TBBDriver/src/SizeCmd.cc b/MAC/APL/PIC/TBBDriver/src/SizeCmd.cc
index 60a389f5a8c277e5fe9b998fd6f88f5ec1acca4a..3d4cae6271b36288809582640e0ad7f435725af0 100644
--- a/MAC/APL/PIC/TBBDriver/src/SizeCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/SizeCmd.cc
@@ -41,6 +41,7 @@ SizeCmd::SizeCmd()
 	
 	for(int boardnr = 0;boardnr < MAX_N_TBBBOARDS;boardnr++) { 
 		itsTBBackE->status_mask[boardnr]	= 0;
+		itsTBBackE->npages[boardnr] 			= 0;
 	}
 	setWaitAck(true);		
 }
diff --git a/MAC/APL/PIC/TBBDriver/src/StatusCmd.cc b/MAC/APL/PIC/TBBDriver/src/StatusCmd.cc
index 3b01d1dac3a9d0f8053e3f74f6860a3a94c199f4..1dd975197736c9a173c940670971f2dead3f280c 100644
--- a/MAC/APL/PIC/TBBDriver/src/StatusCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/StatusCmd.cc
@@ -40,6 +40,15 @@ StatusCmd::StatusCmd()
 	
 	for(int boardnr = 0;boardnr < MAX_N_TBBBOARDS;boardnr++) { 
 		itsTBBackE->status_mask[boardnr]	= 0;
+		itsTBBackE->V12[boardnr]	= 0;
+		itsTBBackE->V25[boardnr]	= 0;
+		itsTBBackE->V33[boardnr]	= 0;
+		itsTBBackE->Tpcb[boardnr]	= 0;
+		itsTBBackE->Ttp[boardnr]	= 0;
+		itsTBBackE->Tmp0[boardnr]	= 0;
+		itsTBBackE->Tmp1[boardnr]	= 0;
+		itsTBBackE->Tmp2[boardnr]	= 0;
+		itsTBBackE->Tmp3[boardnr]	= 0;
 	}
 	setWaitAck(true);		
 }
diff --git a/MAC/APL/PIC/TBBDriver/src/TBBDriver.cc b/MAC/APL/PIC/TBBDriver/src/TBBDriver.cc
index 0d10170151ae268d52b75a9e142c9f870c1e8f9b..2ec9d9d58e818333c5da9bb8c91d5b7b45a06bee 100644
--- a/MAC/APL/PIC/TBBDriver/src/TBBDriver.cc
+++ b/MAC/APL/PIC/TBBDriver/src/TBBDriver.cc
@@ -188,9 +188,14 @@ TBBDriver::TBBDriver(string name)
 //-----------------------------------------------------------------------------
 TBBDriver::~TBBDriver()
 {
-	delete cmdhandler; 
+	delete [] itsBoard;
+	delete itsAliveTimer;
+	delete cmdhandler;
 	delete msghandler;
+	delete [] itsResetCount;
+	delete itsTbbQueue;
 	delete itsAlive;
+	if (cmd) delete cmd;
 }
 
 //-----------------------------------------------------------------------------
@@ -212,27 +217,7 @@ GCFEvent::TResult TBBDriver::init_state(GCFEvent& event, GCFPortInterface& port)
       LOG_INFO_STR(formatString("CONNECTED: port '%s'", port.getName().c_str()));
 			
 			if (isEnabled() && !itsAcceptor.isConnected()) {
- 			/*	
- 				// free all inputs on all boards
- 				TPFreeEvent free;
- 				free.opcode = TPFREE;
- 				free.status = 0;
- 				free.channel = 0xFFFFFFFF;  // send channel = -1 to free all inputs
- 				for (int32 bnr = 0; bnr < TS->maxBoards(); bnr++) {
- 					itsBoard[bnr].send(free);	
- 					LOG_DEBUG(formatString("FREE -1 is send to port '%s'", itsBoard[bnr].getName().c_str()));
- 				}
- 				  
- 				// clear all boards(FPGA register are set to 0 and firmware is maintained)
- 				TPClearEvent clear;
- 				clear.opcode = TPCLEAR;
- 				clear.status = 0;
- 				for (int32 bnr = 0; bnr < TS->maxBoards(); bnr++) {
- 					itsBoard[bnr].send(clear);	
- 					LOG_DEBUG(formatString("CLEAR is send to port '%s'", itsBoard[bnr].getName().c_str()));
- 				}
- 			*/
-				itsAcceptor.open();
+ 				itsAcceptor.open();
 			}	      			
 			if (itsAcceptor.isConnected()) {
 				TRAN(TBBDriver::idle_state);
@@ -387,8 +372,7 @@ GCFEvent::TResult TBBDriver::idle_state(GCFEvent& event, GCFPortInterface& port)
 			// look if the event is a Tbb event
 			if (SetTbbCommand(event.signal)) {
 				itsAliveTimer->cancelAllTimers();
-				//itsAliveTimer->setTimer(ALIVECHECKTIME);
-				itsAliveTimer->setTimer((long)10);
+				itsAliveTimer->setTimer(ALIVECHECKTIME);
 				status = cmdhandler->dispatch(event,port);
 				TRAN(TBBDriver::busy_state);
 			} else {
@@ -510,6 +494,7 @@ GCFEvent::TResult TBBDriver::busy_state(GCFEvent& event, GCFPortInterface& port)
 			status = cmdhandler->dispatch(event,port); // dispatch ack from boards
 			
 			if (cmdhandler->tpCmdDone() == true) {
+				delete cmd;
 				itsAliveTimer->setTimer((long)2);
 				itsAliveCheck = false;
 				TRAN(TBBDriver::idle_state);
@@ -521,7 +506,7 @@ GCFEvent::TResult TBBDriver::busy_state(GCFEvent& event, GCFPortInterface& port)
 			if (cmdhandler->tpCmdDone() == true){
 				// set ALIVE timer, and check for resets
 				//if (!itsAliveCheck) {
-				//	itsAliveTimer->setTimer((long)1);
+				//	itsAliveTimer->setTimer((long)2);
 				//	itsAliveCheck = false;
 				//}
 				TRAN(TBBDriver::idle_state);
@@ -678,10 +663,12 @@ bool TBBDriver::CheckAlive(GCFEvent& event, GCFPortInterface& port)
 //-----------------------------------------------------------------------------
 bool TBBDriver::SetTbbCommand(unsigned short signal)
 {
-	if (cmd) delete cmd;
+	if (cmd) {
+		//cmdhandler->setTpCmd(0);
+		delete cmd;
+	}
 	switch(signal)
 	{
-		
 		case TBB_ALLOC:	{
 			AllocCmd *cmd;
 			cmd = new AllocCmd();
diff --git a/MAC/APL/PIC/TBBDriver/src/TBBDriver.conf.in b/MAC/APL/PIC/TBBDriver/src/TBBDriver.conf.in
index 5b7e57f74c0966b738b1377f2d2efe2bea1ca733..7d286e5fa37e446eedb6566474f93e3515e81a47 100644
--- a/MAC/APL/PIC/TBBDriver/src/TBBDriver.conf.in
+++ b/MAC/APL/PIC/TBBDriver/src/TBBDriver.conf.in
@@ -11,8 +11,8 @@ TBBDriver.IF_NAME=eth1
 #
 # Communication settings for TBB boards
 #
-TBBDriver.TP_RETRIES=1
-TBBDriver.TP_TIMEOUT=0.5
+TBBDriver.TP_RETRIES=2
+TBBDriver.TP_TIMEOUT=1.0
 
 #
 # Specify the MAC addresses of all TBB boards
diff --git a/MAC/APL/PIC/TBBDriver/src/VersionCmd.cc b/MAC/APL/PIC/TBBDriver/src/VersionCmd.cc
index fa9709c69004e5561a28fe515e7c6138ba4fb132..13fd9ca772ed6f7e9eb08f9ff353628e6151c60d 100644
--- a/MAC/APL/PIC/TBBDriver/src/VersionCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/VersionCmd.cc
@@ -41,7 +41,15 @@ VersionCmd::VersionCmd()
 	itsTBBackE 	= new TBBVersionAckEvent();
 	
 	for(int boardnr = 0;boardnr < MAX_N_TBBBOARDS;boardnr++) { 
-		itsTBBackE->status_mask[boardnr]		= 0;
+		itsTBBackE->status_mask[boardnr]	= 0;
+		itsTBBackE->boardid[boardnr]			= 0;
+		itsTBBackE->swversion[boardnr]  	= 0;
+		itsTBBackE->boardversion[boardnr]	= 0;
+		itsTBBackE->tpversion[boardnr]		= 0;
+		itsTBBackE->mp0version[boardnr] 	= 0;
+		itsTBBackE->mp1version[boardnr] 	= 0;
+		itsTBBackE->mp2version[boardnr] 	= 0;
+		itsTBBackE->mp3version[boardnr] 	= 0;
 	}
 	setWaitAck(true);
 }
@@ -74,7 +82,7 @@ void VersionCmd::saveTbbEvent(GCFEvent& event)
 			itsTBBackE->status_mask[boardnr] |= TBB_NO_BOARD;
 	}
 	
-	itsTBBackE->driverversion = TS->driverVersion();
+	itsTBBackE->driverversion = TS->driverVersion(); // set cvs version of TBBDriver.c
 	// select firt board
 	nextBoardNr();
 	
diff --git a/MAC/APL/PIC/TBBDriver/src/WritefCmd.cc b/MAC/APL/PIC/TBBDriver/src/WritefCmd.cc
index c3ec24de42982a1c063fc7d9ddb774a0ea9914d9..811f392aa3d5e009015bf8180eabc8cc381068a7 100644
--- a/MAC/APL/PIC/TBBDriver/src/WritefCmd.cc
+++ b/MAC/APL/PIC/TBBDriver/src/WritefCmd.cc
@@ -55,9 +55,9 @@ WritefCmd::WritefCmd():
 	TS					= TbbSettings::instance();
 	itsTPE 			= new TPWritefEvent();
 	itsTPackE 	= 0;
-	itsTBBE 		= 0;
+	itsTBBE			= 0;
 	itsTBBackE 	= new TBBWriteImageAckEvent();
-	itsImageData= 0;
+	itsImageData	= new uint8[2097152];
 	
 	itsTBBackE->status_mask = 0;
 	setWaitAck(true);
@@ -69,7 +69,7 @@ WritefCmd::~WritefCmd()
 	delete itsTPE;
 	delete itsTBBackE;
 	if (itsTBBE) delete itsTBBE;
-	if (itsImageData) delete itsImageData;
+	delete [] itsImageData;	
 }
 
 // ----------------------------------------------------------------------------
@@ -87,7 +87,7 @@ bool WritefCmd::isValid(GCFEvent& event)
 // ----------------------------------------------------------------------------
 void WritefCmd::saveTbbEvent(GCFEvent& event)
 {
-	itsTBBE	= new TBBWriteImageEvent(event);
+	itsTBBE			= new TBBWriteImageEvent(event);
 	
 	itsTBBackE->status_mask = 0;
 	if (TS->isBoardActive(itsTBBE->board)) {	
@@ -103,9 +103,6 @@ void WritefCmd::saveTbbEvent(GCFEvent& event)
 	LOG_DEBUG_STR(formatString("TP file: %s",itsFileNameTp));
 	LOG_DEBUG_STR(formatString("MP file: %s",itsFileNameMp));
 	
-	//itsImageData = new uint8[1966080];
-	itsImageData = new uint8[2097152];
-				
 	readFiles();
 	LOG_DEBUG_STR("Image files are read");
 	
@@ -150,7 +147,7 @@ void WritefCmd::sendTpEvent()
 				}
 				
 				TS->boardPort(getBoardNr()).send(*itsTPE);
-				TS->boardPort(getBoardNr()).setTimer(0.2);
+				TS->boardPort(getBoardNr()).setTimer(TS->timeout());
 			} break;
 			
 			// stage 3, verify flash
@@ -160,7 +157,7 @@ void WritefCmd::sendTpEvent()
 				readfEvent->status	=	0;
 				readfEvent->addr = static_cast<uint32>(itsBlock * FL_BLOCK_SIZE);
 				TS->boardPort(getBoardNr()).send(*readfEvent);
-				TS->boardPort(getBoardNr()).setTimer(0.2);
+				TS->boardPort(getBoardNr()).setTimer(TS->timeout());
 				delete readfEvent;
 			} break;
 			
@@ -173,6 +170,25 @@ void WritefCmd::sendTpEvent()
 				}
 				time_t write_time;
 				time(&write_time);
+				
+				// print write date and used TP and MP filename
+				char info[256];
+				memset(info,0,256);
+				
+				char *tp_name = strstr(itsFileNameTp,"tp");
+				char *mp_name = strstr(itsFileNameMp,"mp");
+				
+				sprintf(info," %s %s",tp_name,mp_name);
+				LOG_DEBUG_STR(formatString("ImageInfo: %s",info));
+				
+				itsTPE->data[0] = static_cast<uint32>(itsTBBE->version);
+				itsTPE->data[1] = static_cast<uint32>(write_time);
+				memcpy(&itsTPE->data[2],info,sizeof(info)); 
+				
+				//memcpy(&itsTPE->data[0],write_time,sizeof(uint32));
+				//memcpy(&itsTPE->data[1],itsFileNameTp,sizeof(char) * 64);
+				//memcpy(&itsTPE->data[1+16],itsFileNameMp,sizeof(char) * 64);
+				/*
 				itsTPE->data[0] = static_cast<uint32>(itsTBBE->version);
 				itsTPE->data[1] = static_cast<uint32>(write_time);
 				itsTPE->data[2] = 300;
@@ -183,8 +199,9 @@ void WritefCmd::sendTpEvent()
 				itsTPE->data[7] = 800;
 				itsTPE->data[8] = 900;
 				itsTPE->data[9] = 1000;
+				*/
 				TS->boardPort(getBoardNr()).send(*itsTPE);
-				TS->boardPort(getBoardNr()).setTimer(0.2);
+				TS->boardPort(getBoardNr()).setTimer(TS->timeout());
 				LOG_DEBUG_STR("Writing image info");
 				LOG_DEBUG_STR(formatString("%u %u",itsTPE->data[0],itsTPE->data[1]));
 			} break;
@@ -196,7 +213,7 @@ void WritefCmd::sendTpEvent()
 				itsBlock = (itsImage * FL_BLOCKS_IN_PAGE) + (FL_BLOCKS_IN_PAGE - 1);
 				readfEvent->addr = static_cast<uint32>(itsBlock * FL_BLOCK_SIZE);
 				TS->boardPort(getBoardNr()).send(*readfEvent);
-				TS->boardPort(getBoardNr()).setTimer(0.2);
+				TS->boardPort(getBoardNr()).setTimer(TS->timeout());
 				LOG_DEBUG_STR("Verifying image info");
 				delete readfEvent;
 			} break;
@@ -225,6 +242,7 @@ void WritefCmd::saveTpAckEvent(GCFEvent& event)
 						itsStage = write_flash;
 					}		
 				} else {
+					itsTBBackE->status_mask |= TBB_FLASH_ERROR;
 					LOG_DEBUG_STR("Received status > 0 (WritefCmd(erase_flash stage))");
 					setDone(true);
 				}
@@ -237,6 +255,7 @@ void WritefCmd::saveTpAckEvent(GCFEvent& event)
 					if (itsTPackE->status == 0) {
 						itsStage = verify_flash;		
 					} else {
+						itsTBBackE->status_mask |= TBB_FLASH_ERROR;
 						LOG_DEBUG_STR("Received status > 0 (WritefCmd(write_flash stage))");
 						setDone(true);
 					}
@@ -260,6 +279,7 @@ void WritefCmd::saveTpAckEvent(GCFEvent& event)
 						itsBlock++;
 						itsStage = write_flash;
 					} else {
+						itsTBBackE->status_mask |= TBB_FLASH_ERROR;
 						setDone(true);
 					}
 					
@@ -269,6 +289,7 @@ void WritefCmd::saveTpAckEvent(GCFEvent& event)
 						itsStage = write_info;
 					}
 				} else {
+					itsTBBackE->status_mask |= TBB_FLASH_ERROR;
 					LOG_DEBUG_STR("Received status > 0 (WritefCmd(verify_flash stage))");
 					setDone(true);
 				}				
@@ -281,6 +302,7 @@ void WritefCmd::saveTpAckEvent(GCFEvent& event)
 				if (itsTPackE->status == 0) {
 					itsStage = verify_info;		
 				} else {
+					itsTBBackE->status_mask |= TBB_FLASH_ERROR;
 					LOG_DEBUG_STR(formatString("Received status > 0 (0x%08X) (WritefCmd(write_info stage))",itsTPackE->status));
 					setDone(true);
 				}
@@ -294,7 +316,7 @@ void WritefCmd::saveTpAckEvent(GCFEvent& event)
 				TPReadfAckEvent *readfAckEvent = new TPReadfAckEvent(event);
 				
 				if (readfAckEvent->status == 0) {
-					for (int i = 0; i < 10; i++) {
+					for (int i = 0; i < 64; i++) {
 						if (readfAckEvent->data[i] != itsTPE->data[i]) {
 							LOG_DEBUG_STR(formatString("image info %d not same 0x%08X 0x%08X (WritefCmd(verify_info stage))",i,readfAckEvent->data[i],itsTPE->data[i]));
 							same = false;	
@@ -304,6 +326,7 @@ void WritefCmd::saveTpAckEvent(GCFEvent& event)
 						itsTBBackE->status_mask |= TBB_FLASH_ERROR; 
 					}
 				} else {
+					itsTBBackE->status_mask |= TBB_FLASH_ERROR;
 					LOG_DEBUG_STR(formatString("Received status > 0 (0x%08X) (WritefCmd(verify_info stage))",readfAckEvent->status));
 				}				
 				delete readfAckEvent;
diff --git a/MAC/APL/PIC/TBBDriver/src/tbbctl.cc b/MAC/APL/PIC/TBBDriver/src/tbbctl.cc
index 1cb8916ca54c636dfbc76f7efec1cef5ab12ed5c..42fc54fc181710b7080d8037e113dd278666a7e9 100644
--- a/MAC/APL/PIC/TBBDriver/src/tbbctl.cc
+++ b/MAC/APL/PIC/TBBDriver/src/tbbctl.cc
@@ -242,7 +242,7 @@ GCFEvent::TResult RecordCmd::ack(GCFEvent& e)
 		if (isSelected(cnr) && !(ack.status_mask[bnr] & TBB_NO_BOARD) ) {
 			if (ack.rcu_mask.test(cnr)) {
 				if (ack.status_mask[bnr] & TBB_SUCCESS) {
-					logMessage(cout,formatString("      ERROR, Rcu-%d NOT in correct state\n",cnr));
+					//logMessage(cout,formatString("      ERROR, Rcu-%d NOT in correct state\n",cnr));
 				} else {
 					logMessage(cout,formatString("      ERROR, Rcu-%d  %s\n",cnr,getDriverErrorStr(ack.status_mask[bnr]).c_str()));
 				}
@@ -297,7 +297,7 @@ GCFEvent::TResult StopCmd::ack(GCFEvent& e)
 		if (isSelected(cnr) && !(ack.status_mask[bnr] & TBB_NO_BOARD) ) {
 			if (ack.rcu_mask.test(cnr)) {
 				if (ack.status_mask[bnr] & TBB_SUCCESS) {
-					logMessage(cout,formatString("      ERROR, Rcu-%d NOT in correct state\n",cnr));
+					//logMessage(cout,formatString("      ERROR, Rcu-%d NOT in correct state\n",cnr));
 				} else {
 				  logMessage(cout,formatString("      ERROR, Rcu-%d  %s\n",cnr,getDriverErrorStr(ack.status_mask[bnr]).c_str()));
 				}
@@ -604,7 +604,7 @@ GCFEvent::TResult VersionCmd::ack(GCFEvent& e)
 {
   TBBVersionAckEvent ack(e);
 	
-	logMessage(cout,formatString("TBBDriver software version %3.1f\n",(ack.driverversion / 10.)));
+	logMessage(cout,formatString("TBBDriver software version %3.2f\n",(ack.driverversion / 100.)));
 	logMessage(cout,"TBB  ID  Software   Board    TP0      MP0      MP1      MP2      MP3");
 	logMessage(cout,"---  --  --------  -------  -------  -------  -------  -------  -------");
 	for (int bnr=0; bnr < getMaxSelections(); bnr++) {
@@ -966,12 +966,13 @@ GCFEvent::TResult ImageInfoCmd::ack(GCFEvent& e)
 {
 	TBBImageInfoAckEvent ack(e);
 	logMessage(cout,formatString("Reading image information from TBB %d\n", getBoard()));
-	logMessage(cout,"IMAGE  Version  Flash date");
-	logMessage(cout,"-----  -------  -------------------");  
+	logMessage(cout,"IMAGE  SW      Flash date_time      TP file name    MP file name");
+	logMessage(cout,"-----  ------  -------------------  --------------  --------------");  
 	if (ack.status_mask & TBB_SUCCESS) {
 		for (int image = 0; image < 32; image++) {	
-			if (ack.image_version[image] > 0xF0000000) {
-				logMessage(cout,formatString("  %2d      -          -                 no image information",image));
+			if (ack.write_date[image] == 0xFFFFFFFF) {
+				//logMessage(cout,formatString("  %2d   no information",image));
+				logMessage(cout,formatString("  %2d   free",image));
 			} else {
 				time_t write_time;
 				struct tm t;
@@ -980,8 +981,13 @@ GCFEvent::TResult ImageInfoCmd::ack(GCFEvent& e)
 				write_time = static_cast<time_t>(ack.write_date[image]);
 				t = *gmtime(&write_time);
 				version = static_cast<double>(ack.image_version[image] / 10.);
-				logMessage(cout,formatString("  %2d   %5.1f    %d-%d-%d  %d:%02d:%02d",image, version, 
-									 t.tm_mday,t.tm_mon,t.tm_year+1900,t.tm_hour,t.tm_min,t.tm_sec));
+				logMessage(cout,formatString("  %2d   V%5.1lf  %d-%d-%d_%d:%02d:%02d  %-14.14s  %-14.14s",
+									 	image,
+										version, 
+									 	t.tm_mday,t.tm_mon+1,t.tm_year+1900,
+										t.tm_hour,t.tm_min,t.tm_sec,
+										ack.tp_file_name[image],
+										ack.mp_file_name[image]));
 			}
 		}
 	}	else {	
@@ -1323,7 +1329,7 @@ GCFEvent::TResult WriterCmd::ack(GCFEvent& e)
 ReadPageCmd::ReadPageCmd(GCFPortInterface& port) : Command(port),
 	itsRcu(0),itsStartPage(0),itsPages(1),itsCmdStage(0),itsPage(0),itsTotalSize(0),itsStartAddr(0),itsSize(0),itsBoard(0),itsMp(0),
 	itsStationId(0),itsRspId(0),itsRcuId(0),itsSampleFreq(0),itsTime(0),itsSampleNr(0),itsSamplesPerFrame(0),
-	itsFreqBands(0),itsTotalSamples(0),itsTotalBands(0)
+	itsFreqBands(0),itsTotalSamples(0),itsTotalBands(0), itsBandNr(0), itsSliceNr(0)
 {
 	for (int i = 0; i < 512; i++) itsData[i] = 0;
 	logMessage(cout,"\n==== TBB-board, readx register ================================================\n");
@@ -1349,6 +1355,9 @@ void ReadPageCmd::send()
 		
 		case 2: {	// write page address to board
 			TBBWriterEvent send;
+			
+			itsMp = static_cast<int32>((itsStartPage + itsPage) / itsTotalSize);	// MP of requested addr
+			
 			send.board = itsBoard;
 			send.mp = itsMp;
 			send.pid = PID6;
@@ -1417,7 +1426,15 @@ void ReadPageCmd::send()
 //-----------------------------------------------------------------------------
 GCFEvent::TResult ReadPageCmd::ack(GCFEvent& e)
 {
+	char basefilename[PATH_MAX];
+	char filename[PATH_MAX];
+	char timestring[256];
+
 	int16 val[1400];
+	
+	double 				bar_size = 40;
+	static double	bar_interval = 1;
+	static double	bar_buff = 0;
 		
 	switch (itsCmdStage) {
 		
@@ -1428,7 +1445,7 @@ GCFEvent::TResult ReadPageCmd::ack(GCFEvent& e)
 			itsStartAddr = ack.rcu_start_addr[itsRcu];
 			itsSize = ack.rcu_pages[itsRcu];
 			itsBoard = ack.rcu_on_board[itsRcu];
-			itsMp = static_cast<int32>(ack.rcu_on_input[itsRcu] / 4);
+			//itsMp = static_cast<int32>(ack.rcu_on_input[itsRcu] / 4);
 			logMessage(cout,formatString("Rcu-%d Board[%d] Mp[%d]",itsRcu,itsBoard,itsMp));
 			
 			itsStartPage += itsStartAddr;
@@ -1446,10 +1463,12 @@ GCFEvent::TResult ReadPageCmd::ack(GCFEvent& e)
 				itsCmdStage = 10;
 			} else {
 				itsTotalSize = ack.npages[itsBoard] / 4;
-				if ((itsStartPage < itsStartAddr) || (itsStartPage > (itsStartAddr + itsTotalSize))) {
+				
+				if ((itsStartPage < itsStartAddr) || ((itsStartPage + itsPages) > (itsStartAddr + itsSize))) {
 					logMessage(cout,formatString("Requested Page belongs not to rcu-%d", itsRcu));			 
+				} else {
+					logMessage(cout,formatString("StartPage = %u ",itsStartPage));			 
 				}
-				logMessage(cout,formatString("StartPage = %u ",itsStartPage));			 
 			}
 		} break;
 		
@@ -1501,50 +1520,97 @@ GCFEvent::TResult ReadPageCmd::ack(GCFEvent& e)
 	}
 	
 	itsCmdStage++;
-	if (itsCmdStage < 6) {
-		//itsPort.setTimer(0.01);
-	} else { 
-		
+	if (itsCmdStage > 5) { // if stage > 5, received 1 frame
 				
+		bar_buff += 1;
 		if (itsPage == 0) {
+						
 			itsStationId = static_cast<int>(itsData[0] & 0xFF);
 			itsRspId = static_cast<int>((itsData[0] >> 8) & 0xFF);
 			itsRcuId = static_cast<int>((itsData[0] >> 16) & 0xFF);
 			itsSampleFreq = static_cast<int>((itsData[0] >> 24) & 0xFF);
-			itsTime = static_cast<time_t>(itsData[2])-1;
-			itsSampleNr = static_cast<int>(itsData[3]);
+			itsTime = static_cast<time_t>(itsData[2]);
+			itsFreqBands = static_cast<int>((itsData[4] >> 16) & 0xFFFF);
+			
+			if (itsFreqBands == 0) {
+				itsSampleNr = static_cast<int>(itsData[3]);
+			} else {
+				itsBandNr = static_cast<int>(itsData[3] & 0x03FF);
+				itsSliceNr = static_cast<int>(itsData[3] >> 10);
+			}
+			strftime(timestring, 255, "%Y%m%d_%H%M%S", gmtime(&itsTime));
+			
+			cout << "Station ID      : " << itsStationId << endl;
+			cout << "RSP ID          : " << itsRspId << endl;
+			cout << "RCU ID          : " << itsRcuId << endl;
+			cout << "Sample freq     : " << itsSampleFreq << " MHz" << endl;
+			if (itsTime < 0) {
+				cout << "Time            : invalid" << endl;
+			} else {
+				cout << "Time of 1e sample/slice  : " << timestring << " (" << (uint32)itsTime << ")" << endl ;
+			}
+			if (itsTotalBands > 0) {
+				cout << "Slice number of 1e slice : " << itsSliceNr << endl;
+				cout << "Band number of 1e sample : " << itsBandNr << endl;
+				cout << "Number of bands          : " << itsTotalBands << endl;
+				cout << "Data file format         : binary complex(int16 Re, int16 Im)" << endl;
+			}	else {
+				cout << "Sample number of 1e sample : " << itsSampleNr << endl;
+				cout << "Data file format           : binary  int16" << endl;
+			}
+			
+			// print size of progressbar on screen
+			bar_interval = itsPages / bar_size;
+			
+			cout << "|";
+			for (int i = 0; i < bar_size; i++) {
+				cout << "-";
+			}
+			cout << "|" << endl ;
+			cout << "|";
+						
+			
+			snprintf(basefilename, PATH_MAX, "%s_%s_%02d%02d",(itsTotalBands == 0)?"rw":"sb",timestring,itsStationId,itsRcuId);
 		}
 		itsSamplesPerFrame = static_cast<int>(itsData[4] & 0xFFFF);
-		itsFreqBands = static_cast<int>((itsData[4] >> 16) & 0xFFFF);
-						
+		
+		// print receive progress on screen
+		if (bar_interval < 1.) {
+			int count = ceil(bar_buff / bar_interval);
+			for (int i = 0; i < count; i++) {
+				cout << "x" << flush;
+			}
+			bar_buff -= (count * bar_interval); 
+		} else {
+			if (bar_buff >= bar_interval) {
+				cout << "x" << flush;
+				bar_buff -= bar_interval;
+			}
+		}
+								
 		int sample_cnt = 0;
 		int val_cnt = 0;
 		int data_cnt = 22; // 22 = startadress of data in frame
 		
-		
-		if (itsFreqBands > 0) {
-			// its SPECTRAL data
+		// extract payload
+		if (itsFreqBands > 0) {	// if itsFreqBands > 0 then it's SPECTRAL data
 			if (itsSamplesPerFrame < 975) {		
 				itsTotalSamples += itsSamplesPerFrame;
-				itsTotalBands += itsFreqBands;
-				//logMessage(cout,formatString("Samples[%d] Bands[%d]",itsTotalSamples,itsTotalBands));
+
 				// convert uint32 to complex int16
 				while (sample_cnt < itsSamplesPerFrame) {
-					// get complex sample
 					val[val_cnt++] = static_cast<int16>(itsData[data_cnt] & 0xFFFF);	// re part
 					val[val_cnt++] = static_cast<int16>((itsData[data_cnt++] >> 16) & 0xFFFF);	// im part
 					sample_cnt++;
 				}
 			}
-		}	else {
-			// its RAW data
+		}	else {	// if itsFreqBands = 0, it's RAW data
+
 			if (itsSamplesPerFrame < 1299) {		
-				itsTotalSamples += itsSamplesPerFrame;
-				itsTotalBands += itsFreqBands;
-				//logMessage(cout,formatString("Samples[%d] Bands[%d]",itsTotalSamples,itsTotalBands));
-				// convert uint32 to int12
 				uint32 data[3];
-				
+				itsTotalSamples += itsSamplesPerFrame;
+
+				// 1e convert uint32 to int12
 				while (sample_cnt < itsSamplesPerFrame) {
 					// get 96 bits from received data
 					data[0] = itsData[data_cnt++];
@@ -1564,78 +1630,77 @@ GCFEvent::TResult ReadPageCmd::ack(GCFEvent& e)
 					sample_cnt += 8;
 				}
 				
-				// convert all received samples from signed 12bit to signed 16bit
+				// 2e convert all received samples from signed 12bit to signed 16bit
 				for (int cnt = 0; cnt < val_cnt; cnt++) {
 					if (val[cnt] & 0x0800) val[cnt] |= 0xF000;
 				}
 			}
 		}
+		
 		// write all data to file
 		FILE* file;
-		char line[10][256];
-		char basefilename[PATH_MAX];
-		char filename[PATH_MAX];
-		char timestring[256];
-		
+				
 		if (val_cnt > 0) {
-			strftime(timestring, 255, "%Y%m%d_%H%M%S", gmtime(&itsTime));
-			snprintf(basefilename, PATH_MAX, "%s_%s_%02d%02d",(itsTotalBands == 0)?"rw":"sb",timestring,itsStationId,itsRcuId);
-			
+			// save unpacked frame to file
 			snprintf(filename, PATH_MAX, "%s.dat",basefilename);
 			file = fopen(filename,"a");
-			fwrite(val,sizeof(int16),val_cnt,file);
+			fwrite(&itsData[0],sizeof(uint32),22,file);		// frame header 88 bytes (4 x 22)
+			fwrite(&val[0],sizeof(int16),val_cnt,file);		// payload
+			fwrite(&itsData[509],sizeof(uint32),1,file);	// payload CRC 4 bytes (4 x 1)
 			fclose(file);
 		}
+		
 		itsPage++;
-		if (itsPage < itsPages) {
-			itsCmdStage = 2;
+		if ((itsPage < itsPages) && (itsPage < itsSize)) { 
+				itsCmdStage = 2;
 		}	else {
-			// print page information
+			// last page received, print last info on screen
+			cout << "|" << endl;
+			cout << "Total received frames : " << itsPage << endl;
+			cout << "Total received samples: " << itsTotalSamples << endl;
+
+			if (val_cnt > 0) {
+				cout << "Filename        : " << basefilename << ".nfo" << endl;
+				cout << "                : " << basefilename << ".dat" << endl;;
+				cout << "Each frame exists of:" << endl;
+				cout << "  HEADER(88 bytes) + PAYLOAD(see header for size) + PAYLOAD_CRC(4 bytes)" << endl;
+			} else {
+				cout << "Filename        : NO DATA IN FRAME" << endl;
+			}
+			
+			
+			
+			// save page information to file
 			strftime(timestring, 255, "%Y-%m-%d  %H:%M:%S", gmtime(&itsTime));
+
+			snprintf(filename, PATH_MAX, "%s.nfo",basefilename);
+			file = fopen(filename,"w");		
 			
-			sprintf(line[0],"Station ID      : %d",itsStationId);
-			sprintf(line[1],"RSP ID          : %d",itsRspId);
-			sprintf(line[2],"RCU ID          : %d",itsRcuId);
-			sprintf(line[3],"Sample freq     : %d MHz",itsSampleFreq);
+			fprintf(file,  "Station ID      : %d",itsStationId);
+			fprintf(file,  "RSP ID          : %d",itsRspId);
+			fprintf(file,  "RCU ID          : %d",itsRcuId);
+			fprintf(file,  "Sample freq     : %d MHz",itsSampleFreq);
 			if (itsTime < 0) {
-				sprintf(line[4],"Time            : invalid");
+				fprintf(file,"Time            : invalid");
 			} else {
-				sprintf(line[4],"Time            : %s (%u)",timestring,(uint32)itsTime);
+				fprintf(file,"Time of 1e sample/slice  : %s (%u)",timestring,(uint32)itsTime);
 			}
-			sprintf(line[5],"SampleNr        : %u",itsSampleNr);
-			if (itsTotalBands) {
-				sprintf(line[6],"FreqBands       : %u",itsTotalBands);
-				sprintf(line[7],"Data file format: binary complex(int16 Re, int16 Im)");
+			if (itsTotalBands > 0) {
+				fprintf(file,"Slice number of 1e slice : %u",itsSliceNr);
+				fprintf(file,"Band number of 1e sample : %u",itsBandNr);
+				fprintf(file,"Number of bands          : %u",itsTotalBands);
+				fprintf(file,"Data file format         : binary complex(int16 Re, int16 Im)");
 			}	else {
-				sprintf(line[6],"Samples         : %u",itsTotalSamples);
-				sprintf(line[7],"Data file format: binary  int16");
-			}
-			if (val_cnt > 0) {
-				sprintf(line[8],"Filename        : %s.nfo",basefilename);
-				sprintf(line[9],"                : %s.dat",basefilename);
-			} else {
-				sprintf(line[8],"Filename        : NO DATA IN FRAME");
-				sprintf(line[9],"                : ");
-			}
-			
-			if (val_cnt > 0) {			
-				snprintf(filename, PATH_MAX, "%s.nfo",basefilename);
-				file = fopen(filename,"w");		
-									
-				for (int32 lnr = 0;lnr < 10; lnr++) {
-					fprintf(file,line[lnr]);
-					fprintf(file,"\n");
-				}
-				fclose(file);
-			}
-			
-			for (int32 lnr = 0;lnr < 10; lnr++) {
-				logMessage(cout,line[lnr]);
+				fprintf(file,"Sample number of 1e sample : %u",itsSampleNr);
+				fprintf(file,"Total number of samples    : %u",itsTotalSamples);
+				fprintf(file,"Data file format           : binary  int16");
+				fprintf(file," ");
 			}
+			fclose(file);
 		}
 	}
+
 	if (itsPage == itsPages) {
-		
 		setCmdDone(true);
 	}
 
@@ -1663,9 +1728,9 @@ void TBBCtl::help()
 	logMessage(cout,"tbbctl --generate [--select=<set>]                                 # generate a trigger for all selected rcu's");	
 	logMessage(cout,"tbbctl --setup=level,mode,filter,window,dummy [--select=<set>]     # setup trigger system for all selected rcu's");
 	logMessage(cout,"tbbctl --coef=c0,c1,c2,c3 [--select=<set>]                         # set trigger coeffients for all selected rcu's");
-	logMessage(cout,"tbbctl --triginfo=rcu                                              # get trigger info for all selected rcu's\n");
+	logMessage(cout,"tbbctl --triginfo=rcu                                              # get trigger info for selected rcu\n");
 	
-	logMessage(cout,"tbbctl --read=rcunr,secondstime,sampletime,prepages,postpages      # transfer recorded data from rcunr to CEP");
+	logMessage(cout,"tbbctl --read=rcunr,secondstime,sampletime,prepages,postpages      # transfer recorded data from rcunr to CEP, use --mode first");
 	logMessage(cout,"tbbctl --mode=board,[transient | subbands]                         # set mode to configure UDP/IP header for CEP"); 
 	logMessage(cout,"tbbctl --version [--select=<set>]                                  # get version information from selected boards");
 	logMessage(cout,"tbbctl --status [--select=<set>]                                   # get status information from selected boards");	
@@ -1700,14 +1765,14 @@ TBBCtl::TBBCtl(string name, int argc, char** argv): GCFTask((State)&TBBCtl::init
 	}
 	registerProtocol(TBB_PROTOCOL, TBB_PROTOCOL_signalnames);
 	itsServerPort.init(*this, MAC_SVCMASK_TBBDRIVER, GCFPortInterface::SAP, TBB_PROTOCOL);
+	itsCmdTimer = new GCFTimerPort(*this, "AliveTimer");
 }
 
 //-----------------------------------------------------------------------------
 TBBCtl::~TBBCtl()
 {
-  if (itsCommand) {
-  	delete itsCommand;
-  }
+  if (itsCommand)		{ delete itsCommand; }
+  if (itsCmdTimer)	{ delete itsCmdTimer; }
 }
 
 //-----------------------------------------------------------------------------
@@ -1803,11 +1868,14 @@ GCFEvent::TResult TBBCtl::docommand(GCFEvent& e, GCFPortInterface& port)
     } break;
 		
 		case F_TIMER: {
-			//itsCommand->send();
-			logMessage(cout,"Timeout, tbbctl stopped\n");
-			TBBUnsubscribeEvent unsubscribe;
-      itsServerPort.send(unsubscribe);
-    	GCFTask::stop();
+			if (&port == itsCmdTimer) {
+				itsCommand->send();
+			} else {
+				logMessage(cout,"Timeout, tbbctl stopped\n");
+				TBBUnsubscribeEvent unsubscribe;
+      	itsServerPort.send(unsubscribe);
+    		GCFTask::stop();
+    	}
 		} break;
     
     case TBB_TRIG_GENERATE_ACK:
@@ -1816,8 +1884,6 @@ GCFEvent::TResult TBBCtl::docommand(GCFEvent& e, GCFPortInterface& port)
     	itsServerPort.setTimer((long)5);
     	status = itsCommand->ack(e); // handle the acknowledgement
     } break;
-    
-    
     	
     case TBB_ALLOC_ACK:
     case TBB_RCU_INFO_ACK:
@@ -1849,7 +1915,8 @@ GCFEvent::TResult TBBCtl::docommand(GCFEvent& e, GCFPortInterface& port)
     	status = itsCommand->ack(e); // handle the acknowledgement
     	if (!itsCommand->isCmdDone()) {
     		// not done send next command
-    		itsCommand->send();
+    		//itsCommand->send();
+    		itsCmdTimer->setTimer((long)0);
     	}
     } break;
 
diff --git a/MAC/APL/PIC/TBBDriver/src/tbbctl.h b/MAC/APL/PIC/TBBDriver/src/tbbctl.h
index fb261114fcee21428264c9ca88f5adc02818b655..442a873e80793ff00c15df6d6cd2256b9e27d20e 100644
--- a/MAC/APL/PIC/TBBDriver/src/tbbctl.h
+++ b/MAC/APL/PIC/TBBDriver/src/tbbctl.h
@@ -29,6 +29,7 @@
 
 #include <GCF/TM/GCF_Control.h>
 #include <GCF/TM/GCF_ETHRawPort.h>
+#include <GCF/TM/GCF_TimerPort.h>
 #include <Common/lofar_bitset.h>
 #include <Common/lofar_list.h>
 #include <Common/lofar_string.h>
@@ -665,6 +666,8 @@ class ReadPageCmd : public Command
 		int itsFreqBands;
 		int itsTotalSamples;
 		int itsTotalBands;
+		int itsBandNr;
+		int itsSliceNr;
 };
 
 
@@ -716,8 +719,8 @@ private:
 	void help();
 private:
   // ports
-  GCFPort	itsServerPort;
-
+  GCFPort				itsServerPort;
+	GCFTimerPort*	itsCmdTimer;
   // the command to execute
   Command* 	itsCommand;