diff --git a/src/AlarmHandler.cpp b/src/AlarmHandler.cpp
index d1ac6026237386e3672c7a0a8973da86206b48b2..1add6214e3e25d787bf43e64dd59908e8f1b4c5f 100644
--- a/src/AlarmHandler.cpp
+++ b/src/AlarmHandler.cpp
@@ -5968,8 +5968,13 @@ void AlarmHandler::put_signal_property()
 		}
 	}
 
+    // Identify the alarms that need to be removed.
+    // The alarms that have been identified to be removed have their tag
+    // stored in a std::vector. The vector is later iterated over in a second
+    // step when the alarms get removed. 
 	savedlock->readerIn();
 	map<string, string>::iterator it2=saved_alarms.begin();
+	vector< string > alarms_to_be_erased;
 	while(it2 != saved_alarms.end())
 	{
 		if(!it2->first.empty())//TODO: should not be needed, bug if it happens
@@ -5977,25 +5982,30 @@ void AlarmHandler::put_signal_property()
 			auto found = local_alarms.find(it2->first);
 			if (found == local_alarms.end())
 			{
-				DEBUG_STREAM << __func__<<": DELETING '" << it2->first << "' saved_alarms.size=" << saved_alarms.size() << endl;
-				DECLARE_TIME_VAR	t0, t1;
-				GET_TIME(t0);
-				alarms.delete_alarm_conf_db(it2->first);
-				GET_TIME(t1);
-				DEBUG_STREAM << __func__ << ": DELETED '" <<it2->first << "' in " << ELAPSED(t0, t1) << " ms saved_alarms.size=" << saved_alarms.size() << endl;
-				savedlock->readerOut();
-				savedlock->writerIn();
-				saved_alarms.erase(it2);
-				savedlock->writerOut();
-				savedlock->readerIn();
+				alarms_to_be_erased.push_back(it2->first);
 			}
 		}
 		if(it2 != saved_alarms.end())
 			it2++;
 	}
 	savedlock->readerOut();
-	
 
+    // Now remove the alarms from the property in the TangoDB and saved_alarms.
+    if(!alarms_to_be_erased.empty())
+    {
+        savedlock->writerIn();
+        for(auto iter{alarms_to_be_erased.begin()}; iter != alarms_to_be_erased.end(); ++iter)
+        {
+            DEBUG_STREAM << __func__<<": DELETING '" << *iter << "' saved_alarms.size=" << saved_alarms.size() << endl;
+            DECLARE_TIME_VAR	t0, t1;
+            GET_TIME(t0);
+            alarms.delete_alarm_conf_db(*iter);
+            GET_TIME(t1);
+            DEBUG_STREAM << __func__ << ": DELETED '" << *iter << "' in " << ELAPSED(t0, t1) << " ms saved_alarms.size=" << saved_alarms.size() << endl;
+            saved_alarms.erase(saved_alarms.find(*iter));
+        }
+        savedlock->writerOut();
+    }
 
 	Tango::DbData	data;
 	data.push_back(Tango::DbDatum("AlarmList"));