diff --git a/Makefile b/Makefile
index c3f516f0f71bcfa66b4cba80f30301e5a9dc49ea..c17701d9283e64513271a3cab585501c42a7782a 100644
--- a/Makefile
+++ b/Makefile
@@ -7,4 +7,4 @@ LDFLAGS =
 include ../makefiles/Make-9.3.3.in
 
 test: bin/${NAME_SRV}
-	LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(SDKTARGETSYSROOT)/usr/lib $(LOADER) bin/${NAME_SRV} test -v4
+	LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(SDKTARGETSYSROOT)/usr/lib $(SDKTARGETSYSROOT)/usr/lib/ld-linux-x86-64.so.2 bin/${NAME_SRV} test -v4
diff --git a/deps/ionpump b/deps/ionpump
index 19a15caa600f79cc66a1a75369252734a3025e52..2f9df3b698a4524c252c6c09232c8bde79daa606 160000
--- a/deps/ionpump
+++ b/deps/ionpump
@@ -1 +1 @@
-Subproject commit 19a15caa600f79cc66a1a75369252734a3025e52
+Subproject commit 2f9df3b698a4524c252c6c09232c8bde79daa606
diff --git a/deps/serial2 b/deps/serial2
index bbebd3e523a530a607ab8afa109613c95d1ff596..67275450e778cfafc02dee7744db90fe6540b86e 160000
--- a/deps/serial2
+++ b/deps/serial2
@@ -1 +1 @@
-Subproject commit bbebd3e523a530a607ab8afa109613c95d1ff596
+Subproject commit 67275450e778cfafc02dee7744db90fe6540b86e
diff --git a/deps/serial2client b/deps/serial2client
index 10769ee9428a5b12a8015ff804efac6ad4352b85..accf00d9014fb425b32ed46a59f4358dc3eaa36e 160000
--- a/deps/serial2client
+++ b/deps/serial2client
@@ -1 +1 @@
-Subproject commit 10769ee9428a5b12a8015ff804efac6ad4352b85
+Subproject commit accf00d9014fb425b32ed46a59f4358dc3eaa36e
diff --git a/deps/socket2 b/deps/socket2
index 5fa2980f5656473d6329be8b05212252bc00b833..ed75bef6f9cb2d4761916ec41873b96cf2af95d3 160000
--- a/deps/socket2
+++ b/deps/socket2
@@ -1 +1 @@
-Subproject commit 5fa2980f5656473d6329be8b05212252bc00b833
+Subproject commit ed75bef6f9cb2d4761916ec41873b96cf2af95d3
diff --git a/docs/4UHV Controller User Manual.pdf b/docs/4UHV Controller User Manual.pdf
deleted file mode 100644
index 4eb3cb1dd887dd73370eee6dd3a3c75f43eddf2e..0000000000000000000000000000000000000000
Binary files a/docs/4UHV Controller User Manual.pdf and /dev/null differ
diff --git a/docs/4UHV.pdf b/docs/4UHV.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..e41afc4586ac3c28c08761fc595a8b36664e23dd
Binary files /dev/null and b/docs/4UHV.pdf differ
diff --git a/docs/IPCMini Ion Pump Controller User Manual.pdf b/docs/IPCMini Ion Pump Controller User Manual.pdf
deleted file mode 100644
index 1ad750ec38c27d6918b9d6560218d66a6e81f9ce..0000000000000000000000000000000000000000
Binary files a/docs/IPCMini Ion Pump Controller User Manual.pdf and /dev/null differ
diff --git a/src/Agilent4uhv.cpp b/src/Agilent4uhv.cpp
index 006650f1627f6ef295ff74e962fb7f22767d73e6..7f39cb193f529a6c34d8b610b9e6f89537e80547 100644
--- a/src/Agilent4uhv.cpp
+++ b/src/Agilent4uhv.cpp
@@ -1,5 +1,4 @@
 /*----- PROTECTED REGION ID(Agilent4uhv.cpp) ENABLED START -----*/
-static const char *RcsId = "$Id: Agilent4uhv.cpp,v 1.18 2018-05-10 08:04:51 alessio Exp $";
 //=============================================================================
 //
 // file :        Agilent4uhv.cpp
@@ -39,67 +38,21 @@ static const char *RcsId = "$Id: Agilent4uhv.cpp,v 1.18 2018-05-10 08:04:51 ales
 //        (Program Obviously used to Generate tango Object)
 //=============================================================================
 
-
 #include <Agilent4uhv.h>
 #include <Agilent4uhvClass.h>
-#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
+
+#define STX 0x02
+#define ETX 0x03
+#define ADDR 0x80
+#define WIN_LENGTH 3
+#define CRC_LENGTH 2
+#define ERROR_MESSAGE_SIZE 6
+#define HEADER_SIZE 6
+#define FOOTER_SIZE 3
+#define NUMERIC_PAYLOAD_SIZE 6
+#define ALPHANUMERIC_PAYLOAD_SIZE 10
+
+#define MAX_DEVSTRING_LENGTH 255
 
 /*----- PROTECTED REGION END -----*/	//	Agilent4uhv.cpp
 
@@ -114,24 +67,16 @@ static const char *RcsId = "$Id: Agilent4uhv.cpp,v 1.18 2018-05-10 08:04:51 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
 //================================================================
 
 //================================================================
 //  Attributes managed are:
 //================================================================
-//  Model         |  Tango::DevString	Scalar
-//  SerialNumber  |  Tango::DevString	Scalar
-//  Temperature   |  Tango::DevFloat	Scalar
+//  Model           |  Tango::DevString	Scalar
+//  SerialNumber    |  Tango::DevString	Scalar
+//  TemperatureFan  |  Tango::DevDouble	Scalar
 //================================================================
 
 namespace Agilent4uhv_ns
@@ -139,6 +84,54 @@ namespace Agilent4uhv_ns
 /*----- PROTECTED REGION ID(Agilent4uhv::namespace_starting) ENABLED START -----*/
 
 //	static initializations
+template<typename F, typename T> void convert(const F &data, T &result)
+{
+	stringstream ss;
+	ss << data;
+	ss >> result;
+
+	if (ss.fail()) {
+		stringstream err_mesg;
+		err_mesg << "Conversion fail of " << data;
+		Tango::Except::throw_exception( "",
+				err_mesg.str(),
+				"convert()");
+	}
+}
+
+template<typename F, typename T> void convert(const F &data, double &result)
+{
+	stringstream ss;
+	ss << data;
+
+	if (ss.str() == "Inf")
+		result = INFINITY;
+	else
+		ss >> result;
+
+	if (ss.fail()) {
+		stringstream err_mesg;
+		err_mesg << "Conversion fail of " << data;
+		Tango::Except::throw_exception( "",
+				err_mesg.str(),
+				"convert()");
+	}
+}
+
+template<typename F> void convert(const F &data, string &result)
+{
+	stringstream ss;
+	ss << fixed;
+	ss << data;
+	result = ss.str();
+	if (ss.fail()) {
+		stringstream err_mesg;
+		err_mesg << "Conversion fail of " << data;
+		Tango::Except::throw_exception( "",
+				err_mesg.str(),
+				"convert()");
+	}
+}
 
 /*----- PROTECTED REGION END -----*/	//	Agilent4uhv::namespace_starting
 
@@ -192,8 +185,17 @@ void Agilent4uhv::delete_device()
 		worker->stop();
 		worker->join(NULL);
 	}
-	
+
+	//	Delete device allocated objects
+	if (attr_Model_read[0])
+		delete attr_Model_read[0];
+	if (attr_SerialNumber_read[0])
+		delete attr_SerialNumber_read[0];
+
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::delete_device
+	delete[] attr_Model_read;
+	delete[] attr_SerialNumber_read;
+	delete[] attr_TemperatureFan_read;
 
 	if (Tango::Util::instance()->is_svr_shutting_down()==false  &&
 		Tango::Util::instance()->is_device_restarting(device_name)==false &&
@@ -217,10 +219,8 @@ void Agilent4uhv::init_device()
 	
 	//	Initialization before get_device_property() call
 	mandatoryNotDefined = false;
-	nchannel = 0;
-	odd_channel_quirk = false;
+	channels.clear();
 	init_error.clear();
-
 	worker = NULL;
 
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::init_device_before
@@ -231,67 +231,223 @@ void Agilent4uhv::init_device()
 		//	If not starting up call init device for inherited object
 		Serial2Client_ns::Serial2Client::init_device();
 	}
-	//	No device property to be read from database
+
+	//	Get the device properties from database
+	get_device_property();
 	
+	attr_Model_read = new Tango::DevString[1];
+	attr_SerialNumber_read = new Tango::DevString[1];
+	attr_TemperatureFan_read = new Tango::DevDouble[1];
 	//	No longer if mandatory property not set. 
 	if (mandatoryNotDefined)
 		return;
 
 	/*----- PROTECTED REGION ID(Agilent4uhv::init_device) ENABLED START -----*/
-	
+
 	//	Initialize device
 	try {
+		attr_Model_read[0] = new char[MAX_DEVSTRING_LENGTH];
+		attr_SerialNumber_read[0] = new char[MAX_DEVSTRING_LENGTH];
+
+		/* Identify model:
+		* 9299200/1 con 2 canali x 80W  --> attivi canali 1 e 2
+		* 9299020   con 2 canali x 200W --> attivi canali 1 e 3
+		* 9299400   con 4 canali x 80W  --> attivi canali da 1 a 4
+		*/
 		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 (model == "9299210" || model == "9299211"
-				|| model == "9299212" || model == "9299213")
-			nchannel = 3;
-		else if (model == "9299400" || model == "9299401"
-				|| model == "9299402")
-			nchannel = 4;
-		else
+		read_window(319, model);
+		if (model == "9299200" || model == "9299201") {
+			channels.push_back("1");
+			channels.push_back("2");
+		} else if (model == "9299020") {
+			channels.push_back("1");
+			channels.push_back("3");
+		} else if (model == "9299400") {
+			channels.push_back("1");
+			channels.push_back("2");
+			channels.push_back("3");
+			channels.push_back("4");
+		} else {
 			Tango::Except::throw_exception( "",
 					"Unknown model",
 					"Agilent4uhv::init_device()");
+		}
+		strncpy(attr_Model_read[0], model.c_str(), MAX_DEVSTRING_LENGTH);
+
+		// Retrieve serial number
+		string serial;
+		read_window(323, serial);
+		strncpy(attr_SerialNumber_read[0], serial.c_str(), MAX_DEVSTRING_LENGTH);
+
+		// Set the mode
+//		int mode = 0; /* Serial */
+//		write_window(8, mode);
+
+		/* Setup mBar as pressure unit used */
+		int pressure_unit = 1 /* mBar */;
+		write_window(600, pressure_unit);
+
+		/* Read all the device data */
+		static const int nw[] = { 8, /*, 108, 320, 323, 503, 504, 600 */
+			601, 602, 603, 800, 801, 802, 803, 804, 808, 809, 810, 811};
+		vector<int> normal_windows(nw, nw + sizeof(nw) / sizeof(nw[0]));
+		for (size_t i=0; i<channels.size(); ++i) {
+			int chan;
+			convert(channels[i], chan);
+			normal_windows.push_back(10 + chan);
+			normal_windows.push_back(2060 + chan);
+			normal_windows.push_back(600 + chan * 10);
+			normal_windows.push_back(602 + chan * 10);
+			normal_windows.push_back(603 + chan * 10);
+			normal_windows.push_back(604 + chan * 10);
+			normal_windows.push_back(605 + chan * 10);
+			normal_windows.push_back(800 + chan * 10);
+			normal_windows.push_back(801 + chan * 10);
+		}
+		for (size_t i=0; i<normal_windows.size(); ++i) {
+			read_window_into_cache(normal_windows[i]);
+		}
+		static const int iw[] = { 812, 822, 832, 842 };
+		vector<int> important_windows(iw, iw + sizeof(iw) / sizeof(iw[0]));
+		for (size_t i=0; i<important_windows.size(); ++i) {
+			read_window_into_cache(important_windows[i]);
+		}
+		read_window_into_cache(205);
+
+		// Contruct polled windows vector
+		for (size_t i=0; i<normal_windows.size(); ++i) {
+			polled_windows.push_back(normal_windows[i]);
+			polled_windows.insert(polled_windows.end(),
+					important_windows.begin(),
+					important_windows.end());
+		}
+		polled_windows.push_back(205 /* it MUST be latest */);
 
-		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";
-
- 		worker = new Worker(this);
- 		worker->start();
-		
+		check_state();
+
+		/* Start the poller */
+		worker = new Agilent4uhvWorker(this);
+		worker->start();
 	} catch(Tango::DevFailed &e) {
-		init_error = "Initialization failed: " + string(e.errors[0].desc);
-		set_state(Tango::FAULT);
+		if (string(e.errors[0].reason) == "API_CommandNotAllowed")
+			init_error = "Initialization failed: " + get_status2();
+		else
+			init_error = "Initialization failed: " + string(e.errors[0].desc);
 	} catch (...) {
-		init_error =	"Initialization failed: Unknown error";
+		init_error = "Initialization failed: Unknown error";
+	}
+
+	if (! init_error.empty()) {
+		ERROR_STREAM << init_error << endl;
 		set_state(Tango::UNKNOWN);
+		set_status(init_error);
+		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("PollingSleep"));
+
+	//	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 PollingSleep from class property
+		cl_prop = ds_class->get_class_property(dev_prop[++i].name);
+		if (cl_prop.is_empty()==false)	cl_prop  >>  pollingSleep;
+		else {
+			//	Try to initialize PollingSleep from default device value
+			def_prop = ds_class->get_default_device_property(dev_prop[i].name);
+			if (def_prop.is_empty()==false)	def_prop  >>  pollingSleep;
+		}
+		//	And try to extract PollingSleep value from database
+		if (dev_prop[i].is_empty()==false)	dev_prop[i]  >>  pollingSleep;
+
+	}
+
+	/*----- PROTECTED REGION ID(Agilent4uhv::get_device_property_after) ENABLED START -----*/
+	
+	//	Check device property data members init
+	if (pollingSleep > 1000000) {
+		pollingSleep = 1000000;
+	}
+
+	if (pollingSleep < 0) {
+		pollingSleep = 0;
+	}
+	
+	/*----- 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
+	}
+}
+
 
 //--------------------------------------------------------
 /**
@@ -314,15 +470,21 @@ void Agilent4uhv::always_executed_hook()
 	
 	//	code always executed before all requests
 	if (! init_error.empty()) {
-		set_state(Tango::FAULT);
+		ERROR_STREAM << init_error << endl;
 		set_status(init_error);
+		set_state(Tango::UNKNOWN);
+		assert(false);
 		return;
 	}
 
-	data_mutex.lock();
-	set_state(data.state);
-	set_status(data.status);
-	data_mutex.unlock();
+	try {
+		check_state();
+	} catch(Tango::DevFailed &e) {
+		ERROR_STREAM << string(e.errors[0].desc) << endl;
+		set_state(Tango::UNKNOWN);
+		set_status(string(e.errors[0].desc));
+		assert(false);
+	}
 
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::always_executed_hook
 }
@@ -339,7 +501,7 @@ void Agilent4uhv::read_attr_hardware(TANGO_UNUSED(vector<long> &attr_list))
 	/*----- PROTECTED REGION ID(Agilent4uhv::read_attr_hardware) ENABLED START -----*/
 	
 	//	Add your own code
-	check_init_error();
+	check_init();
 	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_attr_hardware
 }
@@ -357,15 +519,7 @@ 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 -----*/
-
-	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);
-	
+	attr.set_value(attr_Model_read);
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_Model
 }
 //--------------------------------------------------------
@@ -381,40 +535,29 @@ 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 -----*/
-
-	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);
-	
+	attr.set_value(attr_SerialNumber_read);
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_SerialNumber
 }
 //--------------------------------------------------------
 /**
- *	Read attribute Temperature related method
+ *	Read attribute TemperatureFan related method
  *	Description: 
  *
- *	Data type:	Tango::DevFloat
+ *	Data type:	Tango::DevDouble
  *	Attr type:	Scalar
  */
 //--------------------------------------------------------
-void Agilent4uhv::read_Temperature(Tango::Attribute &attr)
+void Agilent4uhv::read_TemperatureFan(Tango::Attribute &attr)
 {
-	DEBUG_STREAM << "Agilent4uhv::read_Temperature(Tango::Attribute &attr) entering... " << endl;
-	/*----- PROTECTED REGION ID(Agilent4uhv::read_Temperature) ENABLED START -----*/
-
-	Tango::DevFloat *temperature = new Tango::DevFloat();
-
-	data_mutex.lock();
-	*temperature = data.temperature_fan;
-	data_mutex.unlock();
-
-	attr.set_value(temperature, 1, 0, true);
+	DEBUG_STREAM << "Agilent4uhv::read_TemperatureFan(Tango::Attribute &attr) entering... " << endl;
+	/*----- PROTECTED REGION ID(Agilent4uhv::read_TemperatureFan) ENABLED START -----*/
+	//	Set the attribute value
+	int value;
+	read_window_from_cache(800, value);
+	convert(value, attr_TemperatureFan_read[0]);
+	attr.set_value(attr_TemperatureFan_read);
 	
-	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_Temperature
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_TemperatureFan
 }
 
 //--------------------------------------------------------
@@ -431,20 +574,16 @@ 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();
+	int win;
+	convert("01" + attr.get_name().substr(attr.get_name().size()-1), win);	
 
+	bool value;
+	read_window_from_cache(win, value);
 	if (value)
 		*att_value = Tango::ON;
 	else
 		*att_value = Tango::OFF;
 	attr.set_value(att_value);
-	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_HVX
 }
 //--------------------------------------------------------
@@ -461,15 +600,14 @@ 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();
+	int win;
+	convert("6" + attr.get_name().substr(attr.get_name().size()-1) + "0", win);	
 
+	int value;
+	read_window_from_cache(win, value);
+	*att_value = value;
 	attr.set_value(att_value);
-	
+
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_DeviceNumberX
 }
 //--------------------------------------------------------
@@ -488,27 +626,15 @@ 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();
+	check_init();
+
+	int win;
+	convert("6" + attr.get_name().substr(attr.get_name().size()-1) + "0", win);	
+
+	int value = w_val;
+	write_window(win, value);
+	read_window_into_cache(win);
 
-	Tango::DevUShort indexn;
-	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
-	switch (indexn)
-	{
-		case 1:
-			write(DEVICENUMBERCH1, w_val);
-			break;
-		case 2:
-			write(DEVICENUMBERCH2, w_val);
-			break;
-		case 3:
-			write(DEVICENUMBERCH3, w_val);
-			break;
-		case 4:
-			write(DEVICENUMBERCH4, w_val);
-			break;
-	}
-	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::write_DeviceNumberX
 }
 //--------------------------------------------------------
@@ -516,24 +642,23 @@ void Agilent4uhv::write_DeviceNumberX(Tango::WAttribute &attr)
  *	Read attribute PowerMaxX related method
  *	Description: 
  *
- *	Data type:	Tango::DevUShort
+ *	Data type:	Tango::DevLong
  *	Attr type:	Scalar
  */
 //--------------------------------------------------------
 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());
+	Tango::DevLong	*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();
+	int win;
+	convert("6" + attr.get_name().substr(attr.get_name().size()-1) + "2", win);	
 
+	int value;
+	read_window_from_cache(win, value);
+	*att_value = value;
 	attr.set_value(att_value);
-	
+
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_PowerMaxX
 }
 //--------------------------------------------------------
@@ -541,7 +666,7 @@ void Agilent4uhv::read_PowerMaxX(Tango::Attribute &attr)
  *	Write attribute PowerMaxX related method
  *	Description: 
  *
- *	Data type:	Tango::DevUShort
+ *	Data type:	Tango::DevLong
  *	Attr type:	Scalar
  */
 //--------------------------------------------------------
@@ -549,30 +674,18 @@ void Agilent4uhv::write_PowerMaxX(Tango::WAttribute &attr)
 {
 	DEBUG_STREAM << "Agilent4uhv::write_PowerMaxX(Tango::WAttribute &attr) entering... " << endl;
 	//	Retrieve write value
-	Tango::DevUShort	w_val;
+	Tango::DevLong	w_val;
 	attr.get_write_value(w_val);
 	/*----- PROTECTED REGION ID(Agilent4uhv::write_PowerMaxX) ENABLED START -----*/
-	
-	check_init_error();
+	check_init();
+
+	int win;
+	convert("6" + attr.get_name().substr(attr.get_name().size()-1) + "2", win);
+
+	int value = w_val;
+	write_window(win, value);
+	read_window_into_cache(win);
 
-	Tango::DevUShort indexn;
-	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
-	switch (indexn)
-	{
-		case 1:
-			write(POWERMAXCH1, w_val);
-			break;
-		case 2:
-			write(POWERMAXCH2, w_val);
-			break;
-		case 3:
-			write(POWERMAXCH3, w_val);
-			break;
-		case 4:
-			write(POWERMAXCH4, w_val);
-			break;
-	}
-	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::write_PowerMaxX
 }
 //--------------------------------------------------------
@@ -580,25 +693,23 @@ void Agilent4uhv::write_PowerMaxX(Tango::WAttribute &attr)
  *	Read attribute VTargetX related method
  *	Description: 
  *
- *	Data type:	Tango::DevUShort
+ *	Data type:	Tango::DevLong
  *	Attr type:	Scalar
  */
 //--------------------------------------------------------
 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());
+	Tango::DevLong	*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();
+	int win;
+	convert("6" + attr.get_name().substr(attr.get_name().size()-1) + "3", win);
 
-	*att_value /= 1000;
+	int value;
+	read_window_from_cache(win, value);
+	*att_value = value;
 	attr.set_value(att_value);
-	
+
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_VTargetX
 }
 //--------------------------------------------------------
@@ -606,7 +717,7 @@ void Agilent4uhv::read_VTargetX(Tango::Attribute &attr)
  *	Write attribute VTargetX related method
  *	Description: 
  *
- *	Data type:	Tango::DevUShort
+ *	Data type:	Tango::DevLong
  *	Attr type:	Scalar
  */
 //--------------------------------------------------------
@@ -614,31 +725,18 @@ void Agilent4uhv::write_VTargetX(Tango::WAttribute &attr)
 {
 	DEBUG_STREAM << "Agilent4uhv::write_VTargetX(Tango::WAttribute &attr) entering... " << endl;
 	//	Retrieve write value
-	Tango::DevUShort	w_val;
+	Tango::DevLong	w_val;
 	attr.get_write_value(w_val);
 	/*----- PROTECTED REGION ID(Agilent4uhv::write_VTargetX) ENABLED START -----*/
-	
-	check_init_error();
+	check_init();
+
+	int win;
+	convert("6" + attr.get_name().substr(attr.get_name().size()-1) + "3", win);
+
+	int value = w_val;
+	write_window(win, value);
+	read_window_into_cache(win);
 
-	Tango::DevUShort indexn;
-	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
-	w_val *= 1000;
-	switch (indexn)
-	{
-		case 1:
-			write(VTARGETCH1, w_val);
-			break;
-		case 2:
-			write(VTARGETCH2, w_val);
-			break;
-		case 3:
-			write(VTARGETCH3, w_val);
-			break;
-		case 4:
-			write(VTARGETCH4, w_val);
-			break;
-	}
-	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::write_VTargetX
 }
 //--------------------------------------------------------
@@ -646,24 +744,23 @@ void Agilent4uhv::write_VTargetX(Tango::WAttribute &attr)
  *	Read attribute IProtectX related method
  *	Description: 
  *
- *	Data type:	Tango::DevUShort
+ *	Data type:	Tango::DevLong
  *	Attr type:	Scalar
  */
 //--------------------------------------------------------
 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());
+	Tango::DevLong	*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();
+	int win;
+	convert("6" + attr.get_name().substr(attr.get_name().size()-1) + "4", win);
 
+	int value;
+	read_window_from_cache(win, value);
+	*att_value = value;
 	attr.set_value(att_value);
-	
+
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_IProtectX
 }
 //--------------------------------------------------------
@@ -671,7 +768,7 @@ void Agilent4uhv::read_IProtectX(Tango::Attribute &attr)
  *	Write attribute IProtectX related method
  *	Description: 
  *
- *	Data type:	Tango::DevUShort
+ *	Data type:	Tango::DevLong
  *	Attr type:	Scalar
  */
 //--------------------------------------------------------
@@ -679,30 +776,18 @@ void Agilent4uhv::write_IProtectX(Tango::WAttribute &attr)
 {
 	DEBUG_STREAM << "Agilent4uhv::write_IProtectX(Tango::WAttribute &attr) entering... " << endl;
 	//	Retrieve write value
-	Tango::DevUShort	w_val;
+	Tango::DevLong	w_val;
 	attr.get_write_value(w_val);
 	/*----- PROTECTED REGION ID(Agilent4uhv::write_IProtectX) ENABLED START -----*/
-	
-	check_init_error();
+	check_init();
+
+	int win;
+	convert("6" + attr.get_name().substr(attr.get_name().size()-1) + "4", win);
+
+	int value = w_val;
+	write_window(win, value);
+	read_window_into_cache(win);
 
-	Tango::DevUShort indexn;
-	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
-	switch (indexn)
-	{
-		case 1:
-			write(IPROTECTCH1, w_val);
-			break;
-		case 2:
-			write(IPROTECTCH2, w_val);
-			break;
-		case 3:
-			write(IPROTECTCH3, w_val);
-			break;
-		case 4:
-			write(IPROTECTCH4, w_val);
-			break;
-	}
-	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::write_IProtectX
 }
 //--------------------------------------------------------
@@ -719,15 +804,12 @@ 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);
+	int win;
+	convert("6" + attr.get_name().substr(attr.get_name().size()-1) + "5", win);
 	
-	data_mutex.lock();
-	*att_value = data.setpoint[indexn-1];
-	data_mutex.unlock();
-
+	read_window_from_cache(win, *att_value);
 	attr.set_value(att_value);
-	
+
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_SetPointX
 }
 //--------------------------------------------------------
@@ -746,32 +828,12 @@ void Agilent4uhv::write_SetPointX(Tango::WAttribute &attr)
 	Tango::DevDouble	w_val;
 	attr.get_write_value(w_val);
 	/*----- PROTECTED REGION ID(Agilent4uhv::write_SetPointX) ENABLED START -----*/
+	int win;
+	convert("6" + attr.get_name().substr(attr.get_name().size()-1) + "5", win);
 
-	check_init_error();
+	write_window(win, w_val);
+	read_window_into_cache(win);
 
-	Tango::DevUShort indexn;
-	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
-	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(SETPOINTCH1, w_val_s);
-			break;
-		case 2:
-			write(SETPOINTCH2, w_val_s);
-			break;
-		case 3:
-			write(SETPOINTCH3, w_val_s);
-			break;
-		case 4:
-			write(SETPOINTCH4, w_val_s);
-			break;
-	}
-	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::write_SetPointX
 }
 //--------------------------------------------------------
@@ -779,24 +841,32 @@ void Agilent4uhv::write_SetPointX(Tango::WAttribute &attr)
  *	Read attribute TemperatureHVX related method
  *	Description: 
  *
- *	Data type:	Tango::DevFloat
+ *	Data type:	Tango::DevDouble
  *	Attr type:	Scalar
  */
 //--------------------------------------------------------
 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());
+	Tango::DevDouble	*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();
-
+	int channel, win;
+	convert(attr.get_name().substr(attr.get_name().size()-1), channel);
+	switch(channel) {
+		case 1:	win = 801; break;
+		case 2:	win = 802; break;
+		case 3: win = 808; break;
+		case 4: win = 809; break;
+		default:
+			Tango::Except::throw_exception( "",
+					"This channel doesn't exist",
+					"Agilent4uhv::read_TemperatureHVX()");
+	}
+	int value;
+	read_window_from_cache(win, value);
+	convert(value, *att_value);
 	attr.set_value(att_value);
-	
+
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_TemperatureHVX
 }
 //--------------------------------------------------------
@@ -813,15 +883,14 @@ 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();
+	int win;
+	convert("8" + attr.get_name().substr(attr.get_name().size()-1) + "0", win);
 
+	int value;
+	read_window_from_cache(win, value);
+	convert(value, *att_value);
 	attr.set_value(att_value);
-	
+
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_VoltageX
 }
 //--------------------------------------------------------
@@ -838,15 +907,11 @@ 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();
-
+	int win;
+	convert("8" + attr.get_name().substr(attr.get_name().size()-1) + "1", win);
+	read_window_from_cache(win, *att_value);
 	attr.set_value(att_value);
-	
+
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_CurrentX
 }
 //--------------------------------------------------------
@@ -863,15 +928,11 @@ 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();
-
+	int win;
+	convert("8" + attr.get_name().substr(attr.get_name().size()-1) + "2", win);
+	read_window_from_cache(win, *att_value);
 	attr.set_value(att_value);
-	
+
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_PressureX
 }
 //--------------------------------------------------------
@@ -889,32 +950,24 @@ void Agilent4uhv::read_StateX(Tango::Attribute &attr)
 	Tango::DevState	*att_value = get_StateX_data_ptr(attr.get_name());
 	/*----- PROTECTED REGION ID(Agilent4uhv::read_StateX) ENABLED START -----*/
 	//	Set the attribute value
+	int channel;
+	convert(attr.get_name().substr(attr.get_name().size()-1), channel);
 
-	Tango::DevUShort indexn;
-	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
+	int errorcodes;
+	read_window_from_cache(2060 + channel, errorcodes);
 
-	vector<unsigned char> errcodes;
+	bool state;
+	read_window_from_cache(10 + channel, state);
 
-	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:
+	if (errorcodes) {
+		*att_value = Tango::FAULT;
+	} else {
+		if (state)
 			*att_value = Tango::ON;
-			break;
-		default:
-			assert(false);
+		else
+			*att_value = Tango::OFF;
 	}
 
-	if (errcodes[6-indexn] != '0')
-		*att_value = Tango::FAULT;
-	
 	attr.set_value(att_value);
 
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_StateX
@@ -934,69 +987,51 @@ void Agilent4uhv::read_StatusX(Tango::Attribute &attr)
 	Tango::DevString	*att_value = get_StatusX_data_ptr(attr.get_name());
 	/*----- PROTECTED REGION ID(Agilent4uhv::read_StatusX) ENABLED START -----*/
 	//	Set the attribute value
-
-	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();
+	int channel;
+	convert(attr.get_name().substr(attr.get_name().size()-1), channel);
 
 	string status;
-	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;
+	bool state;
+	read_window_from_cache(10 + channel, state);
+	if (state)
+		status = "The device is in ON state";
+	else
+		status = "The device is in OFF state";
 
-	if (errcode != 0)
-	{
+	int errorcodes;
+	read_window_from_cache(2060 + channel, errorcodes);
+	if (errorcodes != 0) {
 		status = "";
-
-		if (errcode & 0x1)
+		if (errorcodes & 0x1)
 			status += "FAN error ";
-		if (errcode & 0x2)
+		if (errorcodes & 0x2)
 			status += "Power input error from HV ";
-		if (errcode & 0x4)
+		if (errorcodes & 0x4)
 			status += "Power input error from PFC ";
-		if (errcode & 0x8)
+		if (errorcodes & 0x8)
 			status += "Overtemp PFC ";
-		if (errcode & 0x10)
+		if (errorcodes & 0x10)
 			status += "Error communication CPU-HV ";
-		if (errcode & 0x20)
+		if (errorcodes & 0x20)
 			status += "Interlock cable ";
-		if (errcode & 0x40)
+		if (errorcodes & 0x40)
 			status += "Overtemp HV ";
-		if (errcode & 0x80)
+		if (errorcodes & 0x80)
 			status += "Protect ";
-		if (errcode & 0x100)
+		if (errorcodes & 0x100)
 			status += "Measurement error ";
-		if (errcode & 0x200)
+		if (errorcodes & 0x200)
 			status += "HV out error ";
-		if (errcode & 0x400)
+		if (errorcodes & 0x400)
 			status += "Short circuit ";
-		if (errcode & 0x800)
+		if (errorcodes & 0x800)
 			status += "HV disabled ";
-
 	}
-
-	if (*att_value != NULL)
-		CORBA::string_free(*att_value);
-	*att_value = CORBA::string_dup(status.c_str());
-
-	attr.set_value(att_value);
 	
+	strncpy(*att_value, status.c_str(), MAX_DEVSTRING_LENGTH);
+	attr.set_value(att_value);
+
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_StatusX
 }
 //--------------------------------------------------------
@@ -1014,21 +1049,15 @@ void Agilent4uhv::read_AutoStartX(Tango::Attribute &attr)
 	Tango::DevBoolean	*att_value = get_AutoStartX_data_ptr(attr.get_name());
 	/*----- PROTECTED REGION ID(Agilent4uhv::read_AutoStartX) ENABLED START -----*/
 	//	Set the attribute value
-	Tango::DevUShort indexn;
-	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
+	int channel;
+	convert(attr.get_name().substr(attr.get_name().size()-1), channel);
 
-	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;
+ 	string autostart;
+ 	read_window_from_cache(601, autostart);
 
+	convert(autostart[autostart.size()-channel], *att_value);
 	attr.set_value(att_value);
-	
+
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_AutoStartX
 }
 //--------------------------------------------------------
@@ -1047,24 +1076,22 @@ void Agilent4uhv::write_AutoStartX(Tango::WAttribute &attr)
 	Tango::DevBoolean	w_val;
 	attr.get_write_value(w_val);
 	/*----- PROTECTED REGION ID(Agilent4uhv::write_AutoStartX) ENABLED START -----*/
+	check_init();
 
-	check_init_error();
+	int channel;
+	convert(attr.get_name().substr(attr.get_name().size()-1), channel);
 
-	Tango::DevUShort indexn;
-	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
-
-	vector<unsigned char> autostart;
-	data_mutex.lock();
-	autostart = data.autostart;
-	data_mutex.unlock();
+ 	string autostart;
+ 	read_window_from_cache(601, autostart);
 
 	if (w_val)
-		autostart[10-indexn] = '1';
+		autostart[autostart.size()-channel] = '1';
 	else
-		autostart[10-indexn] = '0';
+		autostart[autostart.size()-channel] = '0';
+
+	write_window(601, autostart);
+	read_window_into_cache(601);
 
-	write(OPERATINGMODE, autostart);
-	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::write_AutoStartX
 }
 //--------------------------------------------------------
@@ -1082,21 +1109,15 @@ void Agilent4uhv::read_ProtectX(Tango::Attribute &attr)
 	Tango::DevBoolean	*att_value = get_ProtectX_data_ptr(attr.get_name());
 	/*----- PROTECTED REGION ID(Agilent4uhv::read_ProtectX) ENABLED START -----*/
 	//	Set the attribute value
-	Tango::DevUShort indexn;
-	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
-
-	vector<unsigned char> protect;
-	data_mutex.lock();
-	protect = data.protect;
-	data_mutex.unlock();
+	int channel;
+	convert(attr.get_name().substr(attr.get_name().size()-1), channel);
 
-	if (protect[10-indexn] == '0')
-		*att_value = false;
-	else
-		*att_value = true;
+ 	string protect;
+ 	read_window_from_cache(602, protect);
 
+	convert(protect[protect.size()-channel], *att_value);
 	attr.set_value(att_value);
-	
+
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_ProtectX
 }
 //--------------------------------------------------------
@@ -1115,24 +1136,21 @@ void Agilent4uhv::write_ProtectX(Tango::WAttribute &attr)
 	Tango::DevBoolean	w_val;
 	attr.get_write_value(w_val);
 	/*----- PROTECTED REGION ID(Agilent4uhv::write_ProtectX) ENABLED START -----*/
+	check_init();
 
-	check_init_error();
-
-	Tango::DevUShort indexn;
-	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
+	int channel;
+	convert(attr.get_name().substr(attr.get_name().size()-1), channel);
 
-	vector<unsigned char> protect;
-	data_mutex.lock();
-	protect = data.protect;
-	data_mutex.unlock();
+ 	string protect;
+ 	read_window_from_cache(602, protect);
 
 	if (w_val)
-		protect[10-indexn] = '1';
+		protect[protect.size()-channel] = '1';
 	else
-		protect[10-indexn] = '0';
+		protect[protect.size()-channel] = '0';
 
-	write(PROTECT, protect);
-	
+	write_window(602, protect);
+	read_window_into_cache(602);
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::write_ProtectX
 }
 //--------------------------------------------------------
@@ -1150,21 +1168,15 @@ void Agilent4uhv::read_FixedStepX(Tango::Attribute &attr)
 	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();
+	int channel;
+	convert(attr.get_name().substr(attr.get_name().size()-1), channel);
 
-	if (fs[10-indexn] == '0')
-		*att_value = true;
-	else
-		*att_value = false;
+ 	string fs;
+ 	read_window_from_cache(603, fs);
 
+	convert(fs[fs.size()-channel], *att_value);
 	attr.set_value(att_value);
-	
+
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_FixedStepX
 }
 //--------------------------------------------------------
@@ -1183,24 +1195,21 @@ void Agilent4uhv::write_FixedStepX(Tango::WAttribute &attr)
 	Tango::DevBoolean	w_val;
 	attr.get_write_value(w_val);
 	/*----- PROTECTED REGION ID(Agilent4uhv::write_FixedStepX) ENABLED START -----*/
+	check_init();
 
-	check_init_error();
-
-	Tango::DevUShort indexn;
-	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
+	int channel;
+	convert(attr.get_name().substr(attr.get_name().size()-1), channel);
 
-	vector<unsigned char> fs;
-	data_mutex.lock();
-	fs = data.fs;
-	data_mutex.unlock();
+ 	string fs;
+ 	read_window_from_cache(603, fs);
 
 	if (w_val)
-		fs[10-indexn] = '0';
+		fs[fs.size()-channel] = '1';
 	else
-		fs[10-indexn] = '1';
+		fs[fs.size()-channel] = '0';
 
-	write(FIXEDSTEP, fs);
-	
+	write_window(603, fs);
+	read_window_into_cache(603);
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::write_FixedStepX
 }
 //--------------------------------------------------------
@@ -1218,21 +1227,15 @@ 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
-	Tango::DevUShort indexn;
-	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
+	int channel;
+	convert(attr.get_name().substr(attr.get_name().size()-1), channel);
 
-	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;
+ 	string ss;
+ 	read_window_from_cache(804, ss);
 
+	convert(ss[ss.size()-channel], *att_value);
 	attr.set_value(att_value);
-	
+
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_StatusSetPointX
 }
 //--------------------------------------------------------
@@ -1250,21 +1253,15 @@ void Agilent4uhv::read_InterlockStatusX(Tango::Attribute &attr)
 	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);
+	int channel;
+	convert(attr.get_name().substr(attr.get_name().size()-1), channel);
 
-	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;
+ 	string interlock;
+ 	read_window_from_cache(803, interlock);
 
+	convert(interlock[interlock.size()-channel], *att_value);
 	attr.set_value(att_value);
-	
+
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::read_InterlockStatusX
 }
 //--------------------------------------------------------
@@ -1282,38 +1279,29 @@ void Agilent4uhv::read_StatMaskX(Tango::Attribute &attr)
 	Tango::DevLong	*att_value = get_StatMaskX_data_ptr(attr.get_name());
 	/*----- PROTECTED REGION ID(Agilent4uhv::read_StatMaskX) ENABLED START -----*/
 	//	Set the attribute value
-
-	Tango::DevUShort indexn;
-	convert(attr.get_name().substr(attr.get_name().size()-1), indexn);
-
-	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();
+	int channel;
+	convert(attr.get_name().substr(attr.get_name().size()-1), channel);
 
 	*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;
+	bool state;
+	read_window_from_cache(10 + channel, state);
+	if (state)
+		*att_value |= 0x1;
+
+	int mode;
+	read_window_from_cache(8, mode);
+	if (mode != 3 /* LOCAL */)
+		*att_value |= 0x1 << 1;
 
-	if (errcodes[6-indexn] != '0')
+	int errorcodes;
+	read_window_from_cache(2060 + channel, errorcodes);
+	if (errorcodes != 0)
 		*att_value |= 0x1 << 2;
 
-	if (fs[10-indexn] == '1')
+	string fs;
+	read_window_from_cache(603, fs);
+ 	if (fs[fs.size()-channel] == '1')
 		*att_value |= 0x1 << 3;
 
 	// FIXME bit 4,5,6 and 7 aren't implemented
@@ -1355,106 +1343,30 @@ void Agilent4uhv::add_dynamic_attributes()
 	/*----- PROTECTED REGION ID(Agilent4uhv::add_dynamic_attributes) ENABLED START -----*/
 	
 	//	Add your own code to create and add dynamic attributes if any
-	for (unsigned short cn=1; cn <= nchannel; ++cn)
-	{
-		stringstream ssname;
-		string sname;
-		int i = cn;
-
-		if (odd_channel_quirk && cn > 1)
-			++i;
-
-		ssname.str(""); ssname.clear();
-		ssname << "HV" << i << flush;
-		sname = ssname.str();
-		add_HVX_dynamic_attribute(sname);
-
-		ssname.str(""); ssname.clear();
-		ssname << "DeviceNumber" << i << flush;
-		sname = ssname.str();
-		add_DeviceNumberX_dynamic_attribute(sname);
-
-		ssname.str(""); ssname.clear();
-		ssname << "PowerMax" << i << flush;
-		sname = ssname.str();
-		add_PowerMaxX_dynamic_attribute(sname);
-
-		ssname.str(""); ssname.clear();
-		ssname << "VTarget" << i << flush;
-		sname = ssname.str();
-		add_VTargetX_dynamic_attribute(sname);
-
-		ssname.str(""); ssname.clear();
-		ssname << "IProtect" << i << flush;
-		sname = ssname.str();
-		add_IProtectX_dynamic_attribute(sname);
-
-		ssname.str(""); ssname.clear();
-		ssname << "SetPoint" << i << flush;
-		sname = ssname.str();
-		add_SetPointX_dynamic_attribute(sname);
-		
-		ssname.str(""); ssname.clear();
-		ssname << "TemperatureHV" << i << flush;
-		sname = ssname.str();
-		add_TemperatureHVX_dynamic_attribute(sname);
-
-		ssname.str(""); ssname.clear();
-		ssname << "Voltage" << i << flush;
-		sname = ssname.str();
-		add_VoltageX_dynamic_attribute(sname);
-
-		ssname.str(""); ssname.clear();
-		ssname << "Current" << i << flush;
-		sname = ssname.str();
-		add_CurrentX_dynamic_attribute(sname);
-
-		ssname.str(""); ssname.clear();
-		ssname << "Pressure" << i << flush;
-		sname = ssname.str();
-		add_PressureX_dynamic_attribute(sname);
-
-		ssname.str(""); ssname.clear();
-		ssname << "State" << i << flush;
-		sname = ssname.str();
-		add_StateX_dynamic_attribute(sname);
-
-		ssname.str(""); ssname.clear();
-		ssname << "Status" << i << flush;
-		sname = ssname.str();
-		add_StatusX_dynamic_attribute(sname);
-		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();
-		add_ProtectX_dynamic_attribute(sname);
-
-		ssname.str(""); ssname.clear();
-		ssname << "Fixed" << i << flush;
-		sname = ssname.str();
-		add_FixedStepX_dynamic_attribute(sname);
-
-		ssname.str(""); ssname.clear();
-		ssname << "StatusSetPoint" << i << flush;
-		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();
-		add_StatMaskX_dynamic_attribute(sname);
+	for (size_t i=0; i<channels.size(); ++i) {
+		add_HVX_dynamic_attribute("HV" + channels[i]);
+		add_DeviceNumberX_dynamic_attribute("DeviceNumber" + channels[i]);
+		add_PowerMaxX_dynamic_attribute("PowerMax" + channels[i]);
+		add_VTargetX_dynamic_attribute("VTarget" + channels[i]);
+		add_IProtectX_dynamic_attribute("IProtect" + channels[i]);
+		add_SetPointX_dynamic_attribute("SetPoint" + channels[i]);
+		add_TemperatureHVX_dynamic_attribute("TemperatureHV" + channels[i]);
+		add_VoltageX_dynamic_attribute("Voltage" + channels[i]);
+		add_CurrentX_dynamic_attribute("Current" + channels[i]);
+		add_PressureX_dynamic_attribute("Pressure" + channels[i]);
+		add_StateX_dynamic_attribute("State" + channels[i]);
+
+		string attr_status_name = "Status" + channels[i];
+		add_StatusX_dynamic_attribute(attr_status_name);
+		Tango::DevString *att_value = get_StatusX_data_ptr(attr_status_name);
+		*att_value = new char[MAX_DEVSTRING_LENGTH];
+
+		add_AutoStartX_dynamic_attribute("AutoStart" + channels[i]);
+		add_ProtectX_dynamic_attribute("Protect" + channels[i]);
+		add_FixedStepX_dynamic_attribute("Fixed" + channels[i]);
+		add_StatusSetPointX_dynamic_attribute("StatusSetPoint" + channels[i]);
+		add_InterlockStatusX_dynamic_attribute("InterlockStatus" + channels[i]);
+		add_StatMaskX_dynamic_attribute("StatMask" + channels[i]);
 	}
 	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::add_dynamic_attributes
@@ -1462,163 +1374,49 @@ void Agilent4uhv::add_dynamic_attributes()
 
 //--------------------------------------------------------
 /**
- *	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
+ *	Command OffHVX related method
  *	Description: 
  *
  */
 //--------------------------------------------------------
-void Agilent4uhv::off_hv2()
+void Agilent4uhv::off_hvx(Tango::Command &command)
 {
-	DEBUG_STREAM << "Agilent4uhv::OffHV2()  - " << device_name << endl;
-	/*----- PROTECTED REGION ID(Agilent4uhv::off_hv2) ENABLED START -----*/
+	DEBUG_STREAM << "Agilent4uhv::" << command.get_name() << "  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(Agilent4uhv::off_hvx) ENABLED START -----*/
 	
 	//	Add your own code
-	check_init_error();
+ 	check_init();
 	
-	int new_state = 0;
-	write(HVCH2, new_state);
+	int win;
+	convert("01" + command.get_name().substr(command.get_name().size()-1), win);	
 
-	/*----- 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();
-	
-	int new_state = 1;
-	write(HVCH1, new_state);
+	write_window(win, false);
+	read_window_into_cache(win);
 
-	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::on_hv1
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::off_hvx
 }
 //--------------------------------------------------------
 /**
- *	Command OnHV2 related method
+ *	Command OnHVX related method
  *	Description: 
  *
  */
 //--------------------------------------------------------
-void Agilent4uhv::on_hv2()
+void Agilent4uhv::on_hvx(Tango::Command &command)
 {
-	DEBUG_STREAM << "Agilent4uhv::OnHV2()  - " << device_name << endl;
-	/*----- PROTECTED REGION ID(Agilent4uhv::on_hv2) ENABLED START -----*/
+	DEBUG_STREAM << "Agilent4uhv::" << command.get_name() << "  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(Agilent4uhv::on_hvx) ENABLED START -----*/
 	
 	//	Add your own code
-	check_init_error();
+ 	check_init();
 	
-	int new_state = 1;
-	write(HVCH2, new_state);
+	int win;
+	convert("01" + command.get_name().substr(command.get_name().size()-1), win);	
 
-	/*----- 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();
-	
-	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);
+	write_window(win, true);
+	read_window_into_cache(win);
 
-	/*----- 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
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::on_hvx
 }
 //--------------------------------------------------------
 /**
@@ -1629,9 +1427,18 @@ void Agilent4uhv::on_hv4()
 //--------------------------------------------------------
 void Agilent4uhv::add_dynamic_commands()
 {
+	//	Example to add dynamic command:
+	//	Copy inside the folowing protected area to instanciate at startup.
+	//	add_OffHVX_dynamic_command("MyOffHVXCommand", true);
+	//	add_OnHVX_dynamic_command("MyOnHVXCommand", true);
+	
 	/*----- PROTECTED REGION ID(Agilent4uhv::add_dynamic_commands) ENABLED START -----*/
 	
 	//	Add your own code to create and add dynamic commands if any
+	for (size_t i=0; i<channels.size(); ++i) {
+		add_OnHVX_dynamic_command("OnHV" + channels[i], true);
+		add_OffHVX_dynamic_command("OffHV" + channels[i], true);
+	}
 	
 	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::add_dynamic_commands
 }
@@ -1639,489 +1446,353 @@ void Agilent4uhv::add_dynamic_commands()
 /*----- PROTECTED REGION ID(Agilent4uhv::namespace_ending) ENABLED START -----*/
 
 //	Additional Methods
-
-#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
-
-void Agilent4uhv::write(const int win, string &value)
+void Agilent4uhv::check_init()
 {
-	vector<unsigned char> data;
-
-	for (unsigned int i=0; i<value.size(); ++i)
-		data.push_back(value[i]);
-
-	write(win, data);
-
-	DEBUG_STREAM << "Written " << value.size() << " byte(s): "
-		<< value << endl;
+	if (! init_error.empty())
+		Tango::Except::throw_exception( "",
+				init_error.c_str(),
+				"Agilent4uhv::check_init()");
 }
 
-void Agilent4uhv::read(const int win, string &value)
+void Agilent4uhv::init_header(const int win, const windowType type, 
+		vector<unsigned char> &header)
 {
-	vector<unsigned char> answer;
+	header.push_back(STX);
+	header.push_back(ADDR);
 
-	read(win, answer);
+	char winc[WIN_LENGTH+1];
+	snprintf(winc, WIN_LENGTH+1, "%03d", win);
+	for (size_t i=0; i<WIN_LENGTH; ++i)
+		header.insert(header.end(), winc[i]);
 
-	stringstream ss;
-	for (unsigned int i=0; i<answer.size(); ++i)
-		ss << (char)answer[i];
-	ss << flush;
-	value = ss.str();
+	header.insert(header.end(), type);
+}
 
-	DEBUG_STREAM << "Readed " << value.size() << " byte(s): "
-		<< value << endl;
+int Agilent4uhv::calc_crc(const vector<unsigned char> &header, 
+		const vector<unsigned char> &payload) {
+	int crc = 0;
+	for (size_t i=1 /* Skip STX */; i < header.size(); ++i)
+		crc ^= header[i];
+	for (size_t i=0; i < payload.size(); ++i)
+		crc ^= payload[i];
+	crc ^= ETX;
+	return crc;
 }
 
-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())
+void Agilent4uhv::check_crc(const vector<unsigned char> &header, 
+		const vector<unsigned char> &payload, const vector<unsigned char> &footer) {
+	char crc[CRC_LENGTH+1];
+	snprintf(crc, CRC_LENGTH+1, "%02X", calc_crc(header, payload));
+	if(memcmp(footer.data()+1 /* Skip ETX */, crc, CRC_LENGTH) != 0)
 		Tango::Except::throw_exception( "",
-				"Conversion fail " + win_ss.str(),
-				"Agilent4uhv::write()");
-
-	vector<unsigned char> discarded;
+				"CRC check failed",
+				"Message::check_crc()");
+}
 
-	iomutex.lock();
-	try {
-		write_message(win_s, WRITE_WINDOW, data);
-		read_answer(win_s, WRITE_WINDOW, discarded);
-		iomutex.unlock();
-	} catch(...) {
-		iomutex.unlock();
-		throw;
-	}
+void Agilent4uhv::init_footer(const int computed_crc, vector<unsigned char> &footer)
+{
+	char crc[CRC_LENGTH+1];
+	snprintf(crc, CRC_LENGTH+1, "%02X", computed_crc);
+	
+	footer.push_back(ETX);
+	footer.push_back(0);
+	footer.push_back(0);
+	memcpy(footer.data()+1 /* Skip ETX */, crc, CRC_LENGTH);
 }
 
-void Agilent4uhv::read(const int win, vector<unsigned char> &answer)
+/* Must be called with iomutex held */
+void Agilent4uhv::send_message(const int win, const windowType type, 
+		const vector<unsigned char> &payload)
 {
-	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()");
+	vector<unsigned char> header, footer;
+	int attempts = 2;
 
-	vector<unsigned char> discarded;
+	init_header(win, type, header);
+	int crc = calc_crc(header, payload);
+	init_footer(crc, footer);
+
+	vector<unsigned char> message;
+	message.insert(message.end(), header.begin(), header.end());
+	message.insert(message.end(), payload.begin(), payload.end());
+	message.insert(message.end(), footer.begin(), footer.end());
 
-	iomutex.lock();
+retry:
 	try {
-		write_message(win_s, READ_WINDOW, discarded);
-		read_answer(win_s, READ_WINDOW, answer);
-		iomutex.unlock();
-	} catch(...) {
-		iomutex.unlock();
+		Serial2Client::write(message);
+	} catch (Tango::DevFailed &e) {
+		if (--attempts) {
+			// Waiting the device
+			int retries = 0;
+			while(get_state2() != Tango::ON && retries++ < 5) {
+				sleep(1);
+			}
+			goto retry;
+		}
 		throw;
 	}
+	assert(Serial2Client::output_length() == 0);
 }
 
-//	Message:
-//	<STX>+<ADDR>+<WIN>+<COM>+<DATA>+<ETX>+<CRC>
-void Agilent4uhv::write_message(const string win_s, const unsigned char com,
-		vector<unsigned char> &data)
+/* Must be called with iomutex held */
+void Agilent4uhv::receive_message(vector<unsigned char> &payload)
 {
-	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]);
-
-	message.push_back(ETX);
-	unsigned char crc_ = calc_crc(message);
-
-	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( "",
-				"Conversion fail " + crc_ss.str(),
-				"Agilent4uhv::write_message()");
+	vector<unsigned char> message, crc;
+	int attempts = 5;
 
-	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);
+retry:
+	try {
+		Serial2Client::read_until(ETX, message);
+		Serial2Client::read(CRC_LENGTH, crc);
+	} catch (Tango::DevFailed &e) {
+		if (--attempts) {
+			goto retry;
+		}
+		throw;
+	}
+	assert(Serial2Client::input_length() == 0);
 
-	if (answer_.size() == 4)
-	{
-		// Thus data is 1 byte length and it could be an error or Logic datatype!
+	message.insert(message.end(), crc.begin(), crc.end());
 
+	/* Error message is fixed-size */
+	if (message.size() == ERROR_MESSAGE_SIZE) {
 		string err_mesg;
-		switch ((int)answer_[2])
-		{
-			case 0x06:
-				// Ok
-				return;
-			case 0x15:
+		switch (message[2]) {
+			case 0x06: /* ACK */
+				break;
+			case 0x15: /* NACK */
 				err_mesg = "Execution of the command has failed";
 				break;
-			case 0x32:
-				err_mesg = "The window specified in the command is not a valid window";
+			case 0x32: /* Unknown Window */
+				err_mesg = "The window specified in the command"
+					" is not a valid window";
 				break;
-			case 0x33:
-				err_mesg = "The data type specified in the command (Logic, Numeric or "
-					"Alphanumeric) is not in agreement with the Window specified";
+			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";
 				break;
-			case 0x35:
-				err_mesg = "The window specified is Read Only or is temporarily disabled";
+			case 0x35: /* Win Disabled */
+				err_mesg = "The window specified is Read Only or"
+					" is temporarily disabled";
 				break;
+			default:
+				err_mesg = "The value expressed during a write"
+					" command is not within the range value"
+					" for the specified window.";
 		}
-
 		if (! err_mesg.empty())
 			Tango::Except::throw_exception( "",
 					err_mesg,
-					"Agilent4uhv::read_answer()");
-	}
-
-	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()");
-
-	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()");
+					"Agilent4uhv::receive_message()");
 
-	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());
+	} else {
+		size_t payload_size = message.size() - (HEADER_SIZE + FOOTER_SIZE);
+		payload.assign(message.begin() + HEADER_SIZE,
+				message.begin() + HEADER_SIZE + payload_size);
+	}
 }
 
-unsigned char Agilent4uhv::calc_crc(const vector<unsigned char> &message)
+/* Must be called with iomutex held */
+void Agilent4uhv::_send_receive_message(const int win, const windowType type, 
+		const vector<unsigned char> &answer, vector<unsigned char> &reply)
 {
-	unsigned char ret = 0;
-	for (vector<unsigned char>::size_type i=1 /*Skip STX*/; i<message.size(); ++i)
-		ret ^= message[i];
-	return ret;
+	send_message(win, type, answer);
+	receive_message(reply);
 }
 
-void Agilent4uhv::check_init_error(void)
+void Agilent4uhv::send_receive_message(const int win, const windowType type, 
+		const vector<unsigned char> &answer, vector<unsigned char> &reply)
 {
-	if (! init_error.empty())
-		Tango::Except::throw_exception( "",
-			init_error.c_str(),
-			"Agilent4uhv::check_init_error()");
+	omni_mutex_lock guardio(iomutex);
+	_send_receive_message(win, type, answer, reply);
 }
 
-void* Worker::run_undetached(void *ptr)
+void Agilent4uhv::decode(const vector<unsigned char> &payload, bool &data)
 {
-	(void)ptr;
-
-	DEBUG_STREAM << "Worker::run_undetached() - enter" << endl;
-
-	Data data;
-	vector<unsigned char> channels(6, '0');
-
-	while(cont) {
-		DEBUG_STREAM << "Worker::run_undetached() - loop" << endl;
-
-		// Retrieve data
-		try {
-			device->read(MODEL, data.model);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(SERIALNUMBER, data.serial_number);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(TEMPERATUREFAN, data.temperature_fan);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(HVCH1, data.hvch[0]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(HVCH2, data.hvch[1]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(HVCH3, data.hvch[2]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(HVCH4, data.hvch[3]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(DEVICENUMBERCH1, data.device_number[0]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(DEVICENUMBERCH2, data.device_number[1]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(DEVICENUMBERCH3, data.device_number[2]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(DEVICENUMBERCH4, data.device_number[3]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(POWERMAXCH1, data.power_max[0]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(POWERMAXCH2, data.power_max[1]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(POWERMAXCH3, data.power_max[2]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(POWERMAXCH4, data.power_max[3]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(VTARGETCH1, data.vtarget[0]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(VTARGETCH2, data.vtarget[1]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(VTARGETCH3, data.vtarget[2]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(VTARGETCH4, data.vtarget[3]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(IPROTECTCH1, data.iprotect[0]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(IPROTECTCH2, data.iprotect[1]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(IPROTECTCH3, data.iprotect[2]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(IPROTECTCH4, data.iprotect[3]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(SETPOINTCH1, data.setpoint[0]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(SETPOINTCH2, data.setpoint[1]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(SETPOINTCH3, data.setpoint[2]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(SETPOINTCH4, data.setpoint[3]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(TEMPERATUREHVCH1, data.temperaturehv[0]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(TEMPERATUREHVCH2, data.temperaturehv[1]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(TEMPERATUREHVCH3, data.temperaturehv[2]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(TEMPERATUREHVCH4, data.temperaturehv[3]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(VMEASUREDCH1, data.vmeasured[0]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(VMEASUREDCH2, data.vmeasured[1]);
-			if(! cont)
-				break;
-			wait(10);
-
-			device->read(VMEASUREDCH3, data.vmeasured[2]);
-			if(! cont)
-				break;
-			wait(10);
+	convert(payload[0], data);
+}
 
-			device->read(VMEASUREDCH4, data.vmeasured[3]);
-			if(! cont)
-				break;
-			wait(10);
+void Agilent4uhv::encode(const bool &data, vector<unsigned char> &payload)
+{
+	payload.resize(1);
+	convert(data, payload[0]);
+}
 
-			device->read(IMEASUREDCH1, data.imeasured[0]);
-			if(! cont)
-				break;
-			wait(10);
+void Agilent4uhv::decode(const vector<unsigned char> &payload, int &data)
+{
+	string s(payload.begin(), payload.end());
+	convert(s, data);
+}
 
-			device->read(IMEASUREDCH2, data.imeasured[1]);
-			if(! cont)
-				break;
-			wait(10);
+void Agilent4uhv::encode(const int &data, vector<unsigned char> &payload)
+{
+	string s;
+	convert(data, s);
+	/* Numeric is exactly 6 characters right-justified and 
+	 * padded with ascii zero (0x30) */
+	s.insert(s.begin(), NUMERIC_PAYLOAD_SIZE - s.size(), '0');
+	payload.assign(s.begin(), s.end());
+}
 
-			device->read(IMEASUREDCH3, data.imeasured[2]);
-			if(! cont)
-				break;
-			wait(10);
+/* Alphanumeric, which is 10 characters long, when used as double (scientific notation) 
+ * is righ-justified and padded with spaces (0x20) */
+void Agilent4uhv::decode(const vector<unsigned char> &payload, double &data)
+{
+	// Left trim of spaces
+	size_t start;
+	for (size_t i=0; i<payload.size(); ++i) {
+		if (payload[i] != ' ') {
+			start = i;
+			break;
+		}
+	}
+	string s = string(payload.begin() + start, payload.end());
+	convert(s, data);
+}
 
-			device->read(IMEASUREDCH4, data.imeasured[3]);
-			if(! cont)
-				break;
-			wait(10);
+void Agilent4uhv::encode(const double &data, vector<unsigned char> &payload)
+{
+	char text[ALPHANUMERIC_PAYLOAD_SIZE + 1];
+	snprintf(text, ALPHANUMERIC_PAYLOAD_SIZE + 1, "%.1E", data);
+	string s(text);
+	s.insert(s.begin(), ALPHANUMERIC_PAYLOAD_SIZE - s.size(), ' ');
+	payload.assign(s.begin(), s.end());
+}
 
-			device->read(PRESSURECH1, data.pressure[0]);
-			if(! cont)
-				break;
-			wait(10);
+/* Alphanumeric, which is 10 characters long, when used as string
+ * is left-justified and padded with spaces (0x20). When used as decimal number is
+ * righ-justified and padded with zeros (x30). In this last case the code should
+ * explicitly define 10 charaters to avoid automatic padding and pad with zeros
+ * directly */
+void Agilent4uhv::decode(const vector<unsigned char> &payload, string &data)
+{
+	// Right trim of spaces
+	size_t end;
+	for (size_t i=payload.size(); i>0; --i) {
+		if (payload[i-1] != ' ') {
+			end = i;
+			break;
+		}
+	}
+	data = string(payload.begin(), payload.begin() + end);
+}
 
-			device->read(PRESSURECH2, data.pressure[1]);
-			if(! cont)
-				break;
-			wait(10);
+void Agilent4uhv::encode(const string &data, vector<unsigned char> &payload)
+{
+	string s = data;
+	s.insert(s.end(), ALPHANUMERIC_PAYLOAD_SIZE - s.size(), ' ');
+	payload.assign(s.begin(), s.end());
+}
 
-			device->read(PRESSURECH3, data.pressure[2]);
-			if(! cont)
-				break;
-			wait(10);
+template<typename T> void Agilent4uhv::read_window(const int win, T &data)
+{
+	vector<unsigned char> discard, payload;
+	send_receive_message(win, READ_WINDOW, discard, payload);
+	decode(payload, data);
+}
 
-			device->read(PRESSURECH4, data.pressure[3]);
-			if(! cont)
-				break;
-			wait(10);
+/* Must be called with iomutex held */
+template<typename T> void Agilent4uhv::_write_window(const int win, const T &data)
+{
+	vector<unsigned char> payload, discard;
+	encode(data, payload);
+	_send_receive_message(win, WRITE_WINDOW, payload, discard);
+}
 
-			device->read(OPERATINGMODE, data.autostart);
-			if(! cont)
-				break;
-			wait(10);
+template<typename T> void Agilent4uhv::write_window(const int win, const T &data)
+{
+	vector<unsigned char> payload, discard;
+	encode(data, payload);
+	send_receive_message(win, WRITE_WINDOW, payload, discard);
+}
 
-			device->read(PROTECT, data.protect);
-			if(! cont)
-				break;
-			wait(10);
+template<typename T> void Agilent4uhv::read_window_from_cache(const int win , T &data)
+{
+	vector<unsigned char> payload;
+	cache.get(win, payload);
+	assert(! payload.empty());
+	decode(payload, data);
+}
+	
+/* Must be called with iomutex held */
+void Agilent4uhv::_read_window_into_cache(const int win)
+{
+	vector<unsigned char> discard, payload;
+	send_receive_message(win, READ_WINDOW, discard, payload);
+	cache.set(win, payload);
+}
 
-			device->read(FIXEDSTEP, data.fs);
-			if(! cont)
-				break;
-			wait(10);
+void Agilent4uhv::read_window_into_cache(const int win)
+{
+	vector<unsigned char> discard, payload;
+	send_receive_message(win, READ_WINDOW, discard, payload);
+	cache.set(win, payload);
+}
 
-			device->read(STATUSSETPOINT, data.ssp);
-			if(! cont)
-				break;
-			wait(10);
+void Agilent4uhv::check_state()
+{
+	int m;
+	read_window_from_cache(8, m);
+	string mode;
+	switch (m) {
+		case 0:	mode = "Serial"; break;
+		case 1: mode = "Remote"; break;
+		case 2:	mode = "Local";	break;
+		case 3:	mode = "LAN"; break;
+	};
+	int status;
+	read_window_from_cache(205, status);
+	switch (status) {
+		case 0:
+			set_state(Tango::ON);
+			set_status("The device is in ON state (" + mode + ")");
+			break;
+		case 111111:
+			set_state(Tango::UNKNOWN);
+			set_status("The device is in UNKNOWN state (" + mode + ")");
+			break;
+		default:
+			set_state(Tango::FAULT);
+			set_status("The device is in FAULT state (" + mode + ")");
+	}
+}
 
-			device->read(INTERLOCKSTATUS, data.is);
-			if(! cont)
-				break;
-			wait(10);
+void* Agilent4uhvWorker::run_undetached(void * /*ptr*/)
+{
+	DEBUG_STREAM << "Worker::run_undetached() - enter" << endl;
 
-			device->write(SETCHANNEL, channels);
-			device->read(ERRORCODE, data.ec);
-			if(! cont)
-				break;
-			wait(10);
+	vector<int>::const_iterator it;
+	it = device->polled_windows.begin();
 
-			data.state = Tango::ON;
-			data.status = "The device is in ON state";
+	while(cont) {
+		DEBUG_STREAM << "Worker::run_undetached() - loop" << endl;
+		try {
+			usleep(device->pollingSleep);
+			if (*it > 1000) {
+				/* Set channel */
+				omni_mutex_lock guardio(device->iomutex);
+				device->_write_window(505, *it - 2060);
+				vector<unsigned char> discard, payload;
+				/* Retrieve status of the previously set up channel */
+				device->_send_receive_message(206, READ_WINDOW, discard, payload);
+				/* Save as 206X into the cache */
+				device->cache.set(*it, payload);
+			} else {
+				device->read_window_into_cache(*it);
+			}
+			if (++it == device->polled_windows.end()) {
+				it = device->polled_windows.begin();
+			}
 		} catch(Tango::DevFailed &e) {
-			data.state = Tango::FAULT;
-			data.status = string(e.errors[0].desc);
+			/* Restart from begin */
+			it = device->polled_windows.begin();
+			/* Set UNKNOWN state */
+			static const int m[] = {STX, ADDR, '2', '0', '5', READ_WINDOW,
+				'1', '1', '1', '1', '1', '1', ETX, 0x38, 0x34};
+			vector<unsigned char> message(m, m + sizeof(m) / sizeof(m[0]));
+			device->cache.set(205, message);
+			assert(false);
 		}
-
-		// Copy data
-		device->data_mutex.lock();
-		device->data = data;
-		device->data_mutex.unlock();
 	}
 
 	DEBUG_STREAM << "Worker::run_undetached() - exit" << endl;
diff --git a/src/Agilent4uhv.h b/src/Agilent4uhv.h
index e627befa07d19503fdb0479dc6f51b1e8c6349b4..3ba7951fd4a26895abf94c52c01cd199aa6177e0 100644
--- a/src/Agilent4uhv.h
+++ b/src/Agilent4uhv.h
@@ -53,33 +53,28 @@ namespace Agilent4uhv_ns
 /*----- PROTECTED REGION ID(Agilent4uhv::Additional Class Declarations) ENABLED START -----*/
 
 //	Additional Class Declarations
-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;
+#define MAX_WINDOWS 2100 /* Necessary fot the 206 + channel trick */
+enum windowType { READ_WINDOW = 0x30, WRITE_WINDOW = 0x31 };
+class Cache {
+	omni_mutex mutex[MAX_WINDOWS];
+	vector<unsigned char> data[MAX_WINDOWS];
+	Cache(const Cache &source);
+public:
+	Cache() {}
+	void get(const int index, vector<unsigned char> &v) {
+		assert(index > 0 && index < MAX_WINDOWS);
+		omni_mutex_lock guard(mutex[index]);
+		v = data[index];
+	}
+	void set(const int index, const vector<unsigned char> &v) {
+		assert(index > 0 && index < MAX_WINDOWS);
+		omni_mutex_lock guard(mutex[index]);
+		data[index] = v;
+	}
 };
 
+class Agilent4uhvWorker;
+
 /*----- PROTECTED REGION END -----*/	//	Agilent4uhv::Additional Class Declarations
 
 class Agilent4uhv : public Serial2Client_ns::Serial2Client
@@ -88,21 +83,22 @@ class Agilent4uhv : public Serial2Client_ns::Serial2Client
 /*----- PROTECTED REGION ID(Agilent4uhv::Data Members) ENABLED START -----*/
 
 //	Add your own data members
-	Tango::DevUShort nchannel;
+	vector<string> channels;
 	string init_error;
-	bool odd_channel_quirk;
 
+public:
 	omni_mutex iomutex;
 
-public:
-	Worker *worker;
-	Data data;
-	omni_mutex data_mutex;
+	Agilent4uhvWorker *worker;
+	vector<int> polled_windows;
+	Cache cache;
 
 /*----- PROTECTED REGION END -----*/	//	Agilent4uhv::Data Members
 
 //	Device property data members
 public:
+	//	PollingSleep:	Sleep between hardware requests made by internal thread
+	Tango::DevLong	pollingSleep;
 
 	bool	mandatoryNotDefined;
 
@@ -110,7 +106,7 @@ public:
 public:
 	Tango::DevString	*attr_Model_read;
 	Tango::DevString	*attr_SerialNumber_read;
-	Tango::DevFloat	*attr_Temperature_read;
+	Tango::DevDouble	*attr_TemperatureFan_read;
 
 //	Constructors and destructors
 public:
@@ -152,6 +148,10 @@ 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.
 	 */
@@ -191,14 +191,14 @@ public:
 	virtual void read_SerialNumber(Tango::Attribute &attr);
 	virtual bool is_SerialNumber_allowed(Tango::AttReqType type);
 /**
- *	Attribute Temperature related methods
+ *	Attribute TemperatureFan related methods
  *	Description: 
  *
- *	Data type:	Tango::DevFloat
+ *	Data type:	Tango::DevDouble
  *	Attr type:	Scalar
  */
-	virtual void read_Temperature(Tango::Attribute &attr);
-	virtual bool is_Temperature_allowed(Tango::AttReqType type);
+	virtual void read_TemperatureFan(Tango::Attribute &attr);
+	virtual bool is_TemperatureFan_allowed(Tango::AttReqType type);
 
 //	Dynamic attribute methods
 public:
@@ -236,7 +236,7 @@ public:
 	 *	Attribute PowerMaxX related methods
 	 *	Description: 
 	 *
-	 *	Data type:	Tango::DevUShort
+	 *	Data type:	Tango::DevLong
 	 *	Attr type:	Scalar
 	 */
 	virtual void read_PowerMaxX(Tango::Attribute &attr);
@@ -244,14 +244,14 @@ public:
 	virtual bool is_PowerMaxX_allowed(Tango::AttReqType type);
 	void add_PowerMaxX_dynamic_attribute(string attname);
 	void remove_PowerMaxX_dynamic_attribute(string attname);
-	Tango::DevUShort *get_PowerMaxX_data_ptr(string &name);
-	map<string,Tango::DevUShort>	   PowerMaxX_data;
+	Tango::DevLong *get_PowerMaxX_data_ptr(string &name);
+	map<string,Tango::DevLong>	   PowerMaxX_data;
 
 	/**
 	 *	Attribute VTargetX related methods
 	 *	Description: 
 	 *
-	 *	Data type:	Tango::DevUShort
+	 *	Data type:	Tango::DevLong
 	 *	Attr type:	Scalar
 	 */
 	virtual void read_VTargetX(Tango::Attribute &attr);
@@ -259,14 +259,14 @@ public:
 	virtual bool is_VTargetX_allowed(Tango::AttReqType type);
 	void add_VTargetX_dynamic_attribute(string attname);
 	void remove_VTargetX_dynamic_attribute(string attname);
-	Tango::DevUShort *get_VTargetX_data_ptr(string &name);
-	map<string,Tango::DevUShort>	   VTargetX_data;
+	Tango::DevLong *get_VTargetX_data_ptr(string &name);
+	map<string,Tango::DevLong>	   VTargetX_data;
 
 	/**
 	 *	Attribute IProtectX related methods
 	 *	Description: 
 	 *
-	 *	Data type:	Tango::DevUShort
+	 *	Data type:	Tango::DevLong
 	 *	Attr type:	Scalar
 	 */
 	virtual void read_IProtectX(Tango::Attribute &attr);
@@ -274,8 +274,8 @@ public:
 	virtual bool is_IProtectX_allowed(Tango::AttReqType type);
 	void add_IProtectX_dynamic_attribute(string attname);
 	void remove_IProtectX_dynamic_attribute(string attname);
-	Tango::DevUShort *get_IProtectX_data_ptr(string &name);
-	map<string,Tango::DevUShort>	   IProtectX_data;
+	Tango::DevLong *get_IProtectX_data_ptr(string &name);
+	map<string,Tango::DevLong>	   IProtectX_data;
 
 	/**
 	 *	Attribute SetPointX related methods
@@ -296,15 +296,15 @@ public:
 	 *	Attribute TemperatureHVX related methods
 	 *	Description: 
 	 *
-	 *	Data type:	Tango::DevFloat
+	 *	Data type:	Tango::DevDouble
 	 *	Attr type:	Scalar
 	 */
 	virtual void read_TemperatureHVX(Tango::Attribute &attr);
 	virtual bool is_TemperatureHVX_allowed(Tango::AttReqType type);
 	void add_TemperatureHVX_dynamic_attribute(string attname);
 	void remove_TemperatureHVX_dynamic_attribute(string attname);
-	Tango::DevFloat *get_TemperatureHVX_data_ptr(string &name);
-	map<string,Tango::DevFloat>	   TemperatureHVX_data;
+	Tango::DevDouble *get_TemperatureHVX_data_ptr(string &name);
+	map<string,Tango::DevDouble>	   TemperatureHVX_data;
 
 	/**
 	 *	Attribute VoltageX related methods
@@ -475,64 +475,28 @@ public:
 
 
 //	Command related methods
+public:
+
+//	Dynamic commands methods
 public:
 	/**
-	 *	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
+	 *	Command OffHVX related method
 	 *	Description: 
 	 *
 	 */
-	virtual void on_hv3();
-	virtual bool is_OnHV3_allowed(const CORBA::Any &any);
+	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);
 	/**
-	 *	Command OnHV4 related method
+	 *	Command OnHVX related method
 	 *	Description: 
 	 *
 	 */
-	virtual void on_hv4();
-	virtual bool is_OnHV4_allowed(const CORBA::Any &any);
-
+	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);
 
 	//--------------------------------------------------------
 	/**
@@ -545,57 +509,39 @@ public:
 /*----- PROTECTED REGION ID(Agilent4uhv::Additional Method prototypes) ENABLED START -----*/
 
 //	Additional Method prototypes
-	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 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()");
-	}
-	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);
+	void check_init();
+
+	void init_header(const int win, const windowType type, 
+			vector<unsigned char> &header);
+	int calc_crc(const vector<unsigned char> &header, 
+			const vector<unsigned char> &payload);
+	void check_crc(const vector<unsigned char> &header,
+			const vector<unsigned char> &payload, 
+			const vector<unsigned char> &footer);
+	void init_footer(const int computed_crc, vector<unsigned char> &footer);
+
+	void send_message(const int win, const windowType type, 
+			const vector<unsigned char> &payload);
+	void receive_message(vector<unsigned char> &payload);
+	void _send_receive_message(const int win, const windowType type, 
+		const vector<unsigned char> &answer, vector<unsigned char> &reply);
+	void send_receive_message(const int win, const windowType type, 
+		const vector<unsigned char> &answer, vector<unsigned char> &reply);
+	void decode(const vector<unsigned char> &payload, bool &data);
+	void decode(const vector<unsigned char> &payload, int &data);
+	void decode(const vector<unsigned char> &payload, double &data);
+	void decode(const vector<unsigned char> &payload, string &data);
+	void encode(const bool &data, vector<unsigned char> &payload);
+	void encode(const int &data, vector<unsigned char> &payload);
+	void encode(const double &data, vector<unsigned char> &payload);
+	void encode(const string &data, vector<unsigned char> &payload);
+	template<typename T> void read_window(const int win, T &data);
+	template<typename T> void _write_window(const int win, const T &data);
+	template<typename T> void write_window(const int win, const T &data);
+	template<typename T> void read_window_from_cache(const int win, T &data);
+	void _read_window_into_cache(const int win);
+	void read_window_into_cache(const int win);
+	void check_state();
 
 /*----- PROTECTED REGION END -----*/	//	Agilent4uhv::Additional Method prototypes
 };
@@ -603,39 +549,25 @@ public:
 /*----- PROTECTED REGION ID(Agilent4uhv::Additional Classes Definitions) ENABLED START -----*/
 
 //	Additional Classes Definitions
-class Worker : public omni_thread, public Tango::LogAdapter
+class Agilent4uhvWorker : public omni_thread, public Tango::LogAdapter
 {
 	Agilent4uhv *device;
 	void* run_undetached(void*);
-	bool cont;
+	volatile bool cont;
 
-	public:
-	void start(void) {
+public:
+	Agilent4uhvWorker(Agilent4uhv *device_) :
+		LogAdapter((Tango::DeviceImpl*)device_),
+		device(device_), cont(false) {}
+
+	void start() {
+		cont = true;
 		start_undetached();
 	}
 
-	void stop(void) {
+	void stop() {
 		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;
-		}
 };
 
 
diff --git a/src/Agilent4uhv.xmi b/src/Agilent4uhv.xmi
index ca871eacd56e327682ca2823ab20f66afaac4ae5..28a071760f0016fda43139566e119910ece73a31 100644
--- a/src/Agilent4uhv.xmi
+++ b/src/Agilent4uhv.xmi
@@ -1,63 +1,20 @@
 <?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/fermi/servers/4uhv/src" language="Cpp" filestogenerate="XMI   file,Code files,Protected Regions" license="GPL" hasMandatoryProperty="true" hasConcreteProperty="false" hasAbstractCommand="false" hasAbstractAttribute="false">
+    <description description="" title="" sourcePath="/home/alessio/Sources/git-trees/4uhv/src" language="Cpp" filestogenerate="XMI   file,Code files,Protected Regions" license="GPL" hasMandatoryProperty="true" hasConcreteProperty="true" hasAbstractCommand="false" hasAbstractAttribute="false">
       <inheritances classname="Device_Impl" sourcePath=""/>
-      <inheritances classname="Serial2Client" sourcePath="../../serial2/src"/>
+      <inheritances classname="Serial2Client" sourcePath="../../serial2client/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"/>
     </description>
     <deviceProperties name="DeviceName" mandatory="true" description="">
       <type xsi:type="pogoDsl:StringType"/>
       <status abstract="false" inherited="true" concrete="true"/>
     </deviceProperties>
-    <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"/>
-      <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>
+    <deviceProperties name="PollingSleep" description="Sleep between hardware requests made by internal thread">
+      <type xsi:type="pogoDsl:IntType"/>
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-      <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>
+      <DefaultPropValue>0</DefaultPropValue>
+    </deviceProperties>
     <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"/>
@@ -76,31 +33,7 @@
       </argout>
       <status abstract="true" inherited="true" concrete="true"/>
     </commands>
-    <commands name="OffHV3" description="" execMethod="off_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="OffHV4" description="" execMethod="off_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>
-    <commands name="OnHV3" description="" execMethod="on_hv3" displayLevel="OPERATOR" polledPeriod="0" isDynamic="false">
+    <dynamicCommands name="OffHVX" description="" execMethod="off_hvx" displayLevel="OPERATOR" polledPeriod="0" isDynamic="true">
       <argin description="">
         <type xsi:type="pogoDsl:VoidType"/>
       </argin>
@@ -109,10 +42,9 @@
       </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">
+    </dynamicCommands>
+    <dynamicCommands name="OnHVX" description="" execMethod="on_hvx" displayLevel="OPERATOR" polledPeriod="0" isDynamic="true">
       <argin description="">
         <type xsi:type="pogoDsl:VoidType"/>
       </argin>
@@ -121,10 +53,9 @@
       </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">
+    </dynamicCommands>
+    <attributes name="Model" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false">
       <dataType xsi:type="pogoDsl:StringType"/>
       <changeEvent fire="false" libCheckCriteria="false"/>
       <archiveEvent fire="false" libCheckCriteria="false"/>
@@ -132,10 +63,9 @@
       <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="false" isDynamic="false">
+    <attributes name="SerialNumber" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false">
       <dataType xsi:type="pogoDsl:StringType"/>
       <changeEvent fire="false" libCheckCriteria="false"/>
       <archiveEvent fire="false" libCheckCriteria="false"/>
@@ -143,18 +73,16 @@
       <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="false" isDynamic="false">
-      <dataType xsi:type="pogoDsl:FloatType"/>
+    <attributes name="TemperatureFan" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false">
+      <dataType xsi:type="pogoDsl:DoubleType"/>
       <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="C" standardUnit="" displayUnit="" format="" maxValue="200" minValue="0" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
       <readExcludedStates>UNKNOWN</readExcludedStates>
-      <readExcludedStates>FAULT</readExcludedStates>
       <readExcludedStates>INIT</readExcludedStates>
     </attributes>
     <dynamicAttributes name="HVX" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="false" isDynamic="true">
@@ -165,7 +93,6 @@
       <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">
@@ -176,52 +103,44 @@
       <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"/>
+      <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="" 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"/>
+      <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="" label="" unit="kV" standardUnit="" displayUnit="" format="" maxValue="7" minValue="3" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
+      <properties description="" label="" unit="V" standardUnit="" displayUnit="" format="" maxValue="7000" minValue="3000" 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"/>
+      <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="" 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">
@@ -232,21 +151,18 @@
       <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"/>
+      <dataType xsi:type="pogoDsl:DoubleType"/>
       <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="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">
@@ -257,7 +173,6 @@
       <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">
@@ -268,7 +183,6 @@
       <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">
@@ -279,7 +193,6 @@
       <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">
@@ -290,7 +203,6 @@
       <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">
@@ -301,7 +213,6 @@
       <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">
@@ -312,10 +223,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>
       <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">
@@ -326,10 +235,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>
       <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">
@@ -340,10 +247,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>
       <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">
@@ -354,7 +259,6 @@
       <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">
@@ -365,7 +269,6 @@
       <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">
@@ -376,7 +279,6 @@
       <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="">
@@ -391,9 +293,6 @@
     <states name="FAULT" description="">
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
     </states>
-    <states name="INIT" description="">
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-    </states>
     <preferences docHome="./doc_html" makefileHome="$(TANGO_HOME)"/>
   </classes>
 </pogoDsl:PogoSystem>
diff --git a/src/Agilent4uhvClass.cpp b/src/Agilent4uhvClass.cpp
index 17fe26cc39fc2e8a6d3a45a4e0ecd377fe3daca5..f38c055df05ab9b7e25545c1399f8dd0d1472dd4 100644
--- a/src/Agilent4uhvClass.cpp
+++ b/src/Agilent4uhvClass.cpp
@@ -1,5 +1,4 @@
 /*----- PROTECTED REGION ID(Agilent4uhvClass.cpp) ENABLED START -----*/
-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:  $";
@@ -160,7 +159,7 @@ Agilent4uhvClass *Agilent4uhvClass::instance()
 //===================================================================
 //--------------------------------------------------------
 /**
- * method : 		OffHV1Class::execute()
+ * method : 		OffHVXClass::execute()
  * description : 	method to trigger the execution of the command.
  *
  * @param	device	The device on which the command must be executed
@@ -169,16 +168,16 @@ Agilent4uhvClass *Agilent4uhvClass::instance()
  *	returns The command output data (packed in the Any object)
  */
 //--------------------------------------------------------
-CORBA::Any *OffHV1Class::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
+CORBA::Any *OffHVXClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
 {
-	cout2 << "OffHV1Class::execute(): arrived" << endl;
-	((static_cast<Agilent4uhv *>(device))->off_hv1());
+	cout2 << "OffHVXClass::execute(): arrived" << endl;
+	((static_cast<Agilent4uhv *>(device))->off_hvx(*this));
 	return new CORBA::Any();
 }
 
 //--------------------------------------------------------
 /**
- * method : 		OffHV2Class::execute()
+ * method : 		OnHVXClass::execute()
  * description : 	method to trigger the execution of the command.
  *
  * @param	device	The device on which the command must be executed
@@ -187,118 +186,10 @@ CORBA::Any *OffHV1Class::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const C
  *	returns The command output data (packed in the Any object)
  */
 //--------------------------------------------------------
-CORBA::Any *OffHV2Class::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
+CORBA::Any *OnHVXClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
 {
-	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());
+	cout2 << "OnHVXClass::execute(): arrived" << endl;
+	((static_cast<Agilent4uhv *>(device))->on_hvx(*this));
 	return new CORBA::Any();
 }
 
@@ -371,6 +262,20 @@ void Agilent4uhvClass::set_default_property()
 	//	Set Default Class Properties
 
 	//	Set Default device Properties
+	prop_name = "PollingSleep";
+	prop_desc = "Sleep between hardware requests made by internal thread (max value is 1000000)";
+	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);
 }
 
 //--------------------------------------------------------
@@ -547,6 +452,7 @@ 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))
@@ -626,29 +532,29 @@ void Agilent4uhvClass::attribute_factory(vector<Tango::Attr *> &att_list)
 	//	Not Memorized
 	att_list.push_back(serialnumber);
 
-	//	Attribute : Temperature
-	TemperatureAttrib	*temperature = new TemperatureAttrib();
-	Tango::UserDefaultAttrProp	temperature_prop;
-	//	description	not set for Temperature
-	//	label	not set for Temperature
-	temperature_prop.set_unit("C");
-	//	standard_unit	not set for Temperature
-	//	display_unit	not set for Temperature
-	//	format	not set for Temperature
-	temperature_prop.set_max_value("200");
-	temperature_prop.set_min_value("0");
-	//	max_alarm	not set for Temperature
-	//	min_alarm	not set for Temperature
-	//	max_warning	not set for Temperature
-	//	min_warning	not set for Temperature
-	//	delta_t	not set for Temperature
-	//	delta_val	not set for Temperature
+	//	Attribute : TemperatureFan
+	TemperatureFanAttrib	*temperaturefan = new TemperatureFanAttrib();
+	Tango::UserDefaultAttrProp	temperaturefan_prop;
+	//	description	not set for TemperatureFan
+	//	label	not set for TemperatureFan
+	temperaturefan_prop.set_unit("C");
+	//	standard_unit	not set for TemperatureFan
+	//	display_unit	not set for TemperatureFan
+	//	format	not set for TemperatureFan
+	temperaturefan_prop.set_max_value("200");
+	temperaturefan_prop.set_min_value("0");
+	//	max_alarm	not set for TemperatureFan
+	//	min_alarm	not set for TemperatureFan
+	//	max_warning	not set for TemperatureFan
+	//	min_warning	not set for TemperatureFan
+	//	delta_t	not set for TemperatureFan
+	//	delta_val	not set for TemperatureFan
 	
-	temperature->set_default_properties(temperature_prop);
+	temperaturefan->set_default_properties(temperaturefan_prop);
 	//	Not Polled
-	temperature->set_disp_level(Tango::OPERATOR);
+	temperaturefan->set_disp_level(Tango::OPERATOR);
 	//	Not Memorized
-	att_list.push_back(temperature);
+	att_list.push_back(temperaturefan);
 
 
 	//	Create a list of static attributes
@@ -696,79 +602,7 @@ 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 066a9d2718c680fafef0b521532276b0af7b5fb9..269e9c42b0f643d8f99e09d7eea0bd8249c7d3f8 100644
--- a/src/Agilent4uhvClass.h
+++ b/src/Agilent4uhvClass.h
@@ -86,17 +86,17 @@ public:
 		{return (static_cast<Agilent4uhv *>(dev))->is_SerialNumber_allowed(ty);}
 };
 
-//	Attribute Temperature class definition
-class TemperatureAttrib: public Tango::Attr
+//	Attribute TemperatureFan class definition
+class TemperatureFanAttrib: public Tango::Attr
 {
 public:
-	TemperatureAttrib():Attr("Temperature",
-			Tango::DEV_FLOAT, Tango::READ) {};
-	~TemperatureAttrib() {};
+	TemperatureFanAttrib():Attr("TemperatureFan",
+			Tango::DEV_DOUBLE, Tango::READ) {};
+	~TemperatureFanAttrib() {};
 	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
-		{(static_cast<Agilent4uhv *>(dev))->read_Temperature(att);}
+		{(static_cast<Agilent4uhv *>(dev))->read_TemperatureFan(att);}
 	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
-		{return (static_cast<Agilent4uhv *>(dev))->is_Temperature_allowed(ty);}
+		{return (static_cast<Agilent4uhv *>(dev))->is_TemperatureFan_allowed(ty);}
 };
 
 
@@ -136,7 +136,7 @@ class PowerMaxXAttrib: public Tango::Attr
 {
 public:
 	PowerMaxXAttrib(const string &att_name):Attr(att_name.c_str(), 
-			Tango::DEV_USHORT, Tango::READ_WRITE) {};
+			Tango::DEV_LONG, Tango::READ_WRITE) {};
 	~PowerMaxXAttrib() {};
 	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
 		{(static_cast<Agilent4uhv *>(dev))->read_PowerMaxX(att);}
@@ -151,7 +151,7 @@ class VTargetXAttrib: public Tango::Attr
 {
 public:
 	VTargetXAttrib(const string &att_name):Attr(att_name.c_str(), 
-			Tango::DEV_USHORT, Tango::READ_WRITE) {};
+			Tango::DEV_LONG, Tango::READ_WRITE) {};
 	~VTargetXAttrib() {};
 	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
 		{(static_cast<Agilent4uhv *>(dev))->read_VTargetX(att);}
@@ -166,7 +166,7 @@ class IProtectXAttrib: public Tango::Attr
 {
 public:
 	IProtectXAttrib(const string &att_name):Attr(att_name.c_str(), 
-			Tango::DEV_USHORT, Tango::READ_WRITE) {};
+			Tango::DEV_LONG, Tango::READ_WRITE) {};
 	~IProtectXAttrib() {};
 	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
 		{(static_cast<Agilent4uhv *>(dev))->read_IProtectX(att);}
@@ -196,7 +196,7 @@ class TemperatureHVXAttrib: public Tango::Attr
 {
 public:
 	TemperatureHVXAttrib(const string &att_name):Attr(att_name.c_str(), 
-			Tango::DEV_FLOAT, Tango::READ) {};
+			Tango::DEV_DOUBLE, Tango::READ) {};
 	~TemperatureHVXAttrib() {};
 	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
 		{(static_cast<Agilent4uhv *>(dev))->read_TemperatureHVX(att);}
@@ -355,151 +355,13 @@ public:
 
 
 //=========================================
-//	Define classes for commands
+//	Define classes for dynamic commands
 //=========================================
-//	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
+//	Command OffHVX class definition
+class OffHVXClass : public Tango::Command
 {
 public:
-	OnHV3Class(const char   *name,
+	OffHVXClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -507,22 +369,22 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	OnHV3Class(const char   *name,
+	OffHVXClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~OnHV3Class() {};
+	~OffHVXClass() {};
 	
 	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_OnHV3_allowed(any);}
+	{return (static_cast<Agilent4uhv *>(dev))->is_OffHVX_allowed(any);}
 };
 
-//	Command OnHV4 class definition
-class OnHV4Class : public Tango::Command
+//	Command OnHVX class definition
+class OnHVXClass : public Tango::Command
 {
 public:
-	OnHV4Class(const char   *name,
+	OnHVXClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -530,15 +392,15 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	OnHV4Class(const char   *name,
+	OnHVXClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~OnHV4Class() {};
+	~OnHVXClass() {};
 	
 	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_OnHV4_allowed(any);}
+	{return (static_cast<Agilent4uhv *>(dev))->is_OnHVX_allowed(any);}
 };
 
 
diff --git a/src/Agilent4uhvDynAttrUtils.cpp b/src/Agilent4uhvDynAttrUtils.cpp
index 2f991201d1fc3fbaef8c55c827b4daa855510ca0..99dc6200b47f5c7c9fbefd239c010969f50b4ec0 100644
--- a/src/Agilent4uhvDynAttrUtils.cpp
+++ b/src/Agilent4uhvDynAttrUtils.cpp
@@ -1,5 +1,4 @@
 /*----- PROTECTED REGION ID(Agilent4uhv::DynAttrUtils.cpp) ENABLED START -----*/
-static const char *RcsId = "$Id: Agilent4uhvDynAttrUtils.cpp,v 1.6 2014-10-15 13:23:58 alessio Exp $";
 //=============================================================================
 //
 // file :        Agilent4uhvDynAttrUtils.cpp
@@ -46,11 +45,11 @@ static const char *RcsId = "$Id: Agilent4uhvDynAttrUtils.cpp,v 1.6 2014-10-15 13
 //================================================================
 //  HVX               |  Tango::DevState	Scalar
 //  DeviceNumberX     |  Tango::DevLong	Scalar
-//  PowerMaxX         |  Tango::DevUShort	Scalar
-//  VTargetX          |  Tango::DevUShort	Scalar
-//  IProtectX         |  Tango::DevUShort	Scalar
+//  PowerMaxX         |  Tango::DevLong	Scalar
+//  VTargetX          |  Tango::DevLong	Scalar
+//  IProtectX         |  Tango::DevLong	Scalar
 //  SetPointX         |  Tango::DevDouble	Scalar
-//  TemperatureHVX    |  Tango::DevFloat	Scalar
+//  TemperatureHVX    |  Tango::DevDouble	Scalar
 //  VoltageX          |  Tango::DevDouble	Scalar
 //  CurrentX          |  Tango::DevDouble	Scalar
 //  PressureX         |  Tango::DevDouble	Scalar
@@ -72,6 +71,8 @@ static const char *RcsId = "$Id: Agilent4uhvDynAttrUtils.cpp,v 1.6 2014-10-15 13
 //
 //  Command name  |  Method name
 //================================================================
+//  OffHVX        |  off_hvx
+//  OnHVX         |  on_hvx
 //================================================================
 
 namespace Agilent4uhv_ns
@@ -242,7 +243,7 @@ void Agilent4uhv::add_PowerMaxX_dynamic_attribute(string attname)
 void Agilent4uhv::remove_PowerMaxX_dynamic_attribute(string attname)
 {
 	remove_attribute(attname, true);
-	map<string,Tango::DevUShort>::iterator ite;
+	map<string,Tango::DevLong>::iterator ite;
     if ((ite=PowerMaxX_data.find(attname))!=PowerMaxX_data.end())
     {
     	/*----- PROTECTED REGION ID(Agilent4uhv::remove_PowerMaxX_dynamic_attribute) ENABLED START -----*/
@@ -265,12 +266,12 @@ void Agilent4uhv::add_VTargetX_dynamic_attribute(string attname)
 	Tango::UserDefaultAttrProp	vtargetx_prop;
 	//	description	not set for VTargetX
 	//	label	not set for VTargetX
-	vtargetx_prop.set_unit("kV");
+	vtargetx_prop.set_unit("V");
 	//	standard_unit	not set for VTargetX
 	//	display_unit	not set for VTargetX
 	//	format	not set for VTargetX
-	vtargetx_prop.set_max_value("7");
-	vtargetx_prop.set_min_value("3");
+	vtargetx_prop.set_max_value("7000");
+	vtargetx_prop.set_min_value("3000");
 	//	max_alarm	not set for VTargetX
 	//	min_alarm	not set for VTargetX
 	//	max_warning	not set for VTargetX
@@ -299,7 +300,7 @@ void Agilent4uhv::add_VTargetX_dynamic_attribute(string attname)
 void Agilent4uhv::remove_VTargetX_dynamic_attribute(string attname)
 {
 	remove_attribute(attname, true);
-	map<string,Tango::DevUShort>::iterator ite;
+	map<string,Tango::DevLong>::iterator ite;
     if ((ite=VTargetX_data.find(attname))!=VTargetX_data.end())
     {
     	/*----- PROTECTED REGION ID(Agilent4uhv::remove_VTargetX_dynamic_attribute) ENABLED START -----*/
@@ -356,7 +357,7 @@ void Agilent4uhv::add_IProtectX_dynamic_attribute(string attname)
 void Agilent4uhv::remove_IProtectX_dynamic_attribute(string attname)
 {
 	remove_attribute(attname, true);
-	map<string,Tango::DevUShort>::iterator ite;
+	map<string,Tango::DevLong>::iterator ite;
     if ((ite=IProtectX_data.find(attname))!=IProtectX_data.end())
     {
     	/*----- PROTECTED REGION ID(Agilent4uhv::remove_IProtectX_dynamic_attribute) ENABLED START -----*/
@@ -470,7 +471,7 @@ void Agilent4uhv::add_TemperatureHVX_dynamic_attribute(string attname)
 void Agilent4uhv::remove_TemperatureHVX_dynamic_attribute(string attname)
 {
 	remove_attribute(attname, true);
-	map<string,Tango::DevFloat>::iterator ite;
+	map<string,Tango::DevDouble>::iterator ite;
     if ((ite=TemperatureHVX_data.find(attname))!=TemperatureHVX_data.end())
     {
     	/*----- PROTECTED REGION ID(Agilent4uhv::remove_TemperatureHVX_dynamic_attribute) ENABLED START -----*/
@@ -1162,9 +1163,9 @@ Tango::DevLong *Agilent4uhv::get_DeviceNumberX_data_ptr(string &name)
  *  parameter attname: the specified attribute name.
  */
 //--------------------------------------------------------
-Tango::DevUShort *Agilent4uhv::get_PowerMaxX_data_ptr(string &name)
+Tango::DevLong *Agilent4uhv::get_PowerMaxX_data_ptr(string &name)
 {
-	map<string,Tango::DevUShort>::iterator ite;
+	map<string,Tango::DevLong>::iterator ite;
     if ((ite=PowerMaxX_data.find(name))==PowerMaxX_data.end())
     {
 		TangoSys_OMemStream	tms;
@@ -1183,9 +1184,9 @@ Tango::DevUShort *Agilent4uhv::get_PowerMaxX_data_ptr(string &name)
  *  parameter attname: the specified attribute name.
  */
 //--------------------------------------------------------
-Tango::DevUShort *Agilent4uhv::get_VTargetX_data_ptr(string &name)
+Tango::DevLong *Agilent4uhv::get_VTargetX_data_ptr(string &name)
 {
-	map<string,Tango::DevUShort>::iterator ite;
+	map<string,Tango::DevLong>::iterator ite;
     if ((ite=VTargetX_data.find(name))==VTargetX_data.end())
     {
 		TangoSys_OMemStream	tms;
@@ -1204,9 +1205,9 @@ Tango::DevUShort *Agilent4uhv::get_VTargetX_data_ptr(string &name)
  *  parameter attname: the specified attribute name.
  */
 //--------------------------------------------------------
-Tango::DevUShort *Agilent4uhv::get_IProtectX_data_ptr(string &name)
+Tango::DevLong *Agilent4uhv::get_IProtectX_data_ptr(string &name)
 {
-	map<string,Tango::DevUShort>::iterator ite;
+	map<string,Tango::DevLong>::iterator ite;
     if ((ite=IProtectX_data.find(name))==IProtectX_data.end())
     {
 		TangoSys_OMemStream	tms;
@@ -1246,9 +1247,9 @@ Tango::DevDouble *Agilent4uhv::get_SetPointX_data_ptr(string &name)
  *  parameter attname: the specified attribute name.
  */
 //--------------------------------------------------------
-Tango::DevFloat *Agilent4uhv::get_TemperatureHVX_data_ptr(string &name)
+Tango::DevDouble *Agilent4uhv::get_TemperatureHVX_data_ptr(string &name)
 {
-	map<string,Tango::DevFloat>::iterator ite;
+	map<string,Tango::DevDouble>::iterator ite;
     if ((ite=TemperatureHVX_data.find(name))==TemperatureHVX_data.end())
     {
 		TangoSys_OMemStream	tms;
@@ -1497,5 +1498,63 @@ Tango::DevLong *Agilent4uhv::get_StatMaskX_data_ptr(string &name)
 //	Add/Remove dynamic command methods
 //=============================================================
 
+//--------------------------------------------------------
+/**
+ *	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);
+}
+//--------------------------------------------------------
+/**
+ *	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);
+}
 
 } //	namespace
diff --git a/src/Agilent4uhvStateMachine.cpp b/src/Agilent4uhvStateMachine.cpp
index 23e2e390500a8b9f4e94f249ef5bc9e0116dee9d..d38264bc273ee984c0f11c568ff46635d0f66eea 100644
--- a/src/Agilent4uhvStateMachine.cpp
+++ b/src/Agilent4uhvStateMachine.cpp
@@ -1,5 +1,4 @@
 /*----- PROTECTED REGION ID(Agilent4uhvStateMachine.cpp) ENABLED START -----*/
-static const char *RcsId = "$Id: Agilent4uhvStateMachine.cpp,v 1.9 2018-05-10 08:04:51 alessio Exp $";
 //=============================================================================
 //
 // file :        Agilent4uhvStateMachine.cpp
@@ -46,7 +45,6 @@ static const char *RcsId = "$Id: Agilent4uhvStateMachine.cpp,v 1.9 2018-05-10 08
 //  ALARM    |  
 //  UNKNOWN  |  
 //  FAULT    |  
-//  INIT     |  
 
 
 namespace Agilent4uhv_ns
@@ -69,7 +67,6 @@ bool Agilent4uhv::is_Model_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::ModelStateAllowed_READ) ENABLED START -----*/
@@ -96,7 +93,6 @@ bool Agilent4uhv::is_SerialNumber_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::SerialNumberStateAllowed_READ) ENABLED START -----*/
@@ -111,11 +107,11 @@ bool Agilent4uhv::is_SerialNumber_allowed(TANGO_UNUSED(Tango::AttReqType type))
 
 //--------------------------------------------------------
 /**
- *	Method      : Agilent4uhv::is_Temperature_allowed()
- *	Description : Execution allowed for Temperature attribute
+ *	Method      : Agilent4uhv::is_TemperatureFan_allowed()
+ *	Description : Execution allowed for TemperatureFan attribute
  */
 //--------------------------------------------------------
-bool Agilent4uhv::is_Temperature_allowed(TANGO_UNUSED(Tango::AttReqType type))
+bool Agilent4uhv::is_TemperatureFan_allowed(TANGO_UNUSED(Tango::AttReqType type))
 {
 
 	//	Check access type.
@@ -123,12 +119,11 @@ bool Agilent4uhv::is_Temperature_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::TemperatureStateAllowed_READ) ENABLED START -----*/
-	
-	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::TemperatureStateAllowed_READ
+		/*----- PROTECTED REGION ID(Agilent4uhv::TemperatureFanStateAllowed_READ) ENABLED START -----*/
+		
+		/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::TemperatureFanStateAllowed_READ
 			return false;
 		}
 		return true;
@@ -150,7 +145,6 @@ bool Agilent4uhv::is_HVX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::HVXStateAllowed_READ) ENABLED START -----*/
@@ -176,7 +170,6 @@ bool Agilent4uhv::is_DeviceNumberX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::DeviceNumberXStateAllowed_WRITE) ENABLED START -----*/
@@ -193,7 +186,6 @@ bool Agilent4uhv::is_DeviceNumberX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::DeviceNumberXStateAllowed_READ) ENABLED START -----*/
@@ -219,7 +211,6 @@ bool Agilent4uhv::is_PowerMaxX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::PowerMaxXStateAllowed_WRITE) ENABLED START -----*/
@@ -236,7 +227,6 @@ bool Agilent4uhv::is_PowerMaxX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::PowerMaxXStateAllowed_READ) ENABLED START -----*/
@@ -262,7 +252,6 @@ bool Agilent4uhv::is_VTargetX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::VTargetXStateAllowed_WRITE) ENABLED START -----*/
@@ -279,7 +268,6 @@ bool Agilent4uhv::is_VTargetX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::VTargetXStateAllowed_READ) ENABLED START -----*/
@@ -305,7 +293,6 @@ bool Agilent4uhv::is_IProtectX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::IProtectXStateAllowed_WRITE) ENABLED START -----*/
@@ -322,7 +309,6 @@ bool Agilent4uhv::is_IProtectX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::IProtectXStateAllowed_READ) ENABLED START -----*/
@@ -348,7 +334,6 @@ bool Agilent4uhv::is_SetPointX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::SetPointXStateAllowed_WRITE) ENABLED START -----*/
@@ -365,7 +350,6 @@ bool Agilent4uhv::is_SetPointX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::SetPointXStateAllowed_READ) ENABLED START -----*/
@@ -392,7 +376,6 @@ bool Agilent4uhv::is_TemperatureHVX_allowed(TANGO_UNUSED(Tango::AttReqType type)
 	{
 		//	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::TemperatureHVXStateAllowed_READ) ENABLED START -----*/
@@ -419,7 +402,6 @@ bool Agilent4uhv::is_VoltageX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::VoltageXStateAllowed_READ) ENABLED START -----*/
@@ -446,7 +428,6 @@ bool Agilent4uhv::is_CurrentX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::CurrentXStateAllowed_READ) ENABLED START -----*/
@@ -473,7 +454,6 @@ bool Agilent4uhv::is_PressureX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::PressureXStateAllowed_READ) ENABLED START -----*/
@@ -500,7 +480,6 @@ bool Agilent4uhv::is_StateX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::StateXStateAllowed_READ) ENABLED START -----*/
@@ -527,7 +506,6 @@ bool Agilent4uhv::is_StatusX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::StatusXStateAllowed_READ) ENABLED START -----*/
@@ -553,7 +531,6 @@ bool Agilent4uhv::is_AutoStartX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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 -----*/
@@ -570,7 +547,6 @@ bool Agilent4uhv::is_AutoStartX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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 -----*/
@@ -596,7 +572,6 @@ bool Agilent4uhv::is_ProtectX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::ProtectXStateAllowed_WRITE) ENABLED START -----*/
@@ -613,7 +588,6 @@ bool Agilent4uhv::is_ProtectX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::ProtectXStateAllowed_READ) ENABLED START -----*/
@@ -639,7 +613,6 @@ bool Agilent4uhv::is_FixedStepX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::FixedStepXStateAllowed_WRITE) ENABLED START -----*/
@@ -656,7 +629,6 @@ bool Agilent4uhv::is_FixedStepX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::FixedStepXStateAllowed_READ) ENABLED START -----*/
@@ -683,7 +655,6 @@ bool Agilent4uhv::is_StatusSetPointX_allowed(TANGO_UNUSED(Tango::AttReqType type
 	{
 		//	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::StatusSetPointXStateAllowed_READ) ENABLED START -----*/
@@ -710,7 +681,6 @@ bool Agilent4uhv::is_InterlockStatusX_allowed(TANGO_UNUSED(Tango::AttReqType typ
 	{
 		//	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 -----*/
@@ -737,7 +707,6 @@ bool Agilent4uhv::is_StatMaskX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 	{
 		//	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::StatMaskXStateAllowed_READ) ENABLED START -----*/
@@ -757,146 +726,19 @@ bool Agilent4uhv::is_StatMaskX_allowed(TANGO_UNUSED(Tango::AttReqType type))
 
 //--------------------------------------------------------
 /**
- *	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
+ *	Method      : Agilent4uhv::is_OffHVX_allowed()
+ *	Description : Execution allowed for OffHVX attribute
  */
 //--------------------------------------------------------
-bool Agilent4uhv::is_OnHV3_allowed(TANGO_UNUSED(const CORBA::Any &any))
+bool Agilent4uhv::is_OffHVX_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::OnHV3StateAllowed) ENABLED START -----*/
+	/*----- PROTECTED REGION ID(Agilent4uhv::OffHVXStateAllowed) ENABLED START -----*/
 	
-	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::OnHV3StateAllowed
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::OffHVXStateAllowed
 		return false;
 	}
 	return true;
@@ -904,20 +746,19 @@ bool Agilent4uhv::is_OnHV3_allowed(TANGO_UNUSED(const CORBA::Any &any))
 
 //--------------------------------------------------------
 /**
- *	Method      : Agilent4uhv::is_OnHV4_allowed()
- *	Description : Execution allowed for OnHV4 attribute
+ *	Method      : Agilent4uhv::is_OnHVX_allowed()
+ *	Description : Execution allowed for OnHVX attribute
  */
 //--------------------------------------------------------
-bool Agilent4uhv::is_OnHV4_allowed(TANGO_UNUSED(const CORBA::Any &any))
+bool Agilent4uhv::is_OnHVX_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::OnHV4StateAllowed) ENABLED START -----*/
+	/*----- PROTECTED REGION ID(Agilent4uhv::OnHVXStateAllowed) ENABLED START -----*/
 	
-	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::OnHV4StateAllowed
+	/*----- PROTECTED REGION END -----*/	//	Agilent4uhv::OnHVXStateAllowed
 		return false;
 	}
 	return true;
diff --git a/src/MultiClassesFactory.cpp b/src/MultiClassesFactory.cpp
index d0151da165182ee76e3ec74fbf7ea2e52a2004f8..c80d9289d15f18cbefbc3626505a63b2da1660fc 100644
--- a/src/MultiClassesFactory.cpp
+++ b/src/MultiClassesFactory.cpp
@@ -1,4 +1,3 @@
-static const char *RcsId = "$Id: MultiClassesFactory.cpp,v 1.4 2018-05-10 08:04:51 alessio Exp $";
 //=============================================================================
 //
 // file :        MultiClassessFactory.cpp
diff --git a/src/main.cpp b/src/main.cpp
index 287d209b9ab6479541953e95ea7edd5798f5ae6b..5f4db5ce88a4d6697a2e534b74304ac7a75371eb 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1,5 +1,4 @@
 /*----- PROTECTED REGION ID(Agilent4uhv::main.cpp) ENABLED START -----*/
-static const char *RcsId = "$Id: main.cpp,v 1.2 2014-10-09 13:24:10 alessio Exp $";
 //=============================================================================
 //
 // file :        main.cpp