diff --git a/src/E2Sextupole.cpp b/src/E2Sextupole.cpp
index 1d78fecd5ad80c00f75ac80f62a0bc861c44b868..f45670eaf7640c7cb6eec739361ee3074d909384 100644
--- a/src/E2Sextupole.cpp
+++ b/src/E2Sextupole.cpp
@@ -170,7 +170,7 @@ void E2Sextupole::init_device()
 	set_state(Tango::INIT);
 	set_status("Init");
 	attr_Current_read = new Tango::DevDouble[1];
-	first_read = true;
+	design_strength_initialized = false;
 	/*----- PROTECTED REGION END -----*/	//	E2Sextupole::init_device_before
 
 
@@ -241,21 +241,9 @@ void E2Sextupole::init_device()
 	cursetAtt = &(get_device_attr()->get_w_attr_by_name("Current"));
 	init_strengths();
 
-	// register callaback for current
+	// register callback for event subscription with a delay so the memorized variables are read dn updated from DB AFTER init_device() exit
 
-	try{
-		current_cb = new CurrentEventCallback(this);
-		current_event_id = current_dev->subscribe_event("current",Tango::CHANGE_EVENT,current_cb);
-		current_set_event_id = current_dev->subscribe_event("currentSet",Tango::CHANGE_EVENT,current_cb);
-		state_event_id = current_dev->subscribe_event("State",Tango::CHANGE_EVENT,current_cb);
-	}
-	catch(Tango::DevFailed &ex){
-		current_cb = nullptr;
-		ERROR_STREAM << "failed to subscribe Tango  events for " << currentDevice;
-		set_state(Tango::UNKNOWN);
-		set_status("failed to subscribe Tango  events for CurrentDevice");
-		return;
-	}
+	//delayed_subscribe(subscribeDelay);
 	/*----- PROTECTED REGION END -----*/	//	E2Sextupole::init_device
 }
 
@@ -762,6 +750,11 @@ void E2Sextupole::write_DesignStrength(Tango::WAttribute &attr)
 	//	Add your own code
 	/* clang-format off */
 	*attr_DesignStrength_read = w_val;
+	if (design_strength_initialized == false){
+		subscribe_events();
+		design_strength_initialized = true;
+		INFO_STREAM << "w design strength" << *attr_DesignStrength_read;
+	}
 	/*----- PROTECTED REGION END -----*/	//	E2Sextupole::write_DesignStrength
 }
 
@@ -925,18 +918,17 @@ void E2Sextupole::update_values(void)
 	attr_CorrectionStrength_read[0] = attr_Strength_read[0] - attr_ResonanceStrength_read[0];
 	*/
 	//----------------------------------------------
-	if (first_read){
-			INFO_STREAM << *attr_DesignStrength_read ;
-			first_read = false;
-	}
-	//INFO_STREAM << *attr_DesignStrength_read ;
+
+
+	//INFO_STREAM << "design strength: " << *attr_DesignStrength_read;
+
 	std::vector<Tango::DevDouble> read_curr;
 	std::vector<Tango::DevDouble> read_strength;
 	read_curr.push_back(*attr_Current_read);
 	sextupole->compute_strengths(magnet_rigidity_inv, read_curr, read_strength);
 	attr_Strength_read[0] =  read_strength[0];
-	attr_ResonanceStrength_read[0] = attr_Strength_read[0] - wValCorrStrength;
-	attr_CorrectionStrength_read[0] = attr_Strength_read[0] - wValResStrength;
+	//attr_ResonanceStrength_read[0] = attr_Strength_read[0] - wValCorrStrength;
+	attr_CorrectionStrength_read[0] = attr_Strength_read[0] -( attr_DesignStrength_read[0] +  attr_ResonanceStrength_read[0]);
 
 	//handle state - status
 	switch (get_state()) {
@@ -961,6 +953,33 @@ void E2Sextupole::update_values(void)
 
 }
 
+void E2Sextupole::subscribe_events(void)
+{
+	try{
+			current_cb = new CurrentEventCallback(this);
+			current_event_id = current_dev->subscribe_event("current",Tango::CHANGE_EVENT,current_cb);
+			current_set_event_id = current_dev->subscribe_event("currentSet",Tango::CHANGE_EVENT,current_cb);
+			state_event_id = current_dev->subscribe_event("State",Tango::CHANGE_EVENT,current_cb);
+		}
+		catch(Tango::DevFailed &ex){
+			current_cb = nullptr;
+			ERROR_STREAM << "failed to subscribe Tango  events for " << currentDevice;
+			set_state(Tango::UNKNOWN);
+			set_status("failed to subscribe Tango  events for CurrentDevice");
+			return;
+		}
+}
+/* trick to start sunbscrition afetr some delay
+void E2Sextupole::delayed_subscribe(int delayMs)
+#include <thread>
+#include <chrono>
+{
+	std::thread([this, delayMs]() {
+		std::this_thread::sleep_for(std::chrono::milliseconds(delayMs));
+		this->subscribe_events();  // Call the method after the delay
+	}).detach();  // Detach the thread to run independently
+}
+*/
 //------------------------------------------------------------
 //------------------------------------------------------------
 CurrentEventCallback::CurrentEventCallback(E2Sextupole* sext) //callback constructor
diff --git a/src/E2Sextupole.h b/src/E2Sextupole.h
index 00a9bddf440b5076d423af869d18b9cdfe904cf2..a2c777c95c741ed1adaacf52453fc3720e5a9df0 100644
--- a/src/E2Sextupole.h
+++ b/src/E2Sextupole.h
@@ -93,11 +93,11 @@ class E2Sextupole : public TANGO_BASE_CLASS
 	Tango::WAttribute *resonanceAtt;
 	std::vector<double> set_current; //the actual set point of the current (from the power supply)  used for strength calculations
 	std::vector<double> set_strength; //the strength set point
+	bool design_strength_initialized; //true whe design strenfght has been called at least one , first call is to init valude from DB
 public:
 	omni_mutex iomutex; //guard for event and write interference
 	Tango::DevDouble wValCorrStrength; //last CorrectionStrength write value
 	Tango::DevDouble wValResStrength;  //last ResonanceStrength write value
-	bool first_read;
 /* clang-format off */
 /*----- PROTECTED REGION END -----*/	//	E2Sextupole::Data Members
 
@@ -315,6 +315,8 @@ public:
 	void set_current_write(const double& curr);
 	void update_values(void); //update internal calculated values
 	void init_strengths(void); // initialize strengths from power supply values
+	void subscribe_events(void); //subcribe events to power supply
+	//void delayed_subscribe(int delayedMs);
 /* clang-format off */
 /*----- PROTECTED REGION END -----*/	//	E2Sextupole::Additional Method prototypes
 };