diff --git a/src/controllers/lss/d22/autoSampler/AutoSamplerController.cpp b/src/controllers/lss/d22/autoSampler/AutoSamplerController.cpp
index 2e5fdcf21f291048e4363dbbd37dba2a439d0d98..0aaebf46c12a409a09d38bbaa29e0f2514f964cf 100644
--- a/src/controllers/lss/d22/autoSampler/AutoSamplerController.cpp
+++ b/src/controllers/lss/d22/autoSampler/AutoSamplerController.cpp
@@ -57,6 +57,7 @@ const int32 AutoSamplerController::MAX_Y = 8;
 const int32 AutoSamplerController::MAX_X = 12;
 const int32 AutoSamplerController::SLOW_RATE = 50;
 const int32 AutoSamplerController::FAST_RATE = 100;
+const int32 AutoSamplerController::CLEANNING_TIME = 5;
 
 
 AutoSamplerController::AutoSamplerController(const std::string& controllerName) {
@@ -573,6 +574,8 @@ void AutoSamplerController::start() {
 
 					m_Valve->valveValue.setpoint=NUMBER_VALVE_POSITIONS;
 					m_Valve->startCommand();
+					if(m_isStopped==true)
+						break;
 
 
 				}
@@ -637,11 +640,15 @@ void AutoSamplerController::stop() {
 }
 
 void AutoSamplerController::clean() {
-
-	//int32 cleaning_positions[9] =  {1,2,3,2,4,2,1,5,1} ;
-	int32 cleaning_positions[3] =  {1,2,3} ;
-	//cout << "clean	m_AxisZ->position.setpoint=SAMPLE_OUT;" << endl;
-
+	int32 nb_clean_pos=0;
+	int32 cleaning_positions[8] =  {1,2,3,2,4,2,5,2} ;
+	if (cleaningCycle()==0){
+		nb_clean_pos=4;
+	}else if (cleaningCycle()==1){
+		nb_clean_pos=6;
+	}else if (cleaningCycle()==2){
+		nb_clean_pos=8;
+	}
 	m_AxisZ->position.setpoint=SAMPLE_OUT;
 	m_AxisZ->startCommand();
 
@@ -661,7 +668,7 @@ void AutoSamplerController::clean() {
 	m_AxisZ->position.setpoint=CLEAN_Z_POS;
 	m_AxisZ->startCommand();
 
-	for(int32 indx = 0; indx <3 ; ++indx) {
+	for(int32 indx = 0; indx <nb_clean_pos ; ++indx) {
 		//cout << "clean	m_Valve->valveValue.setpoint=cleaning_positions[indx]" << endl;
 		m_Valve->valveValue.setpoint=cleaning_positions[indx];
 		m_Valve->startCommand();
@@ -670,13 +677,13 @@ void AutoSamplerController::clean() {
 		m_Psd4->valve.setpoint= VALVE_CLEAN_POS;
 		//cout << "clean	m_Psd4->syringePos.setpoint=800 " << endl;
 
-		m_Psd4->syringePos.setpoint=800;
+		//	m_Psd4->syringePos.setpoint=800;
 		m_Psd4->startCommand();
 		//cout << "cleanning**********************************" << endl;
-		sleep(5);
+		sleep(CLEANNING_TIME);
 		//cout << "clean	m_Psd4->syringePos.setpoint=0;" << endl;
-		m_Psd4->syringePos.setpoint=0;
-		m_Psd4->startCommand();
+		//	m_Psd4->syringePos.setpoint=0;
+		//	m_Psd4->startCommand();
 		//cout << "end cleanning**********************************" << endl;
 		if(m_isStopped==true)
 			break;
@@ -704,22 +711,22 @@ void AutoSamplerController::read() {
 		cout <<"raw  data :====" <<m_UfrReader->userdata()<<endl;
 
 
-//		cout <<"iter id :====" <<(*iter)<<endl;
+		//		cout <<"iter id :====" <<(*iter)<<endl;
 		string s1=(*iter);
 		boost::trim_left(s1);
 
 		numberOfSamples=(stoi(s1));
 
-//		cout <<"numberOfSamples  :====" <<s1<<endl;
+		//		cout <<"numberOfSamples  :====" <<s1<<endl;
 		iter++;
 
-//		cout <<"iter id :====" <<(*iter)<<endl;
+		//		cout <<"iter id :====" <<(*iter)<<endl;
 		s1=(*iter);
 		boost::trim_left(s1);
 
 
 		sampleRackName= s1;
-//		cout <<"sampleRackName  :====" <<s1<<endl;
+		//		cout <<"sampleRackName  :====" <<s1<<endl;
 		iter++;
 
 
@@ -727,14 +734,14 @@ void AutoSamplerController::read() {
 
 		while ((iter != tok1.end()) && (i<numberOfSamples())) {
 
-////			cout <<"iter id :====" <<(*iter)<<endl;
+			////			cout <<"iter id :====" <<(*iter)<<endl;
 			s1=(*iter);
 			boost::trim_left(s1);
 
 
-////			cout <<"sample id :====" <<s1<<endl;
+			////			cout <<"sample id :====" <<s1<<endl;
 			string part = s1.substr( 0, 1);
-////			cout <<"part ="<< part<<endl;
+			////			cout <<"part ="<< part<<endl;
 
 			if (stoi(part)==0){
 				isUsed.set(i,false);
@@ -746,7 +753,7 @@ void AutoSamplerController::read() {
 
 
 			part = s1.substr( 1, 1);
-////			cout <<"part ="<< part<<endl;
+			////			cout <<"part ="<< part<<endl;
 			if (stoi(part)==0){
 				isViscous.set(i,false);
 
@@ -755,16 +762,16 @@ void AutoSamplerController::read() {
 
 			}
 			part = s1.substr( 2, 2);
-//			cout <<"part ="<< part<<endl;
+			//			cout <<"part ="<< part<<endl;
 			posX.set(i,stoi(part));
 			part = s1.substr( 4, 2);
-//			cout <<"part ="<< part<<endl;
+			//			cout <<"part ="<< part<<endl;
 			posY.set(i,stoi(part));
 			part = s1.substr( 6, 3);
-//			cout <<"part ="<< part<<endl;
+			//			cout <<"part ="<< part<<endl;
 			sampleExposureTimes.set(i,stoi(part));
 			part = s1.substr( 9, s1.size()-1);
-//			cout <<"part ="<< part<<endl;
+			//			cout <<"part ="<< part<<endl;
 			sampleNames.set(i,part);
 
 			++iter;
diff --git a/src/controllers/lss/d22/autoSampler/AutoSamplerController.h b/src/controllers/lss/d22/autoSampler/AutoSamplerController.h
index c897afd1a126537da1ff81bfd454d78c943d2d5f..af9471e9e868a1caa33a33b210a9ad87abaaed95 100644
--- a/src/controllers/lss/d22/autoSampler/AutoSamplerController.h
+++ b/src/controllers/lss/d22/autoSampler/AutoSamplerController.h
@@ -130,6 +130,7 @@ private:
 	static const int32 MAX_Y;
 	static const int32 SLOW_RATE;
 	static const int32 FAST_RATE;
+	static const   int32 CLEANNING_TIME;
 	bool m_isStopped;
 
 };