diff --git a/include/AbstractElectrometerClass.h b/include/AbstractElectrometerClass.h
index 0f34ce8d7bd24b96896be3adffedd1f831769798..18650bb7850a9ce04ff7d99bba8c3dff09a3f70c 100644
--- a/include/AbstractElectrometerClass.h
+++ b/include/AbstractElectrometerClass.h
@@ -9,9 +9,13 @@
 //
 // $Author: xavela $
 //
-// $Revision: 1.14 $
+// $Revision: 1.15 $
 //
 // $Log: not supported by cvs2svn $
+// Revision 1.14  2009/01/19 12:00:25  xavela
+// xavier :
+// - MCCE2 (Novelec part) : methods to change the active channel to communicate with.
+//
 // Revision 1.13  2008/06/20 14:36:24  xavela
 // xavier :
 // - DDC status show only errors if any
@@ -197,6 +201,7 @@ public:
 	virtual std::string get_ElectroMeterFrequency (void);
 	virtual std::string get_ElectroMeterGain      (void);
 	virtual unsigned short get_ElectroChannel	  (void);
+	virtual void set_ElectroMeterRange			  (std::string rang);
 	virtual void set_ElectroMeterPolarity		  (std::string pola);
 	virtual void set_ElectroMeterFrequency		  (std::string freq);
 	virtual void set_ElectroMeterGain			  (std::string gain);
@@ -238,7 +243,7 @@ protected :
 	
 	void set_electroState(ElectroState newState) { electrometerState = newState; };
 
-	short					    _range;
+	short					_range;
 	std::string				_rangeStr;
 	std::string				_mode;
 	std::string				_device_proxy_name;
diff --git a/include/N_PhotoConducteur.h b/include/N_PhotoConducteur.h
index 0871b40beab698b8bb9b2bb567689036580ce01c..80d8e2cebb30438f84707009286bd35b78a46c0a 100644
--- a/include/N_PhotoConducteur.h
+++ b/include/N_PhotoConducteur.h
@@ -48,6 +48,11 @@ public:
 	void	range_up			(void);
 	void	range_down			(void);
 	
+	/**
+	*  \brief Checks and Sets the new range value.
+	*/
+	void set_range(std::string range_str);
+
 	/**
 	*  \brief getters and setters.
 	*/
diff --git a/include/N_PhotoVoltaique.h b/include/N_PhotoVoltaique.h
index d98d1528c9ff0a49e6c0e2aca3d39be1dce55ec2..746fbc1effb28018bcaea9f5171f711e01ab4e44 100644
--- a/include/N_PhotoVoltaique.h
+++ b/include/N_PhotoVoltaique.h
@@ -47,7 +47,12 @@ public:
 	*/
 	void range_up	(void);
 	void range_down (void);
-	
+
+	/**
+	*  \brief Checks and Sets the new range value.
+	*/
+	void set_range(std::string range_str);
+
 	/**
 	*  \brief getters and setters.
 	*/
diff --git a/include/Novelec_MCCE2.h b/include/Novelec_MCCE2.h
index 6cecc1226e1b3a8977610f76cdf1152a081738c6..16c01dda0b25ea49f99c068410c058022d74333c 100644
--- a/include/Novelec_MCCE2.h
+++ b/include/Novelec_MCCE2.h
@@ -54,6 +54,11 @@ public:
 	void set_Test_function				(void);
 	void set_Measure_function			(void);
 
+	/**
+	*	\brief Sets the new range value
+	*/
+	virtual void set_range(std::string range_str) = 0;
+
 	/**
 	*  \brief Commands to start/stop the data acquisition
 	*
@@ -70,8 +75,14 @@ public:
 	std::string electrometer_status		(void);
 
 protected :
-	short _rangeLimit;		//- define the range limit for each novelec type
+	unsigned short _rangeLimit;				//- define the range limit for each novelec type
+	unsigned short _MCCE2electroTypeNumber;	//- the mcce2 electrometer type number (to check rang value)
 
+	/**
+	*	\brief Checks the new range value
+	*/
+	short check_range_value(const std::string& rgToCheck, const std::string* electroRangeList);
+ 
 };
 
 /** @} */	//- end addtogroup
diff --git a/src/AbstractElectrometerClass.cpp b/src/AbstractElectrometerClass.cpp
index 906567be5c7ecfc517bd9cf96fa3c6283dee5b17..960ed64b54408c8d4b186f4e8da86287fe0562cd 100644
--- a/src/AbstractElectrometerClass.cpp
+++ b/src/AbstractElectrometerClass.cpp
@@ -11,9 +11,13 @@
 //
 // $Author: xavela $
 //
-// $Revision: 1.15 $
+// $Revision: 1.16 $
 //
 // $Log: not supported by cvs2svn $
+// Revision 1.15  2009/01/19 12:00:25  xavela
+// xavier :
+// - MCCE2 (Novelec part) : methods to change the active channel to communicate with.
+//
 // Revision 1.14  2008/06/20 14:36:23  xavela
 // xavier :
 // - DDC status show only errors if any
@@ -631,6 +635,14 @@ std::string AbstractElectrometerClass::get_ElectroMeterGain (void)
 	return _electrometerProtocol->get_gain( );
 }
 
+// ============================================================================
+// AbstractElectrometerClass::set_ElectroMeterRange
+// ============================================================================
+void AbstractElectrometerClass::set_ElectroMeterRange (std::string rang) 
+{
+	_electrometerProtocol->set_range(rang);
+}
+
 // ============================================================================
 // AbstractElectrometerClass::set_ElectroMeterPolarity
 // ============================================================================
diff --git a/src/N_PhotoConducteur.cpp b/src/N_PhotoConducteur.cpp
index bb4203d41eafb1097966a9fa562fc9d5918aea79..f843917bcf505e60915c5a28fc4fd90dbe0bd50f 100644
--- a/src/N_PhotoConducteur.cpp
+++ b/src/N_PhotoConducteur.cpp
@@ -24,8 +24,8 @@
 /*
 * Valid Range values for a N_PhotoConducteur
 */
-static const std::string NType_4_rangeValue[] = {"100 MOhms","30 MOhms","10 MOhms","3 MOhms"};
-static const std::string NType_5_rangeValue[] = {"1000 KOhms","300 KOhms","100 KOhms","30 KOhms"};
+static const std::string NType4_rangeValue[] = {"3","10","30","100"};		//- MOhms
+static const std::string NType5_rangeValue[] = {"30","100","300","1000"};	//- KOhms
 
 
 // ============================================================================
@@ -123,3 +123,29 @@ void N_PhotoConducteur::set_ElectroMeterGain (std::string gain)
 												"N_PhotoConducteur::set_ElectroMeterGain( ).");
 	_nproto->set_gain(gain);	
 }
+
+// ============================================================================
+// N_PhotoConducteur::set_range
+// ============================================================================
+void N_PhotoConducteur::set_range (std::string rgStr)
+{
+short range_idx = -1;
+std::stringstream range_cmd_to_send;
+
+	//- switch the novelec type :
+	switch(_MCCE2electroTypeNumber)
+	{
+	case 4 : range_idx = Novelec_MCCE2::check_range_value(rgStr, NType4_rangeValue);
+		break;
+	case 5 : range_idx = Novelec_MCCE2::check_range_value(rgStr, NType5_rangeValue);
+		break;
+	}
+
+	if (range_idx < 0)
+		throw electrometer::ElectrometerException("INVALID_PARAMETER", 
+												  "This electrometer does not support this range value.",
+												  "N_PhotoConducteur::set_range( ).");
+	//- it is OK 
+	range_cmd_to_send << range_idx << std::endl;
+	_electrometerProtocol->set_range(range_cmd_to_send.str());
+}
diff --git a/src/N_PhotoVoltaique.cpp b/src/N_PhotoVoltaique.cpp
index 457a6d70616b1c5abcd12eed495293e213bf7642..7c6582059044169e83890815e361ade7f4b56138 100644
--- a/src/N_PhotoVoltaique.cpp
+++ b/src/N_PhotoVoltaique.cpp
@@ -24,9 +24,9 @@
 /*
 * Valid Range values for a N_PhotoVoltaique
 */
-static const std::string NType1_rangeValue[] = {"1e-11 A","3e-11 A","1e-10 A","3e-10 A"};
-static const std::string NType2_rangeValue[] = {"1e-10 A","3e-10 A","1e-9 A","3e-9 A","1e-8 A","3e-8 A","1e-7 A","3e-7 A"};
-static const std::string NType3_rangeValue[] = {"1e-8 A","3e-8 A","1e-7 A","3e-7 A","1e-6 A","3e-6 A","1e-5 A","3e-5 A"};
+static const std::string NType1_rangeValue[] = {"3e-11","1e-11","3e-10","1e-10"};
+static const std::string NType2_rangeValue[] = {"3e-10","1e-10","3e-9","1e-9","3e-8","1e-8","3e-7","1e-7"};
+static const std::string NType3_rangeValue[] = {"3e-8","1e-8","3e-7","1e-7","3e-6","1e-6","3e-5","1e-5"};
 
 
 // ============================================================================
@@ -134,3 +134,31 @@ void N_PhotoVoltaique::set_ElectroMeterFrequency (std::string freqFilter)
 	_nproto->set_frequency(freqFilter);	
 }
 
+// ============================================================================
+// N_PhotoVoltaique::set_range
+// ============================================================================
+void N_PhotoVoltaique::set_range (std::string rgStr)
+{
+short range_idx = -1;
+std::stringstream range_cmd_to_send;
+
+	//- switch the novelec type :
+	switch(_MCCE2electroTypeNumber)
+	{
+	case 1 : range_idx = Novelec_MCCE2::check_range_value(rgStr, NType1_rangeValue);
+		break;
+	case 2 : range_idx = Novelec_MCCE2::check_range_value(rgStr, NType2_rangeValue);
+		break;
+	case 3 : range_idx = Novelec_MCCE2::check_range_value(rgStr, NType3_rangeValue);
+		break;
+	}
+
+	if (range_idx < 0)
+		throw electrometer::ElectrometerException("INVALID_PARAMETER", 
+												  "This electrometer does not support this range value.",
+												  "N_PhotoVoltaique::set_range( ).");
+	//- it is OK 
+	range_cmd_to_send << range_idx << std::endl;
+	_electrometerProtocol->set_range(range_cmd_to_send.str());
+}
+
diff --git a/src/Novelec_MCCE2.cpp b/src/Novelec_MCCE2.cpp
index 17d661bcb31dfcf81fac6b708d0fd4c44dd7ae7f..482a575fd253d5d47f8346861086ccc13ead9c13 100644
--- a/src/Novelec_MCCE2.cpp
+++ b/src/Novelec_MCCE2.cpp
@@ -27,6 +27,7 @@
 // ============================================================================
 Novelec_MCCE2::Novelec_MCCE2 (std::string& comLink_device_name, short address, short novTypeNumber)
 :	AbstractElectrometerClass(comLink_device_name),
+	_MCCE2electroTypeNumber(novTypeNumber),
 	_rangeLimit(0)
 {
 	//std::cout << "Novelec_MCCE2::Novelec_MCCE2 <-" << std::endl;
@@ -266,3 +267,19 @@ std::string Novelec_MCCE2::electrometer_status (void)
 
 	return argout;
 }
+
+// ============================================================================
+// Novelec_MCCE2::check_range_value
+// ============================================================================
+short Novelec_MCCE2::check_range_value (const std::string& rgToCheck, const std::string* electroRangeList)
+{ 
+	for (unsigned int idx = 0; idx < _rangeLimit; idx++)
+	{
+		if(electroRangeList[idx].find(rgToCheck) != std::string::npos)
+			//- value is in the list
+			return idx;
+	}
+
+	//- new range value not found in the electrometer range list !
+	return -1;
+}