diff --git a/silecs-cli-client/src/silecs-cli-client/main.cpp b/silecs-cli-client/src/silecs-cli-client/main.cpp
index 15cc21b3c1df5e6bb5d9f1cba542202843359b9a..f9e8eb2d82c5dc44d38e0f1111080654935ae94e 100755
--- a/silecs-cli-client/src/silecs-cli-client/main.cpp
+++ b/silecs-cli-client/src/silecs-cli-client/main.cpp
@@ -33,7 +33,14 @@
 const std::string startbold = "\e[1m";
 const std::string endbold = "\e[0m";
 
-enum ModeType { UNDEFINED, GET_DEVICE, GET_BLOCK, GET_REGISTER, SET_REGISTER };
+enum ModeType
+{
+    UNDEFINED,
+    GET_DEVICE,
+    GET_BLOCK,
+    GET_REGISTER,
+    SET_REGISTER
+};
 
 std::string arg_logTopics; //comma separated list ? space-separated ?
 std::string arg_parameterFile = "";
@@ -47,8 +54,8 @@ bool arg_checkChecksum = true;
 ModeType arg_mode = UNDEFINED;
 uint32_t periodicInterval = 0;
 
-char* log_arg_base[2] = {(char*)"-plcLog",(char*)"ERROR"};
-char* log_arg_verbose[2] = {(char*)"-plcLog",(char*)"ERROR,DEBUG,SETUP,ALLOC,LOCK,COMM,SEND,RECV,DATA,DIAG"};
+char *log_arg_base[2] = {(char*)"-plcLog", (char*)"ERROR"};
+char *log_arg_verbose[2] = {(char*)"-plcLog", (char*)"ERROR,DEBUG,SETUP,ALLOC,LOCK,COMM,SEND,RECV,DATA,DIAG"};
 
 void printHelp()
 {
@@ -68,7 +75,7 @@ void printHelp()
     std::cout << startbold << "\t-d " << endbold << "silecs-device to request" << std::endl;
     std::cout << startbold << "\t-f " << endbold << "path to silecs-parameter-file of the plc" << std::endl;
     std::cout << startbold << "\t-h " << endbold << "print this help" << std::endl;
-    std::cout << startbold << "\t-i " << endbold << "start interactive session" << std::endl;  // TODO: Implement
+    std::cout << startbold << "\t-i " << endbold << "start interactive session" << std::endl; // TODO: Implement
     std::cout << startbold << "\t-v " << endbold << "verbose, all LOGTOPICS are enabled" << std::endl; // TODO: Implement
     //std::cout << startbold << "\t-m " << endbold << "mode, can be 'GET_DEVICE', 'GET_BLOCK', 'GET_REGISTER' or 'SET_REGISTER'" << std::endl;
     std::cout << startbold << "\t-m " << endbold << "mode, can be 'GET_DEVICE', 'GET_BLOCK' or 'GET_REGISTER'" << std::endl;
@@ -99,518 +106,516 @@ int getch(void)
 {
     struct termios oldattr, newattr;
     int ch;
-    tcgetattr( STDIN_FILENO, &oldattr );
+    tcgetattr(STDIN_FILENO, &oldattr);
     newattr = oldattr;
-    newattr.c_lflag &= ~( ICANON | ECHO );
-    tcsetattr( STDIN_FILENO, TCSANOW, &newattr );
+    newattr.c_lflag &= ~ (ICANON | ECHO);
+    tcsetattr(STDIN_FILENO, TCSANOW, &newattr);
     ch = getchar();
-    tcsetattr( STDIN_FILENO, TCSANOW, &oldattr );
+    tcsetattr(STDIN_FILENO, TCSANOW, &oldattr);
     return ch;
 }
 
 //returns -1 for "return to previous menu" or array-index of list
 int querryUserPickFromList(std::vector<std::string> &list)
 {
-	int selection = -1;
-	std::vector<std::string>::iterator item;
-	while(selection < 0 || (unsigned int)selection > list.size())
-	{
-		int itemIndex = 1;
-		std::cout << std::endl;
-		std::cout << "The following options are available:" << std::endl;
-		std::cout << std::endl;
-		for( item = list.begin();item!= list.end(); item++)
-		{
-			std::cout << std::setw(5) << std::right << itemIndex << ": " << std::setw(30) << std::left << *item << std::endl;
-			itemIndex++;
-		}
-
-		std::cout << std::endl;
-		std::cout << std::setw(5) << std::right << "0" << ": " << std::setw(30) << std::left << "return to previous menu" << std::endl;
-		std::cout << std::endl;
-		std::cout << "Waiting for your selection ";
-		int input = getch();
-		std::cout << std::endl;
-		selection = input - 48; //ascii magic
-		if( selection < 0 || (unsigned int)selection > list.size() )
-		{
-			std::cout << "Invalid input: '" << input << "'. press any key to take another try!" << std::endl;
-			getch();
-		}
-	}
-	return selection-1; // -1 = return ... everything else is array-index
+    int selection = -1;
+    std::vector<std::string>::iterator item;
+    while (selection < 0 || (unsigned int)selection > list.size())
+    {
+        int itemIndex = 1;
+        std::cout << std::endl;
+        std::cout << "The following options are available:" << std::endl;
+        std::cout << std::endl;
+        for (item = list.begin(); item != list.end(); item++)
+        {
+            std::cout << std::setw(5) << std::right << itemIndex << ": " << std::setw(30) << std::left << *item << std::endl;
+            itemIndex++;
+        }
+
+        std::cout << std::endl;
+        std::cout << std::setw(5) << std::right << "0" << ": " << std::setw(30) << std::left << "return to previous menu" << std::endl;
+        std::cout << std::endl;
+        std::cout << "Waiting for your selection ";
+        int input = getch();
+        std::cout << std::endl;
+        selection = input - 48; //ascii magic
+        if (selection < 0 || (unsigned int)selection > list.size())
+        {
+            std::cout << "Invalid input: '" << input << "'. press any key to take another try!" << std::endl;
+            getch();
+        }
+    }
+    return selection - 1; // -1 = return ... everything else is array-index
 }
 
 std::string getPLCName(Silecs::XMLParser &paramParser)
 {
-	Silecs::ElementXML mappingNode = paramParser.getFirstElementFromXPath("/SILECS-Param/SILECS-Mapping");
-	return mappingNode.getAttribute("plc-name");
+    Silecs::ElementXML mappingNode = paramParser.getFirstElementFromXPath("/SILECS-Param/SILECS-Mapping");
+    return mappingNode.getAttribute("plc-name");
 }
 
 Silecs::Cluster* getSilecsClusterbyDevice(std::string deviceName, Silecs::XMLParser &paramParser, Silecs::Service *silecsService)
 {
-	Silecs::ElementXML classNode = paramParser.getFirstElementFromXPath("/SILECS-Param/SILECS-Mapping/SILECS-Class[Instance/@label='"+ deviceName + "']");
-	std::string className = classNode.getAttribute("name");
-	std::string classVersion = classNode.getAttribute("version");
-	return silecsService->getCluster(className,classVersion);
+    Silecs::ElementXML classNode = paramParser.getFirstElementFromXPath("/SILECS-Param/SILECS-Mapping/SILECS-Class[Instance/@label='" + deviceName + "']");
+    std::string className = classNode.getAttribute("name");
+    std::string classVersion = classNode.getAttribute("version");
+    return silecsService->getCluster(className, classVersion);
 }
 
 std::string getSilecsBlockNamebyRegisterName(std::string registerName, Silecs::XMLParser &paramParser)
 {
-	Silecs::ElementXML blockNode = paramParser.getFirstElementFromXPath("/SILECS-Param/SILECS-Mapping/SILECS-Class/*[*/@name='"+ registerName + "']");
-	return blockNode.getAttribute("name");
+    Silecs::ElementXML blockNode = paramParser.getFirstElementFromXPath("/SILECS-Param/SILECS-Mapping/SILECS-Class/*[*/@name='" + registerName + "']");
+    return blockNode.getAttribute("name");
 }
 
-bool isRegisterInBlock(std::string registerName, std::string blockName,  Silecs::XMLParser &paramParser)
+bool isRegisterInBlock(std::string registerName, std::string blockName, Silecs::XMLParser &paramParser)
 {
-	Silecs::ElementXML blockNode = paramParser.getFirstElementFromXPath("/SILECS-Param/SILECS-Mapping/SILECS-Class/*[*/@name='"+ registerName + "']");
-	if( blockName == blockNode.getAttribute("name"))
-		return true;
-	return false;
+    Silecs::ElementXML blockNode = paramParser.getFirstElementFromXPath("/SILECS-Param/SILECS-Mapping/SILECS-Class/*[*/@name='" + registerName + "']");
+    if (blockName == blockNode.getAttribute("name"))
+        return true;
+    return false;
 }
 
 std::vector<std::string> getDeviceNames(Silecs::XMLParser &paramParser)
 {
-	std::vector< std::string > deviceNames;
-	boost::ptr_vector<Silecs::ElementXML> deviceNodes = paramParser.getElementsFromXPath_throwIfEmpty("/SILECS-Param/SILECS-Mapping/SILECS-Class/Instance");
-	boost::ptr_vector<Silecs::ElementXML>::iterator deviceNode;
-	for( deviceNode = deviceNodes.begin();deviceNode!= deviceNodes.end(); deviceNode++)
-	{
-		deviceNames.push_back(deviceNode->getAttribute("label"));
-	}
-	return deviceNames;
+    std::vector < std::string > deviceNames;
+    boost::ptr_vector<Silecs::ElementXML> deviceNodes = paramParser.getElementsFromXPath_throwIfEmpty("/SILECS-Param/SILECS-Mapping/SILECS-Class/Instance");
+    boost::ptr_vector<Silecs::ElementXML>::iterator deviceNode;
+    for (deviceNode = deviceNodes.begin(); deviceNode != deviceNodes.end(); deviceNode++)
+    {
+        deviceNames.push_back(deviceNode->getAttribute("label"));
+    }
+    return deviceNames;
 }
 
-std::vector<std::string> getBlockNamesFromDeviceName(std::string deviceName,  Silecs::XMLParser &paramParser)
+std::vector<std::string> getBlockNamesFromDeviceName(std::string deviceName, Silecs::XMLParser &paramParser)
 {
-	std::vector< std::string > blockNames;
-	Silecs::ElementXML classNode = paramParser.getFirstElementFromXPath("/SILECS-Param/SILECS-Mapping/SILECS-Class[Instance/@label='"+ deviceName + "']");
-	std::string className = classNode.getAttribute("name");
-	boost::ptr_vector<Silecs::ElementXML> blocks = paramParser.getElementsFromXPath_throwIfEmpty("/SILECS-Param/SILECS-Mapping/SILECS-Class[@name='"+ className + "']/*[ name()='Acquisition-Block' or name()='Setting-Block' or name()='Command-Block']");
-	boost::ptr_vector<Silecs::ElementXML>::iterator block;
-	for( block = blocks.begin();block!= blocks.end(); block++)
-	{
-		//std::cout<< block->getAttribute("name") << std::endl;
-		blockNames.push_back(block->getAttribute("name"));
-	}
-	return blockNames;
+    std::vector < std::string > blockNames;
+    Silecs::ElementXML classNode = paramParser.getFirstElementFromXPath("/SILECS-Param/SILECS-Mapping/SILECS-Class[Instance/@label='" + deviceName + "']");
+    std::string className = classNode.getAttribute("name");
+    boost::ptr_vector<Silecs::ElementXML> blocks = paramParser.getElementsFromXPath_throwIfEmpty("/SILECS-Param/SILECS-Mapping/SILECS-Class[@name='" + className + "']/*[ name()='Acquisition-Block' or name()='Setting-Block' or name()='Command-Block']");
+    boost::ptr_vector<Silecs::ElementXML>::iterator block;
+    for (block = blocks.begin(); block != blocks.end(); block++)
+    {
+        //std::cout<< block->getAttribute("name") << std::endl;
+        blockNames.push_back(block->getAttribute("name"));
+    }
+    return blockNames;
 }
 
-std::vector<std::string> getRegisterNamesFromDeviceBlockName(std::string deviceName, std::string blockName,  Silecs::XMLParser &paramParser)
+std::vector<std::string> getRegisterNamesFromDeviceBlockName(std::string deviceName, std::string blockName, Silecs::XMLParser &paramParser)
 {
-	std::vector< std::string > registerNames;
-	Silecs::ElementXML classNode = paramParser.getFirstElementFromXPath("/SILECS-Param/SILECS-Mapping/SILECS-Class[Instance/@label='"+ deviceName + "']");
-	std::string className = classNode.getAttribute("name");
-	boost::ptr_vector<Silecs::ElementXML> registerNodes = paramParser.getElementsFromXPath_throwIfEmpty("/SILECS-Param/SILECS-Mapping/SILECS-Class[@name='"+ className + "']/*[@name='"+ blockName + "']/*[ name()='Acquisition-Register' or name()='Setting-Register' or name()='Volatile-Register']");
-	boost::ptr_vector<Silecs::ElementXML>::iterator registerNode;
-	for( registerNode = registerNodes.begin();registerNode!= registerNodes.end(); registerNode++)
-	{
-		//std::cout<< block->getAttribute("name") << std::endl;
-		registerNames.push_back(registerNode->getAttribute("name"));
-	}
-	return registerNames;
+    std::vector < std::string > registerNames;
+    Silecs::ElementXML classNode = paramParser.getFirstElementFromXPath("/SILECS-Param/SILECS-Mapping/SILECS-Class[Instance/@label='" + deviceName + "']");
+    std::string className = classNode.getAttribute("name");
+    boost::ptr_vector<Silecs::ElementXML> registerNodes = paramParser.getElementsFromXPath_throwIfEmpty("/SILECS-Param/SILECS-Mapping/SILECS-Class[@name='" + className + "']/*[@name='" + blockName + "']/*[ name()='Acquisition-Register' or name()='Setting-Register' or name()='Volatile-Register']");
+    boost::ptr_vector<Silecs::ElementXML>::iterator registerNode;
+    for (registerNode = registerNodes.begin(); registerNode != registerNodes.end(); registerNode++)
+    {
+        //std::cout<< block->getAttribute("name") << std::endl;
+        registerNames.push_back(registerNode->getAttribute("name"));
+    }
+    return registerNames;
 }
 
-std::string getRegisterValueAsString(Silecs::Register* reg )
+std::string getRegisterValueAsString(Silecs::Register *reg)
 {
-	std::ostringstream os;
-	uint32_t dim1 = reg->getDimension1();
-	uint32_t dim2 = reg->getDimension2();
-    for (unsigned int i=0; i<dim1; i++)
-        for (unsigned int j=0; j<dim2; j++)
-        	os << reg->getInputValAsString(i, j) << " ";
+    std::ostringstream os;
+    uint32_t dim1 = reg->getDimension1();
+    uint32_t dim2 = reg->getDimension2();
+    for (unsigned int i = 0; i < dim1; i++)
+        for (unsigned int j = 0; j < dim2; j++)
+            os << reg->getInputValAsString(i, j) << " ";
     return os.str();
 }
 
 void printTableHead()
 {
-	std::cout << "------------------------------------------------------------------------------------------------------------------------------------------------" << std::endl;
-	std::cout << "| "<< std::setw(20) << std::left << "Device" << "| " << std::setw(30) << std::left << "Block" << "| " << std::setw(50) << std::left << "Register" << "| " << std::setw(30) << std::left<< "Value" << "|" << std::endl;
-	std::cout << "------------------------------------------------------------------------------------------------------------------------------------------------" << std::endl;
+    std::cout << "------------------------------------------------------------------------------------------------------------------------------------------------" << std::endl;
+    std::cout << "| " << std::setw(20) << std::left << "Device" << "| " << std::setw(30) << std::left << "Block" << "| " << std::setw(50) << std::left << "Register" << "| " << std::setw(30) << std::left << "Value" << "|" << std::endl;
+    std::cout << "------------------------------------------------------------------------------------------------------------------------------------------------" << std::endl;
 }
 
 void printRunState(Silecs::PLC *plc)
 {
-	std::cout << "------------------------------------------------------------------------------------------------------------------------------------------------" << std::endl;
-	if( plc->isRunning() )
-		std::cout << "plc run-state is: RUNNING" << std::endl;
-	else
-		std::cout << "plc run-state is: STOPPED" << std::endl;
-	std::cout << "------------------------------------------------------------------------------------------------------------------------------------------------" << std::endl;
+    std::cout << "------------------------------------------------------------------------------------------------------------------------------------------------" << std::endl;
+    if (plc->isRunning())
+        std::cout << "plc run-state is: RUNNING" << std::endl;
+    else
+        std::cout << "plc run-state is: STOPPED" << std::endl;
+    std::cout << "------------------------------------------------------------------------------------------------------------------------------------------------" << std::endl;
 }
 
-void printRegister(Silecs::Device *device, Silecs::Register* reg )
+void printRegister(Silecs::Device *device, Silecs::Register *reg)
 {
-	if( arg_silent )
-	{
-		std::cout << getRegisterValueAsString(reg) << std::endl;
-	}
-	else
-	{
-		std::cout << "| " << std::setw(20) << std::left << device->getLabel() << "| " << std::setw(30) << std::left << reg->getBlockName() << "| " << std::setw(50) << std::left << reg->getName() << "| " << std::setw(30) << std::left << getRegisterValueAsString(reg) << "|" << std::endl;
-	}
+    if (arg_silent)
+    {
+        std::cout << getRegisterValueAsString(reg) << std::endl;
+    }
+    else
+    {
+        std::cout << "| " << std::setw(20) << std::left << device->getLabel() << "| " << std::setw(30) << std::left << reg->getBlockName() << "| " << std::setw(50) << std::left << reg->getName() << "| " << std::setw(30) << std::left << getRegisterValueAsString(reg) << "|" << std::endl;
+    }
 }
 
-void printBlock(Silecs::Device *device, std::string blockName,Silecs::XMLParser &paramParser)
+void printBlock(Silecs::Device *device, std::string blockName, Silecs::XMLParser &paramParser)
 {
-	device->recv(blockName);
-	std::vector<Silecs::Register*> regCol = device->getRegisterCollection(blockName);
-	std::vector<Silecs::Register*>::iterator reg;
-	for (reg = regCol.begin();reg != regCol.end(); reg++ )
-	{
-		if(isRegisterInBlock((*reg)->getName(), blockName, paramParser))
-		{
-			printRegister(device, *reg);
-		}
-	}
+    device->recv(blockName);
+    std::vector<Silecs::Register*> regCol = device->getRegisterCollection(blockName);
+    std::vector<Silecs::Register*>::iterator reg;
+    for (reg = regCol.begin(); reg != regCol.end(); reg++)
+    {
+        if (isRegisterInBlock( (*reg)->getName(), blockName, paramParser))
+        {
+            printRegister(device, *reg);
+        }
+    }
 }
 
 void printDevice(Silecs::Device *device, Silecs::XMLParser &paramParser)
 {
-	std::vector<std::string> blockNames = getBlockNamesFromDeviceName(device->getLabel(), paramParser);
-	std::vector<std::string>::iterator blockName;
-	for( blockName = blockNames.begin();blockName!= blockNames.end(); blockName++)
-	{
-		device->recv(*blockName);
-		std::vector<Silecs::Register*> regCol = device->getRegisterCollection(*blockName);
-		std::vector<Silecs::Register*>::iterator reg;
-		for (reg = regCol.begin();reg != regCol.end(); reg++ )
-		{
-				printRegister(device, *reg);
-		}
-	}
+    std::vector < std::string > blockNames = getBlockNamesFromDeviceName(device->getLabel(), paramParser);
+    std::vector<std::string>::iterator blockName;
+    for (blockName = blockNames.begin(); blockName != blockNames.end(); blockName++)
+    {
+        device->recv(*blockName);
+        std::vector<Silecs::Register*> regCol = device->getRegisterCollection(*blockName);
+        std::vector<Silecs::Register*>::iterator reg;
+        for (reg = regCol.begin(); reg != regCol.end(); reg++)
+        {
+            printRegister(device, *reg);
+        }
+    }
 }
 
-void setRegister(Silecs::Register* reg,std::string value)
+void setRegister(Silecs::Register *reg, std::string value)
 {
-	std::cout << "Error: Setting values not yet supported."<< std::endl;
-	exit(EXIT_FAILURE);
+    std::cout << "Error: Setting values not yet supported." << std::endl;
+    exit (EXIT_FAILURE);
 }
 
 int connectInteractive(Silecs::Service *service, Silecs::XMLParser &paramParser)
 {
-	std::vector<std::string> mainMenu = boost::assign::list_of("connect to plc-device")("select block")("select register")("print whole device")("print block")("print register")("query plc run state")("cold-restart plc");
-	Silecs::Cluster *silecsCluster = NULL;
-	Silecs::PLC *plc = NULL;
-	Silecs::Device *device = NULL;
-	Silecs::Register* reg = NULL;
-
-	while(true)
-	{
-		std::cout << std::setw(20) << std::right << "Device:" << std::setw(20) << std::left << startbold << arg_deviceName << endbold <<std::endl;
-		std::cout << std::setw(20) << std::right << "Block:" << std::setw(20) << std::left << startbold << arg_blockName << endbold <<std::endl;
-		std::cout << std::setw(20) << std::right << "Register:" << std::setw(20) << std::left << startbold << arg_registerName << endbold <<std::endl;
-		int item = querryUserPickFromList(mainMenu);
-		switch(item)
-		{
-			case -1:
-				return EXIT_SUCCESS;
-			case 0:
-			{
-				std::vector<std::string> devices = getDeviceNames(paramParser);
-				int index = querryUserPickFromList(devices);
-				if( index == -1 )
-					break;
-				arg_deviceName = devices[index];
-				arg_blockName = "";
-				arg_registerName = "";
-				silecsCluster = getSilecsClusterbyDevice(arg_deviceName, paramParser, service);
-				plc = silecsCluster->getPLC(getPLCName(paramParser),arg_parameterFile);
-				plc->connect(Silecs::MASTER_SYNCHRO,true,arg_checkChecksum);
-				device = plc->getDevice(arg_deviceName);
-				break;
-			}
-			case 1:
-			{
-				if(arg_deviceName.empty())
-				{
-					std::cout << "Please select a device first! - Press any key to continue." << std::endl;
-					getch();
-					break;
-				}
-				std::vector<std::string> blocks = getBlockNamesFromDeviceName(arg_deviceName,paramParser);
-				int index = querryUserPickFromList(blocks);
-				if( index == -1 )
-					break;
-				arg_blockName = blocks[index];
-				arg_registerName = "";
-				break;
-			}
-			case 2:
-			{
-				if(arg_deviceName.empty() || arg_blockName.empty() )
-				{
-					std::cout << "Please connect to a device first! - Press any key to continue." << std::endl;
-					getch();
-					break;
-				}
-				std::vector<std::string> registers = getRegisterNamesFromDeviceBlockName(arg_deviceName,arg_blockName,paramParser);
-				int index = querryUserPickFromList(registers);
-				if( index == -1 )
-					break;
-				arg_registerName = registers[index];
-				reg = device->getRegister(arg_registerName);
-				break;
-			}
-			case 3:
-				if(arg_deviceName.empty())
-				{
-					std::cout << "Please connect to a device first! - Press any key to continue." << std::endl;
-					getch();
-					break;
-				}
-				printTableHead();
-				printDevice(device, paramParser);
-				break;
-			case 4:
-				if(arg_deviceName.empty() || arg_blockName.empty())
-				{
-					std::cout << "Please first connect to a device and select a block! - Press any key to continue." << std::endl;
-					getch();
-					break;
-				}
-				printTableHead();
-				printBlock(device, arg_blockName, paramParser);
-				break;
-			case 5:
-				if(arg_deviceName.empty() || arg_blockName.empty() || arg_registerName.empty())
-				{
-					std::cout << "Please first connect to device and pick a block and a register! - Press any key to continue." << std::endl;
-					getch();
-					break;
-				}
-				printTableHead();
-				printRegister(device,reg );
-				break;
-			case 6:
-				if(arg_deviceName.empty())
-				{
-					std::cout << "Please connect to a device first! - Press any key to continue." << std::endl;
-					getch();
-					break;
-				}
-				printRunState(plc);
-				break;
-			case 7:
-				if(arg_deviceName.empty())
-				{
-					std::cout << "Please connect to a device first! - Press any key to continue." << std::endl;
-					getch();
-					break;
-				}
-				plc->sendColdRestart();
-				break;
-			default:
-				std::cout << "Invalid option:" << item << std::endl;
-				return EXIT_FAILURE;
-		}
-	}
-
-	return EXIT_SUCCESS;
+    std::vector < std::string > mainMenu = boost::assign::list_of("connect to plc-device")("select block")("select register")("print whole device")("print block")("print register")("query plc run state")("cold-restart plc");
+    Silecs::Cluster *silecsCluster = NULL;
+    Silecs::PLC *plc = NULL;
+    Silecs::Device *device = NULL;
+    Silecs::Register *reg = NULL;
+
+    while (true)
+    {
+        std::cout << std::setw(20) << std::right << "Device:" << std::setw(20) << std::left << startbold << arg_deviceName << endbold << std::endl;
+        std::cout << std::setw(20) << std::right << "Block:" << std::setw(20) << std::left << startbold << arg_blockName << endbold << std::endl;
+        std::cout << std::setw(20) << std::right << "Register:" << std::setw(20) << std::left << startbold << arg_registerName << endbold << std::endl;
+        int item = querryUserPickFromList(mainMenu);
+        switch (item)
+        {
+            case -1:
+                return EXIT_SUCCESS;
+            case 0:
+            {
+                std::vector < std::string > devices = getDeviceNames(paramParser);
+                int index = querryUserPickFromList(devices);
+                if (index == -1)
+                    break;
+                arg_deviceName = devices[index];
+                arg_blockName = "";
+                arg_registerName = "";
+                silecsCluster = getSilecsClusterbyDevice(arg_deviceName, paramParser, service);
+                plc = silecsCluster->getPLC(getPLCName(paramParser), arg_parameterFile);
+                plc->connect(Silecs::MASTER_SYNCHRO, true, arg_checkChecksum);
+                device = plc->getDevice(arg_deviceName);
+                break;
+            }
+            case 1:
+            {
+                if (arg_deviceName.empty())
+                {
+                    std::cout << "Please select a device first! - Press any key to continue." << std::endl;
+                    getch();
+                    break;
+                }
+                std::vector < std::string > blocks = getBlockNamesFromDeviceName(arg_deviceName, paramParser);
+                int index = querryUserPickFromList(blocks);
+                if (index == -1)
+                    break;
+                arg_blockName = blocks[index];
+                arg_registerName = "";
+                break;
+            }
+            case 2:
+            {
+                if (arg_deviceName.empty() || arg_blockName.empty())
+                {
+                    std::cout << "Please connect to a device first! - Press any key to continue." << std::endl;
+                    getch();
+                    break;
+                }
+                std::vector < std::string > registers = getRegisterNamesFromDeviceBlockName(arg_deviceName, arg_blockName, paramParser);
+                int index = querryUserPickFromList(registers);
+                if (index == -1)
+                    break;
+                arg_registerName = registers[index];
+                reg = device->getRegister(arg_registerName);
+                break;
+            }
+            case 3:
+                if (arg_deviceName.empty())
+                {
+                    std::cout << "Please connect to a device first! - Press any key to continue." << std::endl;
+                    getch();
+                    break;
+                }
+                printTableHead();
+                printDevice(device, paramParser);
+                break;
+            case 4:
+                if (arg_deviceName.empty() || arg_blockName.empty())
+                {
+                    std::cout << "Please first connect to a device and select a block! - Press any key to continue." << std::endl;
+                    getch();
+                    break;
+                }
+                printTableHead();
+                printBlock(device, arg_blockName, paramParser);
+                break;
+            case 5:
+                if (arg_deviceName.empty() || arg_blockName.empty() || arg_registerName.empty())
+                {
+                    std::cout << "Please first connect to device and pick a block and a register! - Press any key to continue." << std::endl;
+                    getch();
+                    break;
+                }
+                printTableHead();
+                printRegister(device, reg);
+                break;
+            case 6:
+                if (arg_deviceName.empty())
+                {
+                    std::cout << "Please connect to a device first! - Press any key to continue." << std::endl;
+                    getch();
+                    break;
+                }
+                printRunState(plc);
+                break;
+            case 7:
+                if (arg_deviceName.empty())
+                {
+                    std::cout << "Please connect to a device first! - Press any key to continue." << std::endl;
+                    getch();
+                    break;
+                }
+                plc->sendColdRestart();
+                break;
+            default:
+                std::cout << "Invalid option:" << item << std::endl;
+                return EXIT_FAILURE;
+        }
+    }
+
+    return EXIT_SUCCESS;
 }
 
 int connectNonInteractive(Silecs::Service *service, Silecs::XMLParser &paramParser, bool periodicOptionSet)
 {
-	Silecs::Cluster *silecsCluster = getSilecsClusterbyDevice(arg_deviceName, paramParser, service);
-	Silecs::PLC *plc = silecsCluster->getPLC(getPLCName(paramParser),arg_parameterFile);
-	plc->connect(Silecs::MASTER_SYNCHRO,true,arg_checkChecksum);
-	if(!plc->isConnected())
-	{
-		std::cout << "Error: Failed to connect to PLC."<< std::endl;
-		return EXIT_FAILURE;
-	}
-
-	if( !arg_silent )
-	{
-		printRunState(plc);
-	}
-	Silecs::Device *device = plc->getDevice(arg_deviceName);
-
-	Silecs::Register* reg = NULL;
-	if(!arg_registerName.empty())
-	{
-		reg = device->getRegister(arg_registerName);
-		arg_blockName = getSilecsBlockNamebyRegisterName(arg_registerName, paramParser);
-	}
-
-	if( !arg_silent )
-	{
-		printTableHead();
-	}
-
-	do
-	{
-		switch(arg_mode)
-		{
-			case GET_DEVICE:
-				printDevice(device,paramParser);
-				break;
-			case GET_BLOCK:
-				printBlock(device, arg_blockName, paramParser);
-				break;
-			case GET_REGISTER:
-				device->recv(arg_blockName);
-				printRegister(device, reg);
-				break;
-			case SET_REGISTER:
-				setRegister(reg,"");
-				break;
-			default:
-				std::cout << "Unknown mode defined by -m" << std::endl;
-				return EXIT_FAILURE;
-		}
-		usleep(periodicInterval);
-	}while ( periodicOptionSet );
-
-
-	return EXIT_SUCCESS;
+    Silecs::Cluster *silecsCluster = getSilecsClusterbyDevice(arg_deviceName, paramParser, service);
+    Silecs::PLC *plc = silecsCluster->getPLC(getPLCName(paramParser), arg_parameterFile);
+    plc->connect(Silecs::MASTER_SYNCHRO, true, arg_checkChecksum);
+    if (!plc->isConnected())
+    {
+        std::cout << "Error: Failed to connect to PLC." << std::endl;
+        return EXIT_FAILURE;
+    }
+
+    if (!arg_silent)
+    {
+        printRunState(plc);
+    }
+    Silecs::Device *device = plc->getDevice(arg_deviceName);
+
+    Silecs::Register *reg = NULL;
+    if (!arg_registerName.empty())
+    {
+        reg = device->getRegister(arg_registerName);
+        arg_blockName = getSilecsBlockNamebyRegisterName(arg_registerName, paramParser);
+    }
+
+    if (!arg_silent)
+    {
+        printTableHead();
+    }
+
+    do
+    {
+        switch (arg_mode)
+        {
+            case GET_DEVICE:
+                printDevice(device, paramParser);
+                break;
+            case GET_BLOCK:
+                printBlock(device, arg_blockName, paramParser);
+                break;
+            case GET_REGISTER:
+                device->recv(arg_blockName);
+                printRegister(device, reg);
+                break;
+            case SET_REGISTER:
+                setRegister(reg, "");
+                break;
+            default:
+                std::cout << "Unknown mode defined by -m" << std::endl;
+                return EXIT_FAILURE;
+        }
+        usleep(periodicInterval);
+    }
+    while (periodicOptionSet);
+
+    return EXIT_SUCCESS;
 }
 
-
-
 int main(int argc, char **argv)
 {
-	try
-	{
-		int opt;
-		bool interactiveOptionSet = false;
-		bool periodicOptionSet = false;
-
-		while ((opt = getopt(argc, argv, ":vhcp:r:b:d:f:m:is")) != -1)
-		{
-
-			switch (opt)
-			{
-				case 'c':
-					arg_checkChecksum = false;
-					break;
-				case 'h':
-					printHelp();
-					return EXIT_SUCCESS;
-				case 'v':
-					arg_verbose = true;
-					break;
-				case 'p':
-					{
-						if(interactiveOptionSet)
-						{
-							std::cout << "Error: options '-i' and '-p' are mutually exclusive " << std::endl;
-							printHelp();
-							return EXIT_FAILURE;
-						}
-						periodicOptionSet = true;
-						std::istringstream ss(optarg);
-						ss >> periodicInterval;
-						break;
-					}
-				case 'r':
-					arg_registerName.assign(optarg);
-					break;
-				case 'd':
-					arg_deviceName.assign(optarg);
-					break;
-				case 'f':
-					arg_parameterFile.assign(optarg);
-					break;
-				case 'b':
-					arg_blockName.assign(optarg);
-					break;
-				case 'm':
-					{
-						std::string mode;
-						mode.assign(optarg);
-
-						if(mode == "GET_DEVICE")
-							arg_mode = GET_DEVICE;
-						else if( mode == "GET_BLOCK")
-							arg_mode = GET_BLOCK;
-						else if( mode == "GET_REGISTER")
-							arg_mode = GET_REGISTER;
-						else if( mode == "SET_REGISTER")
-							arg_mode = SET_REGISTER;
-						else
-						{
-							std::cout << "Error: invalid mode passed. Please check the help:" << std::endl;
-							printHelp();
-							return EXIT_FAILURE;
-						}
-						break;
-					}
-				case 'i':
-					if(interactiveOptionSet)
-					{
-						std::cout << "Error: options '-i' and '-p' are mutually exclusive " << std::endl;
-						printHelp();
-						return EXIT_FAILURE;
-					}
-					interactiveOptionSet = true;
-					break;
-				case 's':
-					arg_silent = true;
-					break;
-		        case '?':
-					std::cout << "Unrecognized option: " << optopt << std::endl;
-
-			}
-		}
-
-		if( arg_mode == GET_BLOCK && arg_blockName.empty())
-		{
-			std::cout << "Error: No block-name specified, cannot execute GET_BLOCK" << std::endl;
-			printHelp();
-			return EXIT_FAILURE;
-		}
-
-		if( ( arg_mode == GET_REGISTER || arg_mode == SET_REGISTER ) && arg_registerName.empty())
-		{
-			std::cout << "Error: No block-name specified, cannot execute GET_REGISTER or SET_REGISTER" << std::endl;
-			printHelp();
-			return EXIT_FAILURE;
-		}
-
-		if( arg_parameterFile.empty() )
-		{
-			std::cout << "Error: no parameter-file was passed. You need to at least pass -f [filename]" << std::endl;
-			printHelp();
-			return EXIT_FAILURE;
-		}
-
-		Silecs::XMLParser::init();
-		Silecs::XMLParser paramParser(arg_parameterFile,true);
-		Silecs::Service *silecsService  = NULL;
-	    if(arg_verbose)
-	    	silecsService  = Silecs::Service::getInstance(2,log_arg_verbose);
-	    else
-	        silecsService  = Silecs::Service::getInstance(2,log_arg_base);
-
-		if(interactiveOptionSet)
-		{
-			return connectInteractive(silecsService, paramParser);
-		}
-		else
-		{
-			if( arg_deviceName.empty() )
-			{
-				std::cout << "Error: no deviceName was passed. You need to pass -d [devicename]" << std::endl;
-				printHelp();
-				return EXIT_FAILURE;
-			}
-			return connectNonInteractive(silecsService, paramParser, periodicOptionSet );
-		}
-
-		return EXIT_SUCCESS;
-	}
-	catch(std::string *str)
-	{
-		std::cout << str << std::endl;
-	}
-	catch(std::exception& ex)
-	{
-		std::cout << ex.what() << std::endl;
-	}
-	catch(...)
-	{
-		std::cout << "Unexpected error caught in Main. Please notify SILECS support" << std::endl;
-	}
-	return -1;
+    try
+    {
+        int opt;
+        bool interactiveOptionSet = false;
+        bool periodicOptionSet = false;
+
+        while ( (opt = getopt(argc, argv, ":vhcp:r:b:d:f:m:is")) != -1)
+        {
+
+            switch (opt)
+            {
+                case 'c':
+                    arg_checkChecksum = false;
+                    break;
+                case 'h':
+                    printHelp();
+                    return EXIT_SUCCESS;
+                case 'v':
+                    arg_verbose = true;
+                    break;
+                case 'p':
+                {
+                    if (interactiveOptionSet)
+                    {
+                        std::cout << "Error: options '-i' and '-p' are mutually exclusive " << std::endl;
+                        printHelp();
+                        return EXIT_FAILURE;
+                    }
+                    periodicOptionSet = true;
+                    std::istringstream ss(optarg);
+                    ss >> periodicInterval;
+                    break;
+                }
+                case 'r':
+                    arg_registerName.assign(optarg);
+                    break;
+                case 'd':
+                    arg_deviceName.assign(optarg);
+                    break;
+                case 'f':
+                    arg_parameterFile.assign(optarg);
+                    break;
+                case 'b':
+                    arg_blockName.assign(optarg);
+                    break;
+                case 'm':
+                {
+                    std::string mode;
+                    mode.assign(optarg);
+
+                    if (mode == "GET_DEVICE")
+                        arg_mode = GET_DEVICE;
+                    else if (mode == "GET_BLOCK")
+                        arg_mode = GET_BLOCK;
+                    else if (mode == "GET_REGISTER")
+                        arg_mode = GET_REGISTER;
+                    else if (mode == "SET_REGISTER")
+                        arg_mode = SET_REGISTER;
+                    else
+                    {
+                        std::cout << "Error: invalid mode passed. Please check the help:" << std::endl;
+                        printHelp();
+                        return EXIT_FAILURE;
+                    }
+                    break;
+                }
+                case 'i':
+                    if (interactiveOptionSet)
+                    {
+                        std::cout << "Error: options '-i' and '-p' are mutually exclusive " << std::endl;
+                        printHelp();
+                        return EXIT_FAILURE;
+                    }
+                    interactiveOptionSet = true;
+                    break;
+                case 's':
+                    arg_silent = true;
+                    break;
+                case '?':
+                    std::cout << "Unrecognized option: " << optopt << std::endl;
+
+            }
+        }
+
+        if (arg_mode == GET_BLOCK && arg_blockName.empty())
+        {
+            std::cout << "Error: No block-name specified, cannot execute GET_BLOCK" << std::endl;
+            printHelp();
+            return EXIT_FAILURE;
+        }
+
+        if ( (arg_mode == GET_REGISTER || arg_mode == SET_REGISTER) && arg_registerName.empty())
+        {
+            std::cout << "Error: No block-name specified, cannot execute GET_REGISTER or SET_REGISTER" << std::endl;
+            printHelp();
+            return EXIT_FAILURE;
+        }
+
+        if (arg_parameterFile.empty())
+        {
+            std::cout << "Error: no parameter-file was passed. You need to at least pass -f [filename]" << std::endl;
+            printHelp();
+            return EXIT_FAILURE;
+        }
+
+        Silecs::XMLParser::init();
+        Silecs::XMLParser paramParser(arg_parameterFile, true);
+        Silecs::Service *silecsService = NULL;
+        if (arg_verbose)
+            silecsService = Silecs::Service::getInstance(2, log_arg_verbose);
+        else
+            silecsService = Silecs::Service::getInstance(2, log_arg_base);
+
+        if (interactiveOptionSet)
+        {
+            return connectInteractive(silecsService, paramParser);
+        }
+        else
+        {
+            if (arg_deviceName.empty())
+            {
+                std::cout << "Error: no deviceName was passed. You need to pass -d [devicename]" << std::endl;
+                printHelp();
+                return EXIT_FAILURE;
+            }
+            return connectNonInteractive(silecsService, paramParser, periodicOptionSet);
+        }
+
+        return EXIT_SUCCESS;
+    }
+    catch(std::string *str)
+    {
+        std::cout << str << std::endl;
+    }
+    catch(std::exception &ex)
+    {
+        std::cout << ex.what() << std::endl;
+    }
+    catch(...)
+    {
+        std::cout << "Unexpected error caught in Main. Please notify SILECS support" << std::endl;
+    }
+    return -1;
 }