diff --git a/MAC/Navigator2/panels/objects/Alerts/alarms.pnl b/MAC/Navigator2/panels/objects/Alerts/alarms.pnl
index db7e6fcfed73107ee5d1bd98a0077f118120efb3..24029491e329f0b93b19fdfbdac3f0d1e8b5a3a8 100644
--- a/MAC/Navigator2/panels/objects/Alerts/alarms.pnl
+++ b/MAC/Navigator2/panels/objects/Alerts/alarms.pnl
@@ -30,6 +30,7 @@ string choice=\"\";
 string baseDP=\"\";
 bool needsSave=false;
 bool bDoubleClicked=false;
+mapping    g_alarms_copy;
 
 
 // routine for single mouse click
@@ -153,7 +154,6 @@ void rClick(int row) {
   }
 }
 
-
 // *******************************************
 // Name : redraw_table
 // *******************************************
@@ -209,14 +209,13 @@ void redraw_table() {
 void acknowledgeAlarm(int iPos,string dp,string message,bool save) {
   // new state
   int state;
-  if (g_alarms[ \"STATE\" ][iPos] == SUSPICIOUS_CAME ||
-      g_alarms[ \"STATE\" ][iPos] == SUSPICIOUS_WENT) {
+  if (g_alarms_copy[ \"STATE\" ][iPos] == SUSPICIOUS_CAME ||
+      g_alarms_copy[ \"STATE\" ][iPos] == SUSPICIOUS_WENT) {
     state = SUSPICIOUS;
-  } else if (g_alarms[ \"STATE\" ][iPos] == BROKEN_CAME ||
-      g_alarms[ \"STATE\" ][iPos] == BROKEN_WENT) {
+  } else if (g_alarms_copy[ \"STATE\" ][iPos] == BROKEN_CAME ||
+      g_alarms_copy[ \"STATE\" ][iPos] == BROKEN_WENT) {
     state = BROKEN;
   }
-  DebugN(\"new state: \"+state);
   // check if the old state in the database is allready lower then the one in the global list.
   // in that case we need to keep the DB state, since the state could have been changed b4 the ack was done.
   // and the complete alarm can be removed from the global.
@@ -224,26 +223,20 @@ void acknowledgeAlarm(int iPos,string dp,string message,bool save) {
   bool changed = false;
   if (dpExists(dp)) {
     dpGet(dp,dpState);
-    DebugN(\"old state: \"+dpState);
     
     if (dpState < state) {
-      DebugN(\"position: \"+iPos+\" remove from database\");
       needsSave=true;
-      dynRemove(g_alarms[\"DPNAME\" ],iPos);
-      dynRemove(g_alarms[\"TIME\"   ],iPos);
-      dynRemove(g_alarms[\"STATE\"  ],iPos);
-      dynRemove(g_alarms[\"MESSAGE\"],iPos);
-      dynRemove(g_alarms[\"STATUS\" ],iPos);
-      if (save) {
-      }    
-      saveAlarms();
-    } else if (save) {
+      dynRemove(g_alarms_copy[\"DPNAME\" ],iPos);
+      dynRemove(g_alarms_copy[\"TIME\"   ],iPos);
+      dynRemove(g_alarms_copy[\"STATE\"  ],iPos);
+      dynRemove(g_alarms_copy[\"MESSAGE\"],iPos);
+      dynRemove(g_alarms_copy[\"STATUS\" ],iPos);
+    } else {
      
       // now we determined the new status and state we need to write it in the databasepoint
       // to trigger the complete chain again. ofcourse this needs to be done on the right database, so we get the
       // systemname from the dp first.
     
-      DebugN(\"otherwise trigger alarm on : \"+sys);
       string sys = dpSubStr(dp,DPSUB_SYS);
       if (dpExists(sys+\"__navObjectState\")) {
         dpSet(sys+\"__navObjectState.DPName\",dp,
@@ -253,12 +246,12 @@ void acknowledgeAlarm(int iPos,string dp,string message,bool save) {
       }
     }    
   } else {
-    LOG_WARN(\"navigator_alerts.pnl:RightMouseClick|dp is not existing\");
-    
-    // need to check if save and needssave is true to deal with last element is faulty and the database does need to be saved
-    if (save && needsSaving) {
-      saveAlarms();
-    }
+    LOG_WARN(\"navigator_alerts.pnl:RightMouseClick|dp is not existing\");    
+  }
+
+  // need to check if save and needssave is true to deal with last element is faulty and the database does need to be saved
+  if (save && needsSave) {
+    saveAlarms();
   }
 }
 
@@ -267,7 +260,7 @@ private void saveAlarms() {
   if (dpExists(DPNAME_NAVIGATOR + \".alarms\")) {
     LOG_DEBUG(\"navigator_alerts.pnl:RightMouseClick|Storing the alarms in db\");
     setAlarms(DPNAME_NAVIGATOR + \".alarms\",
-              g_alarms[ \"TIME\"],g_alarms[ \"DPNAME\"   ],g_alarms[ \"MESSAGE\"  ],g_alarms[ \"STATE\"    ],g_alarms[ \"STATUS\"   ]);
+              g_alarms_copy[ \"TIME\"],g_alarms_copy[ \"DPNAME\"   ],g_alarms_copy[ \"MESSAGE\"  ],g_alarms_copy[ \"STATE\"    ],g_alarms_copy[ \"STATUS\"   ]);
     needsSave=false;
   } else {
     LOG_ERROR(\"navigator_alerts.pnl:RightMouseClick|Couldn't write alarms to navigator\");
@@ -282,87 +275,78 @@ private void saveAlarms() {
 }
 
 void acknowledge(string what) {
+  
+  g_alarms_copy = g_alarms;
 
   dyn_int ackList;
-  for (int iPos=1; iPos<=dynlen(g_alarms[\"DPNAME\"])  ; iPos++) {
-    DebugN(\"Looking at dp: \" + g_alarms[\"DPNAME\"][iPos]+\" \"+g_alarms[ \"STATE\" ][iPos]+\" \"+g_alarms[ \"STATUS\" ][iPos]);
+  for (int iPos=1; iPos<=dynlen(g_alarms_copy[\"DPNAME\"])  ; iPos++) {
   
     switch(what) {
       case (\"alarmall\") : {
-        if ((g_alarms[ \"STATE\" ][iPos] == BROKEN_CAME ||
-            g_alarms[ \"STATE\" ][iPos] == BROKEN_WENT) &&
-            g_alarms[\"STATUS\"][iPos] != ACK ) {
-          DebugN(\"alarmall\");
+        if ((g_alarms_copy[ \"STATE\" ][iPos] == BROKEN_CAME ||
+            g_alarms_copy[ \"STATE\" ][iPos] == BROKEN_WENT) &&
+            g_alarms_copy[\"STATUS\"][iPos] != ACK ) {
           dynAppend(ackList,iPos);
         }
         break;
       }
       case (\"alarmcame\") : {
-        if (g_alarms[ \"STATE\" ][iPos] == BROKEN_CAME &&
-            g_alarms[\"STATUS\"][iPos] != ACK ) {
-          DebugN(\"alarmcame\");
+        if (g_alarms_copy[ \"STATE\" ][iPos] == BROKEN_CAME &&
+            g_alarms_copy[\"STATUS\"][iPos] != ACK ) {
           dynAppend(ackList,iPos);
         }
         break;
       }
       case (\"alarmwent\") : {
-        if (g_alarms[ \"STATE\" ][iPos] == BROKEN_WENT &&
-            g_alarms[\"STATUS\"][iPos] != ACK ) {
-          DebugN(\"alarmwent\");
+        if (g_alarms_copy[ \"STATE\" ][iPos] == BROKEN_WENT &&
+            g_alarms_copy[\"STATUS\"][iPos] != ACK ) {
           dynAppend(ackList,iPos);
         }
         break;
       }
       case (\"suspall\") : {
-        if ((g_alarms[ \"STATE\" ][iPos] == SUSPICIOUS_CAME ||
-            g_alarms[ \"STATE\" ][iPos] == SUSPICIOUS_WENT) &&
-            g_alarms[\"STATUS\"][iPos] != ACK ) {
-          DebugN(\"suspall\");
+        if ((g_alarms_copy[ \"STATE\" ][iPos] == SUSPICIOUS_CAME ||
+            g_alarms_copy[ \"STATE\" ][iPos] == SUSPICIOUS_WENT) &&
+            g_alarms_copy[\"STATUS\"][iPos] != ACK ) {
           dynAppend(ackList,iPos);
         }
         break;
       }
       case (\"suspcame\") : {
-        if (g_alarms[ \"STATE\" ][iPos] == SUSPICIOUS_CAME &&
-            g_alarms[\"STATUS\"][iPos] != ACK ) {
-          DebugN(\"suspcame\");
+        if (g_alarms_copy[ \"STATE\" ][iPos] == SUSPICIOUS_CAME &&
+            g_alarms_copy[\"STATUS\"][iPos] != ACK ) {
           dynAppend(ackList,iPos);
         }
         break;
       }
       case (\"suspwent\") : {
-        if ( g_alarms[ \"STATE\" ][iPos] == SUSPICIOUS_WENT &&
-            g_alarms[\"STATUS\"][iPos] != ACK ) {
-          DebugN(\"suspwent\");
+        if ( g_alarms_copy[ \"STATE\" ][iPos] == SUSPICIOUS_WENT &&
+            g_alarms_copy[\"STATUS\"][iPos] != ACK ) {
           dynAppend(ackList,iPos);
         }
         break;
       }
       case (\"all\") : {
-        if (g_alarms[\"STATUS\"][iPos] != ACK ) {
-          DebugN(\"all\");
+        if (g_alarms_copy[\"STATUS\"][iPos] != ACK ) {
           dynAppend(ackList,iPos);
          }
         break;
       }
       case (\"allcame\") : {
-        if (g_alarms[\"STATUS\"][iPos] == CAME ) {
-          DebugN(\"allcame\");
+        if (g_alarms_copy[\"STATUS\"][iPos] == CAME ) {
           dynAppend(ackList,iPos);
         }
         break;
       }
       case (\"allwent\") : {
-        if (g_alarms[\"STATUS\"][iPos] == WENT ) {
-          DebugN(\"allwent\");
+        if (g_alarms_copy[\"STATUS\"][iPos] == WENT ) {
           dynAppend(ackList,iPos);
         }
         break;
       }
       case (\"allstationtest\") : {  
-        if (strpos(g_alarms[\"MESSAGE\"][iPos],\"stationtest\") >= 0 &&
-                   g_alarms[\"STATUS\"][iPos] != ACK ) {
-          DebugN(\"allstationtest\");
+        if (strpos(g_alarms_copy[\"MESSAGE\"][iPos],\"stationtest\") >= 0 &&
+                   g_alarms_copy[\"STATUS\"][iPos] != ACK ) {
           dynAppend(ackList,iPos);
         }
         break;
@@ -373,10 +357,9 @@ void acknowledge(string what) {
   // loop the list backwards to keep the dyn_list intact and same positions, only trigger the save with the last element.
   bool save = false;
   for (int jPos=dynlen(ackList); jPos>0; jPos--) {
-    string dp = g_alarms[\"DPNAME\"][ackList[jPos]];
-    string message = g_alarms[\"MESSAGE\"][ackList[jPos]];
+    string dp = g_alarms_copy[\"DPNAME\"][ackList[jPos]];
+    string message = g_alarms_copy[\"MESSAGE\"][ackList[jPos]];
   if (jPos == 1) save = true;
-    DebugN(\"deleting #\"+ackList[jPos]+ \"   \"+dp+\"    \"+message+\"    \"+save);
     acknowledgeAlarm(ackList[jPos],dp,message,save);    
   }
 }" 0
@@ -466,7 +449,7 @@ LANG:1 32 Arial Black,-1,11,5,50,0,0,0,0,0
 26 2
 "CASCADE_BUTTON1"
 ""
-1 0 0 E E E 0 E 1 E N "_ButtonText" E N "_Button" E E
+1 0 0 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
  E E
 3 0 0 0 0 0
 E E E
diff --git a/MAC/Navigator2/scripts/monitorAlarms.ctl b/MAC/Navigator2/scripts/monitorAlarms.ctl
index fd50ba8e2c33adcd5b557b1d0f5481c23533a2de..1549495b47d9ffdb2d43e465f7f827ee8e3aa627 100644
--- a/MAC/Navigator2/scripts/monitorAlarms.ctl
+++ b/MAC/Navigator2/scripts/monitorAlarms.ctl
@@ -160,7 +160,7 @@ void objectStateCallback(string ident, dyn_dyn_anytype aResult) {
   // Loop through all alarms in this callback
   for (int nr = 2; nr < dynlen (aResult);nr+=4) {
     //get the stateNr and DP that go with this message
-    if (!dpExists(aResult[n][1])) continue;
+    if (!dpExists(aResult[nr][1])) continue;
     time aTime     = getCurrentTime();
     string aSystem = dpSubStr(aResult[nr][1],DPSUB_SYS);
     string aDP     = aResult[nr][2];