From d39bdba0f948d0a032a7e99771ded0d7a2d815cf Mon Sep 17 00:00:00 2001
From: Jade PHAM <jade.pham@synchrotron-soleil.fr>
Date: Thu, 24 Oct 2024 18:01:21 +0200
Subject: [PATCH] add TCP comm mode used by Moxa serial ethernet

---
 conanfile.py                                  |    2 +-
 doc/doc_html/AttrelectrometerChannel.html     |  172 +
 doc/doc_html/Attributes.html                  |  171 +-
 doc/doc_html/Attrrange1.html                  |  168 +
 doc/doc_html/Attrrange2.html                  |  168 +
 doc/doc_html/ClassDescription.html            |   85 +
 doc/doc_html/CmdClearRegisters.html           |   54 +
 doc/doc_html/CmdGetElectrometerTypeStr.html   |   54 +
 doc/doc_html/CmdGetGain.html                  |   54 +
 doc/doc_html/CmdGetHzFilter.html              |   54 +
 doc/doc_html/CmdGetMode.html                  |   54 +
 doc/doc_html/CmdGetPolarity.html              |   54 +
 doc/doc_html/CmdGetRange.html                 |   54 +
 doc/doc_html/CmdLocal.html                    |   54 +
 doc/doc_html/CmdMCCE2_OFF.html                |   54 +
 doc/doc_html/CmdMCCE2_ON.html                 |   54 +
 doc/doc_html/CmdRangeDOWN.html                |   54 +
 doc/doc_html/CmdRangeUP.html                  |   54 +
 doc/doc_html/CmdRemote.html                   |   54 +
 doc/doc_html/CmdReset.html                    |   54 +
 doc/doc_html/CmdSetGain.html                  |   54 +
 doc/doc_html/CmdSetHzFilter.html              |   54 +
 doc/doc_html/CmdSetLeakageZeroV2Function.html |   54 +
 doc/doc_html/CmdSetMeasureFunction.html       |   54 +
 doc/doc_html/CmdSetOffsetZeroV1Function.html  |   54 +
 doc/doc_html/CmdSetPolarity.html              |   54 +
 doc/doc_html/CmdSetRange.html                 |   54 +
 doc/doc_html/CmdSetTestFunction.html          |   54 +
 doc/doc_html/CmdSetZeroVFFunction.html        |   54 +
 doc/doc_html/CmdState.html                    |   55 +
 doc/doc_html/CmdStatus.html                   |   55 +
 doc/doc_html/Commands.html                    |  195 +
 doc/doc_html/FullDocument.html                | 2144 +++++++
 doc/doc_html/Properties.html                  |  197 +-
 doc/doc_html/States.html                      |   33 +
 doc/doc_html/TitleBanner.html                 |   14 +
 doc/doc_html/index.html                       |  171 +-
 pom.xml                                       |    2 +-
 src/ClassFactory.cpp                          |    2 +
 src/MCCE2Electrometers.cpp                    | 5354 +++++++++--------
 src/MCCE2Electrometers.h                      |  910 ++-
 src/MCCE2Electrometers.xmi                    |  324 +
 src/MCCE2ElectrometersClass.cpp               | 1814 +++---
 src/MCCE2ElectrometersClass.h                 |  476 +-
 src/MCCE2ElectrometersStateMachine.cpp        |  756 +--
 src/Makefile                                  |  142 +
 src/Makefile.VC                               |    4 +-
 src/Makefile.testW32                          |    4 +-
 src/TangoClassID.txt                          |   22 +-
 src/main.cpp                                  |   51 +-
 50 files changed, 9728 insertions(+), 5005 deletions(-)
 create mode 100644 doc/doc_html/AttrelectrometerChannel.html
 create mode 100644 doc/doc_html/Attrrange1.html
 create mode 100644 doc/doc_html/Attrrange2.html
 create mode 100644 doc/doc_html/ClassDescription.html
 create mode 100644 doc/doc_html/CmdClearRegisters.html
 create mode 100644 doc/doc_html/CmdGetElectrometerTypeStr.html
 create mode 100644 doc/doc_html/CmdGetGain.html
 create mode 100644 doc/doc_html/CmdGetHzFilter.html
 create mode 100644 doc/doc_html/CmdGetMode.html
 create mode 100644 doc/doc_html/CmdGetPolarity.html
 create mode 100644 doc/doc_html/CmdGetRange.html
 create mode 100644 doc/doc_html/CmdLocal.html
 create mode 100644 doc/doc_html/CmdMCCE2_OFF.html
 create mode 100644 doc/doc_html/CmdMCCE2_ON.html
 create mode 100644 doc/doc_html/CmdRangeDOWN.html
 create mode 100644 doc/doc_html/CmdRangeUP.html
 create mode 100644 doc/doc_html/CmdRemote.html
 create mode 100644 doc/doc_html/CmdReset.html
 create mode 100644 doc/doc_html/CmdSetGain.html
 create mode 100644 doc/doc_html/CmdSetHzFilter.html
 create mode 100644 doc/doc_html/CmdSetLeakageZeroV2Function.html
 create mode 100644 doc/doc_html/CmdSetMeasureFunction.html
 create mode 100644 doc/doc_html/CmdSetOffsetZeroV1Function.html
 create mode 100644 doc/doc_html/CmdSetPolarity.html
 create mode 100644 doc/doc_html/CmdSetRange.html
 create mode 100644 doc/doc_html/CmdSetTestFunction.html
 create mode 100644 doc/doc_html/CmdSetZeroVFFunction.html
 create mode 100644 doc/doc_html/CmdState.html
 create mode 100644 doc/doc_html/CmdStatus.html
 create mode 100644 doc/doc_html/Commands.html
 create mode 100644 doc/doc_html/FullDocument.html
 create mode 100644 doc/doc_html/States.html
 create mode 100644 doc/doc_html/TitleBanner.html
 create mode 100644 src/MCCE2Electrometers.xmi
 create mode 100644 src/Makefile

diff --git a/conanfile.py b/conanfile.py
index 1a2608a..d6668ef 100644
--- a/conanfile.py
+++ b/conanfile.py
@@ -3,7 +3,7 @@ from conan import ConanFile
 class MCCE2ElectrometersRecipe(ConanFile):
     name = "mcce2electrometers"
     executable = "ds_MCCE2Electrometers"
-    version = "2.2.10"
+    version = "2.3.0"
     package_type = "application"
     user = "soleil"
     python_requires = "base/[>=1.0]@soleil/stable"
diff --git a/doc/doc_html/AttrelectrometerChannel.html b/doc/doc_html/AttrelectrometerChannel.html
new file mode 100644
index 0000000..1e71555
--- /dev/null
+++ b/doc/doc_html/AttrelectrometerChannel.html
@@ -0,0 +1,172 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Attribute electrometerChannel </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Attribute electrometerChannel : </b></u></font>
+<ul>
+	MCCE2 electrometer have two channels to support two amplifiers.\nWARN : default is 0 (please set this value first).
+</ul>
+<br><br><br>
+<Table Border=0 Cellpadding=0 CELLSPACING=20>
+	<TR>
+		<TD ALIGN="left" VALIGN=top>
+			<Table Border=2 Cellpadding=3 CELLSPACING=0>
+				<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+				<td colspan=0> <font size=+1> <center><b> Attribute Definition </b></font></center></td>
+				</tr>
+				<tr>
+					<td> Attribute Type </td>
+					<td> Scalar </td>
+				</tr>
+				<tr>
+					<td> R/W Type </td>
+					<td> READ_WRITE </td>
+				</tr>
+				<tr>
+					<td> Data Type </td>
+					<td> Tango::DEV_USHORT </td>
+				</tr>
+				<tr>
+					<td> Display Level </td>
+					<td> OPERATOR </td>
+				</tr>
+				<tr>
+					<td> Inherited </td>
+					<td> false </td>
+				</tr>
+				<tr>
+					<td> Abstract </td>
+					<td> false </td>
+				</tr>
+				<tr>
+					<td> Polling Period </td>
+					<td> Not polled </td>
+				</tr>
+				<tr>
+					<td> Memorized </td>
+					<td> Not set </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr>
+				<tr>
+					<td> Read allowed for </td>
+					<td> All states </td>
+				</tr>
+				<tr>
+					<td> Write allowed for </td>
+					<td> All states </td>
+				</tr>
+			</table>
+		</td>
+		<TD ALIGN="Center" VALIGN=top>
+			<Table Border=2 Cellpadding=3 CELLSPACING=0>
+				<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+				<td colspan=0> <font size=+1> <center><b> Attribute Properties </b></font></center></td>
+				</tr>
+				<tr>
+					<td> label </td>
+					<td> electrometer channel </td>
+				</tr>
+				<tr>
+					<td> unit </td>
+					<td>   </td>
+				</tr>
+				<tr>
+					<td> standard unit </td>
+					<td>   </td>
+				</tr>
+				<tr>
+					<td> display unit </td>
+					<td>   </td>
+				</tr>
+				<tr>
+					<td> format </td>
+					<td> %1.0d </td>
+				</tr>
+				<tr>
+					<td> max_value </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> min_value </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> max_alarm </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> min_alarm </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> max_warning </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> min_warning </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> delta_time </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> delta_val </td>
+					<td>  </td>
+				</tr>
+			</table>
+		</td>
+		<TD ALIGN="Right" VALIGN=top>
+			<Table Border=2 Cellpadding=3 CELLSPACING=0>
+				<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+				<td colspan=0> <font size=+1> <center><b> Attribute Event Criteria </b></font></center></td>
+				</tr>
+				<tr>
+					<td> Periodic </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Relative Change </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Absolute Change </td>
+					<td> Not set </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr>
+				<tr>
+					<td> Archive Periodic </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Archive Relative Change </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Archive Absolute Change </td>
+					<td> Not set </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr>
+				<tr>
+					<td> Push Change event by user code </td>
+					<td> false </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr>
+				<tr>
+					<td> Push Archive event by user code </td>
+					<td> false </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr>
+				<tr>
+					<td> Push DataReady event by user code </td>
+					<td> Not set </td>
+				</tr>
+			</table>
+		</td>
+	</TR>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/Attributes.html b/doc/doc_html/Attributes.html
index d948bd9..318e72b 100644
--- a/doc/doc_html/Attributes.html
+++ b/doc/doc_html/Attributes.html
@@ -1,120 +1,57 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
-<HTML>
-<HEAD>
-<Title> Tango Device Server User's Guide </Title>
-</HEAD>
-<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#7F00FF" ALINK="#FF0000">
-
-<P><!-------TITLE------></P>
-
-<TABLE BORDER="0" WIDTH="100%">
-    <TR>
-        <TD ALIGN="left">
-			<A HREF="http://www.esrf.fr/" TARGET=new>
-			<IMG SRC="http://www.esrf.fr/gifs/logo/80.gif" BORDER=0 Height="60"></A>
-		</Td>
-        <TD ALIGN="center">
-			<A HREF="http://www.elettra.trieste.it/" TARGET=new>
-			<IMG SRC="http://www.esrf.fr/computing/cs/tango/elettra_logo.gif" BORDER=0 Height="60"></A>
-
-		</Td>
-        <TD ALIGN="center">
-			<A HREF="http://www.synchrotron-soleil.fr/" TARGET=new>
-			<IMG SRC="http://www.esrf.fr/computing/cs/tango/soleil_logo.gif" BORDER=0 Height="60"></A>
-		</Td>
-        <TD ALIGN="right">
-			<A HREF="http://www.cells.es/" TARGET=new>
-			<IMG SRC="http://www.esrf.fr/computing/cs/tango/alba.jpg" BORDER=0 Height="54"></A>
-		</Td>
-        <TD ALIGN="right">
-			<A HREF="http://www.desy.de/html/home/index_eng.html" TARGET=new>
-			<IMG SRC="http://www.esrf.fr/computing/cs/tango/desy.gif" BORDER=0 Height="60"></A>
-		</Td>
-    	 <Td>
-			<H2><FONT COLOR="#7F00FF">
-			<Center><A HREF="http://www.tango-controls.org/" TARGET="_top">
-					 TANGO </a> <Br> Device Server
-			</Center></FONT>
-		</Td>
-    </TR>
-</TABLE>
-
-<HR WIDTH="100%"></H5>
-<Br>
-<center>
-<h1>
-Novelec MCCE-2 Electrometers		<Br>
-Device Attributes Description 		<Br> <Br>
-MCCE2Electrometers Class	<Br>
-</h1>
-<b>
-Revision:  - Author: xavela
-</b>
-</center>
-
-
-<Br>
-<Table Border=2 Cellpadding=3 CELLSPACING=0 WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<Td COLSPAN=4> <Font Size=+2><Center><b>Scalar Attributes</b></td></Font></Center>
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<Td><Center><b>Attribute name</b></td></Center>
-<Td><Center><b>Data Type</b></td></Center>
-<Td><Center><b>R/W Type</b></td></Center>
-<Td><Center><b>Expert</b></td></Center>
-<Tr><Td><b>electrometerChannel</b>: <Font Size=-1>MCCE2 electrometer have two channels to support two amplifiers. WARN : default is 0 (please set this value first).</Font></Td>
-<Td><Center><Font Size=-1>DEV_USHORT</Font></Center></Td><Td><Center><Font Size=-1>READ_WRITE</Font></Center></Td><Td><Center><Font Size=-1>No</Font></Center></Td></Tr>
-
-<Tr><Td><b>range1</b>: <Font Size=-1>The channel one MCCE2 range.</Font></Td>
-<Td><Center><Font Size=-1>DEV_STRING</Font></Center></Td><Td><Center><Font Size=-1>READ</Font></Center></Td><Td><Center><Font Size=-1>No</Font></Center></Td></Tr>
-
-<Tr><Td><b>range2</b>: <Font Size=-1>The channel two MCCE range.</Font></Td>
-<Td><Center><Font Size=-1>DEV_STRING</Font></Center></Td><Td><Center><Font Size=-1>READ</Font></Center></Td><Td><Center><Font Size=-1>No</Font></Center></Td></Tr>
-
-</Table>
-</Center>
-<Br><Br><Br><Br><Br>
-
-<!--- html Footer --->
-
-<Center>
-<Font size=-1>
-<br>
-<br>
-<TABLE BORDER="1" WIDTH="100%">
-    <Tr>
-		<!--- Hosted by Sourceforge --->
-        <Td Align="Center">
-			<Font size=-1>
-			<b>TANGO</b> is an open source project hosted by :<br>
-			<A href="http://sourceforge.net" Target="new">
-					<IMG title="Sourceforge logo"
-						alt="Sourceforge logo small"
-						src="http://www.esrf.fr/computing/cs/tango/sourceforge.gif"
-						border=0> </a>
-			</Font>
-		</Td>
-		<!--- 2 Sourceforge Repositories --->
-		<Td Align="Center">
-			<Font size=-1>
-			Core and Tools :
-			<a href="http://tango-cs.cvs.sourceforge.net/tango-cs/" Target="new">
-			CVS repository</a> on
-			<a href="https://sourceforge.net/projects/tango-cs" Target=new>
-			tango-cs project</a>
-
-			<br>
-
-			Device Servers :
-			<a href="http://tango-ds.cvs.sourceforge.net/tango-ds/" Target="new">
-					CVS repository</a> on
-			<a href="https://sourceforge.net/projects/tango-ds" Target=new>
-					tango-ds project</a>
-			</Font>
-		</Td>
-    </Tr>
-</Table>
-</Font>
-</Center>
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Attributes </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=8> <font size=+1> <center><b> MCCE2Electrometers Class Attributes </b></font></center></td>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+		<td> <center><b> Name </b></center> </td>
+		<td> <center><b> Inherited </b></center> </td>
+		<td> <center><b> Abstract </b></center> </td>
+		<td> <center><b> Attr. type </b></center> </td>
+		<td> <center><b> R/W type </b></center> </td>
+		<td> <center><b> Data type </b></center> </td>
+		<td> <center><b> Level </b></center> </td>
+		<td> <center><b> Description </b></center> </td>
+	</tr>
+	<tr>
+		<td> <a href="AttrelectrometerChannel.html"> electrometerChannel </a> </td>
+		<td> false </td>
+		<td> false </td>
+		<td> Scalar </td>
+		<td> READ_WRITE </td>
+		<td> Tango::DEV_USHORT </td>
+		<td> OPERATOR </td>
+		<td> MCCE2 electrometer have two channels to support two amplifiers.\nWARN : default is 0 (please set this value first). </td>
+	</tr>
+	<tr>
+		<td> <a href="Attrrange1.html"> range1 </a> </td>
+		<td> false </td>
+		<td> false </td>
+		<td> Scalar </td>
+		<td> READ </td>
+		<td> Tango::DEV_STRING </td>
+		<td> OPERATOR </td>
+		<td> The channel one MCCE2 range. </td>
+	</tr>
+	<tr>
+		<td> <a href="Attrrange2.html"> range2 </a> </td>
+		<td> false </td>
+		<td> false </td>
+		<td> Scalar </td>
+		<td> READ </td>
+		<td> Tango::DEV_STRING </td>
+		<td> OPERATOR </td>
+		<td> The channel two MCCE range. </td>
+	</tr>
+</table>
+<br><br>
+<hr>
+<br><br>
+<font size="+1"><u><b> There is no dynamic attribute defined. </b></u></font>
 </body>
 </html>
diff --git a/doc/doc_html/Attrrange1.html b/doc/doc_html/Attrrange1.html
new file mode 100644
index 0000000..643b630
--- /dev/null
+++ b/doc/doc_html/Attrrange1.html
@@ -0,0 +1,168 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Attribute range1 </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Attribute range1 : </b></u></font>
+<ul>
+	The channel one MCCE2 range.
+</ul>
+<br><br><br>
+<Table Border=0 Cellpadding=0 CELLSPACING=20>
+	<TR>
+		<TD ALIGN="left" VALIGN=top>
+			<Table Border=2 Cellpadding=3 CELLSPACING=0>
+				<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+				<td colspan=0> <font size=+1> <center><b> Attribute Definition </b></font></center></td>
+				</tr>
+				<tr>
+					<td> Attribute Type </td>
+					<td> Scalar </td>
+				</tr>
+				<tr>
+					<td> R/W Type </td>
+					<td> READ </td>
+				</tr>
+				<tr>
+					<td> Data Type </td>
+					<td> Tango::DEV_STRING </td>
+				</tr>
+				<tr>
+					<td> Display Level </td>
+					<td> OPERATOR </td>
+				</tr>
+				<tr>
+					<td> Inherited </td>
+					<td> false </td>
+				</tr>
+				<tr>
+					<td> Abstract </td>
+					<td> false </td>
+				</tr>
+				<tr>
+					<td> Polling Period </td>
+					<td> Not polled </td>
+				</tr>
+				<tr>
+					<td> Memorized </td>
+					<td> Not set </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr>
+				<tr>
+					<td> Read allowed for </td>
+					<td> All states </td>
+				</tr>
+			</table>
+		</td>
+		<TD ALIGN="Center" VALIGN=top>
+			<Table Border=2 Cellpadding=3 CELLSPACING=0>
+				<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+				<td colspan=0> <font size=+1> <center><b> Attribute Properties </b></font></center></td>
+				</tr>
+				<tr>
+					<td> label </td>
+					<td> range1 </td>
+				</tr>
+				<tr>
+					<td> unit </td>
+					<td>   </td>
+				</tr>
+				<tr>
+					<td> standard unit </td>
+					<td>   </td>
+				</tr>
+				<tr>
+					<td> display unit </td>
+					<td>   </td>
+				</tr>
+				<tr>
+					<td> format </td>
+					<td> %s </td>
+				</tr>
+				<tr>
+					<td> max_value </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> min_value </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> max_alarm </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> min_alarm </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> max_warning </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> min_warning </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> delta_time </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> delta_val </td>
+					<td>  </td>
+				</tr>
+			</table>
+		</td>
+		<TD ALIGN="Right" VALIGN=top>
+			<Table Border=2 Cellpadding=3 CELLSPACING=0>
+				<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+				<td colspan=0> <font size=+1> <center><b> Attribute Event Criteria </b></font></center></td>
+				</tr>
+				<tr>
+					<td> Periodic </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Relative Change </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Absolute Change </td>
+					<td> Not set </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr>
+				<tr>
+					<td> Archive Periodic </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Archive Relative Change </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Archive Absolute Change </td>
+					<td> Not set </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr>
+				<tr>
+					<td> Push Change event by user code </td>
+					<td> false </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr>
+				<tr>
+					<td> Push Archive event by user code </td>
+					<td> false </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr>
+				<tr>
+					<td> Push DataReady event by user code </td>
+					<td> Not set </td>
+				</tr>
+			</table>
+		</td>
+	</TR>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/Attrrange2.html b/doc/doc_html/Attrrange2.html
new file mode 100644
index 0000000..e5e4cea
--- /dev/null
+++ b/doc/doc_html/Attrrange2.html
@@ -0,0 +1,168 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Attribute range2 </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Attribute range2 : </b></u></font>
+<ul>
+	The channel two MCCE range.
+</ul>
+<br><br><br>
+<Table Border=0 Cellpadding=0 CELLSPACING=20>
+	<TR>
+		<TD ALIGN="left" VALIGN=top>
+			<Table Border=2 Cellpadding=3 CELLSPACING=0>
+				<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+				<td colspan=0> <font size=+1> <center><b> Attribute Definition </b></font></center></td>
+				</tr>
+				<tr>
+					<td> Attribute Type </td>
+					<td> Scalar </td>
+				</tr>
+				<tr>
+					<td> R/W Type </td>
+					<td> READ </td>
+				</tr>
+				<tr>
+					<td> Data Type </td>
+					<td> Tango::DEV_STRING </td>
+				</tr>
+				<tr>
+					<td> Display Level </td>
+					<td> OPERATOR </td>
+				</tr>
+				<tr>
+					<td> Inherited </td>
+					<td> false </td>
+				</tr>
+				<tr>
+					<td> Abstract </td>
+					<td> false </td>
+				</tr>
+				<tr>
+					<td> Polling Period </td>
+					<td> Not polled </td>
+				</tr>
+				<tr>
+					<td> Memorized </td>
+					<td> Not set </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr>
+				<tr>
+					<td> Read allowed for </td>
+					<td> All states </td>
+				</tr>
+			</table>
+		</td>
+		<TD ALIGN="Center" VALIGN=top>
+			<Table Border=2 Cellpadding=3 CELLSPACING=0>
+				<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+				<td colspan=0> <font size=+1> <center><b> Attribute Properties </b></font></center></td>
+				</tr>
+				<tr>
+					<td> label </td>
+					<td> range2 </td>
+				</tr>
+				<tr>
+					<td> unit </td>
+					<td>   </td>
+				</tr>
+				<tr>
+					<td> standard unit </td>
+					<td>   </td>
+				</tr>
+				<tr>
+					<td> display unit </td>
+					<td>   </td>
+				</tr>
+				<tr>
+					<td> format </td>
+					<td> %s </td>
+				</tr>
+				<tr>
+					<td> max_value </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> min_value </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> max_alarm </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> min_alarm </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> max_warning </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> min_warning </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> delta_time </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> delta_val </td>
+					<td>  </td>
+				</tr>
+			</table>
+		</td>
+		<TD ALIGN="Right" VALIGN=top>
+			<Table Border=2 Cellpadding=3 CELLSPACING=0>
+				<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+				<td colspan=0> <font size=+1> <center><b> Attribute Event Criteria </b></font></center></td>
+				</tr>
+				<tr>
+					<td> Periodic </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Relative Change </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Absolute Change </td>
+					<td> Not set </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr>
+				<tr>
+					<td> Archive Periodic </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Archive Relative Change </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Archive Absolute Change </td>
+					<td> Not set </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr>
+				<tr>
+					<td> Push Change event by user code </td>
+					<td> false </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr>
+				<tr>
+					<td> Push Archive event by user code </td>
+					<td> false </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr>
+				<tr>
+					<td> Push DataReady event by user code </td>
+					<td> Not set </td>
+				</tr>
+			</table>
+		</td>
+	</TR>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/ClassDescription.html b/doc/doc_html/ClassDescription.html
new file mode 100644
index 0000000..19880ba
--- /dev/null
+++ b/doc/doc_html/ClassDescription.html
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Description </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<ul>
+	<br><br><br>
+	<table border="0" width="100%">
+		<Tr>
+			<td> <font size="+1"><u><b> MCCE2Electrometers Class Identification : </b></u></font> </td>
+			<td> <font size="+1"><u><b> MCCE2Electrometers Class Inheritance : </b></u></font> </td>
+		</tr>
+		<td><ul>
+			<table border="0">
+				<Tr>
+					<td> Contact </td><td> : at synchrotron-soleil.fr - xavier.elattaoui</td>
+				</tr>
+				<tr>
+					<td> Class Family </td><td> : Acquisition
+				</tr>
+				<tr>
+					<td> Platform </td><td> : All Platforms </td>
+				</tr>
+				<tr>
+					<td> Bus </td><td> : Serial Line </td>
+				</tr>
+				<tr>
+					<td> Manufacturer </td><td> : SAPHYMO </td>
+				</tr>
+				<tr>
+					<td> Manufacturer ref.</td><td> : MCCE-2 </td>
+				</tr>
+			</Table>
+		</ul></td>
+		<td>
+			<ul><li> <a href="http://www.esrf.fr/computing/cs/tango/tango_doc/kernel_doc/cpp_doc/" target="new"> Tango::DeviceImpl</a></li>
+			<ul> <li> MCCE2Electrometers</li>
+			<br>
+			<br>
+			<br>
+			<br>
+			<br>
+		</td>
+	</Table>
+	<br><br><br>
+	<font size="+1"><u><b> MCCE2Electrometers Class Description : </b></u></font>
+	<br><br>
+	<ul>
+		This class allows you to control all MCCE-2 Novelec electrometers<Br>
+		through a Serial bus.<Br>
+		<br> Supported types :<Br>
+		<br> Novelec Electrometers : MCCE2
+		
+		<Br>
+		<center>
+		<h1>
+		Novelec MCCE-2 Electrometers		<Br>
+		Device Description 		<Br> <Br>
+		MCCE2Electrometers Class	<Br>
+		</h1>
+		<b>
+		Revision:  - Author: 
+		</b>
+		</center>
+		
+		
+		<Center>
+		This class allows you to control all MCCE-2 Novelec electrometers
+		through a Serial bus.
+		<br> Supported types :
+		<br> Novelec Electrometers : MCCE2
+		<Br>
+		<Br>
+		</Center>
+		
+		<!---  /*PROTECTED REGION ID(index.html) ENABLED START*/  --->
+			<!--- Add your own documentation, pictures, links,.... --->
+			
+		<!---  /*PROTECTED REGION END*/  --->
+		
+	</ul>
+</ul>
+</body>
+</html>
diff --git a/doc/doc_html/CmdClearRegisters.html b/doc/doc_html/CmdClearRegisters.html
new file mode 100644
index 0000000..351015a
--- /dev/null
+++ b/doc/doc_html/CmdClearRegisters.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command ClearRegisters </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command ClearRegisters : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> ClearRegisters Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> OPERATOR </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdGetElectrometerTypeStr.html b/doc/doc_html/CmdGetElectrometerTypeStr.html
new file mode 100644
index 0000000..d7a47dc
--- /dev/null
+++ b/doc/doc_html/CmdGetElectrometerTypeStr.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command GetElectrometerTypeStr </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command GetElectrometerTypeStr : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> GetElectrometerTypeStr Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_USHORT </td>
+		<td> channel number </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_STRING </td>
+		<td> the electrometer type as string </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> OPERATOR </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command allowed for </td>
+		<td> All states </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdGetGain.html b/doc/doc_html/CmdGetGain.html
new file mode 100644
index 0000000..d29a5e4
--- /dev/null
+++ b/doc/doc_html/CmdGetGain.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command GetGain </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command GetGain : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> GetGain Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_SHORT </td>
+		<td> The MCCE2 gain </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdGetHzFilter.html b/doc/doc_html/CmdGetHzFilter.html
new file mode 100644
index 0000000..bbf9ca2
--- /dev/null
+++ b/doc/doc_html/CmdGetHzFilter.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command GetHzFilter </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command GetHzFilter : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> GetHzFilter Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_SHORT </td>
+		<td> The MCCE2 cut-off frequency in Hz </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdGetMode.html b/doc/doc_html/CmdGetMode.html
new file mode 100644
index 0000000..8326099
--- /dev/null
+++ b/doc/doc_html/CmdGetMode.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command GetMode </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command GetMode : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> GetMode Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_STRING </td>
+		<td> The electrometer mode (MEASURE, LEAKAGE ...) </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdGetPolarity.html b/doc/doc_html/CmdGetPolarity.html
new file mode 100644
index 0000000..77f84bb
--- /dev/null
+++ b/doc/doc_html/CmdGetPolarity.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command GetPolarity </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command GetPolarity : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> GetPolarity Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_STRING </td>
+		<td> The electrometer polarity </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdGetRange.html b/doc/doc_html/CmdGetRange.html
new file mode 100644
index 0000000..fbf6d3f
--- /dev/null
+++ b/doc/doc_html/CmdGetRange.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command GetRange </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command GetRange : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> GetRange Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_STRING </td>
+		<td> The actual electrometer range </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> OPERATOR </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdLocal.html b/doc/doc_html/CmdLocal.html
new file mode 100644
index 0000000..734206a
--- /dev/null
+++ b/doc/doc_html/CmdLocal.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command Local </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command Local : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> Local Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdMCCE2_OFF.html b/doc/doc_html/CmdMCCE2_OFF.html
new file mode 100644
index 0000000..f6238b0
--- /dev/null
+++ b/doc/doc_html/CmdMCCE2_OFF.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command MCCE2_OFF </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command MCCE2_OFF : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> MCCE2_OFF Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdMCCE2_ON.html b/doc/doc_html/CmdMCCE2_ON.html
new file mode 100644
index 0000000..a2c20d9
--- /dev/null
+++ b/doc/doc_html/CmdMCCE2_ON.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command MCCE2_ON </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command MCCE2_ON : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> MCCE2_ON Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdRangeDOWN.html b/doc/doc_html/CmdRangeDOWN.html
new file mode 100644
index 0000000..b247ecc
--- /dev/null
+++ b/doc/doc_html/CmdRangeDOWN.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command RangeDOWN </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command RangeDOWN : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> RangeDOWN Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> OPERATOR </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdRangeUP.html b/doc/doc_html/CmdRangeUP.html
new file mode 100644
index 0000000..3a9a62a
--- /dev/null
+++ b/doc/doc_html/CmdRangeUP.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command RangeUP </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command RangeUP : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> RangeUP Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> OPERATOR </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdRemote.html b/doc/doc_html/CmdRemote.html
new file mode 100644
index 0000000..920aac3
--- /dev/null
+++ b/doc/doc_html/CmdRemote.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command Remote </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command Remote : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> Remote Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdReset.html b/doc/doc_html/CmdReset.html
new file mode 100644
index 0000000..2429a60
--- /dev/null
+++ b/doc/doc_html/CmdReset.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command Reset </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command Reset : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> Reset Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> OPERATOR </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdSetGain.html b/doc/doc_html/CmdSetGain.html
new file mode 100644
index 0000000..355e967
--- /dev/null
+++ b/doc/doc_html/CmdSetGain.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command SetGain </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command SetGain : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> SetGain Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_USHORT </td>
+		<td> The new MCCE-2 gain </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdSetHzFilter.html b/doc/doc_html/CmdSetHzFilter.html
new file mode 100644
index 0000000..a0f8f24
--- /dev/null
+++ b/doc/doc_html/CmdSetHzFilter.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command SetHzFilter </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command SetHzFilter : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> SetHzFilter Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_SHORT </td>
+		<td> The MCCE2 cut-off frequency in Hz </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdSetLeakageZeroV2Function.html b/doc/doc_html/CmdSetLeakageZeroV2Function.html
new file mode 100644
index 0000000..80d62e7
--- /dev/null
+++ b/doc/doc_html/CmdSetLeakageZeroV2Function.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command SetLeakageZeroV2Function </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command SetLeakageZeroV2Function : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> SetLeakageZeroV2Function Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdSetMeasureFunction.html b/doc/doc_html/CmdSetMeasureFunction.html
new file mode 100644
index 0000000..75086e2
--- /dev/null
+++ b/doc/doc_html/CmdSetMeasureFunction.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command SetMeasureFunction </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command SetMeasureFunction : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> SetMeasureFunction Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdSetOffsetZeroV1Function.html b/doc/doc_html/CmdSetOffsetZeroV1Function.html
new file mode 100644
index 0000000..2cc5d1d
--- /dev/null
+++ b/doc/doc_html/CmdSetOffsetZeroV1Function.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command SetOffsetZeroV1Function </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command SetOffsetZeroV1Function : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> SetOffsetZeroV1Function Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdSetPolarity.html b/doc/doc_html/CmdSetPolarity.html
new file mode 100644
index 0000000..1021975
--- /dev/null
+++ b/doc/doc_html/CmdSetPolarity.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command SetPolarity </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command SetPolarity : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> SetPolarity Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_STRING </td>
+		<td> POSITIVE or NEGATIVE </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> OPERATOR </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdSetRange.html b/doc/doc_html/CmdSetRange.html
new file mode 100644
index 0000000..44a48f3
--- /dev/null
+++ b/doc/doc_html/CmdSetRange.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command SetRange </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command SetRange : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> SetRange Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_STRING </td>
+		<td> The range to apply on the electrometer </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> OPERATOR </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdSetTestFunction.html b/doc/doc_html/CmdSetTestFunction.html
new file mode 100644
index 0000000..39a0684
--- /dev/null
+++ b/doc/doc_html/CmdSetTestFunction.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command SetTestFunction </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command SetTestFunction : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> SetTestFunction Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdSetZeroVFFunction.html b/doc/doc_html/CmdSetZeroVFFunction.html
new file mode 100644
index 0000000..c0a162e
--- /dev/null
+++ b/doc/doc_html/CmdSetZeroVFFunction.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command SetZeroVFFunction </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command SetZeroVFFunction : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> SetZeroVFFunction Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdState.html b/doc/doc_html/CmdState.html
new file mode 100644
index 0000000..abada21
--- /dev/null
+++ b/doc/doc_html/CmdState.html
@@ -0,0 +1,55 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command State </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command State : </b></u></font>
+<ul>
+	This command gets the device state (stored in its <i>device_state</i> data member) and returns it to the caller.
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> State Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> none. </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_STATE </td>
+		<td> State Code </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> OPERATOR </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> true </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command allowed for </td>
+		<td> All states </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/CmdStatus.html b/doc/doc_html/CmdStatus.html
new file mode 100644
index 0000000..5761dc8
--- /dev/null
+++ b/doc/doc_html/CmdStatus.html
@@ -0,0 +1,55 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Command Status </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> Command Status : </b></u></font>
+<ul>
+	This command gets the device status (stored in its <i>device_status</i> data member) and returns it to the caller.
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> Status Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> none. </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::CONST_DEV_STRING </td>
+		<td> Status description </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> OPERATOR </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> true </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command allowed for </td>
+		<td> All states </td>
+		<td> .. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/Commands.html b/doc/doc_html/Commands.html
new file mode 100644
index 0000000..ef9fdab
--- /dev/null
+++ b/doc/doc_html/Commands.html
@@ -0,0 +1,195 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Commands </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=5> <font size=+1> <center><b> MCCE2Electrometers Class Commands </b></font></center></td>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+		<td> <center><b> Name </b></center> </td>
+		<td> <center><b> Input type </b></center> </td>
+		<td> <center><b> Output type </b></center> </td>
+		<td> <center><b> Level </b></center> </td>
+		<td> <center><b> Description </b></center> </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdState.html"> State </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_STATE </td>
+		<td> OPERATOR </td>
+		<td> This command gets the device state (stored in its <i>device_state</i> data member) and returns it to the caller. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdStatus.html"> Status </a> </td>
+		<td> DEV_VOID </td>
+		<td> CONST_DEV_STRING </td>
+		<td> OPERATOR </td>
+		<td> This command gets the device status (stored in its <i>device_status</i> data member) and returns it to the caller. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdRangeUP.html"> RangeUP </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> OPERATOR </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdRangeDOWN.html"> RangeDOWN </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> OPERATOR </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdSetZeroVFFunction.html"> SetZeroVFFunction </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdSetOffsetZeroV1Function.html"> SetOffsetZeroV1Function </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdSetLeakageZeroV2Function.html"> SetLeakageZeroV2Function </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdSetTestFunction.html"> SetTestFunction </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdSetMeasureFunction.html"> SetMeasureFunction </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdMCCE2_ON.html"> MCCE2_ON </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdMCCE2_OFF.html"> MCCE2_OFF </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdLocal.html"> Local </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdRemote.html"> Remote </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdReset.html"> Reset </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> OPERATOR </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdClearRegisters.html"> ClearRegisters </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> OPERATOR </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdGetRange.html"> GetRange </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_STRING </td>
+		<td> OPERATOR </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdSetRange.html"> SetRange </a> </td>
+		<td> DEV_STRING </td>
+		<td> DEV_VOID </td>
+		<td> OPERATOR </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdGetMode.html"> GetMode </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_STRING </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdGetPolarity.html"> GetPolarity </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_STRING </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdSetPolarity.html"> SetPolarity </a> </td>
+		<td> DEV_STRING </td>
+		<td> DEV_VOID </td>
+		<td> OPERATOR </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdGetHzFilter.html"> GetHzFilter </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_SHORT </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdSetHzFilter.html"> SetHzFilter </a> </td>
+		<td> DEV_SHORT </td>
+		<td> DEV_VOID </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdGetGain.html"> GetGain </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_SHORT </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdSetGain.html"> SetGain </a> </td>
+		<td> DEV_USHORT </td>
+		<td> DEV_VOID </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdGetElectrometerTypeStr.html"> GetElectrometerTypeStr </a> </td>
+		<td> DEV_USHORT </td>
+		<td> DEV_STRING </td>
+		<td> OPERATOR </td>
+		<td> None. </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/FullDocument.html b/doc/doc_html/FullDocument.html
new file mode 100644
index 0000000..297240f
--- /dev/null
+++ b/doc/doc_html/FullDocument.html
@@ -0,0 +1,2144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class User&lsquo;s Guide </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<hr>
+<br>
+<center><h2><u><b> MCCE2Electrometers Tango Cpp Class </b></u></h2></center>	<br><br>
+	<ul>
+		<font size="+1"><u><b> Contents : </b></u></font>
+		<ul>
+			<li> <a href="FullDocument.html#description">  Description  </a>
+			<li> <a href="FullDocument.html#properties">   Properties   </a>
+			<li> <a href="FullDocument.html#commands">     Commands     </a>
+			<ul>
+				<li> <a href="FullDocument.html#cmdState"> State </a>
+				<li> <a href="FullDocument.html#cmdStatus"> Status </a>
+				<li> <a href="FullDocument.html#cmdRangeUP"> RangeUP </a>
+				<li> <a href="FullDocument.html#cmdRangeDOWN"> RangeDOWN </a>
+				<li> <a href="FullDocument.html#cmdSetZeroVFFunction"> SetZeroVFFunction </a>
+				<li> <a href="FullDocument.html#cmdSetOffsetZeroV1Function"> SetOffsetZeroV1Function </a>
+				<li> <a href="FullDocument.html#cmdSetLeakageZeroV2Function"> SetLeakageZeroV2Function </a>
+				<li> <a href="FullDocument.html#cmdSetTestFunction"> SetTestFunction </a>
+				<li> <a href="FullDocument.html#cmdSetMeasureFunction"> SetMeasureFunction </a>
+				<li> <a href="FullDocument.html#cmdMCCE2_ON"> MCCE2_ON </a>
+				<li> <a href="FullDocument.html#cmdMCCE2_OFF"> MCCE2_OFF </a>
+				<li> <a href="FullDocument.html#cmdLocal"> Local </a>
+				<li> <a href="FullDocument.html#cmdRemote"> Remote </a>
+				<li> <a href="FullDocument.html#cmdReset"> Reset </a>
+				<li> <a href="FullDocument.html#cmdClearRegisters"> ClearRegisters </a>
+				<li> <a href="FullDocument.html#cmdGetRange"> GetRange </a>
+				<li> <a href="FullDocument.html#cmdSetRange"> SetRange </a>
+				<li> <a href="FullDocument.html#cmdGetMode"> GetMode </a>
+				<li> <a href="FullDocument.html#cmdGetPolarity"> GetPolarity </a>
+				<li> <a href="FullDocument.html#cmdSetPolarity"> SetPolarity </a>
+				<li> <a href="FullDocument.html#cmdGetHzFilter"> GetHzFilter </a>
+				<li> <a href="FullDocument.html#cmdSetHzFilter"> SetHzFilter </a>
+				<li> <a href="FullDocument.html#cmdGetGain"> GetGain </a>
+				<li> <a href="FullDocument.html#cmdSetGain"> SetGain </a>
+				<li> <a href="FullDocument.html#cmdGetElectrometerTypeStr"> GetElectrometerTypeStr </a>
+			</ul>
+			<li> <a href="FullDocument.html#attributes">   Attributes   </a>
+			<ul>
+				<li> <a href="FullDocument.html#attrelectrometerChannel"> electrometerChannel </a>
+				<li> <a href="FullDocument.html#attrrange1"> range1 </a>
+				<li> <a href="FullDocument.html#attrrange2"> range2 </a>
+			</ul>
+			<li> <a href="FullDocument.html#states">       States       </a>
+		</ul>
+	</ul>
+	<hr>
+<br><br>
+<a name="description"> </a>
+<ul>
+	<br><br><br>
+	<table border="0" width="100%">
+		<Tr>
+			<td> <font size="+1"><u><b> MCCE2Electrometers Class Identification : </b></u></font> </td>
+			<td> <font size="+1"><u><b> MCCE2Electrometers Class Inheritance : </b></u></font> </td>
+		</tr>
+		<td><ul>
+			<table border="0">
+				<Tr>
+					<td> Contact </td><td> : at synchrotron-soleil.fr - xavier.elattaoui</td>
+				</tr>
+				<tr>
+					<td> Class Family </td><td> : Acquisition
+				</tr>
+				<tr>
+					<td> Platform </td><td> : All Platforms </td>
+				</tr>
+				<tr>
+					<td> Bus </td><td> : Serial Line </td>
+				</tr>
+				<tr>
+					<td> Manufacturer </td><td> : SAPHYMO </td>
+				</tr>
+				<tr>
+					<td> Manufacturer ref.</td><td> : MCCE-2 </td>
+				</tr>
+			</Table>
+		</ul></td>
+		<td>
+			<ul><li> <a href="http://www.esrf.fr/computing/cs/tango/tango_doc/kernel_doc/cpp_doc/" target="new"> Tango::DeviceImpl</a></li>
+			<ul> <li> MCCE2Electrometers</li>
+			<br>
+			<br>
+			<br>
+			<br>
+			<br>
+		</td>
+	</Table>
+	<br><br><br>
+	<font size="+1"><u><b> MCCE2Electrometers Class Description : </b></u></font>
+	<br><br>
+	<ul>
+		This class allows you to control all MCCE-2 Novelec electrometers<Br>
+		through a Serial bus.<Br>
+		<br> Supported types :<Br>
+		<br> Novelec Electrometers : MCCE2
+		
+		<Br>
+		<center>
+		<h1>
+		Novelec MCCE-2 Electrometers		<Br>
+		Device Description 		<Br> <Br>
+		MCCE2Electrometers Class	<Br>
+		</h1>
+		<b>
+		Revision:  - Author: 
+		</b>
+		</center>
+		
+		
+		<Center>
+		This class allows you to control all MCCE-2 Novelec electrometers
+		through a Serial bus.
+		<br> Supported types :
+		<br> Novelec Electrometers : MCCE2
+		<Br>
+		<Br>
+		</Center>
+		
+		<!---  /*PROTECTED REGION ID(FullDocument.html) ENABLED START*/  --->
+			<!--- Add your own documentation, pictures, links,.... --->
+			
+		<!---  /*PROTECTED REGION END*/  --->
+		
+	</ul>
+</ul>
+<br><br>
+<hr>
+<a name="properties"> </a>
+<br><br><br>
+<font size="+1"><u><b> MCCE2Electrometers  Properties : </b></u></font>
+<br><br><br>
+<font size="+1"><u><b> There is no class properties </b></u></font>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=4> <font size=+1> <center><b> Device Properties </b></font></center></td>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+		<td> <center><b> Name </b></center> </td>
+		<td> <center><b> Description </b></center> </td>
+		<td> <center><b> Type </b></center> </td>
+		<td> <center><b> Default Value </b></center> </td>
+	</tr>
+	<tr>
+		<td> ProxyName </td>
+		<td> The name of the device which manage the communication. </td>
+		<td> String </td>
+		<td> none </td>
+	</tr>
+	<tr>
+		<td> Electrometer1Address </td>
+		<td> The first electrometer address configured. <br /><Br>
+			Note : if not connected, push 0 or let empty the property. </td>
+		<td> short </td>
+		<td> none </td>
+	</tr>
+	<tr>
+		<td> Electrometer2Address </td>
+		<td> The second electrometer address configured. <br /><Br>
+			Note : if not connected, push 0 or let empty the property. </td>
+		<td> short </td>
+		<td> none </td>
+	</tr>
+	<tr>
+		<td> ComProtocol </td>
+		<td> Communication protocal: ETHERNET/SERIAL </td>
+		<td> String </td>
+		<td> none </td>
+	</tr>
+</table>
+<br><br>
+<hr>
+<a name="commands"> </a>
+<br><br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=5> <font size=+1> <center><b> MCCE2Electrometers Class Commands </b></font></center></td>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+		<td> <center><b> Name </b></center> </td>
+		<td> <center><b> Input type </b></center> </td>
+		<td> <center><b> Output type </b></center> </td>
+		<td> <center><b> Level </b></center> </td>
+		<td> <center><b> Description </b></center> </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdState.html"> State </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_STATE </td>
+		<td> OPERATOR </td>
+		<td> This command gets the device state (stored in its <i>device_state</i> data member) and returns it to the caller. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdStatus.html"> Status </a> </td>
+		<td> DEV_VOID </td>
+		<td> CONST_DEV_STRING </td>
+		<td> OPERATOR </td>
+		<td> This command gets the device status (stored in its <i>device_status</i> data member) and returns it to the caller. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdRangeUP.html"> RangeUP </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> OPERATOR </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdRangeDOWN.html"> RangeDOWN </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> OPERATOR </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdSetZeroVFFunction.html"> SetZeroVFFunction </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdSetOffsetZeroV1Function.html"> SetOffsetZeroV1Function </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdSetLeakageZeroV2Function.html"> SetLeakageZeroV2Function </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdSetTestFunction.html"> SetTestFunction </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdSetMeasureFunction.html"> SetMeasureFunction </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdMCCE2_ON.html"> MCCE2_ON </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdMCCE2_OFF.html"> MCCE2_OFF </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdLocal.html"> Local </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdRemote.html"> Remote </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdReset.html"> Reset </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> OPERATOR </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdClearRegisters.html"> ClearRegisters </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_VOID </td>
+		<td> OPERATOR </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdGetRange.html"> GetRange </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_STRING </td>
+		<td> OPERATOR </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdSetRange.html"> SetRange </a> </td>
+		<td> DEV_STRING </td>
+		<td> DEV_VOID </td>
+		<td> OPERATOR </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdGetMode.html"> GetMode </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_STRING </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdGetPolarity.html"> GetPolarity </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_STRING </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdSetPolarity.html"> SetPolarity </a> </td>
+		<td> DEV_STRING </td>
+		<td> DEV_VOID </td>
+		<td> OPERATOR </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdGetHzFilter.html"> GetHzFilter </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_SHORT </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdSetHzFilter.html"> SetHzFilter </a> </td>
+		<td> DEV_SHORT </td>
+		<td> DEV_VOID </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdGetGain.html"> GetGain </a> </td>
+		<td> DEV_VOID </td>
+		<td> DEV_SHORT </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdSetGain.html"> SetGain </a> </td>
+		<td> DEV_USHORT </td>
+		<td> DEV_VOID </td>
+		<td> EXPERT </td>
+		<td> None. </td>
+	</tr>
+	<tr>
+		<td> <a href="CmdGetElectrometerTypeStr.html"> GetElectrometerTypeStr </a> </td>
+		<td> DEV_USHORT </td>
+		<td> DEV_STRING </td>
+		<td> OPERATOR </td>
+		<td> None. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdState"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command State : </b></u></font>
+<ul>
+	This command gets the device state (stored in its <i>device_state</i> data member) and returns it to the caller.
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> State Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> none. </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_STATE </td>
+		<td> State Code </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> OPERATOR </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> true </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command allowed for </td>
+		<td> All states </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdStatus"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command Status : </b></u></font>
+<ul>
+	This command gets the device status (stored in its <i>device_status</i> data member) and returns it to the caller.
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> Status Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> none. </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::CONST_DEV_STRING </td>
+		<td> Status description </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> OPERATOR </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> true </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command allowed for </td>
+		<td> All states </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdRangeUP"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command RangeUP : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> RangeUP Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> OPERATOR </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdRangeDOWN"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command RangeDOWN : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> RangeDOWN Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> OPERATOR </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdSetZeroVFFunction"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command SetZeroVFFunction : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> SetZeroVFFunction Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdSetOffsetZeroV1Function"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command SetOffsetZeroV1Function : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> SetOffsetZeroV1Function Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdSetLeakageZeroV2Function"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command SetLeakageZeroV2Function : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> SetLeakageZeroV2Function Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdSetTestFunction"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command SetTestFunction : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> SetTestFunction Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdSetMeasureFunction"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command SetMeasureFunction : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> SetMeasureFunction Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdMCCE2_ON"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command MCCE2_ON : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> MCCE2_ON Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdMCCE2_OFF"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command MCCE2_OFF : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> MCCE2_OFF Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdLocal"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command Local : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> Local Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdRemote"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command Remote : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> Remote Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdReset"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command Reset : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> Reset Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> OPERATOR </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdClearRegisters"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command ClearRegisters : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> ClearRegisters Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> OPERATOR </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdGetRange"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command GetRange : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> GetRange Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_STRING </td>
+		<td> The actual electrometer range </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> OPERATOR </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdSetRange"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command SetRange : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> SetRange Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_STRING </td>
+		<td> The range to apply on the electrometer </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> OPERATOR </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdGetMode"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command GetMode : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> GetMode Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_STRING </td>
+		<td> The electrometer mode (MEASURE, LEAKAGE ...) </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdGetPolarity"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command GetPolarity : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> GetPolarity Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_STRING </td>
+		<td> The electrometer polarity </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdSetPolarity"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command SetPolarity : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> SetPolarity Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_STRING </td>
+		<td> POSITIVE or NEGATIVE </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> OPERATOR </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdGetHzFilter"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command GetHzFilter : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> GetHzFilter Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_SHORT </td>
+		<td> The MCCE2 cut-off frequency in Hz </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdSetHzFilter"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command SetHzFilter : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> SetHzFilter Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_SHORT </td>
+		<td> The MCCE2 cut-off frequency in Hz </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdGetGain"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command GetGain : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> GetGain Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argin </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_SHORT </td>
+		<td> The MCCE2 gain </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdSetGain"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command SetGain : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> SetGain Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_USHORT </td>
+		<td> The new MCCE-2 gain </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_VOID </td>
+		<td> no argout </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> EXPERT </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command NOT allowed for </td>
+		<td> <font size="-1">  <li> FAULT </li>  <li> DISABLE </li> </font> </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br><hr>
+<a name="cmdGetElectrometerTypeStr"> </a>
+<br><br><br>
+<font size="+1"><u><b> Command GetElectrometerTypeStr : </b></u></font>
+<ul>
+</ul>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=0> <font size=+1> <center><b> GetElectrometerTypeStr Definition </b></font></center></td>
+	</tr>
+	<tr>
+		<td> Input Argument </td>
+		<td> Tango::DEV_USHORT </td>
+		<td> channel number </td>
+	</tr>
+	<tr>
+		<td> Output Argument </td>
+		<td> Tango::DEV_STRING </td>
+		<td> the electrometer type as string </td>
+	</tr>
+	<tr>
+		<td> DisplayLevel </td>
+		<td> OPERATOR </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Inherited </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Abstract </td>
+		<td> false </td>
+		<td> .. </td>
+	</tr>
+	<tr>
+		<td> Polling Period </td>
+		<td> Not polled </td>
+		<td> .. </td>
+	</tr>
+<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td><Td><Hr></Td></Tr>
+	<tr>
+		<td> Command allowed for </td>
+		<td> All states </td>
+		<td> .. </td>
+	</tr>
+</table>
+<br><br>
+<hr>
+<a name="attributes"> </a>
+<br><br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=8> <font size=+1> <center><b> MCCE2Electrometers Class Attributes </b></font></center></td>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+		<td> <center><b> Name </b></center> </td>
+		<td> <center><b> Inherited </b></center> </td>
+		<td> <center><b> Abstract </b></center> </td>
+		<td> <center><b> Attr. type </b></center> </td>
+		<td> <center><b> R/W type </b></center> </td>
+		<td> <center><b> Data type </b></center> </td>
+		<td> <center><b> Level </b></center> </td>
+		<td> <center><b> Description </b></center> </td>
+	</tr>
+	<tr>
+		<td> <a href="AttrelectrometerChannel.html"> electrometerChannel </a> </td>
+		<td> false </td>
+		<td> false </td>
+		<td> Scalar </td>
+		<td> READ_WRITE </td>
+		<td> Tango::DEV_USHORT </td>
+		<td> OPERATOR </td>
+		<td> MCCE2 electrometer have two channels to support two amplifiers.\nWARN : default is 0 (please set this value first). </td>
+	</tr>
+	<tr>
+		<td> <a href="Attrrange1.html"> range1 </a> </td>
+		<td> false </td>
+		<td> false </td>
+		<td> Scalar </td>
+		<td> READ </td>
+		<td> Tango::DEV_STRING </td>
+		<td> OPERATOR </td>
+		<td> The channel one MCCE2 range. </td>
+	</tr>
+	<tr>
+		<td> <a href="Attrrange2.html"> range2 </a> </td>
+		<td> false </td>
+		<td> false </td>
+		<td> Scalar </td>
+		<td> READ </td>
+		<td> Tango::DEV_STRING </td>
+		<td> OPERATOR </td>
+		<td> The channel two MCCE range. </td>
+	</tr>
+</table>
+<br><br>
+<hr>
+<br><br>
+<font size="+1"><u><b> There is no dynamic attribute defined. </b></u></font>
+<br><br>
+<hr>
+<a name="attrelectrometerChannel"> </a>
+<br><br><br>
+<font size="+1"><u><b> Attribute electrometerChannel : </b></u></font>
+<ul>
+	MCCE2 electrometer have two channels to support two amplifiers.\nWARN : default is 0 (please set this value first).
+</ul>
+<br><br><br>
+<Table Border=0 Cellpadding=0 CELLSPACING=20>
+	<TR>
+		<TD ALIGN="left" VALIGN=top>
+			<Table Border=2 Cellpadding=3 CELLSPACING=0>
+				<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+				<td colspan=0> <font size=+1> <center><b> Attribute Definition </b></font></center></td>
+				</tr>
+				<tr>
+					<td> Attribute Type </td>
+					<td> Scalar </td>
+				</tr>
+				<tr>
+					<td> R/W Type </td>
+					<td> READ_WRITE </td>
+				</tr>
+				<tr>
+					<td> Data Type </td>
+					<td> Tango::DEV_USHORT </td>
+				</tr>
+				<tr>
+					<td> Display Level </td>
+					<td> OPERATOR </td>
+				</tr>
+				<tr>
+					<td> Inherited </td>
+					<td> false </td>
+				</tr>
+				<tr>
+					<td> Abstract </td>
+					<td> false </td>
+				</tr>
+				<tr>
+					<td> Polling Period </td>
+					<td> Not polled </td>
+				</tr>
+				<tr>
+					<td> Memorized </td>
+					<td> Not set </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr>
+				<tr>
+					<td> Read allowed for </td>
+					<td> All states </td>
+				</tr>
+				<tr>
+					<td> Write allowed for </td>
+					<td> All states </td>
+				</tr>
+			</table>
+		</td>
+		<TD ALIGN="Center" VALIGN=top>
+			<Table Border=2 Cellpadding=3 CELLSPACING=0>
+				<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+				<td colspan=0> <font size=+1> <center><b> Attribute Properties </b></font></center></td>
+				</tr>
+				<tr>
+					<td> label </td>
+					<td> electrometer channel </td>
+				</tr>
+				<tr>
+					<td> unit </td>
+					<td>   </td>
+				</tr>
+				<tr>
+					<td> standard unit </td>
+					<td>   </td>
+				</tr>
+				<tr>
+					<td> display unit </td>
+					<td>   </td>
+				</tr>
+				<tr>
+					<td> format </td>
+					<td> %1.0d </td>
+				</tr>
+				<tr>
+					<td> max_value </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> min_value </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> max_alarm </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> min_alarm </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> max_warning </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> min_warning </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> delta_time </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> delta_val </td>
+					<td>  </td>
+				</tr>
+			</table>
+		</td>
+		<TD ALIGN="Right" VALIGN=top>
+			<Table Border=2 Cellpadding=3 CELLSPACING=0>
+				<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+				<td colspan=0> <font size=+1> <center><b> Attribute Event Criteria </b></font></center></td>
+				</tr>
+				<tr>
+					<td> Periodic </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Relative Change </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Absolute Change </td>
+					<td> Not set </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr>
+				<tr>
+					<td> Archive Periodic </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Archive Relative Change </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Archive Absolute Change </td>
+					<td> Not set </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr>
+				<tr>
+					<td> Push Change event by user code </td>
+					<td> false </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr>
+				<tr>
+					<td> Push Archive event by user code </td>
+					<td> false </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr>
+				<tr>
+					<td> Push DataReady event by user code </td>
+					<td> Not set </td>
+				</tr>
+			</table>
+		</td>
+	</TR>
+</table>
+<br><br>
+<hr>
+<a name="attrrange1"> </a>
+<br><br><br>
+<font size="+1"><u><b> Attribute range1 : </b></u></font>
+<ul>
+	The channel one MCCE2 range.
+</ul>
+<br><br><br>
+<Table Border=0 Cellpadding=0 CELLSPACING=20>
+	<TR>
+		<TD ALIGN="left" VALIGN=top>
+			<Table Border=2 Cellpadding=3 CELLSPACING=0>
+				<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+				<td colspan=0> <font size=+1> <center><b> Attribute Definition </b></font></center></td>
+				</tr>
+				<tr>
+					<td> Attribute Type </td>
+					<td> Scalar </td>
+				</tr>
+				<tr>
+					<td> R/W Type </td>
+					<td> READ </td>
+				</tr>
+				<tr>
+					<td> Data Type </td>
+					<td> Tango::DEV_STRING </td>
+				</tr>
+				<tr>
+					<td> Display Level </td>
+					<td> OPERATOR </td>
+				</tr>
+				<tr>
+					<td> Inherited </td>
+					<td> false </td>
+				</tr>
+				<tr>
+					<td> Abstract </td>
+					<td> false </td>
+				</tr>
+				<tr>
+					<td> Polling Period </td>
+					<td> Not polled </td>
+				</tr>
+				<tr>
+					<td> Memorized </td>
+					<td> Not set </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr>
+				<tr>
+					<td> Read allowed for </td>
+					<td> All states </td>
+				</tr>
+			</table>
+		</td>
+		<TD ALIGN="Center" VALIGN=top>
+			<Table Border=2 Cellpadding=3 CELLSPACING=0>
+				<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+				<td colspan=0> <font size=+1> <center><b> Attribute Properties </b></font></center></td>
+				</tr>
+				<tr>
+					<td> label </td>
+					<td> range1 </td>
+				</tr>
+				<tr>
+					<td> unit </td>
+					<td>   </td>
+				</tr>
+				<tr>
+					<td> standard unit </td>
+					<td>   </td>
+				</tr>
+				<tr>
+					<td> display unit </td>
+					<td>   </td>
+				</tr>
+				<tr>
+					<td> format </td>
+					<td> %s </td>
+				</tr>
+				<tr>
+					<td> max_value </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> min_value </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> max_alarm </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> min_alarm </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> max_warning </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> min_warning </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> delta_time </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> delta_val </td>
+					<td>  </td>
+				</tr>
+			</table>
+		</td>
+		<TD ALIGN="Right" VALIGN=top>
+			<Table Border=2 Cellpadding=3 CELLSPACING=0>
+				<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+				<td colspan=0> <font size=+1> <center><b> Attribute Event Criteria </b></font></center></td>
+				</tr>
+				<tr>
+					<td> Periodic </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Relative Change </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Absolute Change </td>
+					<td> Not set </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr>
+				<tr>
+					<td> Archive Periodic </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Archive Relative Change </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Archive Absolute Change </td>
+					<td> Not set </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr>
+				<tr>
+					<td> Push Change event by user code </td>
+					<td> false </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr>
+				<tr>
+					<td> Push Archive event by user code </td>
+					<td> false </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr>
+				<tr>
+					<td> Push DataReady event by user code </td>
+					<td> Not set </td>
+				</tr>
+			</table>
+		</td>
+	</TR>
+</table>
+<br><br>
+<hr>
+<a name="attrrange2"> </a>
+<br><br><br>
+<font size="+1"><u><b> Attribute range2 : </b></u></font>
+<ul>
+	The channel two MCCE range.
+</ul>
+<br><br><br>
+<Table Border=0 Cellpadding=0 CELLSPACING=20>
+	<TR>
+		<TD ALIGN="left" VALIGN=top>
+			<Table Border=2 Cellpadding=3 CELLSPACING=0>
+				<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+				<td colspan=0> <font size=+1> <center><b> Attribute Definition </b></font></center></td>
+				</tr>
+				<tr>
+					<td> Attribute Type </td>
+					<td> Scalar </td>
+				</tr>
+				<tr>
+					<td> R/W Type </td>
+					<td> READ </td>
+				</tr>
+				<tr>
+					<td> Data Type </td>
+					<td> Tango::DEV_STRING </td>
+				</tr>
+				<tr>
+					<td> Display Level </td>
+					<td> OPERATOR </td>
+				</tr>
+				<tr>
+					<td> Inherited </td>
+					<td> false </td>
+				</tr>
+				<tr>
+					<td> Abstract </td>
+					<td> false </td>
+				</tr>
+				<tr>
+					<td> Polling Period </td>
+					<td> Not polled </td>
+				</tr>
+				<tr>
+					<td> Memorized </td>
+					<td> Not set </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr>
+				<tr>
+					<td> Read allowed for </td>
+					<td> All states </td>
+				</tr>
+			</table>
+		</td>
+		<TD ALIGN="Center" VALIGN=top>
+			<Table Border=2 Cellpadding=3 CELLSPACING=0>
+				<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+				<td colspan=0> <font size=+1> <center><b> Attribute Properties </b></font></center></td>
+				</tr>
+				<tr>
+					<td> label </td>
+					<td> range2 </td>
+				</tr>
+				<tr>
+					<td> unit </td>
+					<td>   </td>
+				</tr>
+				<tr>
+					<td> standard unit </td>
+					<td>   </td>
+				</tr>
+				<tr>
+					<td> display unit </td>
+					<td>   </td>
+				</tr>
+				<tr>
+					<td> format </td>
+					<td> %s </td>
+				</tr>
+				<tr>
+					<td> max_value </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> min_value </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> max_alarm </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> min_alarm </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> max_warning </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> min_warning </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> delta_time </td>
+					<td>  </td>
+				</tr>
+				<tr>
+					<td> delta_val </td>
+					<td>  </td>
+				</tr>
+			</table>
+		</td>
+		<TD ALIGN="Right" VALIGN=top>
+			<Table Border=2 Cellpadding=3 CELLSPACING=0>
+				<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+				<td colspan=0> <font size=+1> <center><b> Attribute Event Criteria </b></font></center></td>
+				</tr>
+				<tr>
+					<td> Periodic </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Relative Change </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Absolute Change </td>
+					<td> Not set </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr>
+				<tr>
+					<td> Archive Periodic </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Archive Relative Change </td>
+					<td> Not set </td>
+				</tr>
+				<tr>
+					<td> Archive Absolute Change </td>
+					<td> Not set </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td><Hr></Td><Td><Hr></Td></Tr>
+				<tr>
+					<td> Push Change event by user code </td>
+					<td> false </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr>
+				<tr>
+					<td> Push Archive event by user code </td>
+					<td> false </td>
+				</tr>
+			<Tr BGCOLOR="#CCCCFF"><Td> </Td><Td> </Td></Tr>
+				<tr>
+					<td> Push DataReady event by user code </td>
+					<td> Not set </td>
+				</tr>
+			</table>
+		</td>
+	</TR>
+</table>
+<br><br>
+<hr>
+<br><br>
+<hr>
+<a name="states"> </a>
+<br><br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=2> <font size=+1> <center><b> MCCE2Electrometers Class States </b></font></center></td>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+		<td> <center><b> Name </b></center> </td>
+		<td> <center><b> Description </b></center> </td>
+	</tr>
+	<tr>
+		<td> ON </td>
+		<td> Device up and ready </td>
+	</tr>
+	<tr>
+		<td> ALARM </td>
+		<td> Device initialisation not complete or a bad channel number is set. </td>
+	</tr>
+	<tr>
+		<td> FAULT </td>
+		<td> Internal electrometer interface is not built or a Serial communication error occurred. </td>
+	</tr>
+	<tr>
+		<td> DISABLE </td>
+		<td> No electrometer conected! </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/Properties.html b/doc/doc_html/Properties.html
index 92773b4..4eda38d 100644
--- a/doc/doc_html/Properties.html
+++ b/doc/doc_html/Properties.html
@@ -1,154 +1,49 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
-<HTML>
-<HEAD>
-<Title> Tango Device Server User's Guide </Title>
-</HEAD>
-<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#7F00FF" ALINK="#FF0000">
-
-<P><!-------TITLE------></P>
-
-<TABLE BORDER="0" WIDTH="100%">
-    <TR>
-        <TD ALIGN="left">
-			<A HREF="http://www.esrf.fr/" TARGET=new>
-			<IMG SRC="http://www.esrf.fr/gifs/logo/80.gif" BORDER=0 Height="60"></A>
-		</Td>
-        <TD ALIGN="center">
-			<A HREF="http://www.elettra.trieste.it/" TARGET=new>
-			<IMG SRC="http://www.esrf.fr/computing/cs/tango/elettra_logo.gif" BORDER=0 Height="60"></A>
-
-		</Td>
-        <TD ALIGN="center">
-			<A HREF="http://www.synchrotron-soleil.fr/" TARGET=new>
-			<IMG SRC="http://www.esrf.fr/computing/cs/tango/soleil_logo.gif" BORDER=0 Height="60"></A>
-		</Td>
-        <TD ALIGN="right">
-			<A HREF="http://www.cells.es/" TARGET=new>
-			<IMG SRC="http://www.esrf.fr/computing/cs/tango/alba.jpg" BORDER=0 Height="54"></A>
-		</Td>
-        <TD ALIGN="right">
-			<A HREF="http://www.desy.de/html/home/index_eng.html" TARGET=new>
-			<IMG SRC="http://www.esrf.fr/computing/cs/tango/desy.gif" BORDER=0 Height="60"></A>
-		</Td>
-    	 <Td>
-			<H2><FONT COLOR="#7F00FF">
-			<Center><A HREF="http://www.tango-controls.org/" TARGET="_top">
-					 TANGO </a> <Br> Device Server
-			</Center></FONT>
-		</Td>
-    </TR>
-</TABLE>
-
-<HR WIDTH="100%"></H5>
-<Br>
-<center>
-<h1>
-Novelec MCCE-2 Electrometers		<Br>
-Properties Description 		<Br> <Br>
-MCCE2Electrometers Class	<Br>
-</h1>
-<b>
-Revision:  - Author: xavela
-</b>
-</center>
-
-
-<Center>
-<Br> <Br> <Br> 
-<Table Border=2 Cellpadding=3 CELLSPACING=0 WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<Td COLSPAN=3> <Font Size=+2><Center><b>Device Properties</b></td></Font></Center>
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<Td><Center><b>Property name</b></td></Center>
-<Td><Center><b>Property type</b></td></Center>
-<Td><Center><b>Description</b></td></Center>
-<Tr><Td><b><a href=#Dev_DefaultValues>CommunicationLinkName </a></b></Td>
-<Td><Font Size=-1>Tango::DEV_STRING</Font></Td>
-<Td><Font Size=-1>The name of the device which manage the communication.</Font></Td></Tr>
-
-<Tr><Td><b><a href=#Dev_DefaultValues>Electrometer1Address </a></b></Td>
-<Td><Font Size=-1>Tango::DEV_USHORT</Font></Td>
-<Td><Font Size=-1>The first electrometer address configured. <br />
-Note : if not connected, push 0 or let empty the property.</Font></Td></Tr>
-
-<Tr><Td><b><a href=#Dev_DefaultValues>Electrometer2Address </a></b></Td>
-<Td><Font Size=-1>Tango::DEV_USHORT</Font></Td>
-<Td><Font Size=-1>The second electrometer address configured. <br />
-Note : if not connected, push 0 or let empty the property.</Font></Td></Tr>
-
-</Table>
-
-</Center>
-<Br><Br><Br>
-<Br><Br><Br>
-
-<A name=Dev_DefaultValues><!---  ---></a>
-<Font Size=+1>Device Properties Default Values:</Font><Br>
-<Table Border=2 Cellpadding=2 CELLSPACING=2>
-    <tr BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-        <Td><b>Property Name</b></td>
-        <td><b>Default Values</b></td>
-    </Tr>
-    <Tr>
-        <Td>CommunicationLinkName</Td>
-        <td>No default value</td>
-    </Tr>
-    <Tr>
-        <Td>Electrometer1Address</Td>
-        <td>No default value</td>
-    </Tr>
-    <Tr>
-        <Td>Electrometer2Address</Td>
-        <td>No default value</td>
-    </Tr>
-</Table>
-
-<Br><Br><Br>
-<Center><b>
-There is no Class properties.<Br><Br>
-</Center></b>
-<Br> <Br> <Br> 
-
-<!--- html Footer --->
-
-<Center>
-<Font size=-1>
-<br>
-<br>
-<TABLE BORDER="1" WIDTH="100%">
-    <Tr>
-		<!--- Hosted by Sourceforge --->
-        <Td Align="Center">
-			<Font size=-1>
-			<b>TANGO</b> is an open source project hosted by :<br>
-			<A href="http://sourceforge.net" Target="new">
-					<IMG title="Sourceforge logo"
-						alt="Sourceforge logo small"
-						src="http://www.esrf.fr/computing/cs/tango/sourceforge.gif"
-						border=0> </a>
-			</Font>
-		</Td>
-		<!--- 2 Sourceforge Repositories --->
-		<Td Align="Center">
-			<Font size=-1>
-			Core and Tools :
-			<a href="http://tango-cs.cvs.sourceforge.net/tango-cs/" Target="new">
-			CVS repository</a> on
-			<a href="https://sourceforge.net/projects/tango-cs" Target=new>
-			tango-cs project</a>
-
-			<br>
-
-			Device Servers :
-			<a href="http://tango-ds.cvs.sourceforge.net/tango-ds/" Target="new">
-					CVS repository</a> on
-			<a href="https://sourceforge.net/projects/tango-ds" Target=new>
-					tango-ds project</a>
-			</Font>
-		</Td>
-    </Tr>
-</Table>
-</Font>
-</Center>
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class Properties </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br>
+<font size="+1"><u><b> MCCE2Electrometers  Properties : </b></u></font>
+<br><br><br>
+<font size="+1"><u><b> There is no class properties </b></u></font>
+<br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=4> <font size=+1> <center><b> Device Properties </b></font></center></td>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+		<td> <center><b> Name </b></center> </td>
+		<td> <center><b> Description </b></center> </td>
+		<td> <center><b> Type </b></center> </td>
+		<td> <center><b> Default Value </b></center> </td>
+	</tr>
+	<tr>
+		<td> ProxyName </td>
+		<td> The name of the device which manage the communication. </td>
+		<td> String </td>
+		<td> none </td>
+	</tr>
+	<tr>
+		<td> Electrometer1Address </td>
+		<td> The first electrometer address configured. <br /><Br>
+			Note : if not connected, push 0 or let empty the property. </td>
+		<td> short </td>
+		<td> none </td>
+	</tr>
+	<tr>
+		<td> Electrometer2Address </td>
+		<td> The second electrometer address configured. <br /><Br>
+			Note : if not connected, push 0 or let empty the property. </td>
+		<td> short </td>
+		<td> none </td>
+	</tr>
+	<tr>
+		<td> ComProtocol </td>
+		<td> Communication protocal: ETHERNET/SERIAL </td>
+		<td> String </td>
+		<td> none </td>
+	</tr>
+</table>
 </body>
 </html>
diff --git a/doc/doc_html/States.html b/doc/doc_html/States.html
new file mode 100644
index 0000000..0f2498b
--- /dev/null
+++ b/doc/doc_html/States.html
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<html>
+<head>
+<title> MCCE2Electrometers Tango Class States </title>
+</head>
+<body text="Black" bgcolor="White" link="Blue" vlink="Purple" alink="Red">
+<br><br><br><br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+	<td colspan=2> <font size=+1> <center><b> MCCE2Electrometers Class States </b></font></center></td>
+	<tr bgcolor="#CCCCFF" class="TableHeadingColor">
+		<td> <center><b> Name </b></center> </td>
+		<td> <center><b> Description </b></center> </td>
+	</tr>
+	<tr>
+		<td> ON </td>
+		<td> Device up and ready </td>
+	</tr>
+	<tr>
+		<td> ALARM </td>
+		<td> Device initialisation not complete or a bad channel number is set. </td>
+	</tr>
+	<tr>
+		<td> FAULT </td>
+		<td> Internal electrometer interface is not built or a Serial communication error occurred. </td>
+	</tr>
+	<tr>
+		<td> DISABLE </td>
+		<td> No electrometer conected! </td>
+	</tr>
+</table>
+</body>
+</html>
diff --git a/doc/doc_html/TitleBanner.html b/doc/doc_html/TitleBanner.html
new file mode 100644
index 0000000..5361fa5
--- /dev/null
+++ b/doc/doc_html/TitleBanner.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html PUBLIC "-//W3C//Dtd XHTML 1.0 transitional//EN" "http://www.w3.org/TR/xhtml1/Dtd/xhtml1-transitional.dtd">
+<html>
+	<center>
+		<font size="+1"><u><b> MCCE2Electrometers Tango Cpp Class </b></u></font>
+		<table BORDER="1" WIDTH="100%" CELLSPACING=0>
+	       <td ALIGN="center"> <a href="ClassDescription.html" target="document">  Description </a></td>
+	       <td ALIGN="center"> <a href="Properties.html"       target="document">  Properties  </a></td>
+	       <td ALIGN="center"> <a href="Commands.html"         target="document">  Commands    </a></td>
+	       <td ALIGN="center"> <a href="Attributes.html"       target="document">  Attributes  </a></td>
+	       <td ALIGN="center"> <a href="States.html"           target="document">  States      </a></td>
+	       <td ALIGN="center"> <a href="FullDocument.html"     target="new">       Printable   </a></td>
+		</table>
+	</center>
+</html>
diff --git a/doc/doc_html/index.html b/doc/doc_html/index.html
index 407d246..ac4d32f 100644
--- a/doc/doc_html/index.html
+++ b/doc/doc_html/index.html
@@ -1,155 +1,20 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <HTML>
-<HEAD>
-<Title> Tango Device Server User's Guide </Title>
-</HEAD>
-<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#7F00FF" ALINK="#FF0000">
-
-<P><!-------TITLE------></P>
-<TABLE BORDER="0" WIDTH="100%">
-    <TR>
-        <TD ALIGN="left">
-			<A HREF="http://www.esrf.fr/" TARGET=new>
-			<IMG SRC="http://www.esrf.fr/gifs/logo/80.gif" BORDER=0 Height="60"></A>
-		</Td>
-        <TD ALIGN="center">
-			<A HREF="http://www.elettra.trieste.it/" TARGET=new>
-			<IMG SRC="http://www.esrf.fr/computing/cs/tango/elettra_logo.gif" BORDER=0 Height="60"></A>
-
-		</Td>
-        <TD ALIGN="center">
-			<A HREF="http://www.synchrotron-soleil.fr/" TARGET=new>
-			<IMG SRC="http://www.esrf.fr/computing/cs/tango/soleil_logo.gif" BORDER=0 Height="60"></A>
-		</Td>
-        <TD ALIGN="right">
-			<A HREF="http://www.cells.es/" TARGET=new>
-			<IMG SRC="http://www.esrf.fr/computing/cs/tango/alba.jpg" BORDER=0 Height="54"></A>
-		</Td>
-        <TD ALIGN="right">
-			<A HREF="http://www.desy.de/html/home/index_eng.html" TARGET=new>
-			<IMG SRC="http://www.esrf.fr/computing/cs/tango/desy.gif" BORDER=0 Height="60"></A>
-		</Td>
-    	 <Td>
-			<H2><FONT COLOR="#7F00FF">
-			<Center><A HREF="http://www.tango-controls.org/" TARGET="_top">
-					 TANGO </a> <Br> Device Server
-			</Center></FONT>
-		</Td>
-    </TR>
-</TABLE>
-
-<HR WIDTH="100%"></H5>
-
-<center>
-<h1>
-Novelec MCCE-2 Electrometers <Br>
-User's Guide <Br><Br>
-MCCE2Electrometers Class<Br>
-
-</h1>
-<b>
-Revision:  - Author: xavela <Br>
- Implemented in C++
-</b>
-</center>
-<Br>
-<Br>
-<Br>
-<Br>
-<h2>Introduction:</h2>
-<ul>
-	This class allows you to control all MCCE-2 Novelec electrometers
-through a Serial bus.
-<br> Supported types :
-<br> Novelec Electrometers : MCCE2<Br>
-</ul>
-<Br><h2>Class Identification:</h2>
-<ul>
-	<li><b>Contact      :</b>	 at synchrotron-soleil.fr - xavier.elattaoui
-	<li><b>Class Family :</b>	Acquisition
-	<li><b>Platform     :</b>	All Platforms
-	<li><b>Bus          :</b>	Serial Line
-	<li><b>Manufacturer :</b>	SAPHYMO
-	<li><b>Reference    :</b>	MCCE-2
-</ul><Br>
-<h2>Class Inheritance:</h2>
-	<ul>
-		<li> <a href="http://www.esrf.fr/computing/cs/tango/tango_doc/kernel_doc/cpp_doc/"> Tango::Device_4Impl</a></li>
-		<ul>
-			<li> MCCE2Electrometers</li>
-			</ul>
-		</ul>
-	</ul>
-</ul>
-<Br>
-<Br>
-<h2>Description:</h2>
-<ul>
-	<li> <a href=Description.html>      Device description.</a>
-	<li> <a href=Properties.html>       Properties description</a>
-	<li> <a href=TangoDevStates.html>   States description</a>
-	<li> <a href=DevCommandsTable.html> Commands description</a>
-	<li> <a href=Attributes.html>       Attributes description</a>
-</ul>
-<Br>
-<Br>
-<Br>
-<!--------------h2>Programmer's guide:</h2>
-<ul>
-	<li> <a href="html/index.html">		Software description.</a>
-</ul>
-<Br------>
-<Br>
-<Br>
-<h2>Conclusion:</h2>
-<ul>
-	The device server is ready for distribution application programmers.<Br>
-	The author will be interested in any feedback which arise from their
-	usage of this device server.
-</ul>
-<Br>
-
-
-<!--- html Footer --->
-
-<Center>
-<Font size=-1>
-<br>
-<br>
-<TABLE BORDER="1" WIDTH="100%">
-    <Tr>
-		<!--- Hosted by Sourceforge --->
-        <Td Align="Center">
-			<Font size=-1>
-			<b>TANGO</b> is an open source project hosted by :<br>
-			<A href="http://sourceforge.net" Target="new">
-					<IMG title="Sourceforge logo"
-						alt="Sourceforge logo small"
-						src="http://www.esrf.fr/computing/cs/tango/sourceforge.gif"
-						border=0> </a>
-			</Font>
-		</Td>
-		<!--- 2 Sourceforge Repositories --->
-		<Td Align="Center">
-			<Font size=-1>
-			Core and Tools :
-			<a href="http://tango-cs.cvs.sourceforge.net/tango-cs/" Target="new">
-			CVS repository</a> on
-			<a href="https://sourceforge.net/projects/tango-cs" Target=new>
-			tango-cs project</a>
-
-			<br>
-
-			Device Servers :
-			<a href="http://tango-ds.cvs.sourceforge.net/tango-ds/" Target="new">
-					CVS repository</a> on
-			<a href="https://sourceforge.net/projects/tango-ds" Target=new>
-					tango-ds project</a>
-			</Font>
-		</Td>
-    </Tr>
-</Table>
-</Font>
-</Center>
-</body>
+    <HEAD>
+       <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+       <META name="GENERATOR" CONTENT="Mozilla/4.04 [en] (X11; I; SunOS 5.6 sun4d) [Netscape]">
+       <META name="Author" CONTENT="Pascal Verdier">
+       <META name="Description" CONTENT="MCCE2Electrometers  Pages">
+       <META name="Keywords" CONTENT="MCCE2Electrometers Tango class User Guide">
+       <TITLE>MCCE2Electrometers Tango class User Guide</TITLE>
+    </HEAD>
+
+
+<!--- Definition for the 4 frames window ----------->
+<frameset rows="58,65,*,65">
+    <frame src="http://www.esrf.fr/computing/cs/tango/TangoBanner.html"   name="header">
+    <frame src="TitleBanner.html"        name="title">
+    <frame src="ClassDescription.html"   name="document">
+    <frame src="http://www.esrf.fr/computing/cs/tango/SrcForgeBanner.html" name="footer" >
+</frameset>
 </html>
diff --git a/pom.xml b/pom.xml
index 0bc3dd7..ed0a489 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,7 +8,7 @@
   </parent>
   <groupId>fr.soleil.device</groupId>
   <artifactId>MCCE2Electrometers-${aol}-${mode}</artifactId>
-  <version>2.2.10</version>
+  <version>2.3.0</version>
   <packaging>nar</packaging>
   <name>MCCE2Electrometers</name>
 <!-- use for the name of executable -->
diff --git a/src/ClassFactory.cpp b/src/ClassFactory.cpp
index 8075643..a6789d5 100644
--- a/src/ClassFactory.cpp
+++ b/src/ClassFactory.cpp
@@ -1,3 +1,4 @@
+/*----- PROTECTED REGION ID(MCCE2Electrometers::ClassFactory.cpp) ENABLED START -----*/
 static const char *RcsId = "$Header: /users/chaize/newsvn/cvsroot/Instrumentation/NovelecElectro/src/ClassFactory.cpp,v 1.3 2012-07-09 13:25:43 xavela Exp $";
 //+=============================================================================
 //
@@ -45,3 +46,4 @@ void Tango::DServer::class_factory()
 	add_class(MCCE2Electrometers_ns::MCCE2ElectrometersClass::init("MCCE2Electrometers"));
 
 }
+/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::ClassFactory.cpp
diff --git a/src/MCCE2Electrometers.cpp b/src/MCCE2Electrometers.cpp
index 6487f93..0ab9d97 100644
--- a/src/MCCE2Electrometers.cpp
+++ b/src/MCCE2Electrometers.cpp
@@ -1,2631 +1,2729 @@
-static const char *RcsId = "$Header: /users/chaize/newsvn/cvsroot/Instrumentation/NovelecElectro/src/MCCE2Electrometers.cpp,v 1.31 2012-11-14 13:24:22 xavela Exp $";
-//+=============================================================================
-//
-// file :         MCCE2Electrometers.cpp
-//
-// description :  C++ source for the MCCE2Electrometers and its commands.
-//                The class is derived from Device. It represents the
-//                CORBA servant object which will be accessed from the
-//                network. All commands which can be executed on the
-//                MCCE2Electrometers are implemented in this file.
-//
-// project :      TANGO Device Server
-//
-// $Author: xavela $
-//
-// $Revision: 1.31 $
-//
-// $Log: not supported by cvs2svn $
-// Revision 1.26  2012/07/03 06:17:54  xavela
-// bug at init fixed.
-//
-// Revision 1.25  2012/04/10 08:42:33  xavela
-// std::cout commented !
-//
-//
-// copyleft :     European Synchrotron Radiation Facility
-//                BP 220, Grenoble 38043
-//                FRANCE
-//
-//-=============================================================================
-//
-//      This file is generated by POGO
-//  (Program Obviously used to Generate tango Object)
-//
-//         (c) - Software Engineering Group - ESRF
-//=============================================================================
-
-
-
-//===================================================================
-//
-//  The following table gives the correspondence
-//  between commands and method name.
-//
-//  Command name              |  Method name
-//  ----------------------------------------
-//  State                     |  dev_state()
-//  Status                    |  dev_status()
-//  RangeUP                   |  range_up()
-//  RangeDOWN                 |  range_down()
-//  SetZeroVFFunction         |  set_zero_vffunction()
-//  SetOffsetZeroV1Function   |  set_offset_zero_v1_function()
-//  SetLeakageZeroV2Function  |  set_leakage_zero_v2_function()
-//  SetTestFunction           |  set_test_function()
-//  SetMeasureFunction        |  set_measure_function()
-//  MCCE2_ON                  |  mcce2__on()
-//  MCCE2_OFF                 |  mcce2__off()
-//  Local                     |  local()
-//  Remote                    |  remote()
-//  Reset                     |  reset()
-//  ClearRegisters            |  clear_registers()
-//  GetRange                  |  get_range()
-//  SetRange                  |  set_range()
-//  GetMode                   |  get_mode()
-//  GetPolarity               |  get_polarity()
-//  SetPolarity               |  set_polarity()
-//  GetHzFilter               |  get_hz_filter()
-//  SetHzFilter               |  set_hz_filter()
-//  GetGain                   |  get_gain()
-//  SetGain                   |  set_gain()
-//  GetElectrometerTypeStr    |  get_electrometer_type_str()
-//
-//===================================================================
-
-
-#include <tango.h>
-#include <PogoHelper.h>
-#include <Xstring.h>
-#include <yat4tango/InnerAppender.h>
-#include <yat4tango/YatLogAdapter.h>
-#include <MCCE2Electrometers.h>
-#include <MCCE2ElectrometersClass.h>
-#include "N_PhotoVoltaique.h"
-#include "N_PhotoConducteur.h"
-
-const size_t MAX_STRING_LENGTH = 64;
-const unsigned short ELETRO_CHANNEL_ONE = 1;
-const unsigned short ELETRO_CHANNEL_TWO = 2;
-
-namespace MCCE2Electrometers_ns
-{
-
-//+----------------------------------------------------------------------------
-//
-// method :     MCCE2Electrometers::MCCE2Electrometers(string &s)
-//
-// description :  constructor for simulated MCCE2Electrometers
-// /home/experiences/diffabs/com-diffabs/DeviceServers/ds_MCCE2Electrometers
-// in : - cl : Pointer to the DeviceClass object
-//      - s : Device name
-//
-//-----------------------------------------------------------------------------
-MCCE2Electrometers::MCCE2Electrometers(Tango::DeviceClass *cl,string &s)
-  :Tango::Device_4Impl(cl,s.c_str())
-{
-  init_device();
-}
-
-MCCE2Electrometers::MCCE2Electrometers(Tango::DeviceClass *cl,const char *s)
-  :Tango::Device_4Impl(cl,s)
-{
-  init_device();
-}
-
-MCCE2Electrometers::MCCE2Electrometers(Tango::DeviceClass *cl,const char *s,const char *d)
-  :Tango::Device_4Impl(cl,s,d)
-{
-  init_device();
-}
-
-//+----------------------------------------------------------------------------
-//
-// method :     MCCE2Electrometers::delete_device()
-//
-// description :  will be called at device destruction or at init command.
-//
-//-----------------------------------------------------------------------------
-void MCCE2Electrometers::delete_device()
-{
-  //  Delete device's allocated object
-  if(this->_electrometerCH1)
-  {
-    delete this->_electrometerCH1;
-    this->_electrometerCH1 = 0;
-  }
-
-  if(this->_electrometerCH2)
-  {
-    delete this->_electrometerCH2;
-    this->_electrometerCH2 = 0;
-  }
-
-  DELETE_DEVSTRING_ATTRIBUTE(attr_range1_read);
-  DELETE_DEVSTRING_ATTRIBUTE(attr_range2_read);
-  DELETE_SCALAR_ATTRIBUTE(attr_electrometerChannel_read);
-
-  //- release the inner-appender
-  INFO_STREAM << "Remove the inner-appender." << endl;
-  yat4tango::InnerAppender::release(this);
-
-  INFO_STREAM << "Remove the log-adapter." << endl;
-  yat4tango::YatLogAdapter::release();
-}
-
-//+----------------------------------------------------------------------------
-//
-// method :     MCCE2Electrometers::init_device()
-//
-// description :  will be called at device initialization.
-//
-//-----------------------------------------------------------------------------
-void MCCE2Electrometers::init_device()
-{
-  INFO_STREAM << "MCCE2Electrometers::MCCE2Electrometers() create device " << device_name << endl;
-
-  yat4tango::YatLogAdapter::initialize(this);
-
-  // Initialize the inner appender.
-  yat4tango::InnerAppender::initialize(this);
-
-  // Initialise variables to default values
-  //--------------------------------------------
-  this->_electrometer    = 0;
-  this->_electrometerCH1 = 0;
-  this->_electrometerCH2 = 0;
-  this->_missing_property = false;
-  attr_electrometerChannel_write = ELETRO_CHANNEL_ONE;
-  this->_updateRange1FromHW = true;    //- force update after init.
-  this->_updateRange2FromHW = true;    //- force update after init.
-  this->_electroCH1StrType  = "Not connected";
-  this->_electroCH2StrType  = "Not connected";
-
-  get_device_property();
-
-  if ( this->communicationLinkName.empty() )
-    this->_missing_property = true;
-  if ( !electrometer1Address && !electrometer2Address )
-    this->_missing_property = true;
-  INFO_STREAM << "electrometerTypeChx -> _missing_property = " << _missing_property << std::endl;
-
-  CREATE_SCALAR_ATTRIBUTE(attr_electrometerChannel_read);
-  CREATE_DEVSTRING_ATTRIBUTE(attr_range1_read, MAX_STRING_LENGTH, "Not updated yet.");
-  CREATE_DEVSTRING_ATTRIBUTE(attr_range2_read, MAX_STRING_LENGTH, "Not updated yet.");
-
-  this->_init_done = false;
-
-  if( !this->_init_done && !this->_missing_property )
-  {
-    INFO_STREAM << "init_device -> create_electrometers_obj : ... " << std::endl;
-    try
-    {
-      //- check connected electrometer(s)
-      create_electrometers_obj();
-    }
+/*----- PROTECTED REGION ID(MCCE2Electrometers.cpp) ENABLED START -----*/
+static const char *RcsId = "$Id:  $";
+//=============================================================================
+//
+// file :        MCCE2Electrometers.cpp
+//
+// description : C++ source for the MCCE2Electrometers class and its commands.
+//               The class is derived from Device. It represents the
+//               CORBA servant object which will be accessed from the
+//               network. All commands which can be executed on the
+//               MCCE2Electrometers are implemented in this file.
+//
+// project :     Novelec MCCE-2 Electrometers
+//
+// This file is part of Tango device class.
+//
+// Tango is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Tango is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Tango.  If not, see <http://www.gnu.org/licenses/>.
+//
+// $Author:  $
+//
+// $Revision:  $
+// $Date:  $
+//
+// $HeadURL:  $
+//
+//=============================================================================
+//                This file is generated by POGO
+//        (Program Obviously used to Generate tango Object)
+//=============================================================================
+
+
+#include <tango.h>
+#include <PogoHelper.h>
+#include <Xstring.h>
+#include <yat4tango/InnerAppender.h>
+#include <yat4tango/YatLogAdapter.h>
+#include <MCCE2Electrometers.h>
+#include <MCCE2ElectrometersClass.h>
+#include "N_PhotoVoltaique.h"
+#include "N_PhotoConducteur.h"
+const size_t MAX_STRING_LENGTH = 64;
+const unsigned short ELETRO_CHANNEL_ONE = 1;
+const unsigned short ELETRO_CHANNEL_TWO = 2;
+
+/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers.cpp
+
+/**
+ *  MCCE2Electrometers class description:
+ *    This class allows you to control all MCCE-2 Novelec electrometers
+ *    through a Serial bus.
+ *    <br> Supported types :
+ *    <br> Novelec Electrometers : MCCE2
+ */
+
+//================================================================
+//  The following table gives the correspondence
+//  between command and method names.
+//
+//  Command name              |  Method name
+//================================================================
+//  State                     |  dev_state
+//  Status                    |  dev_status
+//  RangeUP                   |  range_up
+//  RangeDOWN                 |  range_down
+//  SetZeroVFFunction         |  set_zero_vffunction
+//  SetOffsetZeroV1Function   |  set_offset_zero_v1_function
+//  SetLeakageZeroV2Function  |  set_leakage_zero_v2_function
+//  SetTestFunction           |  set_test_function
+//  SetMeasureFunction        |  set_measure_function
+//  MCCE2_ON                  |  mcce2__on
+//  MCCE2_OFF                 |  mcce2__off
+//  Local                     |  local
+//  Remote                    |  remote
+//  Reset                     |  reset
+//  ClearRegisters            |  clear_registers
+//  GetRange                  |  get_range
+//  SetRange                  |  set_range
+//  GetMode                   |  get_mode
+//  GetPolarity               |  get_polarity
+//  SetPolarity               |  set_polarity
+//  GetHzFilter               |  get_hz_filter
+//  SetHzFilter               |  set_hz_filter
+//  GetGain                   |  get_gain
+//  SetGain                   |  set_gain
+//  GetElectrometerTypeStr    |  get_electrometer_type_str
+//================================================================
+
+//================================================================
+//  Attributes managed are:
+//================================================================
+//  electrometerChannel  |  Tango::DevUShort	Scalar
+//  range1               |  Tango::DevString	Scalar
+//  range2               |  Tango::DevString	Scalar
+//================================================================
+
+namespace MCCE2Electrometers_ns
+{
+/*----- PROTECTED REGION ID(MCCE2Electrometers::namespace_starting) ENABLED START -----*/
+
+//	static initializations
+
+/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::namespace_starting
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::MCCE2Electrometers()
+ *	Description : Constructors for a Tango device
+ *                implementing the classMCCE2Electrometers
+ */
+//--------------------------------------------------------
+MCCE2Electrometers::MCCE2Electrometers(Tango::DeviceClass *cl, string &s)
+ : Tango::Device_4Impl(cl, s.c_str())
+{
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::constructor_1) ENABLED START -----*/
+	init_device();
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::constructor_1
+}
+//--------------------------------------------------------
+MCCE2Electrometers::MCCE2Electrometers(Tango::DeviceClass *cl, const char *s)
+ : Tango::Device_4Impl(cl, s)
+{
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::constructor_2) ENABLED START -----*/
+	init_device();
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::constructor_2
+}
+//--------------------------------------------------------
+MCCE2Electrometers::MCCE2Electrometers(Tango::DeviceClass *cl, const char *s, const char *d)
+ : Tango::Device_4Impl(cl, s, d)
+{
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::constructor_3) ENABLED START -----*/
+	init_device();
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::constructor_3
+}
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::delete_device()
+ *	Description : will be called at device destruction or at init command
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::delete_device()
+{
+	DEBUG_STREAM << "MCCE2Electrometers::delete_device() " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::delete_device) ENABLED START -----*/
+
+	//	Delete device allocated objects
+	//  Delete device's allocated object
+  if(this->_electrometerCH1)
+  {
+    delete this->_electrometerCH1;
+    this->_electrometerCH1 = 0;
+  }
+
+  if(this->_electrometerCH2)
+  {
+    delete this->_electrometerCH2;
+    this->_electrometerCH2 = 0;
+  }
+
+  DELETE_DEVSTRING_ATTRIBUTE(attr_range1_read);
+  DELETE_DEVSTRING_ATTRIBUTE(attr_range2_read);
+  DELETE_SCALAR_ATTRIBUTE(attr_electrometerChannel_read);
+
+  //- release the inner-appender
+  INFO_STREAM << "Remove the inner-appender." << endl;
+  yat4tango::InnerAppender::release(this);
+
+  INFO_STREAM << "Remove the log-adapter." << endl;
+  yat4tango::YatLogAdapter::release();
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::delete_device
+}
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::init_device()
+ *	Description : will be called at device initialization.
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::init_device()
+{
+	DEBUG_STREAM << "MCCE2Electrometers::init_device() create device " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::init_device_before) ENABLED START -----*/
+
+	//	Initialization before get_device_property() call
+	yat4tango::YatLogAdapter::initialize(this);
+
+  // Initialize the inner appender.
+  yat4tango::InnerAppender::initialize(this);
+  //--------------------------------------------
+  this->_electrometer    = 0;
+  this->_electrometerCH1 = 0;
+  this->_electrometerCH2 = 0;
+  this->_missing_property = false;
+  attr_electrometerChannel_write = ELETRO_CHANNEL_ONE;
+  this->_updateRange1FromHW = true;    //- force update after init.
+  this->_updateRange2FromHW = true;    //- force update after init.
+  this->_electroCH1StrType  = "Not connected";
+  this->_electroCH2StrType  = "Not connected";
+
+
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::init_device_before
+
+
+	//	Get the device properties from database
+	get_device_property();
+
+
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::init_device) ENABLED START -----*/
+
+	//	Initialize device
+
+  if ( this->proxyName.empty() )
+    this->_missing_property = true;
+  if ( !electrometer1Address && !electrometer2Address )
+    this->_missing_property = true;
+  INFO_STREAM << "electrometerTypeChx -> _missing_property = " << _missing_property << std::endl;
+
+  CREATE_SCALAR_ATTRIBUTE(attr_electrometerChannel_read);
+  CREATE_DEVSTRING_ATTRIBUTE(attr_range1_read, MAX_STRING_LENGTH, "Not updated yet.");
+  CREATE_DEVSTRING_ATTRIBUTE(attr_range2_read, MAX_STRING_LENGTH, "Not updated yet.");
+
+  this->_init_done = false;
+
+  if( !this->_init_done && !this->_missing_property )
+  {
+    INFO_STREAM << "init_device -> create_electrometers_obj : ... " << std::endl;
+    try
+    {
+      //- check connected electrometer(s)
+      create_electrometers_obj();
+    }
     catch(Tango::DevFailed& df)
     {
         FATAL_STREAM << "Init_dev : create_electrometers_obj -> DF :\n" << df << std::endl;
-    }
-    catch(...)
-    {
-      FATAL_STREAM << "Device initialization Failed : check logs for more informations.";
-
-      set_state(Tango::FAULT);
-      set_status("Failed to find which Novelec type is connected : communication caught[...]");
-      return;
-    }
-  }//- end if
-
-  INFO_STREAM << "Device up but not completly initialised!" << std::endl;
-  INFO_STREAM << "this->communicationLinkName = " << this->communicationLinkName << std::endl;
-  INFO_STREAM << "electrometer1Address = " << electrometer1Address << std::endl;
-  INFO_STREAM << "electrometer2Address = " << electrometer2Address << std::endl;
-}
-
-//+----------------------------------------------------------------------------
-//
-// method :     MCCE2Electrometers::get_device_property()
-//
-// description :  Read the device properties from database.
-//
-//-----------------------------------------------------------------------------
-void MCCE2Electrometers::get_device_property()
-{
-  //  Initialize your default values here (if not done with  POGO).
-  //------------------------------------------------------------------
-  communicationLinkName = "";
-  electrometer1Address  = 0;
-  electrometer2Address  = 0;
-  //  Read device properties from database.(Automatic code generation)
-  //------------------------------------------------------------------
-  Tango::DbData dev_prop;
-  dev_prop.push_back(Tango::DbDatum("CommunicationLinkName"));
-  dev_prop.push_back(Tango::DbDatum("Electrometer1Address"));
-  dev_prop.push_back(Tango::DbDatum("Electrometer2Address"));
-
-  //  Call database and extract values
-  //--------------------------------------------
-  if (Tango::Util::instance()->_UseDb==true)
-    get_db_device()->get_property(dev_prop);
-  Tango::DbDatum  def_prop, cl_prop;
-  MCCE2ElectrometersClass *ds_class =
-    (static_cast<MCCE2ElectrometersClass *>(get_device_class()));
-  int i = -1;
-
-  //  Try to initialize CommunicationLinkName from class property
-  cl_prop = ds_class->get_class_property(dev_prop[++i].name);
-  if (cl_prop.is_empty()==false)  cl_prop  >>  communicationLinkName;
-  else {
-    //  Try to initialize CommunicationLinkName from default device value
-    def_prop = ds_class->get_default_device_property(dev_prop[i].name);
-    if (def_prop.is_empty()==false) def_prop  >>  communicationLinkName;
-  }
-  //  And try to extract CommunicationLinkName value from database
-  if (dev_prop[i].is_empty()==false)  dev_prop[i]  >>  communicationLinkName;
-
-  //  Try to initialize Electrometer1Address from class property
-  cl_prop = ds_class->get_class_property(dev_prop[++i].name);
-  if (cl_prop.is_empty()==false)  cl_prop  >>  electrometer1Address;
-  else {
-    //  Try to initialize Electrometer1Address from default device value
-    def_prop = ds_class->get_default_device_property(dev_prop[i].name);
-    if (def_prop.is_empty()==false) def_prop  >>  electrometer1Address;
-  }
-  //  And try to extract Electrometer1Address value from database
-  if (dev_prop[i].is_empty()==false)  dev_prop[i]  >>  electrometer1Address;
-
-  //  Try to initialize Electrometer2Address from class property
-  cl_prop = ds_class->get_class_property(dev_prop[++i].name);
-  if (cl_prop.is_empty()==false)  cl_prop  >>  electrometer2Address;
-  else {
-    //  Try to initialize Electrometer2Address from default device value
-    def_prop = ds_class->get_default_device_property(dev_prop[i].name);
-    if (def_prop.is_empty()==false) def_prop  >>  electrometer2Address;
-  }
-  //  And try to extract Electrometer2Address value from database
-  if (dev_prop[i].is_empty()==false)  dev_prop[i]  >>  electrometer2Address;
-
-
-
-  //  End of Automatic code generation
-  //------------------------------------------------------------------
-
-  //- Creates default property
-  Tango::DbData data_put;
-  if ( dev_prop[0].is_empty() )
-  {
-    Tango::DbDatum  prop("CommunicationLinkName");
-    prop  <<  communicationLinkName;
-    data_put.push_back(prop);
-  }
-  if ( dev_prop[1].is_empty() )
-  {
-    Tango::DbDatum  prop("Electrometer1Address");
-    prop  <<  electrometer1Address;
-    data_put.push_back(prop);
-  }
-  if ( dev_prop[2].is_empty() )
-  {
-    Tango::DbDatum  prop("Electrometer2Address");
-    prop  <<  electrometer2Address;
-    data_put.push_back(prop);
-  }
-
-  //- write default property if created
-  if( !data_put.empty() )
-    get_db_device()->put_property(data_put);
-}
-
-//+----------------------------------------------------------------------------
-//
-// method :     MCCE2Electrometers::always_executed_hook()
-//
-// description :  method always executed before any command is executed
-//
-//-----------------------------------------------------------------------------
-void MCCE2Electrometers::always_executed_hook()
-{
-  //- noop
-}
-
-//+----------------------------------------------------------------------------
-//
-// method :     MCCE2Electrometers::read_attr_hardware
-//
-// description :  Hardware acquisition for attributes.
-//
-//-----------------------------------------------------------------------------
-void MCCE2Electrometers::read_attr_hardware(vector<long> &attr_list)
-{
-  DEBUG_STREAM << "MCCE2Electrometers::read_attr_hardware(vector<long> &attr_list) entering... "<< endl;
-  //  Add your own code here
-
-}
-
-//+----------------------------------------------------------------------------
-//
-// method :     MCCE2Electrometers::read_range1
-//
-// description :  Extract real attribute values for range1 acquisition result.
-//
-//-----------------------------------------------------------------------------
-void MCCE2Electrometers::read_range1(Tango::Attribute &attr)
-{
-  DEBUG_STREAM << "MCCE2Electrometers::read_range1(Tango::Attribute &attr) entering... "<< endl;
-
-  if ( !this->_electrometerCH1 )
-  {
-    *attr_range1_read = CORBA::string_dup("Not connected");
-  }
-  else
-  {
-    if ( this->_updateRange1FromHW && *attr_electrometerChannel_read == ELETRO_CHANNEL_ONE )
-    {
-      *attr_range1_read = this->get_range();
-      this->_updateRange1FromHW = false;
-    }
-  }
-
-  attr.set_value(attr_range1_read);
-}
-
-//+----------------------------------------------------------------------------
-//
-// method :     MCCE2Electrometers::read_range2
-//
-// description :  Extract real attribute values for range2 acquisition result.
-//
-//-----------------------------------------------------------------------------
-void MCCE2Electrometers::read_range2(Tango::Attribute &attr)
-{
-  DEBUG_STREAM << "MCCE2Electrometers::read_range2(Tango::Attribute &attr) entering... "<< endl;
-
-  if ( !this->_electrometerCH2 )
-  {
-    *attr_range2_read = CORBA::string_dup("Not connected");
-  }
-  else
-  {
-    if ( this->_updateRange2FromHW && *attr_electrometerChannel_read == ELETRO_CHANNEL_TWO )
-    {
-      *attr_range2_read = this->get_range();
-      this->_updateRange2FromHW = false;
-    }
-  }
-
-  attr.set_value(attr_range2_read);
-}
-
-//+----------------------------------------------------------------------------
-//
-// method :     MCCE2Electrometers::read_electrometerChannel
-//
-// description :  Extract real attribute values for electrometerChannel acquisition result.
-//
-//-----------------------------------------------------------------------------
-void MCCE2Electrometers::read_electrometerChannel(Tango::Attribute &attr)
-{
-  DEBUG_STREAM << "MCCE2Electrometers::read_electrometerChannel(Tango::Attribute &attr) entering... "<< endl;
-
-  Tango::DevUShort channelNumber = 0;
-
-  if ( !this->_electrometer )
-  {
-    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "Failed to build the electrometer obj : not enough memory!?",
-      "MCCE2Electrometers::read_electrometerChannel()"
-    );
-  }
-
-  try
-  {
-    *attr_electrometerChannel_read = this->_electrometer->get_ElectroChannel();
-    attr.set_value(attr_electrometerChannel_read);
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to set the active channel value!");
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    ERROR_STREAM << "Failed to get the active channel value : DevFailed EXCEPTION -> " << df << std::endl;
-
-    Tango::Except::re_throw_exception(df,
-                                      "UNKNOWN_ERROR",
-                                      "Failed to get the active channel value.",
-                                      "MCCE2Electrometers::read_electrometerChannel()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to set the active channel value!");
-
-    ERROR_STREAM << "Failed to get the active channel value : DevFailed EXCEPTION -> " << df << std::endl;
-
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to get the new active channel value!",
-                                      "MCCE2Electrometers::read_electrometerChannel()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    ERROR_STREAM << "Failed to get the active channel value : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Failed to set the active channel value!");
-
-    throw;
-  }
-}
-
-//+----------------------------------------------------------------------------
-//
-// method :     MCCE2Electrometers::write_electrometerChannel
-//
-// description :  Write electrometerChannel attribute values to hardware.
-//
-//-----------------------------------------------------------------------------
-void MCCE2Electrometers::write_electrometerChannel(Tango::WAttribute &attr)
-{
-  DEBUG_STREAM << "MCCE2Electrometers::write_electrometerChannel(Tango::WAttribute &attr) entering... "<< endl;
-
-//  if ( !this->_electrometer )
-//  {
-//    std::string err("There is no electrometer connected or the property\"electrometerTypeCh\" is not set");
-//    ERROR_STREAM << err << std::endl;
-//    Tango::Except::throw_exception(
-//      "MEMORY_ERROR",
-//      err.c_str(),
-//      "MCCE2Electrometers::write_electrometerChannel()"
-//    );
-//  }
-
-  attr.get_write_value(attr_electrometerChannel_write);
-
-  if ( attr_electrometerChannel_write == ELETRO_CHANNEL_ONE )
-  {
-    if ( this->_electrometerCH1 )
-    {
-      this->_electrometer = this->_electrometerCH1;
-      //- now force update from HW
-      this->_updateRange1FromHW = true;
-    }
-    else
-    {
-      WARN_STREAM << "Cannot control electrometer on this channel : seems that nothing is connected on!" << std::endl;
-      //- warn nothing is connected on this channel
-      *attr_range1_read = CORBA::string_dup("Not connected");
-    }
-  }
-  else if ( attr_electrometerChannel_write == ELETRO_CHANNEL_TWO )
-  {
-    if ( this->_electrometerCH2 )
-    {
-      this->_electrometer = this->_electrometerCH2;
-      //- now force update from HW
-      this->_updateRange2FromHW = true;
-    }
-    else
-    {
-      WARN_STREAM << "Cannot control electrometer on this channel : seems that nothing is connected on!" << std::endl;
-      //- warn nothing is connected on this channel
-      *attr_range2_read = CORBA::string_dup("Not connected");
-    }
-  }
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::range_up
- *
- *  description:  method to execute "RangeUP"
- *  Up the range of the electrometer.
- *  Throw :
- *  - electrometer::ElectrometerException if the range limit is reached
- *  - Tango::DevFailed if the command cannot be performed
- *
- *
- */
-//+------------------------------------------------------------------
-void MCCE2Electrometers::range_up()
-{
-  DEBUG_STREAM << "MCCE2Electrometers::range_up(): entering... !" << endl;
-
-  //  Add your own code to control device here
-
-  if ( !this->_electrometer )
-  {
-    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "Failed to build the electrometer obj : not enough memory!?",
-      "MCCE2Electrometers::range_up()"
-    );
-  }
-
-  try
-  {
-    this->_electrometer->range_up();
-    //- update range attr from hardware
-    if ( *attr_electrometerChannel_read == ELETRO_CHANNEL_ONE)
-      this->_updateRange1FromHW = true;
-    else if ( *attr_electrometerChannel_read == ELETRO_CHANNEL_TWO)
-      this->_updateRange2FromHW = true;
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to up the range!");
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    ERROR_STREAM << "Failed to up the range : DevFailed EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "UNKNOWN_ERROR",
-                                      "Failed to up the range.",
-                                      "MCCE2Electrometers::range_up()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to up the range!");
-
-    ERROR_STREAM << "Failed to up the range : DevFailed EXCEPTION -> " << df << std::endl;
-
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to up the range!",
-                                      "MCCE2Electrometers::range_up()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    ERROR_STREAM << "Failed to up the range : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Failed to up the range!");
-
-    throw;
-  }
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::range_down
- *
- *  description:  method to execute "RangeDOWN"
- *  Down the range of the electrometer.
- *  Throw :
- *  - electrometer::ElectrometerException if the range is negative
- *  - Tango::DevFailed if the command cannot be performed
- *
- *
- */
-//+------------------------------------------------------------------
-void MCCE2Electrometers::range_down()
-{
-  DEBUG_STREAM << "MCCE2Electrometers::range_down(): entering... !" << endl;
-
-  //  Add your own code to control device here
-
-  if ( !this->_electrometer )
-  {
-    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "Failed to build the electrometer obj : not enough memory!?",
-      "MCCE2Electrometers::range_down()"
-    );
-  }
-
-  try
-  {
-    this->_electrometer->range_down();
-    //- update range attr from hardware
-    if ( *attr_electrometerChannel_read == ELETRO_CHANNEL_ONE )
-      this->_updateRange1FromHW = true;
-    else if ( *attr_electrometerChannel_read == ELETRO_CHANNEL_TWO )
-      this->_updateRange2FromHW = true;
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to down the range!");
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    ERROR_STREAM << "Failed to down the range : DevFailed EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "UNKNOWN_ERROR",
-                                      "Failed to down the range.",
-                                      "MCCE2Electrometers::range_down()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to down the range!");
-
-    ERROR_STREAM << "Failed to down the range : DevFailed EXCEPTION -> " << df << std::endl;
-
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to down the range!",
-                                      "MCCE2Electrometers::range_down()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    ERROR_STREAM << "Failed to down the range : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Failed to down the range!");
-
-    throw;
-  }
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::set_zero_vffunction
- *
- *  description:  method to execute "SetZeroVFFunction"
- *  Enable the Zero V/F MCCE2 mode.
- *
- *
- */
-//+------------------------------------------------------------------
-void MCCE2Electrometers::set_zero_vffunction()
-{
-  DEBUG_STREAM << "MCCE2Electrometers::set_zero_vffunction(): entering... !" << endl;
-
-  //  Add your own code to control device here
-
-  if ( !this->_electrometer )
-  {
-    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "Failed to build the electrometer obj : not enough memory!?",
-      "MCCE2Electrometers::set_zero_vffunction()"
-    );
-  }
-
-  try
-  {
-    this->_electrometer->set_Zero_VonF_function();
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to enable ZERO V/F function!");
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    ERROR_STREAM << "Failed to enable ZERO V/F function : DevFailed EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "UNKNOWN_ERROR",
-                                      "Failed to enable ZERO V/F function.",
-                                      "MCCE2Electrometers::set_zero_vffunction()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to enable ZERO V/F function!");
-
-    ERROR_STREAM << "Failed to enable ZERO V/F function : DevFailed EXCEPTION -> " << df << std::endl;
-
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to enable ZERO V/F function!",
-                                      "MCCE2Electrometers::set_zero_vffunction()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    ERROR_STREAM << "Failed to enable ZERO V/F function : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Failed to enable ZERO V/F function!");
-
-    throw;
-  }
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::set_offset_zero_v1_function
- *
- *  description:  method to execute "SetOffsetZeroV1Function"
- *  Enable the Offset or Zero V1 MCCE2 mode.
- *
- *
- */
-//+------------------------------------------------------------------
-void MCCE2Electrometers::set_offset_zero_v1_function()
-{
-  DEBUG_STREAM << "MCCE2Electrometers::set_offset_zero_v1_function(): entering... !" << endl;
-
-  //  Add your own code to control device here
-
-  if ( !this->_electrometer )
-  {
-    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "Failed to build the electrometer obj : not enough memory!?",
-      "MCCE2Electrometers::set_offset_zero_v1_function()"
-    );
-  }
-
-  try
-  {
-    this->_electrometer->set_Offset_ZeroV1_function();
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to enable OFFSET or ZERO V1 function!");
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    ERROR_STREAM << "Failed to enable OFFSET or ZERO V1 function : DevFailed EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "UNKNOWN_ERROR",
-                                      "Failed to enable OFFSET or ZERO V1 function.",
-                                      "MCCE2Electrometers::set_offset_zero_v1_function()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to enable OFFSET or ZERO V1 function!");
-
-    ERROR_STREAM << "Failed to enable OFFSET or ZERO V1 function : DevFailed EXCEPTION -> " << df << std::endl;
-
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to enable OFFSET or ZERO V1 function!",
-                                      "MCCE2Electrometers::set_offset_zero_v1_function()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    ERROR_STREAM << "Failed to enable OFFSET or ZERO V1 function : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Failed to enable OFFSET or ZERO V1 function!");
-
-    throw;
-  }
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::set_leakage_zero_v2_function
- *
- *  description:  method to execute "SetLeakageZeroV2Function"
- *  Enable the Leakage or Zero V2 MCCE2 mode.
- *
- *
- */
-//+------------------------------------------------------------------
-void MCCE2Electrometers::set_leakage_zero_v2_function()
-{
-  DEBUG_STREAM << "MCCE2Electrometers::set_leakage_zero_v2_function(): entering... !" << endl;
-
-  //  Add your own code to control device here
-  if ( !this->_electrometer )
-  {
-    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "Failed to build the electrometer obj : not enough memory!?",
-      "MCCE2Electrometers::set_leakage_zero_v2_function()"
-    );
-  }
-
-  try
-  {
-    this->_electrometer->set_Leakage_ZeroV2_function();
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to enable LEAKAGE or ZERO V2 function!");
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    ERROR_STREAM << "Failed to enable LEAKAGE or ZERO V2 function : DevFailed EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "UNKNOWN_ERROR",
-                                      "Failed to enable LEAKAGE or ZERO V2 function.",
-                                      "MCCE2Electrometers::set_leakage_zero_v2_function()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to enable LEAKAGE or ZERO V2 function!");
-
-    ERROR_STREAM << "Failed to enable LEAKAGE or ZERO V2 function : DevFailed EXCEPTION -> " << df << std::endl;
-
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to enable LEAKAGE or ZERO V2 function!",
-                                      "MCCE2Electrometers::set_leakage_zero_v2_function()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    ERROR_STREAM << "Failed to enable LEAKAGE or ZERO V2 function : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Failed to enable LEAKAGE or ZERO V2 function!");
-
-    throw;
-  }
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::set_test_function
- *
- *  description:  method to execute "SetTestFunction"
- *  Enable theTest MCCE2 mode.
- *
- *
- */
-//+------------------------------------------------------------------
-void MCCE2Electrometers::set_test_function()
-{
-  DEBUG_STREAM << "MCCE2Electrometers::set_test_function(): entering... !" << endl;
-
-  //  Add your own code to control device here
-
-  if ( !this->_electrometer )
-  {
-    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "Failed to build the electrometer obj : not enough memory!?",
-      "MCCE2Electrometers::set_test_function()"
-    );
-  }
-
-  try
-  {
-    this->_electrometer->set_Test_function();
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to enable TEST function!");
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    ERROR_STREAM << "Failed to enable TEST function : DevFailed EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "UNKNOWN_ERROR",
-                                      "Failed to enable TEST function.",
-                                      "MCCE2Electrometers::set_test_function()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to enable TEST function!");
-
-    ERROR_STREAM << "Failed to enable TEST function : DevFailed EXCEPTION -> " << df << std::endl;
-
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to enable TEST function!",
-                                      "MCCE2Electrometers::set_test_function()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    ERROR_STREAM << "Failed to enable TEST function : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Failed to enable TEST function!");
-
-    throw;
-  }
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::mcce2__on
- *
- *  description:  method to execute "MCCE2_ON"
- *  Enables the function set. Parameters cannot be set (read only mode).
- *
- *
- */
-//+------------------------------------------------------------------
-void MCCE2Electrometers::mcce2__on()
-{
-  DEBUG_STREAM << "MCCE2Electrometers::mcce2__on(): entering... !" << endl;
-
-  //  Add your own code to control device here
-  if ( !this->_electrometer )
-  {
-    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "Failed to build the electrometer obj : not enough memory!?",
-      "MCCE2Electrometers::mcce2__on()"
-    );
-  }
-
-  try
-  {
-    this->_electrometer->mcce_on();
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to enable MCCE ON function!");
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    ERROR_STREAM << "Failed to enable MCCE ON function : ElectrometerException EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "UNKNOWN_ERROR",
-                                      "Failed to enable MCCE ON function.",
-                                      "MCCE2Electrometers::mcce2__on()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to enable MCCE ON function!");
-
-    ERROR_STREAM << "Failed to enable MCCE ON function : DevFailed EXCEPTION -> " << df << std::endl;
-
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to enable MCCE ON function!",
-                                      "MCCE2Electrometers::mcce2__on()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    ERROR_STREAM << "Failed to enable MCCE2_ON function : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Failed to enable MCCE ON function!");
-
-    throw;
-  }
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::mcce2__off
- *
- *  description:  method to execute "MCCE2_OFF"
- *  Disables the function set. Parameters can be changed.
- *
- *
- */
-//+------------------------------------------------------------------
-void MCCE2Electrometers::mcce2__off()
-{
-  DEBUG_STREAM << "MCCE2Electrometers::mcce2__off(): entering... !" << endl;
-
-  //  Add your own code to control device here
-  if ( !this->_electrometer )
-  {
-    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "Failed to build the electrometer obj : not enough memory!?",
-      "MCCE2Electrometers::mcce2__off()"
-    );
-  }
-
-  try
-  {
-    this->_electrometer->mcce_off();
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to enable MCCE OFF function!");
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    ERROR_STREAM << "Failed to enable MCCE OFF function : ElectrometerException EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "UNKNOWN_ERROR",
-                                      "Failed to enable MCCE OFF function.",
-                                      "MCCE2Electrometers::mcce2__off()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to enable MCCE OFF function!");
-
-    ERROR_STREAM << "Failed to enable MCCE OFF function : DevFailed EXCEPTION -> " << df << std::endl;
-
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to enable MCCE OFF function!",
-                                      "MCCE2Electrometers::mcce2__off()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    ERROR_STREAM << "Failed to enable MCCE2_OFF function : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Failed to enable MCCE OFF function!");
-
-    throw;
-  }
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::local
- *
- *  description:  method to execute "Local"
- *  Enable local keyboard and Key
- *
- *
- */
-//+------------------------------------------------------------------
-void MCCE2Electrometers::local()
-{
-  DEBUG_STREAM << "MCCE2Electrometers::local(): entering... !" << endl;
-
-  //  Add your own code to control device here
-  if ( !this->_electrometer )
-  {
-    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "Failed to build the electrometer obj : not enough memory!?",
-      "MCCE2Electrometers::local()"
-    );
-  }
-
-  try
-  {
-    this->_electrometer->local();
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to enable local mode!");
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    ERROR_STREAM << "Failed to enable local mode : ElectrometerException EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "UNKNOWN_ERROR",
-                                      "Failed to enable local mode.",
-                                      "MCCE2Electrometers::local()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to enable local mode!");
-
-    ERROR_STREAM << "Failed to enable local function : DevFailed EXCEPTION -> " << df << std::endl;
-
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to enable local mode!",
-                                      "MCCE2Electrometers::local()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    ERROR_STREAM << "Failed to enable local mode : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Failed to enable local mode!");
-
-    throw;
-  }
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::remote
- *
- *  description:  method to execute "Remote"
- *  Disable \"MODIFY\" and the \"ON-OFF\" keys
- *
- *
- */
-//+------------------------------------------------------------------
-void MCCE2Electrometers::remote()
-{
-  DEBUG_STREAM << "MCCE2Electrometers::remote(): entering... !" << endl;
-
-  //  Add your own code to control device here
-  if ( !this->_electrometer )
-  {
-    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "Failed to build the electrometer obj : not enough memory!?",
-      "MCCE2Electrometers::remote()"
-    );
-  }
-
-  try
-  {
-    this->_electrometer->remote();
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to enable remote mode!");
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    ERROR_STREAM << "Failed to enable remote mode : ElectrometerException EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "UNKNOWN_ERROR",
-                                      "Failed to enable remote mode.",
-                                      "MCCE2Electrometers::remote()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to enable remote mode!");
-
-    ERROR_STREAM << "Failed to enable remote mode : DevFailed EXCEPTION -> " << df << std::endl;
-
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to enable remote mode!",
-                                      "MCCE2Electrometers::remote()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    ERROR_STREAM << "Failed to enable remote mode : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Failed to enable remote mode!");
-
-    throw;
-  }
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::reset
- *
- *  description:  method to execute "Reset"
- *  Restart the MCCE-2
- *
- *
- */
-//+------------------------------------------------------------------
-void MCCE2Electrometers::reset()
-{
-  DEBUG_STREAM << "MCCE2Electrometers::reset(): entering... !" << endl;
-
-  //  Add your own code to control device here
-  if ( !this->_electrometer )
-  {
-    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "Failed to build the electrometer obj : not enough memory!?",
-      "MCCE2Electrometers::reset()"
-    );
-  }
-
-  try
-  {
-    this->_electrometer->reset();
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to enable reset mode!");
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    ERROR_STREAM << "Failed to enable reset mode : ElectrometerException EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "UNKNOWN_ERROR",
-                                      "Failed to enable reset mode.",
-                                      "MCCE2Electrometers::reset()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to enable reset mode!");
-
-    ERROR_STREAM << "Failed to enable reset mode : DevFailed EXCEPTION -> " << df << std::endl;
-
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to enable reset mode!",
-                                      "MCCE2Electrometers::reset()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    ERROR_STREAM << "Failed to enable reset mode : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Failed to enable reset mode!");
-
-    throw;
-  }
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::clear_registers
- *
- *  description:  method to execute "ClearRegisters"
- *  Clear error(s)
- *
- *
- */
-//+------------------------------------------------------------------
-void MCCE2Electrometers::clear_registers()
-{
-  DEBUG_STREAM << "MCCE2Electrometers::clear_registers(): entering... !" << endl;
-
-  //  Add your own code to control device here
-  if ( !this->_electrometer )
-  {
-    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "Failed to build the electrometer obj : not enough memory!?",
-      "MCCE2Electrometers::clear_registers()"
-    );
-  }
-
-  try
-  {
-    this->_electrometer->clear_registers();
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to clear all errors!");
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    ERROR_STREAM << "Failed to clear all errors : ElectrometerException EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "UNKNOWN_ERROR",
-                                      "Failed to clear all errors.",
-                                      "MCCE2Electrometers::clear_registers()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to clear all errors!");
-
-    ERROR_STREAM << "Failed to clear all errors : DevFailed EXCEPTION -> " << df << std::endl;
-
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to clear all errors!",
-                                      "MCCE2Electrometers::clear_registers()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    ERROR_STREAM << "Failed to clear errors : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Failed to clear all errors!");
-
-    throw;
-  }
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::dev_state
- *
- *  description:  method to execute "State"
- *  This command gets the device state (stored in its <i>device_state</i> data member) and returns it to the caller.
- *
- * @return  State Code
- *
- */
-//+------------------------------------------------------------------
-Tango::DevState MCCE2Electrometers::dev_state()
-{
-  Tango::DevState argout = Tango::UNKNOWN;
-  DEBUG_STREAM << "MCCE2Electrometers::dev_state(): entering... !" << endl;
-
-  //  Add your own code to control device here
-  try
-  {
-    //- check properties
-    if ( this->_missing_property )
-    {
-      argout = Tango::FAULT;
-    }
-    //- check device initialization
-    else  if ( !this->_electrometerCH1 && !this->_electrometerCH2 )
-    {
-      argout = Tango::FAULT;
-    }
-    //- check if an electro is conencted on a channel
-    else if( attr_electrometerChannel_write == ELETRO_CHANNEL_ONE && !this->_electrometerCH1)
-    {
-      argout = Tango::DISABLE;
-    }
-    else if( attr_electrometerChannel_write == ELETRO_CHANNEL_TWO && !this->_electrometerCH2)
-    {
-      argout = Tango::DISABLE;
-    }
-    //- check channel number
-    else if ( attr_electrometerChannel_write != ELETRO_CHANNEL_ONE && attr_electrometerChannel_write != ELETRO_CHANNEL_TWO )
-    {
-      argout = Tango::ALARM;
-    }
-    else
-    {
-      //- update state
-      this->_electrometer->electrometer_status();
-      //- get electrometer state
-      short tmpState = _electrometer->electrometer_state();
-
-      switch(tmpState)
-      {
-      case Tango::ON    :
-        argout = Tango::ON;
-        break;
-      case Tango::FAULT :
-        argout = Tango::FAULT;
-        break;
-      case Tango::ALARM  :
-        argout = Tango::ALARM;
-        break;
-        /*case Tango::UNKNOWN:
-        default :
-            argout = Tango::UNKNOWN;
-            break;*/
-      }
-    }
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to get electrometer state!");
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    ERROR_STREAM << "Cannot perform get electrometer state : ElectrometerException EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "UNKNOWN_ERROR",
-                                      "Failed to get electrometer state.",
-                                      "MCCE2Electrometers::dev_state()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to get electrometer state!");
-
-    ERROR_STREAM << "Failed to get electrometer state : DevFailed EXCEPTION -> " << df << std::endl;
-
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to get electrometer state!",
-                                      "MCCE2Electrometers::dev_state()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to get electrometer state!");
-    ERROR_STREAM << "Failed to get electrometer state : [...] EXCEPTION " << std::endl;
-    throw;
-  }
-
-  set_state(argout);
-  return argout;
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::dev_status
- *
- *  description:  method to execute "Status"
- *  This command gets the device status (stored in its <i>device_status</i> data member) and returns it to the caller.
- *
- * @return  Status descrition
- *
- */
-//+------------------------------------------------------------------
-Tango::ConstDevString MCCE2Electrometers::dev_status()
-{
-  DEBUG_STREAM << "MCCE2Electrometers::dev_status(): entering... !" << endl;
-
-  //- clear previous status
-  this->_statusStr.clear();
-
-  //  Add your own code to control device here
-  try
-  {
-    if ( this->_missing_property )
-    {
-      _statusStr = "Device cannot be up while its properties are not set!";
-    }
-    //- check device initialization
-    else  if ( !this->_electrometerCH1 && !_electrometerCH2 )
-    {
-      _statusStr = "No electrometer connected!";
-    }
-
-    //- check if an electro is connected on a channel
-    if( attr_electrometerChannel_write == ELETRO_CHANNEL_ONE && !this->_electrometerCH1)
-    {
-      _statusStr += "No electrometer on channel ONE!";
-    }
-    else if( attr_electrometerChannel_write == ELETRO_CHANNEL_TWO && !this->_electrometerCH2)
-    {
-      _statusStr += "No electrometer on channel TWO!";
-    }
-    else if ( attr_electrometerChannel_write != ELETRO_CHANNEL_ONE && attr_electrometerChannel_write != ELETRO_CHANNEL_TWO )
-    {
-      _statusStr += "Invalid electrometer channel set!";
-    }
-    else
-    {
-      //- add electrometer status info
-      _statusStr += this->_electrometer->electrometer_status();
-    }
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    set_state(Tango::ALARM);
-    set_status("Cannot perform electrometer_status() command.");
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    ERROR_STREAM << "Cannot perform electrometer_status() command : ElectrometerException EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "UNKNOWN_ERROR",
-                                      "Failed to get electrometer status.",
-                                      "MCCE2Electrometers::dev_status()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    set_state(Tango::ALARM);
-    set_status("Cannot perform electrometer_status() command!");
-
-    ERROR_STREAM << "Cannot perform electrometer_status() command : DevFailed EXCEPTION -> " << df << std::endl;
-
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Cannot perform electrometer_status() command!",
-                                      "MCCE2Electrometers::dev_status()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    ERROR_STREAM << "Failed to enable remote mode : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Cannot perform electrometer_status() command : caugth [...] exception.");
-    throw;
-  }
-  set_status( _statusStr.c_str() );
-  return _statusStr.c_str();
-}
-
-//+----------------------------------------------------------------------------
-//
-// method : MCCE2Electrometers::electrometer_to_tango_exception()
-//
-// description :   Extract real attribute values from
-//        hardware acquisition result.
-//
-//-----------------------------------------------------------------------------
-Tango::DevFailed MCCE2Electrometers::electrometer_to_tango_exception(const electrometer::ElectrometerException& de)
-{
-  Tango::DevErrorList error_list(de.errors.size());
-  error_list.length(de.errors.size());
-
-  for(unsigned int i = 0; i < de.errors.size(); i++)
-  {
-    error_list[i].reason = CORBA::string_dup(de.errors[i].reason.c_str());
-    error_list[i].desc   = CORBA::string_dup(de.errors[i].desc.c_str());
-    error_list[i].origin = CORBA::string_dup(de.errors[i].origin.c_str());
-
-    switch(de.errors[i].severity)
-    {
-    case electrometer::WARN:
-      error_list[i].severity = Tango::WARN;
-      break;
-
-    case electrometer::PANIC:
-      error_list[i].severity = Tango::PANIC;
-      break;
-
-    case electrometer::ERR:
-
-    default:
-      error_list[i].severity = Tango::ERR;
-      break;
-    }
-  }
-  return Tango::DevFailed(error_list);
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::set_measure_function
- *
- *  description:  method to execute "SetMeasureFunction"
- *  Enable the Measure MCCE2 mode.
- *
- *
- */
-//+------------------------------------------------------------------
-void MCCE2Electrometers::set_measure_function()
-{
-  DEBUG_STREAM << "MCCE2Electrometers::set_measure_function(): entering... !" << endl;
-
-  //  Add your own code to control device here
-  if ( !this->_electrometer )
-  {
-    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "Failed to build the electrometer obj : not enough memory!?",
-      "MCCE2Electrometers::set_measure_function()"
-    );
-  }
-
-  try
-  {
-    this->_electrometer->set_Measure_function();
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-    set_state(Tango::ALARM);
-    set_status("Failed to enable MEASURE function!");
-
-    ERROR_STREAM << "Failed to enable MEASURE function : ElectrometerException EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to enable MEASURE function.",
-                                      "MCCE2Electrometers::set_measure_function()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to enable MEASURE function!");
-
-    ERROR_STREAM << "Failed to enable MEASURE function : DevFailed EXCEPTION -> " << df << std::endl;
-
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to enable MEASURE function!",
-                                      "MCCE2Electrometers::set_measure_function()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    ERROR_STREAM << "Failed to enable MEASURE function : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Failed to enable MEASURE function!");
-
-    throw;
-  }
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::set_range
- *
- *  description:  method to execute "SetRange"
- *  Apply the specified argin range, on the electrometer, if well formatted.
- *  Else an exception is thrown.
- *
- * @param argin The range to apply on the electrometer
- *
- */
-//+------------------------------------------------------------------
-void MCCE2Electrometers::set_range(Tango::DevString argin)
-{
-  DEBUG_STREAM << "MCCE2Electrometers::set_range(): entering... !" << endl;
-
-  //  Add your own code to control device here
-  if ( !this->_electrometer )
-  {
-    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "Failed to build the electrometer obj : not enough memory!?",
-      "MCCE2Electrometers::set_range()"
-    );
-  }
-
-  try
-  {
-    this->_electrometer->set_ElectroMeterRange(std::string(argin));
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to write the range!");
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    ERROR_STREAM << "Failed to write the range : ElectrometerException EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to write the range.",
-                                      "MCCE2Electrometers::set_range()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    set_state(Tango::ALARM);
-    set_status("Failed to write the range!");
-
-    ERROR_STREAM << "Failed to write the range : DevFailed EXCEPTION -> " << df << std::endl;
-
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to write the range!",
-                                      "MCCE2Electrometers::set_range()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    ERROR_STREAM << "Failed to set the new range value : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Failed to write the range!");
-
-    throw;
-  }
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::set_hz_filter
- *
- *  description:  method to execute "SetHzFilter"
- *  The Cut-off frequency in Hz
- *
- * @param argin The MCCE2 cut-off frequency in Hz
- *
- */
-//+------------------------------------------------------------------
-void MCCE2Electrometers::set_hz_filter(Tango::DevShort argin)
-{
-  DEBUG_STREAM << "MCCE2Electrometers::set_hz_filter(): entering... !" << endl;
-  std::string dataStr("") ;
-
-  //  Add your own code to control device here
-  if ( !this->_electrometer )
-  {
-    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "Failed to build the electrometer obj : not enough memory!?",
-      "MCCE2Electrometers::set_hz_filter()"
-    );
-  }
-
-  try
-  {
-    dataStr = XString<short>::convertToString(argin);
-    this->_electrometer->set_ElectroMeterFrequency(dataStr);
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    set_state(Tango::ALARM);
-    set_status("Failed to set the Hz Filter!");
-    ERROR_STREAM << "Failed to set the Hz Filter : ElectrometerException EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to set the Hz Filter.",
-                                      "MCCE2Electrometers::set_hz_filter()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    ERROR_STREAM << "Failed to set the Hz Filter : DevFailed EXCEPTION -> " << df << std::endl;
-
-    set_state(Tango::ALARM);
-    set_status("Failed to set the Hz Filter!");
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to set the Hz Filter!",
-                                      "MCCE2Electrometers::set_hz_filter()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    ERROR_STREAM << "Failed to set the Hz Filter : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Failed to set the Hz Filter!");
-
-    throw;
-  }
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::get_hz_filter
- *
- *  description:  method to execute "GetHzFilter"
- *  Returns the Cut-off frequency in Hz
- *
- * @return  The MCCE2 cut-off frequency in Hz
- *
- */
-//+------------------------------------------------------------------
-Tango::DevShort MCCE2Electrometers::get_hz_filter()
-{
-  Tango::DevShort argout = 0;
-  DEBUG_STREAM << "MCCE2Electrometers::get_hz_filter(): entering... !" << endl;
-
-  //  Add your own code to control device here
-  std::string dataStr("");
-
-  if ( !this->_electrometer )
-  {
-    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "Failed to build the electrometer obj : not enough memory!?",
-      "MCCE2Electrometers::get_hz_filter()"
-    );
-  }
-
-  try
-  {
-    dataStr = this->_electrometer->get_ElectroMeterFrequency();
-    argout  = XString<short>::convertFromString(dataStr);
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    set_state(Tango::ALARM);
-    set_status("Failed to set the Hz Filter!");
-    ERROR_STREAM << "Failed to read the gain : ElectrometerException EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "UNKNOWN_ERROR",
-                                      "Failed to read hzFilter.",
-                                      "hzFilterAttrib::get_hz_filter()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    ERROR_STREAM << "Failed to read the Hz Filter : DevFailed EXCEPTION -> " << df << std::endl;
-
-    set_state(Tango::ALARM);
-    set_status("Failed to set the Hz Filter!");
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to read the Hz Filter!",
-                                      "MCCE2Electrometers::get_hz_filter()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    ERROR_STREAM << "Failed to read the Hz Filter : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Failed to read the Hz Filter!");
-
-    throw;
-  }
-
-  return argout;
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::get_gain
- *
- *  description:  method to execute "GetGain"
- *  Returns the MCCE-2 gain
- *
- * @return  The MCCE2 gain
- *
- */
-//+------------------------------------------------------------------
-Tango::DevShort MCCE2Electrometers::get_gain()
-{
-  Tango::DevShort argout = 0;
-  DEBUG_STREAM << "MCCE2Electrometers::get_gain(): entering... !" << endl;
-
-  //  Add your own code to control device here
-  if ( !this->_electrometer )
-  {
-    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "Failed to build the electrometer obj : not enough memory!?",
-      "MCCE2Electrometers::get_gain()"
-    );
-  }
-
-  try
-  {
-    std::string dataStr("");
-    dataStr = this->_electrometer->get_ElectroMeterGain();
-    argout  = XString<short>::convertFromString(dataStr);
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    set_state(Tango::ALARM);
-    set_status("Failed to read the gain!");
-    ERROR_STREAM << "Failed to read the gain : ElectrometerException EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "UNKNOWN_ERROR",
-                                      "Failed to read the gain .",
-                                      "hzFilterAttrib::get_gain()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    ERROR_STREAM << "Failed to read the gain : DevFailed EXCEPTION -> " << df << std::endl;
-
-    set_state(Tango::ALARM);
-    set_status("Failed to read the gain!");
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to read the gain!",
-                                      "MCCE2Electrometers::get_gain()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    ERROR_STREAM << "Failed to read the gain : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Failed to read the gain!");
-
-    throw;
-  }
-
-  return argout;
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::set_gain
- *
- *  description:  method to execute "SetGain"
- *  Sets the new MCCE-2 gain value.
- *
- * @param argin The new MCCE-2 gain
- *
- */
-//+------------------------------------------------------------------
-void MCCE2Electrometers::set_gain(Tango::DevUShort argin)
-{
-  DEBUG_STREAM << "MCCE2Electrometers::set_gain(): entering... !" << endl;
-
-  //  Add your own code to control device here
-  if ( !this->_electrometer )
-  {
-    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "Failed to build the electrometer obj : not enough memory!?",
-      "MCCE2Electrometers::set_gain()"
-    );
-  }
-
-  try
-  {
-    std::string dataStr("");
-    dataStr = XString<short>::convertToString(argin);
-    this->_electrometer->set_ElectroMeterGain(dataStr);
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    set_state(Tango::ALARM);
-    set_status("Failed to set the gain!");
-    ERROR_STREAM << "Failed to set the gain : ElectrometerException EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "UNKNOWN_ERROR",
-                                      "Failed to set the gain.",
-                                      "hzFilterAttrib::set_gain()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    ERROR_STREAM << "Failed to set the gain : DevFailed EXCEPTION -> " << df << std::endl;
-
-    set_state(Tango::ALARM);
-    set_status("Failed to set the gain!");
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to set the the gain!",
-                                      "MCCE2Electrometers::set_gain()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    ERROR_STREAM << "Failed to set the gain : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Failed to set the gain!");
-
-    throw;
-  }
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::get_range
- *
- *  description:  method to execute "GetRange"
- *  Returns the electrometer range.
- *
- * @return  The actual electrometer range
- *
- */
-//+------------------------------------------------------------------
-Tango::DevString MCCE2Electrometers::get_range()
-{
-  //  POGO has generated a method core with argout allocation.
-  //  If you would like to use a static reference without copying,
-  //  See "TANGO Device Server Programmer's Manual"
-  //    (chapter : Writing a TANGO DS / Exchanging data)
-  //------------------------------------------------------------
-
-  //  Add your own code to control device here
-  DEBUG_STREAM << "MCCE2Electrometers::get_range(): entering... !" << endl;
-
-  //  Add your own code to control device here
-  if ( !this->_electrometer )
-  {
-    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "Failed to build the electrometer obj : not enough memory!?",
-      "MCCE2Electrometers::get_range()"
-    );
-  }
-
-  Tango::DevString argout = 0;
-  try
-  {
-    std::string rangeStr("");
-    rangeStr = this->_electrometer->get_ElectroMeterRange();
-    argout = new char [rangeStr.size() + 1];
-    strcpy(argout, rangeStr.c_str());
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    if ( argout )
-      delete [] argout;
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-    set_state(Tango::ALARM);
-    set_status("Failed to read the range!");
-
-    ERROR_STREAM << "Failed to set read the range : ElectrometerException EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "UNKNOWN_ERROR",
-                                      "Failed to read the range.",
-                                      "MCCE2Electrometers::get_range()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    if ( argout )
-      delete [] argout;
-    set_state(Tango::ALARM);
-    set_status("Failed to read the range!");
-
-    ERROR_STREAM << "Failed to read the range : DevFailed EXCEPTION -> " << df << std::endl;
-
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to read the range!",
-                                      "MCCE2Electrometers::get_range()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    if ( argout )
-      delete [] argout;
-    ERROR_STREAM << "Failed to read the range : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Failed to read the range!");
-
-    throw;
-  }
-
-  return argout;
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::get_mode
- *
- *  description:  method to execute "GetMode"
- *  Returns the electrometer mode which can be one of the following values :
- *  MEASURE, V/F Zero, OFFSET, LEAKAGE or TEST.
- *
- * @return  The electrometer mode (MEASURE, LEAKAGE ...)
- *
- */
-//+------------------------------------------------------------------
-Tango::DevString MCCE2Electrometers::get_mode()
-{
-  //  POGO has generated a method core with argout allocation.
-  //  If you would like to use a static reference without copying,
-  //  See "TANGO Device Server Programmer's Manual"
-  //    (chapter : Writing a TANGO DS / Exchanging data)
-  //------------------------------------------------------------
-  DEBUG_STREAM << "MCCE2Electrometers::get_mode(): entering... !" << endl;
-
-  //  Add your own code to control device here
-  if ( !this->_electrometer )
-  {
-    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "Failed to build the electrometer obj : not enough memory!?",
-      "MCCE2Electrometers::get_mode()"
-    );
-  }
-
-  Tango::DevString  argout  = 0;
-  try
-  {
-    std::string modeStr = this->_electrometer->get_ElectroMeterMode();
-    argout = new char [modeStr.size() + 1];
-    strcpy(argout, modeStr.c_str());
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    if ( argout )
-      delete [] argout;
-    set_state(Tango::ALARM);
-    set_status("Failed to read the mode!");
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    ERROR_STREAM << "Failed to set read the mode : ElectrometerException EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "UNKNOWN_ERROR",
-                                      "Failed to read the mode.",
-                                      "MCCE2Electrometers::get_mode()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    if ( argout )
-      delete [] argout;
-    set_state(Tango::ALARM);
-    set_status("Failed to read the mode!");
-
-    ERROR_STREAM << "Failed to read the mode : DevFailed EXCEPTION -> " << df << std::endl;
-
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to read the mode!",
-                                      "MCCE2Electrometers::get_mode()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    if ( argout )
-      delete [] argout;
-    ERROR_STREAM << "Failed to read the mode : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Failed to read the mode!");
-
-    throw;
-  }
-  return argout;
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::get_polarity
- *
- *  description:  method to execute "GetPolarity"
- *  Returns the electrometer polarity, which can be POSITIVE or NEGATIVE.
- *
- * @return  The electrometer polarity
- *
- */
-//+------------------------------------------------------------------
-Tango::DevString MCCE2Electrometers::get_polarity()
-{
-  //  POGO has generated a method core with argout allocation.
-  //  If you would like to use a static reference without copying,
-  //  See "TANGO Device Server Programmer's Manual"
-  //    (chapter : Writing a TANGO DS / Exchanging data)
-  //------------------------------------------------------------
-  DEBUG_STREAM << "MCCE2Electrometers::get_polarity(): entering... !" << endl;
-
-  //  Add your own code to control device here
-  if ( !this->_electrometer )
-  {
-    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "Failed to build the electrometer obj : not enough memory!?",
-      "MCCE2Electrometers::get_polarity()"
-    );
-  }
-
-
-  Tango::DevString  argout  = 0;
-  try
-  {
-    std::string polarStr = this->_electrometer->get_ElectroMeterPolarity();
-    argout = new char [polarStr.size() + 1];
-    strcpy(argout, polarStr.c_str());
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    if ( argout )
-      delete [] argout;
-    set_state(Tango::ALARM);
-    set_status("Failed to read the polarity!");
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    ERROR_STREAM << "Failed to set read the polarity : ElectrometerException EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to read the polarity.",
-                                      "MCCE2Electrometers::get_polarity()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    if ( argout )
-      delete [] argout;
-    set_state(Tango::ALARM);
-    set_status("Failed to read the polarity!");
-
-    ERROR_STREAM << "Failed to read the polarity : DevFailed EXCEPTION -> " << df << std::endl;
-
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to read the polarity!",
-                                      "MCCE2Electrometers::get_polarity()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    if ( argout )
-      delete [] argout;
-    ERROR_STREAM << "Failed to read the polarity : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Failed to read the polarity!");
-
-    throw;
-  }
-
-  return argout;
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::create_electrometers_obj
- *
- *  description:  internal method to instanciate electrometer(s) obj
- */
-//+------------------------------------------------------------------
-void MCCE2Electrometers::create_electrometers_obj()
-{
-  //- instanciate channel 1
-  if ( !_electrometerCH1 && electrometer1Address )
-  {
-    AbstractElectrometerClass* mcce1;
-    mcce1 = new Novelec_MCCE2(communicationLinkName, electrometer1Address);
-    mcce1->init_protocol();
-
-    Novelec_MCCE2* nMCCE1 = dynamic_cast<Novelec_MCCE2*>(mcce1);
-    short type1 = 0;
-    //- find connected Novelec model
-    try
-    {
-      if(nMCCE1)
-      {
-        //- get type as num
-        type1 = nMCCE1->get_electrometer_type();
-        //- get type as string
-        this->_electroCH1StrType = nMCCE1->get_electrometer_typeStr();
-      }
-    }
-    catch(const electrometer::ElectrometerException& ke)
-    {
-      set_state(Tango::ALARM);
-      set_status("Failed to find which Novelec type is connected on channel one : communication caught[...]");
-
-      Tango::DevFailed df = electrometer_to_tango_exception(ke);
-      FATAL_STREAM << "Failed to find which Novelec type is connected on channel one : ElectrometerException EXCEPTION -> " << df << std::endl;
-    }
-    catch(Tango::DevFailed& df)
-    {
-      set_state(Tango::ALARM);
-      set_status("Failed to find which Novelec type is connected on channel one!");
-
-      FATAL_STREAM << "Failed to find which Novelec type is connected : DevFailed EXCEPTION -> " << df << std::endl;
-    }
-    catch(...)
-    {
-      set_state(Tango::ALARM);
-      set_status("Failed to find which Novelec type is connected on channel one : communication caught[...]");
-
-      FATAL_STREAM << "Failed to find which Novelec type is connected on channel one : [...] EXCEPTION " << std::endl;
-    }
-
-    switch(type1)
-    {
-    case 0 :
-      this->_electrometerCH1 = 0;
-      break;
-    case 1 :
-    case 2 :
-    case 3 :
-//            this->_electrometerCH1 = new N_PhotoVoltaique (communicationLinkName, channelNumber, electrometerTypeCh1);
-      this->_electrometerCH1 = new N_PhotoVoltaique (communicationLinkName, electrometer1Address);
-      break;
-    case 4 :
-    case 5 :
-      this->_electrometerCH1 = new N_PhotoConducteur(communicationLinkName, electrometer1Address);
-      break;
-    default :
-      this->_electrometerCH1 = 0;
-      FATAL_STREAM << "\nERROR : Electrometers::create_electrometers_obj() -> this " << electrometer1Address << " Novelec type is not supported now!" << endl;
-      return;
-    }
-    if ( mcce1 )
-    {
-      delete mcce1;
-      mcce1 = 0;
-    }
-  }
-
-  //- instanciate channel 2
-  if ( !this->_electrometerCH2 && electrometer2Address )
-  {
-    AbstractElectrometerClass* mcce2;
-    mcce2 = new Novelec_MCCE2(communicationLinkName, electrometer2Address);
-    mcce2->init_protocol();
-    Novelec_MCCE2* nMCCE2 = dynamic_cast<Novelec_MCCE2*>(mcce2);
-    short type2 = 0;
-    try
-    {
-      if(nMCCE2)
-      {
-        //- get type as num
-        type2 = nMCCE2->get_electrometer_type();
-        //- get type as string
-        this->_electroCH2StrType = nMCCE2->get_electrometer_typeStr();
-      }
-    }
-    catch(const electrometer::ElectrometerException& ke)
-    {
-      set_state(Tango::ALARM);
-      set_status("Failed to find which Novelec type is connected on channel two : communication caught[...]");
-
-      Tango::DevFailed df = electrometer_to_tango_exception(ke);
-      FATAL_STREAM << "Failed to find which Novelec type is connected on channel two : ElectrometerException EXCEPTION -> " << df << std::endl;
-    }
-    catch(Tango::DevFailed& df)
-    {
-      set_state(Tango::ALARM);
-      set_status("Failed to find which Novelec type is connected on channel two!");
-
-      FATAL_STREAM << "Failed to find which Novelec type is connected on channel two : DevFailed EXCEPTION -> " << df << std::endl;
-    }
-    catch(...)
-    {
-      set_state(Tango::ALARM);
-      set_status("Failed to find which Novelec type is connected on channel two : communication caught[...]");
-
-      FATAL_STREAM << "Failed to find which Novelec type is connected on channel two : [...] EXCEPTION " << std::endl;
-    }
-
-    switch(type2)
-    {
-    case 0 :
-      this->_electrometerCH2 = 0;
-      break;
-    case 1 :
-    case 2 :
-    case 3 :
-      this->_electrometerCH2 = new N_PhotoVoltaique (communicationLinkName, electrometer2Address);
-      break;
-    case 4 :
-    case 5 :
-      this->_electrometerCH2 = new N_PhotoConducteur(communicationLinkName, electrometer2Address);
-      break;
-    default :
-      this->_electrometerCH2 = 0;
-      FATAL_STREAM << "\nERROR : Electrometers::create_electrometers_obj() -> this " << electrometer2Address << " Novelec type is not supported now!" << endl;
-      return;
-    }
-    if ( mcce2 )
-    {
-      delete mcce2;
-      mcce2 = 0;
-    }
-  }
-
-  //- check
-  if (!this->_electrometerCH1 && !this->_electrometerCH2)
-  {
-      set_state(Tango::FAULT);
-      set_status("No electrometer connected on channels 1 and 2!");
-    ERROR_STREAM << "No connected electrometer(s) found!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "No connected electrometer(s) found!",
-      "MCCE2Electrometers::create_electrometers_obj()");
-  }
-
-  //- configure MCCE-2 : clear error(s), explicit response, mode MEASURE OFF
-  bool initCH1 = false;
-  bool initCH2 = false;
-  try
-  {
-    if ( this->_electrometerCH1 )
-    {
-      initCH1 = this->_electrometerCH1->init_protocol();
-      if ( initCH1 )
-        this->_electrometerCH1->mcce_init();
-
-      //- read channel range
-      this->_electrometer = this->_electrometerCH1;
-      *attr_range1_read = this->get_range();
-
-      INFO_STREAM << "this->_electrometer = this->_electrometerCH1!" << std::endl;
-    }
-    else
-      WARN_STREAM << "WARN : !this->_electrometerCH1" << std::endl;
-
-    if ( this->_electrometerCH2 )
-    {
-      initCH2 = this->_electrometerCH2->init_protocol();
-      if ( initCH2 )
-        this->_electrometerCH2->mcce_init();
-
-      //- read channel range
-      this->_electrometer = this->_electrometerCH2;
-      *attr_range2_read = this->get_range();
-
-      INFO_STREAM << "this->_electrometer = this->_electrometerCH2!" << std::endl;
-    }
-
-    //- start with channel one
-    if ( this->_electrometerCH1 )
-    {
-      this->_electrometer = this->_electrometerCH1;
-      this->_init_done = true;
-    }
-    //- if nothing connected on channel one, try with the second one
-    else if ( this->_electrometerCH2 )
-    {
-      this->_electrometer = this->_electrometerCH2;
-      this->_init_done = true;
-    }
-    else
-      this->_init_done = false;
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    ERROR_STREAM << "Failed to set up the MCCE-2 module for a serial communication : ElectrometerException EXCEPTION -> " << df << std::endl;
-
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to set up the MCCE-2 module for a serial communication!",
-                                      "MCCE2Electrometers::create_electrometers_obj()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    set_state(Tango::FAULT);
-    set_status("Failed to set up the MCCE-2 module for a serial communication!");
-
-    ERROR_STREAM << "Failed to set up the MCCE-2 module for a serial communication : DevFailed EXCEPTION -> " << df << std::endl;
-
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to set up the MCCE-2 module for a serial communication!",
-                                      "MCCE2Electrometers::create_electrometers_obj()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    set_state(Tango::FAULT);
-    set_status("Failed to set up the MCCE-2 module for a serial communication caught[...]");
-
-    ERROR_STREAM << "Failed to set up the MCCE-2 module for a serial communication : [...] EXCEPTION " << std::endl;
-
-    Tango::Except::throw_exception(
-      "UNKNOWN_ERROR",
-      "Failed to set up the MCCE-2 module for a serial communication! [(...) exception]",
-      "MCCE2Electrometers::create_electrometers_obj()",
-      Tango::ERR
-    );
-  }
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::set_polarity
- *
- *  description:  method to execute "SetPolarity"
- *  Sets the new electrometer polarity. <Br>
- *  NOTE : <Br>
- *  Value must be set in UPPER case !!!
- *
- * @param argin POSITIVE or NEGATIVE
- *
- */
-//+------------------------------------------------------------------
-void MCCE2Electrometers::set_polarity(Tango::DevString argin)
-{
-  DEBUG_STREAM << "MCCE2Electrometers::set_polarity(): entering... !" << endl;
-
-  //  Add your own code to control device here
-  if ( !this->_electrometer )
-  {
-    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "Failed to build the electrometer obj : not enough memory!?",
-      "MCCE2Electrometers::set_polarity()"
-    );
-  }
-
-  try
-  {
-    this->_electrometer->set_ElectroMeterPolarity(argin);
-  }
-  catch(const electrometer::ElectrometerException& ke)
-  {
-    Tango::DevFailed df = electrometer_to_tango_exception(ke);
-
-    set_state(Tango::ALARM);
-    set_status("Failed to change electrometer polarity!");
-    ERROR_STREAM << "Failed to change electrometer polarity : ElectrometerException EXCEPTION -> " << df << std::endl;
-    Tango::Except::re_throw_exception(df,
-                                      "UNKNOWN_ERROR",
-                                      "Failed to change electrometer polarity.",
-                                      "hzFilterAttrib::set_polarity()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(Tango::DevFailed& df)
-  {
-    ERROR_STREAM << "Failed to change electrometer polarity : DevFailed EXCEPTION -> " << df << std::endl;
-
-    set_state(Tango::ALARM);
-    set_status("Failed to change electrometer polarity!");
-    Tango::Except::re_throw_exception(df,
-                                      "COMMUNICATION_ERROR",
-                                      "Failed to change electrometer polarity!",
-                                      "MCCE2Electrometers::set_polarity()",
-                                      Tango::ERR
-                                     );
-  }
-  catch(...)
-  {
-    ERROR_STREAM << "Failed to change electrometer polarity : [...] EXCEPTION " << std::endl;
-    set_state(Tango::ALARM);
-    set_status("Failed to change electrometer polarity!");
-
-    throw;
-  }
-}
-
-//+------------------------------------------------------------------
-/**
- *  method: MCCE2Electrometers::get_electrometer_type_str
- *
- *  description:  method to execute "GetElectrometerTypeStr"
- *  This command returns the connected electrometer type as string for the specified channel.
- *
- * @param argin channel number
- * @return  the electrometer type as string
- *
- */
-//+------------------------------------------------------------------
-Tango::DevString MCCE2Electrometers::get_electrometer_type_str(Tango::DevUShort argin)
-{
-  //  POGO has generated a method core with argout allocation.
-  //  If you would like to use a static reference without copying,
-  //  See "TANGO Device Server Programmer's Manual"
-  //    (chapter : Writing a TANGO DS / Exchanging data)
-  //------------------------------------------------------------
-  Tango::DevString  argout  = 0;
-  DEBUG_STREAM << "MCCE2Electrometers::get_electrometer_type_str(): entering... !" << endl;
-
-  //  Add your own code to control device here
-  if ( !this->_electrometerCH1 && !_electrometerCH2 )
-  {
-    ERROR_STREAM << "No electrometer connected on both channels!" << std::endl;
-    Tango::Except::throw_exception(
-      "MEMORY_ERROR",
-      "No electrometer connected on both channels!?",
-      "MCCE2Electrometers::get_electrometer_type_str()"
-    );
-  }
-
-  if ( argin == ELETRO_CHANNEL_ONE )
-  {
-    argout = new char[this->_electroCH1StrType.size()+1];
-    ::strncpy(argout, _electroCH1StrType.c_str(), _electroCH1StrType.size()+1);
-  }
-  else if ( argin == ELETRO_CHANNEL_TWO )
-  {
-    argout = new char[this->_electroCH2StrType.size()+1];
-    ::strncpy(argout, _electroCH2StrType.c_str(), _electroCH2StrType.size()+1);
-  }
-  else
-  {
-    Tango::Except::throw_exception(
-      "INVALID_PARAMETER",
-      "Channel number must be 1 or 2.",
-      "MCCE2Electrometers::get_electrometer_type_str()"
-    );
-  }
-
-  return argout;
-}
-
-} //  namespace
+    }
+    catch(...)
+    {
+      FATAL_STREAM << "Device initialization Failed : check logs for more informations.";
+
+      set_state(Tango::FAULT);
+      set_status("Failed to find which Novelec type is connected : communication caught[...]");
+      return;
+    }
+  }//- end if
+
+  INFO_STREAM << "Device up but not completly initialised!" << std::endl;
+  INFO_STREAM << "this->proxyName = " << this->proxyName << std::endl;
+  INFO_STREAM << "electrometer1Address = " << electrometer1Address << std::endl;
+  INFO_STREAM << "electrometer2Address = " << electrometer2Address << std::endl;
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::init_device
+}
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::get_device_property()
+ *	Description : Read database to initialize property data members.
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::get_device_property()
+{
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::get_device_property_before) ENABLED START -----*/
+
+	//	Initialize property data members
+	proxyName = "";
+  electrometer1Address  = 0;
+  electrometer2Address  = 0;
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::get_device_property_before
+
+
+	//	Read device properties from database.
+	Tango::DbData	dev_prop;
+	dev_prop.push_back(Tango::DbDatum("ProxyName"));
+	dev_prop.push_back(Tango::DbDatum("Electrometer1Address"));
+	dev_prop.push_back(Tango::DbDatum("Electrometer2Address"));
+	dev_prop.push_back(Tango::DbDatum("ComProtocol"));
+
+	//	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 MCCE2ElectrometersClass to get class property
+		Tango::DbDatum	def_prop, cl_prop;
+		MCCE2ElectrometersClass	*ds_class =
+			(static_cast<MCCE2ElectrometersClass *>(get_device_class()));
+		int	i = -1;
+
+		//	Try to initialize ProxyName from class property
+		cl_prop = ds_class->get_class_property(dev_prop[++i].name);
+		if (cl_prop.is_empty()==false)	cl_prop  >>  proxyName;
+		else {
+			//	Try to initialize ProxyName from default device value
+			def_prop = ds_class->get_default_device_property(dev_prop[i].name);
+			if (def_prop.is_empty()==false)	def_prop  >>  proxyName;
+		}
+		//	And try to extract ProxyName value from database
+		if (dev_prop[i].is_empty()==false)	dev_prop[i]  >>  proxyName;
+
+		//	Try to initialize Electrometer1Address from class property
+		cl_prop = ds_class->get_class_property(dev_prop[++i].name);
+		if (cl_prop.is_empty()==false)	cl_prop  >>  electrometer1Address;
+		else {
+			//	Try to initialize Electrometer1Address from default device value
+			def_prop = ds_class->get_default_device_property(dev_prop[i].name);
+			if (def_prop.is_empty()==false)	def_prop  >>  electrometer1Address;
+		}
+		//	And try to extract Electrometer1Address value from database
+		if (dev_prop[i].is_empty()==false)	dev_prop[i]  >>  electrometer1Address;
+
+		//	Try to initialize Electrometer2Address from class property
+		cl_prop = ds_class->get_class_property(dev_prop[++i].name);
+		if (cl_prop.is_empty()==false)	cl_prop  >>  electrometer2Address;
+		else {
+			//	Try to initialize Electrometer2Address from default device value
+			def_prop = ds_class->get_default_device_property(dev_prop[i].name);
+			if (def_prop.is_empty()==false)	def_prop  >>  electrometer2Address;
+		}
+		//	And try to extract Electrometer2Address value from database
+		if (dev_prop[i].is_empty()==false)	dev_prop[i]  >>  electrometer2Address;
+
+		//	Try to initialize ComProtocol from class property
+		cl_prop = ds_class->get_class_property(dev_prop[++i].name);
+		if (cl_prop.is_empty()==false)	cl_prop  >>  comProtocol;
+		else {
+			//	Try to initialize ComProtocol from default device value
+			def_prop = ds_class->get_default_device_property(dev_prop[i].name);
+			if (def_prop.is_empty()==false)	def_prop  >>  comProtocol;
+		}
+		//	And try to extract ComProtocol value from database
+		if (dev_prop[i].is_empty()==false)	dev_prop[i]  >>  comProtocol;
+
+	}
+
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::get_device_property_after) ENABLED START -----*/
+
+	//	Check device property data members init
+	//- Creates default property
+  Tango::DbData data_put;
+  if ( dev_prop[0].is_empty() )
+  {
+    Tango::DbDatum  prop("ComProtocol");
+    prop  <<  comProtocol;
+    data_put.push_back(prop);
+  }
+  if ( dev_prop[0].is_empty() )
+  {
+    Tango::DbDatum  prop("ProxyName");
+    prop  <<  proxyName;
+    data_put.push_back(prop);
+  }
+  if ( dev_prop[1].is_empty() )
+  {
+    Tango::DbDatum  prop("Electrometer1Address");
+    prop  <<  electrometer1Address;
+    data_put.push_back(prop);
+  }
+  if ( dev_prop[2].is_empty() )
+  {
+    Tango::DbDatum  prop("Electrometer2Address");
+    prop  <<  electrometer2Address;
+    data_put.push_back(prop);
+  }
+
+  //- write default property if created
+  if( !data_put.empty() )
+    get_db_device()->put_property(data_put);
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::get_device_property_after
+}
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::always_executed_hook()
+ *	Description : method always executed before any command is executed
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::always_executed_hook()
+{
+	//INFO_STREAM << "MCCE2Electrometers::always_executed_hook()  " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::always_executed_hook) ENABLED START -----*/
+
+	//	code always executed before all requests
+	//- noop
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::always_executed_hook
+}
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::read_attr_hardware()
+ *	Description : Hardware acquisition for attributes
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::read_attr_hardware(TANGO_UNUSED(vector<long> &attr_list))
+{
+	DEBUG_STREAM << "MCCE2Electrometers::read_attr_hardware(vector<long> &attr_list) entering... " << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::read_attr_hardware) ENABLED START -----*/
+
+	//	Add your own code
+	//  Add your own code here
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::read_attr_hardware
+}
+
+//--------------------------------------------------------
+/**
+ *	Read attribute electrometerChannel related method
+ *	Description: MCCE2 electrometer have two channels to support two amplifiers.\nWARN : default is 0 (please set this value first).
+ *
+ *	Data type:	Tango::DevUShort
+ *	Attr type:	Scalar
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::read_electrometerChannel(Tango::Attribute &attr)
+{
+	DEBUG_STREAM << "MCCE2Electrometers::read_electrometerChannel(Tango::Attribute &attr) entering... " << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::read_electrometerChannel) ENABLED START -----*/
+	Tango::DevUShort channelNumber = 0;
+
+  if ( !this->_electrometer )
+  {
+    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "Failed to build the electrometer obj : not enough memory!?",
+      "MCCE2Electrometers::read_electrometerChannel()"
+    );
+  }
+
+  try
+  {
+    *attr_electrometerChannel_read = this->_electrometer->get_ElectroChannel();
+    attr.set_value(attr_electrometerChannel_read);
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to set the active channel value!");
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    ERROR_STREAM << "Failed to get the active channel value : DevFailed EXCEPTION -> " << df << std::endl;
+
+    Tango::Except::re_throw_exception(df,
+                                      "UNKNOWN_ERROR",
+                                      "Failed to get the active channel value.",
+                                      "MCCE2Electrometers::read_electrometerChannel()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to set the active channel value!");
+
+    ERROR_STREAM << "Failed to get the active channel value : DevFailed EXCEPTION -> " << df << std::endl;
+
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to get the new active channel value!",
+                                      "MCCE2Electrometers::read_electrometerChannel()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    ERROR_STREAM << "Failed to get the active channel value : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Failed to set the active channel value!");
+
+    throw;
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::read_electrometerChannel
+}
+//--------------------------------------------------------
+/**
+ *	Write attribute electrometerChannel related method
+ *	Description: MCCE2 electrometer have two channels to support two amplifiers.\nWARN : default is 0 (please set this value first).
+ *
+ *	Data type:	Tango::DevUShort
+ *	Attr type:	Scalar
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::write_electrometerChannel(Tango::WAttribute &attr)
+{
+	DEBUG_STREAM << "MCCE2Electrometers::write_electrometerChannel(Tango::WAttribute &attr) entering... " << endl;
+	//	Retrieve write value
+	Tango::DevUShort	w_val;
+	attr.get_write_value(w_val);
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::write_electrometerChannel) ENABLED START -----*/
+
+  if ( w_val == ELETRO_CHANNEL_ONE )
+  {
+    if ( this->_electrometerCH1 )
+    {
+      this->_electrometer = this->_electrometerCH1;
+      //- now force update from HW
+      this->_updateRange1FromHW = true;
+    }
+    else
+    {
+      WARN_STREAM << "Cannot control electrometer on this channel : seems that nothing is connected on!" << std::endl;
+      //- warn nothing is connected on this channel
+      *attr_range1_read = CORBA::string_dup("Not connected");
+    }
+  }
+  else if ( w_val == ELETRO_CHANNEL_TWO )
+  {
+    if ( this->_electrometerCH2 )
+    {
+      this->_electrometer = this->_electrometerCH2;
+      //- now force update from HW
+      this->_updateRange2FromHW = true;
+    }
+    else
+    {
+      WARN_STREAM << "Cannot control electrometer on this channel : seems that nothing is connected on!" << std::endl;
+      //- warn nothing is connected on this channel
+      *attr_range2_read = CORBA::string_dup("Not connected");
+    }
+  }
+  attr_electrometerChannel_write = w_val;
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::write_electrometerChannel
+}
+//--------------------------------------------------------
+/**
+ *	Read attribute range1 related method
+ *	Description: The channel one MCCE2 range.
+ *
+ *	Data type:	Tango::DevString
+ *	Attr type:	Scalar
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::read_range1(Tango::Attribute &attr)
+{
+	DEBUG_STREAM << "MCCE2Electrometers::read_range1(Tango::Attribute &attr) entering... " << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::read_range1) ENABLED START -----*/
+	if ( !this->_electrometerCH1 )
+  {
+    *attr_range1_read = CORBA::string_dup("Not connected");
+  }
+  else
+  {
+    if ( this->_updateRange1FromHW && *attr_electrometerChannel_read == ELETRO_CHANNEL_ONE )
+    {
+      *attr_range1_read = this->get_range();
+      this->_updateRange1FromHW = false;
+    }
+  }
+
+  attr.set_value(attr_range1_read);
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::read_range1
+}
+//--------------------------------------------------------
+/**
+ *	Read attribute range2 related method
+ *	Description: The channel two MCCE range.
+ *
+ *	Data type:	Tango::DevString
+ *	Attr type:	Scalar
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::read_range2(Tango::Attribute &attr)
+{
+	DEBUG_STREAM << "MCCE2Electrometers::read_range2(Tango::Attribute &attr) entering... " << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::read_range2) ENABLED START -----*/
+	if ( !this->_electrometerCH2 )
+  {
+    *attr_range2_read = CORBA::string_dup("Not connected");
+  }
+  else
+  {
+    if ( this->_updateRange2FromHW && *attr_electrometerChannel_read == ELETRO_CHANNEL_TWO )
+    {
+      *attr_range2_read = this->get_range();
+      this->_updateRange2FromHW = false;
+    }
+  }
+
+  attr.set_value(attr_range2_read);
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::read_range2
+}
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::add_dynamic_attributes()
+ *	Description : Create the dynamic attributes if any
+ *                for specified device.
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::add_dynamic_attributes()
+{
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::add_dynamic_attributes) ENABLED START -----*/
+
+	//	Add your own code to create and add dynamic attributes if any
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::add_dynamic_attributes
+}
+
+//--------------------------------------------------------
+/**
+ *	Command State related method
+ *	Description: This command gets the device state (stored in its <i>device_state</i> data member) and returns it to the caller.
+ *
+ *	@returns State Code
+ */
+//--------------------------------------------------------
+Tango::DevState MCCE2Electrometers::dev_state()
+{
+	DEBUG_STREAM << "MCCE2Electrometers::State()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::dev_state) ENABLED START -----*/
+
+	Tango::DevState	argout = Tango::UNKNOWN; // replace by your own algorithm
+	//	Add your own code
+  DEBUG_STREAM << "MCCE2Electrometers::dev_state(): entering... !" << endl;
+
+  //  Add your own code to control device here
+  try
+  {
+    //- check properties
+    if ( this->_missing_property )
+    {
+      argout = Tango::FAULT;
+    }
+    //- check device initialization
+    else  if ( !this->_electrometerCH1 && !this->_electrometerCH2 )
+    {
+      argout = Tango::FAULT;
+    }
+    //- check if an electro is conencted on a channel
+    else if( attr_electrometerChannel_write == ELETRO_CHANNEL_ONE && !this->_electrometerCH1)
+    {
+      argout = Tango::DISABLE;
+    }
+    else if( attr_electrometerChannel_write == ELETRO_CHANNEL_TWO && !this->_electrometerCH2)
+    {
+      argout = Tango::DISABLE;
+    }
+    //- check channel number
+    else if ( attr_electrometerChannel_write != ELETRO_CHANNEL_ONE && attr_electrometerChannel_write != ELETRO_CHANNEL_TWO )
+    {
+      argout = Tango::ALARM;
+    }
+    else
+    {
+      //- update state
+      this->_electrometer->electrometer_status();
+      //- get electrometer state
+      short tmpState = _electrometer->electrometer_state();
+
+      switch(tmpState)
+      {
+      case Tango::ON    :
+        argout = Tango::ON;
+        break;
+      case Tango::FAULT :
+        argout = Tango::FAULT;
+        break;
+      case Tango::ALARM  :
+        argout = Tango::ALARM;
+        break;
+        /*case Tango::UNKNOWN:
+        default :
+            argout = Tango::UNKNOWN;
+            break;*/
+      }
+    }
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to get electrometer state!");
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    ERROR_STREAM << "Cannot perform get electrometer state : ElectrometerException EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "UNKNOWN_ERROR",
+                                      "Failed to get electrometer state.",
+                                      "MCCE2Electrometers::dev_state()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to get electrometer state!");
+
+    ERROR_STREAM << "Failed to get electrometer state : DevFailed EXCEPTION -> " << df << std::endl;
+
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to get electrometer state!",
+                                      "MCCE2Electrometers::dev_state()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to get electrometer state!");
+    ERROR_STREAM << "Failed to get electrometer state : [...] EXCEPTION " << std::endl;
+    throw;
+  }
+
+  set_state(argout);
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::dev_state
+	set_state(argout);    // Give the state to Tango.
+	if (argout!=Tango::ALARM)
+		DeviceImpl::dev_state();
+	return get_state();  // Return it after Tango management.
+}
+//--------------------------------------------------------
+/**
+ *	Command Status related method
+ *	Description: This command gets the device status (stored in its <i>device_status</i> data member) and returns it to the caller.
+ *
+ *	@returns Status description
+ */
+//--------------------------------------------------------
+Tango::ConstDevString MCCE2Electrometers::dev_status()
+{
+	DEBUG_STREAM << "MCCE2Electrometers::Status()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::dev_status) ENABLED START -----*/
+
+	string	status = "Device is OK";
+	//	Add your own code
+	//- clear previous status
+  this->_statusStr.clear();
+
+  //  Add your own code to control device here
+  try
+  {
+    if ( this->_missing_property )
+    {
+      _statusStr = "Device cannot be up while its properties are not set!";
+    }
+    //- check device initialization
+    else  if ( !this->_electrometerCH1 && !_electrometerCH2 )
+    {
+      _statusStr = "No electrometer connected!";
+    }
+
+    //- check if an electro is connected on a channel
+    if( attr_electrometerChannel_write == ELETRO_CHANNEL_ONE && !this->_electrometerCH1)
+    {
+      _statusStr += "No electrometer on channel ONE!";
+    }
+    else if( attr_electrometerChannel_write == ELETRO_CHANNEL_TWO && !this->_electrometerCH2)
+    {
+      _statusStr += "No electrometer on channel TWO!";
+    }
+    else if ( attr_electrometerChannel_write != ELETRO_CHANNEL_ONE && attr_electrometerChannel_write != ELETRO_CHANNEL_TWO )
+    {
+      _statusStr += "Invalid electrometer channel set!";
+    }
+    else
+    {
+      //- add electrometer status info
+      _statusStr += this->_electrometer->electrometer_status();
+    }
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    set_state(Tango::ALARM);
+    set_status("Cannot perform electrometer_status() command.");
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    ERROR_STREAM << "Cannot perform electrometer_status() command : ElectrometerException EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "UNKNOWN_ERROR",
+                                      "Failed to get electrometer status.",
+                                      "MCCE2Electrometers::dev_status()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    set_state(Tango::ALARM);
+    set_status("Cannot perform electrometer_status() command!");
+
+    ERROR_STREAM << "Cannot perform electrometer_status() command : DevFailed EXCEPTION -> " << df << std::endl;
+
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Cannot perform electrometer_status() command!",
+                                      "MCCE2Electrometers::dev_status()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    ERROR_STREAM << "Failed to enable remote mode : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Cannot perform electrometer_status() command : caugth [...] exception.");
+    throw;
+  }
+  set_status( _statusStr.c_str() );
+  return _statusStr.c_str();
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::dev_status
+	set_status(status);               // Give the status to Tango.
+	return DeviceImpl::dev_status();  // Return it.
+}
+//--------------------------------------------------------
+/**
+ *	Command RangeUP related method
+ *	Description:
+ *
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::range_up()
+{
+	DEBUG_STREAM << "MCCE2Electrometers::RangeUP()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::range_up) ENABLED START -----*/
+
+	//	Add your own code
+	if ( !this->_electrometer )
+  {
+    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "Failed to build the electrometer obj : not enough memory!?",
+      "MCCE2Electrometers::range_up()"
+    );
+  }
+
+  try
+  {
+    this->_electrometer->range_up();
+    //- update range attr from hardware
+    if ( *attr_electrometerChannel_read == ELETRO_CHANNEL_ONE)
+      this->_updateRange1FromHW = true;
+    else if ( *attr_electrometerChannel_read == ELETRO_CHANNEL_TWO)
+      this->_updateRange2FromHW = true;
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to up the range!");
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    ERROR_STREAM << "Failed to up the range : DevFailed EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "UNKNOWN_ERROR",
+                                      "Failed to up the range.",
+                                      "MCCE2Electrometers::range_up()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to up the range!");
+
+    ERROR_STREAM << "Failed to up the range : DevFailed EXCEPTION -> " << df << std::endl;
+
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to up the range!",
+                                      "MCCE2Electrometers::range_up()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    ERROR_STREAM << "Failed to up the range : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Failed to up the range!");
+
+    throw;
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::range_up
+}
+//--------------------------------------------------------
+/**
+ *	Command RangeDOWN related method
+ *	Description:
+ *
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::range_down()
+{
+	DEBUG_STREAM << "MCCE2Electrometers::RangeDOWN()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::range_down) ENABLED START -----*/
+
+	//	Add your own code
+	if ( !this->_electrometer )
+  {
+    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "Failed to build the electrometer obj : not enough memory!?",
+      "MCCE2Electrometers::range_down()"
+    );
+  }
+
+  try
+  {
+    this->_electrometer->range_down();
+    //- update range attr from hardware
+    if ( *attr_electrometerChannel_read == ELETRO_CHANNEL_ONE )
+      this->_updateRange1FromHW = true;
+    else if ( *attr_electrometerChannel_read == ELETRO_CHANNEL_TWO )
+      this->_updateRange2FromHW = true;
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to down the range!");
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    ERROR_STREAM << "Failed to down the range : DevFailed EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "UNKNOWN_ERROR",
+                                      "Failed to down the range.",
+                                      "MCCE2Electrometers::range_down()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to down the range!");
+
+    ERROR_STREAM << "Failed to down the range : DevFailed EXCEPTION -> " << df << std::endl;
+
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to down the range!",
+                                      "MCCE2Electrometers::range_down()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    ERROR_STREAM << "Failed to down the range : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Failed to down the range!");
+
+    throw;
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::range_down
+}
+//--------------------------------------------------------
+/**
+ *	Command SetZeroVFFunction related method
+ *	Description:
+ *
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::set_zero_vffunction()
+{
+	DEBUG_STREAM << "MCCE2Electrometers::SetZeroVFFunction()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::set_zero_vffunction) ENABLED START -----*/
+
+	//	Add your own code
+	if ( !this->_electrometer )
+  {
+    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "Failed to build the electrometer obj : not enough memory!?",
+      "MCCE2Electrometers::set_zero_vffunction()"
+    );
+  }
+
+  try
+  {
+    this->_electrometer->set_Zero_VonF_function();
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to enable ZERO V/F function!");
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    ERROR_STREAM << "Failed to enable ZERO V/F function : DevFailed EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "UNKNOWN_ERROR",
+                                      "Failed to enable ZERO V/F function.",
+                                      "MCCE2Electrometers::set_zero_vffunction()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to enable ZERO V/F function!");
+
+    ERROR_STREAM << "Failed to enable ZERO V/F function : DevFailed EXCEPTION -> " << df << std::endl;
+
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to enable ZERO V/F function!",
+                                      "MCCE2Electrometers::set_zero_vffunction()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    ERROR_STREAM << "Failed to enable ZERO V/F function : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Failed to enable ZERO V/F function!");
+
+    throw;
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::set_zero_vffunction
+}
+//--------------------------------------------------------
+/**
+ *	Command SetOffsetZeroV1Function related method
+ *	Description:
+ *
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::set_offset_zero_v1_function()
+{
+	DEBUG_STREAM << "MCCE2Electrometers::SetOffsetZeroV1Function()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::set_offset_zero_v1_function) ENABLED START -----*/
+
+	//	Add your own code
+	if ( !this->_electrometer )
+  {
+    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "Failed to build the electrometer obj : not enough memory!?",
+      "MCCE2Electrometers::set_offset_zero_v1_function()"
+    );
+  }
+
+  try
+  {
+    this->_electrometer->set_Offset_ZeroV1_function();
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to enable OFFSET or ZERO V1 function!");
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    ERROR_STREAM << "Failed to enable OFFSET or ZERO V1 function : DevFailed EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "UNKNOWN_ERROR",
+                                      "Failed to enable OFFSET or ZERO V1 function.",
+                                      "MCCE2Electrometers::set_offset_zero_v1_function()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to enable OFFSET or ZERO V1 function!");
+
+    ERROR_STREAM << "Failed to enable OFFSET or ZERO V1 function : DevFailed EXCEPTION -> " << df << std::endl;
+
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to enable OFFSET or ZERO V1 function!",
+                                      "MCCE2Electrometers::set_offset_zero_v1_function()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    ERROR_STREAM << "Failed to enable OFFSET or ZERO V1 function : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Failed to enable OFFSET or ZERO V1 function!");
+
+    throw;
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::set_offset_zero_v1_function
+}
+//--------------------------------------------------------
+/**
+ *	Command SetLeakageZeroV2Function related method
+ *	Description:
+ *
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::set_leakage_zero_v2_function()
+{
+	DEBUG_STREAM << "MCCE2Electrometers::SetLeakageZeroV2Function()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::set_leakage_zero_v2_function) ENABLED START -----*/
+
+	//	Add your own code
+	if ( !this->_electrometer )
+  {
+    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "Failed to build the electrometer obj : not enough memory!?",
+      "MCCE2Electrometers::set_leakage_zero_v2_function()"
+    );
+  }
+
+  try
+  {
+    this->_electrometer->set_Leakage_ZeroV2_function();
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to enable LEAKAGE or ZERO V2 function!");
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    ERROR_STREAM << "Failed to enable LEAKAGE or ZERO V2 function : DevFailed EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "UNKNOWN_ERROR",
+                                      "Failed to enable LEAKAGE or ZERO V2 function.",
+                                      "MCCE2Electrometers::set_leakage_zero_v2_function()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to enable LEAKAGE or ZERO V2 function!");
+
+    ERROR_STREAM << "Failed to enable LEAKAGE or ZERO V2 function : DevFailed EXCEPTION -> " << df << std::endl;
+
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to enable LEAKAGE or ZERO V2 function!",
+                                      "MCCE2Electrometers::set_leakage_zero_v2_function()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    ERROR_STREAM << "Failed to enable LEAKAGE or ZERO V2 function : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Failed to enable LEAKAGE or ZERO V2 function!");
+
+    throw;
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::set_leakage_zero_v2_function
+}
+//--------------------------------------------------------
+/**
+ *	Command SetTestFunction related method
+ *	Description:
+ *
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::set_test_function()
+{
+	DEBUG_STREAM << "MCCE2Electrometers::SetTestFunction()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::set_test_function) ENABLED START -----*/
+
+	//	Add your own code
+	if ( !this->_electrometer )
+  {
+    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "Failed to build the electrometer obj : not enough memory!?",
+      "MCCE2Electrometers::set_test_function()"
+    );
+  }
+
+  try
+  {
+    this->_electrometer->set_Test_function();
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to enable TEST function!");
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    ERROR_STREAM << "Failed to enable TEST function : DevFailed EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "UNKNOWN_ERROR",
+                                      "Failed to enable TEST function.",
+                                      "MCCE2Electrometers::set_test_function()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to enable TEST function!");
+
+    ERROR_STREAM << "Failed to enable TEST function : DevFailed EXCEPTION -> " << df << std::endl;
+
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to enable TEST function!",
+                                      "MCCE2Electrometers::set_test_function()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    ERROR_STREAM << "Failed to enable TEST function : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Failed to enable TEST function!");
+
+    throw;
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::set_test_function
+}
+//--------------------------------------------------------
+/**
+ *	Command SetMeasureFunction related method
+ *	Description:
+ *
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::set_measure_function()
+{
+	DEBUG_STREAM << "MCCE2Electrometers::SetMeasureFunction()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::set_measure_function) ENABLED START -----*/
+
+	//	Add your own code
+	if ( !this->_electrometer )
+  {
+    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "Failed to build the electrometer obj : not enough memory!?",
+      "MCCE2Electrometers::set_measure_function()"
+    );
+  }
+
+  try
+  {
+    this->_electrometer->set_Measure_function();
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+    set_state(Tango::ALARM);
+    set_status("Failed to enable MEASURE function!");
+
+    ERROR_STREAM << "Failed to enable MEASURE function : ElectrometerException EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to enable MEASURE function.",
+                                      "MCCE2Electrometers::set_measure_function()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to enable MEASURE function!");
+
+    ERROR_STREAM << "Failed to enable MEASURE function : DevFailed EXCEPTION -> " << df << std::endl;
+
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to enable MEASURE function!",
+                                      "MCCE2Electrometers::set_measure_function()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    ERROR_STREAM << "Failed to enable MEASURE function : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Failed to enable MEASURE function!");
+
+    throw;
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::set_measure_function
+}
+//--------------------------------------------------------
+/**
+ *	Command MCCE2_ON related method
+ *	Description:
+ *
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::mcce2__on()
+{
+	DEBUG_STREAM << "MCCE2Electrometers::MCCE2_ON()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::mcce2__on) ENABLED START -----*/
+
+	//	Add your own code
+	if ( !this->_electrometer )
+  {
+    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "Failed to build the electrometer obj : not enough memory!?",
+      "MCCE2Electrometers::mcce2__on()"
+    );
+  }
+
+  try
+  {
+    this->_electrometer->mcce_on();
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to enable MCCE ON function!");
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    ERROR_STREAM << "Failed to enable MCCE ON function : ElectrometerException EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "UNKNOWN_ERROR",
+                                      "Failed to enable MCCE ON function.",
+                                      "MCCE2Electrometers::mcce2__on()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to enable MCCE ON function!");
+
+    ERROR_STREAM << "Failed to enable MCCE ON function : DevFailed EXCEPTION -> " << df << std::endl;
+
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to enable MCCE ON function!",
+                                      "MCCE2Electrometers::mcce2__on()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    ERROR_STREAM << "Failed to enable MCCE2_ON function : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Failed to enable MCCE ON function!");
+
+    throw;
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::mcce2__on
+}
+//--------------------------------------------------------
+/**
+ *	Command MCCE2_OFF related method
+ *	Description:
+ *
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::mcce2__off()
+{
+	DEBUG_STREAM << "MCCE2Electrometers::MCCE2_OFF()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::mcce2__off) ENABLED START -----*/
+
+	//	Add your own code
+	if ( !this->_electrometer )
+  {
+    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "Failed to build the electrometer obj : not enough memory!?",
+      "MCCE2Electrometers::mcce2__off()"
+    );
+  }
+
+  try
+  {
+    this->_electrometer->mcce_off();
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to enable MCCE OFF function!");
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    ERROR_STREAM << "Failed to enable MCCE OFF function : ElectrometerException EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "UNKNOWN_ERROR",
+                                      "Failed to enable MCCE OFF function.",
+                                      "MCCE2Electrometers::mcce2__off()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to enable MCCE OFF function!");
+
+    ERROR_STREAM << "Failed to enable MCCE OFF function : DevFailed EXCEPTION -> " << df << std::endl;
+
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to enable MCCE OFF function!",
+                                      "MCCE2Electrometers::mcce2__off()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    ERROR_STREAM << "Failed to enable MCCE2_OFF function : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Failed to enable MCCE OFF function!");
+
+    throw;
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::mcce2__off
+}
+//--------------------------------------------------------
+/**
+ *	Command Local related method
+ *	Description:
+ *
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::local()
+{
+	DEBUG_STREAM << "MCCE2Electrometers::Local()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::local) ENABLED START -----*/
+
+	//	Add your own code
+	if ( !this->_electrometer )
+  {
+    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "Failed to build the electrometer obj : not enough memory!?",
+      "MCCE2Electrometers::local()"
+    );
+  }
+
+  try
+  {
+    this->_electrometer->local();
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to enable local mode!");
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    ERROR_STREAM << "Failed to enable local mode : ElectrometerException EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "UNKNOWN_ERROR",
+                                      "Failed to enable local mode.",
+                                      "MCCE2Electrometers::local()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to enable local mode!");
+
+    ERROR_STREAM << "Failed to enable local function : DevFailed EXCEPTION -> " << df << std::endl;
+
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to enable local mode!",
+                                      "MCCE2Electrometers::local()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    ERROR_STREAM << "Failed to enable local mode : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Failed to enable local mode!");
+
+    throw;
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::local
+}
+//--------------------------------------------------------
+/**
+ *	Command Remote related method
+ *	Description:
+ *
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::remote()
+{
+	DEBUG_STREAM << "MCCE2Electrometers::Remote()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::remote) ENABLED START -----*/
+
+	//	Add your own code
+	if ( !this->_electrometer )
+  {
+    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "Failed to build the electrometer obj : not enough memory!?",
+      "MCCE2Electrometers::remote()"
+    );
+  }
+
+  try
+  {
+    this->_electrometer->remote();
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to enable remote mode!");
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    ERROR_STREAM << "Failed to enable remote mode : ElectrometerException EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "UNKNOWN_ERROR",
+                                      "Failed to enable remote mode.",
+                                      "MCCE2Electrometers::remote()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to enable remote mode!");
+
+    ERROR_STREAM << "Failed to enable remote mode : DevFailed EXCEPTION -> " << df << std::endl;
+
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to enable remote mode!",
+                                      "MCCE2Electrometers::remote()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    ERROR_STREAM << "Failed to enable remote mode : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Failed to enable remote mode!");
+
+    throw;
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::remote
+}
+//--------------------------------------------------------
+/**
+ *	Command Reset related method
+ *	Description:
+ *
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::reset()
+{
+	DEBUG_STREAM << "MCCE2Electrometers::Reset()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::reset) ENABLED START -----*/
+
+	//	Add your own code
+	if ( !this->_electrometer )
+  {
+    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "Failed to build the electrometer obj : not enough memory!?",
+      "MCCE2Electrometers::reset()"
+    );
+  }
+
+  try
+  {
+    this->_electrometer->reset();
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to enable reset mode!");
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    ERROR_STREAM << "Failed to enable reset mode : ElectrometerException EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "UNKNOWN_ERROR",
+                                      "Failed to enable reset mode.",
+                                      "MCCE2Electrometers::reset()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to enable reset mode!");
+
+    ERROR_STREAM << "Failed to enable reset mode : DevFailed EXCEPTION -> " << df << std::endl;
+
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to enable reset mode!",
+                                      "MCCE2Electrometers::reset()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    ERROR_STREAM << "Failed to enable reset mode : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Failed to enable reset mode!");
+
+    throw;
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::reset
+}
+//--------------------------------------------------------
+/**
+ *	Command ClearRegisters related method
+ *	Description:
+ *
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::clear_registers()
+{
+	DEBUG_STREAM << "MCCE2Electrometers::ClearRegisters()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::clear_registers) ENABLED START -----*/
+
+	//	Add your own code
+	if ( !this->_electrometer )
+  {
+    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "Failed to build the electrometer obj : not enough memory!?",
+      "MCCE2Electrometers::clear_registers()"
+    );
+  }
+
+  try
+  {
+    this->_electrometer->clear_registers();
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to clear all errors!");
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    ERROR_STREAM << "Failed to clear all errors : ElectrometerException EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "UNKNOWN_ERROR",
+                                      "Failed to clear all errors.",
+                                      "MCCE2Electrometers::clear_registers()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to clear all errors!");
+
+    ERROR_STREAM << "Failed to clear all errors : DevFailed EXCEPTION -> " << df << std::endl;
+
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to clear all errors!",
+                                      "MCCE2Electrometers::clear_registers()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    ERROR_STREAM << "Failed to clear errors : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Failed to clear all errors!");
+
+    throw;
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::clear_registers
+}
+//--------------------------------------------------------
+/**
+ *	Command GetRange related method
+ *	Description:
+ *
+ *	@returns The actual electrometer range
+ */
+//--------------------------------------------------------
+Tango::DevString MCCE2Electrometers::get_range()
+{
+	Tango::DevString argout;
+	DEBUG_STREAM << "MCCE2Electrometers::GetRange()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::get_range) ENABLED START -----*/
+
+	//	Add your own code
+	//  POGO has generated a method core with argout allocation.
+  //  If you would like to use a static reference without copying,
+  //  See "TANGO Device Server Programmer's Manual"
+  //    (chapter : Writing a TANGO DS / Exchanging data)
+  //------------------------------------------------------------
+
+  //  Add your own code to control device here
+  DEBUG_STREAM << "MCCE2Electrometers::get_range(): entering... !" << endl;
+
+  //  Add your own code to control device here
+  if ( !this->_electrometer )
+  {
+    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "Failed to build the electrometer obj : not enough memory!?",
+      "MCCE2Electrometers::get_range()"
+    );
+  }
+
+  try
+  {
+    std::string rangeStr("");
+    rangeStr = this->_electrometer->get_ElectroMeterRange();
+    argout = new char [rangeStr.size() + 1];
+    strcpy(argout, rangeStr.c_str());
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    if ( argout )
+      delete [] argout;
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+    set_state(Tango::ALARM);
+    set_status("Failed to read the range!");
+
+    ERROR_STREAM << "Failed to set read the range : ElectrometerException EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "UNKNOWN_ERROR",
+                                      "Failed to read the range.",
+                                      "MCCE2Electrometers::get_range()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    if ( argout )
+      delete [] argout;
+    set_state(Tango::ALARM);
+    set_status("Failed to read the range!");
+
+    ERROR_STREAM << "Failed to read the range : DevFailed EXCEPTION -> " << df << std::endl;
+
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to read the range!",
+                                      "MCCE2Electrometers::get_range()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    if ( argout )
+      delete [] argout;
+    ERROR_STREAM << "Failed to read the range : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Failed to read the range!");
+
+    throw;
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::get_range
+	return argout;
+}
+//--------------------------------------------------------
+/**
+ *	Command SetRange related method
+ *	Description:
+ *
+ *	@param argin The range to apply on the electrometer
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::set_range(Tango::DevString argin)
+{
+	DEBUG_STREAM << "MCCE2Electrometers::SetRange()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::set_range) ENABLED START -----*/
+
+	//	Add your own code
+	if ( !this->_electrometer )
+  {
+    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "Failed to build the electrometer obj : not enough memory!?",
+      "MCCE2Electrometers::set_range()"
+    );
+  }
+
+  try
+  {
+    this->_electrometer->set_ElectroMeterRange(std::string(argin));
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to write the range!");
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    ERROR_STREAM << "Failed to write the range : ElectrometerException EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to write the range.",
+                                      "MCCE2Electrometers::set_range()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    set_state(Tango::ALARM);
+    set_status("Failed to write the range!");
+
+    ERROR_STREAM << "Failed to write the range : DevFailed EXCEPTION -> " << df << std::endl;
+
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to write the range!",
+                                      "MCCE2Electrometers::set_range()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    ERROR_STREAM << "Failed to set the new range value : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Failed to write the range!");
+
+    throw;
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::set_range
+}
+//--------------------------------------------------------
+/**
+ *	Command GetMode related method
+ *	Description:
+ *
+ *	@returns The electrometer mode (MEASURE, LEAKAGE ...)
+ */
+//--------------------------------------------------------
+Tango::DevString MCCE2Electrometers::get_mode()
+{
+	Tango::DevString argout;
+	DEBUG_STREAM << "MCCE2Electrometers::GetMode()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::get_mode) ENABLED START -----*/
+
+	//	Add your own code
+	//  POGO has generated a method core with argout allocation.
+  //  If you would like to use a static reference without copying,
+  //  See "TANGO Device Server Programmer's Manual"
+  //    (chapter : Writing a TANGO DS / Exchanging data)
+  //------------------------------------------------------------
+  DEBUG_STREAM << "MCCE2Electrometers::get_mode(): entering... !" << endl;
+
+  //  Add your own code to control device here
+  if ( !this->_electrometer )
+  {
+    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "Failed to build the electrometer obj : not enough memory!?",
+      "MCCE2Electrometers::get_mode()"
+    );
+  }
+
+
+  try
+  {
+    std::string modeStr = this->_electrometer->get_ElectroMeterMode();
+    argout = new char [modeStr.size() + 1];
+    strcpy(argout, modeStr.c_str());
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    if ( argout )
+      delete [] argout;
+    set_state(Tango::ALARM);
+    set_status("Failed to read the mode!");
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    ERROR_STREAM << "Failed to set read the mode : ElectrometerException EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "UNKNOWN_ERROR",
+                                      "Failed to read the mode.",
+                                      "MCCE2Electrometers::get_mode()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    if ( argout )
+      delete [] argout;
+    set_state(Tango::ALARM);
+    set_status("Failed to read the mode!");
+
+    ERROR_STREAM << "Failed to read the mode : DevFailed EXCEPTION -> " << df << std::endl;
+
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to read the mode!",
+                                      "MCCE2Electrometers::get_mode()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    if ( argout )
+      delete [] argout;
+    ERROR_STREAM << "Failed to read the mode : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Failed to read the mode!");
+
+    throw;
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::get_mode
+	return argout;
+}
+//--------------------------------------------------------
+/**
+ *	Command GetPolarity related method
+ *	Description:
+ *
+ *	@returns The electrometer polarity
+ */
+//--------------------------------------------------------
+Tango::DevString MCCE2Electrometers::get_polarity()
+{
+	Tango::DevString argout;
+	DEBUG_STREAM << "MCCE2Electrometers::GetPolarity()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::get_polarity) ENABLED START -----*/
+
+	//	Add your own code
+	//  POGO has generated a method core with argout allocation.
+  //  If you would like to use a static reference without copying,
+  //  See "TANGO Device Server Programmer's Manual"
+  //    (chapter : Writing a TANGO DS / Exchanging data)
+  //------------------------------------------------------------
+  DEBUG_STREAM << "MCCE2Electrometers::get_polarity(): entering... !" << endl;
+
+  //  Add your own code to control device here
+  if ( !this->_electrometer )
+  {
+    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "Failed to build the electrometer obj : not enough memory!?",
+      "MCCE2Electrometers::get_polarity()"
+    );
+  }
+
+  try
+  {
+    std::string polarStr = this->_electrometer->get_ElectroMeterPolarity();
+    argout = new char [polarStr.size() + 1];
+    strcpy(argout, polarStr.c_str());
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    if ( argout )
+      delete [] argout;
+    set_state(Tango::ALARM);
+    set_status("Failed to read the polarity!");
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    ERROR_STREAM << "Failed to set read the polarity : ElectrometerException EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to read the polarity.",
+                                      "MCCE2Electrometers::get_polarity()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    if ( argout )
+      delete [] argout;
+    set_state(Tango::ALARM);
+    set_status("Failed to read the polarity!");
+
+    ERROR_STREAM << "Failed to read the polarity : DevFailed EXCEPTION -> " << df << std::endl;
+
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to read the polarity!",
+                                      "MCCE2Electrometers::get_polarity()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    if ( argout )
+      delete [] argout;
+    ERROR_STREAM << "Failed to read the polarity : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Failed to read the polarity!");
+
+    throw;
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::get_polarity
+	return argout;
+}
+//--------------------------------------------------------
+/**
+ *	Command SetPolarity related method
+ *	Description:
+ *
+ *	@param argin POSITIVE or NEGATIVE
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::set_polarity(Tango::DevString argin)
+{
+	DEBUG_STREAM << "MCCE2Electrometers::SetPolarity()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::set_polarity) ENABLED START -----*/
+
+	//	Add your own code
+	if ( !this->_electrometer )
+  {
+    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "Failed to build the electrometer obj : not enough memory!?",
+      "MCCE2Electrometers::set_polarity()"
+    );
+  }
+
+  try
+  {
+    this->_electrometer->set_ElectroMeterPolarity(argin);
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    set_state(Tango::ALARM);
+    set_status("Failed to change electrometer polarity!");
+    ERROR_STREAM << "Failed to change electrometer polarity : ElectrometerException EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "UNKNOWN_ERROR",
+                                      "Failed to change electrometer polarity.",
+                                      "hzFilterAttrib::set_polarity()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    ERROR_STREAM << "Failed to change electrometer polarity : DevFailed EXCEPTION -> " << df << std::endl;
+
+    set_state(Tango::ALARM);
+    set_status("Failed to change electrometer polarity!");
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to change electrometer polarity!",
+                                      "MCCE2Electrometers::set_polarity()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    ERROR_STREAM << "Failed to change electrometer polarity : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Failed to change electrometer polarity!");
+
+    throw;
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::set_polarity
+}
+//--------------------------------------------------------
+/**
+ *	Command GetHzFilter related method
+ *	Description:
+ *
+ *	@returns The MCCE2 cut-off frequency in Hz
+ */
+//--------------------------------------------------------
+Tango::DevShort MCCE2Electrometers::get_hz_filter()
+{
+	Tango::DevShort argout;
+	DEBUG_STREAM << "MCCE2Electrometers::GetHzFilter()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::get_hz_filter) ENABLED START -----*/
+
+	//	Add your own code
+
+  DEBUG_STREAM << "MCCE2Electrometers::get_hz_filter(): entering... !" << endl;
+
+  //  Add your own code to control device here
+  std::string dataStr("");
+
+  if ( !this->_electrometer )
+  {
+    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "Failed to build the electrometer obj : not enough memory!?",
+      "MCCE2Electrometers::get_hz_filter()"
+    );
+  }
+
+  try
+  {
+    dataStr = this->_electrometer->get_ElectroMeterFrequency();
+    argout  = XString<short>::convertFromString(dataStr);
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    set_state(Tango::ALARM);
+    set_status("Failed to set the Hz Filter!");
+    ERROR_STREAM << "Failed to read the gain : ElectrometerException EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "UNKNOWN_ERROR",
+                                      "Failed to read hzFilter.",
+                                      "hzFilterAttrib::get_hz_filter()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    ERROR_STREAM << "Failed to read the Hz Filter : DevFailed EXCEPTION -> " << df << std::endl;
+
+    set_state(Tango::ALARM);
+    set_status("Failed to set the Hz Filter!");
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to read the Hz Filter!",
+                                      "MCCE2Electrometers::get_hz_filter()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    ERROR_STREAM << "Failed to read the Hz Filter : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Failed to read the Hz Filter!");
+
+    throw;
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::get_hz_filter
+	return argout;
+}
+//--------------------------------------------------------
+/**
+ *	Command SetHzFilter related method
+ *	Description:
+ *
+ *	@param argin The MCCE2 cut-off frequency in Hz
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::set_hz_filter(Tango::DevShort argin)
+{
+	DEBUG_STREAM << "MCCE2Electrometers::SetHzFilter()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::set_hz_filter) ENABLED START -----*/
+
+	//	Add your own code
+	std::string dataStr("") ;
+
+  //  Add your own code to control device here
+  if ( !this->_electrometer )
+  {
+    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "Failed to build the electrometer obj : not enough memory!?",
+      "MCCE2Electrometers::set_hz_filter()"
+    );
+  }
+
+  try
+  {
+    dataStr = XString<short>::convertToString(argin);
+    this->_electrometer->set_ElectroMeterFrequency(dataStr);
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    set_state(Tango::ALARM);
+    set_status("Failed to set the Hz Filter!");
+    ERROR_STREAM << "Failed to set the Hz Filter : ElectrometerException EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to set the Hz Filter.",
+                                      "MCCE2Electrometers::set_hz_filter()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    ERROR_STREAM << "Failed to set the Hz Filter : DevFailed EXCEPTION -> " << df << std::endl;
+
+    set_state(Tango::ALARM);
+    set_status("Failed to set the Hz Filter!");
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to set the Hz Filter!",
+                                      "MCCE2Electrometers::set_hz_filter()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    ERROR_STREAM << "Failed to set the Hz Filter : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Failed to set the Hz Filter!");
+
+    throw;
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::set_hz_filter
+}
+//--------------------------------------------------------
+/**
+ *	Command GetGain related method
+ *	Description:
+ *
+ *	@returns The MCCE2 gain
+ */
+//--------------------------------------------------------
+Tango::DevShort MCCE2Electrometers::get_gain()
+{
+	Tango::DevShort argout;
+	DEBUG_STREAM << "MCCE2Electrometers::GetGain()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::get_gain) ENABLED START -----*/
+
+	//	Add your own code
+
+  DEBUG_STREAM << "MCCE2Electrometers::get_gain(): entering... !" << endl;
+
+  //  Add your own code to control device here
+  if ( !this->_electrometer )
+  {
+    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "Failed to build the electrometer obj : not enough memory!?",
+      "MCCE2Electrometers::get_gain()"
+    );
+  }
+
+  try
+  {
+    std::string dataStr("");
+    dataStr = this->_electrometer->get_ElectroMeterGain();
+    argout  = XString<short>::convertFromString(dataStr);
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    set_state(Tango::ALARM);
+    set_status("Failed to read the gain!");
+    ERROR_STREAM << "Failed to read the gain : ElectrometerException EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "UNKNOWN_ERROR",
+                                      "Failed to read the gain .",
+                                      "hzFilterAttrib::get_gain()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    ERROR_STREAM << "Failed to read the gain : DevFailed EXCEPTION -> " << df << std::endl;
+
+    set_state(Tango::ALARM);
+    set_status("Failed to read the gain!");
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to read the gain!",
+                                      "MCCE2Electrometers::get_gain()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    ERROR_STREAM << "Failed to read the gain : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Failed to read the gain!");
+
+    throw;
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::get_gain
+	return argout;
+}
+//--------------------------------------------------------
+/**
+ *	Command SetGain related method
+ *	Description:
+ *
+ *	@param argin The new MCCE-2 gain
+ */
+//--------------------------------------------------------
+void MCCE2Electrometers::set_gain(Tango::DevUShort argin)
+{
+	DEBUG_STREAM << "MCCE2Electrometers::SetGain()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::set_gain) ENABLED START -----*/
+
+	//	Add your own code
+	if ( !this->_electrometer )
+  {
+    ERROR_STREAM << "Not enough memory to create the electrometer obj!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "Failed to build the electrometer obj : not enough memory!?",
+      "MCCE2Electrometers::set_gain()"
+    );
+  }
+
+  try
+  {
+    std::string dataStr("");
+    dataStr = XString<short>::convertToString(argin);
+    this->_electrometer->set_ElectroMeterGain(dataStr);
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    set_state(Tango::ALARM);
+    set_status("Failed to set the gain!");
+    ERROR_STREAM << "Failed to set the gain : ElectrometerException EXCEPTION -> " << df << std::endl;
+    Tango::Except::re_throw_exception(df,
+                                      "UNKNOWN_ERROR",
+                                      "Failed to set the gain.",
+                                      "hzFilterAttrib::set_gain()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    ERROR_STREAM << "Failed to set the gain : DevFailed EXCEPTION -> " << df << std::endl;
+
+    set_state(Tango::ALARM);
+    set_status("Failed to set the gain!");
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to set the the gain!",
+                                      "MCCE2Electrometers::set_gain()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    ERROR_STREAM << "Failed to set the gain : [...] EXCEPTION " << std::endl;
+    set_state(Tango::ALARM);
+    set_status("Failed to set the gain!");
+
+    throw;
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::set_gain
+}
+//--------------------------------------------------------
+/**
+ *	Command GetElectrometerTypeStr related method
+ *	Description:
+ *
+ *	@param argin channel number
+ *	@returns the electrometer type as string
+ */
+//--------------------------------------------------------
+Tango::DevString MCCE2Electrometers::get_electrometer_type_str(Tango::DevUShort argin)
+{
+	Tango::DevString argout;
+	DEBUG_STREAM << "MCCE2Electrometers::GetElectrometerTypeStr()  - " << device_name << endl;
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::get_electrometer_type_str) ENABLED START -----*/
+
+	//	Add your own code
+	//  POGO has generated a method core with argout allocation.
+  //  If you would like to use a static reference without copying,
+  //  See "TANGO Device Server Programmer's Manual"
+  //    (chapter : Writing a TANGO DS / Exchanging data)
+  //------------------------------------------------------------
+
+  DEBUG_STREAM << "MCCE2Electrometers::get_electrometer_type_str(): entering... !" << endl;
+
+  //  Add your own code to control device here
+  if ( !this->_electrometerCH1 && !_electrometerCH2 )
+  {
+    ERROR_STREAM << "No electrometer connected on both channels!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "No electrometer connected on both channels!?",
+      "MCCE2Electrometers::get_electrometer_type_str()"
+    );
+  }
+
+  if ( argin == ELETRO_CHANNEL_ONE )
+  {
+    argout = new char[this->_electroCH1StrType.size()+1];
+    ::strncpy(argout, _electroCH1StrType.c_str(), _electroCH1StrType.size()+1);
+  }
+  else if ( argin == ELETRO_CHANNEL_TWO )
+  {
+    argout = new char[this->_electroCH2StrType.size()+1];
+    ::strncpy(argout, _electroCH2StrType.c_str(), _electroCH2StrType.size()+1);
+  }
+  else
+  {
+    Tango::Except::throw_exception(
+      "INVALID_PARAMETER",
+      "Channel number must be 1 or 2.",
+      "MCCE2Electrometers::get_electrometer_type_str()"
+    );
+  }
+
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::get_electrometer_type_str
+	return argout;
+}
+
+/*----- PROTECTED REGION ID(MCCE2Electrometers::namespace_ending) ENABLED START -----*/
+
+//	Additional Methods
+//+----------------------------------------------------------------------------
+//
+// method : MCCE2Electrometers::electrometer_to_tango_exception()
+//
+// description :   Extract real attribute values from
+//        hardware acquisition result.
+//
+//-----------------------------------------------------------------------------
+Tango::DevFailed MCCE2Electrometers::electrometer_to_tango_exception(const electrometer::ElectrometerException& de)
+{
+  Tango::DevErrorList error_list(de.errors.size());
+  error_list.length(de.errors.size());
+
+  for(unsigned int i = 0; i < de.errors.size(); i++)
+  {
+    error_list[i].reason = CORBA::string_dup(de.errors[i].reason.c_str());
+    error_list[i].desc   = CORBA::string_dup(de.errors[i].desc.c_str());
+    error_list[i].origin = CORBA::string_dup(de.errors[i].origin.c_str());
+
+    switch(de.errors[i].severity)
+    {
+    case electrometer::WARN:
+      error_list[i].severity = Tango::WARN;
+      break;
+
+    case electrometer::PANIC:
+      error_list[i].severity = Tango::PANIC;
+      break;
+
+    case electrometer::ERR:
+
+    default:
+      error_list[i].severity = Tango::ERR;
+      break;
+    }
+  }
+  return Tango::DevFailed(error_list);
+}
+//+------------------------------------------------------------------
+/**
+ *  method: MCCE2Electrometers::create_electrometers_obj
+ *
+ *  description:  internal method to instanciate electrometer(s) obj
+ */
+//+------------------------------------------------------------------
+void MCCE2Electrometers::create_electrometers_obj()
+{
+  //- instanciate channel 1
+  if ( !_electrometerCH1 && electrometer1Address )
+  {
+    AbstractElectrometerClass* mcce1;
+    mcce1 = new Novelec_MCCE2(proxyName, electrometer1Address, comProtocol);
+    mcce1->init_protocol();
+    DEBUG_STREAM<<"create_electrometers_obj init: "<< comProtocol <<std::endl;
+    Novelec_MCCE2* nMCCE1 = dynamic_cast<Novelec_MCCE2*>(mcce1);
+    DEBUG_STREAM<<"create_electrometers_obj init: "<< comProtocol <<std::endl;
+    short type1 = 0;
+    //- find connected Novelec model
+    try
+    {
+      if(nMCCE1)
+      {
+      	DEBUG_STREAM<<"get_electrometer_type: " <<std::endl;
+        //- get type as num
+        type1 = nMCCE1->get_electrometer_type();
+        DEBUG_STREAM<<"get_electrometer_type type1= "<<type1 <<std::endl;
+        //- get type as string
+        this->_electroCH1StrType = nMCCE1->get_electrometer_typeStr();
+        DEBUG_STREAM<<"get_electrometer_type:read "<<_electroCH1StrType <<std::endl;
+      }
+    }
+    catch(const electrometer::ElectrometerException& ke)
+    {
+      set_state(Tango::ALARM);
+      set_status("Failed to find which Novelec type is connected on channel one : communication caught[...]");
+
+      Tango::DevFailed df = electrometer_to_tango_exception(ke);
+      FATAL_STREAM << "Failed to find which Novelec type is connected on channel one : ElectrometerException EXCEPTION -> " << df << std::endl;
+    }
+    catch(Tango::DevFailed& df)
+    {
+      set_state(Tango::ALARM);
+      set_status("Failed to find which Novelec type is connected on channel one!");
+
+      FATAL_STREAM << "Failed to find which Novelec type is connected : DevFailed EXCEPTION -> " << df << std::endl;
+    }
+    catch(...)
+    {
+      set_state(Tango::ALARM);
+      set_status("Failed to find which Novelec type is connected on channel one : communication caught[...]");
+
+      FATAL_STREAM << "Failed to find which Novelec type is connected on channel one : [...] EXCEPTION " << std::endl;
+    }
+
+    switch(type1)
+    {
+    case 0 :
+      this->_electrometerCH1 = 0;
+      break;
+    case 1 :
+    case 2 :
+    case 3 :
+//            this->_electrometerCH1 = new N_PhotoVoltaique (proxyName, channelNumber, electrometerTypeCh1);
+      this->_electrometerCH1 = new N_PhotoVoltaique (proxyName, electrometer1Address,comProtocol);
+      break;
+    case 4 :
+    case 5 :
+      this->_electrometerCH1 = new N_PhotoConducteur(proxyName, electrometer1Address,comProtocol);
+      break;
+    default :
+      this->_electrometerCH1 = 0;
+      FATAL_STREAM << "\nERROR : Electrometers::create_electrometers_obj() -> this " << electrometer1Address << " Novelec type is not supported now!" << endl;
+      return;
+    }
+    if ( mcce1 )
+    {
+      delete mcce1;
+      mcce1 = 0;
+    }
+  }
+
+  //- instanciate channel 2
+  if ( !this->_electrometerCH2 && electrometer2Address )
+  {
+    AbstractElectrometerClass* mcce2;
+    mcce2 = new Novelec_MCCE2(proxyName, electrometer2Address,comProtocol);
+    mcce2->init_protocol();
+    Novelec_MCCE2* nMCCE2 = dynamic_cast<Novelec_MCCE2*>(mcce2);
+    short type2 = 0;
+    try
+    {
+      if(nMCCE2)
+      {
+        //- get type as num
+        type2 = nMCCE2->get_electrometer_type();
+        //- get type as string
+        this->_electroCH2StrType = nMCCE2->get_electrometer_typeStr();
+      }
+    }
+    catch(const electrometer::ElectrometerException& ke)
+    {
+      set_state(Tango::ALARM);
+      set_status("Failed to find which Novelec type is connected on channel two : communication caught[...]");
+
+      Tango::DevFailed df = electrometer_to_tango_exception(ke);
+      FATAL_STREAM << "Failed to find which Novelec type is connected on channel two : ElectrometerException EXCEPTION -> " << df << std::endl;
+    }
+    catch(Tango::DevFailed& df)
+    {
+      set_state(Tango::ALARM);
+      set_status("Failed to find which Novelec type is connected on channel two!");
+
+      FATAL_STREAM << "Failed to find which Novelec type is connected on channel two : DevFailed EXCEPTION -> " << df << std::endl;
+    }
+    catch(...)
+    {
+      set_state(Tango::ALARM);
+      set_status("Failed to find which Novelec type is connected on channel two : communication caught[...]");
+
+      FATAL_STREAM << "Failed to find which Novelec type is connected on channel two : [...] EXCEPTION " << std::endl;
+    }
+
+    switch(type2)
+    {
+    case 0 :
+      this->_electrometerCH2 = 0;
+      break;
+    case 1 :
+    case 2 :
+    case 3 :
+      this->_electrometerCH2 = new N_PhotoVoltaique (proxyName, electrometer2Address,comProtocol);
+      break;
+    case 4 :
+    case 5 :
+      this->_electrometerCH2 = new N_PhotoConducteur(proxyName, electrometer2Address,comProtocol);
+      break;
+    default :
+      this->_electrometerCH2 = 0;
+      FATAL_STREAM << "\nERROR : Electrometers::create_electrometers_obj() -> this " << electrometer2Address << " Novelec type is not supported now!" << endl;
+      return;
+    }
+    if ( mcce2 )
+    {
+      delete mcce2;
+      mcce2 = 0;
+    }
+  }
+
+  //- check
+  if (!this->_electrometerCH1 && !this->_electrometerCH2)
+  {
+      set_state(Tango::FAULT);
+      set_status("No electrometer connected on channels 1 and 2!");
+    ERROR_STREAM << "No connected electrometer(s) found!" << std::endl;
+    Tango::Except::throw_exception(
+      "MEMORY_ERROR",
+      "No connected electrometer(s) found!",
+      "MCCE2Electrometers::create_electrometers_obj()");
+  }
+
+  //- configure MCCE-2 : clear error(s), explicit response, mode MEASURE OFF
+  bool initCH1 = false;
+  bool initCH2 = false;
+  try
+  {
+    if ( this->_electrometerCH1 )
+    {
+      initCH1 = this->_electrometerCH1->init_protocol();
+      if ( initCH1 )
+        this->_electrometerCH1->mcce_init();
+
+      //- read channel range
+      this->_electrometer = this->_electrometerCH1;
+      *attr_range1_read = this->get_range();
+
+      INFO_STREAM << "this->_electrometer = this->_electrometerCH1!" << std::endl;
+    }
+    else
+      WARN_STREAM << "WARN : !this->_electrometerCH1" << std::endl;
+
+    if ( this->_electrometerCH2 )
+    {
+      initCH2 = this->_electrometerCH2->init_protocol();
+      if ( initCH2 )
+        this->_electrometerCH2->mcce_init();
+
+      //- read channel range
+      this->_electrometer = this->_electrometerCH2;
+      *attr_range2_read = this->get_range();
+
+      INFO_STREAM << "this->_electrometer = this->_electrometerCH2!" << std::endl;
+    }
+
+    //- start with channel one
+    if ( this->_electrometerCH1 )
+    {
+      this->_electrometer = this->_electrometerCH1;
+      this->_init_done = true;
+    }
+    //- if nothing connected on channel one, try with the second one
+    else if ( this->_electrometerCH2 )
+    {
+      this->_electrometer = this->_electrometerCH2;
+      this->_init_done = true;
+    }
+    else
+      this->_init_done = false;
+  }
+  catch(const electrometer::ElectrometerException& ke)
+  {
+    Tango::DevFailed df = electrometer_to_tango_exception(ke);
+
+    ERROR_STREAM << "Failed to set up the MCCE-2 module for a serial communication : ElectrometerException EXCEPTION -> " << df << std::endl;
+
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to set up the MCCE-2 module for a serial communication!",
+                                      "MCCE2Electrometers::create_electrometers_obj()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(Tango::DevFailed& df)
+  {
+    set_state(Tango::FAULT);
+    set_status("Failed to set up the MCCE-2 module for a serial communication!");
+
+    ERROR_STREAM << "Failed to set up the MCCE-2 module for a serial communication : DevFailed EXCEPTION -> " << df << std::endl;
+
+    Tango::Except::re_throw_exception(df,
+                                      "COMMUNICATION_ERROR",
+                                      "Failed to set up the MCCE-2 module for a serial communication!",
+                                      "MCCE2Electrometers::create_electrometers_obj()",
+                                      Tango::ERR
+                                     );
+  }
+  catch(...)
+  {
+    set_state(Tango::FAULT);
+    set_status("Failed to set up the MCCE-2 module for a serial communication caught[...]");
+
+    ERROR_STREAM << "Failed to set up the MCCE-2 module for a serial communication : [...] EXCEPTION " << std::endl;
+
+    Tango::Except::throw_exception(
+      "UNKNOWN_ERROR",
+      "Failed to set up the MCCE-2 module for a serial communication! [(...) exception]",
+      "MCCE2Electrometers::create_electrometers_obj()",
+      Tango::ERR
+    );
+  }
+}
+
+
+/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::namespace_ending
+} //	namespace
diff --git a/src/MCCE2Electrometers.h b/src/MCCE2Electrometers.h
index 9d81626..293b104 100644
--- a/src/MCCE2Electrometers.h
+++ b/src/MCCE2Electrometers.h
@@ -1,483 +1,427 @@
-//=============================================================================
-//
-// file :        MCCE2Electrometers.h
-//
-// description : Include for the MCCE2Electrometers class.
-//
-// project :  Novelec MCCE-2 Electrometers
-//
-// $Author: xavela $
-//
-// $Revision: 1.16 $
-//
-// $Log: not supported by cvs2svn $
-// Revision 1.14  2010/06/10 15:12:05  xavela
-// TEST : control two channels with different MCCE2
-//
-//
-// copyleft :    European Synchrotron Radiation Facility
-//               BP 220, Grenoble 38043
-//               FRANCE
-//
-//=============================================================================
-//
-//      This file is generated by POGO
-//  (Program Obviously used to Generate tango Object)
-//
-//         (c) - Software Engineering Group - ESRF
-//=============================================================================
-#ifndef _MCCE2ELECTROMETERS_H
-#define _MCCE2ELECTROMETERS_H
-
-#include <tango.h>
-//using namespace Tango;
-#include "AbstractElectrometerClass.h"
-#include "ElectrometerException.h"
-
-/**
- * @author  $Author: xavela $
- * @version $Revision: 1.16 $
- */
-
-// Add your own constants definitions here.
-//-----------------------------------------------
-
-
-namespace MCCE2Electrometers_ns
-{
-
-/**
- * Class Description:
- * This class allows you to control all MCCE-2 Novelec electrometers
- *  through a Serial bus.
- *  <br> Supported types :
- *  <br> Novelec Electrometers : MCCE2
- */
-
-/*
- *  Device States Description:
-*  Tango::ON :       Device up and ready
-*  Tango::ALARM :    Device initialisation not complete or a bad channel number is set.
-*  Tango::FAULT :    Internal electrometer interface is not built or a Serial communication error occurred.
-*  Tango::DISABLE :  No electrometer conected!
- */
-
-
-class MCCE2Electrometers: public Tango::Device_4Impl
-{
-public :
-  //  Add your own data members here
-  //-----------------------------------------
-
-
-  //  Here is the Start of the automatic code generation part
-  //-------------------------------------------------------------
-  /**
-   *  @name attributes
-   *  Attributs member data.
-   */
-//@{
-  Tango::DevUShort  *attr_electrometerChannel_read;
-  Tango::DevUShort  attr_electrometerChannel_write;
-  Tango::DevString  *attr_range1_read;
-  Tango::DevString  *attr_range2_read;
-//@}
-
-  /**
-   *  @name Device properties
-   *  Device properties member data.
-   */
-//@{
-  /**
-   *  The name of the device which manage the communication.
-   */
-  string  communicationLinkName;
-  /**
-   *  The first electrometer address configured. <br />
-   *  Note : if not connected, push 0 or let empty the property.
-   */
-  Tango::DevUShort  electrometer1Address;
-  /**
-   *  The second electrometer address configured. <br />
-   *  Note : if not connected, push 0 or let empty the property.
-   */
-  Tango::DevUShort  electrometer2Address;
-//@}
-
-  /**@name Constructors
-   * Miscellaneous constructors */
-//@{
-  /**
-   * Constructs a newly allocated Command object.
-   *
-   *  @param cl Class.
-   *  @param s  Device Name
-   */
-  MCCE2Electrometers(Tango::DeviceClass *cl,string &s);
-  /**
-   * Constructs a newly allocated Command object.
-   *
-   *  @param cl Class.
-   *  @param s  Device Name
-   */
-  MCCE2Electrometers(Tango::DeviceClass *cl,const char *s);
-  /**
-   * Constructs a newly allocated Command object.
-   *
-   *  @param cl Class.
-   *  @param s  Device name
-   *  @param d  Device description.
-   */
-  MCCE2Electrometers(Tango::DeviceClass *cl,const char *s,const char *d);
-//@}
-
-  /**@name Destructor
-   * Only one desctructor is defined for this class */
-//@{
-  /**
-   * The object desctructor.
-   */
-  ~MCCE2Electrometers() {
-    delete_device();
-  };
-  /**
-   *  will be called at device destruction or at init command.
-   */
-  void delete_device();
-//@}
-
-
-  /**@name Miscellaneous methods */
-//@{
-  /**
-   *  Initialize the device
-   */
-  virtual void init_device();
-  /**
-   *  Always executed method befor execution command method.
-   */
-  virtual void always_executed_hook();
-
-//@}
-
-  /**
-   * @name MCCE2Electrometers methods prototypes
-   */
-
-//@{
-  /**
-   *  Hardware acquisition for attributes.
-   */
-  virtual void read_attr_hardware(vector<long> &attr_list);
-  /**
-   *  Extract real attribute values for electrometerChannel acquisition result.
-   */
-  virtual void read_electrometerChannel(Tango::Attribute &attr);
-  /**
-   *  Write electrometerChannel attribute values to hardware.
-   */
-  virtual void write_electrometerChannel(Tango::WAttribute &attr);
-  /**
-   *  Extract real attribute values for range1 acquisition result.
-   */
-  virtual void read_range1(Tango::Attribute &attr);
-  /**
-   *  Extract real attribute values for range2 acquisition result.
-   */
-  virtual void read_range2(Tango::Attribute &attr);
-  /**
-   *  Read/Write allowed for electrometerChannel attribute.
-   */
-  virtual bool is_electrometerChannel_allowed(Tango::AttReqType type);
-  /**
-   *  Read/Write allowed for range1 attribute.
-   */
-  virtual bool is_range1_allowed(Tango::AttReqType type);
-  /**
-   *  Read/Write allowed for range2 attribute.
-   */
-  virtual bool is_range2_allowed(Tango::AttReqType type);
-  /**
-   *  Execution allowed for RangeUP command.
-   */
-  virtual bool is_RangeUP_allowed(const CORBA::Any &any);
-  /**
-   *  Execution allowed for RangeDOWN command.
-   */
-  virtual bool is_RangeDOWN_allowed(const CORBA::Any &any);
-  /**
-   *  Execution allowed for SetZeroVFFunction command.
-   */
-  virtual bool is_SetZeroVFFunction_allowed(const CORBA::Any &any);
-  /**
-   *  Execution allowed for SetOffsetZeroV1Function command.
-   */
-  virtual bool is_SetOffsetZeroV1Function_allowed(const CORBA::Any &any);
-  /**
-   *  Execution allowed for SetLeakageZeroV2Function command.
-   */
-  virtual bool is_SetLeakageZeroV2Function_allowed(const CORBA::Any &any);
-  /**
-   *  Execution allowed for SetTestFunction command.
-   */
-  virtual bool is_SetTestFunction_allowed(const CORBA::Any &any);
-  /**
-   *  Execution allowed for SetMeasureFunction command.
-   */
-  virtual bool is_SetMeasureFunction_allowed(const CORBA::Any &any);
-  /**
-   *  Execution allowed for MCCE2_ON command.
-   */
-  virtual bool is_MCCE2_ON_allowed(const CORBA::Any &any);
-  /**
-   *  Execution allowed for MCCE2_OFF command.
-   */
-  virtual bool is_MCCE2_OFF_allowed(const CORBA::Any &any);
-  /**
-   *  Execution allowed for Local command.
-   */
-  virtual bool is_Local_allowed(const CORBA::Any &any);
-  /**
-   *  Execution allowed for Remote command.
-   */
-  virtual bool is_Remote_allowed(const CORBA::Any &any);
-  /**
-   *  Execution allowed for Reset command.
-   */
-  virtual bool is_Reset_allowed(const CORBA::Any &any);
-  /**
-   *  Execution allowed for ClearRegisters command.
-   */
-  virtual bool is_ClearRegisters_allowed(const CORBA::Any &any);
-  /**
-   *  Execution allowed for GetRange command.
-   */
-  virtual bool is_GetRange_allowed(const CORBA::Any &any);
-  /**
-   *  Execution allowed for SetRange command.
-   */
-  virtual bool is_SetRange_allowed(const CORBA::Any &any);
-  /**
-   *  Execution allowed for GetMode command.
-   */
-  virtual bool is_GetMode_allowed(const CORBA::Any &any);
-  /**
-   *  Execution allowed for GetPolarity command.
-   */
-  virtual bool is_GetPolarity_allowed(const CORBA::Any &any);
-  /**
-   *  Execution allowed for SetPolarity command.
-   */
-  virtual bool is_SetPolarity_allowed(const CORBA::Any &any);
-  /**
-   *  Execution allowed for GetHzFilter command.
-   */
-  virtual bool is_GetHzFilter_allowed(const CORBA::Any &any);
-  /**
-   *  Execution allowed for SetHzFilter command.
-   */
-  virtual bool is_SetHzFilter_allowed(const CORBA::Any &any);
-  /**
-   *  Execution allowed for GetGain command.
-   */
-  virtual bool is_GetGain_allowed(const CORBA::Any &any);
-  /**
-   *  Execution allowed for SetGain command.
-   */
-  virtual bool is_SetGain_allowed(const CORBA::Any &any);
-  /**
-   *  Execution allowed for GetElectrometerTypeStr command.
-   */
-  virtual bool is_GetElectrometerTypeStr_allowed(const CORBA::Any &any);
-  /**
-   * This command gets the device state (stored in its <i>device_state</i> data member) and returns it to the caller.
-   *  @return State Code
-   *  @exception DevFailed
-   */
-  virtual Tango::DevState dev_state();
-  /**
-   * This command gets the device status (stored in its <i>device_status</i> data member) and returns it to the caller.
-   *  @return Status description
-   *  @exception DevFailed
-   */
-  virtual Tango::ConstDevString dev_status();
-  /**
-   * Up the range of the electrometer.
-   *  Throw :
-   *  - electrometer::ElectrometerException if the range limit is reached
-   *  - Tango::DevFailed if the command cannot be performed
-   *  @exception DevFailed
-   */
-  void  range_up();
-  /**
-   * Down the range of the electrometer.
-   *  Throw :
-   *  - electrometer::ElectrometerException if the range is negative
-   *  - Tango::DevFailed if the command cannot be performed
-   *  @exception DevFailed
-   */
-  void  range_down();
-  /**
-   * Enable the Zero V/F MCCE2 mode.
-   *  @exception DevFailed
-   */
-  void  set_zero_vffunction();
-  /**
-   * Enable the Offset or Zero V1 MCCE2 mode.
-   *  @exception DevFailed
-   */
-  void  set_offset_zero_v1_function();
-  /**
-   * Enable the Leakage or Zero V2 MCCE2 mode.
-   *  @exception DevFailed
-   */
-  void  set_leakage_zero_v2_function();
-  /**
-   * Enable theTest MCCE2 mode.
-   *  @exception DevFailed
-   */
-  void  set_test_function();
-  /**
-   * Enable the Measure MCCE2 mode.
-   *  @exception DevFailed
-   */
-  void  set_measure_function();
-  /**
-   * Enables the function set. Parameters cannot be set (read only mode).
-   *  @exception DevFailed
-   */
-  void  mcce2__on();
-  /**
-   * Disables the function set. Parameters can be changed.
-   *  @exception DevFailed
-   */
-  void  mcce2__off();
-  /**
-   * Enable local keyboard and Key
-   *  @exception DevFailed
-   */
-  void  local();
-  /**
-   * Disable \"MODIFY\" and the \"ON-OFF\" keys
-   *  @exception DevFailed
-   */
-  void  remote();
-  /**
-   * Restart the MCCE-2
-   *  @exception DevFailed
-   */
-  void  reset();
-  /**
-   * Clear error(s)
-   *  @exception DevFailed
-   */
-  void  clear_registers();
-  /**
-   * Returns the electrometer range.
-   *  @return The actual electrometer range
-   *  @exception DevFailed
-   */
-  Tango::DevString  get_range();
-  /**
-   * Apply the specified argin range, on the electrometer, if well formatted.
-   *  Else an exception is thrown.
-   *  @param  argin The range to apply on the electrometer
-   *  @exception DevFailed
-   */
-  void  set_range(Tango::DevString);
-  /**
-   * Returns the electrometer mode which can be one of the following values :
-   *  MEASURE, V/F Zero, OFFSET, LEAKAGE or TEST.
-   *  @return The electrometer mode (MEASURE, LEAKAGE ...)
-   *  @exception DevFailed
-   */
-  Tango::DevString  get_mode();
-  /**
-   * Returns the electrometer polarity, which can be POSITIVE or NEGATIVE.
-   *  @return The electrometer polarity
-   *  @exception DevFailed
-   */
-  Tango::DevString  get_polarity();
-  /**
-   * Sets the new electrometer polarity. <Br>
-   *  NOTE : <Br>
-   *  Value must be set in UPPER case !!!
-   *  @param  argin POSITIVE or NEGATIVE
-   *  @exception DevFailed
-   */
-  void  set_polarity(Tango::DevString);
-  /**
-   * Returns the Cut-off frequency in Hz
-   *  @return The MCCE2 cut-off frequency in Hz
-   *  @exception DevFailed
-   */
-  Tango::DevShort get_hz_filter();
-  /**
-   * The Cut-off frequency in Hz
-   *  @param  argin The MCCE2 cut-off frequency in Hz
-   *  @exception DevFailed
-   */
-  void  set_hz_filter(Tango::DevShort);
-  /**
-   * Returns the MCCE-2 gain
-   *  @return The MCCE2 gain
-   *  @exception DevFailed
-   */
-  Tango::DevShort get_gain();
-  /**
-   * Sets the new MCCE-2 gain value.
-   *  @param  argin The new MCCE-2 gain
-   *  @exception DevFailed
-   */
-  void  set_gain(Tango::DevUShort);
-  /**
-   * This command returns the connected electrometer type as string for the specified channel.
-   *  @param  argin channel number
-   *  @return the electrometer type as string
-   *  @exception DevFailed
-   */
-  Tango::DevString  get_electrometer_type_str(Tango::DevUShort);
-
-  /**
-   *  Read the device properties from database
-   */
-  void get_device_property();
-//@}
-
-  //  Here is the end of the automatic code generation part
-  //-------------------------------------------------------------
-
-
-
-protected :
-  //  Add your own data members here
-  //-----------------------------------------
-  AbstractElectrometerClass*  _electrometer;
-
-  std::string _statusStr;
-
-  bool _init_done;    //- used to allow device to start !!
-  bool _missing_property;
-  bool _updateRange1FromHW;
-  bool _updateRange2FromHW;
-  //- electrometer(s) type as string
-  std::string _electroCH1StrType;
-  std::string _electroCH2StrType;
-
-  std::string read_range_from_hw();
-
-  //- Method to convert all electrometer exceptions on Tango exception
-  Tango::DevFailed electrometer_to_tango_exception(const electrometer::ElectrometerException& de);
-
-private :
-  AbstractElectrometerClass*  _electrometerCH1; //- electrometer on channel 1
-  AbstractElectrometerClass*  _electrometerCH2; //- electrometer on channel 2
-
-  //- instanciate electrometer(s) obj
-  void create_electrometers_obj();
-
-};
-
-} // namespace_ns
-
-#endif  // _MCCE2ELECTROMETERS_H
+/*----- PROTECTED REGION ID(MCCE2Electrometers.h) ENABLED START -----*/
+//=============================================================================
+//
+// file :        MCCE2Electrometers.h
+//
+// description : Include file for the MCCE2Electrometers class
+//
+// project :     Novelec MCCE-2 Electrometers
+//
+// This file is part of Tango device class.
+//
+// Tango is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Tango is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Tango.  If not, see <http://www.gnu.org/licenses/>.
+//
+// $Author:  $
+//
+// $Revision:  $
+// $Date:  $
+//
+// $HeadURL:  $
+//
+//=============================================================================
+//                This file is generated by POGO
+//        (Program Obviously used to Generate tango Object)
+//=============================================================================
+
+
+#ifndef MCCE2Electrometers_H
+#define MCCE2Electrometers_H
+
+#include <tango.h>
+#include "AbstractElectrometerClass.h"
+#include "ElectrometerException.h"
+
+
+
+
+
+/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers.h
+
+/**
+ *  MCCE2Electrometers class description:
+ *    This class allows you to control all MCCE-2 Novelec electrometers
+ *    through a Serial bus.
+ *    <br> Supported types :
+ *    <br> Novelec Electrometers : MCCE2
+ */
+
+namespace MCCE2Electrometers_ns
+{
+/*----- PROTECTED REGION ID(MCCE2Electrometers::Additional Class Declarations) ENABLED START -----*/
+
+//	Additional Class Declarations
+
+/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::Additional Class Declarations
+
+class MCCE2Electrometers : public Tango::Device_4Impl
+{
+
+/*----- PROTECTED REGION ID(MCCE2Electrometers::Data Members) ENABLED START -----*/
+
+//	Add your own data members
+public:
+
+
+
+/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::Data Members
+
+//	Device property data members
+public:
+	//	ProxyName:	The name of the device which manage the communication.
+	string	proxyName;
+	//	Electrometer1Address:	The first electrometer address configured. <br />
+	//  Note : if not connected, push 0 or let empty the property.
+	Tango::DevUShort	electrometer1Address;
+	//	Electrometer2Address:	The second electrometer address configured. <br />
+	//  Note : if not connected, push 0 or let empty the property.
+	Tango::DevUShort	electrometer2Address;
+	//	ComProtocol:	Communication protocal: ETHERNET/SERIAL
+	string	comProtocol;
+
+//	Attribute data members
+public:
+	Tango::DevUShort	*attr_electrometerChannel_read;
+	Tango::DevString	*attr_range1_read;
+	Tango::DevString	*attr_range2_read;
+
+//	Constructors and destructors
+public:
+	/**
+	 * Constructs a newly device object.
+	 *
+	 *	@param cl	Class.
+	 *	@param s 	Device Name
+	 */
+	MCCE2Electrometers(Tango::DeviceClass *cl,string &s);
+	/**
+	 * Constructs a newly device object.
+	 *
+	 *	@param cl	Class.
+	 *	@param s 	Device Name
+	 */
+	MCCE2Electrometers(Tango::DeviceClass *cl,const char *s);
+	/**
+	 * Constructs a newly device object.
+	 *
+	 *	@param cl	Class.
+	 *	@param s 	Device name
+	 *	@param d	Device description.
+	 */
+	MCCE2Electrometers(Tango::DeviceClass *cl,const char *s,const char *d);
+	/**
+	 * The device object destructor.
+	 */
+	~MCCE2Electrometers() {delete_device();};
+
+
+//	Miscellaneous methods
+public:
+	/*
+	 *	will be called at device destruction or at init command.
+	 */
+	void delete_device();
+	/*
+	 *	Initialize the device
+	 */
+	virtual void init_device();
+	/*
+	 *	Read the device properties from database
+	 */
+	void get_device_property();
+	/*
+	 *	Always executed method before execution command method.
+	 */
+	virtual void always_executed_hook();
+
+
+//	Attribute methods
+public:
+	//--------------------------------------------------------
+	/*
+	 *	Method      : MCCE2Electrometers::read_attr_hardware()
+	 *	Description : Hardware acquisition for attributes.
+	 */
+	//--------------------------------------------------------
+	virtual void read_attr_hardware(vector<long> &attr_list);
+
+/**
+ *	Attribute electrometerChannel related methods
+ *	Description: MCCE2 electrometer have two channels to support two amplifiers.\nWARN : default is 0 (please set this value first).
+ *
+ *	Data type:	Tango::DevUShort
+ *	Attr type:	Scalar
+ */
+	virtual void read_electrometerChannel(Tango::Attribute &attr);
+	virtual void write_electrometerChannel(Tango::WAttribute &attr);
+	virtual bool is_electrometerChannel_allowed(Tango::AttReqType type);
+/**
+ *	Attribute range1 related methods
+ *	Description: The channel one MCCE2 range.
+ *
+ *	Data type:	Tango::DevString
+ *	Attr type:	Scalar
+ */
+	virtual void read_range1(Tango::Attribute &attr);
+	virtual bool is_range1_allowed(Tango::AttReqType type);
+/**
+ *	Attribute range2 related methods
+ *	Description: The channel two MCCE range.
+ *
+ *	Data type:	Tango::DevString
+ *	Attr type:	Scalar
+ */
+	virtual void read_range2(Tango::Attribute &attr);
+	virtual bool is_range2_allowed(Tango::AttReqType type);
+
+
+	//--------------------------------------------------------
+	/**
+	 *	Method      : MCCE2Electrometers::add_dynamic_attributes()
+	 *	Description : Add dynamic attributes if any.
+	 */
+	//--------------------------------------------------------
+	void add_dynamic_attributes();
+
+
+
+//	Command related methods
+public:
+	/**
+	 *	Command State related method
+	 *	Description: This command gets the device state (stored in its <i>device_state</i> data member) and returns it to the caller.
+	 *
+	 *	@returns State Code
+	 */
+	virtual Tango::DevState dev_state();
+	/**
+	 *	Command Status related method
+	 *	Description: This command gets the device status (stored in its <i>device_status</i> data member) and returns it to the caller.
+	 *
+	 *	@returns Status description
+	 */
+	virtual Tango::ConstDevString dev_status();
+	/**
+	 *	Command RangeUP related method
+	 *	Description:
+	 *
+	 */
+	virtual void range_up();
+	virtual bool is_RangeUP_allowed(const CORBA::Any &any);
+	/**
+	 *	Command RangeDOWN related method
+	 *	Description:
+	 *
+	 */
+	virtual void range_down();
+	virtual bool is_RangeDOWN_allowed(const CORBA::Any &any);
+	/**
+	 *	Command SetZeroVFFunction related method
+	 *	Description:
+	 *
+	 */
+	virtual void set_zero_vffunction();
+	virtual bool is_SetZeroVFFunction_allowed(const CORBA::Any &any);
+	/**
+	 *	Command SetOffsetZeroV1Function related method
+	 *	Description:
+	 *
+	 */
+	virtual void set_offset_zero_v1_function();
+	virtual bool is_SetOffsetZeroV1Function_allowed(const CORBA::Any &any);
+	/**
+	 *	Command SetLeakageZeroV2Function related method
+	 *	Description:
+	 *
+	 */
+	virtual void set_leakage_zero_v2_function();
+	virtual bool is_SetLeakageZeroV2Function_allowed(const CORBA::Any &any);
+	/**
+	 *	Command SetTestFunction related method
+	 *	Description:
+	 *
+	 */
+	virtual void set_test_function();
+	virtual bool is_SetTestFunction_allowed(const CORBA::Any &any);
+	/**
+	 *	Command SetMeasureFunction related method
+	 *	Description:
+	 *
+	 */
+	virtual void set_measure_function();
+	virtual bool is_SetMeasureFunction_allowed(const CORBA::Any &any);
+	/**
+	 *	Command MCCE2_ON related method
+	 *	Description:
+	 *
+	 */
+	virtual void mcce2__on();
+	virtual bool is_MCCE2_ON_allowed(const CORBA::Any &any);
+	/**
+	 *	Command MCCE2_OFF related method
+	 *	Description:
+	 *
+	 */
+	virtual void mcce2__off();
+	virtual bool is_MCCE2_OFF_allowed(const CORBA::Any &any);
+	/**
+	 *	Command Local related method
+	 *	Description:
+	 *
+	 */
+	virtual void local();
+	virtual bool is_Local_allowed(const CORBA::Any &any);
+	/**
+	 *	Command Remote related method
+	 *	Description:
+	 *
+	 */
+	virtual void remote();
+	virtual bool is_Remote_allowed(const CORBA::Any &any);
+	/**
+	 *	Command Reset related method
+	 *	Description:
+	 *
+	 */
+	virtual void reset();
+	virtual bool is_Reset_allowed(const CORBA::Any &any);
+	/**
+	 *	Command ClearRegisters related method
+	 *	Description:
+	 *
+	 */
+	virtual void clear_registers();
+	virtual bool is_ClearRegisters_allowed(const CORBA::Any &any);
+	/**
+	 *	Command GetRange related method
+	 *	Description:
+	 *
+	 *	@returns The actual electrometer range
+	 */
+	virtual Tango::DevString get_range();
+	virtual bool is_GetRange_allowed(const CORBA::Any &any);
+	/**
+	 *	Command SetRange related method
+	 *	Description:
+	 *
+	 *	@param argin The range to apply on the electrometer
+	 */
+	virtual void set_range(Tango::DevString argin);
+	virtual bool is_SetRange_allowed(const CORBA::Any &any);
+	/**
+	 *	Command GetMode related method
+	 *	Description:
+	 *
+	 *	@returns The electrometer mode (MEASURE, LEAKAGE ...)
+	 */
+	virtual Tango::DevString get_mode();
+	virtual bool is_GetMode_allowed(const CORBA::Any &any);
+	/**
+	 *	Command GetPolarity related method
+	 *	Description:
+	 *
+	 *	@returns The electrometer polarity
+	 */
+	virtual Tango::DevString get_polarity();
+	virtual bool is_GetPolarity_allowed(const CORBA::Any &any);
+	/**
+	 *	Command SetPolarity related method
+	 *	Description:
+	 *
+	 *	@param argin POSITIVE or NEGATIVE
+	 */
+	virtual void set_polarity(Tango::DevString argin);
+	virtual bool is_SetPolarity_allowed(const CORBA::Any &any);
+	/**
+	 *	Command GetHzFilter related method
+	 *	Description:
+	 *
+	 *	@returns The MCCE2 cut-off frequency in Hz
+	 */
+	virtual Tango::DevShort get_hz_filter();
+	virtual bool is_GetHzFilter_allowed(const CORBA::Any &any);
+	/**
+	 *	Command SetHzFilter related method
+	 *	Description:
+	 *
+	 *	@param argin The MCCE2 cut-off frequency in Hz
+	 */
+	virtual void set_hz_filter(Tango::DevShort argin);
+	virtual bool is_SetHzFilter_allowed(const CORBA::Any &any);
+	/**
+	 *	Command GetGain related method
+	 *	Description:
+	 *
+	 *	@returns The MCCE2 gain
+	 */
+	virtual Tango::DevShort get_gain();
+	virtual bool is_GetGain_allowed(const CORBA::Any &any);
+	/**
+	 *	Command SetGain related method
+	 *	Description:
+	 *
+	 *	@param argin The new MCCE-2 gain
+	 */
+	virtual void set_gain(Tango::DevUShort argin);
+	virtual bool is_SetGain_allowed(const CORBA::Any &any);
+	/**
+	 *	Command GetElectrometerTypeStr related method
+	 *	Description:
+	 *
+	 *	@param argin channel number
+	 *	@returns the electrometer type as string
+	 */
+	virtual Tango::DevString get_electrometer_type_str(Tango::DevUShort argin);
+	virtual bool is_GetElectrometerTypeStr_allowed(const CORBA::Any &any);
+
+
+/*----- PROTECTED REGION ID(MCCE2Electrometers::Additional Method prototypes) ENABLED START -----*/
+
+//	Additional Method prototypes
+protected :
+  AbstractElectrometerClass*  _electrometer;
+
+  std::string _statusStr;
+
+  bool _init_done;    //- used to allow device to start !!
+  bool _missing_property;
+  bool _updateRange1FromHW;
+  bool _updateRange2FromHW;
+  //- electrometer(s) type as string
+  std::string _electroCH1StrType;
+  std::string _electroCH2StrType;
+
+  std::string read_range_from_hw();
+
+  //- Method to convert all electrometer exceptions on Tango exception
+  Tango::DevFailed electrometer_to_tango_exception(const electrometer::ElectrometerException& de);
+
+private :
+  AbstractElectrometerClass*  _electrometerCH1; //- electrometer on channel 1
+  AbstractElectrometerClass*  _electrometerCH2; //- electrometer on channel 2
+	Tango::DevUShort	attr_electrometerChannel_write;
+  //- instanciate electrometer(s) obj
+  void create_electrometers_obj();
+
+/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::Additional Method prototypes
+};
+
+/*----- PROTECTED REGION ID(MCCE2Electrometers::Additional Classes Definitions) ENABLED START -----*/
+
+//	Additional Classes Definitions
+
+/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::Additional Classes Definitions
+
+}	//	End of namespace
+
+#endif   //	MCCE2Electrometers_H
diff --git a/src/MCCE2Electrometers.xmi b/src/MCCE2Electrometers.xmi
new file mode 100644
index 0000000..41165b4
--- /dev/null
+++ b/src/MCCE2Electrometers.xmi
@@ -0,0 +1,324 @@
+<?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="MCCE2Electrometers" pogoRevision="8.2">
+    <description description="This class allows you to control all MCCE-2 Novelec electrometers&#xA;through a Serial bus.&#xA;&lt;br> Supported types :&#xA;&lt;br> Novelec Electrometers : MCCE2" title="Novelec MCCE-2 Electrometers" sourcePath="/home/informatique/ica/phamj/DEV/Serial/novelecelectrometer/src" language="Cpp" filestogenerate="XMI   file,Code files,html Pages" hasMandatoryProperty="false" hasConcreteProperty="true" hasAbstractCommand="false" hasAbstractAttribute="false" descriptionHtmlExists="true">
+      <inheritances classname="Device_4Impl" sourcePath=""/>
+      <identification contact="at synchrotron-soleil.fr - xavier.elattaoui" author="xavier.elattaoui" emailDomain="synchrotron-soleil.fr" classFamily="Acquisition" siteSpecific="" platform="All Platforms" bus="Serial Line" manufacturer="SAPHYMO" reference="MCCE-2"/>
+    </description>
+    <deviceProperties name="ProxyName" description="The name of the device which manage the communication.">
+      <type xsi:type="pogoDsl:StringType"/>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </deviceProperties>
+    <deviceProperties name="Electrometer1Address" description="The first electrometer address configured. &lt;br />&#xA;Note : if not connected, push 0 or let empty the property.">
+      <type xsi:type="pogoDsl:UShortType"/>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </deviceProperties>
+    <deviceProperties name="Electrometer2Address" description="The second electrometer address configured. &lt;br />&#xA;Note : if not connected, push 0 or let empty the property.">
+      <type xsi:type="pogoDsl:UShortType"/>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </deviceProperties>
+    <deviceProperties name="ComProtocol" description="Communication protocal: ETHERNET/SERIAL">
+      <type xsi:type="pogoDsl:StringType"/>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </deviceProperties>
+    <commands name="State" description="This command gets the device state (stored in its &lt;i>device_state&lt;/i> data member) and returns it to the caller." execMethod="dev_state" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="none.">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="State Code">
+        <type xsi:type="pogoDsl:StateType"/>
+      </argout>
+      <status abstract="true" inherited="true" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="Status" description="This command gets the device status (stored in its &lt;i>device_status&lt;/i> data member) and returns it to the caller." execMethod="dev_status" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="none.">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="Status description">
+        <type xsi:type="pogoDsl:ConstStringType"/>
+      </argout>
+      <status abstract="true" inherited="true" concrete="true" concreteHere="true"/>
+    </commands>
+    <commands name="RangeUP" description="" execMethod="range_up" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="no argin">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="no argout">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>DISABLE</excludedStates>
+    </commands>
+    <commands name="RangeDOWN" description="" execMethod="range_down" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="no argin">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="no argout">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>DISABLE</excludedStates>
+    </commands>
+    <commands name="SetZeroVFFunction" description="" execMethod="set_zero_vffunction" displayLevel="EXPERT" polledPeriod="0">
+      <argin description="no argin">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="no argout">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>DISABLE</excludedStates>
+    </commands>
+    <commands name="SetOffsetZeroV1Function" description="" execMethod="set_offset_zero_v1_function" displayLevel="EXPERT" polledPeriod="0">
+      <argin description="no argin">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="no argout">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>DISABLE</excludedStates>
+    </commands>
+    <commands name="SetLeakageZeroV2Function" description="" execMethod="set_leakage_zero_v2_function" displayLevel="EXPERT" polledPeriod="0">
+      <argin description="no argin">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="no argout">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>DISABLE</excludedStates>
+    </commands>
+    <commands name="SetTestFunction" description="" execMethod="set_test_function" displayLevel="EXPERT" polledPeriod="0">
+      <argin description="no argin">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="no argout">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>DISABLE</excludedStates>
+    </commands>
+    <commands name="SetMeasureFunction" description="" execMethod="set_measure_function" displayLevel="EXPERT" polledPeriod="0">
+      <argin description="no argin">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="no argout">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>DISABLE</excludedStates>
+    </commands>
+    <commands name="MCCE2_ON" description="" execMethod="mcce2__on" displayLevel="EXPERT" polledPeriod="0">
+      <argin description="no argin">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="no argout">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>DISABLE</excludedStates>
+    </commands>
+    <commands name="MCCE2_OFF" description="" execMethod="mcce2__off" displayLevel="EXPERT" polledPeriod="0">
+      <argin description="no argin">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="no argout">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>DISABLE</excludedStates>
+    </commands>
+    <commands name="Local" description="" execMethod="local" displayLevel="EXPERT" polledPeriod="0">
+      <argin description="no argin">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="no argout">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>DISABLE</excludedStates>
+    </commands>
+    <commands name="Remote" description="" execMethod="remote" displayLevel="EXPERT" polledPeriod="0">
+      <argin description="no argin">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="no argout">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>DISABLE</excludedStates>
+    </commands>
+    <commands name="Reset" description="" execMethod="reset" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="no argin">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="no argout">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>DISABLE</excludedStates>
+    </commands>
+    <commands name="ClearRegisters" description="" execMethod="clear_registers" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="no argin">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="no argout">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>DISABLE</excludedStates>
+    </commands>
+    <commands name="GetRange" description="" execMethod="get_range" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="no argin">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="The actual electrometer range">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>DISABLE</excludedStates>
+    </commands>
+    <commands name="SetRange" description="" execMethod="set_range" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="The range to apply on the electrometer">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="no argout">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>DISABLE</excludedStates>
+    </commands>
+    <commands name="GetMode" description="" execMethod="get_mode" displayLevel="EXPERT" polledPeriod="0">
+      <argin description="no argin">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="The electrometer mode (MEASURE, LEAKAGE ...)">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>DISABLE</excludedStates>
+    </commands>
+    <commands name="GetPolarity" description="" execMethod="get_polarity" displayLevel="EXPERT" polledPeriod="0">
+      <argin description="no argin">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="The electrometer polarity">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>DISABLE</excludedStates>
+    </commands>
+    <commands name="SetPolarity" description="" execMethod="set_polarity" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="POSITIVE or NEGATIVE">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argin>
+      <argout description="no argout">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>DISABLE</excludedStates>
+    </commands>
+    <commands name="GetHzFilter" description="" execMethod="get_hz_filter" displayLevel="EXPERT" polledPeriod="0">
+      <argin description="no argin">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="The MCCE2 cut-off frequency in Hz">
+        <type xsi:type="pogoDsl:ShortType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>DISABLE</excludedStates>
+    </commands>
+    <commands name="SetHzFilter" description="" execMethod="set_hz_filter" displayLevel="EXPERT" polledPeriod="0">
+      <argin description="The MCCE2 cut-off frequency in Hz">
+        <type xsi:type="pogoDsl:ShortType"/>
+      </argin>
+      <argout description="no argout">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>DISABLE</excludedStates>
+    </commands>
+    <commands name="GetGain" description="" execMethod="get_gain" displayLevel="EXPERT" polledPeriod="0">
+      <argin description="no argin">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argin>
+      <argout description="The MCCE2 gain">
+        <type xsi:type="pogoDsl:ShortType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>DISABLE</excludedStates>
+    </commands>
+    <commands name="SetGain" description="" execMethod="set_gain" displayLevel="EXPERT" polledPeriod="0">
+      <argin description="The new MCCE-2 gain">
+        <type xsi:type="pogoDsl:UShortType"/>
+      </argin>
+      <argout description="no argout">
+        <type xsi:type="pogoDsl:VoidType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <excludedStates>FAULT</excludedStates>
+      <excludedStates>DISABLE</excludedStates>
+    </commands>
+    <commands name="GetElectrometerTypeStr" description="" execMethod="get_electrometer_type_str" displayLevel="OPERATOR" polledPeriod="0">
+      <argin description="channel number">
+        <type xsi:type="pogoDsl:UShortType"/>
+      </argin>
+      <argout description="the electrometer type as string">
+        <type xsi:type="pogoDsl:StringType"/>
+      </argout>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </commands>
+    <attributes name="electrometerChannel" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="0" maxY="0">
+      <dataType xsi:type="pogoDsl:UShortType"/>
+      <changeEvent fire="false" libCheckCriteria="false"/>
+      <archiveEvent fire="false" libCheckCriteria="false"/>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <properties description="MCCE2 electrometer have two channels to support two amplifiers.\nWARN : default is 0 (please set this value first)." label="electrometer channel" unit=" " standardUnit=" " displayUnit=" " format="%1.0d" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
+    </attributes>
+    <attributes name="range1" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="0" maxY="0">
+      <dataType xsi:type="pogoDsl:StringType"/>
+      <changeEvent fire="false" libCheckCriteria="false"/>
+      <archiveEvent fire="false" libCheckCriteria="false"/>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <properties description="The channel one MCCE2 range." label="range1" unit=" " standardUnit=" " displayUnit=" " format="%s" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
+    </attributes>
+    <attributes name="range2" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="0" maxY="0">
+      <dataType xsi:type="pogoDsl:StringType"/>
+      <changeEvent fire="false" libCheckCriteria="false"/>
+      <archiveEvent fire="false" libCheckCriteria="false"/>
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+      <properties description="The channel two MCCE range." label="range2" unit=" " standardUnit=" " displayUnit=" " format="%s" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
+    </attributes>
+    <states name="ON" description="Device up and ready">
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </states>
+    <states name="ALARM" description="Device initialisation not complete or a bad channel number is set.">
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </states>
+    <states name="FAULT" description="Internal electrometer interface is not built or a Serial communication error occurred.">
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </states>
+    <states name="DISABLE" description="No electrometer conected!">
+      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
+    </states>
+    <preferences docHome="../doc/doc_html" makefileHome="$(TANGO_HOME)"/>
+  </classes>
+</pogoDsl:PogoSystem>
diff --git a/src/MCCE2ElectrometersClass.cpp b/src/MCCE2ElectrometersClass.cpp
index 8365586..9fc061d 100644
--- a/src/MCCE2ElectrometersClass.cpp
+++ b/src/MCCE2ElectrometersClass.cpp
@@ -1,56 +1,63 @@
-static const char *ClassId    = "$Id: MCCE2ElectrometersClass.cpp,v 1.16 2012-10-03 14:59:19 xavela Exp $";
-static const char *CvsPath    = "$Source: /users/chaize/newsvn/cvsroot/Instrumentation/NovelecElectro/src/MCCE2ElectrometersClass.cpp,v $";
-static const char *SvnPath    = "$HeadURL: $";
-static const char *RcsId     = "$Header: /users/chaize/newsvn/cvsroot/Instrumentation/NovelecElectro/src/MCCE2ElectrometersClass.cpp,v 1.16 2012-10-03 14:59:19 xavela Exp $";
-static const char *TagName   = "$Name: not supported by cvs2svn $";
-static const char *HttpServer= "http://www.esrf.fr/computing/cs/tango/tango_doc/ds_doc/";
-//+=============================================================================
+/*----- PROTECTED REGION ID(MCCE2ElectrometersClass.cpp) ENABLED START -----*/
+static const char *RcsId      = "$Id:  $";
+static const char *TagName    = "$Name:  $";
+static const char *CvsPath    = "$Source:  $";
+static const char *SvnPath    = "$HeadURL:  $";
+static const char *HttpServer = "http://www.esrf.eu/computing/cs/tango/tango_doc/ds_doc/";
+//=============================================================================
 //
 // file :        MCCE2ElectrometersClass.cpp
 //
-// description : C++ source for the MCCE2ElectrometersClass. A singleton
-//               class derived from DeviceClass. It implements the
-//               command list and all properties and methods required
+// description : C++ source for the MCCE2ElectrometersClass.
+//               A singleton class derived from DeviceClass.
+//               It implements the command and attribute list
+//               and all properties and methods required
 //               by the MCCE2Electrometers once per process.
 //
-// project :     TANGO Device Server
-//
-// $Author: xavela $
-//
-// $Revision: 1.16 $
+// project :     Novelec MCCE-2 Electrometers
 //
-// $Log: not supported by cvs2svn $
-// Revision 1.14  2010/06/10 15:12:05  xavela
-// TEST : control two channels with different MCCE2
-//
-//
-// copyleft :  Synchrotron SOLEIL
-//             L'Orme des Merisiers
-//             Saint-Aubin - BP 48
-//             FRANCE
+// This file is part of Tango device class.
+// 
+// Tango is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+// 
+// Tango is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+// 
+// You should have received a copy of the GNU General Public License
+// along with Tango.  If not, see <http://www.gnu.org/licenses/>.
+// 
+// $Author:  $
 //
-//-=============================================================================
+// $Revision:  $
+// $Date:  $
 //
-//  		This file is generated by POGO
-//	(Program Obviously used to Generate tango Object)
+// $HeadURL:  $
 //
-//         (c) - Software Engineering Group - ESRF
+//=============================================================================
+//                This file is generated by POGO
+//        (Program Obviously used to Generate tango Object)
 //=============================================================================
 
 
 #include <tango.h>
-
 #include <MCCE2Electrometers.h>
 #include <MCCE2ElectrometersClass.h>
 
+/*----- PROTECTED REGION END -----*/	//	MCCE2ElectrometersClass.cpp
 
-//+----------------------------------------------------------------------------
+//-------------------------------------------------------------------
 /**
- *	Create MCCE2ElectrometersClass singleton and return it in a C function for Python usage
+ *	Create MCCE2ElectrometersClass singleton and
+ *	return it in a C function for Python usage
  */
-//+----------------------------------------------------------------------------
+//-------------------------------------------------------------------
 extern "C" {
-#ifdef WIN32
+#ifdef _TG_WINDOWS_
 
 __declspec(dllexport)
 
@@ -61,768 +68,541 @@ __declspec(dllexport)
 	}
 }
 
-
 namespace MCCE2Electrometers_ns
 {
-//+----------------------------------------------------------------------------
-//
-// method : 		GetElectrometerTypeStrClass::execute()
-// 
-// description : 	method to trigger the execution of the command.
-//                PLEASE DO NOT MODIFY this method core without pogo   
-//
-// in : - device : The device on which the command must be executed
-//		- in_any : The command input data
-//
-// returns : The command output data (packed in the Any object)
-//
-//-----------------------------------------------------------------------------
-CORBA::Any *GetElectrometerTypeStrClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
-{
+//===================================================================
+//	Initialize pointer for singleton pattern
+//===================================================================
+MCCE2ElectrometersClass *MCCE2ElectrometersClass::_instance = NULL;
 
-	cout2 << "GetElectrometerTypeStrClass::execute(): arrived" << endl;
+//--------------------------------------------------------
+/**
+ * method : 		MCCE2ElectrometersClass::MCCE2ElectrometersClass(string &s)
+ * description : 	constructor for the MCCE2ElectrometersClass
+ *
+ * @param s	The class name
+ */
+//--------------------------------------------------------
+MCCE2ElectrometersClass::MCCE2ElectrometersClass(string &s):Tango::DeviceClass(s)
+{
+	cout2 << "Entering MCCE2ElectrometersClass constructor" << endl;
+	set_default_property();
+	write_class_property();
 
-	Tango::DevUShort	argin;
-	extract(in_any, argin);
+	/*----- PROTECTED REGION ID(MCCE2ElectrometersClass::constructor) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2ElectrometersClass::constructor
 
-	return insert((static_cast<MCCE2Electrometers *>(device))->get_electrometer_type_str(argin));
+	cout2 << "Leaving MCCE2ElectrometersClass constructor" << endl;
 }
 
-//+----------------------------------------------------------------------------
-//
-// method : 		SetPolarityClass::execute()
-// 
-// description : 	method to trigger the execution of the command.
-//                PLEASE DO NOT MODIFY this method core without pogo   
-//
-// in : - device : The device on which the command must be executed
-//		- in_any : The command input data
-//
-// returns : The command output data (packed in the Any object)
-//
-//-----------------------------------------------------------------------------
-CORBA::Any *SetPolarityClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+//--------------------------------------------------------
+/**
+ * method : 		MCCE2ElectrometersClass::~MCCE2ElectrometersClass()
+ * description : 	destructor for the MCCE2ElectrometersClass
+ */
+//--------------------------------------------------------
+MCCE2ElectrometersClass::~MCCE2ElectrometersClass()
 {
+	/*----- PROTECTED REGION ID(MCCE2ElectrometersClass::destructor) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2ElectrometersClass::destructor
 
-	cout2 << "SetPolarityClass::execute(): arrived" << endl;
+	_instance = NULL;
+}
 
-	Tango::DevString	argin;
-	extract(in_any, argin);
 
-	((static_cast<MCCE2Electrometers *>(device))->set_polarity(argin));
-	return new CORBA::Any();
+//--------------------------------------------------------
+/**
+ * method : 		MCCE2ElectrometersClass::init
+ * description : 	Create the object if not already done.
+ *                  Otherwise, just return a pointer to the object
+ *
+ * @param	name	The class name
+ */
+//--------------------------------------------------------
+MCCE2ElectrometersClass *MCCE2ElectrometersClass::init(const char *name)
+{
+	if (_instance == NULL)
+	{
+		try
+		{
+			string s(name);
+			_instance = new MCCE2ElectrometersClass(s);
+		}
+		catch (bad_alloc &)
+		{
+			throw;
+		}		
+	}		
+	return _instance;
 }
 
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2_OFFCmd::execute()
-// 
-// description : 	method to trigger the execution of the command.
-//                PLEASE DO NOT MODIFY this method core without pogo   
-//
-// in : - device : The device on which the command must be executed
-//		- in_any : The command input data
-//
-// returns : The command output data (packed in the Any object)
-//
-//-----------------------------------------------------------------------------
-CORBA::Any *MCCE2_OFFCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+//--------------------------------------------------------
+/**
+ * method : 		MCCE2ElectrometersClass::instance
+ * description : 	Check if object already created,
+ *                  and return a pointer to the object
+ */
+//--------------------------------------------------------
+MCCE2ElectrometersClass *MCCE2ElectrometersClass::instance()
 {
-
-	cout2 << "MCCE2_OFFCmd::execute(): arrived" << endl;
-
-	((static_cast<MCCE2Electrometers *>(device))->mcce2__off());
-	return new CORBA::Any();
+	if (_instance == NULL)
+	{
+		cerr << "Class is not initialised !!" << endl;
+		exit(-1);
+	}
+	return _instance;
 }
 
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2_ONCmd::execute()
-// 
-// description : 	method to trigger the execution of the command.
-//                PLEASE DO NOT MODIFY this method core without pogo   
-//
-// in : - device : The device on which the command must be executed
-//		- in_any : The command input data
-//
-// returns : The command output data (packed in the Any object)
-//
-//-----------------------------------------------------------------------------
-CORBA::Any *MCCE2_ONCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
-{
 
-	cout2 << "MCCE2_ONCmd::execute(): arrived" << endl;
 
-	((static_cast<MCCE2Electrometers *>(device))->mcce2__on());
+//===================================================================
+//	Command execution method calls
+//===================================================================
+//--------------------------------------------------------
+/**
+ * method : 		RangeUPClass::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 *RangeUPClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
+{
+	cout2 << "RangeUPClass::execute(): arrived" << endl;
+	((static_cast<MCCE2Electrometers *>(device))->range_up());
 	return new CORBA::Any();
 }
 
-//+----------------------------------------------------------------------------
-//
-// method : 		SetGainCmd::execute()
-// 
-// description : 	method to trigger the execution of the command.
-//                PLEASE DO NOT MODIFY this method core without pogo   
-//
-// in : - device : The device on which the command must be executed
-//		- in_any : The command input data
-//
-// returns : The command output data (packed in the Any object)
-//
-//-----------------------------------------------------------------------------
-CORBA::Any *SetGainCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+//--------------------------------------------------------
+/**
+ * method : 		RangeDOWNClass::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 *RangeDOWNClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
 {
-
-	cout2 << "SetGainCmd::execute(): arrived" << endl;
-
-	Tango::DevUShort	argin;
-	extract(in_any, argin);
-
-	((static_cast<MCCE2Electrometers *>(device))->set_gain(argin));
+	cout2 << "RangeDOWNClass::execute(): arrived" << endl;
+	((static_cast<MCCE2Electrometers *>(device))->range_down());
 	return new CORBA::Any();
 }
 
-//+----------------------------------------------------------------------------
-//
-// method : 		GetGainCmd::execute()
-// 
-// description : 	method to trigger the execution of the command.
-//                PLEASE DO NOT MODIFY this method core without pogo   
-//
-// in : - device : The device on which the command must be executed
-//		- in_any : The command input data
-//
-// returns : The command output data (packed in the Any object)
-//
-//-----------------------------------------------------------------------------
-CORBA::Any *GetGainCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+//--------------------------------------------------------
+/**
+ * method : 		SetZeroVFFunctionClass::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 *SetZeroVFFunctionClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
 {
-
-	cout2 << "GetGainCmd::execute(): arrived" << endl;
-
-	return insert((static_cast<MCCE2Electrometers *>(device))->get_gain());
+	cout2 << "SetZeroVFFunctionClass::execute(): arrived" << endl;
+	((static_cast<MCCE2Electrometers *>(device))->set_zero_vffunction());
+	return new CORBA::Any();
 }
 
-//+----------------------------------------------------------------------------
-//
-// method : 		GetModeCmd::execute()
-// 
-// description : 	method to trigger the execution of the command.
-//                PLEASE DO NOT MODIFY this method core without pogo   
-//
-// in : - device : The device on which the command must be executed
-//		- in_any : The command input data
-//
-// returns : The command output data (packed in the Any object)
-//
-//-----------------------------------------------------------------------------
-CORBA::Any *GetModeCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+//--------------------------------------------------------
+/**
+ * method : 		SetOffsetZeroV1FunctionClass::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 *SetOffsetZeroV1FunctionClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
 {
-
-	cout2 << "GetModeCmd::execute(): arrived" << endl;
-
-	return insert((static_cast<MCCE2Electrometers *>(device))->get_mode());
+	cout2 << "SetOffsetZeroV1FunctionClass::execute(): arrived" << endl;
+	((static_cast<MCCE2Electrometers *>(device))->set_offset_zero_v1_function());
+	return new CORBA::Any();
 }
 
-//+----------------------------------------------------------------------------
-//
-// method : 		SetRangeCmd::execute()
-// 
-// description : 	method to trigger the execution of the command.
-//                PLEASE DO NOT MODIFY this method core without pogo   
-//
-// in : - device : The device on which the command must be executed
-//		- in_any : The command input data
-//
-// returns : The command output data (packed in the Any object)
-//
-//-----------------------------------------------------------------------------
-CORBA::Any *SetRangeCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+//--------------------------------------------------------
+/**
+ * method : 		SetLeakageZeroV2FunctionClass::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 *SetLeakageZeroV2FunctionClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
 {
-
-	cout2 << "SetRangeCmd::execute(): arrived" << endl;
-
-	Tango::DevString	argin;
-	extract(in_any, argin);
-
-	((static_cast<MCCE2Electrometers *>(device))->set_range(argin));
+	cout2 << "SetLeakageZeroV2FunctionClass::execute(): arrived" << endl;
+	((static_cast<MCCE2Electrometers *>(device))->set_leakage_zero_v2_function());
 	return new CORBA::Any();
 }
 
-//+----------------------------------------------------------------------------
-//
-// method : 		GetRangeCmd::execute()
-// 
-// description : 	method to trigger the execution of the command.
-//                PLEASE DO NOT MODIFY this method core without pogo   
-//
-// in : - device : The device on which the command must be executed
-//		- in_any : The command input data
-//
-// returns : The command output data (packed in the Any object)
-//
-//-----------------------------------------------------------------------------
-CORBA::Any *GetRangeCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+//--------------------------------------------------------
+/**
+ * method : 		SetTestFunctionClass::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 *SetTestFunctionClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
 {
-
-	cout2 << "GetRangeCmd::execute(): arrived" << endl;
-
-	return insert((static_cast<MCCE2Electrometers *>(device))->get_range());
+	cout2 << "SetTestFunctionClass::execute(): arrived" << endl;
+	((static_cast<MCCE2Electrometers *>(device))->set_test_function());
+	return new CORBA::Any();
 }
 
-//+----------------------------------------------------------------------------
-//
-// method : 		RemoteCmd::execute()
-// 
-// description : 	method to trigger the execution of the command.
-//                PLEASE DO NOT MODIFY this method core without pogo   
-//
-// in : - device : The device on which the command must be executed
-//		- in_any : The command input data
-//
-// returns : The command output data (packed in the Any object)
-//
-//-----------------------------------------------------------------------------
-CORBA::Any *RemoteCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+//--------------------------------------------------------
+/**
+ * method : 		SetMeasureFunctionClass::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 *SetMeasureFunctionClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
 {
-
-	cout2 << "RemoteCmd::execute(): arrived" << endl;
-
-	((static_cast<MCCE2Electrometers *>(device))->remote());
+	cout2 << "SetMeasureFunctionClass::execute(): arrived" << endl;
+	((static_cast<MCCE2Electrometers *>(device))->set_measure_function());
 	return new CORBA::Any();
 }
 
-//+----------------------------------------------------------------------------
-//
-// method : 		LocalCmd::execute()
-// 
-// description : 	method to trigger the execution of the command.
-//                PLEASE DO NOT MODIFY this method core without pogo   
-//
-// in : - device : The device on which the command must be executed
-//		- in_any : The command input data
-//
-// returns : The command output data (packed in the Any object)
-//
-//-----------------------------------------------------------------------------
-CORBA::Any *LocalCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+//--------------------------------------------------------
+/**
+ * method : 		MCCE2_ONClass::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 *MCCE2_ONClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
 {
-
-	cout2 << "LocalCmd::execute(): arrived" << endl;
-
-	((static_cast<MCCE2Electrometers *>(device))->local());
+	cout2 << "MCCE2_ONClass::execute(): arrived" << endl;
+	((static_cast<MCCE2Electrometers *>(device))->mcce2__on());
 	return new CORBA::Any();
 }
 
-
-
-//+----------------------------------------------------------------------------
-//
-// method : 		GetHzFilterCmd::execute()
-// 
-// description : 	method to trigger the execution of the command.
-//                PLEASE DO NOT MODIFY this method core without pogo   
-//
-// in : - device : The device on which the command must be excuted
-//		- in_any : The command input data
-//
-// returns : The command output data (packed in the Any object)
-//
-//-----------------------------------------------------------------------------
-CORBA::Any *GetHzFilterCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+//--------------------------------------------------------
+/**
+ * method : 		MCCE2_OFFClass::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 *MCCE2_OFFClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
 {
-
-	cout2 << "GetHzFilterCmd::execute(): arrived" << endl;
-
-	return insert((static_cast<MCCE2Electrometers *>(device))->get_hz_filter());
+	cout2 << "MCCE2_OFFClass::execute(): arrived" << endl;
+	((static_cast<MCCE2Electrometers *>(device))->mcce2__off());
+	return new CORBA::Any();
 }
 
-//+----------------------------------------------------------------------------
-//
-// method : 		SetHzFilterCmd::execute()
-// 
-// description : 	method to trigger the execution of the command.
-//                PLEASE DO NOT MODIFY this method core without pogo   
-//
-// in : - device : The device on which the command must be excuted
-//		- in_any : The command input data
-//
-// returns : The command output data (packed in the Any object)
-//
-//-----------------------------------------------------------------------------
-CORBA::Any *SetHzFilterCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+//--------------------------------------------------------
+/**
+ * method : 		LocalClass::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 *LocalClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
 {
-
-	cout2 << "SetHzFilterCmd::execute(): arrived" << endl;
-
-	Tango::DevShort	argin;
-	extract(in_any, argin);
-
-	((static_cast<MCCE2Electrometers *>(device))->set_hz_filter(argin));
+	cout2 << "LocalClass::execute(): arrived" << endl;
+	((static_cast<MCCE2Electrometers *>(device))->local());
 	return new CORBA::Any();
 }
 
-//+----------------------------------------------------------------------------
-//
-// method : 		GetPolarityCmd::execute()
-// 
-// description : 	method to trigger the execution of the command.
-//                PLEASE DO NOT MODIFY this method core without pogo   
-//
-// in : - device : The device on which the command must be excuted
-//		- in_any : The command input data
-//
-// returns : The command output data (packed in the Any object)
-//
-//-----------------------------------------------------------------------------
-CORBA::Any *GetPolarityCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+//--------------------------------------------------------
+/**
+ * method : 		RemoteClass::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 *RemoteClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
 {
-
-	cout2 << "GetPolarityCmd::execute(): arrived" << endl;
-
-	return insert((static_cast<MCCE2Electrometers *>(device))->get_polarity());
+	cout2 << "RemoteClass::execute(): arrived" << endl;
+	((static_cast<MCCE2Electrometers *>(device))->remote());
+	return new CORBA::Any();
 }
 
-
-
-
-
-//+----------------------------------------------------------------------------
-//
-// method : 		SetMeasureFunctionCmd::execute()
-// 
-// description : 	method to trigger the execution of the command.
-//                PLEASE DO NOT MODIFY this method core without pogo   
-//
-// in : - device : The device on which the command must be excuted
-//		- in_any : The command input data
-//
-// returns : The command output data (packed in the Any object)
-//
-//-----------------------------------------------------------------------------
-CORBA::Any *SetMeasureFunctionCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+//--------------------------------------------------------
+/**
+ * method : 		ResetClass::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 *ResetClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
 {
-
-	cout2 << "SetMeasureFunctionCmd::execute(): arrived" << endl;
-
-	((static_cast<MCCE2Electrometers *>(device))->set_measure_function());
+	cout2 << "ResetClass::execute(): arrived" << endl;
+	((static_cast<MCCE2Electrometers *>(device))->reset());
 	return new CORBA::Any();
 }
 
-//+----------------------------------------------------------------------------
-//
-// method : 		ClearRegistersClass::execute()
-// 
-// description : 	method to trigger the execution of the command.
-//                PLEASE DO NOT MODIFY this method core without pogo   
-//
-// in : - device : The device on which the command must be excuted
-//		- in_any : The command input data
-//
-// returns : The command output data (packed in the Any object)
-//
-//-----------------------------------------------------------------------------
-CORBA::Any *ClearRegistersClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+//--------------------------------------------------------
+/**
+ * method : 		ClearRegistersClass::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 *ClearRegistersClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
 {
-
 	cout2 << "ClearRegistersClass::execute(): arrived" << endl;
-
 	((static_cast<MCCE2Electrometers *>(device))->clear_registers());
 	return new CORBA::Any();
 }
 
-
-//+----------------------------------------------------------------------------
-//
-// method : 		RangeUPCmd::execute()
-// 
-// description : 	method to trigger the execution of the command.
-//                PLEASE DO NOT MODIFY this method core without pogo   
-//
-// in : - device : The device on which the command must be excuted
-//		- in_any : The command input data
-//
-// returns : The command output data (packed in the Any object)
-//
-//-----------------------------------------------------------------------------
-CORBA::Any *RangeUPCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
-{
-
-	cout2 << "RangeUPCmd::execute(): arrived" << endl;
-
-	((static_cast<MCCE2Electrometers *>(device))->range_up());
-	return new CORBA::Any();
-}
-
-//+----------------------------------------------------------------------------
-//
-// method : 		RangeDOWNClass::execute()
-// 
-// description : 	method to trigger the execution of the command.
-//                PLEASE DO NOT MODIFY this method core without pogo   
-//
-// in : - device : The device on which the command must be excuted
-//		- in_any : The command input data
-//
-// returns : The command output data (packed in the Any object)
-//
-//-----------------------------------------------------------------------------
-CORBA::Any *RangeDOWNClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+//--------------------------------------------------------
+/**
+ * method : 		GetRangeClass::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 *GetRangeClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
 {
-
-	cout2 << "RangeDOWNClass::execute(): arrived" << endl;
-
-	((static_cast<MCCE2Electrometers *>(device))->range_down());
-	return new CORBA::Any();
+	cout2 << "GetRangeClass::execute(): arrived" << endl;
+	return insert((static_cast<MCCE2Electrometers *>(device))->get_range());
 }
 
-//+----------------------------------------------------------------------------
-//
-// method : 		SetZeroVFFunctionCmd::execute()
-// 
-// description : 	method to trigger the execution of the command.
-//                PLEASE DO NOT MODIFY this method core without pogo   
-//
-// in : - device : The device on which the command must be excuted
-//		- in_any : The command input data
-//
-// returns : The command output data (packed in the Any object)
-//
-//-----------------------------------------------------------------------------
-CORBA::Any *SetZeroVFFunctionCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+//--------------------------------------------------------
+/**
+ * method : 		SetRangeClass::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 *SetRangeClass::execute(Tango::DeviceImpl *device, const CORBA::Any &in_any)
 {
-
-	cout2 << "SetZeroVFFunctionCmd::execute(): arrived" << endl;
-
-	((static_cast<MCCE2Electrometers *>(device))->set_zero_vffunction());
+	cout2 << "SetRangeClass::execute(): arrived" << endl;
+	Tango::DevString argin;
+	extract(in_any, argin);
+	((static_cast<MCCE2Electrometers *>(device))->set_range(argin));
 	return new CORBA::Any();
 }
 
-//+----------------------------------------------------------------------------
-//
-// method : 		SetOffsetZeroV1FunctionCmd::execute()
-// 
-// description : 	method to trigger the execution of the command.
-//                PLEASE DO NOT MODIFY this method core without pogo   
-//
-// in : - device : The device on which the command must be excuted
-//		- in_any : The command input data
-//
-// returns : The command output data (packed in the Any object)
-//
-//-----------------------------------------------------------------------------
-CORBA::Any *SetOffsetZeroV1FunctionCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+//--------------------------------------------------------
+/**
+ * method : 		GetModeClass::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 *GetModeClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
 {
-
-	cout2 << "SetOffsetZeroV1FunctionCmd::execute(): arrived" << endl;
-
-	((static_cast<MCCE2Electrometers *>(device))->set_offset_zero_v1_function());
-	return new CORBA::Any();
+	cout2 << "GetModeClass::execute(): arrived" << endl;
+	return insert((static_cast<MCCE2Electrometers *>(device))->get_mode());
 }
 
-//+----------------------------------------------------------------------------
-//
-// method : 		SetLeakageZeroV2FunctionCmd::execute()
-// 
-// description : 	method to trigger the execution of the command.
-//                PLEASE DO NOT MODIFY this method core without pogo   
-//
-// in : - device : The device on which the command must be excuted
-//		- in_any : The command input data
-//
-// returns : The command output data (packed in the Any object)
-//
-//-----------------------------------------------------------------------------
-CORBA::Any *SetLeakageZeroV2FunctionCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+//--------------------------------------------------------
+/**
+ * method : 		GetPolarityClass::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 *GetPolarityClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
 {
-
-	cout2 << "SetLeakageZeroV2FunctionCmd::execute(): arrived" << endl;
-
-	((static_cast<MCCE2Electrometers *>(device))->set_leakage_zero_v2_function());
-	return new CORBA::Any();
+	cout2 << "GetPolarityClass::execute(): arrived" << endl;
+	return insert((static_cast<MCCE2Electrometers *>(device))->get_polarity());
 }
 
-//+----------------------------------------------------------------------------
-//
-// method : 		SetTestFunctionCmd::execute()
-// 
-// description : 	method to trigger the execution of the command.
-//                PLEASE DO NOT MODIFY this method core without pogo   
-//
-// in : - device : The device on which the command must be excuted
-//		- in_any : The command input data
-//
-// returns : The command output data (packed in the Any object)
-//
-//-----------------------------------------------------------------------------
-CORBA::Any *SetTestFunctionCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+//--------------------------------------------------------
+/**
+ * method : 		SetPolarityClass::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 *SetPolarityClass::execute(Tango::DeviceImpl *device, const CORBA::Any &in_any)
 {
-
-	cout2 << "SetTestFunctionCmd::execute(): arrived" << endl;
-
-	((static_cast<MCCE2Electrometers *>(device))->set_test_function());
+	cout2 << "SetPolarityClass::execute(): arrived" << endl;
+	Tango::DevString argin;
+	extract(in_any, argin);
+	((static_cast<MCCE2Electrometers *>(device))->set_polarity(argin));
 	return new CORBA::Any();
 }
 
-
-
-
-
-//+----------------------------------------------------------------------------
-//
-// method : 		ResetClass::execute()
-// 
-// description : 	method to trigger the execution of the command.
-//                PLEASE DO NOT MODIFY this method core without pogo   
-//
-// in : - device : The device on which the command must be excuted
-//		- in_any : The command input data
-//
-// returns : The command output data (packed in the Any object)
-//
-//-----------------------------------------------------------------------------
-CORBA::Any *ResetClass::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+//--------------------------------------------------------
+/**
+ * method : 		GetHzFilterClass::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 *GetHzFilterClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
 {
-
-	cout2 << "ResetClass::execute(): arrived" << endl;
-
-	((static_cast<MCCE2Electrometers *>(device))->reset());
-	return new CORBA::Any();
+	cout2 << "GetHzFilterClass::execute(): arrived" << endl;
+	return insert((static_cast<MCCE2Electrometers *>(device))->get_hz_filter());
 }
 
-
-//
-//----------------------------------------------------------------
-//	Initialize pointer for singleton pattern
-//----------------------------------------------------------------
-//
-MCCE2ElectrometersClass *MCCE2ElectrometersClass::_instance = NULL;
-
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2ElectrometersClass::MCCE2ElectrometersClass(string &s)
-// 
-// description : 	constructor for the MCCE2ElectrometersClass
-//
-// in : - s : The class name
-//
-//-----------------------------------------------------------------------------
-MCCE2ElectrometersClass::MCCE2ElectrometersClass(string &s):DeviceClass(s)
-{
-
-	cout2 << "Entering MCCE2ElectrometersClass constructor" << endl;
-	set_default_property();
-	write_class_property();
-	get_class_property();
-	
-	cout2 << "Leaving MCCE2ElectrometersClass constructor" << endl;
-
-}
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2ElectrometersClass::~MCCE2ElectrometersClass()
-// 
-// description : 	destructor for the MCCE2ElectrometersClass
-//
-//-----------------------------------------------------------------------------
-MCCE2ElectrometersClass::~MCCE2ElectrometersClass()
+//--------------------------------------------------------
+/**
+ * method : 		SetHzFilterClass::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 *SetHzFilterClass::execute(Tango::DeviceImpl *device, const CORBA::Any &in_any)
 {
-	_instance = NULL;
+	cout2 << "SetHzFilterClass::execute(): arrived" << endl;
+	Tango::DevShort argin;
+	extract(in_any, argin);
+	((static_cast<MCCE2Electrometers *>(device))->set_hz_filter(argin));
+	return new CORBA::Any();
 }
 
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2ElectrometersClass::instance
-// 
-// description : 	Create the object if not already done. Otherwise, just
-//			return a pointer to the object
-//
-// in : - name : The class name
-//
-//-----------------------------------------------------------------------------
-MCCE2ElectrometersClass *MCCE2ElectrometersClass::init(const char *name)
+//--------------------------------------------------------
+/**
+ * method : 		GetGainClass::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 *GetGainClass::execute(Tango::DeviceImpl *device, TANGO_UNUSED(const CORBA::Any &in_any))
 {
-	if (_instance == NULL)
-	{
-		try
-		{
-			string s(name);
-			_instance = new MCCE2ElectrometersClass(s);
-		}
-		catch (bad_alloc)
-		{
-			throw;
-		}		
-	}		
-	return _instance;
+	cout2 << "GetGainClass::execute(): arrived" << endl;
+	return insert((static_cast<MCCE2Electrometers *>(device))->get_gain());
 }
 
-MCCE2ElectrometersClass *MCCE2ElectrometersClass::instance()
+//--------------------------------------------------------
+/**
+ * method : 		SetGainClass::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 *SetGainClass::execute(Tango::DeviceImpl *device, const CORBA::Any &in_any)
 {
-	if (_instance == NULL)
-	{
-		cerr << "Class is not initialised !!" << endl;
-		exit(-1);
-	}
-	return _instance;
+	cout2 << "SetGainClass::execute(): arrived" << endl;
+	Tango::DevUShort argin;
+	extract(in_any, argin);
+	((static_cast<MCCE2Electrometers *>(device))->set_gain(argin));
+	return new CORBA::Any();
 }
 
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2ElectrometersClass::command_factory
-// 
-// description : 	Create the command object(s) and store them in the 
-//			command list
-//
-//-----------------------------------------------------------------------------
-void MCCE2ElectrometersClass::command_factory()
+//--------------------------------------------------------
+/**
+ * method : 		GetElectrometerTypeStrClass::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 *GetElectrometerTypeStrClass::execute(Tango::DeviceImpl *device, const CORBA::Any &in_any)
 {
-	command_list.push_back(new RangeUPCmd("RangeUP",
-		Tango::DEV_VOID, Tango::DEV_VOID,
-		"no argin",
-		"no argout",
-		Tango::OPERATOR));
-	command_list.push_back(new RangeDOWNClass("RangeDOWN",
-		Tango::DEV_VOID, Tango::DEV_VOID,
-		"no argin",
-		"no argout",
-		Tango::OPERATOR));
-	command_list.push_back(new SetZeroVFFunctionCmd("SetZeroVFFunction",
-		Tango::DEV_VOID, Tango::DEV_VOID,
-		"no argin",
-		"no argout",
-		Tango::EXPERT));
-	command_list.push_back(new SetOffsetZeroV1FunctionCmd("SetOffsetZeroV1Function",
-		Tango::DEV_VOID, Tango::DEV_VOID,
-		"no argin",
-		"no argout",
-		Tango::EXPERT));
-	command_list.push_back(new SetLeakageZeroV2FunctionCmd("SetLeakageZeroV2Function",
-		Tango::DEV_VOID, Tango::DEV_VOID,
-		"no argin",
-		"no argout",
-		Tango::EXPERT));
-	command_list.push_back(new SetTestFunctionCmd("SetTestFunction",
-		Tango::DEV_VOID, Tango::DEV_VOID,
-		"no argin",
-		"no argout",
-		Tango::EXPERT));
-	command_list.push_back(new SetMeasureFunctionCmd("SetMeasureFunction",
-		Tango::DEV_VOID, Tango::DEV_VOID,
-		"no argin",
-		"no argout",
-		Tango::EXPERT));
-	command_list.push_back(new MCCE2_ONCmd("MCCE2_ON",
-		Tango::DEV_VOID, Tango::DEV_VOID,
-		"no argin",
-		"no argout",
-		Tango::EXPERT));
-	command_list.push_back(new MCCE2_OFFCmd("MCCE2_OFF",
-		Tango::DEV_VOID, Tango::DEV_VOID,
-		"no argin",
-		"no argout",
-		Tango::EXPERT));
-	command_list.push_back(new LocalCmd("Local",
-		Tango::DEV_VOID, Tango::DEV_VOID,
-		"no argin",
-		"no argout",
-		Tango::EXPERT));
-	command_list.push_back(new RemoteCmd("Remote",
-		Tango::DEV_VOID, Tango::DEV_VOID,
-		"no argin",
-		"no argout",
-		Tango::EXPERT));
-	command_list.push_back(new ResetClass("Reset",
-		Tango::DEV_VOID, Tango::DEV_VOID,
-		"no argin",
-		"no argout",
-		Tango::OPERATOR));
-	command_list.push_back(new ClearRegistersClass("ClearRegisters",
-		Tango::DEV_VOID, Tango::DEV_VOID,
-		"no argin",
-		"no argout",
-		Tango::OPERATOR));
-	command_list.push_back(new GetRangeCmd("GetRange",
-		Tango::DEV_VOID, Tango::DEV_STRING,
-		"no argin",
-		"The actual electrometer range",
-		Tango::OPERATOR));
-	command_list.push_back(new SetRangeCmd("SetRange",
-		Tango::DEV_STRING, Tango::DEV_VOID,
-		"The range to apply on the electrometer",
-		"no argout",
-		Tango::OPERATOR));
-	command_list.push_back(new GetModeCmd("GetMode",
-		Tango::DEV_VOID, Tango::DEV_STRING,
-		"no argin",
-		"The electrometer mode (MEASURE, LEAKAGE ...)",
-		Tango::EXPERT));
-	command_list.push_back(new GetPolarityCmd("GetPolarity",
-		Tango::DEV_VOID, Tango::DEV_STRING,
-		"no argin",
-		"The electrometer polarity",
-		Tango::EXPERT));
-	command_list.push_back(new SetPolarityClass("SetPolarity",
-		Tango::DEV_STRING, Tango::DEV_VOID,
-		"POSITIVE or NEGATIVE",
-		"no argout",
-		Tango::OPERATOR));
-	command_list.push_back(new GetHzFilterCmd("GetHzFilter",
-		Tango::DEV_VOID, Tango::DEV_SHORT,
-		"no argin",
-		"The MCCE2 cut-off frequency in Hz",
-		Tango::EXPERT));
-	command_list.push_back(new SetHzFilterCmd("SetHzFilter",
-		Tango::DEV_SHORT, Tango::DEV_VOID,
-		"The MCCE2 cut-off frequency in Hz",
-		"no argout",
-		Tango::EXPERT));
-	command_list.push_back(new GetGainCmd("GetGain",
-		Tango::DEV_VOID, Tango::DEV_SHORT,
-		"no argin",
-		"The MCCE2 gain",
-		Tango::EXPERT));
-	command_list.push_back(new SetGainCmd("SetGain",
-		Tango::DEV_USHORT, Tango::DEV_VOID,
-		"The new MCCE-2 gain",
-		"no argout",
-		Tango::EXPERT));
-	command_list.push_back(new GetElectrometerTypeStrClass("GetElectrometerTypeStr",
-		Tango::DEV_USHORT, Tango::DEV_STRING,
-		"channel number",
-		"the electrometer type as string",
-		Tango::OPERATOR));
-
-	//	add polling if any
-	for (unsigned int i=0 ; i<command_list.size(); i++)
-	{
-	}
+	cout2 << "GetElectrometerTypeStrClass::execute(): arrived" << endl;
+	Tango::DevUShort argin;
+	extract(in_any, argin);
+	return insert((static_cast<MCCE2Electrometers *>(device))->get_electrometer_type_str(argin));
 }
 
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2ElectrometersClass::get_class_property
-// 
-// description : 	Get the class property for specified name.
-//
-// in :		string	name : The property name
-//
-//+----------------------------------------------------------------------------
+
+//===================================================================
+//	Properties management
+//===================================================================
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2ElectrometersClass::get_class_property()
+ *	Description : Get the class property for specified name.
+ */
+//--------------------------------------------------------
 Tango::DbDatum MCCE2ElectrometersClass::get_class_property(string &prop_name)
 {
 	for (unsigned int i=0 ; i<cl_prop.size() ; i++)
 		if (cl_prop[i].name == prop_name)
 			return cl_prop[i];
-	//	if not found, return  an empty DbDatum
+	//	if not found, returns  an empty DbDatum
 	return Tango::DbDatum(prop_name);
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2ElectrometersClass::get_default_device_property()
-// 
-// description : 	Return the default value for device property.
-//
-//-----------------------------------------------------------------------------
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2ElectrometersClass::get_default_device_property()
+ *	Description : Return the default value for device property.
+ */
+//--------------------------------------------------------
 Tango::DbDatum MCCE2ElectrometersClass::get_default_device_property(string &prop_name)
 {
 	for (unsigned int i=0 ; i<dev_def_prop.size() ; i++)
@@ -832,13 +612,12 @@ Tango::DbDatum MCCE2ElectrometersClass::get_default_device_property(string &prop
 	return Tango::DbDatum(prop_name);
 }
 
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2ElectrometersClass::get_default_class_property()
-// 
-// description : 	Return the default value for class property.
-//
-//-----------------------------------------------------------------------------
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2ElectrometersClass::get_default_class_property()
+ *	Description : Return the default value for class property.
+ */
+//--------------------------------------------------------
 Tango::DbDatum MCCE2ElectrometersClass::get_default_class_property(string &prop_name)
 {
 	for (unsigned int i=0 ; i<cl_def_prop.size() ; i++)
@@ -847,134 +626,28 @@ Tango::DbDatum MCCE2ElectrometersClass::get_default_class_property(string &prop_
 	//	if not found, return  an empty DbDatum
 	return Tango::DbDatum(prop_name);
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2ElectrometersClass::device_factory
-// 
-// description : 	Create the device object(s) and store them in the 
-//			device list
-//
-// in :		Tango::DevVarStringArray *devlist_ptr : The device name list
-//
-//-----------------------------------------------------------------------------
-void MCCE2ElectrometersClass::device_factory(const Tango::DevVarStringArray *devlist_ptr)
-{
-
-	//	Create all devices.(Automatic code generation)
-	//-------------------------------------------------------------
-	for (unsigned long i=0 ; i < devlist_ptr->length() ; i++)
-	{
-		cout4 << "Device name : " << (*devlist_ptr)[i].in() << endl;
-						
-		// Create devices and add it into the device list
-		//----------------------------------------------------
-		device_list.push_back(new MCCE2Electrometers(this, (*devlist_ptr)[i]));							 
-
-		// Export device to the outside world
-		// Check before if database used.
-		//---------------------------------------------
-		if ((Tango::Util::_UseDb == true) && (Tango::Util::_FileDb == false))
-			export_device(device_list.back());
-		else
-			export_device(device_list.back(), (*devlist_ptr)[i]);
-	}
-	//	End of Automatic code generation
-	//-------------------------------------------------------------
-
-}
-//+----------------------------------------------------------------------------
-//	Method: MCCE2ElectrometersClass::attribute_factory(vector<Tango::Attr *> &att_list)
-//-----------------------------------------------------------------------------
-void MCCE2ElectrometersClass::attribute_factory(vector<Tango::Attr *> &att_list)
-{
-	//	Attribute : electrometerChannel
-	electrometerChannelAttrib	*electrometer_channel = new electrometerChannelAttrib();
-	Tango::UserDefaultAttrProp	electrometer_channel_prop;
-	electrometer_channel_prop.set_label("electrometer channel");
-	electrometer_channel_prop.set_unit(" ");
-	electrometer_channel_prop.set_standard_unit(" ");
-	electrometer_channel_prop.set_display_unit(" ");
-	electrometer_channel_prop.set_format("%1.0d");
-	electrometer_channel_prop.set_description("MCCE2 electrometer have two channels to support two amplifiers.\nWARN : default is 0 (please set this value first).");
-	electrometer_channel->set_default_properties(electrometer_channel_prop);
-	att_list.push_back(electrometer_channel);
-
-	//	Attribute : range1
-	range1Attrib	*range1 = new range1Attrib();
-	Tango::UserDefaultAttrProp	range1_prop;
-	range1_prop.set_label("range1");
-	range1_prop.set_unit(" ");
-	range1_prop.set_standard_unit(" ");
-	range1_prop.set_display_unit(" ");
-	range1_prop.set_format("%s");
-	range1_prop.set_description("The channel one MCCE2 range.");
-	range1->set_default_properties(range1_prop);
-	att_list.push_back(range1);
-
-	//	Attribute : range2
-	range2Attrib	*range2 = new range2Attrib();
-	Tango::UserDefaultAttrProp	range2_prop;
-	range2_prop.set_label("range2");
-	range2_prop.set_unit(" ");
-	range2_prop.set_standard_unit(" ");
-	range2_prop.set_display_unit(" ");
-	range2_prop.set_format("%s");
-	range2_prop.set_description("The channel two MCCE range.");
-	range2->set_default_properties(range2_prop);
-	att_list.push_back(range2);
-
-	//	End of Automatic code generation
-	//-------------------------------------------------------------
-}
-
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2ElectrometersClass::get_class_property()
-// 
-// description : 	Read the class properties from database.
-//
-//-----------------------------------------------------------------------------
-void MCCE2ElectrometersClass::get_class_property()
-{
-	//	Initialize your default values here (if not done with  POGO).
-	//------------------------------------------------------------------
-
-	//	Read class properties from database.(Automatic code generation)
-	//------------------------------------------------------------------
-
-	//	Call database and extract values
-	//--------------------------------------------
-	if (Tango::Util::instance()->_UseDb==true)
-		get_db_class()->get_property(cl_prop);
-	Tango::DbDatum	def_prop;
-	int	i = -1;
 
 
-	//	End of Automatic code generation
-	//------------------------------------------------------------------
-
-}
-
-//+----------------------------------------------------------------------------
-//
-// method : 	MCCE2ElectrometersClass::set_default_property
-// 
-// description: Set default property (class and device) for wizard.
-//              For each property, add to wizard property name and description
-//              If default value has been set, add it to wizard property and
-//              store it in a DbDatum.
-//
-//-----------------------------------------------------------------------------
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2ElectrometersClass::set_default_property()
+ *	Description : Set default property (class and device) for wizard.
+ *                For each property, add to wizard property name and description.
+ *                If default value has been set, add it to wizard property and
+ *                store it in a DbDatum.
+ */
+//--------------------------------------------------------
 void MCCE2ElectrometersClass::set_default_property()
 {
 	string	prop_name;
 	string	prop_desc;
 	string	prop_def;
-
 	vector<string>	vect_data;
+
 	//	Set Default Class Properties
-	//	Set Default Device Properties
-	prop_name = "CommunicationLinkName";
+
+	//	Set Default device Properties
+	prop_name = "ProxyName";
 	prop_desc = "The name of the device which manage the communication.";
 	prop_def  = "";
 	vect_data.clear();
@@ -987,7 +660,6 @@ void MCCE2ElectrometersClass::set_default_property()
 	}
 	else
 		add_wiz_dev_prop(prop_name, prop_desc);
-
 	prop_name = "Electrometer1Address";
 	prop_desc = "The first electrometer address configured. <br />\nNote : if not connected, push 0 or let empty the property.";
 	prop_def  = "";
@@ -1001,7 +673,6 @@ void MCCE2ElectrometersClass::set_default_property()
 	}
 	else
 		add_wiz_dev_prop(prop_name, prop_desc);
-
 	prop_name = "Electrometer2Address";
 	prop_desc = "The second electrometer address configured. <br />\nNote : if not connected, push 0 or let empty the property.";
 	prop_def  = "";
@@ -1015,19 +686,30 @@ void MCCE2ElectrometersClass::set_default_property()
 	}
 	else
 		add_wiz_dev_prop(prop_name, prop_desc);
-
+	prop_name = "ComProtocol";
+	prop_desc = "Communication protocal: ETHERNET/SERIAL";
+	prop_def  = "";
+	vect_data.clear();
+	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);
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2ElectrometersClass::write_class_property
-// 
-// description : 	Set class description as property in database
-//
-//-----------------------------------------------------------------------------
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2ElectrometersClass::write_class_property()
+ *	Description : Set class description fields as property in database
+ */
+//--------------------------------------------------------
 void MCCE2ElectrometersClass::write_class_property()
 {
 	//	First time, check if database used
-	//--------------------------------------------
 	if (Tango::Util::_UseDb == false)
 		return;
 
@@ -1051,15 +733,11 @@ void MCCE2ElectrometersClass::write_class_property()
 	str_desc.push_back("<br> Novelec Electrometers : MCCE2");
 	description << str_desc;
 	data.push_back(description);
-		
+
 	//	put cvs or svn location
-	string	filename(classname);
+	string	filename("MCCE2Electrometers");
 	filename += "Class.cpp";
-	
-	// Create a string with the class ID to
-	// get the string into the binary
-	string	class_id(ClassId);
-	
+
 	// check for cvs information
 	string	src_path(CvsPath);
 	start = src_path.find("/");
@@ -1082,6 +760,7 @@ void MCCE2ElectrometersClass::write_class_property()
 			data.push_back(cvs_loc);
 		}
 	}
+
 	// check for svn information
 	else
 	{
@@ -1156,13 +835,474 @@ void MCCE2ElectrometersClass::write_class_property()
 	//  Put inheritance
 	Tango::DbDatum	inher_datum("InheritedFrom");
 	vector<string> inheritance;
-	inheritance.push_back("Device_4Impl");
+	inheritance.push_back("Tango::Device_4Impl");
 	inher_datum << inheritance;
 	data.push_back(inher_datum);
 
 	//	Call database and and values
-	//--------------------------------------------
 	get_db_class()->put_property(data);
 }
 
-}	// namespace
+//===================================================================
+//	Factory methods
+//===================================================================
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2ElectrometersClass::device_factory()
+ *	Description : Create the device object(s)
+ *                and store them in the device list
+ */
+//--------------------------------------------------------
+void MCCE2ElectrometersClass::device_factory(const Tango::DevVarStringArray *devlist_ptr)
+{
+	/*----- PROTECTED REGION ID(MCCE2ElectrometersClass::device_factory_before) ENABLED START -----*/
+	
+	//	Add your own code
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2ElectrometersClass::device_factory_before
+
+	//	Create devices and add it into the device list
+	for (unsigned long i=0 ; i<devlist_ptr->length() ; i++)
+	{
+		cout4 << "Device name : " << (*devlist_ptr)[i].in() << endl;
+		device_list.push_back(new MCCE2Electrometers(this, (*devlist_ptr)[i]));							 
+	}
+
+	//	Manage dynamic attributes if any
+	//erase_dynamic_attributes(devlist_ptr, get_class_attr()->get_attr_list());
+
+	//	Export devices to the outside world
+	for (unsigned long i=1 ; i<=devlist_ptr->length() ; i++)
+	{
+		//	Add dynamic attributes if any
+		MCCE2Electrometers *dev = static_cast<MCCE2Electrometers *>(device_list[device_list.size()-i]);
+		dev->add_dynamic_attributes();
+
+		//	Check before if database used.
+		if ((Tango::Util::_UseDb == true) && (Tango::Util::_FileDb == false))
+			export_device(dev);
+		else
+			export_device(dev, dev->get_name().c_str());
+	}
+
+	/*----- PROTECTED REGION ID(MCCE2ElectrometersClass::device_factory_after) ENABLED START -----*/
+	
+	//	Add your own code
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2ElectrometersClass::device_factory_after
+}
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2ElectrometersClass::attribute_factory()
+ *	Description : Create the attribute object(s)
+ *                and store them in the attribute list
+ */
+//--------------------------------------------------------
+void MCCE2ElectrometersClass::attribute_factory(vector<Tango::Attr *> &att_list)
+{
+	/*----- PROTECTED REGION ID(MCCE2ElectrometersClass::attribute_factory_before) ENABLED START -----*/
+	
+	//	Add your own code
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2ElectrometersClass::attribute_factory_before
+	//	Attribute : electrometerChannel
+	electrometerChannelAttrib	*electrometerchannel = new electrometerChannelAttrib();
+	Tango::UserDefaultAttrProp	electrometerchannel_prop;
+	electrometerchannel_prop.set_description("MCCE2 electrometer have two channels to support two amplifiers.\nWARN : default is 0 (please set this value first).");
+	electrometerchannel_prop.set_label("electrometer channel");
+	electrometerchannel_prop.set_unit(" ");
+	electrometerchannel_prop.set_standard_unit(" ");
+	electrometerchannel_prop.set_display_unit(" ");
+	electrometerchannel_prop.set_format("%1.0d");
+	//	max_value	not set for electrometerChannel
+	//	min_value	not set for electrometerChannel
+	//	max_alarm	not set for electrometerChannel
+	//	min_alarm	not set for electrometerChannel
+	//	max_warning	not set for electrometerChannel
+	//	min_warning	not set for electrometerChannel
+	//	delta_t	not set for electrometerChannel
+	//	delta_val	not set for electrometerChannel
+	
+	electrometerchannel->set_default_properties(electrometerchannel_prop);
+	//	Not Polled
+	electrometerchannel->set_disp_level(Tango::OPERATOR);
+	//	Not Memorized
+	att_list.push_back(electrometerchannel);
+
+	//	Attribute : range1
+	range1Attrib	*range1 = new range1Attrib();
+	Tango::UserDefaultAttrProp	range1_prop;
+	range1_prop.set_description("The channel one MCCE2 range.");
+	range1_prop.set_label("range1");
+	range1_prop.set_unit(" ");
+	range1_prop.set_standard_unit(" ");
+	range1_prop.set_display_unit(" ");
+	range1_prop.set_format("%s");
+	//	max_value	not set for range1
+	//	min_value	not set for range1
+	//	max_alarm	not set for range1
+	//	min_alarm	not set for range1
+	//	max_warning	not set for range1
+	//	min_warning	not set for range1
+	//	delta_t	not set for range1
+	//	delta_val	not set for range1
+	
+	range1->set_default_properties(range1_prop);
+	//	Not Polled
+	range1->set_disp_level(Tango::OPERATOR);
+	//	Not Memorized
+	att_list.push_back(range1);
+
+	//	Attribute : range2
+	range2Attrib	*range2 = new range2Attrib();
+	Tango::UserDefaultAttrProp	range2_prop;
+	range2_prop.set_description("The channel two MCCE range.");
+	range2_prop.set_label("range2");
+	range2_prop.set_unit(" ");
+	range2_prop.set_standard_unit(" ");
+	range2_prop.set_display_unit(" ");
+	range2_prop.set_format("%s");
+	//	max_value	not set for range2
+	//	min_value	not set for range2
+	//	max_alarm	not set for range2
+	//	min_alarm	not set for range2
+	//	max_warning	not set for range2
+	//	min_warning	not set for range2
+	//	delta_t	not set for range2
+	//	delta_val	not set for range2
+	
+	range2->set_default_properties(range2_prop);
+	//	Not Polled
+	range2->set_disp_level(Tango::OPERATOR);
+	//	Not Memorized
+	att_list.push_back(range2);
+
+	//	Create a list of static attributes
+	create_static_attribute_list(get_class_attr()->get_attr_list());
+	/*----- PROTECTED REGION ID(MCCE2ElectrometersClass::attribute_factory_after) ENABLED START -----*/
+	
+	//	Add your own code
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2ElectrometersClass::attribute_factory_after
+}
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2ElectrometersClass::command_factory()
+ *	Description : Create the command object(s)
+ *                and store them in the command list
+ */
+//--------------------------------------------------------
+void MCCE2ElectrometersClass::command_factory()
+{
+	/*----- PROTECTED REGION ID(MCCE2ElectrometersClass::command_factory_before) ENABLED START -----*/
+	
+	//	Add your own code
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2ElectrometersClass::command_factory_before
+
+
+	//	Command RangeUP
+	RangeUPClass	*pRangeUPCmd =
+		new RangeUPClass("RangeUP",
+			Tango::DEV_VOID, Tango::DEV_VOID,
+			"no argin",
+			"no argout",
+			Tango::OPERATOR);
+	command_list.push_back(pRangeUPCmd);
+
+	//	Command RangeDOWN
+	RangeDOWNClass	*pRangeDOWNCmd =
+		new RangeDOWNClass("RangeDOWN",
+			Tango::DEV_VOID, Tango::DEV_VOID,
+			"no argin",
+			"no argout",
+			Tango::OPERATOR);
+	command_list.push_back(pRangeDOWNCmd);
+
+	//	Command SetZeroVFFunction
+	SetZeroVFFunctionClass	*pSetZeroVFFunctionCmd =
+		new SetZeroVFFunctionClass("SetZeroVFFunction",
+			Tango::DEV_VOID, Tango::DEV_VOID,
+			"no argin",
+			"no argout",
+			Tango::EXPERT);
+	command_list.push_back(pSetZeroVFFunctionCmd);
+
+	//	Command SetOffsetZeroV1Function
+	SetOffsetZeroV1FunctionClass	*pSetOffsetZeroV1FunctionCmd =
+		new SetOffsetZeroV1FunctionClass("SetOffsetZeroV1Function",
+			Tango::DEV_VOID, Tango::DEV_VOID,
+			"no argin",
+			"no argout",
+			Tango::EXPERT);
+	command_list.push_back(pSetOffsetZeroV1FunctionCmd);
+
+	//	Command SetLeakageZeroV2Function
+	SetLeakageZeroV2FunctionClass	*pSetLeakageZeroV2FunctionCmd =
+		new SetLeakageZeroV2FunctionClass("SetLeakageZeroV2Function",
+			Tango::DEV_VOID, Tango::DEV_VOID,
+			"no argin",
+			"no argout",
+			Tango::EXPERT);
+	command_list.push_back(pSetLeakageZeroV2FunctionCmd);
+
+	//	Command SetTestFunction
+	SetTestFunctionClass	*pSetTestFunctionCmd =
+		new SetTestFunctionClass("SetTestFunction",
+			Tango::DEV_VOID, Tango::DEV_VOID,
+			"no argin",
+			"no argout",
+			Tango::EXPERT);
+	command_list.push_back(pSetTestFunctionCmd);
+
+	//	Command SetMeasureFunction
+	SetMeasureFunctionClass	*pSetMeasureFunctionCmd =
+		new SetMeasureFunctionClass("SetMeasureFunction",
+			Tango::DEV_VOID, Tango::DEV_VOID,
+			"no argin",
+			"no argout",
+			Tango::EXPERT);
+	command_list.push_back(pSetMeasureFunctionCmd);
+
+	//	Command MCCE2_ON
+	MCCE2_ONClass	*pMCCE2_ONCmd =
+		new MCCE2_ONClass("MCCE2_ON",
+			Tango::DEV_VOID, Tango::DEV_VOID,
+			"no argin",
+			"no argout",
+			Tango::EXPERT);
+	command_list.push_back(pMCCE2_ONCmd);
+
+	//	Command MCCE2_OFF
+	MCCE2_OFFClass	*pMCCE2_OFFCmd =
+		new MCCE2_OFFClass("MCCE2_OFF",
+			Tango::DEV_VOID, Tango::DEV_VOID,
+			"no argin",
+			"no argout",
+			Tango::EXPERT);
+	command_list.push_back(pMCCE2_OFFCmd);
+
+	//	Command Local
+	LocalClass	*pLocalCmd =
+		new LocalClass("Local",
+			Tango::DEV_VOID, Tango::DEV_VOID,
+			"no argin",
+			"no argout",
+			Tango::EXPERT);
+	command_list.push_back(pLocalCmd);
+
+	//	Command Remote
+	RemoteClass	*pRemoteCmd =
+		new RemoteClass("Remote",
+			Tango::DEV_VOID, Tango::DEV_VOID,
+			"no argin",
+			"no argout",
+			Tango::EXPERT);
+	command_list.push_back(pRemoteCmd);
+
+	//	Command Reset
+	ResetClass	*pResetCmd =
+		new ResetClass("Reset",
+			Tango::DEV_VOID, Tango::DEV_VOID,
+			"no argin",
+			"no argout",
+			Tango::OPERATOR);
+	command_list.push_back(pResetCmd);
+
+	//	Command ClearRegisters
+	ClearRegistersClass	*pClearRegistersCmd =
+		new ClearRegistersClass("ClearRegisters",
+			Tango::DEV_VOID, Tango::DEV_VOID,
+			"no argin",
+			"no argout",
+			Tango::OPERATOR);
+	command_list.push_back(pClearRegistersCmd);
+
+	//	Command GetRange
+	GetRangeClass	*pGetRangeCmd =
+		new GetRangeClass("GetRange",
+			Tango::DEV_VOID, Tango::DEV_STRING,
+			"no argin",
+			"The actual electrometer range",
+			Tango::OPERATOR);
+	command_list.push_back(pGetRangeCmd);
+
+	//	Command SetRange
+	SetRangeClass	*pSetRangeCmd =
+		new SetRangeClass("SetRange",
+			Tango::DEV_STRING, Tango::DEV_VOID,
+			"The range to apply on the electrometer",
+			"no argout",
+			Tango::OPERATOR);
+	command_list.push_back(pSetRangeCmd);
+
+	//	Command GetMode
+	GetModeClass	*pGetModeCmd =
+		new GetModeClass("GetMode",
+			Tango::DEV_VOID, Tango::DEV_STRING,
+			"no argin",
+			"The electrometer mode (MEASURE, LEAKAGE ...)",
+			Tango::EXPERT);
+	command_list.push_back(pGetModeCmd);
+
+	//	Command GetPolarity
+	GetPolarityClass	*pGetPolarityCmd =
+		new GetPolarityClass("GetPolarity",
+			Tango::DEV_VOID, Tango::DEV_STRING,
+			"no argin",
+			"The electrometer polarity",
+			Tango::EXPERT);
+	command_list.push_back(pGetPolarityCmd);
+
+	//	Command SetPolarity
+	SetPolarityClass	*pSetPolarityCmd =
+		new SetPolarityClass("SetPolarity",
+			Tango::DEV_STRING, Tango::DEV_VOID,
+			"POSITIVE or NEGATIVE",
+			"no argout",
+			Tango::OPERATOR);
+	command_list.push_back(pSetPolarityCmd);
+
+	//	Command GetHzFilter
+	GetHzFilterClass	*pGetHzFilterCmd =
+		new GetHzFilterClass("GetHzFilter",
+			Tango::DEV_VOID, Tango::DEV_SHORT,
+			"no argin",
+			"The MCCE2 cut-off frequency in Hz",
+			Tango::EXPERT);
+	command_list.push_back(pGetHzFilterCmd);
+
+	//	Command SetHzFilter
+	SetHzFilterClass	*pSetHzFilterCmd =
+		new SetHzFilterClass("SetHzFilter",
+			Tango::DEV_SHORT, Tango::DEV_VOID,
+			"The MCCE2 cut-off frequency in Hz",
+			"no argout",
+			Tango::EXPERT);
+	command_list.push_back(pSetHzFilterCmd);
+
+	//	Command GetGain
+	GetGainClass	*pGetGainCmd =
+		new GetGainClass("GetGain",
+			Tango::DEV_VOID, Tango::DEV_SHORT,
+			"no argin",
+			"The MCCE2 gain",
+			Tango::EXPERT);
+	command_list.push_back(pGetGainCmd);
+
+	//	Command SetGain
+	SetGainClass	*pSetGainCmd =
+		new SetGainClass("SetGain",
+			Tango::DEV_USHORT, Tango::DEV_VOID,
+			"The new MCCE-2 gain",
+			"no argout",
+			Tango::EXPERT);
+	command_list.push_back(pSetGainCmd);
+
+	//	Command GetElectrometerTypeStr
+	GetElectrometerTypeStrClass	*pGetElectrometerTypeStrCmd =
+		new GetElectrometerTypeStrClass("GetElectrometerTypeStr",
+			Tango::DEV_USHORT, Tango::DEV_STRING,
+			"channel number",
+			"the electrometer type as string",
+			Tango::OPERATOR);
+	command_list.push_back(pGetElectrometerTypeStrCmd);
+
+	/*----- PROTECTED REGION ID(MCCE2ElectrometersClass::command_factory_after) ENABLED START -----*/
+	
+	//	Add your own code
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2ElectrometersClass::command_factory_after
+}
+
+//===================================================================
+//	Dynamic attributes related methods
+//===================================================================
+
+//--------------------------------------------------------
+/**
+ * method : 		MCCE2ElectrometersClass::create_static_attribute_list
+ * description : 	Create the a list of static attributes
+ *
+ * @param	att_list	the ceated attribute list 
+ */
+//--------------------------------------------------------
+void MCCE2ElectrometersClass::create_static_attribute_list(vector<Tango::Attr *> &att_list)
+{
+	for (unsigned long i=0 ; i<att_list.size() ; i++)
+	{
+		string att_name(att_list[i]->get_name());
+		transform(att_name.begin(), att_name.end(), att_name.begin(), ::tolower);
+		defaultAttList.push_back(att_name);
+	}
+
+	cout2 << defaultAttList.size() << " attributes in default list" << endl;
+
+	/*----- PROTECTED REGION ID(MCCE2ElectrometersClass::create_static_att_list) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2ElectrometersClass::create_static_att_list
+}
+
+
+//--------------------------------------------------------
+/**
+ * method : 		MCCE2ElectrometersClass::erase_dynamic_attributes
+ * description : 	delete the dynamic attributes if any.
+ *
+ * @param	devlist_ptr	the device list pointer
+ * @param	list of all attributes
+ */
+//--------------------------------------------------------
+void MCCE2ElectrometersClass::erase_dynamic_attributes(const Tango::DevVarStringArray *devlist_ptr, vector<Tango::Attr *> &att_list)
+{
+	Tango::Util *tg = Tango::Util::instance();
+
+	for (unsigned long i=0 ; i<devlist_ptr->length() ; i++)
+	{	
+		Tango::DeviceImpl *dev_impl = tg->get_device_by_name(((string)(*devlist_ptr)[i]).c_str());
+		MCCE2Electrometers *dev = static_cast<MCCE2Electrometers *> (dev_impl);
+		
+		vector<Tango::Attribute *> &dev_att_list = dev->get_device_attr()->get_attribute_list();
+		vector<Tango::Attribute *>::iterator ite_att;
+		for (ite_att=dev_att_list.begin() ; ite_att != dev_att_list.end() ; ++ite_att)
+		{
+			string att_name((*ite_att)->get_name_lower());
+			if ((att_name == "state") || (att_name == "status"))
+				continue;
+			vector<string>::iterator ite_str = find(defaultAttList.begin(), defaultAttList.end(), att_name);
+			if (ite_str == defaultAttList.end())
+			{
+				cout2 << att_name << " is a UNWANTED dynamic attribute for device " << (*devlist_ptr)[i] << endl;
+				Tango::Attribute &att = dev->get_device_attr()->get_attr_by_name(att_name.c_str());
+				dev->remove_attribute(att_list[att.get_attr_idx()], true, false);
+				--ite_att;
+			}
+		}
+	}
+	/*----- PROTECTED REGION ID(MCCE2ElectrometersClass::erase_dynamic_attributes) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2ElectrometersClass::erase_dynamic_attributes
+}
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2ElectrometersClass::get_attr_by_name()
+ *	Description : returns Tango::Attr * object found by name
+ */
+//--------------------------------------------------------
+Tango::Attr *MCCE2ElectrometersClass::get_attr_object_by_name(vector<Tango::Attr *> &att_list, string attname)
+{
+	vector<Tango::Attr *>::iterator it;
+	for (it=att_list.begin() ; it<att_list.end() ; it++)
+		if ((*it)->get_name()==attname)
+			return (*it);
+	//	Attr does not exist
+	return NULL;
+}
+
+
+/*----- PROTECTED REGION ID(MCCE2ElectrometersClass::Additional Methods) ENABLED START -----*/
+
+/*----- PROTECTED REGION END -----*/	//	MCCE2ElectrometersClass::Additional Methods
+} //	namespace
diff --git a/src/MCCE2ElectrometersClass.h b/src/MCCE2ElectrometersClass.h
index f4e2d17..d772a8c 100644
--- a/src/MCCE2ElectrometersClass.h
+++ b/src/MCCE2ElectrometersClass.h
@@ -1,93 +1,113 @@
+/*----- PROTECTED REGION ID(MCCE2ElectrometersClass.h) ENABLED START -----*/
 //=============================================================================
 //
-// file :         MCCE2ElectrometersClass.h
+// file :        MCCE2ElectrometersClass.h
 //
-// description :  Include for the MCCE2ElectrometersClass root class.
-//                This class is represents the singleton class for
+// description : Include for the MCCE2Electrometers root class.
+//               This class is the singleton class for
 //                the MCCE2Electrometers device class.
-//                It contains all properties and methods which the 
-//                MCCE2Electrometers requires only once e.g. the commands.
-//			
-// project :      TANGO Device Server
+//               It contains all properties and methods which the 
+//               MCCE2Electrometers requires only once e.g. the commands.
 //
-// $Author: xavela $
+// project :     Novelec MCCE-2 Electrometers
 //
-// $Revision: 1.14 $
+// This file is part of Tango device class.
+// 
+// Tango is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+// 
+// Tango is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+// 
+// You should have received a copy of the GNU General Public License
+// along with Tango.  If not, see <http://www.gnu.org/licenses/>.
+// 
+// $Author:  $
 //
-// $Log: not supported by cvs2svn $
-// Revision 1.12  2010/06/10 15:12:05  xavela
-// TEST : control two channels with different MCCE2
+// $Revision:  $
+// $Date:  $
 //
-//
-// copyleft :  Synchrotron SOLEIL
-//             L'Orme des Merisiers
-//             Saint-Aubin - BP 48
+// $HeadURL:  $
 //
 //=============================================================================
-//
-//  		This file is generated by POGO
-//	(Program Obviously used to Generate tango Object)
-//
-//         (c) - Software Engineering Group - ESRF
+//                This file is generated by POGO
+//        (Program Obviously used to Generate tango Object)
 //=============================================================================
 
-#ifndef _MCCE2ELECTROMETERSCLASS_H
-#define _MCCE2ELECTROMETERSCLASS_H
+
+#ifndef MCCE2ElectrometersClass_H
+#define MCCE2ElectrometersClass_H
 
 #include <tango.h>
 #include <MCCE2Electrometers.h>
 
+/*----- PROTECTED REGION END -----*/	//	MCCE2ElectrometersClass.h
+
 
 namespace MCCE2Electrometers_ns
 {
-//=====================================
+/*----- PROTECTED REGION ID(MCCE2ElectrometersClass::classes for dynamic creation) ENABLED START -----*/
+
+
+/*----- PROTECTED REGION END -----*/	//	MCCE2ElectrometersClass::classes for dynamic creation
+
+//=========================================
 //	Define classes for attributes
-//=====================================
-class range2Attrib: public Tango::Attr
+//=========================================
+//	Attribute electrometerChannel class definition
+class electrometerChannelAttrib: public Tango::Attr
 {
 public:
-	range2Attrib():Attr("range2", Tango::DEV_STRING, Tango::READ) {};
-	~range2Attrib() {};
-	
+	electrometerChannelAttrib():Attr("electrometerChannel",
+			Tango::DEV_USHORT, Tango::READ_WRITE) {};
+	~electrometerChannelAttrib() {};
 	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
-	{(static_cast<MCCE2Electrometers *>(dev))->read_range2(att);}
+		{(static_cast<MCCE2Electrometers *>(dev))->read_electrometerChannel(att);}
+	virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att)
+		{(static_cast<MCCE2Electrometers *>(dev))->write_electrometerChannel(att);}
 	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
-	{return (static_cast<MCCE2Electrometers *>(dev))->is_range2_allowed(ty);}
+		{return (static_cast<MCCE2Electrometers *>(dev))->is_electrometerChannel_allowed(ty);}
 };
 
+//	Attribute range1 class definition
 class range1Attrib: public Tango::Attr
 {
 public:
-	range1Attrib():Attr("range1", Tango::DEV_STRING, Tango::READ) {};
+	range1Attrib():Attr("range1",
+			Tango::DEV_STRING, Tango::READ) {};
 	~range1Attrib() {};
-	
 	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
-	{(static_cast<MCCE2Electrometers *>(dev))->read_range1(att);}
+		{(static_cast<MCCE2Electrometers *>(dev))->read_range1(att);}
 	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
-	{return (static_cast<MCCE2Electrometers *>(dev))->is_range1_allowed(ty);}
+		{return (static_cast<MCCE2Electrometers *>(dev))->is_range1_allowed(ty);}
 };
 
-class electrometerChannelAttrib: public Tango::Attr
+//	Attribute range2 class definition
+class range2Attrib: public Tango::Attr
 {
 public:
-	electrometerChannelAttrib():Attr("electrometerChannel", Tango::DEV_USHORT, Tango::READ_WRITE) {};
-	~electrometerChannelAttrib() {};
-	
+	range2Attrib():Attr("range2",
+			Tango::DEV_STRING, Tango::READ) {};
+	~range2Attrib() {};
 	virtual void read(Tango::DeviceImpl *dev,Tango::Attribute &att)
-	{(static_cast<MCCE2Electrometers *>(dev))->read_electrometerChannel(att);}
-	virtual void write(Tango::DeviceImpl *dev,Tango::WAttribute &att)
-	{(static_cast<MCCE2Electrometers *>(dev))->write_electrometerChannel(att);}
+		{(static_cast<MCCE2Electrometers *>(dev))->read_range2(att);}
 	virtual bool is_allowed(Tango::DeviceImpl *dev,Tango::AttReqType ty)
-	{return (static_cast<MCCE2Electrometers *>(dev))->is_electrometerChannel_allowed(ty);}
+		{return (static_cast<MCCE2Electrometers *>(dev))->is_range2_allowed(ty);}
 };
 
+
 //=========================================
 //	Define classes for commands
 //=========================================
-class GetElectrometerTypeStrClass : public Tango::Command
+//	Command RangeUP class definition
+class RangeUPClass : public Tango::Command
 {
 public:
-	GetElectrometerTypeStrClass(const char   *name,
+	RangeUPClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -95,23 +115,22 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	GetElectrometerTypeStrClass(const char   *name,
+	RangeUPClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~GetElectrometerTypeStrClass() {};
+	~RangeUPClass() {};
 	
 	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<MCCE2Electrometers *>(dev))->is_GetElectrometerTypeStr_allowed(any);}
+	{return (static_cast<MCCE2Electrometers *>(dev))->is_RangeUP_allowed(any);}
 };
 
-
-
-class SetGainCmd : public Tango::Command
+//	Command RangeDOWN class definition
+class RangeDOWNClass : public Tango::Command
 {
 public:
-	SetGainCmd(const char   *name,
+	RangeDOWNClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -119,23 +138,22 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	SetGainCmd(const char   *name,
+	RangeDOWNClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~SetGainCmd() {};
+	~RangeDOWNClass() {};
 	
 	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<MCCE2Electrometers *>(dev))->is_SetGain_allowed(any);}
+	{return (static_cast<MCCE2Electrometers *>(dev))->is_RangeDOWN_allowed(any);}
 };
 
-
-
-class GetGainCmd : public Tango::Command
+//	Command SetZeroVFFunction class definition
+class SetZeroVFFunctionClass : public Tango::Command
 {
 public:
-	GetGainCmd(const char   *name,
+	SetZeroVFFunctionClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -143,23 +161,22 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	GetGainCmd(const char   *name,
+	SetZeroVFFunctionClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~GetGainCmd() {};
+	~SetZeroVFFunctionClass() {};
 	
 	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<MCCE2Electrometers *>(dev))->is_GetGain_allowed(any);}
+	{return (static_cast<MCCE2Electrometers *>(dev))->is_SetZeroVFFunction_allowed(any);}
 };
 
-
-
-class SetHzFilterCmd : public Tango::Command
+//	Command SetOffsetZeroV1Function class definition
+class SetOffsetZeroV1FunctionClass : public Tango::Command
 {
 public:
-	SetHzFilterCmd(const char   *name,
+	SetOffsetZeroV1FunctionClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -167,23 +184,22 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	SetHzFilterCmd(const char   *name,
+	SetOffsetZeroV1FunctionClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~SetHzFilterCmd() {};
+	~SetOffsetZeroV1FunctionClass() {};
 	
 	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<MCCE2Electrometers *>(dev))->is_SetHzFilter_allowed(any);}
+	{return (static_cast<MCCE2Electrometers *>(dev))->is_SetOffsetZeroV1Function_allowed(any);}
 };
 
-
-
-class GetHzFilterCmd : public Tango::Command
+//	Command SetLeakageZeroV2Function class definition
+class SetLeakageZeroV2FunctionClass : public Tango::Command
 {
 public:
-	GetHzFilterCmd(const char   *name,
+	SetLeakageZeroV2FunctionClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -191,23 +207,22 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	GetHzFilterCmd(const char   *name,
+	SetLeakageZeroV2FunctionClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~GetHzFilterCmd() {};
+	~SetLeakageZeroV2FunctionClass() {};
 	
 	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<MCCE2Electrometers *>(dev))->is_GetHzFilter_allowed(any);}
+	{return (static_cast<MCCE2Electrometers *>(dev))->is_SetLeakageZeroV2Function_allowed(any);}
 };
 
-
-
-class SetPolarityClass : public Tango::Command
+//	Command SetTestFunction class definition
+class SetTestFunctionClass : public Tango::Command
 {
 public:
-	SetPolarityClass(const char   *name,
+	SetTestFunctionClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -215,23 +230,22 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	SetPolarityClass(const char   *name,
+	SetTestFunctionClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~SetPolarityClass() {};
+	~SetTestFunctionClass() {};
 	
 	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<MCCE2Electrometers *>(dev))->is_SetPolarity_allowed(any);}
+	{return (static_cast<MCCE2Electrometers *>(dev))->is_SetTestFunction_allowed(any);}
 };
 
-
-
-class GetPolarityCmd : public Tango::Command
+//	Command SetMeasureFunction class definition
+class SetMeasureFunctionClass : public Tango::Command
 {
 public:
-	GetPolarityCmd(const char   *name,
+	SetMeasureFunctionClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -239,23 +253,22 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	GetPolarityCmd(const char   *name,
+	SetMeasureFunctionClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~GetPolarityCmd() {};
+	~SetMeasureFunctionClass() {};
 	
 	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<MCCE2Electrometers *>(dev))->is_GetPolarity_allowed(any);}
+	{return (static_cast<MCCE2Electrometers *>(dev))->is_SetMeasureFunction_allowed(any);}
 };
 
-
-
-class GetModeCmd : public Tango::Command
+//	Command MCCE2_ON class definition
+class MCCE2_ONClass : public Tango::Command
 {
 public:
-	GetModeCmd(const char   *name,
+	MCCE2_ONClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -263,23 +276,22 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	GetModeCmd(const char   *name,
+	MCCE2_ONClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~GetModeCmd() {};
+	~MCCE2_ONClass() {};
 	
 	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<MCCE2Electrometers *>(dev))->is_GetMode_allowed(any);}
+	{return (static_cast<MCCE2Electrometers *>(dev))->is_MCCE2_ON_allowed(any);}
 };
 
-
-
-class SetRangeCmd : public Tango::Command
+//	Command MCCE2_OFF class definition
+class MCCE2_OFFClass : public Tango::Command
 {
 public:
-	SetRangeCmd(const char   *name,
+	MCCE2_OFFClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -287,23 +299,22 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	SetRangeCmd(const char   *name,
+	MCCE2_OFFClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~SetRangeCmd() {};
+	~MCCE2_OFFClass() {};
 	
 	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<MCCE2Electrometers *>(dev))->is_SetRange_allowed(any);}
+	{return (static_cast<MCCE2Electrometers *>(dev))->is_MCCE2_OFF_allowed(any);}
 };
 
-
-
-class GetRangeCmd : public Tango::Command
+//	Command Local class definition
+class LocalClass : public Tango::Command
 {
 public:
-	GetRangeCmd(const char   *name,
+	LocalClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -311,23 +322,22 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	GetRangeCmd(const char   *name,
+	LocalClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~GetRangeCmd() {};
+	~LocalClass() {};
 	
 	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<MCCE2Electrometers *>(dev))->is_GetRange_allowed(any);}
+	{return (static_cast<MCCE2Electrometers *>(dev))->is_Local_allowed(any);}
 };
 
-
-
-class ClearRegistersClass : public Tango::Command
+//	Command Remote class definition
+class RemoteClass : public Tango::Command
 {
 public:
-	ClearRegistersClass(const char   *name,
+	RemoteClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -335,19 +345,18 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	ClearRegistersClass(const char   *name,
+	RemoteClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~ClearRegistersClass() {};
+	~RemoteClass() {};
 	
 	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<MCCE2Electrometers *>(dev))->is_ClearRegisters_allowed(any);}
+	{return (static_cast<MCCE2Electrometers *>(dev))->is_Remote_allowed(any);}
 };
 
-
-
+//	Command Reset class definition
 class ResetClass : public Tango::Command
 {
 public:
@@ -370,12 +379,11 @@ public:
 	{return (static_cast<MCCE2Electrometers *>(dev))->is_Reset_allowed(any);}
 };
 
-
-
-class RemoteCmd : public Tango::Command
+//	Command ClearRegisters class definition
+class ClearRegistersClass : public Tango::Command
 {
 public:
-	RemoteCmd(const char   *name,
+	ClearRegistersClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -383,23 +391,22 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	RemoteCmd(const char   *name,
+	ClearRegistersClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~RemoteCmd() {};
+	~ClearRegistersClass() {};
 	
 	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<MCCE2Electrometers *>(dev))->is_Remote_allowed(any);}
+	{return (static_cast<MCCE2Electrometers *>(dev))->is_ClearRegisters_allowed(any);}
 };
 
-
-
-class LocalCmd : public Tango::Command
+//	Command GetRange class definition
+class GetRangeClass : public Tango::Command
 {
 public:
-	LocalCmd(const char   *name,
+	GetRangeClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -407,23 +414,22 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	LocalCmd(const char   *name,
+	GetRangeClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~LocalCmd() {};
+	~GetRangeClass() {};
 	
 	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<MCCE2Electrometers *>(dev))->is_Local_allowed(any);}
+	{return (static_cast<MCCE2Electrometers *>(dev))->is_GetRange_allowed(any);}
 };
 
-
-
-class MCCE2_OFFCmd : public Tango::Command
+//	Command SetRange class definition
+class SetRangeClass : public Tango::Command
 {
 public:
-	MCCE2_OFFCmd(const char   *name,
+	SetRangeClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -431,23 +437,22 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	MCCE2_OFFCmd(const char   *name,
+	SetRangeClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~MCCE2_OFFCmd() {};
+	~SetRangeClass() {};
 	
 	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<MCCE2Electrometers *>(dev))->is_MCCE2_OFF_allowed(any);}
+	{return (static_cast<MCCE2Electrometers *>(dev))->is_SetRange_allowed(any);}
 };
 
-
-
-class MCCE2_ONCmd : public Tango::Command
+//	Command GetMode class definition
+class GetModeClass : public Tango::Command
 {
 public:
-	MCCE2_ONCmd(const char   *name,
+	GetModeClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -455,23 +460,22 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	MCCE2_ONCmd(const char   *name,
+	GetModeClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~MCCE2_ONCmd() {};
+	~GetModeClass() {};
 	
 	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<MCCE2Electrometers *>(dev))->is_MCCE2_ON_allowed(any);}
+	{return (static_cast<MCCE2Electrometers *>(dev))->is_GetMode_allowed(any);}
 };
 
-
-
-class SetMeasureFunctionCmd : public Tango::Command
+//	Command GetPolarity class definition
+class GetPolarityClass : public Tango::Command
 {
 public:
-	SetMeasureFunctionCmd(const char   *name,
+	GetPolarityClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -479,23 +483,22 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	SetMeasureFunctionCmd(const char   *name,
+	GetPolarityClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~SetMeasureFunctionCmd() {};
+	~GetPolarityClass() {};
 	
 	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<MCCE2Electrometers *>(dev))->is_SetMeasureFunction_allowed(any);}
+	{return (static_cast<MCCE2Electrometers *>(dev))->is_GetPolarity_allowed(any);}
 };
 
-
-
-class SetTestFunctionCmd : public Tango::Command
+//	Command SetPolarity class definition
+class SetPolarityClass : public Tango::Command
 {
 public:
-	SetTestFunctionCmd(const char   *name,
+	SetPolarityClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -503,23 +506,22 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	SetTestFunctionCmd(const char   *name,
+	SetPolarityClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~SetTestFunctionCmd() {};
+	~SetPolarityClass() {};
 	
 	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<MCCE2Electrometers *>(dev))->is_SetTestFunction_allowed(any);}
+	{return (static_cast<MCCE2Electrometers *>(dev))->is_SetPolarity_allowed(any);}
 };
 
-
-
-class SetLeakageZeroV2FunctionCmd : public Tango::Command
+//	Command GetHzFilter class definition
+class GetHzFilterClass : public Tango::Command
 {
 public:
-	SetLeakageZeroV2FunctionCmd(const char   *name,
+	GetHzFilterClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -527,23 +529,22 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	SetLeakageZeroV2FunctionCmd(const char   *name,
+	GetHzFilterClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~SetLeakageZeroV2FunctionCmd() {};
+	~GetHzFilterClass() {};
 	
 	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<MCCE2Electrometers *>(dev))->is_SetLeakageZeroV2Function_allowed(any);}
+	{return (static_cast<MCCE2Electrometers *>(dev))->is_GetHzFilter_allowed(any);}
 };
 
-
-
-class SetOffsetZeroV1FunctionCmd : public Tango::Command
+//	Command SetHzFilter class definition
+class SetHzFilterClass : public Tango::Command
 {
 public:
-	SetOffsetZeroV1FunctionCmd(const char   *name,
+	SetHzFilterClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -551,23 +552,22 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	SetOffsetZeroV1FunctionCmd(const char   *name,
+	SetHzFilterClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~SetOffsetZeroV1FunctionCmd() {};
+	~SetHzFilterClass() {};
 	
 	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<MCCE2Electrometers *>(dev))->is_SetOffsetZeroV1Function_allowed(any);}
+	{return (static_cast<MCCE2Electrometers *>(dev))->is_SetHzFilter_allowed(any);}
 };
 
-
-
-class SetZeroVFFunctionCmd : public Tango::Command
+//	Command GetGain class definition
+class GetGainClass : public Tango::Command
 {
 public:
-	SetZeroVFFunctionCmd(const char   *name,
+	GetGainClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -575,23 +575,22 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	SetZeroVFFunctionCmd(const char   *name,
+	GetGainClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~SetZeroVFFunctionCmd() {};
+	~GetGainClass() {};
 	
 	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<MCCE2Electrometers *>(dev))->is_SetZeroVFFunction_allowed(any);}
+	{return (static_cast<MCCE2Electrometers *>(dev))->is_GetGain_allowed(any);}
 };
 
-
-
-class RangeDOWNClass : public Tango::Command
+//	Command SetGain class definition
+class SetGainClass : public Tango::Command
 {
 public:
-	RangeDOWNClass(const char   *name,
+	SetGainClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -599,23 +598,22 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	RangeDOWNClass(const char   *name,
+	SetGainClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~RangeDOWNClass() {};
+	~SetGainClass() {};
 	
 	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<MCCE2Electrometers *>(dev))->is_RangeDOWN_allowed(any);}
+	{return (static_cast<MCCE2Electrometers *>(dev))->is_SetGain_allowed(any);}
 };
 
-
-
-class RangeUPCmd : public Tango::Command
+//	Command GetElectrometerTypeStr class definition
+class GetElectrometerTypeStrClass : public Tango::Command
 {
 public:
-	RangeUPCmd(const char   *name,
+	GetElectrometerTypeStrClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out,
 				   const char        *in_desc,
@@ -623,64 +621,66 @@ public:
 				   Tango::DispLevel  level)
 	:Command(name,in,out,in_desc,out_desc, level)	{};
 
-	RangeUPCmd(const char   *name,
+	GetElectrometerTypeStrClass(const char   *name,
 	               Tango::CmdArgType in,
 				   Tango::CmdArgType out)
 	:Command(name,in,out)	{};
-	~RangeUPCmd() {};
+	~GetElectrometerTypeStrClass() {};
 	
 	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<MCCE2Electrometers *>(dev))->is_RangeUP_allowed(any);}
+	{return (static_cast<MCCE2Electrometers *>(dev))->is_GetElectrometerTypeStr_allowed(any);}
 };
 
 
+/**
+ *	The MCCE2ElectrometersClass singleton definition
+ */
 
-//
-// The MCCE2ElectrometersClass singleton definition
-//
-
-class
-#ifdef WIN32
-	__declspec(dllexport)
+#ifdef _TG_WINDOWS_
+class __declspec(dllexport)  MCCE2ElectrometersClass : public Tango::DeviceClass
+#else
+class MCCE2ElectrometersClass : public Tango::DeviceClass
 #endif
-	MCCE2ElectrometersClass : public Tango::DeviceClass
 {
-public:
-//	properties member data
-
-//	add your own data members here
-//------------------------------------
+	/*----- PROTECTED REGION ID(MCCE2ElectrometersClass::Additionnal DServer data members) ENABLED START -----*/
+	
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2ElectrometersClass::Additionnal DServer data members
 
-public:
-	Tango::DbData	cl_prop;
-	Tango::DbData	cl_def_prop;
-	Tango::DbData	dev_def_prop;
-
-//	Method prototypes
-	static MCCE2ElectrometersClass *init(const char *);
-	static MCCE2ElectrometersClass *instance();
-	~MCCE2ElectrometersClass();
-	Tango::DbDatum	get_class_property(string &);
-	Tango::DbDatum	get_default_device_property(string &);
-	Tango::DbDatum	get_default_class_property(string &);
+	public:
+		//	write class properties data members
+		Tango::DbData	cl_prop;
+		Tango::DbData	cl_def_prop;
+		Tango::DbData	dev_def_prop;
+	
+		//	Method prototypes
+		static MCCE2ElectrometersClass *init(const char *);
+		static MCCE2ElectrometersClass *instance();
+		~MCCE2ElectrometersClass();
+		Tango::DbDatum	get_class_property(string &);
+		Tango::DbDatum	get_default_device_property(string &);
+		Tango::DbDatum	get_default_class_property(string &);
 	
-protected:
-	MCCE2ElectrometersClass(string &);
-	static MCCE2ElectrometersClass *_instance;
-	void command_factory();
-	void get_class_property();
-	void attribute_factory(vector<Tango::Attr *> &);
-	void write_class_property();
-	void set_default_property();
-	string get_cvstag();
-	string get_cvsroot();
-
-private:
-	void device_factory(const Tango::DevVarStringArray *);
+	protected:
+		MCCE2ElectrometersClass(string &);
+		static MCCE2ElectrometersClass *_instance;
+		void command_factory();
+		void attribute_factory(vector<Tango::Attr *> &);
+		void write_class_property();
+		void set_default_property();
+		void get_class_property();
+		string get_cvstag();
+		string get_cvsroot();
+	
+	private:
+		void device_factory(const Tango::DevVarStringArray *);
+		void create_static_attribute_list(vector<Tango::Attr *> &);
+		void erase_dynamic_attributes(const Tango::DevVarStringArray *,vector<Tango::Attr *> &);
+		vector<string>	defaultAttList;
+		Tango::Attr *get_attr_object_by_name(vector<Tango::Attr *> &att_list, string attname);
 };
 
+}	//	End of namespace
 
-}	//	namespace MCCE2Electrometers_ns
-
-#endif // _MCCE2ELECTROMETERSCLASS_H
+#endif   //	MCCE2Electrometers_H
diff --git a/src/MCCE2ElectrometersStateMachine.cpp b/src/MCCE2ElectrometersStateMachine.cpp
index 433d677..a42089c 100644
--- a/src/MCCE2ElectrometersStateMachine.cpp
+++ b/src/MCCE2ElectrometersStateMachine.cpp
@@ -1,96 +1,108 @@
-static const char *RcsId = "$Header: /users/chaize/newsvn/cvsroot/Instrumentation/NovelecElectro/src/MCCE2ElectrometersStateMachine.cpp,v 1.14 2012-10-03 14:59:19 xavela Exp $";
-//+=============================================================================
-//
-// file :         MCCE2ElectrometersStateMachine.cpp
-//
-// description :  C++ source for the MCCE2Electrometers and its alowed. 
-//                method for commands and attributes
-//
-// project :      TANGO Device Server
-//
-// $Author: xavela $
+/*----- PROTECTED REGION ID(MCCE2ElectrometersStateMachine.cpp) ENABLED START -----*/
+static const char *RcsId = "$Id:  $";
+//=============================================================================
 //
-// $Revision: 1.14 $
+// file :        MCCE2ElectrometersStateMachine.cpp
 //
-// $Log: not supported by cvs2svn $
-// Revision 1.12  2010/06/10 15:12:05  xavela
-// TEST : control two channels with different MCCE2
+// description : State machine file for the MCCE2Electrometers class
 //
+// project :     Novelec MCCE-2 Electrometers
 //
-// copyleft :     European Synchrotron Radiation Facility
-//                BP 220, Grenoble 38043
-//                FRANCE
+// This file is part of Tango device class.
+// 
+// Tango is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+// 
+// Tango is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+// 
+// You should have received a copy of the GNU General Public License
+// along with Tango.  If not, see <http://www.gnu.org/licenses/>.
+// 
+// $Author:  $
 //
-//-=============================================================================
+// $Revision:  $
+// $Date:  $
 //
-//  		This file is generated by POGO
-//	(Program Obviously used to Generate tango Object)
+// $HeadURL:  $
 //
-//         (c) - Software Engineering Group - ESRF
+//=============================================================================
+//                This file is generated by POGO
+//        (Program Obviously used to Generate tango Object)
 //=============================================================================
 
-#include <tango.h>
 #include <MCCE2Electrometers.h>
-#include <MCCE2ElectrometersClass.h>
-
-/*====================================================================
- *	This file contains the methods to allow commands and attributes
- * read or write execution.
- *
- * If you wand to add your own code, add it between 
- * the "End/Re-Start of Generated Code" comments.
- *
- * If you want, you can also add your own methods.
- *====================================================================
- */
+
+/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::MCCE2ElectrometersStateMachine.cpp
+
+//================================================================
+//  States   |  Description
+//================================================================
+//  ON       |  Device up and ready
+//  ALARM    |  Device initialisation not complete or a bad channel number is set.
+//  FAULT    |  Internal electrometer interface is not built or a Serial communication error occurred.
+//  DISABLE  |  No electrometer conected!
+
 
 namespace MCCE2Electrometers_ns
 {
-
 //=================================================
 //		Attributes Allowed Methods
 //=================================================
 
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_electrometerChannel_allowed
-// 
-// description : 	Read/Write allowed for electrometerChannel attribute.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_electrometerChannel_allowed(Tango::AttReqType type)
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_electrometerChannel_allowed()
+ *	Description : Execution allowed for electrometerChannel attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_electrometerChannel_allowed(TANGO_UNUSED(Tango::AttReqType type))
 {
-		//	End of Generated Code
-
-		//	Re-Start of Generated Code
+	//	Not any excluded states for electrometerChannel attribute in Write access.
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::electrometerChannelStateAllowed_WRITE) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::electrometerChannelStateAllowed_WRITE
+
+	//	Not any excluded states for electrometerChannel attribute in read access.
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::electrometerChannelStateAllowed_READ) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::electrometerChannelStateAllowed_READ
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_range1_allowed
-// 
-// description : 	Read/Write allowed for range1 attribute.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_range1_allowed(Tango::AttReqType type)
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_range1_allowed()
+ *	Description : Execution allowed for range1 attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_range1_allowed(TANGO_UNUSED(Tango::AttReqType type))
 {
-		//	End of Generated Code
 
-		//	Re-Start of Generated Code
+	//	Not any excluded states for range1 attribute in read access.
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::range1StateAllowed_READ) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::range1StateAllowed_READ
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_range2_allowed
-// 
-// description : 	Read/Write allowed for range2 attribute.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_range2_allowed(Tango::AttReqType type)
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_range2_allowed()
+ *	Description : Execution allowed for range2 attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_range2_allowed(TANGO_UNUSED(Tango::AttReqType type))
 {
-		//	End of Generated Code
 
-		//	Re-Start of Generated Code
+	//	Not any excluded states for range2 attribute in read access.
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::range2StateAllowed_READ) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::range2StateAllowed_READ
 	return true;
 }
 
@@ -98,433 +110,455 @@ bool MCCE2Electrometers::is_range2_allowed(Tango::AttReqType type)
 //		Commands Allowed Methods
 //=================================================
 
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_RangeUP_allowed
-// 
-// description : 	Execution allowed for RangeUP command.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_RangeUP_allowed(const CORBA::Any &any)
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_RangeUP_allowed()
+ *	Description : Execution allowed for RangeUP attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_RangeUP_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
-	if (get_state() == Tango::FAULT	||
-		get_state() == Tango::DISABLE)
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::FAULT ||
+		get_state()==Tango::DISABLE)
 	{
-		//	End of Generated Code
-
-		//	Re-Start of Generated Code
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::RangeUPStateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::RangeUPStateAllowed
 		return false;
 	}
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_RangeDOWN_allowed
-// 
-// description : 	Execution allowed for RangeDOWN command.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_RangeDOWN_allowed(const CORBA::Any &any)
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_RangeDOWN_allowed()
+ *	Description : Execution allowed for RangeDOWN attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_RangeDOWN_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
-	if (get_state() == Tango::FAULT	||
-		get_state() == Tango::DISABLE)
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::FAULT ||
+		get_state()==Tango::DISABLE)
 	{
-		//	End of Generated Code
-
-		//	Re-Start of Generated Code
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::RangeDOWNStateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::RangeDOWNStateAllowed
 		return false;
 	}
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_SetZeroVFFunction_allowed
-// 
-// description : 	Execution allowed for SetZeroVFFunction command.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_SetZeroVFFunction_allowed(const CORBA::Any &any)
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_SetZeroVFFunction_allowed()
+ *	Description : Execution allowed for SetZeroVFFunction attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_SetZeroVFFunction_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
-	if (get_state() == Tango::FAULT	||
-		get_state() == Tango::DISABLE)
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::FAULT ||
+		get_state()==Tango::DISABLE)
 	{
-		//	End of Generated Code
-
-		//	Re-Start of Generated Code
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::SetZeroVFFunctionStateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::SetZeroVFFunctionStateAllowed
 		return false;
 	}
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_SetOffsetZeroV1Function_allowed
-// 
-// description : 	Execution allowed for SetOffsetZeroV1Function command.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_SetOffsetZeroV1Function_allowed(const CORBA::Any &any)
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_SetOffsetZeroV1Function_allowed()
+ *	Description : Execution allowed for SetOffsetZeroV1Function attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_SetOffsetZeroV1Function_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
-	if (get_state() == Tango::FAULT	||
-		get_state() == Tango::DISABLE)
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::FAULT ||
+		get_state()==Tango::DISABLE)
 	{
-		//	End of Generated Code
-
-		//	Re-Start of Generated Code
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::SetOffsetZeroV1FunctionStateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::SetOffsetZeroV1FunctionStateAllowed
 		return false;
 	}
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_SetLeakageZeroV2Function_allowed
-// 
-// description : 	Execution allowed for SetLeakageZeroV2Function command.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_SetLeakageZeroV2Function_allowed(const CORBA::Any &any)
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_SetLeakageZeroV2Function_allowed()
+ *	Description : Execution allowed for SetLeakageZeroV2Function attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_SetLeakageZeroV2Function_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
-	if (get_state() == Tango::FAULT	||
-		get_state() == Tango::DISABLE)
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::FAULT ||
+		get_state()==Tango::DISABLE)
 	{
-		//	End of Generated Code
-
-		//	Re-Start of Generated Code
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::SetLeakageZeroV2FunctionStateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::SetLeakageZeroV2FunctionStateAllowed
 		return false;
 	}
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_SetTestFunction_allowed
-// 
-// description : 	Execution allowed for SetTestFunction command.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_SetTestFunction_allowed(const CORBA::Any &any)
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_SetTestFunction_allowed()
+ *	Description : Execution allowed for SetTestFunction attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_SetTestFunction_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
-	if (get_state() == Tango::FAULT	||
-		get_state() == Tango::DISABLE)
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::FAULT ||
+		get_state()==Tango::DISABLE)
 	{
-		//	End of Generated Code
-
-		//	Re-Start of Generated Code
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::SetTestFunctionStateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::SetTestFunctionStateAllowed
 		return false;
 	}
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_MCCE2_ON_allowed
-// 
-// description : 	Execution allowed for MCCE2_ON command.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_MCCE2_ON_allowed(const CORBA::Any &any)
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_SetMeasureFunction_allowed()
+ *	Description : Execution allowed for SetMeasureFunction attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_SetMeasureFunction_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
-	if (get_state() == Tango::FAULT	||
-		get_state() == Tango::DISABLE)
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::FAULT ||
+		get_state()==Tango::DISABLE)
 	{
-		//	End of Generated Code
-
-		//	Re-Start of Generated Code
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::SetMeasureFunctionStateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::SetMeasureFunctionStateAllowed
 		return false;
 	}
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_MCCE2_OFF_allowed
-// 
-// description : 	Execution allowed for MCCE2_OFF command.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_MCCE2_OFF_allowed(const CORBA::Any &any)
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_MCCE2_ON_allowed()
+ *	Description : Execution allowed for MCCE2_ON attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_MCCE2_ON_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
-	if (get_state() == Tango::FAULT	||
-		get_state() == Tango::DISABLE)
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::FAULT ||
+		get_state()==Tango::DISABLE)
 	{
-		//	End of Generated Code
-
-		//	Re-Start of Generated Code
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::MCCE2_ONStateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::MCCE2_ONStateAllowed
 		return false;
 	}
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_Local_allowed
-// 
-// description : 	Execution allowed for Local command.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_Local_allowed(const CORBA::Any &any)
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_MCCE2_OFF_allowed()
+ *	Description : Execution allowed for MCCE2_OFF attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_MCCE2_OFF_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
-	if (get_state() == Tango::DISABLE)
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::FAULT ||
+		get_state()==Tango::DISABLE)
 	{
-		//	End of Generated Code
-
-		//	Re-Start of Generated Code
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::MCCE2_OFFStateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::MCCE2_OFFStateAllowed
 		return false;
 	}
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_Remote_allowed
-// 
-// description : 	Execution allowed for Remote command.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_Remote_allowed(const CORBA::Any &any)
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_Local_allowed()
+ *	Description : Execution allowed for Local attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_Local_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
-	if (get_state() == Tango::DISABLE)
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::DISABLE)
 	{
-		//	End of Generated Code
-
-		//	Re-Start of Generated Code
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::LocalStateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::LocalStateAllowed
 		return false;
 	}
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_Reset_allowed
-// 
-// description : 	Execution allowed for Reset command.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_Reset_allowed(const CORBA::Any &any)
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_Remote_allowed()
+ *	Description : Execution allowed for Remote attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_Remote_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
-	if (get_state() == Tango::DISABLE)
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::DISABLE)
 	{
-		//	End of Generated Code
-
-		//	Re-Start of Generated Code
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::RemoteStateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::RemoteStateAllowed
 		return false;
 	}
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_ClearRegisters_allowed
-// 
-// description : 	Execution allowed for ClearRegisters command.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_ClearRegisters_allowed(const CORBA::Any &any)
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_Reset_allowed()
+ *	Description : Execution allowed for Reset attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_Reset_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
-	if (get_state() == Tango::DISABLE)
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::DISABLE)
 	{
-		//	End of Generated Code
-
-		//	Re-Start of Generated Code
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::ResetStateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::ResetStateAllowed
 		return false;
 	}
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_SetMeasureFunction_allowed
-// 
-// description : 	Execution allowed for SetMeasureFunction command.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_SetMeasureFunction_allowed(const CORBA::Any &any)
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_ClearRegisters_allowed()
+ *	Description : Execution allowed for ClearRegisters attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_ClearRegisters_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
-	if (get_state() == Tango::FAULT	||
-		get_state() == Tango::DISABLE)
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::DISABLE)
 	{
-		//	End of Generated Code
-
-		//	Re-Start of Generated Code
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::ClearRegistersStateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::ClearRegistersStateAllowed
 		return false;
 	}
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_GetRange_allowed
-// 
-// description : 	Execution allowed for GetRange command.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_GetRange_allowed(const CORBA::Any &any)
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_GetRange_allowed()
+ *	Description : Execution allowed for GetRange attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_GetRange_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
-	if (get_state() == Tango::FAULT	||
-		get_state() == Tango::DISABLE)
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::FAULT ||
+		get_state()==Tango::DISABLE)
 	{
-		//	End of Generated Code
-
-		//	Re-Start of Generated Code
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::GetRangeStateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::GetRangeStateAllowed
 		return false;
 	}
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_SetRange_allowed
-// 
-// description : 	Execution allowed for SetRange command.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_SetRange_allowed(const CORBA::Any &any)
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_SetRange_allowed()
+ *	Description : Execution allowed for SetRange attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_SetRange_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
-	if (get_state() == Tango::FAULT	||
-		get_state() == Tango::DISABLE)
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::FAULT ||
+		get_state()==Tango::DISABLE)
 	{
-		//	End of Generated Code
-
-		//	Re-Start of Generated Code
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::SetRangeStateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::SetRangeStateAllowed
 		return false;
 	}
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_GetMode_allowed
-// 
-// description : 	Execution allowed for GetMode command.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_GetMode_allowed(const CORBA::Any &any)
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_GetMode_allowed()
+ *	Description : Execution allowed for GetMode attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_GetMode_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
-	if (get_state() == Tango::FAULT	||
-		get_state() == Tango::DISABLE)
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::FAULT ||
+		get_state()==Tango::DISABLE)
 	{
-		//	End of Generated Code
-
-		//	Re-Start of Generated Code
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::GetModeStateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::GetModeStateAllowed
 		return false;
 	}
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_GetPolarity_allowed
-// 
-// description : 	Execution allowed for GetPolarity command.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_GetPolarity_allowed(const CORBA::Any &any)
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_GetPolarity_allowed()
+ *	Description : Execution allowed for GetPolarity attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_GetPolarity_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
-	if (get_state() == Tango::FAULT	||
-		get_state() == Tango::DISABLE)
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::FAULT ||
+		get_state()==Tango::DISABLE)
 	{
-		//	End of Generated Code
-
-		//	Re-Start of Generated Code
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::GetPolarityStateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::GetPolarityStateAllowed
 		return false;
 	}
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_SetHzFilter_allowed
-// 
-// description : 	Execution allowed for SetHzFilter command.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_SetHzFilter_allowed(const CORBA::Any &any)
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_SetPolarity_allowed()
+ *	Description : Execution allowed for SetPolarity attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_SetPolarity_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
-	if (get_state() == Tango::FAULT	||
-		get_state() == Tango::DISABLE)
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::FAULT ||
+		get_state()==Tango::DISABLE)
 	{
-		//	End of Generated Code
-
-		//	Re-Start of Generated Code
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::SetPolarityStateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::SetPolarityStateAllowed
 		return false;
 	}
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_GetHzFilter_allowed
-// 
-// description : 	Execution allowed for GetHzFilter command.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_GetHzFilter_allowed(const CORBA::Any &any)
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_GetHzFilter_allowed()
+ *	Description : Execution allowed for GetHzFilter attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_GetHzFilter_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
-	if (get_state() == Tango::FAULT	||
-		get_state() == Tango::DISABLE)
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::FAULT ||
+		get_state()==Tango::DISABLE)
 	{
-		//	End of Generated Code
-
-		//	Re-Start of Generated Code
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::GetHzFilterStateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::GetHzFilterStateAllowed
 		return false;
 	}
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_GetGain_allowed
-// 
-// description : 	Execution allowed for GetGain command.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_GetGain_allowed(const CORBA::Any &any)
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_SetHzFilter_allowed()
+ *	Description : Execution allowed for SetHzFilter attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_SetHzFilter_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
-	if (get_state() == Tango::FAULT	||
-		get_state() == Tango::DISABLE)
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::FAULT ||
+		get_state()==Tango::DISABLE)
 	{
-		//	End of Generated Code
-
-		//	Re-Start of Generated Code
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::SetHzFilterStateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::SetHzFilterStateAllowed
 		return false;
 	}
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_SetGain_allowed
-// 
-// description : 	Execution allowed for SetGain command.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_SetGain_allowed(const CORBA::Any &any)
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_GetGain_allowed()
+ *	Description : Execution allowed for GetGain attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_GetGain_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
-	if (get_state() == Tango::FAULT	||
-		get_state() == Tango::DISABLE)
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::FAULT ||
+		get_state()==Tango::DISABLE)
 	{
-		//	End of Generated Code
-
-		//	Re-Start of Generated Code
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::GetGainStateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::GetGainStateAllowed
 		return false;
 	}
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_SetPolarity_allowed
-// 
-// description : 	Execution allowed for SetPolarity command.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_SetPolarity_allowed(const CORBA::Any &any)
+
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_SetGain_allowed()
+ *	Description : Execution allowed for SetGain attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_SetGain_allowed(TANGO_UNUSED(const CORBA::Any &any))
 {
-	if (get_state() == Tango::FAULT	||
-		get_state() == Tango::DISABLE)
+	//	Compare device state with not allowed states.
+	if (get_state()==Tango::FAULT ||
+		get_state()==Tango::DISABLE)
 	{
-		//	End of Generated Code
-
-		//	Re-Start of Generated Code
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::SetGainStateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::SetGainStateAllowed
 		return false;
 	}
 	return true;
 }
-//+----------------------------------------------------------------------------
-//
-// method : 		MCCE2Electrometers::is_GetElectrometerTypeStr_allowed
-// 
-// description : 	Execution allowed for GetElectrometerTypeStr command.
-//
-//-----------------------------------------------------------------------------
-bool MCCE2Electrometers::is_GetElectrometerTypeStr_allowed(const CORBA::Any &any)
-{
-		//	End of Generated Code
 
-		//	Re-Start of Generated Code
+//--------------------------------------------------------
+/**
+ *	Method      : MCCE2Electrometers::is_GetElectrometerTypeStr_allowed()
+ *	Description : Execution allowed for GetElectrometerTypeStr attribute
+ */
+//--------------------------------------------------------
+bool MCCE2Electrometers::is_GetElectrometerTypeStr_allowed(TANGO_UNUSED(const CORBA::Any &any))
+{
+	//	Not any excluded states for GetElectrometerTypeStr command.
+	/*----- PROTECTED REGION ID(MCCE2Electrometers::GetElectrometerTypeStrStateAllowed) ENABLED START -----*/
+	
+	/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::GetElectrometerTypeStrStateAllowed
 	return true;
 }
 
-}	// namespace MCCE2Electrometers_ns
+}	//	End of namespace
diff --git a/src/Makefile b/src/Makefile
new file mode 100644
index 0000000..26b5e43
--- /dev/null
+++ b/src/Makefile
@@ -0,0 +1,142 @@
+#=============================================================================
+#
+# file :        Makefile
+#
+# description : Makefile to generate a TANGO device server.
+#
+# project :     MCCE2Electrometers
+#
+# $Author:  $
+#
+# $Revision:  $
+# $Date:  $
+#
+#=============================================================================
+#                This file is generated by POGO
+#        (Program Obviously used to Generate tango Object)
+#=============================================================================
+#
+#
+#=============================================================================
+# MAKE_ENV is the path to find common environment to buil project
+#
+MAKE_ENV = $(TANGO_HOME)
+
+#=============================================================================
+# PACKAGE_NAME is the name of the library/device/exe you want to build
+#
+PACKAGE_NAME = MCCE2Electrometers
+MAJOR_VERS   = 1
+MINOR_VERS   = 0
+RELEASE      = Release_$(MAJOR_VERS)_$(MINOR_VERS)
+
+# #=============================================================================
+# # RELEASE_TYPE
+# # - DEBUG     : debug symbols - no optimization
+# # - OPTIMIZED : no debug symbols - optimization level set to O2
+# #-----------------------------------------------------------------------------
+RELEASE_TYPE = DEBUG
+
+#=============================================================================
+# OUTPUT_TYPE can be one of the following :
+#   - 'STATIC_LIB' for a static library (.a)
+#   - 'SHARED_LIB' for a dynamic library (.so)
+#   - 'DEVICE' for a device server (will automatically include and link
+#            with Tango dependencies)
+#   - 'SIMPLE_EXE' for an executable with no dependency (for exemple the test tool
+#                of a library with no Tango dependencies)
+#
+OUTPUT_TYPE = DEVICE
+
+#=============================================================================
+# OUTPUT_DIR  is the directory which contains the build result.
+# if not set, the standard location is :
+#	- $HOME/DeviceServers if OUTPUT_TYPE is DEVICE
+#	- ../bin for others
+#
+OUTPUT_DIR = ./bin/$(BIN_DIR)
+
+
+#=============================================================================
+# INC_DIR_USER is the list of all include path needed by your sources
+#   - for a device server, tango dependencies are automatically appended
+#   - '-I ../include' and '-I .' are automatically appended in all cases
+#
+INC_DIR_USER= -I . 
+
+#=============================================================================
+# LIB_DIR_USER is the list of user library directories
+#   - for a device server, tango libraries directories are automatically appended
+#   - '-L ../lib' is automatically appended in all cases
+#
+LIB_DIR_USER=
+
+#=============================================================================
+# LFLAGS_USR is the list of user link flags
+#   - for a device server, tango libraries directories are automatically appended
+#   - '-ldl -lpthread' is automatically appended in all cases
+#
+# !!! ATTENTION !!!
+# Be aware that the order matters. 
+# For example if you must link with libA, and if libA depends itself on libB
+# you must use '-lA -lB' in this order as link flags, otherwise you will get
+# 'undefined reference' errors
+#
+#LFLAGS_USR+=
+
+
+#=============================================================================
+# CXXFLAGS_USR lists the compilation flags specific for your library/device/exe
+# This is the place where to put your compile-time macros using '-Dmy_macro'
+#
+# -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ for ACE
+#
+#CXXFLAGS_USR+= -Wall
+
+
+#=============================================================================
+# TANGO_REQUIRED 
+# - TRUE  : your project depends on TANGO
+# - FALSE : your project does not depend on TANGO
+#-----------------------------------------------------------------------------
+# - NOTE : if PROJECT_TYPE is set to DEVICE, TANGO will be auto. added
+#-----------------------------------------------------------------------------  
+TANGO_REQUIRED = TRUE
+
+
+
+#=============================================================================
+#	include Standard TANGO compilation options
+#
+include $(MAKE_ENV)/tango.opt
+
+#=============================================================================
+#	POST_PROCESSING: action to be done after normal make.
+#	e.g.:  change executable file name, .....
+#POST_PROCESSING = \
+#	mv bin/$(BIN_DIR)/$(PACKAGE_NAME) bin/$(BIN_DIR)/$(PACKAGE_NAME)_DS
+
+#=============================================================================
+# SVC_OBJS is the list of all objects needed to make the output
+#
+SVC_INCL =  $(PACKAGE_NAME).h $(PACKAGE_NAME)Class.h 
+
+
+SVC_OBJS =      \
+        $(OBJDIR)/$(PACKAGE_NAME).o \
+        $(OBJDIR)/$(PACKAGE_NAME)Class.o \
+        $(OBJDIR)/$(PACKAGE_NAME)StateMachine.o \
+        $(OBJDIR)/ClassFactory.o  \
+        $(OBJDIR)/main.o \
+        $(ADDITIONAL_OBJS) 
+
+SVC_INHERITANCE_OBJ =  \
+
+
+#=============================================================================
+#	include common targets
+#
+include $(MAKE_ENV)/common_target.opt
+
+
+
diff --git a/src/Makefile.VC b/src/Makefile.VC
index e1d4bed..6fe2073 100644
--- a/src/Makefile.VC
+++ b/src/Makefile.VC
@@ -27,14 +27,14 @@ CPPDIRUSER =
 
 make_dir=$(SOLEIL_ROOT)\env
 
-#  Les d�finitions communes � tous les DeviceServeurs
+#  Les d?finitions communes ? tous les DeviceServeurs
 !include $(make_dir)\tango.opt
 
 exe_device_server= $(EXEDIR)\ds_$(device_server).exe
 pdb_name= $(TEMPLIBDIR)\$(device_server).pdb
 
 # --------------------------------------
-#   Partie sp�cifique Device Server
+#   Partie sp?cifique Device Server
 # --------------------------------------
 
 
diff --git a/src/Makefile.testW32 b/src/Makefile.testW32
index df1de2e..0df0fc5 100644
--- a/src/Makefile.testW32
+++ b/src/Makefile.testW32
@@ -29,14 +29,14 @@ CPPDIRUSER =
 
 make_dir=$(SOLEIL_ROOT)\env
 
-#  Les d�finitions communes � tous les DeviceServeurs
+#  Les d?finitions communes ? tous les DeviceServeurs
 !include $(make_dir)\tango.opt
 
 exe_device_server= $(EXEDIR)\ds_$(device_server).exe
 pdb_name= $(TEMPLIBDIR)\$(device_server).pdb
 
 # --------------------------------------
-#   Partie sp�cifique Device Server
+#   Partie sp?cifique Device Server
 # --------------------------------------
 
 
diff --git a/src/TangoClassID.txt b/src/TangoClassID.txt
index 2cf47f7..d831843 100644
--- a/src/TangoClassID.txt
+++ b/src/TangoClassID.txt
@@ -1,11 +1,11 @@
-/**
- * Device Class Identification:
- * 
- * Class Name   :	MCCE2Electrometers
- * Contact      :	xavier.elattaoui@synchrotron-soleil.fr
- * Class Family :	Acquisition
- * Platform     :	All Platforms
- * Bus          :	Serial Line
- * Manufacturer :	SAPHYMO
- * Reference    :	MCCE-2
- */
+/**
+ * Device Class Identification:
+ * 
+ * Class Name   :	MCCE2Electrometers
+ * Contact      :	xavier.elattaoui@synchrotron-soleil.fr
+ * Class Family :	Acquisition
+ * Platform     :	All Platforms
+ * Bus          :	Serial Line
+ * Manufacturer :	SAPHYMO
+ * Reference    :	MCCE-2
+ */
diff --git a/src/main.cpp b/src/main.cpp
index 61baab3..4015640 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1,35 +1,43 @@
-static const char *RcsId = "$Header: /users/chaize/newsvn/cvsroot/Instrumentation/NovelecElectro/src/main.cpp,v 1.4 2012-07-09 13:25:43 xavela Exp $";
-//+=============================================================================
+/*----- PROTECTED REGION ID(MCCE2Electrometers::main.cpp) ENABLED START -----*/
+static const char *RcsId = "$Id:  $";
+//=============================================================================
 //
 // file :        main.cpp
 //
-// description : C++ source for a TANGO device server main.
+// description : C++ source for the MCCE2Electrometers device server main.
 //               The main rule is to initialise (and create) the Tango
 //               system and to create the DServerClass singleton.
 //               The main should be the same for every Tango device server.
 //
-// project :     TANGO Device Server
-//
-// $Author: xavela $
-//
-// $Revision: 1.4 $ $
-//
-// $Log: not supported by cvs2svn $
-// Revision 1.3  2010/10/06 20:11:49  vince_soleil
-// Breakpad Migration
-//
+// project :     Novelec MCCE-2 Electrometers
 //
-// copyleft :    European Synchrotron Radiation Facility
-//               BP 220, Grenoble 38043
-//               FRANCE
+// This file is part of Tango device class.
+// 
+// Tango is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+// 
+// Tango is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+// 
+// You should have received a copy of the GNU General Public License
+// along with Tango.  If not, see <http://www.gnu.org/licenses/>.
+// 
+// $Author:  $
 //
-//-=============================================================================
+// $Revision:  $
+// $Date:  $
 //
-//  		This file is generated by POGO
-//	(Program Obviously used to Generate tango Object)
+// $HeadURL:  $
 //
-//         (c) - Software Engineering Group - ESRF
 //=============================================================================
+//                This file is generated by POGO
+//        (Program Obviously used to Generate tango Object)
+//=============================================================================
+
 
 #include <tango.h>
 
@@ -79,3 +87,6 @@ int main(int argc, char *argv[])
 	tg->server_cleanup();
 	return(0);
 }
+
+
+/*----- PROTECTED REGION END -----*/	//	MCCE2Electrometers::main.cpp
-- 
GitLab