diff --git a/include/AbstractElectrometerClass.h b/include/AbstractElectrometerClass.h
index f6fdb2cb51d5c71b281f26fbad63a41e64ffa33b..0eea71faa96ce987fec8076a4607e096151fb6a3 100644
--- a/include/AbstractElectrometerClass.h
+++ b/include/AbstractElectrometerClass.h
@@ -9,9 +9,13 @@
 //
 // $Author: xavela $
 //
-// $Revision: 1.3 $
+// $Revision: 1.4 $
 //
 // $Log: not supported by cvs2svn $
+// Revision 1.3  2007/11/28 10:37:30  xavela
+// compile en MODE debug ->
+// modifier le(s) MakeFile !
+//
 // Revision 1.2  2007/11/27 10:17:46  xavela
 // xavier :
 // - modif done on Novelec part :
@@ -53,7 +57,7 @@ public:
 	*  \brief Electrometer common functions.
 	*/
 	virtual void range_up			(void) = 0;
-	virtual void range_down			(void) = 0;
+	virtual void range_down		(void) = 0;
 	virtual void reset				(void); 
 	virtual void local				(void);
 	virtual void remote				(void);
@@ -62,23 +66,23 @@ public:
 	*  \brief Electrometer : cmd to get electrometer data.
 	*/
 	std::string get_value			(void);
-	virtual std::vector<double> get_integratedValue		(void);
-	virtual std::vector<double> get_fetchValue		    (void);
+	virtual std::vector<double> get_integratedValue	(void);
+	virtual std::vector<double> get_fetchValue      (void);
 
 	/**
 	*  \brief Keithley Electrometer methods
 	*/
-	void autoRange_on		(void);
+	void autoRange_on		  (void);
 	void zero_check_on		(void);
 	void zero_check_off		(void);
 	void zero_correct_on	(void);
 	void zero_correct_off	(void);
-	void auto_zero_on		(void);
+	void auto_zero_on		  (void);
 	void auto_zero_off		(void);
-	virtual void autoRange_off		(void);
-	virtual void setAmperMeterMode	(void);
-	virtual void setVoltMeterMode	(void);
-	virtual void setOhmMeterMode	(void);
+	virtual void autoRange_off		  (void);
+	virtual void setAmperMeterMode  (void);
+	virtual void setVoltMeterMode	  (void);
+	virtual void setOhmMeterMode	  (void);
 	virtual void setCoulombMeterMode(void);
 
 	/**
@@ -89,49 +93,51 @@ public:
 	void clear_registers	(void); 
 	void averageStateON		(void); 
 	void averageStateOFF	(void); 
-	void set_knplc			(std::string nPLC);
+	void set_knplc			  (std::string nPLC);
 	void set_triggercount	(std::string trigcounts);
 	void set_triggerdelay	(std::string trigdelay);
 	void set_triggerdelayAuto	(std::string trigdelAuto);
-	void set_averagecount	(std::string avercounts);
-	void set_averagecontrol	(std::string averctrl);
-	std::string get_knplc			(void);
+	void set_averagecount	    (std::string avercounts);
+	void set_averagecontrol	  (std::string averctrl);
+	std::string get_knplc			    (void);
 	std::string get_triggercount	(void);
 	std::string get_triggerdelay	(void);
 	std::string get_triggerdelayAuto(void);
 	std::string get_averagecount	(void);
-	std::string get_averagecontrol	(void);
-	void set_buffer_size			(void);
-	void clear_buffer				(void);
-	void store_raw_input			(void);
-	void start_storing				(void);
-	void enable_SRQBufferFull		(void);
+	std::string get_averagecontrol(void);
+	void clear_buffer				      (void);
+	void store_raw_input			    (void);
+	void start_storing				    (void);
+	void enable_SRQBufferFull		  (void);
 	void disable_SRQBufferFull		(void);
 	std::string readStatusByteRegister (void);	//- used to know if the integration cycle is done! 
 	bool get_overloadRangeState		(void);		//- used to know if the device range is overloaded (DDC Keithley ONLY)! 
+	virtual void set_buffer_size			    (short);
+	virtual void set_triggerMode			    (short);
+	virtual void set_integrationTime			(double);
 
 	/**
 	*  \brief Novelec Electrometer methods
 	*
 	* Following functions are only supported for Novelec Protocol
 	*/
-	virtual void set_Zero_VonF_function		(void);
+	virtual void set_Zero_VonF_function		  (void);
 	virtual void set_Offset_ZeroV1_function	(void);
 	virtual void set_Leakage_ZeroV2_function(void);
-	virtual void set_Test_function			(void);
-	virtual void set_Measure_function		(void);
-	virtual void mcce_on	(void);
-	virtual void mcce_off	(void);
-	virtual void mcce_init	(void);
+	virtual void set_Test_function			    (void);
+	virtual void set_Measure_function		    (void);
+	virtual void mcce_on    (void);
+	virtual void mcce_off   (void);
+	virtual void mcce_init  (void);
 	/**
 	*  \brief Novelec getters and setters
 	*/
-	virtual std::string get_ElectroMeterPolarity (void);
-	virtual std::string get_ElectroMeterFrequency(void);
-	virtual std::string get_ElectroMeterGain	 (void);
-	virtual void set_ElectroMeterPolarity	(std::string pola);
+	virtual std::string get_ElectroMeterPolarity  (void);
+	virtual std::string get_ElectroMeterFrequency (void);
+	virtual std::string get_ElectroMeterGain      (void);
+	virtual void set_ElectroMeterPolarity	  (std::string pola);
 	virtual void set_ElectroMeterFrequency	(std::string freq);
-	virtual void set_ElectroMeterGain		(std::string gain);
+	virtual void set_ElectroMeterGain       (std::string gain);
 
 	/**
 	*  \brief Electrometer Status and State.
@@ -141,8 +147,8 @@ public:
 	/**
 	*  \brief Common getters and setters
 	*/
-	virtual std::string get_ElectroMeterMode		(void);
-	virtual std::string get_ElectroMeterRange		(void);
+	virtual std::string get_ElectroMeterMode	(void);
+	virtual std::string get_ElectroMeterRange	(void);
 
 
 protected :
@@ -162,11 +168,11 @@ protected :
 	
 	void set_electroState(ElectroState newState) { electrometerState = newState; };
 
-	short					_range;
+	short					    _range;
 	std::string				_rangeStr;
 	std::string				_mode;
-	ElectrometerProtocol*	_electrometerProtocol;
 	std::string				_device_proxy_name;
+	ElectrometerProtocol*	_electrometerProtocol;
 private :
 
 public :
diff --git a/include/ElectrometerProtocol.h b/include/ElectrometerProtocol.h
index 36d659c945e1bb2696fdfe90f27de6aacde9dc6d..0eb8fc0a0088403e87ed52bc555dcd78dd73b632 100644
--- a/include/ElectrometerProtocol.h
+++ b/include/ElectrometerProtocol.h
@@ -12,9 +12,14 @@
 //
 // $Author: xavela $
 //
-// $Revision: 1.2 $
+// $Revision: 1.3 $
 //
 // $Log: not supported by cvs2svn $
+// Revision 1.2  2007/11/27 10:17:46  xavela
+// xavier :
+// - modif done on Novelec part :
+// init_MCCE2() added
+//
 // Revision 1.1  2007/07/09 13:20:35  stephle
 // initial import
 //
@@ -84,6 +89,7 @@ public:
 	virtual void set_knplc			(std::string nPLC);
 	virtual void set_triggercount	(std::string trigcounts);
 	virtual void set_triggerdelay	(std::string trigdelay);
+  virtual void set_triggerMode (std::string);
 	virtual void set_triggerdelayAuto (std::string trigdelAuto);
 	virtual void set_averagecount     (std::string avercounts);
 	virtual void set_averagecontrol   (std::string averctrl);
@@ -113,7 +119,7 @@ public:
 	/**
 	*  \brief Electrometer : Buffer config
 	*/
-  virtual void set_buffer_size		(void);
+  virtual void set_buffer_size		(std::string size);
   virtual void clear_buffer		    (void);
   virtual void store_raw_input		(void);
   virtual void start_storing		(void);
diff --git a/include/KeithleyDDCProtocol.h b/include/KeithleyDDCProtocol.h
index 18843d50d1c5bce71205319b1e48390105ec0fe0..5ab6052375a195591f31a9426b18089ad5879fc0 100644
--- a/include/KeithleyDDCProtocol.h
+++ b/include/KeithleyDDCProtocol.h
@@ -90,9 +90,10 @@ public:
 	std::string get_range       (void);
   bool get_overloadRangeState (void) { return _is_overloaded; };//- used to know if the device range is overloaded! 
 
+  void set_buffer_size (std::string);
+  void set_triggerMode (std::string);
 		/*	TODO : for next PicoLib evolution
 	//- CMD B
-//	virtual void reading_mode (void);
 	virtual void reading_source (void);
 	//- CMD Q
 	virtual void data_store (void);
diff --git a/include/KeithleySCPIProtocol.h b/include/KeithleySCPIProtocol.h
index 76ac51adeefca2fb2a8d69ca3539f6609c47c5fa..6ecadacff5d084c59012eb927ae9594bf645ed89 100644
--- a/include/KeithleySCPIProtocol.h
+++ b/include/KeithleySCPIProtocol.h
@@ -76,33 +76,33 @@ public:
 	std::string get_value (void);
 	std::vector<double> get_integratedValue (void);
 	std::vector<double> get_fetchValue      (void);
-  std::string readStatusByteRegister (void); //- used to know if the integration cycle is done! 
+  std::string readStatusByteRegister      (void); //- used to know if the integration cycle is done! 
 	
   void init_keithley			(void); 
 	/**
 	*  \brief Electrometer : Acquisition config
 	*/
-  void set_knplc				  (std::string nPLC);
-	void set_triggercount		(std::string trigcounts);
-	void set_triggerdelay		(std::string trigdelay);
+  void set_knplc            (std::string nPLC);
+	void set_triggercount		  (std::string trigcounts);
+	void set_triggerdelay		  (std::string trigdelay);
 	void set_triggerdelayAuto	(std::string trigdelAuto);
 	void set_averagecount		  (std::string avercounts);
 	void set_averagecontrol		(std::string averctrl);
 	void averageStateON			  (void);
 	void averageStateOFF		  (void);
 	std::string get_knplc			(void);
-	std::string get_triggercount	(void);
-	std::string get_triggerdelay	(void);
+	std::string get_triggercount	  (void);
+	std::string get_triggerdelay	  (void);
 	std::string get_triggerdelayAuto(void);
 	std::string get_averagecount	  (void);
 	std::string get_averagecontrol	(void);
 	/**
 	*  \brief Electrometer : Buffer config
 	*/
-  void set_buffer_size		(void);
-  void clear_buffer		    (void);
-  void store_raw_input		(void);
-  void start_storing		  (void);
+  void set_buffer_size		    (std::string size);
+  void clear_buffer		        (void);
+  void store_raw_input		    (void);
+  void start_storing		      (void);
   void enable_SRQBufferFull		(void);
   void disable_SRQBufferFull	(void);
 
diff --git a/include/Keithley_485.h b/include/Keithley_485.h
index cf0adee896c9c67363d761704a4aac5e26055227..7623bf5aaa376ae0e8eb424d763150a667eb21f5 100644
--- a/include/Keithley_485.h
+++ b/include/Keithley_485.h
@@ -17,7 +17,7 @@
 #include "AbstractElectrometerClass.h"
 
 /**
- *  \addtogroup DDC Keithley 
+ *  \addtogroup DDC_Keithley 
  *  @{
  */
 
@@ -45,9 +45,14 @@ public:
 	/**
 	*  \brief Device dependent commands.
 	*/
-	void range_up		(void);
+	void range_up		  (void);
 	void range_down		(void);
 
+  /**
+	*  \brief Trigger Mode Command
+	*/
+  void set_triggerMode  (short);
+
 	/**
 	*  \brief getter(s) & setter(s)	
 	*/
diff --git a/include/Keithley_486.h b/include/Keithley_486.h
index ec9565e12ff1014ce2b287336b4fa32122eefb4e..2e9c4fe6652bf862622571e9325f5e7b2958a110 100644
--- a/include/Keithley_486.h
+++ b/include/Keithley_486.h
@@ -48,6 +48,8 @@ public:
 	void range_up (void);
 	void range_down (void);
 	void autoRange_off (void);
+  void set_buffer_size(short);
+  void set_triggerMode(short);
 	
 	/**
 	*  \brief getter(s) & setter(s)	
diff --git a/include/Keithley_487.h b/include/Keithley_487.h
index 75b18aa6b0590451b6444d28031b9441cd879bf7..b5b14702d8dcea0534398f2c2f1b05801936f967 100644
--- a/include/Keithley_487.h
+++ b/include/Keithley_487.h
@@ -17,7 +17,7 @@
 #include "AbstractElectrometerClass.h"
 
 /**
- *  \addtogroup DDC Keithley
+ *  \addtogroup DDC_Keithley
  *  @{
  */
 
@@ -45,10 +45,13 @@ public:
 	/**
 	*  \brief Electrometer methods.
 	*/
-	void range_up (void);
-	void range_down (void);
-	void autoRange_off (void);
-	/**
+	void range_up       (void);
+	void range_down     (void);
+	void autoRange_off  (void);
+  void set_buffer_size(short);
+  void set_triggerMode(short);
+
+  /**
 	*  \brief Electrometer Function(s).
 	*/
 	void setAmperMeterMode (void);
diff --git a/include/Keithley_617.h b/include/Keithley_617.h
index 2fe43143b7387de4d3dd4a3725815ad6e493aa0a..b289dd57a9b9f76258118a27226b45e1802f23fb 100644
--- a/include/Keithley_617.h
+++ b/include/Keithley_617.h
@@ -45,17 +45,19 @@ public:
 	/**
 	*  \brief Device dependent commands.
 	*/
-	void autoRange_off (void);
-	void range_up (void);
-	void range_down (void);
+	void autoRange_off    (void);
+	void range_up         (void);
+	void range_down       (void);
+  void set_buffer_size  (short not_used);
+  void set_triggerMode  (short);
 	
 	/**
 	*  \brief Electrometer Mode.
 	*/
-	void setAmperMeterMode (void);
-	void setVoltMeterMode (void);
-	void setOhmMeterMode (void);
-	void setCoulombMeterMode (void);
+	void setAmperMeterMode  (void);
+	void setVoltMeterMode   (void);
+	void setOhmMeterMode    (void);
+	void setCoulombMeterMode(void);
 
 	/**
 	*  \brief getter(s) & setter(s)	
diff --git a/include/Keithley_6512.h b/include/Keithley_6512.h
index 394e6ef32ce7e3a13bcf4707a1ec5eab37760b4a..860181301ba46bf80ef8e13f91fbd90bece08e8b 100644
--- a/include/Keithley_6512.h
+++ b/include/Keithley_6512.h
@@ -45,17 +45,19 @@ public:
 	/**
 	*  \brief Device dependent commands.
 	*/
-	void autoRange_off (void);
-	void range_up (void);
-	void range_down (void);
+	void autoRange_off  (void);
+	void range_up       (void);
+	void range_down     (void);
+  void set_buffer_size (short not_used);
+  void set_triggerMode (short);
 	
 	/**
 	*  \brief Electrometer Mode.
 	*/
-	void setAmperMeterMode (void);
-	void setVoltMeterMode (void);
-	void setOhmMeterMode (void);
-	void setCoulombMeterMode (void);
+	void setAmperMeterMode  (void);
+	void setVoltMeterMode   (void);
+	void setOhmMeterMode    (void);
+	void setCoulombMeterMode(void);
 
 	/**
 	*  \brief getter(s) & setter(s)	
diff --git a/src/AbstractElectrometerClass.cpp b/src/AbstractElectrometerClass.cpp
index fbe23029af2fa9b0c5c2a8c303ef658f9614d36c..846bafb69933865e0a801c4ededcaa1de1cbcabc 100644
--- a/src/AbstractElectrometerClass.cpp
+++ b/src/AbstractElectrometerClass.cpp
@@ -11,9 +11,13 @@
 //
 // $Author: xavela $
 //
-// $Revision: 1.4 $
+// $Revision: 1.5 $
 //
 // $Log: not supported by cvs2svn $
+// Revision 1.4  2007/11/28 10:37:20  xavela
+// compile en MODE debug ->
+// modifier le(s) MakeFile !
+//
 // Revision 1.3  2007/11/27 15:23:02  xavela
 // xavier :
 // - modif done on Novelec part :
@@ -163,6 +167,16 @@ std::string AbstractElectrometerClass::get_knplc (void)
 	return _electrometerProtocol->get_knplc( );
 }
 
+// ============================================================================
+// AbstractElectrometerClass::set_triggerMode
+// ============================================================================
+void AbstractElectrometerClass::set_triggerMode (short) 
+{
+	throw electrometer::ElectrometerException("COMMAND_NOT_SUPPORTED", 
+											"This Electrometer does not support this command.",
+											"AbstractElectrometerClass::set_triggerMode( ).");
+}
+
 // ============================================================================
 // AbstractElectrometerClass::set_triggercount
 // ============================================================================
@@ -373,9 +387,25 @@ std::string AbstractElectrometerClass::electrometer_status (void)
 // ============================================================================
 // AbstractElectrometerClass::set_buffer_size
 // ============================================================================
-void AbstractElectrometerClass::set_buffer_size (void) 
+void AbstractElectrometerClass::set_buffer_size (short size) 
 {
-  _electrometerProtocol->set_buffer_size();
+  // force read of range on instrument to update _range variable
+	throw electrometer::ElectrometerException("COMMAND_NOT_SUPPORTED", 
+                      "This Keithley device does not support this command.",
+                      "AbstractElectrometerClass::set_buffer_size( ).");
+
+}
+
+// ============================================================================
+// AbstractElectrometerClass::set_integrationTime
+// ============================================================================
+void AbstractElectrometerClass::set_integrationTime (double) 
+{
+  // force read of range on instrument to update _range variable
+	throw electrometer::ElectrometerException("COMMAND_NOT_SUPPORTED", 
+                      "This Keithley device does not support this command.",
+                      "AbstractElectrometerClass::set_integrationTime( ).");
+
 }
 
 // ============================================================================
diff --git a/src/ElectrometerProtocol.cpp b/src/ElectrometerProtocol.cpp
index 290e4db93426ce7642f13d88f4bafbf4527cc305..0f69a8a6bec575651cdf1176ae938762fd548069 100644
--- a/src/ElectrometerProtocol.cpp
+++ b/src/ElectrometerProtocol.cpp
@@ -380,6 +380,16 @@ std::string ElectrometerProtocol::get_knplc (void)
 											"ElectrometerProtocol::get_knplc( ).");
 }
 
+// ============================================================================
+// ElectrometerProtocol::set_triggerMode
+// ============================================================================
+void ElectrometerProtocol::set_triggerMode (std::string) 
+{
+	throw electrometer::ElectrometerException("COMMAND_NOT_SUPPORTED", 
+											"This Electrometer does not support this command.",
+											"ElectrometerProtocol::set_triggerMode( ).");
+}
+
 // ============================================================================
 // ElectrometerProtocol::set_triggercount
 // ============================================================================
@@ -513,7 +523,7 @@ void ElectrometerProtocol::averageStateOFF (void)
 // ============================================================================
 // ElectrometerProtocol::set_buffer_size
 // ============================================================================
-void ElectrometerProtocol::set_buffer_size (void) 
+void ElectrometerProtocol::set_buffer_size (std::string) 
 {
 	throw electrometer::ElectrometerException("COMMAND_NOT_SUPPORTED", 
 											"This Electrometer does not support this command.",
diff --git a/src/KeithleyDDCProtocol.cpp b/src/KeithleyDDCProtocol.cpp
index 12ac5e897384af6874e6142b35863c9957f8a30f..d0fbcadb3147972446da4194b8c468061da785ca 100644
--- a/src/KeithleyDDCProtocol.cpp
+++ b/src/KeithleyDDCProtocol.cpp
@@ -345,6 +345,24 @@ std::stringstream cmd_to_send;
 
 }
 
+// ============================================================================
+// KeithleyDDCProtocol::set_buffer_size()
+// ============================================================================
+void KeithleyDDCProtocol::set_buffer_size (std::string cmd) 
+{
+	//- send command
+	_communication_link->write(cmd);
+}
+
+// ============================================================================
+// KeithleyDDCProtocol::set_buffer_size()
+// ============================================================================
+void KeithleyDDCProtocol::set_triggerMode (std::string cmd) 
+{
+	//- send command
+	_communication_link->write(cmd);
+}
+
 // Following functions are part of commands supported via the DDC protocol. 
 // We may have to implement them after first tests on beamlines
 /*
diff --git a/src/KeithleySCPIProtocol.cpp b/src/KeithleySCPIProtocol.cpp
index 85987f9bd8404e17e4ba00e1de58d44c9ec60398..1b96a68871bc5998d97ab0b3fbc701becb06a85f 100644
--- a/src/KeithleySCPIProtocol.cpp
+++ b/src/KeithleySCPIProtocol.cpp
@@ -490,7 +490,7 @@ std::string cmd_to_send("");
 	_communication_link->write(cmd_to_send);
 
 	//- set buffer size ( = number of triggers )
-	set_buffer_size();
+	set_buffer_size(nbTrigCount);
 
 }
 
@@ -701,12 +701,12 @@ std::string argout("no data");
 // ============================================================================
 // KeithleySCPIProtocol::set_buffer_size()
 // ============================================================================
-void KeithleySCPIProtocol::set_buffer_size (void) 
+void KeithleySCPIProtocol::set_buffer_size (std::string size) 
 {
 std::string cmd_to_send("");
 
 	//- send command : size = number of triggers
-	cmd_to_send = "TRAC:POIN " + trigCountStr;
+	cmd_to_send = "TRAC:POIN " + size;
 	_communication_link->write(cmd_to_send);
 
 }
diff --git a/src/Keithley_485.cpp b/src/Keithley_485.cpp
index 1ac0af895beccce63735be7e3c11e5f7201c2d96..e5dd7869ab98c06c054e57150408c4d61149ef2e 100644
--- a/src/Keithley_485.cpp
+++ b/src/Keithley_485.cpp
@@ -32,6 +32,11 @@ static const std::string K485_rangeValue[] = {"AUTO ON","2E-9","2E-8","2E-7","2E
 */
 static const short K485_rangeLimit	= 7;
 
+/*
+* Trigger Moded limit
+*/
+static const short K485_triggerModeLimit	= 5;
+
 // ============================================================================
 // Keithley_485::Keithley_485
 // ============================================================================
@@ -116,6 +121,24 @@ std::string Keithley_485::get_ElectroMeterRange (void)
 	return _rangeStr;
 }
 
+// ============================================================================
+// Keithley_485::set_triggerMode
+// ============================================================================
+void Keithley_485::set_triggerMode (short trigMod) 
+{
+std::stringstream cmd_to_send;
+
+  if(trigMod<0 || trigMod>K485_triggerModeLimit)
+		throw electrometer::ElectrometerException("OUT_OF_RANGE", 
+												"Trigger mode value invalid. Please enter a value in the range 0 - 5.",
+												"Keithley_485::set_triggerMode( ).");
+
+  cmd_to_send << trigMod <<std::endl;
+
+  _electrometerProtocol->set_triggerMode(cmd_to_send.str());
+
+}
+
 // ============================================================================
 // Keithley_485::electrometer_status
 // ============================================================================
diff --git a/src/Keithley_486.cpp b/src/Keithley_486.cpp
index efa11a160708f3bad790ed82b11baa0d2bd2a9fa..bd5004272aa0a8b7e789fbb17626e3c783d59d7b 100644
--- a/src/Keithley_486.cpp
+++ b/src/Keithley_486.cpp
@@ -31,6 +31,10 @@ static const std::string K486_rangeValue[] = {"AUTO ON","2E-9","2E-8","2E-7","2E
 */
 static short K486_rangeLimit = 8;
 
+/*
+* Trigger Mode limit
+*/
+static short K486_triggerModeLimit = 7;
 
 // ============================================================================
 // Keithley_486::Keithley_486
@@ -127,6 +131,37 @@ std::string Keithley_486::get_ElectroMeterRange (void)
 	return _rangeStr;
 }
 
+// ============================================================================
+// Keithley_486::set_buffer_size()
+// ============================================================================
+void Keithley_486::set_buffer_size (short size) 
+{
+std::stringstream cmd_to_send;
+
+	//- send command : size = number of triggers
+  cmd_to_send << "N" << size << "X" << std::endl;
+	_electrometerProtocol->set_buffer_size(cmd_to_send.str());
+
+}
+
+// ============================================================================
+// Keithley_487::set_triggerMode
+// ============================================================================
+void Keithley_486::set_triggerMode (short trigMod) 
+{
+  if(trigMod<0 || trigMod>K486_triggerModeLimit)
+		throw electrometer::ElectrometerException("OUT_OF_RANGE", 
+												"Trigger mode value invalid. Please enter a value in the range 0 - 7.",
+												"Keithley_486::set_triggerMode( ).");
+
+  std::stringstream cmd_to_send;
+
+  cmd_to_send << trigMod <<  std::endl;
+
+  _electrometerProtocol->set_triggerMode(cmd_to_send.str());
+
+}
+
 // ============================================================================
 // Keithley_486::electrometer_status
 // ============================================================================
diff --git a/src/Keithley_487.cpp b/src/Keithley_487.cpp
index 8496b32695d76bae4b245eeebaaf513fdd43d5c3..4d64c42f1e1acf56cec08ce038d30011b7fefd7f 100644
--- a/src/Keithley_487.cpp
+++ b/src/Keithley_487.cpp
@@ -31,6 +31,11 @@ static const std::string K487_rangeValue[] = {"AUTO ON","2E-9","2E-8","2E-7","2E
 */
 static short K487_rangeLimit = 8;
 
+/*
+* Trigger Mode limit
+*/
+static short K487_triggerModeLimit = 9;
+
 
 // ============================================================================
 // Keithley_487::Keithley_487
@@ -129,6 +134,37 @@ std::string Keithley_487::get_ElectroMeterRange (void)
 	return _rangeStr;
 }
 
+// ============================================================================
+// Keithley_487::set_buffer_size()
+// ============================================================================
+void Keithley_487::set_buffer_size (short size) 
+{
+std::stringstream cmd_to_send;
+
+	//- send command : size = number of triggers
+  cmd_to_send << "N" << size << "X" << std::endl;
+	_electrometerProtocol->set_buffer_size(cmd_to_send.str());
+
+}
+
+// ============================================================================
+// Keithley_487::set_triggerMode
+// ============================================================================
+void Keithley_487::set_triggerMode (short trigMod) 
+{
+  if(trigMod<0 || trigMod>K487_triggerModeLimit)
+		throw electrometer::ElectrometerException("OUT_OF_RANGE", 
+												"Trigger mode value invalid. Please enter a value in the range 0 - 7.",
+												"Keithley_487::set_triggerMode( ).");
+
+  std::stringstream cmd_to_send;
+
+  cmd_to_send << trigMod <<  std::endl;
+
+  _electrometerProtocol->set_triggerMode(cmd_to_send.str());
+
+}
+
 // ============================================================================
 // Keithley_487::get_ElectroMeterMode
 // ============================================================================
diff --git a/src/Keithley_617.cpp b/src/Keithley_617.cpp
index cc9d724306338ca437e25c956dbe2a5b2dd18452..4b9dbca68b0df2697c9229f5a06127209bf897c1 100644
--- a/src/Keithley_617.cpp
+++ b/src/Keithley_617.cpp
@@ -36,6 +36,11 @@ static const std::string K617_VonIRangeValue[]= {"AUTO ON","200E12","20E12","2E1
 */
 static short K617_rangeLimit = 12;
 
+/*
+* Trigger Mode limit
+*/
+static short K617_triggerModeLimit = 7;
+
 // ============================================================================
 // Keithley_617::Keithley_617
 // ============================================================================
@@ -134,6 +139,36 @@ std::string Keithley_617::get_ElectroMeterRange (void)
 	return _rangeStr;
 }
 
+// ============================================================================
+// Keithley_617::set_buffer_size()
+// ============================================================================
+void Keithley_617::set_buffer_size (short cmd) 
+{
+std::string cmd_to_send("");
+
+	//- send command : K_617 can store up to 100 points !!!
+	cmd_to_send = "Q0X";
+	_electrometerProtocol->set_buffer_size(cmd_to_send);
+
+}
+
+// ============================================================================
+// Keithley_617::set_triggerMode
+// ============================================================================
+void Keithley_617::set_triggerMode (short trigMod) 
+{
+  if(trigMod<0 || trigMod>K617_triggerModeLimit)
+		throw electrometer::ElectrometerException("OUT_OF_RANGE", 
+												"Trigger mode value invalid. Please enter a value in the range 0 - 7.",
+												"Keithley_617::set_triggerMode( ).");
+
+  std::stringstream cmd_to_send;
+
+  cmd_to_send << trigMod <<  std::endl;
+
+  _electrometerProtocol->set_triggerMode(cmd_to_send.str());
+}
+
 // ============================================================================
 // Keithley_617::get_ElectroMeterMode
 // ============================================================================
diff --git a/src/Keithley_6512.cpp b/src/Keithley_6512.cpp
index 72584a64588e2a8b1573ec80681da5b6753994ae..645a6276615cd0f64386b7d5a129792f006d2693 100644
--- a/src/Keithley_6512.cpp
+++ b/src/Keithley_6512.cpp
@@ -35,6 +35,11 @@ static const std::string K6512_XfdbRangeValue[]= {"AUTO ON","2E-1","2","20","20"
 */
 static short K6512_rangeLimit = 12;
 
+/*
+* Trigger Mode limit
+*/
+static short K6512_triggerModeLimit = 7;
+
 // ============================================================================
 // Keithley_6512::Keithley_6512
 // ============================================================================
@@ -131,6 +136,37 @@ std::string Keithley_6512::get_ElectroMeterRange (void)
 	return _rangeStr;
 }
 
+// ============================================================================
+// Keithley_6512::set_buffer_size()
+// ============================================================================
+void Keithley_6512::set_buffer_size (short ) 
+{
+std::string cmd_to_send("");
+
+	//- send command : Keithley_6512 can store up to 100 points !!!
+	cmd_to_send = "Q0X";
+	_electrometerProtocol->set_buffer_size(cmd_to_send);
+
+}
+
+// ============================================================================
+// Keithley_6512::set_triggerMode
+// ============================================================================
+void Keithley_6512::set_triggerMode (short trigMod) 
+{
+  if(trigMod<0 || trigMod>K6512_triggerModeLimit)
+		throw electrometer::ElectrometerException("OUT_OF_RANGE", 
+												"Trigger mode value invalid. Please enter a value in the range 0 - 7.",
+												"Keithley_6512::set_triggerMode( ).");
+
+  std::stringstream cmd_to_send;
+
+  cmd_to_send << trigMod <<  std::endl;
+
+  _electrometerProtocol->set_triggerMode(cmd_to_send.str());
+
+}
+
 // ============================================================================
 // Keithley_6512::get_ElectroMeterMode
 // ============================================================================