diff --git a/.gitignore b/.gitignore
index e39ac2a0deedfa7bf971acf836f46313988af6ab..318be8b2c4b12cbbed7ba2ce323c162c32128235 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
 .nse_depinfo
 bin/
 obj/
+CVS
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000000000000000000000000000000000000..c046a65e65dfd63816f08621c5aeb67807c81151
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,12 @@
+[submodule "deps/serial2"]
+	path = deps/serial2
+	url = git@gitlab.elettra.eu:cs/ds/serial2.git
+[submodule "deps/serial2client"]
+	path = deps/serial2client
+	url = git@gitlab.elettra.eu:cs/cls/serial2client.git
+[submodule "deps/socket2"]
+	path = deps/socket2
+	url = git@gitlab.elettra.eu:cs/ds/socket2.git
+[submodule "deps/ionpump"]
+	path = deps/ionpump
+	url = git@gitlab.elettra.eu:cs/ds/ionpump.git
diff --git a/Makefile b/Makefile
index 7882fde2726fa4871762607143c708e41c937a26..c3f516f0f71bcfa66b4cba80f30301e5a9dc49ea 100644
--- a/Makefile
+++ b/Makefile
@@ -1,14 +1,7 @@
 NAME_SRV = 4uhv-srv
 
-SRC_FILES = ../serial2/src/Serial2Client.cpp ../serial2/src/Serial2ClientClass.cpp \
-	    ../serial2/src/Serial2ClientStateMachine.cpp \
-	    ../serial2/src/Serial2.cpp ../serial2/src/Serial2Class.cpp \
-	    ../serial2/src/Serial2StateMachine.cpp \
-	    ../socket2/src/Socket2.cpp ../socket2/src/Socket2Class.cpp \
-	    ../socket2/src/Socket2StateMachine.cpp \
-	    ../ionpump/src/Ionpump.cpp ../ionpump/src/IonpumpClass.cpp \
-	    ../ionpump/src/IonpumpStateMachine.cpp
-CXXFLAGS = -I ../serial2/src -I ../socket2/src -I ../ionpump/src
+SRC_FILES = $(wildcard deps/serial2*/src/Serial2*.cpp deps/socket2/src/Socket2*.cpp deps/ionpump/src/Ionpump*.cpp)
+CXXFLAGS = -Ideps/serial2/src -Ideps/serial2client/src -Ideps/socket2/src -Ideps/ionpump/src
 LDFLAGS =
 
 include ../makefiles/Make-9.3.3.in
diff --git a/deps/ionpump b/deps/ionpump
new file mode 160000
index 0000000000000000000000000000000000000000..427b337c604c4a560c83ff4d67c7f46e2d7317e7
--- /dev/null
+++ b/deps/ionpump
@@ -0,0 +1 @@
+Subproject commit 427b337c604c4a560c83ff4d67c7f46e2d7317e7
diff --git a/deps/serial2 b/deps/serial2
new file mode 160000
index 0000000000000000000000000000000000000000..bbebd3e523a530a607ab8afa109613c95d1ff596
--- /dev/null
+++ b/deps/serial2
@@ -0,0 +1 @@
+Subproject commit bbebd3e523a530a607ab8afa109613c95d1ff596
diff --git a/deps/serial2client b/deps/serial2client
new file mode 160000
index 0000000000000000000000000000000000000000..10769ee9428a5b12a8015ff804efac6ad4352b85
--- /dev/null
+++ b/deps/serial2client
@@ -0,0 +1 @@
+Subproject commit 10769ee9428a5b12a8015ff804efac6ad4352b85
diff --git a/deps/socket2 b/deps/socket2
new file mode 160000
index 0000000000000000000000000000000000000000..5fa2980f5656473d6329be8b05212252bc00b833
--- /dev/null
+++ b/deps/socket2
@@ -0,0 +1 @@
+Subproject commit 5fa2980f5656473d6329be8b05212252bc00b833
diff --git a/doc/4UHV Controller User Manual.pdf b/docs/4UHV Controller User Manual.pdf
similarity index 100%
rename from doc/4UHV Controller User Manual.pdf
rename to docs/4UHV Controller User Manual.pdf
diff --git a/doc/IPCMini Ion Pump Controller User Manual.pdf b/docs/IPCMini Ion Pump Controller User Manual.pdf
similarity index 100%
rename from doc/IPCMini Ion Pump Controller User Manual.pdf
rename to docs/IPCMini Ion Pump Controller User Manual.pdf
diff --git a/doc/README b/docs/README
similarity index 100%
rename from doc/README
rename to docs/README
diff --git a/src/4uhv-srv.multi.xmi b/src/4uhv-srv.multi.xmi
index 56f0f9d83d71525176c7954fea0b1ca8b2c1f48a..93caddee2cad2c6eb1f601342cc2c8509ca8cf04 100644
--- a/src/4uhv-srv.multi.xmi
+++ b/src/4uhv-srv.multi.xmi
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="ASCII"?>
 <pogoDsl:PogoSystem xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:pogoDsl="http://www.esrf.fr/tango/pogo/PogoDsl">
-  <multiClasses pogoRevision="9.4" name="4uhv-srv" sourcePath="/home/alessio/Sources/cvs-trees/fermi/servers/4uhv/src" description="" filestogenerate="XMI   file,Code files,Protected Regions">
+  <multiClasses pogoRevision="9.4" name="4uhv-srv" sourcePath="/home/alessio/fermi/servers/4uhv/src" description="" filestogenerate="XMI   file,Code files,Protected Regions">
     <classes classname="Socket2" sourcePath="../../socket2/src">
       <inheritances classname="Device_Impl" sourcePath=""/>
     </classes>
@@ -9,7 +9,7 @@
     </classes>
     <classes classname="Agilent4uhv" sourcePath="./." hasDynamic="true">
       <inheritances classname="Device_Impl" sourcePath=""/>
-      <inheritances classname="Serial2Client" sourcePath="/home/alessio/Sources/cvs-trees/fermi/servers/4uhv/src/././../../serial2/src"/>
+      <inheritances classname="Serial2Client" sourcePath="/home/alessio/fermi/servers/4uhv/src/././../../serial2/src"/>
     </classes>
     <classes classname="Ionpump" sourcePath="../../ionpump/src">
       <inheritances classname="Device_4Impl" sourcePath=""/>
diff --git a/src/Agilent4uhv.cpp b/src/Agilent4uhv.cpp
index c35174f40e3c97a35d54236ffcb642a2e4d906b7..006650f1627f6ef295ff74e962fb7f22767d73e6 100644
--- a/src/Agilent4uhv.cpp
+++ b/src/Agilent4uhv.cpp
@@ -1,5 +1,5 @@
 /*----- PROTECTED REGION ID(Agilent4uhv.cpp) ENABLED START -----*/
-static const char *RcsId = "$Id: Agilent4uhv.cpp,v 1.25 2019-04-01 09:14:47 alessio Exp $";
+static const char *RcsId = "$Id: Agilent4uhv.cpp,v 1.18 2018-05-10 08:04:51 alessio Exp $";
 //=============================================================================
 //
 // file :        Agilent4uhv.cpp
@@ -29,8 +29,8 @@ static const char *RcsId = "$Id: Agilent4uhv.cpp,v 1.25 2019-04-01 09:14:47 ales
 // 
 // $Author: alessio $
 //
-// $Revision: 1.25 $
-// $Date: 2019-04-01 09:14:47 $
+// $Revision: 1.18 $
+// $Date: 2018-05-10 08:04:51 $
 //
 // $HeadURL:  $
 //
@@ -42,8 +42,64 @@ static const char *RcsId = "$Id: Agilent4uhv.cpp,v 1.25 2019-04-01 09:14:47 ales
 
 #include <Agilent4uhv.h>
 #include <Agilent4uhvClass.h>
-
-#define MAX_DEVSTRING_LENGTH 255
+#include <iomanip>
+
+/* Commands */
+#define HVCH1		  11
+#define HVCH2		  12
+#define HVCH3		  13
+#define HVCH4		  14
+//#define BAUDRATE	 108
+//#define STATUS		 205
+#define ERRORCODE	 206
+#define MODEL		 319
+#define SERIALNUMBER	 323
+//#define RS485ADDRESS	 503
+//#define SERIALTYPE	 504
+#define SETCHANNEL	 505
+#define PRESSUREUNIT	 600
+#define OPERATINGMODE	 601
+#define PROTECT		 602
+#define FIXEDSTEP	 603
+#define DEVICENUMBERCH1  610
+#define POWERMAXCH1	 612
+#define VTARGETCH1	 613
+#define IPROTECTCH1	 614
+#define SETPOINTCH1	 615
+#define DEVICENUMBERCH2	 620
+#define POWERMAXCH2	 622
+#define VTARGETCH2	 623
+#define IPROTECTCH2	 624
+#define SETPOINTCH2	 625
+#define DEVICENUMBERCH3	 630
+#define POWERMAXCH3	 632
+#define VTARGETCH3	 633
+#define IPROTECTCH3	 634
+#define SETPOINTCH3	 635
+#define DEVICENUMBERCH4	 640
+#define POWERMAXCH4	 642
+#define VTARGETCH4	 643
+#define IPROTECTCH4	 644
+#define SETPOINTCH4	 645
+#define TEMPERATUREFAN	 800
+#define TEMPERATUREHVCH1 801
+#define TEMPERATUREHVCH2 802
+#define INTERLOCKSTATUS	 803
+#define STATUSSETPOINT	 804
+#define TEMPERATUREHVCH3 808
+#define TEMPERATUREHVCH4 809
+#define VMEASUREDCH1	 810
+#define IMEASUREDCH1	 811
+#define PRESSURECH1	 812
+#define VMEASUREDCH2	 820
+#define IMEASUREDCH2	 821
+#define PRESSURECH2	 822
+#define VMEASUREDCH3	 830
+#define IMEASUREDCH3	 831
+#define PRESSURECH3	 832
+#define VMEASUREDCH4	 840
+#define IMEASUREDCH4	 841
+#define PRESSURECH4	 842
 
 /*----- PROTECTED REGION END -----*/	//	Agilent4uhv.cpp
 
@@ -58,8 +114,16 @@ static const char *RcsId = "$Id: Agilent4uhv.cpp,v 1.25 2019-04-01 09:14:47 ales
 //
 //  Command name  |  Method name
 //================================================================
+//  OffHV1        |  off_hv1
+//  OffHV2        |  off_hv2
+//  OnHV1         |  on_hv1
+//  OnHV2         |  on_hv2
 //  State         |  Inherited (no method)
 //  Status        |  Inherited (no method)
+//  OffHV3        |  off_hv3
+//  OffHV4        |  off_hv4
+//  OnHV3         |  on_hv3
+//  OnHV4         |  on_hv4
 //================================================================
 
 //================================================================
@@ -68,8 +132,6 @@ static const char *RcsId = "$Id: Agilent4uhv.cpp,v 1.25 2019-04-01 09:14:47 ales
 //  Model         |  Tango::DevString	Scalar
 //  SerialNumber  |  Tango::DevString	Scalar
 //  Temperature   |  Tango::DevFloat	Scalar
-//  CRCErrors     |  Tango::DevLong	Scalar
-//  AutoStart     |  Tango::DevBoolean	Scalar
 //================================================================
 
 namespace Agilent4uhv_ns
@@ -124,21 +186,14 @@ void Agilent4uhv::delete_device()
 {
 	DEBUG_STREAM << "Agilent4uhv::delete_device() " << device_name << endl;
 	/*----- PROTECTED REGION ID(Agilent4uhv::delete_device) ENABLED START -----*/
+	
+	//	Delete device allocated objects
 	if (worker) {
 		worker->stop();
 		worker->join(NULL);
 	}
 	
-	//	Delete device allocated objects
-	delete attr_Model_read[0];
-	delete attr_SerialNumber_read[0];
-
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::delete_device
-	delete[] attr_Model_read;
-	delete[] attr_SerialNumber_read;
-	delete[] attr_Temperature_read;
-	delete[] attr_CRCErrors_read;
-	delete[] attr_AutoStart_read;
 
 	if (Tango::Util::instance()->is_svr_shutting_down()==false  &&
 		Tango::Util::instance()->is_device_restarting(device_name)==false &&
@@ -165,9 +220,8 @@ void Agilent4uhv::init_device()
 	nchannel = 0;
 	odd_channel_quirk = false;
 	init_error.clear();
+
 	worker = NULL;
-	norm_ops.clear();
-	prio_ops.clear();
 
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::init_device_before
 	
@@ -177,262 +231,67 @@ void Agilent4uhv::init_device()
 		//	If not starting up call init device for inherited object
 		Serial2Client_ns::Serial2Client::init_device();
 	}
-
-	//	Get the device properties from database
-	get_device_property();
+	//	No device property to be read from database
 	
-	attr_Model_read = new Tango::DevString[1];
-	attr_SerialNumber_read = new Tango::DevString[1];
-	attr_Temperature_read = new Tango::DevFloat[1];
-	attr_CRCErrors_read = new Tango::DevLong[1];
-	attr_AutoStart_read = new Tango::DevBoolean[1];
 	//	No longer if mandatory property not set. 
 	if (mandatoryNotDefined)
 		return;
 
 	/*----- PROTECTED REGION ID(Agilent4uhv::init_device) ENABLED START -----*/
 	
-	// Waiting the device
-	int retries = 0;
-	while(get_state2() == 9 && retries++ < 5) {
-		sleep(1);
-	}
-
+	//	Initialize device
 	try {
-		attr_Model_read[0] = new char[MAX_DEVSTRING_LENGTH];
-		attr_SerialNumber_read[0] = new char[MAX_DEVSTRING_LENGTH];
-		attr_CRCErrors_read[0] = 0;
-
-		read_Model();
-		read_SerialNumber();
-		if (strncmp(attr_Model_read[0], "9299010", 7) == 0 ||
-				strncmp(attr_Model_read[0], "9299011", 7) == 0 ||
-				strncmp(attr_Model_read[0], "9299100", 7) == 0 ||
-				strncmp(attr_Model_read[0], "9299101", 7) == 0 ||
-				strncmp(attr_Model_read[0], "X3602-64010", 11) == 0) {
-			nchannel = 1;
-		} else if (strncmp(attr_Model_read[0], "9299020", 7) == 0 ||
-				strncmp(attr_Model_read[0], "9299021", 7) == 0 ||
-				strncmp(attr_Model_read[0], "9299200", 7) == 0 ||
-				strncmp(attr_Model_read[0], "9299201", 7) == 0 ||
-				strncmp(attr_Model_read[0], "9299022", 7) == 0) {
-
-			read_PowerMaxCh1();
-			if (PowerMaxX_data["PowerMax1"] == 200)
-				odd_channel_quirk = true;
+		string model;
+		read(MODEL, model);
+		model.erase(remove(model.begin(), model.end(), ' '), model.end());
 
+		if (model == "9299010" || model == "9299011"
+				|| model == "9299100" || model == "9299101")
+			nchannel = 1;
+		else if (model == "9299020" || model == "9299021"
+				|| model == "9299200" || model == "9299201"
+				|| model == "9299022")
 			nchannel = 2;
-		} else if (strncmp(attr_Model_read[0], "9299210", 7) == 0 ||
-				strncmp(attr_Model_read[0], "9299211", 7) == 0 ||
-				strncmp(attr_Model_read[0], "9299212", 7) == 0 ||
-				strncmp(attr_Model_read[0], "9299213", 7) == 0) {
+		else if (model == "9299210" || model == "9299211"
+				|| model == "9299212" || model == "9299213")
 			nchannel = 3;
-		} else if (strncmp(attr_Model_read[0], "9299400", 7) == 0 ||
-				strncmp(attr_Model_read[0], "9299401", 7) == 0 ||
-				strncmp(attr_Model_read[0], "9299402", 7) == 0) {
+		else if (model == "9299400" || model == "9299401"
+				|| model == "9299402")
 			nchannel = 4;
-		} else {
+		else
 			Tango::Except::throw_exception( "",
 					"Unknown model",
 					"Agilent4uhv::init_device()");
-		}
 
-	
-		int pressure_unit;
-		read("600", pressure_unit);
-		if (pressure_unit != 1)
+		Tango::DevUShort powermax;
+		read(POWERMAXCH1, powermax);
+		if (powermax == 200)
+			odd_channel_quirk = true;
+
+		int unit;
+		read(PRESSUREUNIT, unit);
+		if (unit != 1)
  			Tango::Except::throw_exception( "",
  					"Pressure unit is wrong",
  					"Agilent4uhv::init_device()");
+ 
+		data.state = Tango::INIT;
+		data.status = "The device is in INIT state";
 
-		if(nchannel >= 1) {
-			norm_ops.push_back(&Agilent4uhv::read_HVCh1);
-			norm_ops.push_back(&Agilent4uhv::read_DeviceNumberCh1);
-			prio_ops.push_back(&Agilent4uhv::read_PressureCh1);
-			norm_ops.push_back(&Agilent4uhv::read_PowerMaxCh1);
-			norm_ops.push_back(&Agilent4uhv::read_VTargetCh1);
-			norm_ops.push_back(&Agilent4uhv::read_IProtectCh1);
-			norm_ops.push_back(&Agilent4uhv::read_SetPointCh1);
-			norm_ops.push_back(&Agilent4uhv::read_TemperatureCh1);
-			norm_ops.push_back(&Agilent4uhv::read_IMeasuredCh1);
-			norm_ops.push_back(&Agilent4uhv::read_VMeasuredCh1);
-			norm_ops.push_back(&Agilent4uhv::read_ErrorCodeCh1);
-		}
-		
-		if(nchannel >= 2) {
-			norm_ops.push_back(&Agilent4uhv::read_HVCh2);
-			norm_ops.push_back(&Agilent4uhv::read_DeviceNumberCh2);
-			prio_ops.push_back(&Agilent4uhv::read_PressureCh2);
-			norm_ops.push_back(&Agilent4uhv::read_PowerMaxCh2);
-			norm_ops.push_back(&Agilent4uhv::read_VTargetCh2);
-			norm_ops.push_back(&Agilent4uhv::read_IProtectCh1);
-			norm_ops.push_back(&Agilent4uhv::read_SetPointCh2);
-			norm_ops.push_back(&Agilent4uhv::read_TemperatureCh2);
-			norm_ops.push_back(&Agilent4uhv::read_IMeasuredCh2);
-			norm_ops.push_back(&Agilent4uhv::read_VMeasuredCh2);
-			norm_ops.push_back(&Agilent4uhv::read_ErrorCodeCh2);
-		}
-
-		if(nchannel >= 3) {
-			norm_ops.push_back(&Agilent4uhv::read_HVCh3);
-			norm_ops.push_back(&Agilent4uhv::read_DeviceNumberCh3);
-			prio_ops.push_back(&Agilent4uhv::read_PressureCh3);
-			norm_ops.push_back(&Agilent4uhv::read_PowerMaxCh3);
-			norm_ops.push_back(&Agilent4uhv::read_VTargetCh3);
-			norm_ops.push_back(&Agilent4uhv::read_IProtectCh1);
-			norm_ops.push_back(&Agilent4uhv::read_SetPointCh3);
-			norm_ops.push_back(&Agilent4uhv::read_TemperatureCh3);
-			norm_ops.push_back(&Agilent4uhv::read_IMeasuredCh3);
-			norm_ops.push_back(&Agilent4uhv::read_VMeasuredCh3);
-			norm_ops.push_back(&Agilent4uhv::read_ErrorCodeCh3);
-		}
+ 		worker = new Worker(this);
+ 		worker->start();
 		
-		if(nchannel >= 4) {
-			norm_ops.push_back(&Agilent4uhv::read_HVCh4);
-			norm_ops.push_back(&Agilent4uhv::read_DeviceNumberCh4);
-			prio_ops.push_back(&Agilent4uhv::read_PressureCh4);
-			norm_ops.push_back(&Agilent4uhv::read_PowerMaxCh4);
-			norm_ops.push_back(&Agilent4uhv::read_VTargetCh4);
-			norm_ops.push_back(&Agilent4uhv::read_IProtectCh1);
-			norm_ops.push_back(&Agilent4uhv::read_SetPointCh4);
-			norm_ops.push_back(&Agilent4uhv::read_TemperatureCh4);
-			norm_ops.push_back(&Agilent4uhv::read_IMeasuredCh4);
-			norm_ops.push_back(&Agilent4uhv::read_VMeasuredCh4);
-			norm_ops.push_back(&Agilent4uhv::read_ErrorCodeCh4);
-		}
-
-		// Related to all channels
-		norm_ops.push_back(&Agilent4uhv::read_FixedStep);
-		norm_ops.push_back(&Agilent4uhv::read_AutoStart);
-		norm_ops.push_back(&Agilent4uhv::read_Protect);
-		norm_ops.push_back(&Agilent4uhv::read_Temperature);
-		norm_ops.push_back(&Agilent4uhv::read_StatusSetPoint);
-		/* This must be the latest */
-		norm_ops.push_back(&Agilent4uhv::read_Status);
-
-		worker = new Agilent4uhvWorker(this);
-		worker->start();
 	} catch(Tango::DevFailed &e) {
 		init_error = "Initialization failed: " + string(e.errors[0].desc);
-		ERROR_STREAM << init_error << endl;
-		set_state(Tango::UNKNOWN);
-		assert(false);
+		set_state(Tango::FAULT);
 	} catch (...) {
-		init_error = "Initialization failed: Unknown error";
-		ERROR_STREAM << init_error << endl;
+		init_error =	"Initialization failed: Unknown error";
 		set_state(Tango::UNKNOWN);
-		assert(false);
 	}
 
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::init_device
 }
 
-//--------------------------------------------------------
-/**
- *	Method      : Agilent4uhv::get_device_property()
- *	Description : Read database to initialize property data members.
- */
-//--------------------------------------------------------
-void Agilent4uhv::get_device_property()
-{
-	/*----- PROTECTED REGION ID(Agilent4uhv::get_device_property_before) ENABLED START -----*/
-	
-	//	Initialize property data members
-	
-	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::get_device_property_before
-
-	mandatoryNotDefined = false;
-
-	//	Read device properties from database.
-	Tango::DbData	dev_prop;
-	dev_prop.push_back(Tango::DbDatum("DeviceName"));
-	dev_prop.push_back(Tango::DbDatum("PollingPause"));
-	dev_prop.push_back(Tango::DbDatum("PollingPeriod"));
-
-	//	is there at least one property to be read ?
-	if (dev_prop.size()>0)
-	{
-		//	Call database and extract values
-		if (Tango::Util::instance()->_UseDb==true)
-			get_db_device()->get_property(dev_prop);
-	
-		//	get instance on Agilent4uhvClass to get class property
-		Tango::DbDatum	def_prop, cl_prop;
-		Agilent4uhvClass	*ds_class =
-			(static_cast<Agilent4uhvClass *>(get_device_class()));
-		int	i = -1;
-
-		//	Try to initialize DeviceName from class property
-		cl_prop = ds_class->get_class_property(dev_prop[++i].name);
-		if (cl_prop.is_empty()==false)	cl_prop  >>  deviceName;
-		else {
-			//	Try to initialize DeviceName from default device value
-			def_prop = ds_class->get_default_device_property(dev_prop[i].name);
-			if (def_prop.is_empty()==false)	def_prop  >>  deviceName;
-		}
-		//	And try to extract DeviceName value from database
-		if (dev_prop[i].is_empty()==false)	dev_prop[i]  >>  deviceName;
-		//	Property StartDsPath is mandatory, check if has been defined in database.
-		check_mandatory_property(cl_prop, dev_prop[i]);
-
-		//	Try to initialize PollingPause from class property
-		cl_prop = ds_class->get_class_property(dev_prop[++i].name);
-		if (cl_prop.is_empty()==false)	cl_prop  >>  pollingPause;
-		else {
-			//	Try to initialize PollingPause from default device value
-			def_prop = ds_class->get_default_device_property(dev_prop[i].name);
-			if (def_prop.is_empty()==false)	def_prop  >>  pollingPause;
-		}
-		//	And try to extract PollingPause value from database
-		if (dev_prop[i].is_empty()==false)	dev_prop[i]  >>  pollingPause;
-
-		//	Try to initialize PollingPeriod from class property
-		cl_prop = ds_class->get_class_property(dev_prop[++i].name);
-		if (cl_prop.is_empty()==false)	cl_prop  >>  pollingPeriod;
-		else {
-			//	Try to initialize PollingPeriod from default device value
-			def_prop = ds_class->get_default_device_property(dev_prop[i].name);
-			if (def_prop.is_empty()==false)	def_prop  >>  pollingPeriod;
-		}
-		//	And try to extract PollingPeriod value from database
-		if (dev_prop[i].is_empty()==false)	dev_prop[i]  >>  pollingPeriod;
-
-	}
-
-	/*----- PROTECTED REGION ID(Agilent4uhv::get_device_property_after) ENABLED START -----*/
-	
-	//	Check device property data members init
-	
-	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::get_device_property_after
-}
-//--------------------------------------------------------
-/**
- *	Method      : Agilent4uhv::check_mandatory_property()
- *	Description : For mandatory properties check if defined in database.
- */
-//--------------------------------------------------------
-void Agilent4uhv::check_mandatory_property(Tango::DbDatum &class_prop, Tango::DbDatum &dev_prop)
-{
-	//	Check if all properties are empty
-	if (class_prop.is_empty() && dev_prop.is_empty())
-	{
-		TangoSys_OMemStream	tms;
-		tms << endl <<"Property \'" << dev_prop.name;
-		if (Tango::Util::instance()->_UseDb==true)
-			tms << "\' is mandatory but not defined in database";
-		else
-			tms << "\' is mandatory but cannot be defined without database";
-		string	status(get_status());
-		status += tms.str();
-		set_status(status);
-		mandatoryNotDefined = true;
-		/*----- PROTECTED REGION ID(Agilent4uhv::check_mandatory_property) ENABLED START -----*/
-		cerr << tms.str() << " for " << device_name << endl;
-		
-		/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::check_mandatory_property
-	}
-}
-
 
 //--------------------------------------------------------
 /**
@@ -455,11 +314,16 @@ void Agilent4uhv::always_executed_hook()
 	
 	//	code always executed before all requests
 	if (! init_error.empty()) {
-		set_state(Tango::UNKNOWN);
+		set_state(Tango::FAULT);
 		set_status(init_error);
 		return;
 	}
 
+	data_mutex.lock();
+	set_state(data.state);
+	set_status(data.status);
+	data_mutex.unlock();
+
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::always_executed_hook
 }
 
@@ -479,21 +343,6 @@ void Agilent4uhv::read_attr_hardware(TANGO_UNUSED(vector<long> &attr_list))
 	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_attr_hardware
 }
-//--------------------------------------------------------
-/**
- *	Method      : Agilent4uhv::write_attr_hardware()
- *	Description : Hardware writing for attributes
- */
-//--------------------------------------------------------
-void Agilent4uhv::write_attr_hardware(TANGO_UNUSED(vector<long> &attr_list))
-{
-	DEBUG_STREAM << "Agilent4uhv::write_attr_hardware(vector<long> &attr_list) entering... " << endl;
-	/*----- PROTECTED REGION ID(Agilent4uhv::write_attr_hardware) ENABLED START -----*/
-	
-	//	Add your own code
-	
-	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::write_attr_hardware
-}
 
 //--------------------------------------------------------
 /**
@@ -508,7 +357,14 @@ void Agilent4uhv::read_Model(Tango::Attribute &attr)
 {
 	DEBUG_STREAM << "Agilent4uhv::read_Model(Tango::Attribute &attr) entering... " << endl;
 	/*----- PROTECTED REGION ID(Agilent4uhv::read_Model) ENABLED START -----*/
-	attr.set_value(attr_Model_read);
+
+	Tango::DevString *model = new Tango::DevString();
+
+	data_mutex.lock();
+	*model = CORBA::string_dup(data.model.c_str());
+	data_mutex.unlock();
+
+	attr.set_value(model, 1, 0, true);
 	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_Model
 }
@@ -525,7 +381,14 @@ void Agilent4uhv::read_SerialNumber(Tango::Attribute &attr)
 {
 	DEBUG_STREAM << "Agilent4uhv::read_SerialNumber(Tango::Attribute &attr) entering... " << endl;
 	/*----- PROTECTED REGION ID(Agilent4uhv::read_SerialNumber) ENABLED START -----*/
-	attr.set_value(attr_SerialNumber_read);
+
+	Tango::DevString *serial_number = new Tango::DevString();
+
+	data_mutex.lock();
+	*serial_number = CORBA::string_dup(data.serial_number.c_str());
+	data_mutex.unlock();
+
+	attr.set_value(serial_number, 1, 0, true);
 	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_SerialNumber
 }
@@ -542,82 +405,17 @@ void Agilent4uhv::read_Temperature(Tango::Attribute &attr)
 {
 	DEBUG_STREAM << "Agilent4uhv::read_Temperature(Tango::Attribute &attr) entering... " << endl;
 	/*----- PROTECTED REGION ID(Agilent4uhv::read_Temperature) ENABLED START -----*/
-	attr.set_value(attr_Temperature_read);
+
+	Tango::DevFloat *temperature = new Tango::DevFloat();
+
+	data_mutex.lock();
+	*temperature = data.temperature_fan;
+	data_mutex.unlock();
+
+	attr.set_value(temperature, 1, 0, true);
 	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_Temperature
 }
-//--------------------------------------------------------
-/**
- *	Read attribute CRCErrors related method
- *	Description: CRC Errors
- *
- *	Data type:	Tango::DevLong
- *	Attr type:	Scalar
- */
-//--------------------------------------------------------
-void Agilent4uhv::read_CRCErrors(Tango::Attribute &attr)
-{
-	DEBUG_STREAM << "Agilent4uhv::read_CRCErrors(Tango::Attribute &attr) entering... " << endl;
-	/*----- PROTECTED REGION ID(Agilent4uhv::read_CRCErrors) ENABLED START -----*/
-	attr.set_value(attr_CRCErrors_read);
-	
-	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_CRCErrors
-}
-//--------------------------------------------------------
-/**
- *	Read attribute AutoStart related method
- *	Description: 
- *
- *	Data type:	Tango::DevBoolean
- *	Attr type:	Scalar
- */
-//--------------------------------------------------------
-void Agilent4uhv::read_AutoStart(Tango::Attribute &attr)
-{
-	DEBUG_STREAM << "Agilent4uhv::read_AutoStart(Tango::Attribute &attr) entering... " << endl;
-	/*----- PROTECTED REGION ID(Agilent4uhv::read_AutoStart) ENABLED START -----*/
-	//	Set the attribute value
-	attr.set_value(attr_AutoStart_read);
-	
-	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_AutoStart
-}
-//--------------------------------------------------------
-/**
- *	Write attribute AutoStart related method
- *	Description: 
- *
- *	Data type:	Tango::DevBoolean
- *	Attr type:	Scalar
- */
-//--------------------------------------------------------
-void Agilent4uhv::write_AutoStart(Tango::WAttribute &attr)
-{
-	DEBUG_STREAM << "Agilent4uhv::write_AutoStart(Tango::WAttribute &attr) entering... " << endl;
-	//	Retrieve write value
-	Tango::DevBoolean	w_val;
-	attr.get_write_value(w_val);
-	/*----- PROTECTED REGION ID(Agilent4uhv::write_AutoStart) ENABLED START -----*/
-	
- 	check_init_error();
-
-	string newvalue;
- 	if (strncmp(attr_Model_read[0], "X3602-64010", 11) == 0) {
- 		if (w_val)
- 			newvalue = "1";
- 		else
- 			newvalue = "0";
- 	} else {
- 		newvalue = "000000000";
-		if (w_val)
-			newvalue.push_back('1');
-		else
-			newvalue.push_back('0');
- 	}
- 	
- 	write("601", newvalue);
-	
-	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::write_AutoStart
-}
 
 //--------------------------------------------------------
 /**
@@ -633,6 +431,18 @@ void Agilent4uhv::read_HVX(Tango::Attribute &attr)
 	DEBUG_STREAM << "Agilent4uhv::read_HVX(Tango::Attribute &attr) entering... " << endl;
 	Tango::DevState	*att_value = get_HVX_data_ptr(attr.get_name());
 	/*----- PROTECTED REGION ID(Agilent4uhv::read_HVX) ENABLED START -----*/
+	Tango::DevUShort indexn;
+	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
+	int value;
+
+	data_mutex.lock();
+	value = data.hvch[indexn-1];
+	data_mutex.unlock();
+
+	if (value)
+		*att_value = Tango::ON;
+	else
+		*att_value = Tango::OFF;
 	attr.set_value(att_value);
 	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_HVX
@@ -651,6 +461,13 @@ void Agilent4uhv::read_DeviceNumberX(Tango::Attribute &attr)
 	DEBUG_STREAM << "Agilent4uhv::read_DeviceNumberX(Tango::Attribute &attr) entering... " << endl;
 	Tango::DevLong	*att_value = get_DeviceNumberX_data_ptr(attr.get_name());
 	/*----- PROTECTED REGION ID(Agilent4uhv::read_DeviceNumberX) ENABLED START -----*/
+	Tango::DevUShort indexn;
+	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
+	
+	data_mutex.lock();
+	*att_value = data.device_number[indexn-1];
+	data_mutex.unlock();
+
 	attr.set_value(att_value);
 	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_DeviceNumberX
@@ -671,30 +488,27 @@ void Agilent4uhv::write_DeviceNumberX(Tango::WAttribute &attr)
 	Tango::DevLong	w_val;
 	attr.get_write_value(w_val);
 	/*----- PROTECTED REGION ID(Agilent4uhv::write_DeviceNumberX) ENABLED START -----*/
-
+	
 	check_init_error();
 
-	int indexn;
+	Tango::DevUShort indexn;
 	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
-
-	int newvalue = w_val;
-
 	switch (indexn)
 	{
 		case 1:
-			write("610", newvalue);
+			write(DEVICENUMBERCH1, w_val);
 			break;
 		case 2:
-			write("620", newvalue);
+			write(DEVICENUMBERCH2, w_val);
 			break;
 		case 3:
-			write("630", newvalue);
+			write(DEVICENUMBERCH3, w_val);
 			break;
 		case 4:
-			write("640", newvalue);
+			write(DEVICENUMBERCH4, w_val);
 			break;
 	}
-
+	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::write_DeviceNumberX
 }
 //--------------------------------------------------------
@@ -711,6 +525,13 @@ void Agilent4uhv::read_PowerMaxX(Tango::Attribute &attr)
 	DEBUG_STREAM << "Agilent4uhv::read_PowerMaxX(Tango::Attribute &attr) entering... " << endl;
 	Tango::DevUShort	*att_value = get_PowerMaxX_data_ptr(attr.get_name());
 	/*----- PROTECTED REGION ID(Agilent4uhv::read_PowerMaxX) ENABLED START -----*/
+	Tango::DevUShort indexn;
+	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
+	
+	data_mutex.lock();
+	*att_value = data.power_max[indexn-1];
+	data_mutex.unlock();
+
 	attr.set_value(att_value);
 	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_PowerMaxX
@@ -731,30 +552,27 @@ void Agilent4uhv::write_PowerMaxX(Tango::WAttribute &attr)
 	Tango::DevUShort	w_val;
 	attr.get_write_value(w_val);
 	/*----- PROTECTED REGION ID(Agilent4uhv::write_PowerMaxX) ENABLED START -----*/
-
+	
 	check_init_error();
 
-	int indexn;
+	Tango::DevUShort indexn;
 	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
-
-	int newvalue = w_val;
-
 	switch (indexn)
 	{
 		case 1:
-			write("612", newvalue);
+			write(POWERMAXCH1, w_val);
 			break;
 		case 2:
-			write("622", newvalue);
+			write(POWERMAXCH2, w_val);
 			break;
 		case 3:
-			write("632", newvalue);
+			write(POWERMAXCH3, w_val);
 			break;
 		case 4:
-			write("642", newvalue);
+			write(POWERMAXCH4, w_val);
 			break;
 	}
-
+	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::write_PowerMaxX
 }
 //--------------------------------------------------------
@@ -771,6 +589,14 @@ void Agilent4uhv::read_VTargetX(Tango::Attribute &attr)
 	DEBUG_STREAM << "Agilent4uhv::read_VTargetX(Tango::Attribute &attr) entering... " << endl;
 	Tango::DevUShort	*att_value = get_VTargetX_data_ptr(attr.get_name());
 	/*----- PROTECTED REGION ID(Agilent4uhv::read_VTargetX) ENABLED START -----*/
+	Tango::DevUShort indexn;
+	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
+	
+	data_mutex.lock();
+	*att_value = data.vtarget[indexn-1];
+	data_mutex.unlock();
+
+	*att_value /= 1000;
 	attr.set_value(att_value);
 	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_VTargetX
@@ -791,30 +617,28 @@ void Agilent4uhv::write_VTargetX(Tango::WAttribute &attr)
 	Tango::DevUShort	w_val;
 	attr.get_write_value(w_val);
 	/*----- PROTECTED REGION ID(Agilent4uhv::write_VTargetX) ENABLED START -----*/
-
+	
 	check_init_error();
 
-	int indexn;	
+	Tango::DevUShort indexn;
 	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
-
-	int newvalue = w_val * 1000;
-
+	w_val *= 1000;
 	switch (indexn)
 	{
 		case 1:
-			write("613", newvalue);
+			write(VTARGETCH1, w_val);
 			break;
 		case 2:
-			write("623", newvalue);
+			write(VTARGETCH2, w_val);
 			break;
 		case 3:
-			write("633", newvalue);
+			write(VTARGETCH3, w_val);
 			break;
 		case 4:
-			write("643", newvalue);
+			write(VTARGETCH4, w_val);
 			break;
 	}
-
+	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::write_VTargetX
 }
 //--------------------------------------------------------
@@ -831,6 +655,13 @@ void Agilent4uhv::read_IProtectX(Tango::Attribute &attr)
 	DEBUG_STREAM << "Agilent4uhv::read_IProtectX(Tango::Attribute &attr) entering... " << endl;
 	Tango::DevUShort	*att_value = get_IProtectX_data_ptr(attr.get_name());
 	/*----- PROTECTED REGION ID(Agilent4uhv::read_IProtectX) ENABLED START -----*/
+	Tango::DevUShort indexn;
+	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
+	
+	data_mutex.lock();
+	*att_value = data.iprotect[indexn-1];
+	data_mutex.unlock();
+
 	attr.set_value(att_value);
 	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_IProtectX
@@ -851,35 +682,27 @@ void Agilent4uhv::write_IProtectX(Tango::WAttribute &attr)
 	Tango::DevUShort	w_val;
 	attr.get_write_value(w_val);
 	/*----- PROTECTED REGION ID(Agilent4uhv::write_IProtectX) ENABLED START -----*/
-
+	
 	check_init_error();
 
-	int indexn;	
+	Tango::DevUShort indexn;
 	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
-
-	int newvalue;
-	if (strncmp(attr_Model_read[0], "X3602-64010", 11) == 0) {
-		newvalue = w_val * 1000;
-	} else {
-		newvalue = w_val;
-	}
-
 	switch (indexn)
 	{
 		case 1:
-			write("614", newvalue);
+			write(IPROTECTCH1, w_val);
 			break;
 		case 2:
-			write("624", newvalue);
+			write(IPROTECTCH2, w_val);
 			break;
 		case 3:
-			write("634", newvalue);
+			write(IPROTECTCH3, w_val);
 			break;
 		case 4:
-			write("644", newvalue);
+			write(IPROTECTCH4, w_val);
 			break;
 	}
-
+	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::write_IProtectX
 }
 //--------------------------------------------------------
@@ -896,6 +719,13 @@ void Agilent4uhv::read_SetPointX(Tango::Attribute &attr)
 	DEBUG_STREAM << "Agilent4uhv::read_SetPointX(Tango::Attribute &attr) entering... " << endl;
 	Tango::DevDouble	*att_value = get_SetPointX_data_ptr(attr.get_name());
 	/*----- PROTECTED REGION ID(Agilent4uhv::read_SetPointX) ENABLED START -----*/
+	Tango::DevUShort indexn;
+	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
+	
+	data_mutex.lock();
+	*att_value = data.setpoint[indexn-1];
+	data_mutex.unlock();
+
 	attr.set_value(att_value);
 	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_SetPointX
@@ -919,36 +749,29 @@ void Agilent4uhv::write_SetPointX(Tango::WAttribute &attr)
 
 	check_init_error();
 
-	int indexn;	
+	Tango::DevUShort indexn;
 	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
-
-	string newvalue;
-	if (strncmp(attr_Model_read[0], "X3602-64010", 11) == 0) {
-		char buffer[ALPHANUMERIC_LENGTH_IPCMINI+1];
-		int len = snprintf(buffer, ALPHANUMERIC_LENGTH_IPCMINI+1, "% *.1E", ALPHANUMERIC_LENGTH_IPCMINI, w_val);
-		newvalue = string(buffer, len);
-	} else {
-		char buffer[ALPHANUMERIC_LENGTH_4UHV+1];
-		int len = snprintf(buffer, ALPHANUMERIC_LENGTH_4UHV+1, "% *.1E", ALPHANUMERIC_LENGTH_4UHV, w_val);
-		newvalue = string(buffer, len);
-	}
-
+	stringstream ss;
+	ss.precision(1);
+	ss << scientific << uppercase << w_val << flush;
+	string w_val_s;
+	w_val_s = ss.str();
 	switch (indexn)
 	{
 		case 1:
-			write("615", newvalue);
+			write(SETPOINTCH1, w_val_s);
 			break;
 		case 2:
-			write("625", newvalue);
+			write(SETPOINTCH2, w_val_s);
 			break;
 		case 3:
-			write("635", newvalue);
+			write(SETPOINTCH3, w_val_s);
 			break;
 		case 4:
-			write("645", newvalue);
+			write(SETPOINTCH4, w_val_s);
 			break;
 	}
-
+	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::write_SetPointX
 }
 //--------------------------------------------------------
@@ -965,6 +788,13 @@ void Agilent4uhv::read_TemperatureHVX(Tango::Attribute &attr)
 	DEBUG_STREAM << "Agilent4uhv::read_TemperatureHVX(Tango::Attribute &attr) entering... " << endl;
 	Tango::DevFloat	*att_value = get_TemperatureHVX_data_ptr(attr.get_name());
 	/*----- PROTECTED REGION ID(Agilent4uhv::read_TemperatureHVX) ENABLED START -----*/
+	Tango::DevUShort indexn;
+	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
+	
+	data_mutex.lock();
+	*att_value = data.temperaturehv[indexn-1];
+	data_mutex.unlock();
+
 	attr.set_value(att_value);
 	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_TemperatureHVX
@@ -983,6 +813,13 @@ void Agilent4uhv::read_VoltageX(Tango::Attribute &attr)
 	DEBUG_STREAM << "Agilent4uhv::read_VoltageX(Tango::Attribute &attr) entering... " << endl;
 	Tango::DevDouble	*att_value = get_VoltageX_data_ptr(attr.get_name());
 	/*----- PROTECTED REGION ID(Agilent4uhv::read_VoltageX) ENABLED START -----*/
+	Tango::DevUShort indexn;
+	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
+	
+	data_mutex.lock();
+	*att_value = data.vmeasured[indexn-1];
+	data_mutex.unlock();
+
 	attr.set_value(att_value);
 	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_VoltageX
@@ -1001,6 +838,13 @@ void Agilent4uhv::read_CurrentX(Tango::Attribute &attr)
 	DEBUG_STREAM << "Agilent4uhv::read_CurrentX(Tango::Attribute &attr) entering... " << endl;
 	Tango::DevDouble	*att_value = get_CurrentX_data_ptr(attr.get_name());
 	/*----- PROTECTED REGION ID(Agilent4uhv::read_CurrentX) ENABLED START -----*/
+	Tango::DevUShort indexn;
+	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
+	
+	data_mutex.lock();
+	*att_value = data.imeasured[indexn-1];
+	data_mutex.unlock();
+
 	attr.set_value(att_value);
 	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_CurrentX
@@ -1019,6 +863,13 @@ void Agilent4uhv::read_PressureX(Tango::Attribute &attr)
 	DEBUG_STREAM << "Agilent4uhv::read_PressureX(Tango::Attribute &attr) entering... " << endl;
 	Tango::DevDouble	*att_value = get_PressureX_data_ptr(attr.get_name());
 	/*----- PROTECTED REGION ID(Agilent4uhv::read_PressureX) ENABLED START -----*/
+	Tango::DevUShort indexn;
+	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
+	
+	data_mutex.lock();
+	*att_value = data.pressure[indexn-1];
+	data_mutex.unlock();
+
 	attr.set_value(att_value);
 	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_PressureX
@@ -1039,16 +890,31 @@ void Agilent4uhv::read_StateX(Tango::Attribute &attr)
 	/*----- PROTECTED REGION ID(Agilent4uhv::read_StateX) ENABLED START -----*/
 	//	Set the attribute value
 
-	string indexs = attr.get_name().substr(attr.get_name().size()-1);
-	int indexn;
-	convert(indexs, indexn);
+	Tango::DevUShort indexn;
+	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
+
+	vector<unsigned char> errcodes;
 
-	if (errorcode[indexn-1] != 0) {
-		*att_value = Tango::FAULT;
-	} else {
-		*att_value = HVX_data["HV" + indexs];
+	data_mutex.lock();
+	int value = data.hvch[indexn-1];
+	errcodes = data.ec;
+	data_mutex.unlock();
+
+	switch(value)
+	{
+		case 0:
+			*att_value = Tango::OFF;
+			break;
+		case 1:
+			*att_value = Tango::ON;
+			break;
+		default:
+			assert(false);
 	}
 
+	if (errcodes[6-indexn] != '0')
+		*att_value = Tango::FAULT;
+	
 	attr.set_value(att_value);
 
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_StateX
@@ -1069,56 +935,59 @@ void Agilent4uhv::read_StatusX(Tango::Attribute &attr)
 	/*----- PROTECTED REGION ID(Agilent4uhv::read_StatusX) ENABLED START -----*/
 	//	Set the attribute value
 
-	string indexs = attr.get_name().substr(attr.get_name().size()-1);
-	int indexn;	
+	Tango::DevUShort indexn;
 	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
 
+	vector<unsigned char> errcodes;
+
+	data_mutex.lock();
+	int value = data.hvch[indexn-1];
+	errcodes = data.ec;
+	data_mutex.unlock();
+
 	string status;
-	if (HVX_data["HV" + indexs] == Tango::ON)
-		status = "The device is in ON state";
-	else
-		status = "The device is in OFF state";
-	
-	int err = errorcode[indexn-1];
-	if (err != 0)
+	switch(value)
+	{
+		case 0:
+			status = "The device is in OFF state";
+			break;
+		case 1:
+			status = "The device is in ON state";
+			break;
+		default:
+			assert(false);
+	}
+
+	int errcode = (int)errcodes[6-indexn] - 48;
+
+	if (errcode != 0)
 	{
 		status = "";
 
-		if (strncmp(attr_Model_read[0], "X3602-64010", 11) == 0) {
-			if (err & 0x4)
-				status += "Over Temperature ";
-			if (err & 0x20)
-				status += "Interlock cable ";
-			if (err & 0x40)
-				status += "ShortCircuit ";
-			if (err & 0x80)
-				status += "Protect ";
-		} else {
-			if (err & 0x1)
-				status += "FAN error ";
-			if (err & 0x2)
-				status += "Power input error from HV ";
-			if (err & 0x4)
-				status += "Power input error from PFC ";
-			if (err & 0x8)
-				status += "Overtemp PFC ";
-			if (err & 0x10)
-				status += "Error communication CPU-HV ";
-			if (err & 0x20)
-				status += "Interlock cable ";
-			if (err & 0x40)
-				status += "Overtemp HV ";
-			if (err & 0x80)
-				status += "Protect ";
-			if (err & 0x100)
-				status += "Measurement error ";
-			if (err & 0x200)
-				status += "HV out error ";
-			if (err & 0x400)
-				status += "Short circuit ";
-			if (err & 0x800)
-				status += "HV disabled ";
-		}
+		if (errcode & 0x1)
+			status += "FAN error ";
+		if (errcode & 0x2)
+			status += "Power input error from HV ";
+		if (errcode & 0x4)
+			status += "Power input error from PFC ";
+		if (errcode & 0x8)
+			status += "Overtemp PFC ";
+		if (errcode & 0x10)
+			status += "Error communication CPU-HV ";
+		if (errcode & 0x20)
+			status += "Interlock cable ";
+		if (errcode & 0x40)
+			status += "Overtemp HV ";
+		if (errcode & 0x80)
+			status += "Protect ";
+		if (errcode & 0x100)
+			status += "Measurement error ";
+		if (errcode & 0x200)
+			status += "HV out error ";
+		if (errcode & 0x400)
+			status += "Short circuit ";
+		if (errcode & 0x800)
+			status += "HV disabled ";
 
 	}
 
@@ -1132,144 +1001,206 @@ void Agilent4uhv::read_StatusX(Tango::Attribute &attr)
 }
 //--------------------------------------------------------
 /**
- *	Read attribute ProtectX related method
+ *	Read attribute AutoStartX related method
  *	Description: 
  *
  *	Data type:	Tango::DevBoolean
  *	Attr type:	Scalar
  */
 //--------------------------------------------------------
-void Agilent4uhv::read_ProtectX(Tango::Attribute &attr)
+void Agilent4uhv::read_AutoStartX(Tango::Attribute &attr)
 {
-	DEBUG_STREAM << "Agilent4uhv::read_ProtectX(Tango::Attribute &attr) entering... " << endl;
-	Tango::DevBoolean	*att_value = get_ProtectX_data_ptr(attr.get_name());
-	/*----- PROTECTED REGION ID(Agilent4uhv::read_ProtectX) ENABLED START -----*/
+	DEBUG_STREAM << "Agilent4uhv::read_AutoStartX(Tango::Attribute &attr) entering... " << endl;
+	Tango::DevBoolean	*att_value = get_AutoStartX_data_ptr(attr.get_name());
+	/*----- PROTECTED REGION ID(Agilent4uhv::read_AutoStartX) ENABLED START -----*/
 	//	Set the attribute value
-	attr.set_value(att_value);
+	Tango::DevUShort indexn;
+	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
 
-	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_ProtectX
+	vector<unsigned char> autostart;
+	data_mutex.lock();
+	autostart = data.autostart;
+	data_mutex.unlock();
+
+	if (autostart[10-indexn] == '0')
+		*att_value = false;
+	else
+		*att_value = true;
+
+	attr.set_value(att_value);
+	
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_AutoStartX
 }
 //--------------------------------------------------------
 /**
- *	Write attribute ProtectX related method
+ *	Write attribute AutoStartX related method
  *	Description: 
  *
  *	Data type:	Tango::DevBoolean
  *	Attr type:	Scalar
  */
 //--------------------------------------------------------
-void Agilent4uhv::write_ProtectX(Tango::WAttribute &attr)
+void Agilent4uhv::write_AutoStartX(Tango::WAttribute &attr)
 {
-	DEBUG_STREAM << "Agilent4uhv::write_ProtectX(Tango::WAttribute &attr) entering... " << endl;
+	DEBUG_STREAM << "Agilent4uhv::write_AutoStartX(Tango::WAttribute &attr) entering... " << endl;
 	//	Retrieve write value
 	Tango::DevBoolean	w_val;
 	attr.get_write_value(w_val);
-	/*----- PROTECTED REGION ID(Agilent4uhv::write_ProtectX) ENABLED START -----*/
+	/*----- PROTECTED REGION ID(Agilent4uhv::write_AutoStartX) ENABLED START -----*/
 
 	check_init_error();
 
-	int indexn;	
+	Tango::DevUShort indexn;
 	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
 
-	string newvalue;
-	if (strncmp(attr_Model_read[0], "X3602-64010", 11) == 0) {
-		if (w_val)
-			newvalue = "1";
-		else
-			newvalue = "0";
-	} else {
-		read_Protect();
-		newvalue = "0000000000";
-		for(int i=1; i<5; ++i) {
-			if (i == indexn) {
-				if (w_val)
-					newvalue[10-i] = '1';
-				else
-					newvalue[10-i] = '0';
-			} else {
-				stringstream ss;
-				ss << i;
-				if (ProtectX_data["Protect" + ss.str()])
-					newvalue[10-i] = '1';
-				else
-					newvalue[10-i] = '0';
-			}
-		}
-	}
+	vector<unsigned char> autostart;
+	data_mutex.lock();
+	autostart = data.autostart;
+	data_mutex.unlock();
 
-	write("602", newvalue);
+	if (w_val)
+		autostart[10-indexn] = '1';
+	else
+		autostart[10-indexn] = '0';
 
-	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::write_ProtectX
+	write(OPERATINGMODE, autostart);
+	
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::write_AutoStartX
 }
 //--------------------------------------------------------
 /**
- *	Read attribute FixedStepX related method
+ *	Read attribute ProtectX related method
  *	Description: 
  *
  *	Data type:	Tango::DevBoolean
  *	Attr type:	Scalar
  */
 //--------------------------------------------------------
-void Agilent4uhv::read_FixedStepX(Tango::Attribute &attr)
+void Agilent4uhv::read_ProtectX(Tango::Attribute &attr)
 {
-	DEBUG_STREAM << "Agilent4uhv::read_FixedStepX(Tango::Attribute &attr) entering... " << endl;
-	Tango::DevBoolean	*att_value = get_FixedStepX_data_ptr(attr.get_name());
-	/*----- PROTECTED REGION ID(Agilent4uhv::read_FixedStepX) ENABLED START -----*/
+	DEBUG_STREAM << "Agilent4uhv::read_ProtectX(Tango::Attribute &attr) entering... " << endl;
+	Tango::DevBoolean	*att_value = get_ProtectX_data_ptr(attr.get_name());
+	/*----- PROTECTED REGION ID(Agilent4uhv::read_ProtectX) ENABLED START -----*/
 	//	Set the attribute value
-	attr.set_value(att_value);
+	Tango::DevUShort indexn;
+	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
 
-	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_FixedStepX
+	vector<unsigned char> protect;
+	data_mutex.lock();
+	protect = data.protect;
+	data_mutex.unlock();
+
+	if (protect[10-indexn] == '0')
+		*att_value = false;
+	else
+		*att_value = true;
+
+	attr.set_value(att_value);
+	
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_ProtectX
 }
 //--------------------------------------------------------
 /**
- *	Write attribute FixedStepX related method
+ *	Write attribute ProtectX related method
  *	Description: 
  *
  *	Data type:	Tango::DevBoolean
  *	Attr type:	Scalar
  */
 //--------------------------------------------------------
-void Agilent4uhv::write_FixedStepX(Tango::WAttribute &attr)
+void Agilent4uhv::write_ProtectX(Tango::WAttribute &attr)
 {
-	DEBUG_STREAM << "Agilent4uhv::write_FixedStepX(Tango::WAttribute &attr) entering... " << endl;
+	DEBUG_STREAM << "Agilent4uhv::write_ProtectX(Tango::WAttribute &attr) entering... " << endl;
 	//	Retrieve write value
 	Tango::DevBoolean	w_val;
 	attr.get_write_value(w_val);
-	/*----- PROTECTED REGION ID(Agilent4uhv::write_FixedStepX) ENABLED START -----*/
+	/*----- PROTECTED REGION ID(Agilent4uhv::write_ProtectX) ENABLED START -----*/
 
 	check_init_error();
 
-	int indexn;
-	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);	
+	Tango::DevUShort indexn;
+	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
 
-	string newvalue;
-	if (strncmp(attr_Model_read[0], "X3602-64010", 11) == 0) {
-		if (w_val)
-			newvalue = "1";
-		else
-			newvalue = "0";
-	} else {
-		read_FixedStep();
-		newvalue = "0000000000";
-		for(int i=1; i<5; ++i) {
-			if (i == indexn) {
-				if (w_val)
-					newvalue[10-i] = '1';
-				else
-					newvalue[10-i] = '0';
-			} else {
-				stringstream ss;
-				ss << i;
-				if (FixedStepX_data["Fixed" + ss.str()])
-					newvalue[10-i] = '1';
-				else
-					newvalue[10-i] = '0';
-			}
-		}
-	}
+	vector<unsigned char> protect;
+	data_mutex.lock();
+	protect = data.protect;
+	data_mutex.unlock();
 
-	write("603", newvalue);
+	if (w_val)
+		protect[10-indexn] = '1';
+	else
+		protect[10-indexn] = '0';
 
+	write(PROTECT, protect);
+	
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::write_ProtectX
+}
+//--------------------------------------------------------
+/**
+ *	Read attribute FixedStepX related method
+ *	Description: 
+ *
+ *	Data type:	Tango::DevBoolean
+ *	Attr type:	Scalar
+ */
+//--------------------------------------------------------
+void Agilent4uhv::read_FixedStepX(Tango::Attribute &attr)
+{
+	DEBUG_STREAM << "Agilent4uhv::read_FixedStepX(Tango::Attribute &attr) entering... " << endl;
+	Tango::DevBoolean	*att_value = get_FixedStepX_data_ptr(attr.get_name());
+	/*----- PROTECTED REGION ID(Agilent4uhv::read_FixedStepX) ENABLED START -----*/
+	//	Set the attribute value
+	Tango::DevUShort indexn;
+	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
+
+	vector<unsigned char> fs;
+	data_mutex.lock();
+	fs = data.fs;
+	data_mutex.unlock();
+
+	if (fs[10-indexn] == '0')
+		*att_value = true;
+	else
+		*att_value = false;
+
+	attr.set_value(att_value);
+	
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_FixedStepX
+}
+//--------------------------------------------------------
+/**
+ *	Write attribute FixedStepX related method
+ *	Description: 
+ *
+ *	Data type:	Tango::DevBoolean
+ *	Attr type:	Scalar
+ */
+//--------------------------------------------------------
+void Agilent4uhv::write_FixedStepX(Tango::WAttribute &attr)
+{
+	DEBUG_STREAM << "Agilent4uhv::write_FixedStepX(Tango::WAttribute &attr) entering... " << endl;
+	//	Retrieve write value
+	Tango::DevBoolean	w_val;
+	attr.get_write_value(w_val);
+	/*----- PROTECTED REGION ID(Agilent4uhv::write_FixedStepX) ENABLED START -----*/
+
+	check_init_error();
+
+	Tango::DevUShort indexn;
+	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
+
+	vector<unsigned char> fs;
+	data_mutex.lock();
+	fs = data.fs;
+	data_mutex.unlock();
+
+	if (w_val)
+		fs[10-indexn] = '0';
+	else
+		fs[10-indexn] = '1';
+
+	write(FIXEDSTEP, fs);
+	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::write_FixedStepX
 }
 //--------------------------------------------------------
@@ -1287,11 +1218,56 @@ void Agilent4uhv::read_StatusSetPointX(Tango::Attribute &attr)
 	Tango::DevBoolean	*att_value = get_StatusSetPointX_data_ptr(attr.get_name());
 	/*----- PROTECTED REGION ID(Agilent4uhv::read_StatusSetPointX) ENABLED START -----*/
 	//	Set the attribute value
-	attr.set_value(att_value);
+	Tango::DevUShort indexn;
+	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
+
+	vector<unsigned char> ssp;
+	data_mutex.lock();
+	ssp = data.ssp;
+	data_mutex.unlock();
 
+	if (ssp[10-indexn] == '0')
+		*att_value = false;
+	else
+		*att_value = true;
+
+	attr.set_value(att_value);
+	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_StatusSetPointX
 }
 //--------------------------------------------------------
+/**
+ *	Read attribute InterlockStatusX related method
+ *	Description: 
+ *
+ *	Data type:	Tango::DevBoolean
+ *	Attr type:	Scalar
+ */
+//--------------------------------------------------------
+void Agilent4uhv::read_InterlockStatusX(Tango::Attribute &attr)
+{
+	DEBUG_STREAM << "Agilent4uhv::read_InterlockStatusX(Tango::Attribute &attr) entering... " << endl;
+	Tango::DevBoolean	*att_value = get_InterlockStatusX_data_ptr(attr.get_name());
+	/*----- PROTECTED REGION ID(Agilent4uhv::read_InterlockStatusX) ENABLED START -----*/
+	//	Set the attribute value
+	Tango::DevUShort indexn;
+	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
+
+	vector<unsigned char> is;
+	data_mutex.lock();
+	is = data.is;
+	data_mutex.unlock();
+
+	if (is[10-indexn] == '0')
+		*att_value = false;
+	else
+		*att_value = true;
+
+	attr.set_value(att_value);
+	
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_InterlockStatusX
+}
+//--------------------------------------------------------
 /**
  *	Read attribute StatMaskX related method
  *	Description: 
@@ -1307,26 +1283,41 @@ void Agilent4uhv::read_StatMaskX(Tango::Attribute &attr)
 	/*----- PROTECTED REGION ID(Agilent4uhv::read_StatMaskX) ENABLED START -----*/
 	//	Set the attribute value
 
-	string indexs = attr.get_name().substr(attr.get_name().size()-1);
-	int indexn;
-	convert(indexs, indexn);
+	Tango::DevUShort indexn;
+	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
 
-	*att_value = 0;
+	vector<unsigned char> errcodes;
+	vector<unsigned char> fs;
+	
+	data_mutex.lock();
+	int value = data.hvch[indexn-1];
+	errcodes = data.ec;
+	fs = data.fs;
+	data_mutex.unlock();
 
-	if (HVX_data["HV" + indexs])
-		*att_value |= 0x1;
+	*att_value = 0;
+	switch(value)
+	{
+		case 0:
+			break;
+		case 1:
+			*att_value |= 0x1;
+			break;
+		default:
+			assert(false);
+	}
 
 	// FIXME How provides locale/remote bit (1)?
 	*att_value |= 0x1 << 1;
 
-	if (errorcode[indexn-1] != 0)
+	if (errcodes[6-indexn] != '0')
 		*att_value |= 0x1 << 2;
 
-	if (FixedStepX_data["Fixed" + indexs] == true)
+	if (fs[10-indexn] == '1')
 		*att_value |= 0x1 << 3;
 
 	// FIXME bit 4,5,6 and 7 aren't implemented
-
+	
 	attr.set_value(att_value);
 
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_StatMaskX
@@ -1354,21 +1345,25 @@ void Agilent4uhv::add_dynamic_attributes()
 	//	add_PressureX_dynamic_attribute("MyPressureXAttribute");
 	//	add_StateX_dynamic_attribute("MyStateXAttribute");
 	//	add_StatusX_dynamic_attribute("MyStatusXAttribute");
+	//	add_AutoStartX_dynamic_attribute("MyAutoStartXAttribute");
 	//	add_ProtectX_dynamic_attribute("MyProtectXAttribute");
 	//	add_FixedStepX_dynamic_attribute("MyFixedStepXAttribute");
 	//	add_StatusSetPointX_dynamic_attribute("MyStatusSetPointXAttribute");
+	//	add_InterlockStatusX_dynamic_attribute("MyInterlockStatusXAttribute");
 	//	add_StatMaskX_dynamic_attribute("MyStatMaskXAttribute");
 	
 	/*----- PROTECTED REGION ID(Agilent4uhv::add_dynamic_attributes) ENABLED START -----*/
 	
 	//	Add your own code to create and add dynamic attributes if any
-	for (unsigned short i=1; i <= nchannel; ++i)
+	for (unsigned short cn=1; cn <= nchannel; ++cn)
 	{
 		stringstream ssname;
 		string sname;
+		int i = cn;
 
-		if (odd_channel_quirk && i > 1)
+		if (odd_channel_quirk && cn > 1)
 			++i;
+
 		ssname.str(""); ssname.clear();
 		ssname << "HV" << i << flush;
 		sname = ssname.str();
@@ -1431,6 +1426,11 @@ void Agilent4uhv::add_dynamic_attributes()
 		Tango::DevString *att_value = get_StatusX_data_ptr(sname);
 		*att_value = NULL; 
 
+		ssname.str(""); ssname.clear();
+		ssname << "AutoStart" << i << flush;
+		sname = ssname.str();
+		add_AutoStartX_dynamic_attribute(sname);
+
 		ssname.str(""); ssname.clear();
 		ssname << "Protect" << i << flush;
 		sname = ssname.str();
@@ -1446,6 +1446,11 @@ void Agilent4uhv::add_dynamic_attributes()
 		sname = ssname.str();
 		add_StatusSetPointX_dynamic_attribute(sname);
 
+		ssname.str(""); ssname.clear();
+		ssname << "InterlockStatus" << i << flush;
+		sname = ssname.str();
+		add_InterlockStatusX_dynamic_attribute(sname);
+
 		ssname.str(""); ssname.clear();
 		ssname << "StatMask" << i << flush;
 		sname = ssname.str();
@@ -1457,75 +1462,163 @@ void Agilent4uhv::add_dynamic_attributes()
 
 //--------------------------------------------------------
 /**
- *	Command OnHVX related method
+ *	Command OffHV1 related method
+ *	Description: 
+ *
+ */
+//--------------------------------------------------------
+void Agilent4uhv::off_hv1()
+{
+	DEBUG_STREAM << "Agilent4uhv::OffHV1()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(Agilent4uhv::off_hv1) ENABLED START -----*/
+	
+	//	Add your own code
+	check_init_error();
+
+	int new_state = 0;
+	write(HVCH1, new_state);
+
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::off_hv1
+}
+//--------------------------------------------------------
+/**
+ *	Command OffHV2 related method
  *	Description: 
  *
  */
 //--------------------------------------------------------
-void Agilent4uhv::on_hvx(Tango::Command &command)
+void Agilent4uhv::off_hv2()
 {
-	DEBUG_STREAM << "Agilent4uhv::" << command.get_name() << "  - " << device_name << endl;
-	/*----- PROTECTED REGION ID(Agilent4uhv::on_hvx) ENABLED START -----*/
+	DEBUG_STREAM << "Agilent4uhv::OffHV2()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(Agilent4uhv::off_hv2) ENABLED START -----*/
 	
 	//	Add your own code
- 	check_init_error();
+	check_init_error();
 	
-	int indexn;
-	convert(command.get_name().substr(command.get_name().size()-1), indexn);
+	int new_state = 0;
+	write(HVCH2, new_state);
 
- 	bool new_state = true;
-	switch(indexn) {
-		case 1:
- 			write("011", new_state);	
-			break;
-		case 2:
- 			write("012", new_state);	
-			break;
-		case 3:
- 			write("013", new_state);	
-			break;
-		case 4:
-			write("014", new_state);	
-			break;
-	}
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::off_hv2
+}
+//--------------------------------------------------------
+/**
+ *	Command OnHV1 related method
+ *	Description: 
+ *
+ */
+//--------------------------------------------------------
+void Agilent4uhv::on_hv1()
+{
+	DEBUG_STREAM << "Agilent4uhv::OnHV1()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(Agilent4uhv::on_hv1) ENABLED START -----*/
+	
+	//	Add your own code
+	check_init_error();
 	
-	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::on_hvx
+	int new_state = 1;
+	write(HVCH1, new_state);
+
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::on_hv1
 }
 //--------------------------------------------------------
 /**
- *	Command OffHVX related method
+ *	Command OnHV2 related method
  *	Description: 
  *
  */
 //--------------------------------------------------------
-void Agilent4uhv::off_hvx(Tango::Command &command)
+void Agilent4uhv::on_hv2()
 {
-	DEBUG_STREAM << "Agilent4uhv::" << command.get_name() << "  - " << device_name << endl;
-	/*----- PROTECTED REGION ID(Agilent4uhv::off_hvx) ENABLED START -----*/
+	DEBUG_STREAM << "Agilent4uhv::OnHV2()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(Agilent4uhv::on_hv2) ENABLED START -----*/
 	
 	//	Add your own code
- 	check_init_error();
+	check_init_error();
 	
-	int indexn;
-	convert(command.get_name().substr(command.get_name().size()-1), indexn);
+	int new_state = 1;
+	write(HVCH2, new_state);
 
- 	bool new_state = false;
-	switch(indexn) {
-		case 1:
-			write("011", new_state);	
-			break;
-		case 2:
-			write("012", new_state);	
-			break;
-		case 3:
-			write("013", new_state);	
-			break;
-		case 4:
-			write("014", new_state);	
-			break;
-	}
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::on_hv2
+}
+//--------------------------------------------------------
+/**
+ *	Command OffHV3 related method
+ *	Description: 
+ *
+ */
+//--------------------------------------------------------
+void Agilent4uhv::off_hv3()
+{
+	DEBUG_STREAM << "Agilent4uhv::OffHV3()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(Agilent4uhv::off_hv3) ENABLED START -----*/
+	
+	//	Add your own code
+	check_init_error();
 	
-	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::off_hvx
+	int new_state = 0;
+	write(HVCH3, new_state);
+	
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::off_hv3
+}
+//--------------------------------------------------------
+/**
+ *	Command OffHV4 related method
+ *	Description: 
+ *
+ */
+//--------------------------------------------------------
+void Agilent4uhv::off_hv4()
+{
+	DEBUG_STREAM << "Agilent4uhv::OffHV4()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(Agilent4uhv::off_hv4) ENABLED START -----*/
+	
+	//	Add your own code
+	check_init_error();
+	
+	int new_state = 0;
+	write(HVCH4, new_state);
+
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::off_hv4
+}
+//--------------------------------------------------------
+/**
+ *	Command OnHV3 related method
+ *	Description: 
+ *
+ */
+//--------------------------------------------------------
+void Agilent4uhv::on_hv3()
+{
+	DEBUG_STREAM << "Agilent4uhv::OnHV3()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(Agilent4uhv::on_hv3) ENABLED START -----*/
+	
+	//	Add your own code
+	check_init_error();
+	
+	int new_state = 1;
+	write(HVCH3, new_state);
+	
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::on_hv3
+}
+//--------------------------------------------------------
+/**
+ *	Command OnHV4 related method
+ *	Description: 
+ *
+ */
+//--------------------------------------------------------
+void Agilent4uhv::on_hv4()
+{
+	DEBUG_STREAM << "Agilent4uhv::OnHV4()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(Agilent4uhv::on_hv4) ENABLED START -----*/
+	
+	//	Add your own code
+	check_init_error();
+	
+	int new_state = 1;
+	write(HVCH4, new_state);
+
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::on_hv4
 }
 //--------------------------------------------------------
 /**
@@ -1536,23 +1629,9 @@ void Agilent4uhv::off_hvx(Tango::Command &command)
 //--------------------------------------------------------
 void Agilent4uhv::add_dynamic_commands()
 {
-	//	Example to add dynamic command:
-	//	Copy inside the folowing protected area to instanciate at startup.
-	//	add_OnHVX_dynamic_command("MyOnHVXCommand", true);
-	//	add_OffHVX_dynamic_command("MyOffHVXCommand", true);
-	
 	/*----- PROTECTED REGION ID(Agilent4uhv::add_dynamic_commands) ENABLED START -----*/
 	
 	//	Add your own code to create and add dynamic commands if any
-	for (unsigned short i=1; i <= nchannel; ++i) {
-		if (odd_channel_quirk && i > 1)
-			++i;
-
-		stringstream ss;
-		ss << i;
-		add_OnHVX_dynamic_command("OnHV" + ss.str(), true);
-		add_OffHVX_dynamic_command("OffHV" + ss.str(), true);
-	}
 	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::add_dynamic_commands
 }
@@ -1560,110 +1639,163 @@ void Agilent4uhv::add_dynamic_commands()
 /*----- PROTECTED REGION ID(Agilent4uhv::namespace_ending) ENABLED START -----*/
 
 //	Additional Methods
-#define CRC_LENGTH 2
 
+#define STX 0x02
+#define ADDR 0x80
+#define ETX 0x03
+#define WIN_LENGTH 3
+#define CRC_LENGTH 2
 #define READ_WINDOW 0x30
 #define WRITE_WINDOW 0x31
 
-struct MessageHeader {
-	unsigned char stx;
-	unsigned char addr;
-	char win[WIN_LENGTH];
-	unsigned char com;
-};
+void Agilent4uhv::write(const int win, string &value)
+{
+	vector<unsigned char> data;
 
-struct MessageFooter {
-	unsigned char etx;
-	unsigned char crc[CRC_LENGTH];
-};
+	for (unsigned int i=0; i<value.size(); ++i)
+		data.push_back(value[i]);
 
-struct ResponseHeader {
-	unsigned char stx;
-	unsigned char addr;
-	unsigned char ack;
-};
+	write(win, data);
 
+	DEBUG_STREAM << "Written " << value.size() << " byte(s): "
+		<< value << endl;
+}
 
-void Agilent4uhv::write_message(const char window[WIN_LENGTH],
-		const unsigned char com, const char * const data,
-		const size_t data_length)
+void Agilent4uhv::read(const int win, string &value)
 {
-	vector<unsigned char> message(sizeof(MessageHeader) +
-			data_length + sizeof(MessageFooter));
+	vector<unsigned char> answer;
 
-	MessageHeader *header = (MessageHeader*)&message[0];
-	MessageFooter *footer = (MessageFooter*)(&message[0]
-			+ sizeof(MessageHeader) + data_length);
+	read(win, answer);
 
-	header->stx = 0x02;
-	header->addr = 0x80;
-	memcpy(header->win, window, WIN_LENGTH);
-	header->com = com;
+	stringstream ss;
+	for (unsigned int i=0; i<answer.size(); ++i)
+		ss << (char)answer[i];
+	ss << flush;
+	value = ss.str();
 
-	memcpy(&message[0] + sizeof(MessageHeader),
-			data, data_length);
+	DEBUG_STREAM << "Readed " << value.size() << " byte(s): "
+		<< value << endl;
+}
 
-	footer->etx = 0x03;
+void Agilent4uhv::write(const int win, vector<unsigned char> &data)
+{
+	stringstream win_ss;
+	win_ss.width(WIN_LENGTH);
+	win_ss.fill('0');
+	win_ss << win << flush;
+	string win_s;
+	win_ss >> win_s;
+	if (win_ss.fail())
+		Tango::Except::throw_exception( "",
+				"Conversion fail " + win_ss.str(),
+				"Agilent4uhv::write()");
 
-	char crc_with_term[CRC_LENGTH+1];
-	snprintf(crc_with_term, CRC_LENGTH+1, "%02X",
-			calc_crc(&message[1] /* Skip STX */,
-				sizeof(MessageHeader) + data_length));
-	memcpy(footer->crc, crc_with_term, CRC_LENGTH);
+	vector<unsigned char> discarded;
 
-	Serial2Client::write(message);
+	iomutex.lock();
+	try {
+		write_message(win_s, WRITE_WINDOW, data);
+		read_answer(win_s, WRITE_WINDOW, discarded);
+		iomutex.unlock();
+	} catch(...) {
+		iomutex.unlock();
+		throw;
+	}
 }
 
-string Agilent4uhv::read_answer()
+void Agilent4uhv::read(const int win, vector<unsigned char> &answer)
 {
-	vector<unsigned char> answer, crc;
-	size_t data_length;
-	string ret;
+	stringstream win_ss;
+	win_ss.width(WIN_LENGTH);
+	win_ss.fill('0');
+	win_ss << win << flush;
+	string win_s;
+	win_ss >> win_s;
+	if (win_ss.fail())
+		Tango::Except::throw_exception( "",
+				"Conversion fail " + win_ss.str(),
+				"Agilent4uhv::read()");
 
-	Serial2Client::read_until(0x03, answer);
-	Serial2Client::read(2, crc);
-	
-	data_length = answer.size() - sizeof(MessageHeader) - 1 /* Skip ETX */;
+	vector<unsigned char> discarded;
+
+	iomutex.lock();
+	try {
+		write_message(win_s, READ_WINDOW, discarded);
+		read_answer(win_s, READ_WINDOW, answer);
+		iomutex.unlock();
+	} catch(...) {
+		iomutex.unlock();
+		throw;
+	}
+}
+
+//	Message:
+//	<STX>+<ADDR>+<WIN>+<COM>+<DATA>+<ETX>+<CRC>
+void Agilent4uhv::write_message(const string win_s, const unsigned char com,
+		vector<unsigned char> &data)
+{
+	vector<unsigned char> message;
+
+	message.push_back(STX);
+	message.push_back(ADDR);
+
+	for (int i=0; i<WIN_LENGTH; ++i)
+		message.push_back(win_s[i]);
+
+	message.push_back(com);
+
+	for (vector<char>::size_type i=0; i<data.size(); ++i)
+		message.push_back(data[i]);
 
-	char expected_crc[CRC_LENGTH+1];
-	snprintf(expected_crc, CRC_LENGTH+1, "%02X",
-			calc_crc(&answer[1] /* Skip STX */,
-				answer.size()-1 /* Skip ETX */));
+	message.push_back(ETX);
+	unsigned char crc_ = calc_crc(message);
 
-	if(memcmp(&crc[0], expected_crc, CRC_LENGTH) != 0) {
-		attr_CRCErrors_read[0]++;
+	stringstream crc_ss;
+	crc_ss.width(CRC_LENGTH);
+	crc_ss.fill('0');
+	crc_ss << hex << uppercase << (int)crc_ << flush;
+	string crc_s;
+	crc_ss >> crc_s;
+	if (crc_ss.fail())
 		Tango::Except::throw_exception( "",
-				"CRC check failed",
-				"Agilent4uhv::read_answer()");
-	}
+				"Conversion fail " + crc_ss.str(),
+				"Agilent4uhv::write_message()");
+
+	for (int i=0; i<CRC_LENGTH; ++i)
+		message.push_back(crc_s[i]);
+
+	Serial2Client::write(message);
+}
+
+void Agilent4uhv::read_answer(const string win_s, const unsigned char com,
+		vector<unsigned char> &answer)
+{
+	vector<unsigned char> answer_, crc;
+	Serial2Client::read_until(ETX, answer_);
+	Serial2Client::read(2, crc);
+
+	if (answer_.size() == 4)
+	{
+		// Thus data is 1 byte length and it could be an error or Logic datatype!
 
-	if (answer.size() == 4) {
-		ResponseHeader *header = (ResponseHeader*)&answer[0];
-		
 		string err_mesg;
-		switch ((int)header->ack)
+		switch ((int)answer_[2])
 		{
-			case 0x06: /* ACK */
-				break;
-			case 0x15: /* NACK */
+			case 0x06:
+				// Ok
+				return;
+			case 0x15:
 				err_mesg = "Execution of the command has failed";
 				break;
-			case 0x32: /* Unknown Window */
-				err_mesg = "The window specified in the command"
-					" is not a valid window";
+			case 0x32:
+				err_mesg = "The window specified in the command is not a valid window";
 				break;
-			case 0x33: /* Data Type Error */
-				err_mesg = "The data type specified in the command"
-					" (Logic, Numeric or Alphanumeric) is not"
-					" in agreement with the Window specified";
+			case 0x33:
+				err_mesg = "The data type specified in the command (Logic, Numeric or "
+					"Alphanumeric) is not in agreement with the Window specified";
 				break;
-			case 0x35: /* Win Disabled */
-				err_mesg = "The window specified is Read Only or"
-					" is temporarily disabled";
-				break;
-			default:
-				// "Out of Range" perhaps?
-				err_mesg = "Unknown error";
+			case 0x35:
+				err_mesg = "The window specified is Read Only or is temporarily disabled";
 				break;
 		}
 
@@ -1671,40 +1803,43 @@ string Agilent4uhv::read_answer()
 			Tango::Except::throw_exception( "",
 					err_mesg,
 					"Agilent4uhv::read_answer()");
-	} else {
-		ret = string((char*)(&answer[0] + sizeof(MessageHeader)), data_length);
 	}
-	return ret;
-}
 
-string Agilent4uhv::read(const char window[WIN_LENGTH])
-{
-	omni_mutex_lock l(io_mutex);
-	try {
-		write_message(window, READ_WINDOW, NULL, 0);
-		return read_answer();
-	} catch(...) {
-		throw;
-	}
-}
+	stringstream win_rr;
+	win_rr << answer_[2] << answer_[3] << answer_[4] << flush;
+	string win_r;
+	win_rr >> win_r;
+	if (win_rr.fail())
+		Tango::Except::throw_exception( "",
+				"Conversion fail " + win_rr.str(),
+				"Agilent4uhv::read_answer()");
 
-void Agilent4uhv::write(const char window[WIN_LENGTH], const char * const data,
-		const size_t data_length)
-{
-	omni_mutex_lock l(io_mutex);
-	try {
-		write_message(window, WRITE_WINDOW, data, data_length);
-		(void)read_answer();
-	} catch(...) {
-		throw;
-	}
+	unsigned char crc_c = calc_crc(answer_);
+
+	stringstream crc_rr;
+	crc_rr << hex << uppercase << crc[0] << crc[1] << flush;	
+	int crc_r;
+	crc_rr >> crc_r;
+	if (crc_rr.fail())
+		Tango::Except::throw_exception( "",
+				"Conversion fail " + crc_rr.str(),
+				"Agilent4uhv::read_answer()");
+
+	if (answer_[0] != STX /*|| answer_[1] != ADDR + 1*/ || com != answer_[5]
+			|| win_s != win_r || crc_c != crc_r)
+		Tango::Except::throw_exception( "",
+				"Answer malformed",
+				"Agilent4uhv::read_answer()");
+
+	answer.resize(answer_.size() - 7);
+	copy(answer_.begin() + 6, answer_.end() - 1, answer.begin());
 }
 
-int Agilent4uhv::calc_crc(unsigned char *contents, size_t count)
+unsigned char Agilent4uhv::calc_crc(const vector<unsigned char> &message)
 {
-	int ret = 0;
-	for (size_t i = 0; i < count; ++i)
-		ret ^= contents[i];
+	unsigned char ret = 0;
+	for (vector<unsigned char>::size_type i=1 /*Skip STX*/; i<message.size(); ++i)
+		ret ^= message[i];
 	return ret;
 }
 
@@ -1716,523 +1851,280 @@ void Agilent4uhv::check_init_error(void)
 			"Agilent4uhv::check_init_error()");
 }
 
-void Agilent4uhv::read(const char window[WIN_LENGTH], string &data) {
-	data = read(window);
-}
-
-void Agilent4uhv::read(const char window[WIN_LENGTH], bool &data) {
-	string tmp = read(window);
-	convert(tmp, data);
-}
-
-void Agilent4uhv::read(const char window[WIN_LENGTH], int &data) {
-	string tmp = read(window);
-	convert(tmp, data);
-}
-
-void Agilent4uhv::write(const char window[WIN_LENGTH], const string &data) {
-	if (strcmp(attr_Model_read[0], "X3602-64010") == 0) {
-		write(window, data.c_str(), ALPHANUMERIC_LENGTH_IPCMINI > data.size()?
-				data.size() : ALPHANUMERIC_LENGTH_IPCMINI);
-	} else {
-		write(window, data.c_str(), ALPHANUMERIC_LENGTH_4UHV > data.size()?
-				data.size() : ALPHANUMERIC_LENGTH_4UHV);
-	}
-}
-
-void Agilent4uhv::write(const char window[WIN_LENGTH], const bool data) {
-	char data_[LOGIC_LENGTH+1];
-	snprintf(data_, LOGIC_LENGTH+1, "%0*d", LOGIC_LENGTH, data);
-	write(window, data_, LOGIC_LENGTH);
-}
-
-void Agilent4uhv::write(const char window[WIN_LENGTH], const int data) {
-	char data_[NUMERIC_LENGTH+1];
-	snprintf(data_, NUMERIC_LENGTH+1, "%0*d", NUMERIC_LENGTH, data);
-	write(window, data_, NUMERIC_LENGTH);
-}
-
-void Agilent4uhv::read_Status() {
-	int val;
-	read("205", val);
-
-	if (val == 0) {
-		set_state(Tango::ON);
-		set_status("The device is in ON state");
-	} else {
-		set_state(Tango::FAULT);
-		set_status("The device is in FAULT state");
-	}
-}
-
-void Agilent4uhv::read_Model() {
-	string val;
-	read("319", val);
-	strncpy(attr_Model_read[0], val.c_str(),
-			MAX_DEVSTRING_LENGTH > val.size()?
-			val.size() : MAX_DEVSTRING_LENGTH);
-}
-
-void Agilent4uhv::read_PowerMaxCh1() {
-	int val;
-	read("612", val);
-	PowerMaxX_data["PowerMax1"] = val;
-}
-
-void Agilent4uhv::read_PowerMaxCh2() {
-	int val;
-	read("622", val);
-	PowerMaxX_data["PowerMax2"] = val;
-}
-
-void Agilent4uhv::read_PowerMaxCh3() {
-	int val;
-	read("632", val);
-	PowerMaxX_data["PowerMax3"] = val;
-}
-
-void Agilent4uhv::read_PowerMaxCh4() {
-	int val;
-	read("642", val);
-	PowerMaxX_data["PowerMax4"] = val;
-}
-
-void Agilent4uhv::read_PressureCh1() {
-	string val;
-	read("812", val);
-	double val2;
-	convert(val, val2); 
-	PressureX_data["Pressure1"] = val2;
-}
+void* Worker::run_undetached(void *ptr)
+{
+	(void)ptr;
 
-void Agilent4uhv::read_PressureCh2() {
-	string val;
-	read("822", val);
-	double val2;
-	convert(val, val2); 
-	PressureX_data["Pressure2"] = val2;
-}
+	DEBUG_STREAM << "Worker::run_undetached() - enter" << endl;
 
-void Agilent4uhv::read_PressureCh3() {
-	string val;
-	read("832", val);
-	double val2;
-	convert(val, val2); 
-	PressureX_data["Pressure3"] = val2;
-}
+	Data data;
+	vector<unsigned char> channels(6, '0');
 
-void Agilent4uhv::read_PressureCh4() {
-	string val;
-	read("842", val);
-	double val2;
-	convert(val, val2); 
-	PressureX_data["Pressure4"] = val2;
-}
+	while(cont) {
+		DEBUG_STREAM << "Worker::run_undetached() - loop" << endl;
 
-void Agilent4uhv::read_HVCh1() {
-	bool val;
-	read("011", val);
-	
-	if (val)
-		HVX_data["HV1"] = Tango::ON;
-	else
-		HVX_data["HV1"] = Tango::OFF;
-}
+		// Retrieve data
+		try {
+			device->read(MODEL, data.model);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_HVCh2() {
-	bool val;
-	read("012", val);
-	
-	if (val)
-		HVX_data["HV2"] = Tango::ON;
-	else
-		HVX_data["HV2"] = Tango::OFF;
-}
+			device->read(SERIALNUMBER, data.serial_number);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_HVCh3() {
-	bool val;
-	read("013", val);
-	
-	if (val)
-		HVX_data["HV3"] = Tango::ON;
-	else
-		HVX_data["HV3"] = Tango::OFF;
-}
+			device->read(TEMPERATUREFAN, data.temperature_fan);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_HVCh4() {
-	bool val;
-	read("014", val);
-	
-	if (val)
-		HVX_data["HV4"] = Tango::ON;
-	else
-		HVX_data["HV4"] = Tango::OFF;
-}
+			device->read(HVCH1, data.hvch[0]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_ErrorCodeCh1() {
-	int val;
-	if (nchannel > 1)
-		write("505", 1);
-	read("206", val);
-	errorcode[0] = val;
-}
+			device->read(HVCH2, data.hvch[1]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_ErrorCodeCh2() {
-	int val;
-	write("505", 2);
-	read("206", val);
-	errorcode[1] = val;
-}
+			device->read(HVCH3, data.hvch[2]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_ErrorCodeCh3() {
-	int val;
-	write("505", 3);
-	read("206", val);
-	errorcode[2] = val;
-}
+			device->read(HVCH4, data.hvch[3]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_ErrorCodeCh4() {
-	int val;
-	write("505", 4);
-	read("206", val);
-	errorcode[3] = val;
-}
+			device->read(DEVICENUMBERCH1, data.device_number[0]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_SerialNumber() {
-	string val;
-	read("323", val);
-	strncpy(attr_SerialNumber_read[0], val.c_str(),
-			MAX_DEVSTRING_LENGTH > val.size()?
-			val.size() : MAX_DEVSTRING_LENGTH);
-}
+			device->read(DEVICENUMBERCH2, data.device_number[1]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_FixedStep() {
-	string val;
-	read("603", val);
-	
-	if (val.size() == 1) {
-		if (val[0] == '0') {
-			FixedStepX_data["Fixed1"] = false;
-		} else {
-			FixedStepX_data["Fixed1"] = true;
-		}
-	} else {
-		int j = 1;
-		for (int i = val.size(); i > ((int)val.size() - 4) /* Max channels */; --i) {
-			stringstream ss;
-			ss << j++;
-			if (val[i-1] == '0') {
-				FixedStepX_data["Fixed" + ss.str()] = false;
-			} else {
-				FixedStepX_data["Fixed" + ss.str()] = true;
-			}
-		}
-	}
-}
+			device->read(DEVICENUMBERCH3, data.device_number[2]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_AutoStart() {
-	string val;
-	read("601", val);
-	
-	if (val[val.size()-1] == '1') {
-		attr_AutoStart_read[0] = true;
-	} else {
-		attr_AutoStart_read[0] = false;
-	}
-}
+			device->read(DEVICENUMBERCH4, data.device_number[3]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_Protect() {
-	string val;
-	read("602", val);
-	
-	if (val.size() == 1) {
-		if (val[0] == '0') {
-			ProtectX_data["Protect1"] = false;
-		} else {
-			ProtectX_data["Protect1"] = true;
-		}
-	} else {
-		int j = 1;
-		for (int i = val.size(); i > ((int)val.size() - 4) /* Max channels */; --i) {
-			stringstream ss;
-			ss << j++;
-			if (val[i-1] == '0') {
-				ProtectX_data["Protect" + ss.str()] = false;
-			} else {
-				ProtectX_data["Protect" + ss.str()] = true;
-			}
-		}
-	}
-}
+			device->read(POWERMAXCH1, data.power_max[0]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_StatusSetPoint() {
-	string val;
-	read("804", val);
+			device->read(POWERMAXCH2, data.power_max[1]);
+			if(! cont)
+				break;
+			wait(10);
 
-	if (val.size() == 1) {
-		if (val[0] == '0') {
-			StatusSetPointX_data["StatusSetPoint1"] = false;
-		} else {
-			StatusSetPointX_data["StatusSetPoint1"] = true;
-		}
-	} else {
-		int j = 1;
-		for (int i = val.size(); i > ((int)val.size() - 4) /* Max channels */; --i) {
-			stringstream ss;
-			ss << j++;
-			if (val[i-1] == '0') {
-				StatusSetPointX_data["StatusSetPoint" + ss.str()] = false;
-			} else {
-				StatusSetPointX_data["StatusSetPoint" + ss.str()] = true;
-			}
-		}
-	}
-}
+			device->read(POWERMAXCH3, data.power_max[2]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_DeviceNumberCh1() {
-	int val;
-	read("610", val);
-	DeviceNumberX_data["DeviceNumber1"] = val;
-}
+			device->read(POWERMAXCH4, data.power_max[3]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_DeviceNumberCh2() {
-	int val;
-	read("620", val);
-	DeviceNumberX_data["DeviceNumber2"] = val;
-}
+			device->read(VTARGETCH1, data.vtarget[0]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_DeviceNumberCh3() {
-	int val;
-	read("630", val);
-	DeviceNumberX_data["DeviceNumber3"] = val;
-}
+			device->read(VTARGETCH2, data.vtarget[1]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_DeviceNumberCh4() {
-	int val;
-	read("640", val);
-	DeviceNumberX_data["DeviceNumber4"] = val;
-}
+			device->read(VTARGETCH3, data.vtarget[2]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_VTargetCh1() {
-	int val;
-	read("613", val);
-	VTargetX_data["VTarget1"] = val / 1000;
-}
+			device->read(VTARGETCH4, data.vtarget[3]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_VTargetCh2() {
-	int val;
-	read("623", val);
-	VTargetX_data["VTarget2"] = val / 1000;
-}
+			device->read(IPROTECTCH1, data.iprotect[0]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_VTargetCh3() {
-	int val;
-	read("633", val);
-	VTargetX_data["VTarget3"] = val / 1000;
-}
+			device->read(IPROTECTCH2, data.iprotect[1]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_VTargetCh4() {
-	int val;
-	read("643", val);
-	VTargetX_data["VTarget4"] = val / 1000;
-}
+			device->read(IPROTECTCH3, data.iprotect[2]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_IProtectCh1() {
-	int val;
-	read("614", val);
-	if (strncmp(attr_Model_read[0], "X3602-64010", 11) == 0) {
-		IProtectX_data["IProtect1"] = val / 1000;
-	} else {
-		IProtectX_data["IProtect1"] = val;
-	}
-}
+			device->read(IPROTECTCH4, data.iprotect[3]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_IProtectCh2() {
-	int val;
-	read("624", val);
-	if (strncmp(attr_Model_read[0], "X3602-64010", 11) == 0) {
-		IProtectX_data["IProtect2"] = val / 1000;
-	} else {
-		IProtectX_data["IProtect2"] = val;
-	}
-}
+			device->read(SETPOINTCH1, data.setpoint[0]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_IProtectCh3() {
-	int val;
-	read("634", val);
-	if (strncmp(attr_Model_read[0], "X3602-64010", 11) == 0) {
-		IProtectX_data["IProtect3"] = val / 1000;
-	} else {
-		IProtectX_data["IProtect3"] = val;
-	}
-}
+			device->read(SETPOINTCH2, data.setpoint[1]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_IProtectCh4() {
-	int val;
-	read("644", val);
-	if (strncmp(attr_Model_read[0], "X3602-64010", 11) == 0) {
-		IProtectX_data["IProtect4"] = val / 1000;
-	} else {
-		IProtectX_data["IProtect4"] = val;
-	}
-}
+			device->read(SETPOINTCH3, data.setpoint[2]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_SetPointCh1() {
-	string val;
-	read("615", val);
-	convert(val, SetPointX_data["SetPoint1"]);
-}
+			device->read(SETPOINTCH4, data.setpoint[3]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_SetPointCh2() {
-	string val;
-	read("625", val);
-	convert(val, SetPointX_data["SetPoint2"]);
-}
+			device->read(TEMPERATUREHVCH1, data.temperaturehv[0]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_SetPointCh3() {
-	string val;
-	read("635", val);
-	convert(val, SetPointX_data["SetPoint3"]);
-}
+			device->read(TEMPERATUREHVCH2, data.temperaturehv[1]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_SetPointCh4() {
-	string val;
-	read("645", val);
-	convert(val, SetPointX_data["SetPoint4"]);
-}
+			device->read(TEMPERATUREHVCH3, data.temperaturehv[2]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_Temperature() {
-	int val;
-	read("800", val);
-	attr_Temperature_read[0] = val;
-}
+			device->read(TEMPERATUREHVCH4, data.temperaturehv[3]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_TemperatureCh1() {
-	int val;
-	read("801", val);
-	TemperatureHVX_data["TemperatureHV1"] = val;
-}
+			device->read(VMEASUREDCH1, data.vmeasured[0]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_TemperatureCh2() {
-	int val;
-	read("802", val);
-	TemperatureHVX_data["TemperatureHV2"] = val;
-}
+			device->read(VMEASUREDCH2, data.vmeasured[1]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_TemperatureCh3() {
-	int val;
-	read("808", val);
-	TemperatureHVX_data["TemperatureHV3"] = val;
-}
+			device->read(VMEASUREDCH3, data.vmeasured[2]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_TemperatureCh4() {
-	int val;
-	read("809", val);
-	TemperatureHVX_data["TemperatureHV4"] = val;
-}
+			device->read(VMEASUREDCH4, data.vmeasured[3]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_IMeasuredCh1() {
-	string val;
-	read("811", val);
-	convert(val, CurrentX_data["Current1"]);
-}
+			device->read(IMEASUREDCH1, data.imeasured[0]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_IMeasuredCh2() {
-	string val;
-	read("821", val);
-	convert(val, CurrentX_data["Current2"]);
-}
+			device->read(IMEASUREDCH2, data.imeasured[1]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_IMeasuredCh3() {
-	string val;
-	read("831", val);
-	convert(val, CurrentX_data["Current3"]);
-}
+			device->read(IMEASUREDCH3, data.imeasured[2]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_IMeasuredCh4() {
-	string val;
-	read("841", val);
-	convert(val, CurrentX_data["Current4"]);
-}
+			device->read(IMEASUREDCH4, data.imeasured[3]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_VMeasuredCh1() {
-	int val;
-	read("810", val);
-	VoltageX_data["Voltage1"] = val;
-}
+			device->read(PRESSURECH1, data.pressure[0]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_VMeasuredCh2() {
-	int val;
-	read("820", val);
-	VoltageX_data["Voltage2"] = val;
-}
+			device->read(PRESSURECH2, data.pressure[1]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_VMeasuredCh3() {
-	int val;
-	read("830", val);
-	VoltageX_data["Voltage3"] = val;
-}
+			device->read(PRESSURECH3, data.pressure[2]);
+			if(! cont)
+				break;
+			wait(10);
 
-void Agilent4uhv::read_VMeasuredCh4() {
-	int val;
-	read("840", val);
-	VoltageX_data["Voltage4"] = val;
-}
+			device->read(PRESSURECH4, data.pressure[3]);
+			if(! cont)
+				break;
+			wait(10);
 
-void* Agilent4uhvWorker::run_undetached(void * /*ptr*/)
-{
-	DEBUG_STREAM << "Agilent4uhvWorker::run_undetached() - enter" << endl;
+			device->read(OPERATINGMODE, data.autostart);
+			if(! cont)
+				break;
+			wait(10);
 
-	string error;
-	vector<ptrFunction>::iterator norm_it = device->norm_ops.begin();
-	vector<ptrFunction>::iterator prio_it = device->prio_ops.begin();
+			device->read(PROTECT, data.protect);
+			if(! cont)
+				break;
+			wait(10);
 
-	while(cont) {
-		try {
-			error.clear();
-
-			// Retrieve priority data
-			(device->*(*prio_it))();
-			if(++prio_it == device->prio_ops.end())
-				prio_it = device->prio_ops.begin();
-			
-			// A chance to exit from while loop
+			device->read(FIXEDSTEP, data.fs);
 			if(! cont)
 				break;
+			wait(10);
 
-			usleep(device->pollingPause * 1000);
+			device->read(STATUSSETPOINT, data.ssp);
+			if(! cont)
+				break;
+			wait(10);
 
-			// A chance to exit from while loop
+			device->read(INTERLOCKSTATUS, data.is);
 			if(! cont)
 				break;
-			
-			// Retrieve normal data
-			(device->*(*norm_it))();
-			if(++norm_it == device->norm_ops.end())
-				norm_it = device->norm_ops.begin();
-		
-			// A chance to exit from while loop
+			wait(10);
+
+			device->write(SETCHANNEL, channels);
+			device->read(ERRORCODE, data.ec);
 			if(! cont)
 				break;
+			wait(10);
 
-			usleep(device->pollingPause * 1000);
+			data.state = Tango::ON;
+			data.status = "The device is in ON state";
 		} catch(Tango::DevFailed &e) {
-			error = string(e.errors[0].desc);
-		} catch(...) {
-			error = "Unknown error";
+			data.state = Tango::FAULT;
+			data.status = string(e.errors[0].desc);
 		}
 
-		if(! error.empty()) {
-			ERROR_STREAM << error << endl;
-			device->set_state(Tango::UNKNOWN);
-			device->set_status(error);
-			assert(false);
-		}
-			
-		usleep(device->pollingPeriod * 1000);
+		// Copy data
+		device->data_mutex.lock();
+		device->data = data;
+		device->data_mutex.unlock();
 	}
 
-	DEBUG_STREAM << "Agilent4uhvWorker::run_undetached() - exit" << endl;
+	DEBUG_STREAM << "Worker::run_undetached() - exit" << endl;
 
 	return NULL;
 }
diff --git a/src/Agilent4uhv.h b/src/Agilent4uhv.h
index f2bd6bddc3757558cd5a7f6c0a8a90ad6c60d872..e627befa07d19503fdb0479dc6f51b1e8c6349b4 100644
--- a/src/Agilent4uhv.h
+++ b/src/Agilent4uhv.h
@@ -24,8 +24,8 @@
 // 
 // $Author: alessio $
 //
-// $Revision: 1.13 $
-// $Date: 2019-04-01 09:14:47 $
+// $Revision: 1.9 $
+// $Date: 2018-05-10 08:04:51 $
 //
 // $HeadURL:  $
 //
@@ -53,12 +53,32 @@ namespace Agilent4uhv_ns
 /*----- PROTECTED REGION ID(Agilent4uhv::Additional Class Declarations) ENABLED START -----*/
 
 //	Additional Class Declarations
-
-#define WIN_LENGTH 3
-
-class Agilent4uhv;
-class Agilent4uhvWorker;
-typedef void(Agilent4uhv::*ptrFunction)(void);
+class Worker;
+struct Data {
+	string model;
+	string serial_number;
+	Tango::DevFloat temperature_fan;
+	int hvch[4];
+	Tango::DevLong device_number[4];
+	Tango::DevUShort power_max[4];
+	Tango::DevUShort vtarget[4];
+	Tango::DevUShort iprotect[4];
+	Tango::DevDouble setpoint[4];
+	Tango::DevFloat temperaturehv[4];
+	Tango::DevDouble vmeasured[4];
+	Tango::DevDouble imeasured[4];
+	Tango::DevDouble pressure[4];
+	
+	vector<unsigned char> autostart;
+	vector<unsigned char> protect;
+	vector<unsigned char> fs;
+	vector<unsigned char> ssp;
+	vector<unsigned char> is;
+	vector<unsigned char> ec;
+
+	Tango::DevState state;
+	string status;
+};
 
 /*----- PROTECTED REGION END -----*/	//	Agilent4uhv::Additional Class Declarations
 
@@ -70,31 +90,19 @@ class Agilent4uhv : public Serial2Client_ns::Serial2Client
 //	Add your own data members
 	Tango::DevUShort nchannel;
 	string init_error;
-
-	/*
-	 * 4UHV con 2 canali x 80W--> attivi canali 1 e 2
-	 * 4UHV con 4 canali x 80W--> attivi canali da 1 a 4
-	 * 4UHV con 2 canali x 200W--> attivi canali 1 e 3
-	 */
 	bool odd_channel_quirk;
 
-	omni_mutex io_mutex;
-
-	Agilent4uhvWorker *worker;
-
-	int errorcode[4];
+	omni_mutex iomutex;
 
 public:
-	vector<ptrFunction> norm_ops, prio_ops;
+	Worker *worker;
+	Data data;
+	omni_mutex data_mutex;
 
 /*----- PROTECTED REGION END -----*/	//	Agilent4uhv::Data Members
 
 //	Device property data members
 public:
-	//	PollingPause:	Milliseconds between two command issued by internal poller in the same cycle
-	Tango::DevLong	pollingPause;
-	//	PollingPeriod:	Milliseconds between two cycle of the internal poller
-	Tango::DevLong	pollingPeriod;
 
 	bool	mandatoryNotDefined;
 
@@ -103,8 +111,6 @@ public:
 	Tango::DevString	*attr_Model_read;
 	Tango::DevString	*attr_SerialNumber_read;
 	Tango::DevFloat	*attr_Temperature_read;
-	Tango::DevLong	*attr_CRCErrors_read;
-	Tango::DevBoolean	*attr_AutoStart_read;
 
 //	Constructors and destructors
 public:
@@ -146,10 +152,6 @@ public:
 	 *	Initialize the device
 	 */
 	virtual void init_device();
-	/*
-	 *	Read the device properties from database
-	 */
-	void get_device_property();
 	/*
 	 *	Always executed method before execution command method.
 	 */
@@ -169,13 +171,6 @@ public:
 	 */
 	//--------------------------------------------------------
 	virtual void read_attr_hardware(vector<long> &attr_list);
-	//--------------------------------------------------------
-	/*
-	 *	Method      : Agilent4uhv::write_attr_hardware()
-	 *	Description : Hardware writing for attributes.
-	 */
-	//--------------------------------------------------------
-	virtual void write_attr_hardware(vector<long> &attr_list);
 
 /**
  *	Attribute Model related methods
@@ -204,25 +199,6 @@ public:
  */
 	virtual void read_Temperature(Tango::Attribute &attr);
 	virtual bool is_Temperature_allowed(Tango::AttReqType type);
-/**
- *	Attribute CRCErrors related methods
- *	Description: CRC Errors
- *
- *	Data type:	Tango::DevLong
- *	Attr type:	Scalar
- */
-	virtual void read_CRCErrors(Tango::Attribute &attr);
-	virtual bool is_CRCErrors_allowed(Tango::AttReqType type);
-/**
- *	Attribute AutoStart related methods
- *	Description: 
- *
- *	Data type:	Tango::DevBoolean
- *	Attr type:	Scalar
- */
-	virtual void read_AutoStart(Tango::Attribute &attr);
-	virtual void write_AutoStart(Tango::WAttribute &attr);
-	virtual bool is_AutoStart_allowed(Tango::AttReqType type);
 
 //	Dynamic attribute methods
 public:
@@ -400,6 +376,21 @@ public:
 	Tango::DevString *get_StatusX_data_ptr(string &name);
 	map<string,Tango::DevString>	   StatusX_data;
 
+	/**
+	 *	Attribute AutoStartX related methods
+	 *	Description: 
+	 *
+	 *	Data type:	Tango::DevBoolean
+	 *	Attr type:	Scalar
+	 */
+	virtual void read_AutoStartX(Tango::Attribute &attr);
+	virtual void write_AutoStartX(Tango::WAttribute &attr);
+	virtual bool is_AutoStartX_allowed(Tango::AttReqType type);
+	void add_AutoStartX_dynamic_attribute(string attname);
+	void remove_AutoStartX_dynamic_attribute(string attname);
+	Tango::DevBoolean *get_AutoStartX_data_ptr(string &name);
+	map<string,Tango::DevBoolean>	   AutoStartX_data;
+
 	/**
 	 *	Attribute ProtectX related methods
 	 *	Description: 
@@ -444,6 +435,20 @@ public:
 	Tango::DevBoolean *get_StatusSetPointX_data_ptr(string &name);
 	map<string,Tango::DevBoolean>	   StatusSetPointX_data;
 
+	/**
+	 *	Attribute InterlockStatusX related methods
+	 *	Description: 
+	 *
+	 *	Data type:	Tango::DevBoolean
+	 *	Attr type:	Scalar
+	 */
+	virtual void read_InterlockStatusX(Tango::Attribute &attr);
+	virtual bool is_InterlockStatusX_allowed(Tango::AttReqType type);
+	void add_InterlockStatusX_dynamic_attribute(string attname);
+	void remove_InterlockStatusX_dynamic_attribute(string attname);
+	Tango::DevBoolean *get_InterlockStatusX_data_ptr(string &name);
+	map<string,Tango::DevBoolean>	   InterlockStatusX_data;
+
 	/**
 	 *	Attribute StatMaskX related methods
 	 *	Description: 
@@ -471,27 +476,63 @@ public:
 
 //	Command related methods
 public:
-
-//	Dynamic commands methods
-public:
 	/**
-	 *	Command OnHVX related method
+	 *	Command OffHV1 related method
+	 *	Description: 
+	 *
+	 */
+	virtual void off_hv1();
+	virtual bool is_OffHV1_allowed(const CORBA::Any &any);
+	/**
+	 *	Command OffHV2 related method
+	 *	Description: 
+	 *
+	 */
+	virtual void off_hv2();
+	virtual bool is_OffHV2_allowed(const CORBA::Any &any);
+	/**
+	 *	Command OnHV1 related method
+	 *	Description: 
+	 *
+	 */
+	virtual void on_hv1();
+	virtual bool is_OnHV1_allowed(const CORBA::Any &any);
+	/**
+	 *	Command OnHV2 related method
+	 *	Description: 
+	 *
+	 */
+	virtual void on_hv2();
+	virtual bool is_OnHV2_allowed(const CORBA::Any &any);
+	/**
+	 *	Command OffHV3 related method
+	 *	Description: 
+	 *
+	 */
+	virtual void off_hv3();
+	virtual bool is_OffHV3_allowed(const CORBA::Any &any);
+	/**
+	 *	Command OffHV4 related method
+	 *	Description: 
+	 *
+	 */
+	virtual void off_hv4();
+	virtual bool is_OffHV4_allowed(const CORBA::Any &any);
+	/**
+	 *	Command OnHV3 related method
 	 *	Description: 
 	 *
 	 */
-	virtual void on_hvx(Tango::Command &command);
-	virtual bool is_OnHVX_allowed(const CORBA::Any &any);
-	void add_OnHVX_dynamic_command(string cmdname, bool device);
-	void remove_OnHVX_dynamic_command(string cmdname);
+	virtual void on_hv3();
+	virtual bool is_OnHV3_allowed(const CORBA::Any &any);
 	/**
-	 *	Command OffHVX related method
+	 *	Command OnHV4 related method
 	 *	Description: 
 	 *
 	 */
-	virtual void off_hvx(Tango::Command &command);
-	virtual bool is_OffHVX_allowed(const CORBA::Any &any);
-	void add_OffHVX_dynamic_command(string cmdname, bool device);
-	void remove_OffHVX_dynamic_command(string cmdname);
+	virtual void on_hv4();
+	virtual bool is_OnHV4_allowed(const CORBA::Any &any);
+
 
 	//--------------------------------------------------------
 	/**
@@ -504,129 +545,100 @@ public:
 /*----- PROTECTED REGION ID(Agilent4uhv::Additional Method prototypes) ENABLED START -----*/
 
 //	Additional Method prototypes
-private:
-	void write_message(const char window[WIN_LENGTH], const unsigned char com,
-			const char * const data, const size_t data_length);
-	string read_answer();
-
-	void write(const char window[WIN_LENGTH], const char * const data,
-			const size_t data_length);
-	string read(const char window[WIN_LENGTH]);
-
-	template<typename T> void convert(const string &data, T &result) {
-		stringstream ss;
-		ss << data;
-		ss >> result;
-		if (ss.fail())
-			Tango::Except::throw_exception( "",
-					"Conversion fail of " + data,
+	void write(const int win, string &value);
+	template<typename T> void write(const int win, T &value)
+	{
+		string data;
+		convert(value, data);
+		write(win, data);
+	}
+
+	void read(const int win, string &value);
+	template<typename T> void read(const int win, T &value)
+	{
+		string answer;
+		read(win, answer);
+		convert(answer, value);
+	}
+
+	void write(const int win, vector<unsigned char> &data);
+	void read(const int win, vector<unsigned char> &answer);
+	void check_ack();
+	void write_message(const string win_s, const unsigned char com, vector<unsigned char> &data);
+	void read_answer(const string win_s, const unsigned char com, vector<unsigned char> &answer);
+	unsigned char calc_crc(const vector<unsigned char> &message);
+	template<typename F, typename T> void convert(const F &reply, T &reply_converted)
+	{
+		stringstream conv;
+		convert(reply, conv);
+		conv >> reply_converted;
+
+		if (conv.fail())
+			Tango::Except::throw_exception(
+					"API_ConverionError",
+					"Conversion fail " + conv.str(),
 					"Agilent4uhv::convert()");
 	}
-	
-	template<typename T> void convert(const T &data, string &result) {
-		stringstream ss;
-		ss << data;
-		result = ss.str();
-		if (ss.fail())
-			Tango::Except::throw_exception( "",
-					"Conversion fail of " + data,
+	template<typename F> void convert(const F &reply, stringstream &conv)
+	{
+		conv << reply << flush;
+
+		if (conv.fail())
+			Tango::Except::throw_exception(
+					"API_ConverionError",
+					"Conversion fail " + conv.str(),
 					"Agilent4uhv::convert()");
 	}
-
-	int calc_crc(unsigned char *contents, size_t count);
+	template<typename F> void convert(const F &reply, string &reply_converted)
+	{
+		stringstream conv;
+		convert(reply, conv);
+		reply_converted = conv.str();
+	}
 	void check_init_error(void);
 
-#define ALPHANUMERIC_LENGTH_4UHV 10
-#define ALPHANUMERIC_LENGTH_IPCMINI 48
-#define LOGIC_LENGTH 1
-#define NUMERIC_LENGTH 6
-
-	void read(const char window[WIN_LENGTH], string &data);
-	void read(const char window[WIN_LENGTH], bool &data);
-	void read(const char window[WIN_LENGTH], int &data);
-	void write(const char window[WIN_LENGTH], const string &data);
-	void write(const char window[WIN_LENGTH], const bool data);
-	void write(const char window[WIN_LENGTH], const int data);
-
-public:
-	void read_Status();
-	void read_Model();
-	void read_PowerMaxCh1();
-	void read_PowerMaxCh2();
-	void read_PowerMaxCh3();
-	void read_PowerMaxCh4();
-	void read_PressureCh1();
-	void read_PressureCh2();
-	void read_PressureCh3();
-	void read_PressureCh4();
-	void read_HVCh1();
-	void read_HVCh2();
-	void read_HVCh3();
-	void read_HVCh4();
-	void read_ErrorCodeCh1();
-	void read_ErrorCodeCh2();
-	void read_ErrorCodeCh3();
-	void read_ErrorCodeCh4();
-	void read_SerialNumber();
-	void read_FixedStep();
-	void read_AutoStart();
-	void read_Protect();
-	void read_DeviceNumberCh1();
-	void read_DeviceNumberCh2();
-	void read_DeviceNumberCh3();
-	void read_DeviceNumberCh4();
-	void read_VTargetCh1();
-	void read_VTargetCh2();
-	void read_VTargetCh3();
-	void read_VTargetCh4();
-	void read_IProtectCh1();
-	void read_IProtectCh2();
-	void read_IProtectCh3();
-	void read_IProtectCh4();
-	void read_SetPointCh1();
-	void read_SetPointCh2();
-	void read_SetPointCh3();
-	void read_SetPointCh4();
-	void read_Temperature();
-	void read_TemperatureCh1();
-	void read_TemperatureCh2();
-	void read_TemperatureCh3();
-	void read_TemperatureCh4();
-	void read_IMeasuredCh1();
-	void read_IMeasuredCh2();
-	void read_IMeasuredCh3();
-	void read_IMeasuredCh4();
-	void read_VMeasuredCh1();
-	void read_VMeasuredCh2();
-	void read_VMeasuredCh3();
-	void read_VMeasuredCh4();
-	void read_StatusSetPoint();
-
 /*----- PROTECTED REGION END -----*/	//	Agilent4uhv::Additional Method prototypes
 };
 
 /*----- PROTECTED REGION ID(Agilent4uhv::Additional Classes Definitions) ENABLED START -----*/
 
 //	Additional Classes Definitions
-class Agilent4uhvWorker : public omni_thread, public Tango::LogAdapter {
+class Worker : public omni_thread, public Tango::LogAdapter
+{
 	Agilent4uhv *device;
 	void* run_undetached(void*);
 	bool cont;
-public:
-	Agilent4uhvWorker(Agilent4uhv *device_) :
-		LogAdapter((Tango::DeviceImpl*)device_),
-		device(device_), cont(false) {}
 
-	void start() {
-		cont = true;
+	public:
+	void start(void) {
 		start_undetached();
 	}
 
-	void stop() {
+	void stop(void) {
 		cont = false;
 	}
+
+	void wait(unsigned int millisecs)
+	{
+		while(cont && millisecs) {
+			if (millisecs >= 250) {
+				omni_thread::self()->sleep(0, 250000000);
+				millisecs -= 250;
+			} else {
+				omni_thread::self()->sleep(0, millisecs * 1000000);
+				millisecs = 0;
+			}
+		}
+	}
+
+	Worker(Agilent4uhv *device_) :
+		LogAdapter((Tango::DeviceImpl*)device_),
+		device(device_) {
+			cont = true;
+		}
 };
 
+
 /*----- PROTECTED REGION END -----*/	//	Agilent4uhv::Additional Classes Definitions
 
 }	//	End of namespace
diff --git a/src/Agilent4uhv.xmi b/src/Agilent4uhv.xmi
index 7d2682699abdfedf7654d341d6e59195a0e5d8ef..ca871eacd56e327682ca2823ab20f66afaac4ae5 100644
--- a/src/Agilent4uhv.xmi
+++ b/src/Agilent4uhv.xmi
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="ASCII"?>
 <pogoDsl:PogoSystem xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pogoDsl="http://www.esrf.fr/tango/pogo/PogoDsl">
   <classes name="Agilent4uhv" pogoRevision="9.4">
-    <description description="" title="" sourcePath="/home/alessio/Sources/cvs-trees/fermi/servers/4uhv/src" language="Cpp" filestogenerate="XMI   file,Code files,Protected Regions" license="GPL" hasMandatoryProperty="true" hasConcreteProperty="true" hasAbstractCommand="false" hasAbstractAttribute="false">
+    <description description="" title="" sourcePath="/home/alessio/fermi/servers/4uhv/src" language="Cpp" filestogenerate="XMI   file,Code files,Protected Regions" license="GPL" hasMandatoryProperty="true" hasConcreteProperty="false" hasAbstractCommand="false" hasAbstractAttribute="false">
       <inheritances classname="Device_Impl" sourcePath=""/>
       <inheritances classname="Serial2Client" sourcePath="../../serial2/src"/>
       <identification contact="at elettra.eu> - Alessio Igor Bogani &lt;alessio.bogani" author="Alessio Igor Bogani &lt;alessio.bogani" emailDomain="elettra.eu>" classFamily="Vacuum" siteSpecific="" platform="Unix Like" bus="Serial Line" manufacturer="Agilent Technologies" reference="4UHV Ion Pump Controller"/>
@@ -10,16 +10,54 @@
       <type xsi:type="pogoDsl:StringType"/>
       <status abstract="false" inherited="true" concrete="true"/>
     </deviceProperties>
-    <deviceProperties name="PollingPause" description="Milliseconds between two command issued by internal poller in the same cycle">
-      <type xsi:type="pogoDsl:IntType"/>
+    <commands name="OffHV1" description="" execMethod="off_hv1" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-      <DefaultPropValue>0</DefaultPropValue>
-    </deviceProperties>
-    <deviceProperties name="PollingPeriod" description="Milliseconds between two cycle of the internal poller">
-      <type xsi:type="pogoDsl:IntType"/>
+      <excludedStates>UNKNOWN</excludedStates>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>INIT</excludedStates>
+    </commands>
+    <commands name="OffHV2" description="" execMethod="off_hv2" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-      <DefaultPropValue>1000</DefaultPropValue>
-    </deviceProperties>
+      <excludedStates>UNKNOWN</excludedStates>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>INIT</excludedStates>
+    </commands>
+    <commands name="OnHV1" description="" execMethod="on_hv1" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>UNKNOWN</excludedStates>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>INIT</excludedStates>
+    </commands>
+    <commands name="OnHV2" description="" execMethod="on_hv2" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>UNKNOWN</excludedStates>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>INIT</excludedStates>
+    </commands>
     <commands name="State" description="This command gets the device state (stored in its device_state data member) and returns it to the caller." execMethod="dev_state" displayLevel="OPERATOR" polledPeriod="0">
       <argin description="none">
         <type xsi:type="pogoDsl:VoidType"/>
@@ -38,7 +76,7 @@
       </argout>
       <status abstract="true" inherited="true" concrete="true"/>
     </commands>
-    <dynamicCommands name="OnHVX" description="" execMethod="on_hvx" displayLevel="OPERATOR" polledPeriod="0" isDynamic="true">
+    <commands name="OffHV3" description="" execMethod="off_hv3" displayLevel="OPERATOR" polledPeriod="0" isDynamic="false">
       <argin description="">
         <type xsi:type="pogoDsl:VoidType"/>
       </argin>
@@ -47,8 +85,10 @@
       </argout>
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <excludedStates>UNKNOWN</excludedStates>
-    </dynamicCommands>
-    <dynamicCommands name="OffHVX" description="" execMethod="off_hvx" displayLevel="OPERATOR" polledPeriod="0" isDynamic="true">
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>INIT</excludedStates>
+    </commands>
+    <commands name="OffHV4" description="" execMethod="off_hv4" displayLevel="OPERATOR" polledPeriod="0" isDynamic="false">
       <argin description="">
         <type xsi:type="pogoDsl:VoidType"/>
       </argin>
@@ -57,8 +97,34 @@
       </argout>
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <excludedStates>UNKNOWN</excludedStates>
-    </dynamicCommands>
-    <attributes name="Model" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false">
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>INIT</excludedStates>
+    </commands>
+    <commands name="OnHV3" description="" execMethod="on_hv3" displayLevel="OPERATOR" polledPeriod="0" isDynamic="false">
+      <argin description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>UNKNOWN</excludedStates>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>INIT</excludedStates>
+    </commands>
+    <commands name="OnHV4" description="" execMethod="on_hv4" displayLevel="OPERATOR" polledPeriod="0" isDynamic="false">
+      <argin description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>UNKNOWN</excludedStates>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>INIT</excludedStates>
+    </commands>
+    <attributes name="Model" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="false">
       <dataType xsi:type="pogoDsl:StringType"/>
       <changeEvent fire="false" libCheckCriteria="false"/>
       <archiveEvent fire="false" libCheckCriteria="false"/>
@@ -66,8 +132,10 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
       <readExcludedStates>UNKNOWN</readExcludedStates>
+      <readExcludedStates>FAULT</readExcludedStates>
+      <readExcludedStates>INIT</readExcludedStates>
     </attributes>
-    <attributes name="SerialNumber" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false">
+    <attributes name="SerialNumber" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="false">
       <dataType xsi:type="pogoDsl:StringType"/>
       <changeEvent fire="false" libCheckCriteria="false"/>
       <archiveEvent fire="false" libCheckCriteria="false"/>
@@ -75,8 +143,10 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
       <readExcludedStates>UNKNOWN</readExcludedStates>
+      <readExcludedStates>FAULT</readExcludedStates>
+      <readExcludedStates>INIT</readExcludedStates>
     </attributes>
-    <attributes name="Temperature" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false">
+    <attributes name="Temperature" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="false">
       <dataType xsi:type="pogoDsl:FloatType"/>
       <changeEvent fire="false" libCheckCriteria="false"/>
       <archiveEvent fire="false" libCheckCriteria="false"/>
@@ -84,25 +154,8 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="C" standardUnit="" displayUnit="" format="" maxValue="200" minValue="0" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
       <readExcludedStates>UNKNOWN</readExcludedStates>
-    </attributes>
-    <attributes name="CRCErrors" attType="Scalar" rwType="READ" displayLevel="EXPERT" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false">
-      <dataType xsi:type="pogoDsl:IntType"/>
-      <changeEvent fire="false" libCheckCriteria="false"/>
-      <archiveEvent fire="false" libCheckCriteria="false"/>
-      <dataReadyEvent fire="false" libCheckCriteria="true"/>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-      <properties description="CRC Errors" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
-      <readExcludedStates>UNKNOWN</readExcludedStates>
-    </attributes>
-    <attributes name="AutoStart" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false">
-      <dataType xsi:type="pogoDsl:BooleanType"/>
-      <changeEvent fire="false" libCheckCriteria="false"/>
-      <archiveEvent fire="false" libCheckCriteria="false"/>
-      <dataReadyEvent fire="false" libCheckCriteria="true"/>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-      <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
-      <readExcludedStates>UNKNOWN</readExcludedStates>
-      <writeExcludedStates>UNKNOWN</writeExcludedStates>
+      <readExcludedStates>FAULT</readExcludedStates>
+      <readExcludedStates>INIT</readExcludedStates>
     </attributes>
     <dynamicAttributes name="HVX" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true">
       <dataType xsi:type="pogoDsl:StateType"/>
@@ -112,6 +165,8 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
       <readExcludedStates>UNKNOWN</readExcludedStates>
+      <readExcludedStates>FAULT</readExcludedStates>
+      <readExcludedStates>INIT</readExcludedStates>
     </dynamicAttributes>
     <dynamicAttributes name="DeviceNumberX" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true">
       <dataType xsi:type="pogoDsl:IntType"/>
@@ -121,7 +176,11 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
       <readExcludedStates>UNKNOWN</readExcludedStates>
+      <readExcludedStates>FAULT</readExcludedStates>
+      <readExcludedStates>INIT</readExcludedStates>
       <writeExcludedStates>UNKNOWN</writeExcludedStates>
+      <writeExcludedStates>FAULT</writeExcludedStates>
+      <writeExcludedStates>INIT</writeExcludedStates>
     </dynamicAttributes>
     <dynamicAttributes name="PowerMaxX" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true">
       <dataType xsi:type="pogoDsl:UShortType"/>
@@ -129,9 +188,13 @@
       <archiveEvent fire="false" libCheckCriteria="false"/>
       <dataReadyEvent fire="false" libCheckCriteria="true"/>
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-      <properties description="" label="" unit="W" standardUnit="" displayUnit="" format="" maxValue="80" minValue="10" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
+      <properties description="" label="" unit="W" standardUnit="" displayUnit="" format="" maxValue="80" minValue="20" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
       <readExcludedStates>UNKNOWN</readExcludedStates>
+      <readExcludedStates>FAULT</readExcludedStates>
+      <readExcludedStates>INIT</readExcludedStates>
       <writeExcludedStates>UNKNOWN</writeExcludedStates>
+      <writeExcludedStates>FAULT</writeExcludedStates>
+      <writeExcludedStates>INIT</writeExcludedStates>
     </dynamicAttributes>
     <dynamicAttributes name="VTargetX" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true">
       <dataType xsi:type="pogoDsl:UShortType"/>
@@ -141,7 +204,11 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="kV" standardUnit="" displayUnit="" format="" maxValue="7" minValue="3" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
       <readExcludedStates>UNKNOWN</readExcludedStates>
+      <readExcludedStates>FAULT</readExcludedStates>
+      <readExcludedStates>INIT</readExcludedStates>
       <writeExcludedStates>UNKNOWN</writeExcludedStates>
+      <writeExcludedStates>FAULT</writeExcludedStates>
+      <writeExcludedStates>INIT</writeExcludedStates>
     </dynamicAttributes>
     <dynamicAttributes name="IProtectX" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true">
       <dataType xsi:type="pogoDsl:UShortType"/>
@@ -151,7 +218,11 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="mA" standardUnit="" displayUnit="" format="" maxValue="100" minValue="1" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
       <readExcludedStates>UNKNOWN</readExcludedStates>
+      <readExcludedStates>FAULT</readExcludedStates>
+      <readExcludedStates>INIT</readExcludedStates>
       <writeExcludedStates>UNKNOWN</writeExcludedStates>
+      <writeExcludedStates>FAULT</writeExcludedStates>
+      <writeExcludedStates>INIT</writeExcludedStates>
     </dynamicAttributes>
     <dynamicAttributes name="SetPointX" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true">
       <dataType xsi:type="pogoDsl:DoubleType"/>
@@ -161,7 +232,11 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
       <readExcludedStates>UNKNOWN</readExcludedStates>
+      <readExcludedStates>FAULT</readExcludedStates>
+      <readExcludedStates>INIT</readExcludedStates>
       <writeExcludedStates>UNKNOWN</writeExcludedStates>
+      <writeExcludedStates>FAULT</writeExcludedStates>
+      <writeExcludedStates>INIT</writeExcludedStates>
     </dynamicAttributes>
     <dynamicAttributes name="TemperatureHVX" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true">
       <dataType xsi:type="pogoDsl:FloatType"/>
@@ -171,6 +246,8 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="C" standardUnit="" displayUnit="" format="" maxValue="200" minValue="0" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
       <readExcludedStates>UNKNOWN</readExcludedStates>
+      <readExcludedStates>FAULT</readExcludedStates>
+      <readExcludedStates>INIT</readExcludedStates>
     </dynamicAttributes>
     <dynamicAttributes name="VoltageX" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true">
       <dataType xsi:type="pogoDsl:DoubleType"/>
@@ -180,6 +257,8 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="V" standardUnit="" displayUnit="" format="" maxValue="10000" minValue="0" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
       <readExcludedStates>UNKNOWN</readExcludedStates>
+      <readExcludedStates>FAULT</readExcludedStates>
+      <readExcludedStates>INIT</readExcludedStates>
     </dynamicAttributes>
     <dynamicAttributes name="CurrentX" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true">
       <dataType xsi:type="pogoDsl:DoubleType"/>
@@ -189,6 +268,8 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="A" standardUnit="" displayUnit="" format="" maxValue="9E-1" minValue="1E-10" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
       <readExcludedStates>UNKNOWN</readExcludedStates>
+      <readExcludedStates>FAULT</readExcludedStates>
+      <readExcludedStates>INIT</readExcludedStates>
     </dynamicAttributes>
     <dynamicAttributes name="PressureX" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true">
       <dataType xsi:type="pogoDsl:DoubleType"/>
@@ -198,6 +279,8 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="mbar" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
       <readExcludedStates>UNKNOWN</readExcludedStates>
+      <readExcludedStates>FAULT</readExcludedStates>
+      <readExcludedStates>INIT</readExcludedStates>
     </dynamicAttributes>
     <dynamicAttributes name="StateX" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true">
       <dataType xsi:type="pogoDsl:StateType"/>
@@ -207,6 +290,8 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
       <readExcludedStates>UNKNOWN</readExcludedStates>
+      <readExcludedStates>FAULT</readExcludedStates>
+      <readExcludedStates>INIT</readExcludedStates>
     </dynamicAttributes>
     <dynamicAttributes name="StatusX" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true">
       <dataType xsi:type="pogoDsl:StringType"/>
@@ -216,6 +301,22 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
       <readExcludedStates>UNKNOWN</readExcludedStates>
+      <readExcludedStates>FAULT</readExcludedStates>
+      <readExcludedStates>INIT</readExcludedStates>
+    </dynamicAttributes>
+    <dynamicAttributes name="AutoStartX" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true">
+      <dataType xsi:type="pogoDsl:BooleanType"/>
+      <changeEvent fire="false" libCheckCriteria="false"/>
+      <archiveEvent fire="false" libCheckCriteria="false"/>
+      <dataReadyEvent fire="false" libCheckCriteria="true"/>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
+      <readExcludedStates>UNKNOWN</readExcludedStates>
+      <readExcludedStates>FAULT</readExcludedStates>
+      <readExcludedStates>INIT</readExcludedStates>
+      <writeExcludedStates>UNKNOWN</writeExcludedStates>
+      <writeExcludedStates>FAULT</writeExcludedStates>
+      <writeExcludedStates>INIT</writeExcludedStates>
     </dynamicAttributes>
     <dynamicAttributes name="ProtectX" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true">
       <dataType xsi:type="pogoDsl:BooleanType"/>
@@ -225,7 +326,11 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
       <readExcludedStates>UNKNOWN</readExcludedStates>
+      <readExcludedStates>FAULT</readExcludedStates>
+      <readExcludedStates>INIT</readExcludedStates>
       <writeExcludedStates>UNKNOWN</writeExcludedStates>
+      <writeExcludedStates>FAULT</writeExcludedStates>
+      <writeExcludedStates>INIT</writeExcludedStates>
     </dynamicAttributes>
     <dynamicAttributes name="FixedStepX" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true">
       <dataType xsi:type="pogoDsl:BooleanType"/>
@@ -235,7 +340,11 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
       <readExcludedStates>UNKNOWN</readExcludedStates>
+      <readExcludedStates>FAULT</readExcludedStates>
+      <readExcludedStates>INIT</readExcludedStates>
       <writeExcludedStates>UNKNOWN</writeExcludedStates>
+      <writeExcludedStates>FAULT</writeExcludedStates>
+      <writeExcludedStates>INIT</writeExcludedStates>
     </dynamicAttributes>
     <dynamicAttributes name="StatusSetPointX" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true">
       <dataType xsi:type="pogoDsl:BooleanType"/>
@@ -245,6 +354,19 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
       <readExcludedStates>UNKNOWN</readExcludedStates>
+      <readExcludedStates>FAULT</readExcludedStates>
+      <readExcludedStates>INIT</readExcludedStates>
+    </dynamicAttributes>
+    <dynamicAttributes name="InterlockStatusX" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true">
+      <dataType xsi:type="pogoDsl:BooleanType"/>
+      <changeEvent fire="false" libCheckCriteria="false"/>
+      <archiveEvent fire="false" libCheckCriteria="false"/>
+      <dataReadyEvent fire="false" libCheckCriteria="true"/>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
+      <readExcludedStates>UNKNOWN</readExcludedStates>
+      <readExcludedStates>FAULT</readExcludedStates>
+      <readExcludedStates>INIT</readExcludedStates>
     </dynamicAttributes>
     <dynamicAttributes name="StatMaskX" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true">
       <dataType xsi:type="pogoDsl:IntType"/>
@@ -254,6 +376,8 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
       <readExcludedStates>UNKNOWN</readExcludedStates>
+      <readExcludedStates>FAULT</readExcludedStates>
+      <readExcludedStates>INIT</readExcludedStates>
     </dynamicAttributes>
     <states name="ON" description="">
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
@@ -261,10 +385,13 @@
     <states name="ALARM" description="">
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
     </states>
+    <states name="UNKNOWN" description="">
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </states>
     <states name="FAULT" description="">
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
     </states>
-    <states name="UNKNOWN" description="">
+    <states name="INIT" description="">
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
     </states>
     <preferences docHome="./doc_html" makefileHome="$(TANGO_HOME)"/>
diff --git a/src/Agilent4uhvClass.cpp b/src/Agilent4uhvClass.cpp
index c2fe0e15988e4021ceb23c4aa3704b35d9c06381..17fe26cc39fc2e8a6d3a45a4e0ecd377fe3daca5 100644
--- a/src/Agilent4uhvClass.cpp
+++ b/src/Agilent4uhvClass.cpp
@@ -1,6 +1,6 @@
 /*----- PROTECTED REGION ID(Agilent4uhvClass.cpp) ENABLED START -----*/
-static const char *RcsId      = "$Id: Agilent4uhvClass.cpp,v 1.6 2019-04-01 09:14:47 alessio Exp $";
-static const char *TagName    = "Agilent4uhv $Name:  $";
+static const char *RcsId      = "$Id: Agilent4uhvClass.cpp,v 1.3 2016-05-23 07:50:11 alessio Exp $";
+static const char *TagName    = "Agilent4uhv $Name: release_06 $";
 static const char *CvsPath    = "$Source: /home/cvsadm/cvsroot/fermi/servers/4uhv/src/Agilent4uhvClass.cpp,v $";
 static const char *SvnPath    = "$HeadURL:  $";
 static const char *HttpServer = "http://www.esrf.eu/computing/cs/tango/tango_doc/ds_doc/";
@@ -33,8 +33,8 @@ static const char *HttpServer = "http://www.esrf.eu/computing/cs/tango/tango_doc
 // 
 // $Author: alessio $
 //
-// $Revision: 1.6 $
-// $Date: 2019-04-01 09:14:47 $
+// $Revision: 1.3 $
+// $Date: 2016-05-23 07:50:11 $
 //
 // $HeadURL:  $
 //
@@ -160,7 +160,7 @@ Agilent4uhvClass *Agilent4uhvClass::instance()
 //===================================================================
 //--------------------------------------------------------
 /**
- * method : 		OnHVXClass::execute()
+ * method : 		OffHV1Class::execute()
  * description : 	method to trigger the execution of the command.
  *
  * @param	device	The device on which the command must be executed
@@ -169,16 +169,16 @@ Agilent4uhvClass *Agilent4uhvClass::instance()
  *	returns The command output data (packed in the Any object)
  */
 //--------------------------------------------------------
-CORBA::Any *OnHVXClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
+CORBA::Any *OffHV1Class::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
 {
-	cout2 << "OnHVXClass::execute(): arrived" << endl;
-	((static_cast<Agilent4uhv *>(device))->on_hvx(*this));
+	cout2 << "OffHV1Class::execute(): arrived" << endl;
+	((static_cast<Agilent4uhv *>(device))->off_hv1());
 	return new CORBA::Any();
 }
 
 //--------------------------------------------------------
 /**
- * method : 		OffHVXClass::execute()
+ * method : 		OffHV2Class::execute()
  * description : 	method to trigger the execution of the command.
  *
  * @param	device	The device on which the command must be executed
@@ -187,10 +187,118 @@ CORBA::Any *OnHVXClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CO
  *	returns The command output data (packed in the Any object)
  */
 //--------------------------------------------------------
-CORBA::Any *OffHVXClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
+CORBA::Any *OffHV2Class::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
 {
-	cout2 << "OffHVXClass::execute(): arrived" << endl;
-	((static_cast<Agilent4uhv *>(device))->off_hvx(*this));
+	cout2 << "OffHV2Class::execute(): arrived" << endl;
+	((static_cast<Agilent4uhv *>(device))->off_hv2());
+	return new CORBA::Any();
+}
+
+//--------------------------------------------------------
+/**
+ * method : 		OnHV1Class::execute()
+ * description : 	method to trigger the execution of the command.
+ *
+ * @param	device	The device on which the command must be executed
+ * @param	in_any	The command input data
+ *
+ *	returns The command output data (packed in the Any object)
+ */
+//--------------------------------------------------------
+CORBA::Any *OnHV1Class::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
+{
+	cout2 << "OnHV1Class::execute(): arrived" << endl;
+	((static_cast<Agilent4uhv *>(device))->on_hv1());
+	return new CORBA::Any();
+}
+
+//--------------------------------------------------------
+/**
+ * method : 		OnHV2Class::execute()
+ * description : 	method to trigger the execution of the command.
+ *
+ * @param	device	The device on which the command must be executed
+ * @param	in_any	The command input data
+ *
+ *	returns The command output data (packed in the Any object)
+ */
+//--------------------------------------------------------
+CORBA::Any *OnHV2Class::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
+{
+	cout2 << "OnHV2Class::execute(): arrived" << endl;
+	((static_cast<Agilent4uhv *>(device))->on_hv2());
+	return new CORBA::Any();
+}
+
+//--------------------------------------------------------
+/**
+ * method : 		OffHV3Class::execute()
+ * description : 	method to trigger the execution of the command.
+ *
+ * @param	device	The device on which the command must be executed
+ * @param	in_any	The command input data
+ *
+ *	returns The command output data (packed in the Any object)
+ */
+//--------------------------------------------------------
+CORBA::Any *OffHV3Class::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
+{
+	cout2 << "OffHV3Class::execute(): arrived" << endl;
+	((static_cast<Agilent4uhv *>(device))->off_hv3());
+	return new CORBA::Any();
+}
+
+//--------------------------------------------------------
+/**
+ * method : 		OffHV4Class::execute()
+ * description : 	method to trigger the execution of the command.
+ *
+ * @param	device	The device on which the command must be executed
+ * @param	in_any	The command input data
+ *
+ *	returns The command output data (packed in the Any object)
+ */
+//--------------------------------------------------------
+CORBA::Any *OffHV4Class::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
+{
+	cout2 << "OffHV4Class::execute(): arrived" << endl;
+	((static_cast<Agilent4uhv *>(device))->off_hv4());
+	return new CORBA::Any();
+}
+
+//--------------------------------------------------------
+/**
+ * method : 		OnHV3Class::execute()
+ * description : 	method to trigger the execution of the command.
+ *
+ * @param	device	The device on which the command must be executed
+ * @param	in_any	The command input data
+ *
+ *	returns The command output data (packed in the Any object)
+ */
+//--------------------------------------------------------
+CORBA::Any *OnHV3Class::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
+{
+	cout2 << "OnHV3Class::execute(): arrived" << endl;
+	((static_cast<Agilent4uhv *>(device))->on_hv3());
+	return new CORBA::Any();
+}
+
+//--------------------------------------------------------
+/**
+ * method : 		OnHV4Class::execute()
+ * description : 	method to trigger the execution of the command.
+ *
+ * @param	device	The device on which the command must be executed
+ * @param	in_any	The command input data
+ *
+ *	returns The command output data (packed in the Any object)
+ */
+//--------------------------------------------------------
+CORBA::Any *OnHV4Class::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
+{
+	cout2 << "OnHV4Class::execute(): arrived" << endl;
+	((static_cast<Agilent4uhv *>(device))->on_hv4());
 	return new CORBA::Any();
 }
 
@@ -263,34 +371,6 @@ void Agilent4uhvClass::set_default_property()
 	//	Set Default Class Properties
 
 	//	Set Default device Properties
-	prop_name = "PollingPause";
-	prop_desc = "Milliseconds between two command issued by internal poller in the same cycle";
-	prop_def  = "0";
-	vect_data.clear();
-	vect_data.push_back("0");
-	if (prop_def.length()>0)
-	{
-		Tango::DbDatum	data(prop_name);
-		data << vect_data ;
-		dev_def_prop.push_back(data);
-		add_wiz_dev_prop(prop_name, prop_desc,  prop_def);
-	}
-	else
-		add_wiz_dev_prop(prop_name, prop_desc);
-	prop_name = "PollingPeriod";
-	prop_desc = "Milliseconds between two cycle of the internal poller";
-	prop_def  = "1000";
-	vect_data.clear();
-	vect_data.push_back("1000");
-	if (prop_def.length()>0)
-	{
-		Tango::DbDatum	data(prop_name);
-		data << vect_data ;
-		dev_def_prop.push_back(data);
-		add_wiz_dev_prop(prop_name, prop_desc,  prop_def);
-	}
-	else
-		add_wiz_dev_prop(prop_name, prop_desc);
 }
 
 //--------------------------------------------------------
@@ -467,7 +547,6 @@ void Agilent4uhvClass::device_factory(const Tango::DevVarStringArray *devlist_pt
 		//	Add dynamic attributes if any
 		Agilent4uhv *dev = static_cast<Agilent4uhv *>(device_list[device_list.size()-i]);
 		dev->add_dynamic_attributes();
-		dev->add_dynamic_commands();
 
 		//	Check before if database used.
 		if ((Tango::Util::_UseDb == true) && (Tango::Util::_FileDb == false))
@@ -571,54 +650,6 @@ void Agilent4uhvClass::attribute_factory(vector<Tango::Attr *> &att_list)
 	//	Not Memorized
 	att_list.push_back(temperature);
 
-	//	Attribute : CRCErrors
-	CRCErrorsAttrib	*crcerrors = new CRCErrorsAttrib();
-	Tango::UserDefaultAttrProp	crcerrors_prop;
-	crcerrors_prop.set_description("CRC Errors");
-	//	label	not set for CRCErrors
-	//	unit	not set for CRCErrors
-	//	standard_unit	not set for CRCErrors
-	//	display_unit	not set for CRCErrors
-	//	format	not set for CRCErrors
-	//	max_value	not set for CRCErrors
-	//	min_value	not set for CRCErrors
-	//	max_alarm	not set for CRCErrors
-	//	min_alarm	not set for CRCErrors
-	//	max_warning	not set for CRCErrors
-	//	min_warning	not set for CRCErrors
-	//	delta_t	not set for CRCErrors
-	//	delta_val	not set for CRCErrors
-	
-	crcerrors->set_default_properties(crcerrors_prop);
-	//	Not Polled
-	crcerrors->set_disp_level(Tango::EXPERT);
-	//	Not Memorized
-	att_list.push_back(crcerrors);
-
-	//	Attribute : AutoStart
-	AutoStartAttrib	*autostart = new AutoStartAttrib();
-	Tango::UserDefaultAttrProp	autostart_prop;
-	//	description	not set for AutoStart
-	//	label	not set for AutoStart
-	//	unit	not set for AutoStart
-	//	standard_unit	not set for AutoStart
-	//	display_unit	not set for AutoStart
-	//	format	not set for AutoStart
-	//	max_value	not set for AutoStart
-	//	min_value	not set for AutoStart
-	//	max_alarm	not set for AutoStart
-	//	min_alarm	not set for AutoStart
-	//	max_warning	not set for AutoStart
-	//	min_warning	not set for AutoStart
-	//	delta_t	not set for AutoStart
-	//	delta_val	not set for AutoStart
-	
-	autostart->set_default_properties(autostart_prop);
-	//	Not Polled
-	autostart->set_disp_level(Tango::OPERATOR);
-	//	Not Memorized
-	att_list.push_back(autostart);
-
 
 	//	Create a list of static attributes
 	create_static_attribute_list(get_class_attr()->get_attr_list());
@@ -665,7 +696,79 @@ void Agilent4uhvClass::command_factory()
 	//	Call command_factory for inherited class
 	Serial2Client_ns::Serial2ClientClass::command_factory();
 
-
+	//	Command OffHV1
+	OffHV1Class	*pOffHV1Cmd =
+		new OffHV1Class("OffHV1",
+			Tango::DEV_VOID, Tango::DEV_VOID,
+			"",
+			"",
+			Tango::OPERATOR);
+	command_list.push_back(pOffHV1Cmd);
+
+	//	Command OffHV2
+	OffHV2Class	*pOffHV2Cmd =
+		new OffHV2Class("OffHV2",
+			Tango::DEV_VOID, Tango::DEV_VOID,
+			"",
+			"",
+			Tango::OPERATOR);
+	command_list.push_back(pOffHV2Cmd);
+
+	//	Command OnHV1
+	OnHV1Class	*pOnHV1Cmd =
+		new OnHV1Class("OnHV1",
+			Tango::DEV_VOID, Tango::DEV_VOID,
+			"",
+			"",
+			Tango::OPERATOR);
+	command_list.push_back(pOnHV1Cmd);
+
+	//	Command OnHV2
+	OnHV2Class	*pOnHV2Cmd =
+		new OnHV2Class("OnHV2",
+			Tango::DEV_VOID, Tango::DEV_VOID,
+			"",
+			"",
+			Tango::OPERATOR);
+	command_list.push_back(pOnHV2Cmd);
+
+
+
+	//	Command OffHV3
+	OffHV3Class	*pOffHV3Cmd =
+		new OffHV3Class("OffHV3",
+			Tango::DEV_VOID, Tango::DEV_VOID,
+			"",
+			"",
+			Tango::OPERATOR);
+	command_list.push_back(pOffHV3Cmd);
+
+	//	Command OffHV4
+	OffHV4Class	*pOffHV4Cmd =
+		new OffHV4Class("OffHV4",
+			Tango::DEV_VOID, Tango::DEV_VOID,
+			"",
+			"",
+			Tango::OPERATOR);
+	command_list.push_back(pOffHV4Cmd);
+
+	//	Command OnHV3
+	OnHV3Class	*pOnHV3Cmd =
+		new OnHV3Class("OnHV3",
+			Tango::DEV_VOID, Tango::DEV_VOID,
+			"",
+			"",
+			Tango::OPERATOR);
+	command_list.push_back(pOnHV3Cmd);
+
+	//	Command OnHV4
+	OnHV4Class	*pOnHV4Cmd =
+		new OnHV4Class("OnHV4",
+			Tango::DEV_VOID, Tango::DEV_VOID,
+			"",
+			"",
+			Tango::OPERATOR);
+	command_list.push_back(pOnHV4Cmd);
 
 	/*----- PROTECTED REGION ID(Agilent4uhvClass::command_factory_after) ENABLED START -----*/
 	
diff --git a/src/Agilent4uhvClass.h b/src/Agilent4uhvClass.h
index 66828866bc4f810da41231ff04c6d22e69a0b061..066a9d2718c680fafef0b521532276b0af7b5fb9 100644
--- a/src/Agilent4uhvClass.h
+++ b/src/Agilent4uhvClass.h
@@ -28,8 +28,8 @@
 // 
 // $Author: alessio $
 //
-// $Revision: 1.10 $
-// $Date: 2019-01-18 09:30:34 $
+// $Revision: 1.8 $
+// $Date: 2016-05-23 07:50:11 $
 //
 // $HeadURL:  $
 //
@@ -99,34 +99,6 @@ public:
 		{return (static_cast<Agilent4uhv *>(dev))->is_Temperature_allowed(ty);}
 };
 
-//	Attribute CRCErrors class definition
-class CRCErrorsAttrib: public Tango::Attr
-{
-public:
-	CRCErrorsAttrib():Attr("CRCErrors",
-			Tango::DEV_LONG, Tango::READ) {};
-	~CRCErrorsAttrib() {};
-	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
-		{(static_cast<Agilent4uhv *>(dev))->read_CRCErrors(att);}
-	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
-		{return (static_cast<Agilent4uhv *>(dev))->is_CRCErrors_allowed(ty);}
-};
-
-//	Attribute AutoStart class definition
-class AutoStartAttrib: public Tango::Attr
-{
-public:
-	AutoStartAttrib():Attr("AutoStart",
-			Tango::DEV_BOOLEAN, Tango::READ_WRITE) {};
-	~AutoStartAttrib() {};
-	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
-		{(static_cast<Agilent4uhv *>(dev))->read_AutoStart(att);}
-	virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att)
-		{(static_cast<Agilent4uhv *>(dev))->write_AutoStart(att);}
-	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
-		{return (static_cast<Agilent4uhv *>(dev))->is_AutoStart_allowed(ty);}
-};
-
 
 //=========================================
 //	Define classes for dynamic attributes
@@ -297,6 +269,21 @@ public:
 		{return (static_cast<Agilent4uhv *>(dev))->is_StatusX_allowed(ty);}
 };
 
+//	Attribute AutoStartX class definition
+class AutoStartXAttrib: public Tango::Attr
+{
+public:
+	AutoStartXAttrib(const string &att_name):Attr(att_name.c_str(), 
+			Tango::DEV_BOOLEAN, Tango::READ_WRITE) {};
+	~AutoStartXAttrib() {};
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+		{(static_cast<Agilent4uhv *>(dev))->read_AutoStartX(att);}
+	virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att)
+		{(static_cast<Agilent4uhv *>(dev))->write_AutoStartX(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+		{return (static_cast<Agilent4uhv *>(dev))->is_AutoStartX_allowed(ty);}
+};
+
 //	Attribute ProtectX class definition
 class ProtectXAttrib: public Tango::Attr
 {
@@ -340,6 +327,19 @@ public:
 		{return (static_cast<Agilent4uhv *>(dev))->is_StatusSetPointX_allowed(ty);}
 };
 
+//	Attribute InterlockStatusX class definition
+class InterlockStatusXAttrib: public Tango::Attr
+{
+public:
+	InterlockStatusXAttrib(const string &att_name):Attr(att_name.c_str(), 
+			Tango::DEV_BOOLEAN, Tango::READ) {};
+	~InterlockStatusXAttrib() {};
+	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
+		{(static_cast<Agilent4uhv *>(dev))->read_InterlockStatusX(att);}
+	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
+		{return (static_cast<Agilent4uhv *>(dev))->is_InterlockStatusX_allowed(ty);}
+};
+
 //	Attribute StatMaskX class definition
 class StatMaskXAttrib: public Tango::Attr
 {
@@ -355,13 +355,151 @@ public:
 
 
 //=========================================
-//	Define classes for dynamic commands
+//	Define classes for commands
 //=========================================
-//	Command OnHVX class definition
-class OnHVXClass : public Tango::Command
+//	Command OffHV1 class definition
+class OffHV1Class : public Tango::Command
+{
+public:
+	OffHV1Class(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out,
+				   const char        *in_desc,
+				   const char        *out_desc,
+				   Tango::DispLevel  level)
+	:Command(name,in,out,in_desc,out_desc, level)	{};
+
+	OffHV1Class(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~OffHV1Class() {};
+	
+	virtual CORBA::Any *execute (Tango::DeviceImpl *dev, const CORBA::Any &any);
+	virtual bool is_allowed (Tango::DeviceImpl *dev, const CORBA::Any &any)
+	{return (static_cast<Agilent4uhv *>(dev))->is_OffHV1_allowed(any);}
+};
+
+//	Command OffHV2 class definition
+class OffHV2Class : public Tango::Command
+{
+public:
+	OffHV2Class(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out,
+				   const char        *in_desc,
+				   const char        *out_desc,
+				   Tango::DispLevel  level)
+	:Command(name,in,out,in_desc,out_desc, level)	{};
+
+	OffHV2Class(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~OffHV2Class() {};
+	
+	virtual CORBA::Any *execute (Tango::DeviceImpl *dev, const CORBA::Any &any);
+	virtual bool is_allowed (Tango::DeviceImpl *dev, const CORBA::Any &any)
+	{return (static_cast<Agilent4uhv *>(dev))->is_OffHV2_allowed(any);}
+};
+
+//	Command OnHV1 class definition
+class OnHV1Class : public Tango::Command
+{
+public:
+	OnHV1Class(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out,
+				   const char        *in_desc,
+				   const char        *out_desc,
+				   Tango::DispLevel  level)
+	:Command(name,in,out,in_desc,out_desc, level)	{};
+
+	OnHV1Class(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~OnHV1Class() {};
+	
+	virtual CORBA::Any *execute (Tango::DeviceImpl *dev, const CORBA::Any &any);
+	virtual bool is_allowed (Tango::DeviceImpl *dev, const CORBA::Any &any)
+	{return (static_cast<Agilent4uhv *>(dev))->is_OnHV1_allowed(any);}
+};
+
+//	Command OnHV2 class definition
+class OnHV2Class : public Tango::Command
+{
+public:
+	OnHV2Class(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out,
+				   const char        *in_desc,
+				   const char        *out_desc,
+				   Tango::DispLevel  level)
+	:Command(name,in,out,in_desc,out_desc, level)	{};
+
+	OnHV2Class(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~OnHV2Class() {};
+	
+	virtual CORBA::Any *execute (Tango::DeviceImpl *dev, const CORBA::Any &any);
+	virtual bool is_allowed (Tango::DeviceImpl *dev, const CORBA::Any &any)
+	{return (static_cast<Agilent4uhv *>(dev))->is_OnHV2_allowed(any);}
+};
+
+//	Command OffHV3 class definition
+class OffHV3Class : public Tango::Command
+{
+public:
+	OffHV3Class(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out,
+				   const char        *in_desc,
+				   const char        *out_desc,
+				   Tango::DispLevel  level)
+	:Command(name,in,out,in_desc,out_desc, level)	{};
+
+	OffHV3Class(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~OffHV3Class() {};
+	
+	virtual CORBA::Any *execute (Tango::DeviceImpl *dev, const CORBA::Any &any);
+	virtual bool is_allowed (Tango::DeviceImpl *dev, const CORBA::Any &any)
+	{return (static_cast<Agilent4uhv *>(dev))->is_OffHV3_allowed(any);}
+};
+
+//	Command OffHV4 class definition
+class OffHV4Class : public Tango::Command
+{
+public:
+	OffHV4Class(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out,
+				   const char        *in_desc,
+				   const char        *out_desc,
+				   Tango::DispLevel  level)
+	:Command(name,in,out,in_desc,out_desc, level)	{};
+
+	OffHV4Class(const char   *name,
+	               Tango::CmdArgType in,
+				   Tango::CmdArgType out)
+	:Command(name,in,out)	{};
+	~OffHV4Class() {};
+	
+	virtual CORBA::Any *execute (Tango::DeviceImpl *dev, const CORBA::Any &any);
+	virtual bool is_allowed (Tango::DeviceImpl *dev, const CORBA::Any &any)
+	{return (static_cast<Agilent4uhv *>(dev))->is_OffHV4_allowed(any);}
+};
+
+//	Command OnHV3 class definition
+class OnHV3Class : public Tango::Command
 {
 public:
-	OnHVXClass(const char   *name,
+	OnHV3Class(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -369,22 +507,22 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	OnHVXClass(const char   *name,
+	OnHV3Class(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~OnHVXClass() {};
+	~OnHV3Class() {};
 	
 	virtual CORBA::Any *execute (Tango::DeviceImpl *dev, const CORBA::Any &any);
 	virtual bool is_allowed (Tango::DeviceImpl *dev, const CORBA::Any &any)
-	{return (static_cast<Agilent4uhv *>(dev))->is_OnHVX_allowed(any);}
+	{return (static_cast<Agilent4uhv *>(dev))->is_OnHV3_allowed(any);}
 };
 
-//	Command OffHVX class definition
-class OffHVXClass : public Tango::Command
+//	Command OnHV4 class definition
+class OnHV4Class : public Tango::Command
 {
 public:
-	OffHVXClass(const char   *name,
+	OnHV4Class(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -392,15 +530,15 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	OffHVXClass(const char   *name,
+	OnHV4Class(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~OffHVXClass() {};
+	~OnHV4Class() {};
 	
 	virtual CORBA::Any *execute (Tango::DeviceImpl *dev, const CORBA::Any &any);
 	virtual bool is_allowed (Tango::DeviceImpl *dev, const CORBA::Any &any)
-	{return (static_cast<Agilent4uhv *>(dev))->is_OffHVX_allowed(any);}
+	{return (static_cast<Agilent4uhv *>(dev))->is_OnHV4_allowed(any);}
 };
 
 
diff --git a/src/Agilent4uhvDynAttrUtils.cpp b/src/Agilent4uhvDynAttrUtils.cpp
index 000e7d61e74c2e22bcc80fff14650fae1c63d7d8..2f991201d1fc3fbaef8c55c827b4daa855510ca0 100644
--- a/src/Agilent4uhvDynAttrUtils.cpp
+++ b/src/Agilent4uhvDynAttrUtils.cpp
@@ -1,5 +1,5 @@
 /*----- PROTECTED REGION ID(Agilent4uhv::DynAttrUtils.cpp) ENABLED START -----*/
-static const char *RcsId = "$Id: Agilent4uhvDynAttrUtils.cpp,v 1.8 2019-01-18 09:30:34 alessio Exp $";
+static const char *RcsId = "$Id: Agilent4uhvDynAttrUtils.cpp,v 1.6 2014-10-15 13:23:58 alessio Exp $";
 //=============================================================================
 //
 // file :        Agilent4uhvDynAttrUtils.cpp
@@ -25,8 +25,8 @@ static const char *RcsId = "$Id: Agilent4uhvDynAttrUtils.cpp,v 1.8 2019-01-18 09
 // 
 // $Author: alessio $
 //
-// $Revision: 1.8 $
-// $Date: 2019-01-18 09:30:34 $
+// $Revision: 1.6 $
+// $Date: 2014-10-15 13:23:58 $
 //
 // $HeadURL:  $
 //
@@ -44,22 +44,24 @@ static const char *RcsId = "$Id: Agilent4uhvDynAttrUtils.cpp,v 1.8 2019-01-18 09
 //================================================================
 //  Attributes managed are:
 //================================================================
-//  HVX              |  Tango::DevState	Scalar
-//  DeviceNumberX    |  Tango::DevLong	Scalar
-//  PowerMaxX        |  Tango::DevUShort	Scalar
-//  VTargetX         |  Tango::DevUShort	Scalar
-//  IProtectX        |  Tango::DevUShort	Scalar
-//  SetPointX        |  Tango::DevDouble	Scalar
-//  TemperatureHVX   |  Tango::DevFloat	Scalar
-//  VoltageX         |  Tango::DevDouble	Scalar
-//  CurrentX         |  Tango::DevDouble	Scalar
-//  PressureX        |  Tango::DevDouble	Scalar
-//  StateX           |  Tango::DevState	Scalar
-//  StatusX          |  Tango::DevString	Scalar
-//  ProtectX         |  Tango::DevBoolean	Scalar
-//  FixedStepX       |  Tango::DevBoolean	Scalar
-//  StatusSetPointX  |  Tango::DevBoolean	Scalar
-//  StatMaskX        |  Tango::DevLong	Scalar
+//  HVX               |  Tango::DevState	Scalar
+//  DeviceNumberX     |  Tango::DevLong	Scalar
+//  PowerMaxX         |  Tango::DevUShort	Scalar
+//  VTargetX          |  Tango::DevUShort	Scalar
+//  IProtectX         |  Tango::DevUShort	Scalar
+//  SetPointX         |  Tango::DevDouble	Scalar
+//  TemperatureHVX    |  Tango::DevFloat	Scalar
+//  VoltageX          |  Tango::DevDouble	Scalar
+//  CurrentX          |  Tango::DevDouble	Scalar
+//  PressureX         |  Tango::DevDouble	Scalar
+//  StateX            |  Tango::DevState	Scalar
+//  StatusX           |  Tango::DevString	Scalar
+//  AutoStartX        |  Tango::DevBoolean	Scalar
+//  ProtectX          |  Tango::DevBoolean	Scalar
+//  FixedStepX        |  Tango::DevBoolean	Scalar
+//  StatusSetPointX   |  Tango::DevBoolean	Scalar
+//  InterlockStatusX  |  Tango::DevBoolean	Scalar
+//  StatMaskX         |  Tango::DevLong	Scalar
 //================================================================
 
 //	For compatibility reason, this file (Agilent4uhvDynAttrUtils)
@@ -70,8 +72,6 @@ static const char *RcsId = "$Id: Agilent4uhvDynAttrUtils.cpp,v 1.8 2019-01-18 09
 //
 //  Command name  |  Method name
 //================================================================
-//  OnHVX         |  on_hvx
-//  OffHVX        |  off_hvx
 //================================================================
 
 namespace Agilent4uhv_ns
@@ -213,7 +213,7 @@ void Agilent4uhv::add_PowerMaxX_dynamic_attribute(string attname)
 	//	display_unit	not set for PowerMaxX
 	//	format	not set for PowerMaxX
 	powermaxx_prop.set_max_value("80");
-	powermaxx_prop.set_min_value("10");
+	powermaxx_prop.set_min_value("20");
 	//	max_alarm	not set for PowerMaxX
 	//	min_alarm	not set for PowerMaxX
 	//	max_warning	not set for PowerMaxX
@@ -767,6 +767,63 @@ void Agilent4uhv::remove_StatusX_dynamic_attribute(string attname)
 	}
 }
 //--------------------------------------------------------
+/**
+ *	Add a AutoStartX dynamic attribute.
+ *
+ *  parameter attname: attribute name to be cretated and added.
+ */
+//--------------------------------------------------------
+void Agilent4uhv::add_AutoStartX_dynamic_attribute(string attname)
+{
+	//	Attribute : AutoStartX
+	AutoStartXAttrib	*autostartx = new AutoStartXAttrib(attname);
+	Tango::UserDefaultAttrProp	autostartx_prop;
+	//	description	not set for AutoStartX
+	//	label	not set for AutoStartX
+	//	unit	not set for AutoStartX
+	//	standard_unit	not set for AutoStartX
+	//	display_unit	not set for AutoStartX
+	//	format	not set for AutoStartX
+	//	max_value	not set for AutoStartX
+	//	min_value	not set for AutoStartX
+	//	max_alarm	not set for AutoStartX
+	//	min_alarm	not set for AutoStartX
+	//	max_warning	not set for AutoStartX
+	//	min_warning	not set for AutoStartX
+	//	delta_t	not set for AutoStartX
+	//	delta_val	not set for AutoStartX
+	
+	/*----- PROTECTED REGION ID(Agilent4uhv::att_AutoStartX_dynamic_attribute) ENABLED START -----*/
+	
+	
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::att_AutoStartX_dynamic_attribute
+	autostartx->set_default_properties(autostartx_prop);
+	//	Not Polled
+	autostartx->set_disp_level(Tango::OPERATOR);
+	//	Not Memorized
+	AutoStartX_data.insert(make_pair(attname, false));
+	add_attribute(autostartx);
+}
+//--------------------------------------------------------
+/**
+ *	remove a AutoStartX dynamic attribute.
+ *
+ *  parameter attname: attribute name to be removed.
+ */
+//--------------------------------------------------------
+void Agilent4uhv::remove_AutoStartX_dynamic_attribute(string attname)
+{
+	remove_attribute(attname, true);
+	map<string,Tango::DevBoolean>::iterator ite;
+    if ((ite=AutoStartX_data.find(attname))!=AutoStartX_data.end())
+    {
+    	/*----- PROTECTED REGION ID(Agilent4uhv::remove_AutoStartX_dynamic_attribute) ENABLED START -----*/
+    	
+    	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::remove_AutoStartX_dynamic_attribute
+		AutoStartX_data.erase(ite);
+	}
+}
+//--------------------------------------------------------
 /**
  *	Add a ProtectX dynamic attribute.
  *
@@ -938,6 +995,63 @@ void Agilent4uhv::remove_StatusSetPointX_dynamic_attribute(string attname)
 	}
 }
 //--------------------------------------------------------
+/**
+ *	Add a InterlockStatusX dynamic attribute.
+ *
+ *  parameter attname: attribute name to be cretated and added.
+ */
+//--------------------------------------------------------
+void Agilent4uhv::add_InterlockStatusX_dynamic_attribute(string attname)
+{
+	//	Attribute : InterlockStatusX
+	InterlockStatusXAttrib	*interlockstatusx = new InterlockStatusXAttrib(attname);
+	Tango::UserDefaultAttrProp	interlockstatusx_prop;
+	//	description	not set for InterlockStatusX
+	//	label	not set for InterlockStatusX
+	//	unit	not set for InterlockStatusX
+	//	standard_unit	not set for InterlockStatusX
+	//	display_unit	not set for InterlockStatusX
+	//	format	not set for InterlockStatusX
+	//	max_value	not set for InterlockStatusX
+	//	min_value	not set for InterlockStatusX
+	//	max_alarm	not set for InterlockStatusX
+	//	min_alarm	not set for InterlockStatusX
+	//	max_warning	not set for InterlockStatusX
+	//	min_warning	not set for InterlockStatusX
+	//	delta_t	not set for InterlockStatusX
+	//	delta_val	not set for InterlockStatusX
+	
+	/*----- PROTECTED REGION ID(Agilent4uhv::att_InterlockStatusX_dynamic_attribute) ENABLED START -----*/
+	
+	
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::att_InterlockStatusX_dynamic_attribute
+	interlockstatusx->set_default_properties(interlockstatusx_prop);
+	//	Not Polled
+	interlockstatusx->set_disp_level(Tango::OPERATOR);
+	//	Not Memorized
+	InterlockStatusX_data.insert(make_pair(attname, false));
+	add_attribute(interlockstatusx);
+}
+//--------------------------------------------------------
+/**
+ *	remove a InterlockStatusX dynamic attribute.
+ *
+ *  parameter attname: attribute name to be removed.
+ */
+//--------------------------------------------------------
+void Agilent4uhv::remove_InterlockStatusX_dynamic_attribute(string attname)
+{
+	remove_attribute(attname, true);
+	map<string,Tango::DevBoolean>::iterator ite;
+    if ((ite=InterlockStatusX_data.find(attname))!=InterlockStatusX_data.end())
+    {
+    	/*----- PROTECTED REGION ID(Agilent4uhv::remove_InterlockStatusX_dynamic_attribute) ENABLED START -----*/
+    	
+    	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::remove_InterlockStatusX_dynamic_attribute
+		InterlockStatusX_data.erase(ite);
+	}
+}
+//--------------------------------------------------------
 /**
  *	Add a StatMaskX dynamic attribute.
  *
@@ -1252,6 +1366,27 @@ Tango::DevString *Agilent4uhv::get_StatusX_data_ptr(string &name)
 	return  &(ite->second);
 }
 //--------------------------------------------------------
+/**
+ *	Return a pointer on AutoStartX data.
+ *
+ *  parameter attname: the specified attribute name.
+ */
+//--------------------------------------------------------
+Tango::DevBoolean *Agilent4uhv::get_AutoStartX_data_ptr(string &name)
+{
+	map<string,Tango::DevBoolean>::iterator ite;
+    if ((ite=AutoStartX_data.find(name))==AutoStartX_data.end())
+    {
+		TangoSys_OMemStream	tms;
+		tms << "Dynamic attribute " << name << " has not been created";
+		Tango::Except::throw_exception(
+					(const char *)"ATTRIBUTE_NOT_FOUND",
+					tms.str().c_str(),
+					(const char *)"Agilent4uhv::get_AutoStartX_data_ptr()");
+    }
+	return  &(ite->second);
+}
+//--------------------------------------------------------
 /**
  *	Return a pointer on ProtectX data.
  *
@@ -1315,6 +1450,27 @@ Tango::DevBoolean *Agilent4uhv::get_StatusSetPointX_data_ptr(string &name)
 	return  &(ite->second);
 }
 //--------------------------------------------------------
+/**
+ *	Return a pointer on InterlockStatusX data.
+ *
+ *  parameter attname: the specified attribute name.
+ */
+//--------------------------------------------------------
+Tango::DevBoolean *Agilent4uhv::get_InterlockStatusX_data_ptr(string &name)
+{
+	map<string,Tango::DevBoolean>::iterator ite;
+    if ((ite=InterlockStatusX_data.find(name))==InterlockStatusX_data.end())
+    {
+		TangoSys_OMemStream	tms;
+		tms << "Dynamic attribute " << name << " has not been created";
+		Tango::Except::throw_exception(
+					(const char *)"ATTRIBUTE_NOT_FOUND",
+					tms.str().c_str(),
+					(const char *)"Agilent4uhv::get_InterlockStatusX_data_ptr()");
+    }
+	return  &(ite->second);
+}
+//--------------------------------------------------------
 /**
  *	Return a pointer on StatMaskX data.
  *
@@ -1341,63 +1497,5 @@ Tango::DevLong *Agilent4uhv::get_StatMaskX_data_ptr(string &name)
 //	Add/Remove dynamic command methods
 //=============================================================
 
-//--------------------------------------------------------
-/**
- *	Add a OnHVX dynamic command.
- *
- *  parameter cmdname: command name to be cretated and added.
- *  parameter device:  Set this flag to true if the command must be added for only this device.
- */
-//--------------------------------------------------------
-void Agilent4uhv::add_OnHVX_dynamic_command(string cmdname, bool device)
-{
-	OnHVXClass	*pOnHVXCmd =
-		new OnHVXClass(cmdname.c_str(),
-			Tango::DEV_VOID, Tango::DEV_VOID,
-			"",
-			"",
-			Tango::OPERATOR);
-	add_command(pOnHVXCmd, device);
-}
-//--------------------------------------------------------
-/**
- *	remove a OnHVX dynamic command.
- *
- *  parameter cmdname: command name to be removed.
- */
-//--------------------------------------------------------
-void Agilent4uhv::remove_OnHVX_dynamic_command(string cmdname)
-{
-	remove_command(cmdname, true);
-}
-//--------------------------------------------------------
-/**
- *	Add a OffHVX dynamic command.
- *
- *  parameter cmdname: command name to be cretated and added.
- *  parameter device:  Set this flag to true if the command must be added for only this device.
- */
-//--------------------------------------------------------
-void Agilent4uhv::add_OffHVX_dynamic_command(string cmdname, bool device)
-{
-	OffHVXClass	*pOffHVXCmd =
-		new OffHVXClass(cmdname.c_str(),
-			Tango::DEV_VOID, Tango::DEV_VOID,
-			"",
-			"",
-			Tango::OPERATOR);
-	add_command(pOffHVXCmd, device);
-}
-//--------------------------------------------------------
-/**
- *	remove a OffHVX dynamic command.
- *
- *  parameter cmdname: command name to be removed.
- */
-//--------------------------------------------------------
-void Agilent4uhv::remove_OffHVX_dynamic_command(string cmdname)
-{
-	remove_command(cmdname, true);
-}
 
 } //	namespace
diff --git a/src/Agilent4uhvStateMachine.cpp b/src/Agilent4uhvStateMachine.cpp
index df7ebb03df3f33e2f3f5e3737a78bfc0f358143e..23e2e390500a8b9f4e94f249ef5bc9e0116dee9d 100644
--- a/src/Agilent4uhvStateMachine.cpp
+++ b/src/Agilent4uhvStateMachine.cpp
@@ -1,5 +1,5 @@
 /*----- PROTECTED REGION ID(Agilent4uhvStateMachine.cpp) ENABLED START -----*/
-static const char *RcsId = "$Id: Agilent4uhvStateMachine.cpp,v 1.11 2019-01-18 09:30:34 alessio Exp $";
+static const char *RcsId = "$Id: Agilent4uhvStateMachine.cpp,v 1.9 2018-05-10 08:04:51 alessio Exp $";
 //=============================================================================
 //
 // file :        Agilent4uhvStateMachine.cpp
@@ -25,8 +25,8 @@ static const char *RcsId = "$Id: Agilent4uhvStateMachine.cpp,v 1.11 2019-01-18 0
 // 
 // $Author: alessio $
 //
-// $Revision: 1.11 $
-// $Date: 2019-01-18 09:30:34 $
+// $Revision: 1.9 $
+// $Date: 2018-05-10 08:04:51 $
 //
 // $HeadURL:  $
 //
@@ -44,8 +44,9 @@ static const char *RcsId = "$Id: Agilent4uhvStateMachine.cpp,v 1.11 2019-01-18 0
 //================================================================
 //  ON       |  
 //  ALARM    |  
-//  FAULT    |  
 //  UNKNOWN  |  
+//  FAULT    |  
+//  INIT     |  
 
 
 namespace Agilent4uhv_ns
@@ -67,7 +68,9 @@ bool Agilent4uhv::is_Model_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type==Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for READ 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::ModelStateAllowed_READ) ENABLED START -----*/
 	
@@ -92,7 +95,9 @@ bool Agilent4uhv::is_SerialNumber_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type==Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for READ 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::SerialNumberStateAllowed_READ) ENABLED START -----*/
 	
@@ -117,7 +122,9 @@ bool Agilent4uhv::is_Temperature_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type==Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for READ 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::TemperatureStateAllowed_READ) ENABLED START -----*/
 	
@@ -129,70 +136,6 @@ bool Agilent4uhv::is_Temperature_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	return true;
 }
 
-//--------------------------------------------------------
-/**
- *	Method      : Agilent4uhv::is_CRCErrors_allowed()
- *	Description : Execution allowed for CRCErrors attribute
- */
-//--------------------------------------------------------
-bool Agilent4uhv::is_CRCErrors_allowed(TANGO_UNUSED(Tango::AttReqType type))
-{
-
-	//	Check access type.
-	if ( type==Tango::READ_REQ )
-	{
-		//	Compare device state with not allowed states for READ 
-		if (get_state()==Tango::UNKNOWN)
-		{
-		/*----- PROTECTED REGION ID(Agilent4uhv::CRCErrorsStateAllowed_READ) ENABLED START -----*/
-	
-	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::CRCErrorsStateAllowed_READ
-			return false;
-		}
-		return true;
-	}
-	return true;
-}
-
-//--------------------------------------------------------
-/**
- *	Method      : Agilent4uhv::is_AutoStart_allowed()
- *	Description : Execution allowed for AutoStart attribute
- */
-//--------------------------------------------------------
-bool Agilent4uhv::is_AutoStart_allowed(TANGO_UNUSED(Tango::AttReqType type))
-{
-	//	Check access type.
-	if ( type!=Tango::READ_REQ )
-	{
-		//	Compare device state with not allowed states for WRITE 
-		if (get_state()==Tango::UNKNOWN)
-		{
-		/*----- PROTECTED REGION ID(Agilent4uhv::AutoStartStateAllowed_WRITE) ENABLED START -----*/
-	
-	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::AutoStartStateAllowed_WRITE
-			return false;
-		}
-		return true;
-	}
-	else
-
-	//	Check access type.
-	if ( type==Tango::READ_REQ )
-	{
-		//	Compare device state with not allowed states for READ 
-		if (get_state()==Tango::UNKNOWN)
-		{
-		/*----- PROTECTED REGION ID(Agilent4uhv::AutoStartStateAllowed_READ) ENABLED START -----*/
-	
-	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::AutoStartStateAllowed_READ
-			return false;
-		}
-		return true;
-	}
-	return true;
-}
-
 //--------------------------------------------------------
 /**
  *	Method      : Agilent4uhv::is_HVX_allowed()
@@ -206,7 +149,9 @@ bool Agilent4uhv::is_HVX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type==Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for READ 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::HVXStateAllowed_READ) ENABLED START -----*/
 	
@@ -230,7 +175,9 @@ bool Agilent4uhv::is_DeviceNumberX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type!=Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for WRITE 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::DeviceNumberXStateAllowed_WRITE) ENABLED START -----*/
 	
@@ -245,7 +192,9 @@ bool Agilent4uhv::is_DeviceNumberX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type==Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for READ 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::DeviceNumberXStateAllowed_READ) ENABLED START -----*/
 	
@@ -269,7 +218,9 @@ bool Agilent4uhv::is_PowerMaxX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type!=Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for WRITE 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::PowerMaxXStateAllowed_WRITE) ENABLED START -----*/
 	
@@ -284,7 +235,9 @@ bool Agilent4uhv::is_PowerMaxX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type==Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for READ 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::PowerMaxXStateAllowed_READ) ENABLED START -----*/
 	
@@ -308,7 +261,9 @@ bool Agilent4uhv::is_VTargetX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type!=Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for WRITE 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::VTargetXStateAllowed_WRITE) ENABLED START -----*/
 	
@@ -323,7 +278,9 @@ bool Agilent4uhv::is_VTargetX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type==Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for READ 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::VTargetXStateAllowed_READ) ENABLED START -----*/
 	
@@ -347,7 +304,9 @@ bool Agilent4uhv::is_IProtectX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type!=Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for WRITE 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::IProtectXStateAllowed_WRITE) ENABLED START -----*/
 	
@@ -362,7 +321,9 @@ bool Agilent4uhv::is_IProtectX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type==Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for READ 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::IProtectXStateAllowed_READ) ENABLED START -----*/
 	
@@ -386,7 +347,9 @@ bool Agilent4uhv::is_SetPointX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type!=Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for WRITE 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::SetPointXStateAllowed_WRITE) ENABLED START -----*/
 	
@@ -401,7 +364,9 @@ bool Agilent4uhv::is_SetPointX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type==Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for READ 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::SetPointXStateAllowed_READ) ENABLED START -----*/
 	
@@ -426,7 +391,9 @@ bool Agilent4uhv::is_TemperatureHVX_allowed(TANGO_UNUSED(Tango::AttReqType type)
 	if ( type==Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for READ 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::TemperatureHVXStateAllowed_READ) ENABLED START -----*/
 	
@@ -451,7 +418,9 @@ bool Agilent4uhv::is_VoltageX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type==Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for READ 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::VoltageXStateAllowed_READ) ENABLED START -----*/
 	
@@ -476,7 +445,9 @@ bool Agilent4uhv::is_CurrentX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type==Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for READ 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::CurrentXStateAllowed_READ) ENABLED START -----*/
 	
@@ -501,7 +472,9 @@ bool Agilent4uhv::is_PressureX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type==Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for READ 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::PressureXStateAllowed_READ) ENABLED START -----*/
 	
@@ -526,7 +499,9 @@ bool Agilent4uhv::is_StateX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type==Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for READ 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::StateXStateAllowed_READ) ENABLED START -----*/
 	
@@ -551,7 +526,9 @@ bool Agilent4uhv::is_StatusX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type==Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for READ 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::StatusXStateAllowed_READ) ENABLED START -----*/
 	
@@ -563,6 +540,49 @@ bool Agilent4uhv::is_StatusX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	return true;
 }
 
+//--------------------------------------------------------
+/**
+ *	Method      : Agilent4uhv::is_AutoStartX_allowed()
+ *	Description : Execution allowed for AutoStartX attribute
+ */
+//--------------------------------------------------------
+bool Agilent4uhv::is_AutoStartX_allowed(TANGO_UNUSED(Tango::AttReqType type))
+{
+	//	Check access type.
+	if ( type!=Tango::READ_REQ )
+	{
+		//	Compare device state with not allowed states for WRITE 
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
+		{
+		/*----- PROTECTED REGION ID(Agilent4uhv::AutoStartXStateAllowed_WRITE) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::AutoStartXStateAllowed_WRITE
+			return false;
+		}
+		return true;
+	}
+	else
+
+	//	Check access type.
+	if ( type==Tango::READ_REQ )
+	{
+		//	Compare device state with not allowed states for READ 
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
+		{
+		/*----- PROTECTED REGION ID(Agilent4uhv::AutoStartXStateAllowed_READ) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::AutoStartXStateAllowed_READ
+			return false;
+		}
+		return true;
+	}
+	return true;
+}
+
 //--------------------------------------------------------
 /**
  *	Method      : Agilent4uhv::is_ProtectX_allowed()
@@ -575,7 +595,9 @@ bool Agilent4uhv::is_ProtectX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type!=Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for WRITE 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::ProtectXStateAllowed_WRITE) ENABLED START -----*/
 	
@@ -590,7 +612,9 @@ bool Agilent4uhv::is_ProtectX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type==Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for READ 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::ProtectXStateAllowed_READ) ENABLED START -----*/
 	
@@ -614,7 +638,9 @@ bool Agilent4uhv::is_FixedStepX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type!=Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for WRITE 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::FixedStepXStateAllowed_WRITE) ENABLED START -----*/
 	
@@ -629,7 +655,9 @@ bool Agilent4uhv::is_FixedStepX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type==Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for READ 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::FixedStepXStateAllowed_READ) ENABLED START -----*/
 	
@@ -654,7 +682,9 @@ bool Agilent4uhv::is_StatusSetPointX_allowed(TANGO_UNUSED(Tango::AttReqType type
 	if ( type==Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for READ 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::StatusSetPointXStateAllowed_READ) ENABLED START -----*/
 	
@@ -666,6 +696,33 @@ bool Agilent4uhv::is_StatusSetPointX_allowed(TANGO_UNUSED(Tango::AttReqType type
 	return true;
 }
 
+//--------------------------------------------------------
+/**
+ *	Method      : Agilent4uhv::is_InterlockStatusX_allowed()
+ *	Description : Execution allowed for InterlockStatusX attribute
+ */
+//--------------------------------------------------------
+bool Agilent4uhv::is_InterlockStatusX_allowed(TANGO_UNUSED(Tango::AttReqType type))
+{
+
+	//	Check access type.
+	if ( type==Tango::READ_REQ )
+	{
+		//	Compare device state with not allowed states for READ 
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
+		{
+		/*----- PROTECTED REGION ID(Agilent4uhv::InterlockStatusXStateAllowed_READ) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::InterlockStatusXStateAllowed_READ
+			return false;
+		}
+		return true;
+	}
+	return true;
+}
+
 //--------------------------------------------------------
 /**
  *	Method      : Agilent4uhv::is_StatMaskX_allowed()
@@ -679,7 +736,9 @@ bool Agilent4uhv::is_StatMaskX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	if ( type==Tango::READ_REQ )
 	{
 		//	Compare device state with not allowed states for READ 
-		if (get_state()==Tango::UNKNOWN)
+		if (get_state()==Tango::UNKNOWN ||
+			get_state()==Tango::FAULT ||
+			get_state()==Tango::INIT)
 		{
 		/*----- PROTECTED REGION ID(Agilent4uhv::StatMaskXStateAllowed_READ) ENABLED START -----*/
 	
@@ -698,18 +757,146 @@ bool Agilent4uhv::is_StatMaskX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 
 //--------------------------------------------------------
 /**
- *	Method      : Agilent4uhv::is_OnHVX_allowed()
- *	Description : Execution allowed for OnHVX attribute
+ *	Method      : Agilent4uhv::is_OffHV1_allowed()
+ *	Description : Execution allowed for OffHV1 attribute
+ */
+//--------------------------------------------------------
+bool Agilent4uhv::is_OffHV1_allowed(TANGO_UNUSED(const CORBA::Any &any))
+{
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::UNKNOWN ||
+		get_state()==Tango::FAULT ||
+		get_state()==Tango::INIT)
+	{
+	/*----- PROTECTED REGION ID(Agilent4uhv::OffHV1StateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::OffHV1StateAllowed
+		return false;
+	}
+	return true;
+}
+
+//--------------------------------------------------------
+/**
+ *	Method      : Agilent4uhv::is_OffHV2_allowed()
+ *	Description : Execution allowed for OffHV2 attribute
+ */
+//--------------------------------------------------------
+bool Agilent4uhv::is_OffHV2_allowed(TANGO_UNUSED(const CORBA::Any &any))
+{
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::UNKNOWN ||
+		get_state()==Tango::FAULT ||
+		get_state()==Tango::INIT)
+	{
+	/*----- PROTECTED REGION ID(Agilent4uhv::OffHV2StateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::OffHV2StateAllowed
+		return false;
+	}
+	return true;
+}
+
+//--------------------------------------------------------
+/**
+ *	Method      : Agilent4uhv::is_OnHV1_allowed()
+ *	Description : Execution allowed for OnHV1 attribute
+ */
+//--------------------------------------------------------
+bool Agilent4uhv::is_OnHV1_allowed(TANGO_UNUSED(const CORBA::Any &any))
+{
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::UNKNOWN ||
+		get_state()==Tango::FAULT ||
+		get_state()==Tango::INIT)
+	{
+	/*----- PROTECTED REGION ID(Agilent4uhv::OnHV1StateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::OnHV1StateAllowed
+		return false;
+	}
+	return true;
+}
+
+//--------------------------------------------------------
+/**
+ *	Method      : Agilent4uhv::is_OnHV2_allowed()
+ *	Description : Execution allowed for OnHV2 attribute
+ */
+//--------------------------------------------------------
+bool Agilent4uhv::is_OnHV2_allowed(TANGO_UNUSED(const CORBA::Any &any))
+{
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::UNKNOWN ||
+		get_state()==Tango::FAULT ||
+		get_state()==Tango::INIT)
+	{
+	/*----- PROTECTED REGION ID(Agilent4uhv::OnHV2StateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::OnHV2StateAllowed
+		return false;
+	}
+	return true;
+}
+
+//--------------------------------------------------------
+/**
+ *	Method      : Agilent4uhv::is_OffHV3_allowed()
+ *	Description : Execution allowed for OffHV3 attribute
+ */
+//--------------------------------------------------------
+bool Agilent4uhv::is_OffHV3_allowed(TANGO_UNUSED(const CORBA::Any &any))
+{
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::UNKNOWN ||
+		get_state()==Tango::FAULT ||
+		get_state()==Tango::INIT)
+	{
+	/*----- PROTECTED REGION ID(Agilent4uhv::OffHV3StateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::OffHV3StateAllowed
+		return false;
+	}
+	return true;
+}
+
+//--------------------------------------------------------
+/**
+ *	Method      : Agilent4uhv::is_OffHV4_allowed()
+ *	Description : Execution allowed for OffHV4 attribute
+ */
+//--------------------------------------------------------
+bool Agilent4uhv::is_OffHV4_allowed(TANGO_UNUSED(const CORBA::Any &any))
+{
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::UNKNOWN ||
+		get_state()==Tango::FAULT ||
+		get_state()==Tango::INIT)
+	{
+	/*----- PROTECTED REGION ID(Agilent4uhv::OffHV4StateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::OffHV4StateAllowed
+		return false;
+	}
+	return true;
+}
+
+//--------------------------------------------------------
+/**
+ *	Method      : Agilent4uhv::is_OnHV3_allowed()
+ *	Description : Execution allowed for OnHV3 attribute
  */
 //--------------------------------------------------------
-bool Agilent4uhv::is_OnHVX_allowed(TANGO_UNUSED(const CORBA::Any &any))
+bool Agilent4uhv::is_OnHV3_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
 	//	Compare device state with not allowed states.
-	if (get_state()==Tango::UNKNOWN)
+	if (get_state()==Tango::UNKNOWN ||
+		get_state()==Tango::FAULT ||
+		get_state()==Tango::INIT)
 	{
-	/*----- PROTECTED REGION ID(Agilent4uhv::OnHVXStateAllowed) ENABLED START -----*/
+	/*----- PROTECTED REGION ID(Agilent4uhv::OnHV3StateAllowed) ENABLED START -----*/
 	
-	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::OnHVXStateAllowed
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::OnHV3StateAllowed
 		return false;
 	}
 	return true;
@@ -717,18 +904,20 @@ bool Agilent4uhv::is_OnHVX_allowed(TANGO_UNUSED(const CORBA::Any &any))
 
 //--------------------------------------------------------
 /**
- *	Method      : Agilent4uhv::is_OffHVX_allowed()
- *	Description : Execution allowed for OffHVX attribute
+ *	Method      : Agilent4uhv::is_OnHV4_allowed()
+ *	Description : Execution allowed for OnHV4 attribute
  */
 //--------------------------------------------------------
-bool Agilent4uhv::is_OffHVX_allowed(TANGO_UNUSED(const CORBA::Any &any))
+bool Agilent4uhv::is_OnHV4_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
 	//	Compare device state with not allowed states.
-	if (get_state()==Tango::UNKNOWN)
+	if (get_state()==Tango::UNKNOWN ||
+		get_state()==Tango::FAULT ||
+		get_state()==Tango::INIT)
 	{
-	/*----- PROTECTED REGION ID(Agilent4uhv::OffHVXStateAllowed) ENABLED START -----*/
+	/*----- PROTECTED REGION ID(Agilent4uhv::OnHV4StateAllowed) ENABLED START -----*/
 	
-	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::OffHVXStateAllowed
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::OnHV4StateAllowed
 		return false;
 	}
 	return true;
diff --git a/src/MultiClassesFactory.cpp b/src/MultiClassesFactory.cpp
index 30e71d6473b0fc794f4b53bb4c69614c6c7cbd85..d0151da165182ee76e3ec74fbf7ea2e52a2004f8 100644
--- a/src/MultiClassesFactory.cpp
+++ b/src/MultiClassesFactory.cpp
@@ -1,4 +1,4 @@
-static const char *RcsId = "$Id: MultiClassesFactory.cpp,v 1.7 2019-01-18 09:31:15 alessio Exp $";
+static const char *RcsId = "$Id: MultiClassesFactory.cpp,v 1.4 2018-05-10 08:04:51 alessio Exp $";
 //=============================================================================
 //
 // file :        MultiClassessFactory.cpp
@@ -27,8 +27,8 @@ static const char *RcsId = "$Id: MultiClassesFactory.cpp,v 1.7 2019-01-18 09:31:
 // 
 // $Author: alessio $
 //
-// $Revision: 1.7 $
-// $Date: 2019-01-18 09:31:15 $
+// $Revision: 1.4 $
+// $Date: 2018-05-10 08:04:51 $
 //
 // $HeadURL:  $
 //