diff --git a/MAC/Navigator2/panels/Hardware/Station.pnl b/MAC/Navigator2/panels/Hardware/Station.pnl
index 49a7c2b367c80824fb74ad4894f88d255517c080..86c6e900ed20d236efe341bba584ab5ccf14d049 100644
--- a/MAC/Navigator2/panels/Hardware/Station.pnl
+++ b/MAC/Navigator2/panels/Hardware/Station.pnl
@@ -237,7 +237,7 @@ void redraw(string mode) {
     expandFactorY=expandFactorX;
   }
 
-  LOG_DEBUG(\"Final expandfactors: \" + expandFactorX+\" \"+ expandFactorY);
+  LOG_DEBUG(\"Station.pnl:redraw|Final expandfactors: \" + expandFactorX+\" \"+ expandFactorY);
   
   // set the hardware selectable items
   // For this panel the Cabinet and the Antenna's in a choosen layout should be selectable 
diff --git a/MAC/Navigator2/panels/Processes/MainCU_Processes.pnl b/MAC/Navigator2/panels/Processes/MainCU_Processes.pnl
index 9c2da31136bed9f47810cb885de809dd328e727d..381ac6d686e045011b7d852c94a91e92bf5bc074 100644
--- a/MAC/Navigator2/panels/Processes/MainCU_Processes.pnl
+++ b/MAC/Navigator2/panels/Processes/MainCU_Processes.pnl
@@ -40,6 +40,7 @@ void TriggerCallback(string dp1, bool aTrig) {
   dynAppend(processMatch,dynPatternMatch(\"KVLogger\",strHighlight));
   dynAppend(processMatch,dynPatternMatch(\"LogProcessor\",strHighlight));
   dynAppend(processMatch,dynPatternMatch(\"ServiceBroker\",strHighlight));
+  dynAppend(processMatch,dynPatternMatch(\"SASGateway\",strHighlight));  
   dynAppend(processMatch,dynPatternMatch(\"MACScheduler\",strHighlight));
   dynAppend(processMatch,dynPatternMatch(\"SoftwareMonitor\",strHighlight));
   dynAppend(processMatch,dynPatternMatch(\"ObsCtrl\",strHighlight));
@@ -416,11 +417,11 @@ LANG:1 6 logMsg
 0
 1 207 21 "" 3
 0
-1 208 21 "" 2
+1 208 21 "0" 1
 0
-1 209 21 "" 6
+1 209 21 "" 2
 0
-1 210 21 "0" 1
+1 210 21 "" 6
 0
 0
 LAYER, 1 
diff --git a/MAC/Navigator2/panels/Processes/Station_Processes.pnl b/MAC/Navigator2/panels/Processes/Station_Processes.pnl
index d79eb74371215eda42faff77d8ebdde16116ee42..4c69551ffd5cd6632d17c60a833679464cc1fff0 100644
--- a/MAC/Navigator2/panels/Processes/Station_Processes.pnl
+++ b/MAC/Navigator2/panels/Processes/Station_Processes.pnl
@@ -53,6 +53,7 @@ void TriggerCallback(string dp1, bool aTrig) {
   dynAppend(processMatch,dynPatternMatch(\"BeamCtrl\",strHighlight));
   dynAppend(processMatch,dynPatternMatch(\"CalCtrl\",strHighlight));
   dynAppend(processMatch,dynPatternMatch(\"TBBCtrl\",strHighlight));
+  dynAppend(processMatch,dynPatternMatch(\"MACInfoServer\",strHighlight));
   
  
   LOG_DEBUG(\"Station_Processes.pnl:Trigger Callback|from strHighlight ObsMatch found: \"+obsMatch);
@@ -400,55 +401,55 @@ LANG:1 6 logMsg
 0
 1 208 32 "" 6
 0
-1 214 34 "" 4
+1 209 34 "" 4
 0
-1 215 34 "" 3
+1 210 34 "" 3
 0
-1 216 34 "" 2
+1 211 34 "0" 1
 0
-1 217 34 "" 6
+1 212 34 "" 2
 0
-1 218 34 "0" 1
+1 213 34 "" 6
 0
-1 219 35 "" 4
+1 214 35 "" 4
 0
-1 220 35 "" 3
+1 215 35 "" 3
 0
-1 221 35 "" 2
+1 216 35 "0" 1
 0
-1 222 35 "" 6
+1 217 35 "" 2
 0
-1 223 35 "0" 1
+1 218 35 "" 6
 0
-1 224 36 "" 4
+1 219 36 "" 4
 0
-1 225 36 "" 3
+1 220 36 "" 3
 0
-1 226 36 "" 2
+1 221 36 "0" 1
 0
-1 227 36 "" 6
+1 222 36 "" 2
 0
-1 228 36 "0" 1
+1 223 36 "" 6
 0
-1 229 37 "" 4
+1 224 37 "" 4
 0
-1 230 37 "" 3
+1 225 37 "" 3
 0
-1 231 37 "" 2
+1 226 37 "0" 1
 0
-1 232 37 "" 6
+1 227 37 "" 2
 0
-1 233 37 "0" 1
+1 228 37 "" 6
 0
-1 234 38 "" 4
+1 229 38 "" 4
 0
-1 235 38 "" 3
+1 230 38 "" 3
 0
-1 236 38 "" 2
+1 231 38 "0" 1
 0
-1 237 38 "" 6
+1 232 38 "" 2
 0
-1 238 38 "0" 1
+1 233 38 "" 6
 0
 0
 LAYER, 1 
diff --git a/MAC/Navigator2/panels/Test/Event_Viewer.pnl b/MAC/Navigator2/panels/Test/Event_Viewer.pnl
index e592e66e22ae830c0d5abd067306dc13c1131445..de5f54a046f667933f9bbde153a722a322bac418 100644
--- a/MAC/Navigator2/panels/Test/Event_Viewer.pnl
+++ b/MAC/Navigator2/panels/Test/Event_Viewer.pnl
@@ -76,7 +76,7 @@ LANG:1 0
 13 320
 "PUSH_BUTTON10"
 ""
-1 950 301 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
+1 950 511 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
  E E
 155 0 0 0 0 0
 E E E
@@ -88,7 +88,7 @@ LANG:1 0
 1
 LANG:1 96 -*-Arial Black-*-r-normal-*-11-*-100-100-*-*-iso8859-1|-11,0,0,0,505,0,0,0,0,0,0,0,0,Arial Black
 0 ""
- 948 299 1098 326
+ 948 509 1098 536
 
 T 
 1
@@ -650,7 +650,7 @@ LANG:1 18 Active Datapoint:
 13 178
 "PUSH_BUTTON1"
 ""
-1 950 98 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
+1 950 308 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
  E E
 127 0 0 0 0 0
 E E E
@@ -662,7 +662,7 @@ LANG:1 0
 1
 LANG:1 96 -*-Arial Black-*-r-normal-*-11-*-100-100-*-*-iso8859-1|-11,0,0,0,505,0,0,0,0,0,0,0,0,Arial Black
 0 ""
- 948 96 1098 123
+ 948 306 1098 333
 
 T 
 1
@@ -675,7 +675,7 @@ LANG:1 19 show g_observations
 13 179
 "PUSH_BUTTON2"
 ""
-1 17 447 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
+1 17 657 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
  E E
 129 0 0 0 0 0
 E E E
@@ -687,7 +687,7 @@ LANG:1 0
 1
 LANG:1 96 -*-Arial Black-*-r-normal-*-11-*-100-100-*-*-iso8859-1|-11,0,0,0,505,0,0,0,0,0,0,0,0,Arial Black
 0 ""
- 948 125 1098 152
+ 948 335 1098 362
 
 T 
 1
@@ -700,7 +700,7 @@ LANG:1 17 show strHighlight
 13 180
 "PUSH_BUTTON3"
 ""
-1 950 156 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
+1 950 366 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
  E E
 131 0 0 0 0 0
 E E E
@@ -712,7 +712,7 @@ LANG:1 0
 1
 LANG:1 96 -*-Arial Black-*-r-normal-*-11-*-100-100-*-*-iso8859-1|-11,0,0,0,505,0,0,0,0,0,0,0,0,Arial Black
 0 ""
- 948 154 1098 181
+ 948 364 1098 391
 
 T 
 1
@@ -812,7 +812,7 @@ LANG:1 96 -*-Arial Black-*-r-normal-*-11-*-100-100-*-*-iso8859-1|-11,0,0,0,505,0
 13 227
 "PUSH_BUTTON5"
 ""
-1 950 70 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
+1 950 280 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
  E E
 140 0 0 0 0 0
 E E E
@@ -824,7 +824,7 @@ LANG:1 0
 1
 LANG:1 101 -*-MS Shell Dlg-bold-r-normal-*-11-*-100-100-*-*-iso8859-1|-11,0,0,0,758,0,0,0,0,0,0,0,0,MS Shell Dlg
 0 ""
- 948 68 1098 94
+ 948 278 1098 304
 
 T 
 1
@@ -896,7 +896,7 @@ E
     sel = LOGLEVEL_FATAL;
   } 
   
-  LOG_TRACE(\"navigator_viewSelection.pnl:Changed| changing loglevel to :\"+selected);
+  LOG_TRACE(\"Event_Viewer.pnl:Changed| changing loglevel to :\"+selected);
   setLoglevel(sel);
                   
 }" 0
@@ -940,7 +940,7 @@ E E 1 3 1 2 1 E  940 10 940 740
 13 316
 "PUSH_BUTTON6"
 ""
-1 950 185 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
+1 950 395 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
  E E
 147 0 0 0 0 0
 E E E
@@ -952,7 +952,7 @@ LANG:1 0
 1
 LANG:1 96 -*-Arial Black-*-r-normal-*-11-*-100-100-*-*-iso8859-1|-11,0,0,0,505,0,0,0,0,0,0,0,0,Arial Black
 0 ""
- 948 183 1098 210
+ 948 393 1098 420
 
 T 
 1
@@ -969,7 +969,7 @@ LANG:1 19 show g_stationList
 13 317
 "PUSH_BUTTON7"
 ""
-1 950 214 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
+1 950 424 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
  E E
 149 0 0 0 0 0
 E E E
@@ -981,7 +981,7 @@ LANG:1 0
 1
 LANG:1 96 -*-Arial Black-*-r-normal-*-11-*-100-100-*-*-iso8859-1|-11,0,0,0,505,0,0,0,0,0,0,0,0,Arial Black
 0 ""
- 948 212 1098 239
+ 948 422 1098 449
 
 T 
 1
@@ -998,7 +998,7 @@ LANG:1 19 show g_cabinetList
 13 318
 "PUSH_BUTTON8"
 ""
-1 950 243 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
+1 950 453 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
  E E
 151 0 0 0 0 0
 E E E
@@ -1010,7 +1010,7 @@ LANG:1 0
 1
 LANG:1 96 -*-Arial Black-*-r-normal-*-11-*-100-100-*-*-iso8859-1|-11,0,0,0,505,0,0,0,0,0,0,0,0,Arial Black
 0 ""
- 948 241 1098 268
+ 948 451 1098 478
 
 T 
 1
@@ -1027,7 +1027,7 @@ LANG:1 19 show g_subrackList
 13 319
 "PUSH_BUTTON9"
 ""
-1 950 272 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
+1 950 482 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
  E E
 153 0 0 0 0 0
 E E E
@@ -1039,7 +1039,7 @@ LANG:1 0
 1
 LANG:1 96 -*-Arial Black-*-r-normal-*-11-*-100-100-*-*-iso8859-1|-11,0,0,0,505,0,0,0,0,0,0,0,0,Arial Black
 0 ""
- 948 270 1098 297
+ 948 480 1098 507
 
 T 
 1
@@ -1056,7 +1056,7 @@ LANG:1 15 show g_RSPList
 13 321
 "PUSH_BUTTON11"
 ""
-1 950 330 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
+1 950 540 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
  E E
 157 0 0 0 0 0
 E E E
@@ -1068,7 +1068,7 @@ LANG:1 0
 1
 LANG:1 96 -*-Arial Black-*-r-normal-*-11-*-100-100-*-*-iso8859-1|-11,0,0,0,505,0,0,0,0,0,0,0,0,Arial Black
 0 ""
- 948 328 1098 355
+ 948 538 1098 565
 
 T 
 1
@@ -1085,7 +1085,7 @@ LANG:1 15 show g_RCUList
 13 364
 "PUSH_BUTTON12"
 ""
-1 950 360 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
+1 950 570 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
  E E
 159 0 0 0 0 0
 E E E
@@ -1097,7 +1097,7 @@ LANG:1 0
 1
 LANG:1 96 -*-Arial Black-*-r-normal-*-11-*-100-100-*-*-iso8859-1|-11,0,0,0,505,0,0,0,0,0,0,0,0,Arial Black
 0 ""
- 948 358 1112 385
+ 948 568 1112 595
 
 T 
 1
@@ -1111,6 +1111,68 @@ LANG:1 24 show g_observationsList
   }
 }" 0
  E E E
+13 407
+"PUSH_BUTTON13"
+""
+1 953 50 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
+ E E
+160 0 0 0 0 0
+E E E
+0
+1
+LANG:1 0 
+
+0
+1
+LANG:1 98 -*-MS Shell Dlg-*-r-normal-*-*-80-100-100-*-*-iso8859-1|-11,0,0,0,505,0,0,0,0,0,0,0,0,MS Shell Dlg
+0 ""
+ 951 48 1055 72
+
+T 
+1
+LANG:1 18 Clear searchArrays
+"main()
+{
+  // reset scopes and searchStrings:
+  if (dpExists(DPNAME_LOGLEVEL+\".logScope\") && dpExists(DPNAME_LOGLEVEL+\".logScope\")) {
+    dpSet(DPNAME_LOGLEVEL+\".logScope\",makeDynString(\"\"),
+          DPNAME_LOGLEVEL+\".searchString\",makeDynString(\"\"));
+  }
+}" 0
+ E E E
+13 408
+"PUSH_BUTTON14"
+""
+1 953 72 E E E 1 E 1 E N "_ButtonText" E N "_Button" E E
+ E E
+162 0 0 0 0 0
+E E E
+0
+1
+LANG:1 0 
+
+0
+1
+LANG:1 98 -*-MS Shell Dlg-*-r-normal-*-*-80-100-100-*-*-iso8859-1|-11,0,0,0,505,0,0,0,0,0,0,0,0,MS Shell Dlg
+0 ""
+ 951 70 1055 94
+
+T 
+1
+LANG:1 17 Show searchArrays
+"main()
+{
+  dyn_string anArray;
+  if (dpExists(DPNAME_LOGLEVEL+\".logScope\")) {
+    dpGet(DPNAME_LOGLEVEL+\".logScope\",anArray);
+    showDynArray(anArray,\"logScope\");
+  }
+  if (dpExists(DPNAME_LOGLEVEL+\".searchString\")) {
+    dpGet(DPNAME_LOGLEVEL+\".searchString\",anArray);
+    showDynArray(anArray,\"searchString\");
+  }
+}" 0
+ E E E
 0
 LAYER, 1 
 1
diff --git a/MAC/Navigator2/panels/Test/test.pnl b/MAC/Navigator2/panels/Test/test.pnl
index 7e097104c32c3a49dbf783618741bb2b5cb6a4ed..78ef4eca0ed1f11de9590abf700abf377b0a4b6c 100644
--- a/MAC/Navigator2/panels/Test/test.pnl
+++ b/MAC/Navigator2/panels/Test/test.pnl
@@ -2,23 +2,7 @@ V 10
 1
 LANG:1 0 
 PANEL,-1 -1 500 396 N "_3DFace" 0
-"main()
-{
-  if (dpConnect(\"out\",true,\"MCU001:LOFAR_PermSW\")< 0) {
-    DebugN(\"Error connecting: \"+getLastError());
-  } else {
-    DebugN(\"Connected\");
-  }
-}
-
-void out(string dp1,int i1,
-         string dp2, int i2,
-         string dp3, string s1) {
-  DebugN(dp1+\" : \"+ i1);
-  DebugN(dp2+\" : \"+ i2);
-  DebugN(dp3+\" : \"+ s1);
-}" 0
- E E E E 1 -1 -1 0  50 30
+E E E E E 1 -1 -1 0  50 30
 ""0  1
 E E 2
 "CBRef" "1"
@@ -28,6 +12,18 @@ DISPLAY_LAYER, 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
 LAYER, 0 
 1
 LANG:1 0 
+1 1 6 "" 0
+0
+1 2 6 "3" 0
+0
+1 3 6 "" 5
+0
+1 4 7 "" 0
+0
+1 5 7 "3" 0
+0
+1 6 7 "" 5
+0
 0
 LAYER, 1 
 1
@@ -57,4 +53,12 @@ LAYER, 7
 1
 LANG:1 0 
 0
+3 6 "PANEL_REF7"
+"Test\\test2.pnl" 20 20 T 6 U 
+1
+"$panel""t1"
+3 7 "PANEL_REF8"
+"Test\\test2.pnl" 20 180 T 7 U 
+1
+"$panel""t2"
 0
\ No newline at end of file
diff --git a/MAC/Navigator2/panels/navigator.pnl b/MAC/Navigator2/panels/navigator.pnl
index 9f9a72dae2ea8def1d7bedb21cffe627129e6b79..ac552030bc47fe5ffe639ba03d548e6ed1cbfbbd 100644
--- a/MAC/Navigator2/panels/navigator.pnl
+++ b/MAC/Navigator2/panels/navigator.pnl
@@ -9,9 +9,7 @@ PANEL,-1 -1 1232 873 N "_3DFace" 1
   // initialize Navigator (instance)
   navigator_handleEventInitialize();
  
-  // Do a dpQueryConnectSingle() so that we get a permanent list of claims
-  // we can use this to translate a claimed name into a real datapoint name
-  claimManager_queryConnectClaims();
+
   
   // Wait till initialising process ended
   while (g_initializing) {
@@ -153,15 +151,15 @@ DISPLAY_LAYER, 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
 LAYER, 0 
 1
 LANG:1 6 Layer1
-1 13 5 "" 0
+1 9 5 "" 0
 0
-1 15 9 "" 2
+1 11 9 "" 2
 0
-1 16 9 "" 3
+1 12 9 "" 3
 0
-1 17 9 "" 0
+1 13 9 "" 0
 0
-1 18 9 "" 1
+1 14 9 "" 1
 0
 1 1 3 "" 6
 0
@@ -169,27 +167,19 @@ LANG:1 6 Layer1
 0
 1 3 3 "" 5
 0
-1 4 3 "" 8
-0
-1 5 3 "" 9
-0
-1 6 3 "" 10
-0
-1 7 4 "" 6
-0
-1 8 4 "" 7
+1 4 3 "" 11
 0
-1 9 4 "" 5
+1 5 4 "" 6
 0
-1 10 4 "" 8
+1 6 4 "" 7
 0
-1 11 4 "" 9
+1 7 4 "" 5
 0
-1 12 4 "" 10
+1 8 4 "" 11
 0
-1 14 6 "" 2
+1 10 6 "" 2
 0
-1 19 12 "" 0
+1 15 12 "" 0
 1 "selectionChanged" 1 1 "main()
 {
   string aS;
@@ -203,27 +193,27 @@ LANG:1 6 Layer1
 }" 0
  
 0
-1 20 12 "" 5
+1 16 12 "" 5
 0
-1 21 12 "" 7
+1 17 12 "" 7
 0
-1 22 12 "" 9
+1 18 12 "" 9
 0
-1 23 12 "" 11
+1 19 12 "" 11
 0
-1 24 12 "" 12
+1 20 12 "" 13
 0
-1 25 13 "" 0
+1 21 13 "" 0
 0
-1 26 13 "" 1
+1 22 13 "" 1
 0
-1 27 13 "" 8
+1 23 13 "" 8
 0
-1 28 13 "" 9
+1 24 13 "" 9
 0
-1 29 13 "" 10
+1 25 13 "" 10
 0
-1 30 13 "" 11
+1 26 13 "" 11
 0
 0
 LAYER, 1 
diff --git a/MAC/Navigator2/panels/objects/Processes/ObsSW_Main.pnl b/MAC/Navigator2/panels/objects/Processes/ObsSW_Main.pnl
index 5da302415ffd4f654326c943fe0e96adc8087877..afce6be71c9194c9736ebf19271a4aae97d9e0be 100644
--- a/MAC/Navigator2/panels/objects/Processes/ObsSW_Main.pnl
+++ b/MAC/Navigator2/panels/objects/Processes/ObsSW_Main.pnl
@@ -1,7 +1,7 @@
 V 10
 1
 LANG:1 0 
-PANEL,-1 -1 995 412 N "_3DFace" 0
+PANEL,-1 -1 994 412 N "_3DFace" 0
 "main()
 {
   mainDBName.text(MainDBName);
@@ -45,9 +45,13 @@ void dblClick(string originator) {
   if (dpExists(newDP) ) {
     baseDP=newDP;
     if (originator == \"stationTree\") {
-      LOG_DEBUG(\"ObsSW_Main.pnl:DoubleClick|Setting currentDatapoint from : \"+g_currentDatapoint+\" to \"+baseDP);
-      g_currentDatapoint=baseDP;
-      navPanel_setEvent(\"ObsSW_Main|\"+stationTree.getText(stationTree.selectedItem(),0),\"ChangePanel\"); 
+      if (dpExists(baseDP) ) {
+        LOG_DEBUG(\"ObsSW_Main.pnl:DoubleClick|Setting currentDatapoint from : \"+g_currentDatapoint+\" to \"+baseDP);
+        g_currentDatapoint=baseDP;
+        navPanel_setEvent(\"ObsSW_Main|\"+stationTree.getText(stationTree.selectedItem(),0),\"ChangePanel\"); 
+      } else {
+        LOG_ERROR(\"ObsSW_Main.pnl:DoubleClick|Setting to new station failed: \"+ baseDP+ \" doesn't exist.\");
+      }          
     } else if (originator == \"activeObs\") {
 //    LOG_DEBUG(\"ObsSW_Main.pnl.pnl:DoubleClick|Setting currentDatapoint from : \"+g_currentDatapoint+\" to \"+baseDP);
 //    g_currentDatapoint=baseDP;
@@ -101,7 +105,7 @@ LANG:1 5 ObsSW
 29 4
 "stationTree"
 ""
-1 1182 -108.812949640288 E E E 1 E 1 E N "_WindowText" E N "_Window" E E
+1 1182 -113.812949640288 E E E 1 E 1 E N "_WindowText" E N "_Window" E E
  E E
 7 0 0 0 0 0
 E E E
@@ -118,7 +122,7 @@ LANG:1 19 Active Observations
 "backgroundOrigin" "enum 0"
 "selectionMode" "enum 0"
 "frameShadow" "enum 48"
- 822 25 992 347
+ 822 20 992 347
 10 TreeWidget
 7
 0 "expanded" "(string id)"
@@ -145,7 +149,7 @@ LANG:1 19 Active Observations
 29 5
 "activeObs"
 ""
-1 361 -117.748624629708 E E E 1 E 1 E N "_WindowText" E N "_Window" E E
+1 361 -121.6107356006344 E E E 1 E 1 E N "_WindowText" E N "_Window" E E
  E E
 9 0 0 0 0 0
 E E E
@@ -154,7 +158,7 @@ E E E
 LANG:1 19 Active Observations
 
 0
- 0 20 170 342
+ 0 20 170 347
 10 TreeWidget
 7
 0 "expanded" "(string id)"
@@ -175,51 +179,8 @@ LANG:1 19 Active Observations
 {
   activeObs.addColumn(\"Active Observations\");
   activeObs.setColumnWidth(0,201);
-  if (!dpExists(MainDBName+\"LOFAR_PermSW_MACScheduler.activeObservations\")) {
-    setValue(\"activeObs\",\"backCol\",\"_dpdoesnotexist\");
-  } else {
-    dpConnect(\"activeObsCallback\",true,\"LOFAR_PermSW_MACScheduler.activeObservations\");
-  }
 }
 
-
-activeObsCallback(string dp1, dyn_string activeObservations) {
-
-  // empty the table
-  activeObs.clear();
-  
-  
-  // if the active observations list changes the list here should be changed also.
-  // iterate over the found entries and fill the table
-  // if no previous Observation selected, set selection to the first on the list, also
-  // set it here when previous selection disappeared from the list.
-  // otherwise nothing will be changed in the selection
-
-  string newSelection=\"\";
-  string oldSelection=activeObs.selectedItem();
-  for (int i=1; i<= dynlen(activeObservations);i++) {
-    string realName=claimManager_nameToRealName(\"LOFAR_ObsSW_\"+activeObservations[i]);
-    activeObs.appendItem(\"\",realName,activeObservations[i]);
-    activeObs.ensureItemVisible(realName);
-    activeObs.setIcon(realName,0,\"16_empty.gif\");
-    if (i==1) {
-      newSelection=realName;
-    }
-  }
-  
-  if ((oldSelection == newSelection) ||
-      (oldSelection != \"\" && activeObs.itemExists(oldSelection))) {
-    activeObs.setSelectedItem(oldSelection,true);    
-    // nothing further needed
-    return;
-  } else {
-    activeObs.setSelectedItem(newSelection,true);    
-  }
-  // something has changed, so update Main Controllers
-  MainCU_Processes_UpdateMainControllers(); 
-  MainCU_Processes_UpdateStationTree(); 
-   
-}
 " 0
 2 46
 "PRIMITIVE_TEXT4"
@@ -395,6 +356,26 @@ LANG:1 0
 1
 "dashclr"N "_Transparent"
 E E 0 2 1 2 1 E  290 193 810 193
+2 113
+"observationName"
+""
+1 670 20 E E E 1 E 1 E N "Blue" E N "_Transparent" E E
+ E E
+38 0 0 0 0 0
+E E E
+0
+1
+LANG:1 0 
+
+1
+"dashclr"N "_Transparent"
+E E 0 1 1 2 1 E U  1 E 670 20 736 34
+0 2 2 "0s" 0 0 0 192 0 0  670 20 1
+1
+LANG:1 101 -*-MS Shell Dlg-bold-r-normal-*-11-*-100-100-*-*-iso8859-1|-11,0,0,0,758,0,0,0,0,0,0,0,0,MS Shell Dlg
+0 ""
+1
+LANG:1 11 observation
 0
 LAYER, 1 
 1
@@ -425,32 +406,32 @@ LAYER, 7
 LANG:1 0 
 0
 3 14 "PANEL_REF15"
-"objects/Processes\\interactive_controller_small.pnl" 180 40 T 26 1 0 1 -7 -5
+"objects\\Processes\\interactive_controller_small.pnl" 180 40 T 26 1 0 1 -7 -5
 2
 "$databaselevel""main"
 "$name""ObsCtrl"
 3 15 "PANEL_REF16"
-"objects/Processes\\interactive_controller_small.pnl" 170 90 T 27 1 0 1 3 -5
+"objects\\Processes\\interactive_controller_small.pnl" 170 90 T 27 1 0 1 3 -5
 2
 "$databaselevel""main"
 "$name""OnlineCtrl_Correlator"
 3 16 "PANEL_REF17"
-"objects/Processes\\interactive_controller_small.pnl" 180 140 T 28 1 0 1 -7 -5
+"objects\\Processes\\interactive_controller_small.pnl" 180 140 T 28 1 0 1 -7 -5
 2
 "$databaselevel""main"
 "$name""OnlineCtrl_StorageAppl"
 3 17 "PANEL_REF18"
-"objects/Processes\\interactive_controller_small.pnl" 180 200 T 29 1 0 1 -7 0
+"objects\\Processes\\interactive_controller_small.pnl" 180 200 T 29 1 0 1 -7 0
 2
 "$databaselevel""station"
 "$name""BeamCtrl"
 3 18 "PANEL_REF19"
-"objects/Processes\\interactive_controller_small.pnl" 170 240 T 30 1 0 1 3 10
+"objects\\Processes\\interactive_controller_small.pnl" 170 240 T 30 1 0 1 3 10
 2
 "$databaselevel""station"
 "$name""CalCtrl"
 3 19 "PANEL_REF20"
-"objects/Processes\\interactive_controller_small.pnl" 180 290 T 31 1 0 1 -7 10
+"objects\\Processes\\interactive_controller_small.pnl" 180 290 T 31 1 0 1 -7 10
 2
 "$databaselevel""station"
 "$name""TBBCtrl"
diff --git a/MAC/Navigator2/panels/objects/Processes/ObsSW_Station.pnl b/MAC/Navigator2/panels/objects/Processes/ObsSW_Station.pnl
index 61128a62939625b488b99a76c0f7f629d1112b25..2cf180b7b5a8157aa33f6facbd9fc51d48ddc7b8 100644
--- a/MAC/Navigator2/panels/objects/Processes/ObsSW_Station.pnl
+++ b/MAC/Navigator2/panels/objects/Processes/ObsSW_Station.pnl
@@ -6,7 +6,9 @@ PANEL,-1 -1 995 220 N "_3DFace" 0
 {
   baseDP=g_currentDatapoint;
   station_selectedStation = dpSubStr(baseDP,DPSUB_SYS);
-  stationDBName.text(station_selectedStation);  
+  station_selectedObservation=selectedObservation;
+  stationDBName.text(station_selectedStation);
+  stationObservationName.text(station_selectedObservation);  
 }" 0
  E E E E 1 -1 -1 0  0 0
 ""0  1
@@ -28,6 +30,8 @@ void click(string originator) {
     } else if (originator == \"activeObs\") {
       station_obsBaseDP=activeStationObs.selectedItem();
       station_selectedObservation=activeStationObs.getText(activeStationObs.selectedItem(),0);
+      stationObservationName.text(station_selectedObservation);
+      setValue(\"stationObservationName\",\"text\",station_selectedObservation);
       Station_Processes_UpdateStationTree();      
     }
   }
@@ -45,15 +49,17 @@ void dblClick(string originator) {
     newDP=stationTree.selectedItem();
   }
   
-  if (dpExists(baseDP) ) {
-    if (originator == \"stationTree\") {
+  if (dpExists(newDP) ) {
+    baseDP=newDP;
+    LOG_TRACE(\"ObsSW_Station.pnl:DoubleClick||selectedStation: \"+station_selectedStation);
+    if (originator == \"stationTree\" && stationTree.selectedItem()+\":\" != station_selectedStation) {
       LOG_DEBUG(\"ObsSW_Station.pnl:DoubleClick|Setting currentDatapoint from : \"+g_currentDatapoint+\" to \"+baseDP);
       g_currentDatapoint=baseDP;
       navPanel_setEvent(\"ObsSW_Station|\"+stationTree.getText(stationTree.selectedItem(),0),\"ChangePanel\"); 
     } else if (originator == \"activeObs\") {
-//    LOG_DEBUG(\"ObsSW_Station.pnl.pnl:DoubleClick|Setting currentDatapoint from : \"+g_currentDatapoint+\" to \"+baseDP);
-//    g_currentDatapoint=baseDP;
-//    navPanel_setEvent(\"ObsSW_Station|\"+activeStationObs.getText(activeStationObs.selectedItem(),0),\"ChangePanel\");  
+//      LOG_DEBUG(\"ObsSW_Station.pnl.pnl:DoubleClick|Setting currentDatapoint from : \"+g_currentDatapoint+\" to \"+baseDP);
+//      g_currentDatapoint=baseDP;
+//      navPanel_setEvent(\"ObsSW_Station|\"+activeStationObs.getText(activeStationObs.selectedItem(),0),\"ChangePanel\");  
     }
   }
   
@@ -112,14 +118,14 @@ E E E
 LANG:1 19 Active Observations
 
 8
-"frameShadow" "enum 48"
-"selectionMode" "enum 0"
-"backgroundOrigin" "enum 0"
-"defaultRenameAction" "enum 0"
-"frameShape" "enum 6"
-"vScrollBarMode" "enum 0"
-"hScrollBarMode" "enum 0"
 "resizeMode" "enum 0"
+"hScrollBarMode" "enum 0"
+"vScrollBarMode" "enum 0"
+"frameShape" "enum 6"
+"defaultRenameAction" "enum 0"
+"backgroundOrigin" "enum 0"
+"selectionMode" "enum 0"
+"frameShadow" "enum 48"
  822 20 992 188
 10 TreeWidget
 7
@@ -141,6 +147,10 @@ LANG:1 19 Active Observations
 {
   stationTree.addColumn(\"Involved Stations\");
   stationTree.setColumnWidth(0,201);
+
+  //take over the old selection from main (if any)
+  station_selectedStation=selectedStation;
+
 }    
     
 " 0
@@ -177,65 +187,9 @@ LANG:1 19 Active Observations
 {
   activeStationObs.addColumn(\"Active Observations\");
   activeStationObs.setColumnWidth(0,201);
-  if (!dpExists(MainDBName+\"LOFAR_PermSW_MACScheduler.activeObservations\")) {
-    setValue(\"activeStationObs\",\"backCol\",\"_dpdoesnotexist\");
-  } else {
-    dpConnect(\"activeStationObsCallback\",true,\"LOFAR_PermSW_MACScheduler.activeObservations\");
-  }
-}
-
-
-activeStationObsCallback(string dp1, dyn_string activeObservations) {
-
-  // empty the table
-  activeStationObs.clear();
-  station_obsBaseDP=\"\";  
-  
-  // if the active observations list changes the list here should be changed also.
-  // iterate over the found entries and fill the table
-  // if no previous Observation selected, set selection to the first on the list, also
-  // set it here when previous selection disappeared from the list.
-  // otherwise nothing will be changed in the selection
   
-  // check if this station is involved in an active observation, if so it will be added to the list
-
-  string newSelection=\"\";
-  string oldSelection=activeStationObs.selectedItem();
-  for (int i=1; i<= dynlen(activeObservations);i++) {
-    string realName=claimManager_nameToRealName(\"LOFAR_ObsSW_\"+activeObservations[i]);
-    int j = dynContains(g_observations[\"NAME\"],\"LOFAR_ObsSW_\"+activeObservations[i]);
-    if ( j > 0) {
-      // get the Stationlist from that observation
-      string sts=g_observations[\"STATIONLIST\"][j];
-      dyn_string stations = strsplit(sts,\",\");
-      for (int k=1; k<= dynlen(stations);k++) { 
-        if (stations[k]+\":\" == station_selectedStation) {
-          if (station_obsBaseDP == \"\") {
-            station_obsBaseDP=realName;
-            station_selectedObservation=activeObservations[i];
-          }
-          activeStationObs.appendItem(\"\",realName,activeObservations[i]);
-          activeStationObs.ensureItemVisible(realName);
-          activeStationObs.setIcon(realName,0,\"16_empty.gif\");
-        }
-      }
-    }
-    if (station_obsBaseDP != \"\") {
-      newSelection=station_obsBaseDP;
-    }
-  }
-  
-  if ((oldSelection == newSelection) ||
-      (oldSelection != \"\" && activeStationObs.itemExists(oldSelection))) {
-    activeStationObs.setSelectedItem(oldSelection,true);    
-    // nothing further needed
-    return;
-  } else {
-    activeStationObs.setSelectedItem(newSelection,true);    
-  }
-  // something has changed, so update Station Tree
-  Station_Processes_UpdateStationTree(); 
-   
+  //take over the old selection from main (if any)
+  station_selectedObservation=selectedObservation;
 }
 " 0
 2 46
@@ -348,6 +302,26 @@ LANG:1 7 station
 0
 1 95 22 "" 6
 0
+2 97
+"stationObservationName"
+""
+1 668 20 E E E 1 E 1 E N "Blue" E N "_Transparent" E E
+ E E
+40 0 0 0 0 0
+E E E
+0
+1
+LANG:1 0 
+
+1
+"dashclr"N "_Transparent"
+E E 0 1 1 2 1 E U  1 E 668 20 734 34
+0 2 2 "0s" 0 0 0 192 0 0  668 20 1
+1
+LANG:1 101 -*-MS Shell Dlg-bold-r-normal-*-11-*-100-100-*-*-iso8859-1|-11,0,0,0,758,0,0,0,0,0,0,0,0,MS Shell Dlg
+0 ""
+1
+LANG:1 11 observation
 0
 LAYER, 1 
 1
@@ -378,17 +352,17 @@ LAYER, 7
 LANG:1 0 
 0
 3 20 "PANEL_REF21"
-"objects/Processes\\station_interactive_controller_small.pnl" 170 40 T 35 1 0 1 0 -4
+"objects\\Processes\\station_interactive_controller_small.pnl" 170 40 T 35 1 0 1 0 -4
 2
 "$databaselevel""station"
 "$name""BeamCtrl"
 3 21 "PANEL_REF22"
-"objects/Processes\\station_interactive_controller_small.pnl" 170 90 T 36 1 0 1 0 -4
+"objects\\Processes\\station_interactive_controller_small.pnl" 170 90 T 36 1 0 1 0 -4
 2
 "$databaselevel""station"
 "$name""CalCtrl"
 3 22 "PANEL_REF23"
-"objects/Processes\\station_interactive_controller_small.pnl" 170 140 T 37 1 0 1 0 -4
+"objects\\Processes\\station_interactive_controller_small.pnl" 170 140 T 37 1 0 1 0 -4
 2
 "$databaselevel""station"
 "$name""TBBCtrl"
diff --git a/MAC/Navigator2/panels/objects/Processes/controller_small.pnl b/MAC/Navigator2/panels/objects/Processes/controller_small.pnl
index 6ce95ceca058ab410c9aa731479758fdb3939cb7..d73f22cc13bba3e3843e1883a3adeb5fa2920f6a 100644
--- a/MAC/Navigator2/panels/objects/Processes/controller_small.pnl
+++ b/MAC/Navigator2/panels/objects/Processes/controller_small.pnl
@@ -191,7 +191,7 @@ E
 1
 LANG:1 0 
 
-125 "logMsg" 67 1 0 "s" 1
+125 "logMsg" 63 1 0 "s" 1
 LANG:1 6 logMsg
 E
 1
@@ -210,7 +210,15 @@ LANG:1 98 -*-MS Shell Dlg-*-r-normal-*-11-*-100-100-*-*-iso8859-1|-11,0,0,0,505,
 "name"
 ""
 1 31 10 E E E 1 E 1 E N "_WindowText" E N "_Transparent" E E
- E E
+ "main()
+{
+  rClick();
+}" 0
+ "main()
+{
+  dblClick();
+}" 0
+
 5 0 0 0 0 0
 E E E
 0
@@ -219,7 +227,11 @@ LANG:1 0
 
 1
 "dashclr"N "_Transparent"
-E E 0 1 1 2 1 E U  1 E 31 10 61 24
+E "main()
+{
+  click();
+}" 0
+ 0 1 1 2 1 E U  1 E 31 10 61 24
 0 2 2 "0s" 0 0 0 192 0 0  31 10 1
 1
 LANG:1 101 -*-MS Shell Dlg-bold-r-normal-*-11-*-100-100-*-*-iso8859-1|-11,0,0,0,758,0,0,0,0,0,0,0,0,MS Shell Dlg
@@ -256,7 +268,7 @@ LAYER, 7
 LANG:1 0 
 0
 3 0 "selfState"
-"objects\\lofar_self_state.pnl" 9.500000000000011 9.5 T 1 1 0 0.882352941176471 -0.499999999999993 0.6176470588235254
+"objects\\lofar_self_state.pnl" 9.500000000000011 9.5 T 1 1 0 0.882352941176471 -0.499999999999993 -1.382352941176475
 1
 "$object""MACScheduler"
 0
\ No newline at end of file
diff --git a/MAC/Navigator2/panels/objects/Processes/daemon_small.pnl b/MAC/Navigator2/panels/objects/Processes/daemon_small.pnl
index 686dd88fb77967aaa02811941cacc55bb1475989..04385a9869ae21e79437df68d26dc60b21b2c205 100644
--- a/MAC/Navigator2/panels/objects/Processes/daemon_small.pnl
+++ b/MAC/Navigator2/panels/objects/Processes/daemon_small.pnl
@@ -200,7 +200,7 @@ E
 1
 LANG:1 0 
 
-20 "logMsg" 55 1 0 "s" 1
+20 "logMsg" 85 1 0 "s" 1
 LANG:1 6 logMsg
 E
 1
@@ -277,7 +277,7 @@ LAYER, 7
 LANG:1 0 
 0
 3 0 "selfState"
-"objects\\lofar_self_state.pnl" 9.500000000000011 9.5 T 1 1 0 1 0.499999999999989 -1.5
+"objects\\lofar_self_state.pnl" 9.500000000000011 9.5 T 1 1 0 1 0.499999999999989 -4.5
 1
 "$object""CTStartDaemon"
 0
\ No newline at end of file
diff --git a/MAC/Navigator2/panels/objects/Processes/interactive_controller_small.pnl b/MAC/Navigator2/panels/objects/Processes/interactive_controller_small.pnl
index 1e9ea5eaf6d341cfd47806e2949581f64425b8ec..60fd282e598f544653a908d5dacdbd341e111438 100644
--- a/MAC/Navigator2/panels/objects/Processes/interactive_controller_small.pnl
+++ b/MAC/Navigator2/panels/objects/Processes/interactive_controller_small.pnl
@@ -361,7 +361,7 @@ LAYER, 7
 LANG:1 0 
 0
 3 0 "selfState"
-"objects/lofar_self_state.pnl" 9.50000000000001 9.5 T 1 1 0 1 -0.499999999999992 17.5
+"objects\\lofar_self_state.pnl" 9.500000000000011 9.5 T 1 1 0 1 -0.499999999999992 10.5
 1
 "$object""ObsCtrl"
 0
\ No newline at end of file
diff --git a/MAC/Navigator2/panels/objects/Processes/station_interactive_controller_small.pnl b/MAC/Navigator2/panels/objects/Processes/station_interactive_controller_small.pnl
index c66a9df224376ab3eb0a747188ccdbcccd4fe777..17e5b058b62f65f0e1877c2f751dc6788d437930 100644
--- a/MAC/Navigator2/panels/objects/Processes/station_interactive_controller_small.pnl
+++ b/MAC/Navigator2/panels/objects/Processes/station_interactive_controller_small.pnl
@@ -362,7 +362,7 @@ LAYER, 7
 LANG:1 0 
 0
 3 0 "selfState"
-"objects/lofar_self_state.pnl" 9.50000000000001 9.5 T 1 1 0 1 -0.499999999999992 17.5
+"objects\\lofar_self_state.pnl" 9.500000000000011 9.5 T 1 1 0 1 -0.499999999999992 12.5
 1
 "$object""ObsCtrl"
 0
\ No newline at end of file
diff --git a/MAC/Navigator2/panels/objects/lofar_self_state.pnl b/MAC/Navigator2/panels/objects/lofar_self_state.pnl
index 70e4b8a1e93cc6bb66c906e8a34ac2a7f48766ea..fbf85e165c51ad0fc35b78a0468a85cd813d84ab 100644
--- a/MAC/Navigator2/panels/objects/lofar_self_state.pnl
+++ b/MAC/Navigator2/panels/objects/lofar_self_state.pnl
@@ -1,62 +1,153 @@
-V 10
-1
-LANG:1 16 Lofar Self State
-PANEL,422 141 95 86 N "_3DFace" 1
-"$object"
-"main()
-{
-	setValue(\"light\",\"toolTipText\",$object+\" state\");
-}" 0
-EE E E 1 0 0 0  10 10
-"" 0 1
-EE 2
-"CBRef""1"
-"EClose"E
-""
-DISPLAY_LAYER, 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
-LAYER, 0 
-1
-LANG:1 6 Layer1
-7 1
-"light"
-""
-1 17.0333 17.0333 E E E 1 E 1 E N "_3DText" E N "_3DFace" E E
- E E
-2 0 0 0 0 0
-EE E
-0
-1
-LANG:1 10 self state
-1
-"dashclr"N "_Transparent"
-E E 0 1 1 0 1 E 1.071428571428571 0 1.071428571428571  -1.25 -1.25  1 E 17.5 17.5 7 7
-0
-LAYER, 1 
-1
-LANG:1 6 Layer2
-0
-LAYER, 2 
-1
-LANG:1 6 Layer3
-0
-LAYER, 3 
-1
-LANG:1 6 Layer4
-0
-LAYER, 4 
-1
-LANG:1 6 Layer5
-0
-LAYER, 5 
-1
-LANG:1 6 Layer6
-0
-LAYER, 6 
-1
-LANG:1 6 Layer7
-0
-LAYER, 7 
-1
-LANG:1 6 Layer8
-0
+V 10
+1
+LANG:1 16 Lofar Self State
+PANEL,-1 -1 170 141 N "_3DFace" 1
+"$object"
+"main()
+{
+  setValue(\"light\",\"toolTipText\",$object+\" state\");
+  baseDP=g_currentDatapoint;
+  
+
+    
+}" 0
+ E E "main()
+{
+  rClick();
+}" 0
+ E 1 0 0 0  10 10
+""0  1
+E "#uses \"navPanel.ctl\"
+
+
+dyn_string popup;
+string baseDP=\"\";
+
+
+// NCFObjectState vars
+string DPName=\"\";
+int state;
+string message=\"Operator Overrule\";
+bool force=true;
+
+
+void rClick() {
+  // define the popupMenu
+ 
+  int idx=1;
+  dynInsertAt(popup,\"CASCADE_BUTTON,Set State, 1\",idx++);
+  dynInsertAt(popup,\"CASCADE_BUTTON,Set Recursive State, 1\",idx++);
+  dynInsertAt(popup,\"Set State\",idx++);
+  for (int i = 1; i <= mappinglen(stateName); i++)  {
+    string aS=\"PUSH_BUTTON,\"+mappingGetValue(stateName,i)+\",1\"+mappingGetKey(stateName,i)+\",1\";
+    dynInsertAt(popup,aS,idx++);
+  }  
+  dynInsertAt(popup,\"Set Recursive State\",idx++);
+  for (int i = 1; i <= mappinglen(stateName); i++)  {
+    string aS=\"PUSH_BUTTON,\"+mappingGetValue(stateName,i)+\",2\"+mappingGetKey(stateName,i)+\",1\";
+    dynInsertAt(popup,aS,idx++);
+  }
+  
+  popupMenu(popup,state);
+  
+  bool recursive = false;
+  if (state == 10 ) {
+    state = 0;
+  } else if (state == 20) {
+    state = 0;
+  recursive = true;    
+  } else if (state < 200) {
+    state -= 100;
+  } else {
+    state -= 200;
+    recursive = true;
+  }        
+
+  bool ack=navFunct_acknowledgePanel(\"This will (re)set the state of \"+baseDP+\" to \"+getStateName(state)+\". Are you sure?\");
+  if (!ack) {
+    LOG_DEBUG(\"lofar_self_state.pnl:rClick|State change by operator cancelled\");
+  }
+  string database = dpSubStr(baseDP,DPSUB_SYS);
+  string bareDP = dpSubStr(baseDP,DPSUB_DP);
+  if (state) {
+    if (!recursive) {
+      LOG_DEBUG(\"lofar_self_state.pnl:rClick|Operator sets \"+baseDP+\".status.state to \"+getStateName(state));
+      DPName=baseDP+\".status.state\";
+      dpSet(database+\"__navObjectState.DPName\",DPName,
+            database+\"__navObjectState.stateNr\",state,
+            database+\"__navObjectState.message\",message,
+            database+\"__navObjectState.force\",force);
+    } else {
+      // If baseDP is on a station, only that station is needed in the query.
+      // if it is on the Main DB, all stations need to be examined.
+      string query=\"\";
+      if (database == MainDBName) {
+        query= \"SELECT '_original.._value' FROM '\"+bareDP+\"*.status.state' REMOTE 'ALL' WHERE '_original.._value' != \"+state;
+      } else {
+        query= \"SELECT '_original.._value' FROM '\"+bareDP+\"*.status.state' REMOTE '\"+database+\"'WHERE '_original.._value' != \"+state;
+      }   
+      dyn_dyn_anytype tab;
+      
+      dpQuery(query,tab);
+      
+      DebugN(\"lofar_self_state.pnl:rClick|Found: \"+tab+\" will all be set\");    
+    }
+  }
+}" 0
+ 2
+"CBRef" "1"
+"EClose" E
+""
+DISPLAY_LAYER, 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
+LAYER, 0 
+1
+LANG:1 6 Layer1
+7 1
+"light"
+""
+1 17.0333 17.0333 E E E 1 E 1 E N "_3DText" E N "_3DFace" E E
+ "main()
+{
+// rClick();
+    DebugN(\"objectbaseDP:\"+itsObject);
+}" 0
+ E
+2 0 0 0 0 0
+E E E
+0
+1
+LANG:1 10 self state
+
+1
+"dashclr"N "_Transparent"
+E E 0 1 1 0 1 E 1.071428571428571 0 1.071428571428571 1.250000000000007 1.250000000000007 1 E 17.5 17.5 7 7
+0
+LAYER, 1 
+1
+LANG:1 6 Layer2
+0
+LAYER, 2 
+1
+LANG:1 6 Layer3
+0
+LAYER, 3 
+1
+LANG:1 6 Layer4
+0
+LAYER, 4 
+1
+LANG:1 6 Layer5
+0
+LAYER, 5 
+1
+LANG:1 6 Layer6
+0
+LAYER, 6 
+1
+LANG:1 6 Layer7
+0
+LAYER, 7 
+1
+LANG:1 6 Layer8
+0
 0
\ No newline at end of file
diff --git a/MAC/Navigator2/panels/objects/navigator_alerts.pnl b/MAC/Navigator2/panels/objects/navigator_alerts.pnl
index 97980281588e5734d29005c6d3b083e8075c2b66..4db564a3de6389701b1e2e9e8815a81a3f0def18 100644
--- a/MAC/Navigator2/panels/objects/navigator_alerts.pnl
+++ b/MAC/Navigator2/panels/objects/navigator_alerts.pnl
@@ -152,36 +152,59 @@ void rClick(int row) {
   LOG_DEBUG(\"navigator_alerts.pnl:RightMouseClick|sTime: \"+sTime);
   LOG_DEBUG(\"navigator_alerts.pnl:RightMouseClick|Looking for dp: \"+dp+\" status: \"+status);
  
+  int iPos=-1;
 
   //to narrow actions determine if the state is 'acknowledgable'
-  if (status == ACK) return;
+  if (status != ACK) {
   
-  // ok rest should be possible to acknowledge
-  // find the entry in the table
-  int iPos=-1;
-  for (int i=1; i <=dynlen(g_alarms[ \"TIME\" ]);i++) {
-    LOG_DEBUG( \"navigator_alerts.pnl:RightMouseClick|Time in table: \");
-    LOG_DEBUG(\"navigator_alerts.pnl:RightMouseClick|g_alarms: \"+g_alarms[ \"TIME\" ][i]);
-    LOG_DEBUG( \"navigator_alerts.pnl:RightMouseClick|dpname in table: \"+g_alarms[ \"DPNAME\" ][i]);
-    LOG_DEBUG( \"navigator_alerts.pnl:RightMouseClick|status in table: \"+g_alarms[ \"STATUS\" ][i]);
-    if ( g_alarms[ \"TIME\" ][i] == sTime &&
-         g_alarms[ \"DPNAME\" ][i] == dp &&
-         g_alarms[ \"STATUS\" ][i] == status) {
-      iPos = i;
-      break;
+    // ok rest should be possible to acknowledge
+    // find the entry in the table
+    for (int i=1; i <=dynlen(g_alarms[ \"TIME\" ]);i++) {
+      LOG_DEBUG( \"navigator_alerts.pnl:RightMouseClick|Time in table: \");
+      LOG_DEBUG(\"navigator_alerts.pnl:RightMouseClick|g_alarms: \"+g_alarms[ \"TIME\" ][i]);
+      LOG_DEBUG( \"navigator_alerts.pnl:RightMouseClick|dpname in table: \"+g_alarms[ \"DPNAME\" ][i]);
+      LOG_DEBUG( \"navigator_alerts.pnl:RightMouseClick|status in table: \"+g_alarms[ \"STATUS\" ][i]);
+      if ( g_alarms[ \"TIME\" ][i] == sTime &&
+           g_alarms[ \"DPNAME\" ][i] == dp &&
+           g_alarms[ \"STATUS\" ][i] == status) {
+        iPos = i;
+        break;
+      }
+    }
+  
+    if (iPos == -1) {
+      LOG_ERROR(\"navigator_alerts.pnl:RightMouseClick|Strange, couldn't find chosen entry in alarm global list.\");
     }
   }
   
-  if (iPos == -1) {
-    LOG_ERROR(\"navigator_alerts.pnl:RightMouseClick|Strange, couldn't find chosen entry in alarm global list.\");
-    return;
+  // determine also if there is a http msg in the MESSAGE part if so we also need an open webpage on the rclikc menu
+  int start = strpos(message,\"http://\");
+  string httpStr=\"\";
+  if (start > -1) {
+    string startStr=substr(message,start);
+    int end=strpos(startStr,\" \");
+    httpStr=startStr;
+    if (end > -1){
+      httpStr=substr(startStr,0,end);
+    } 
   }
+  
+  
     
   // define the popupMenu
   dyn_string txt;
   int answer;
-  txt=makeDynString(\"PUSH_BUTTON, Acknowledge, 1, 1\");
-  popupMenu(txt,answer);
+  int idx=1;
+  if (iPos > -1) {
+    dynInsertAt(txt,\"PUSH_BUTTON, Acknowledge, 1, 1\",idx++);
+  }
+  if (httpStr != \"\") {
+    dynInsertAt(txt,\"PUSH_BUTTON, Show Webpage, 2, 1\",idx++);
+  }
+  
+  if (dynlen(txt) > 0) {
+    popupMenu(txt,answer);
+  }
 
   // acknowledge pushed, get the dp, and state and determine if 
   if (answer == 1) {
@@ -229,6 +252,8 @@ void rClick(int row) {
                       sys+\"__navObjectState.message\",message);
       }    
     }
+  } else if (answer == 2) {
+    std_help(httpStr,false);
   }
 }
 
diff --git a/MAC/Navigator2/panels/objects/navigator_headlines.pnl b/MAC/Navigator2/panels/objects/navigator_headlines.pnl
index 2ce17b49a1f72737bddfa556bfd3573a12310100..e8989e343c6670e87aeab4b01f47cbd0103bdd90 100644
--- a/MAC/Navigator2/panels/objects/navigator_headlines.pnl
+++ b/MAC/Navigator2/panels/objects/navigator_headlines.pnl
@@ -39,7 +39,7 @@ void initialize() {
 // If there is an action required this point will tell so
 //
 void doAction(string aDP, string anAction) {
-  LOG_DEBUG(\"Navigator_headLines.pnl:doAction: required for \" + $name + \". Action found: \" + anAction);
+  LOG_DEBUG(\"Navigator_headLines.pnl:doAction| required for \" + $name + \". Action found: \" + anAction);
   // split action into essentials
   dyn_string actionString;
   if (!navFunct_splitAction(anAction,actionString)) {
diff --git a/MAC/Navigator2/panels/objects/navigator_typeSelector.pnl b/MAC/Navigator2/panels/objects/navigator_typeSelector.pnl
index 2d9394b87203cb3c57aa79a508e0dfbbce9d0f65..52cd5e8f3c5b4d61e6847ced241af1418b05c746 100644
--- a/MAC/Navigator2/panels/objects/navigator_typeSelector.pnl
+++ b/MAC/Navigator2/panels/objects/navigator_typeSelector.pnl
@@ -102,6 +102,20 @@ void doHighlight(dyn_string actionString) {
   // Highlight contains the names of the items in  the treelist that should be highlighted.
   // make a list of them for parsing
   
+  // check if tabname is in selection list (will be if triggered by detailselector) if so remove first
+  int i=dynContains(actionString,\"Hardware\");
+  if (i > 0) {
+    dynRemove(actionString,i);
+  }
+  int i=dynContains(actionString,\"Processes\");
+  if (i > 0) {
+    dynRemove(actionString,i);
+  }
+  int i=dynContains(actionString,\"Observations\");
+  if (i > 0) {
+    dynRemove(actionString,i);
+  }
+  
   if (dynlen(actionString) < 1) {
     return;
   }
@@ -334,8 +348,8 @@ E E E
 LANG:1 8 hardware
 
 2
-"allColumnsShowFocus" "bool TRUE"
 "selectionMode" "enum 0"
+"allColumnsShowFocus" "bool TRUE"
  10 30 212 378
 10 TreeWidget
 7
diff --git a/MAC/Navigator2/scripts/claim.ctl b/MAC/Navigator2/scripts/claim.ctl
index dd5a471e7f0512d226cb7231adae86d86772d12b..d76eb79e41762d8dcbb23ae57cf1b261610c02eb 100644
--- a/MAC/Navigator2/scripts/claim.ctl
+++ b/MAC/Navigator2/scripts/claim.ctl
@@ -9,21 +9,21 @@
 //    A claim must be made via:
 //
 //    dpSet( 
-//      "claimManager.request.typeName", "Observation",
-//      "claimManager.request.newObjectName", "MYOBSERVATION" );
+//      "ClaimManager.request.typeName", "Observation",
+//      "ClaimManager.request.newObjectName", "MYOBSERVATION" );
 //
 //
 //    The Claim Manager has a global array of claimed datapoints
 //    for better performance. If the claimmanager runs on the mainserver
 //    the manager has write rights and is responsible to fill the cache values
-//    dpSet("claimManager.cache.typeNames",*add the new typename to the dyn_string*,
-//          "claimManager.cache.newObjectNames",*add the new ObjectName to the dyn_string*,
-//          "claimManager.cache.DPNames",*add the new DPName to the dyn_string*,
-//          "claimManager.cache.claimDates",*add the new ClaimDate to the dyn_string*)
+//    dpSet("ClaimManager.cache.typeNames",*add the new typename to the dyn_string*,
+//          "ClaimManager.cache.newObjectNames",*add the new ObjectName to the dyn_string*,
+//          "ClaimManager.cache.DPNames",*add the new DPName to the dyn_string*,
+//          "ClaimManager.cache.claimDates",*add the new ClaimDate to the dyn_string*)
 //
 //    When a client connects to the maindatabase he will fill his internal cache map (gClaimdTypes)
 //    from the ClaimManager.Cache  arrays.  This will also be done after a disconnect/reconnect
-//    The client will take a dpConnect on the claimManager.response fields and will update his 
+//    The client will take a dpConnect on the ClaimManager.response fields and will update his 
 //    internal cache map via the callback from this also (if the point doesn't exist yet)
 //
 //    To check distributed connections a dpconnect on the distmanager is needed for the clients
@@ -133,20 +133,20 @@ void distSystemTriggered(string dp1, dyn_int systemList) {
   
   if (isConnected) {
     dpDisconnect("clientAddClaimCallback",
-    	MainDBName+"claimManager.response.typeName", 
-    	MainDBName+"claimManager.response.newObjectName",
-    	MainDBName+"claimManager.response.DPName",
-    	MainDBName+"claimManager.response.claimDate"); 
+    	MainDBName+"ClaimManager.response.typeName", 
+    	MainDBName+"ClaimManager.response.newObjectName",
+    	MainDBName+"ClaimManager.response.DPName",
+    	MainDBName+"ClaimManager.response.claimDate"); 
   }
   
   // Connect to the dp elements that we use to receive
   // a new claim in the MainDB
   dpConnect( "clientAddClaimCallback", 
     true,         
-    MainDBName+"claimManager.response.typeName", 
-    MainDBName+"claimManager.response.newObjectName",
-    MainDBName+"claimManager.response.DPName",
-    MainDBName+"claimManager.response.claimDate"); 
+    MainDBName+"ClaimManager.response.typeName", 
+    MainDBName+"ClaimManager.response.newObjectName",
+    MainDBName+"ClaimManager.response.DPName",
+    MainDBName+"ClaimManager.response.claimDate"); 
   isConnected = true; 
   
   // start the local Claim mechanism
@@ -158,7 +158,7 @@ void distSystemTriggered(string dp1, dyn_int systemList) {
 // *******************************************
 // Description:
 //    This will (re)load the internal mapping from the 
-//    claimManager.cache strings 
+//    ClaimManager.cache strings 
 //
 // Returns:
 //    None
@@ -179,20 +179,20 @@ void syncClient() {
   // because it always takes some time for the databases to be ready while the are connecting we will have to wait here till the MainDB 
   // is fully reachable
   int retry=0;
-  while (!dpExists(MainDBName+"claimManager.cache.typeNames") & retry < 120) {
+  while (!dpExists(MainDBName+"ClaimManager.cache.typeNames") & retry < 120) {
     delay(2);
     retry++;
     if (retry >= 120) {
-      LOG_FATAL("claim.ctl:syncClient| connecting to mainDB retry longer then 2 minutes, mainDB still not ready?");
+      if (bDebug) DebugN("claim.ctl:syncClient| connecting to mainDB retry longer then 2 minutes, mainDB still not ready?");
       break;
     }
   }	
       
   // get all lists of claimed datapoints 
-  dpGet(MainDBName+"claimManager.cache.typeNames",typeNames,
-        MainDBName+"claimManager.cache.newObjectNames",newObjectNames,
-        MainDBName+"claimManager.cache.DPNames",DPNames,
-        MainDBName+"claimManager.cache.claimDates",claimDates);
+  dpGet(MainDBName+"ClaimManager.cache.typeNames",typeNames,
+        MainDBName+"ClaimManager.cache.newObjectNames",newObjectNames,
+        MainDBName+"ClaimManager.cache.DPNames",DPNames,
+        MainDBName+"ClaimManager.cache.claimDates",claimDates);
   
   for (int t = 1 ; t <= dynlen(typeNames); t++) {
     
@@ -347,8 +347,8 @@ void startLocalClaim() {
   // a new claim
   dpConnect( "claimCallback", 
     false,         
-    "claimManager.request.typeName", 
-    "claimManager.request.newObjectName" ); 
+    "ClaimManager.request.typeName", 
+    "ClaimManager.request.newObjectName" ); 
 
 }
 
@@ -362,8 +362,8 @@ void startLocalClaim() {
 //    A claim must be made via:
 //
 //    dpSet( 
-//      "claimManager.request.typeName", "ObsCtrl",
-//      "claimManager.request.newObjectName", "MYOBSERVATION" );
+//      "ClaimManager.request.typeName", "ObsCtrl",
+//      "ClaimManager.request.newObjectName", "MYOBSERVATION" );
 //
 // Returns:
 //    None
@@ -409,10 +409,10 @@ void claimCallback(
       dyn_time   claimDates;
 
       // get all lists of claimed datapoints 
-      dpGet("claimManager.cache.typeNames",typeNames,
-        		"claimManager.cache.newObjectNames",newObjectNames,
-        		"claimManager.cache.DPNames",DPNames,
-        		"claimManager.cache.claimDates",claimDates); 
+      dpGet("ClaimManager.cache.typeNames",typeNames,
+        		"ClaimManager.cache.newObjectNames",newObjectNames,
+        		"ClaimManager.cache.DPNames",DPNames,
+        		"ClaimManager.cache.claimDates",claimDates); 
       
       // we need to check if the data is allready in the cacheArrays, to avoid duplication.
       // same type and same name and same dpname  only the claimdate might need to be changed.
@@ -459,19 +459,19 @@ void claimCallback(
       }
       
       // write back
-      dpSet("claimManager.cache.typeNames",typeNames,
-        		"claimManager.cache.newObjectNames",newObjectNames,
-        		"claimManager.cache.DPNames",DPNames,
-        		"claimManager.cache.claimDates",claimDates);  
+      dpSet("ClaimManager.cache.typeNames",typeNames,
+        		"ClaimManager.cache.newObjectNames",newObjectNames,
+        		"ClaimManager.cache.DPNames",DPNames,
+        		"ClaimManager.cache.claimDates",claimDates);  
     }
     
     if (bDebug) DebugN("claim.ctl:claimCallback|Set ClaimManagers Response point");
     // for master and client, if not strDP == empty
     dpSet(
-      "claimManager.response.DPName"       , dpSubStr(strDP,DPSUB_DP),
-      "claimManager.response.typeName"     , strTypeName,
-      "claimManager.response.newObjectName", strNewObjectName,
-      "claimManager.response.claimDate"    , claimDate );
+      "ClaimManager.response.DPName"       , dpSubStr(strDP,DPSUB_DP),
+      "ClaimManager.response.typeName"     , strTypeName,
+      "ClaimManager.response.newObjectName", strNewObjectName,
+      "ClaimManager.response.claimDate"    , claimDate );
   }
 
 }
diff --git a/MAC/Navigator2/scripts/libs/GCFAlarm.ctl b/MAC/Navigator2/scripts/libs/GCFAlarm.ctl
index a6caf47d4e8280db007d8231aa1e51072f648ca6..d5069af7b8034c904359b210d969d589fcb5a97f 100644
--- a/MAC/Navigator2/scripts/libs/GCFAlarm.ctl
+++ b/MAC/Navigator2/scripts/libs/GCFAlarm.ctl
@@ -155,7 +155,7 @@ void setAlarms(string dp,dyn_time times,dyn_string names, dyn_string messages, d
 // *******************************************
 void distSystemTriggered(string dp1, dyn_int systemList) {
   
-  string query = "SELECT '_original.._value' FROM '{__navObjectState.DPName,__navObjectState.stateNr,__navObjectState.message}' REMOTE ALL WHERE _DPT = \"NCFObjectState\" SORT BY 0";
+  string query = "SELECT '_original.._value' FROM '{__navObjectState.DPName,__navObjectState.stateNr,__navObjectState.message,__navObjectState.force}' REMOTE ALL WHERE _DPT = \"NCFObjectState\" SORT BY 0";
   
   
   if (isConnected) {
@@ -187,11 +187,12 @@ void objectStateCallback(string ident, dyn_dyn_anytype aResult) {
   if (dynlen(aResult) <= 0) {
     return;
   }
-  //get the stateNr and DP that go with this message This will need to be done in one call later though!!
+  //get the stateNr and DP that go with this message
   time aTime     = getCurrentTime();
   string aDP     = aResult[2][2];
   int state      = (int)aResult[3][2];
   string message = aResult[4][2];
+  bool force     = aResult[5][2];
   int aStatus    = CAME;
   
   // Is this an existing Timestamp DP state combo or a new one
@@ -311,6 +312,7 @@ void objectStateCallback(string ident, dyn_dyn_anytype aResult) {
   LOG_DEBUG("GCFAlarm.ctl:objectStateCallback|Found: State     - "+state);
   LOG_DEBUG("GCFAlarm.ctl:objectStateCallback|Found: Message   - "+message);
   LOG_DEBUG("GCFAlarm.ctl:objectStateCallback|Found: Status    - "+aStatus);
+  LOG_DEBUG("GCFAlarm.ctl:objectStateCallback|Found: Force     - "+force);
   // Now store the values 
   g_alarms[ "TIME"    ][iPos] = aTime;
   g_alarms[ "STATE"   ][iPos] = state;
@@ -320,7 +322,7 @@ void objectStateCallback(string ident, dyn_dyn_anytype aResult) {
   
   // fill initial alarms from database.
   if (dpExists(DPNAME_NAVIGATOR + g_navigatorID + ".alarms")) {
-    LOG_DEBUG("GCFAlarm.ctl:objectStateCallback|Storing the alarsm in db");
+    LOG_DEBUG("GCFAlarm.ctl:objectStateCallback|Storing the alarms in db");
     setAlarms(DPNAME_NAVIGATOR + g_navigatorID + ".alarms",
               g_alarms[ "TIME"],g_alarms[ "DPNAME"   ],g_alarms[ "MESSAGE"  ],g_alarms[ "STATE"    ],g_alarms[ "STATUS"   ]);
   } else {
diff --git a/MAC/Navigator2/scripts/libs/GCFLogging.ctl b/MAC/Navigator2/scripts/libs/GCFLogging.ctl
index 06af58b67e6a00576e583218f80c69ead67194b7..cfa8fe5831324cc6ea96d387e53ceba9c098f76f 100644
--- a/MAC/Navigator2/scripts/libs/GCFLogging.ctl
+++ b/MAC/Navigator2/scripts/libs/GCFLogging.ctl
@@ -40,7 +40,6 @@
 //
 
 
-const string DPNAME_LOGLEVEL = "__loglevel";
 
 const int LOGLEVEL_FATAL = 50000;
 const int LOGLEVEL_ERROR = 40000;
@@ -57,7 +56,11 @@ const string LOGMESSAGE_DEBUG = "DEBUG";
 const string LOGMESSAGE_TRACE = "TRACE";
 
 // set the loglevel throughout the navigator
-global int  g_loglevel = 0;
+global int  g_logLevel = 0;
+global dyn_string g_logScope = "";
+global dyn_string g_searchString="";
+
+global string DPNAME_LOGLEVEL = "";
 global bool g_logInitialized = false;
 ////////////////////////////////////////////////////////////////////////////////
 //
@@ -68,11 +71,19 @@ global bool g_logInitialized = false;
 ////////////////////////////////////////////////////////////////////////////////
 void setLoglevel(int newLevel)
 {
-	DebugTN("setting loglevel to:", newLevel);
-	g_loglevel = newLevel;
+  DebugTN("setting loglevel to:", newLevel);
+  if(dpExists(DPNAME_LOGLEVEL)) {
+    dyn_errClass err;
+    dpSet(DPNAME_LOGLEVEL+".logLevel",newLevel);
+    err = getLastError();
+    if (dynlen(err) > 0) {
+      errorDialog(err);
+    }
+  } else {
+    g_logLevel=newLevel;
+  }  
 }
 
-
 ////////////////////////////////////////////////////////////////////////////////
 //
 // Function LOG_DYN(dyn array) : string
@@ -259,17 +270,33 @@ void LOG_TRACE(string prefix, ...) // the prefix is necessary, otherwise PVSS wo
 ////////////////////////////////////////////////////////////////////////////////
 void LOG_MESSAGE(int level, string logmessage, dyn_anytype message)
 {
-	if(!g_logInitialized) {
-		initLog();
-	}
-
-	if (level >= g_loglevel) {
-		string msg = logmessage;
-		for (int i = 1; i <= dynlen(message); i++) {
-			msg += ", " + message[i];
-		}
-		DebugTN (msg);
-	}
+  // check if level is wanted
+  if (level >= g_logLevel) {
+    
+    // split the original string and check against scopes and searchstrings wanted
+    string originator="";
+    string function="";
+    string ms = "";
+    splitLogString(message,originator,function,ms);
+    bool logflag=false;
+    if (dynlen(g_logScope) < 1 && dynlen(g_searchString) < 1) {      // If No search criteria, just print
+      logflag = true;
+    } else if (originator == "" && function == "" ) {                // If empty split, just print
+      logflag = true;
+    } else if (matchLogScope(originator,function)) {     // if logscope contains originator or function
+      logflag = true;
+    } else if (matchSearchString(ms)) {    // if searchstring found in ms
+      logflag = true;
+    }
+    
+    if (logflag) {
+      string msg = logmessage;
+      for (int i = 1; i <= dynlen(message); i++) {
+        msg += ", " + message[i];
+      }
+      DebugTN (msg);
+    }
+  }
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -279,18 +306,21 @@ void LOG_MESSAGE(int level, string logmessage, dyn_anytype message)
 // Connects the loglevelUpdated function to the loglevel DP to capture changes.
 //
 ////////////////////////////////////////////////////////////////////////////////
-void initLog()
+void initLog(string logDP)
 {
+  DPNAME_LOGLEVEL=logDP;
 	if(!g_logInitialized) {
 		if(dpExists(DPNAME_LOGLEVEL)) {
 			dyn_errClass err;
-			dpGet(DPNAME_LOGLEVEL+".",g_loglevel);
+			dpGet(DPNAME_LOGLEVEL+".logLevel",g_logLevel);
 			err = getLastError();
 			if (dynlen(err) > 0) {
 				errorDialog(err);
 			}
 			// monitor future updates:
-			dpConnect("loglevelUpdated",DPNAME_LOGLEVEL+".");
+			dpConnect("loglevelUpdated",DPNAME_LOGLEVEL+".logLevel",
+                                                    DPNAME_LOGLEVEL+".logScope",
+                                                    DPNAME_LOGLEVEL+".searchString");
 			err = getLastError();
 			if (dynlen(err) > 0) {
 				errorDialog(err);
@@ -309,10 +339,89 @@ void initLog()
 // Copies value to own admin and logs the change.
 //
 ////////////////////////////////////////////////////////////////////////////////
-void loglevelUpdated(string dp,int newLevel)
+void loglevelUpdated(string dp1, int newLevel,
+                     string dp2, dyn_string scope,
+                     string dp3, dyn_string search)
 {
-	DebugTN("new loglevel:", newLevel);
-	g_loglevel = newLevel;
+	DebugTN("new loglevel     : ", newLevel);
+	DebugTN("new scopes       : ", scope);
+	DebugTN("new searchStrings: ", search);
+	g_logLevel = newLevel;
+        g_logScope = scope;
+        g_searchString = search;
 }
 
 
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// splitLogString
+//
+// LogMsg's should look like:
+//
+//   LOG_TRACE("navigator.pnl:fw_viewBoxEvent| trigger: " + someinfo);
+//
+//   This routine will split the 3 main streams from a log msg into seperate vars.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+void splitLogString(string aString, string& originator, string& function, string& msg) {
+  dyn_string aS1= strsplit(aString,"|");
+  if (dynlen(aS1) > 1) {
+    msg=aS1[2];
+    for (int i=3;i<=dynlen(aS1);i++) {
+      msg= msg+"|"+aS1[i];
+    }
+    dyn_string aS2=strsplit(aS1[1],":");
+    if (dynlen(aS2) > 1) {
+      function = aS2[2];
+      originator = aS2[1];
+    } else if (dynlen(aS2) == 1) {
+      originator = aS2[1];
+      function = "";
+    }    
+  } else if (dynlen(aS1) == 1) {
+    msg=aS1[1];
+  }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Function matchLogScope
+//
+// Checks if entries in the g_logScope array match with the originator or function
+//
+////////////////////////////////////////////////////////////////////////////////
+bool matchLogScope(string originator,string function)
+{
+  int i;
+  for (i=1; i<= dynlen(g_logScope); i++) {
+    if (strpos(originator,g_logScope[i]) > -1) {
+      return true;
+    }
+  }
+  for (i=1; i<= dynlen(g_logScope); i++) {
+    if (strpos(function,g_logScope[i]) > -1) {
+      return true;
+    }
+  }
+  return false;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Function matchSearchString
+//
+// Checks if entries in the g_searchString array match with the remaining msg
+//
+////////////////////////////////////////////////////////////////////////////////
+bool matchSearchString(string msg)
+{
+  int i;
+  for (i=1; i<= dynlen(g_searchString); i++) {
+    if (strpos(msg,g_searchString[i]) > -1 && g_searchString[i] != "") {
+      return true;
+    }
+  }
+  return false;
+}
diff --git a/MAC/Navigator2/scripts/libs/MainCU_Processes.ctl b/MAC/Navigator2/scripts/libs/MainCU_Processes.ctl
index c1b091065d2fff05403768d10bbdac6f78c521f4..d6a94066b9c709fedbebc1fc6fd827e63c0eca12 100644
--- a/MAC/Navigator2/scripts/libs/MainCU_Processes.ctl
+++ b/MAC/Navigator2/scripts/libs/MainCU_Processes.ctl
@@ -56,7 +56,7 @@ void MainCU_Processes_initList() {
   dyn_dyn_anytype tab;
   //PermSW + PermSW_Daemons
   dpQuery("SELECT '_original.._value' FROM 'LOFAR_PermSW_*.status.state' ", tab);
-  LOG_TRACE("MainCU_Processes.pnl:main|Found: "+ tab);
+  LOG_TRACE("MainCU_Processes.ctl:initList|Found: "+ tab);
   
   dyn_string aDS=navFunct_getDynString(tab, 2,1);
   dynSortAsc(aDS);
@@ -82,6 +82,12 @@ void MainCU_Processes_initList() {
       result[z]=","+spl[1]+","+path;
     }
   }
+  
+  if (!dpExists(MainDBName+"LOFAR_PermSW_MACScheduler.activeObservations")) {
+    setValue("activeObs","backCol","_dpdoesnotexist");
+  } else {
+    dpConnect("MainCU_Processes_ActiveObsCallback",true,"LOFAR_PermSW_MACScheduler.activeObservations");
+  }
  
   dpSet(DPNAME_NAVIGATOR + g_navigatorID + ".processesList",result);
   
@@ -100,22 +106,22 @@ void MainCU_Processes_initList() {
 // ***************************************
 void MainCU_Processes_UpdateMainControllers() {
   string newSelectedObservation=activeObs.getText(activeObs.selectedItem(),0);
+  LOG_TRACE("MainCU_Processes.ctl:updateMainControllers|selected observation: "+ selectedObservation +" New: "+ newSelectedObservation);
   // check if selection is made, and the selection is indeed a new one
-  if (newSelectedObservation != selectedObservation && newSelectedObservation != "") {
-    selectedObservation = newSelectedObservation;
+  if (newSelectedObservation != 0) {
     selectedStation="";
+    selectedObservation = newSelectedObservation;
+    observationName.text(selectedObservation);
     // get the real name from the selected Observation
     obsBaseDP=claimManager_nameToRealName("LOFAR_ObsSW_"+selectedObservation);   
-    
+    LOG_TRACE("MainCU_Processes.ctl:updateMainControllers|connecting to  Main Observation Ctrls");    
     dpSet(DPNAME_NAVIGATOR + g_navigatorID + ".updateTrigger.objectName","ObsCtrlPanel",
           DPNAME_NAVIGATOR + g_navigatorID + ".updateTrigger.paramList",makeDynString(obsBaseDP));
     dpSet(DPNAME_NAVIGATOR + g_navigatorID + ".updateTrigger.objectName","OnlineCtrl_StorageApplPanel",
           DPNAME_NAVIGATOR + g_navigatorID + ".updateTrigger.paramList",makeDynString(obsBaseDP));
     dpSet(DPNAME_NAVIGATOR + g_navigatorID + ".updateTrigger.objectName","OnlineCtrl_CorrelatorPanel",
           DPNAME_NAVIGATOR + g_navigatorID + ".updateTrigger.paramList",makeDynString(obsBaseDP));
-
   }
-
 }
 
 // ****************************************
@@ -128,8 +134,10 @@ void MainCU_Processes_UpdateMainControllers() {
 // ***************************************
 void MainCU_Processes_UpdateStationControllers() {
   string newSelectedStation=stationTree.getText(stationTree.selectedItem(),0);
+
+  LOG_TRACE("MainCU_Processes.ctl:updateStationControllers|selected station: "+ selectedStation +" New: "+ newSelectedStation);
   // check if selection is made, and the selection is indeed a new one
-  if (newSelectedStation != selectedStation && newSelectedStation != "") {
+  if (newSelectedStation != 0) {  
     selectedStation = newSelectedStation;
     stationDBName.text(selectedStation);
     MainCU_Processes_UpdateProcessesList();
@@ -153,6 +161,7 @@ void MainCU_Processes_UpdateStationControllers() {
 //  
 // ***************************************
 void MainCU_Processes_UpdateProcessesList() {
+  LOG_TRACE("MainCU_Processes.ctl:updateProcessesList|entered");
   dyn_string list;
   
   // copy old results from rest of the panel to the new list
@@ -208,7 +217,7 @@ void MainCU_Processes_UpdateProcessesList() {
 
       //select all Ctrl under Station:LOFAR_PermSW_'selectedObservation'
       dpQuery("SELECT '_original.._value' FROM '"+stationObsDP+"_*.status.state' REMOTE '"+selectedStation+":'", tab);
-      LOG_TRACE("MainCU_Processes.pnl:updateProcessesList|Station Controllers Found: "+ tab);
+      LOG_TRACE("MainCU_Processes.ctl:updateProcessesList|Station Controllers Found: "+ tab);
       
       aDS=navFunct_getDynString(tab, 2,1);
       dynSortAsc(aDS);
@@ -239,26 +248,27 @@ void MainCU_Processes_UpdateProcessesList() {
     // trigger that the panel values are calculated and ready
     navPanel_setEvent("MainCU_Processes.ctl:updateProcessesList","Update");
   }
-//  navPanel_setEvent("ObsSW_Main|"+selectedStation+"|"+selectedObservation,"EventClick");
 } 
 
 MainCU_Processes_UpdateStationTree() {
 
-  // empty the table
+  LOG_TRACE("MainCU_Processes.ctl:updateStationTree|entered. Selected Observation: "+selectedObservation);
+    // empty the table
   stationTree.clear();
   
   
   if (selectedObservation == "") {
     return;
   }
-   
-  if (obsBaseDP != "") {
+  
+  LOG_DEBUG("MainCU_Processes.ctl:updateStationTree|obsBaseDP: "+obsBaseDP);
+  if (dpExists(obsBaseDP)) {
     // look if that name is available in the Observation List
     int j = dynContains(g_observations["DP"],obsBaseDP);
     if ( j > 0) {
       // get the Stationlist from that observation
       string sts=g_observations["STATIONLIST"][j];
-      LOG_DEBUG("MainCU_Processes.ctl:MainCU_Processes_UpdateStationTree|Found Stationlist for this Observation: "+ sts);
+      LOG_DEBUG("MainCU_Processes.ctl:UpdateStationTree|Found Stationlist for this Observation: "+ sts);
       // add stations if not allready there
       dyn_string stations = strsplit(sts,",");
       for (int k=1; k<= dynlen(stations);k++) {
@@ -268,13 +278,66 @@ MainCU_Processes_UpdateStationTree() {
           stationTree.setIcon(stations[k],0,"16_empty.gif");
           if (k==1) {
             stationTree.setSelectedItem(stations[k],true);
+            selectedStation=stations[k];
           }
         }
       }
+      LOG_TRACE("MainCU_Processes.ctl:updateStationTree|calling UpdateStationControllers. selected ststion: "+selectedStation);
       MainCU_Processes_UpdateStationControllers();
     }
   }
 }
 
+MainCU_Processes_ActiveObsCallback(string dp1, dyn_string activeObservations) {
+  LOG_TRACE("MainCU_Processes.ctl:activeObsCallback|Found: "+ activeObservations);
+
+  // empty the table
+  activeObs.clear();
+  
+  // if the active observations list changes the list here should be changed also.
+  // iterate over the found entries and fill the table
+  // if no previous Observation selected, set selection to the first on the list, also
+  // set it here when previous selection disappeared from the list.
+  // otherwise nothing will be changed in the selection
+
+  int idx=-1;
+  string newSelection="";
+  string oldSelection=activeObs.selectedItem();
+  selectedObservation=oldSelection;
+  LOG_DEBUG("MainCU_Processes.ctl:activeObsCallback|oldSelection: "+oldSelection);
+  for (int i=1; i<= dynlen(activeObservations);i++) {
+    string realName=claimManager_nameToRealName("LOFAR_ObsSW_"+activeObservations[i]);
+    activeObs.appendItem("",realName,activeObservations[i]);
+    activeObs.ensureItemVisible(realName);
+    activeObs.setIcon(realName,0,"16_empty.gif");
+    if (i==1) {
+      newSelection=realName;
+    }
+  }
+  
+  if ((oldSelection == newSelection) ||
+      (oldSelection != "" && activeObs.itemExists(oldSelection))) {
+    activeObs.setSelectedItem(oldSelection,true);
+    selectedObservation=activeObs.getText(activeObs.selectedItem(),0); 
+    observationName.text(selectedObservation);
+    LOG_DEBUG("MainCU_Processes.ctl:activeObsCallback|Selection: "+selectedObservation);
+    // nothing further needed
+    return;
+  } else {
+    activeObs.setSelectedItem(newSelection,true);    
+    selectedObservation=activeObs.getText(activeObs.selectedItem(),0); 
+  }
+  
+  observationName.text(selectedObservation);
+  LOG_DEBUG("MainCU_Processes.ctl:activeObsCallback|Selection: "+selectedObservation);
+  
+  // something has changed, so update Main Controllers
+  LOG_DEBUG("MainCU_Processes.ctl:activeObsCallback|Starting updateMainControllers");
+  MainCU_Processes_UpdateMainControllers(); 
+  LOG_DEBUG("MainCU_Processes.ctl:activeObsCallback|Starting updateStationTree");
+  MainCU_Processes_UpdateStationTree(); 
+   
+}
+
 
   
diff --git a/MAC/Navigator2/scripts/libs/Station_Processes.ctl b/MAC/Navigator2/scripts/libs/Station_Processes.ctl
index 54888f0feeb01d7f0f00cc021994d63ff4c3c1f4..7eb3d5a7b8a26b63e93ad23f67471f5e24c1a2c6 100644
--- a/MAC/Navigator2/scripts/libs/Station_Processes.ctl
+++ b/MAC/Navigator2/scripts/libs/Station_Processes.ctl
@@ -32,6 +32,7 @@
 
 #uses "GCFLogging.ctl"
 #uses "GCFCommon.ctl"
+#uses "MainCU_Processes.ctl"
 
 global dyn_string station_result;
 global string station_selectedObservation    = "";
@@ -47,8 +48,9 @@ global string station_obsBaseDP              = "";
 //  
 // ***************************************
 bool Station_Processes_initList() {
-  station_selectedObservation="";
+  station_selectedObservation=selectedObservation;
   station_selectedStation=dpSubStr(g_currentDatapoint,DPSUB_SYS);
+  station_selectedStation=selectedStation;
   station_obsBaseDP="";
   
   dynClear(station_result);
@@ -56,7 +58,10 @@ bool Station_Processes_initList() {
   int z;
   dyn_dyn_anytype tab;
   //PermSW + PermSW_Daemons
-  dpQuery("SELECT '_original.._value' FROM 'LOFAR_PermSW_*.status.state' REMOTE '" +station_selectedStation + "'", tab);
+  string query="SELECT '_original.._value' FROM 'LOFAR_PermSW_*.status.state' REMOTE '" +station_selectedStation + "'";
+  LOG_TRACE("Station_Processes.ctl:initList|Query: "+ query);
+  
+  dpQuery(query, tab);
   LOG_TRACE("Station_Processes.ctl:initList|Found: "+ tab);
   
 
@@ -84,6 +89,13 @@ bool Station_Processes_initList() {
       station_result[z]=","+spl[1]+","+path;
     }
   }
+  
+  if (!dpExists(MainDBName+"LOFAR_PermSW_MACScheduler.activeObservations")) {
+    setValue("activeStationObs","backCol","_dpdoesnotexist");
+  } else {
+    dpConnect("Station_Processes_ActiveStationObsCallback",true,"LOFAR_PermSW_MACScheduler.activeObservations");
+  }
+
  
   dpSet(DPNAME_NAVIGATOR + g_navigatorID + ".processesList",station_result);
   
@@ -101,18 +113,23 @@ bool Station_Processes_initList() {
 //  
 // ***************************************
 bool Station_Processes_UpdateStationControllers() {
-  string newSelectedObservation=activeStationObs.getText(activeStationObs.selectedItem(),0);
   string newSelectedStation=stationTree.getText(stationTree.selectedItem(),0);
+  LOG_TRACE("Station_Processes.ctl:updateStationControllers|selected station: "+ station_selectedStation +" New: "+ newSelectedStation);
 
-  stationDBName.text(station_selectedStation);
-
-  dpSet(DPNAME_NAVIGATOR + g_navigatorID + ".updateTrigger.objectName","BeamCtrlPanel",
-        DPNAME_NAVIGATOR + g_navigatorID + ".updateTrigger.paramList",makeDynString(station_obsBaseDP,station_selectedStation));
-  dpSet(DPNAME_NAVIGATOR + g_navigatorID + ".updateTrigger.objectName","CalCtrlPanel",
-        DPNAME_NAVIGATOR + g_navigatorID + ".updateTrigger.paramList",makeDynString(station_obsBaseDP,station_selectedStation));
-  dpSet(DPNAME_NAVIGATOR + g_navigatorID + ".updateTrigger.objectName","TBBCtrlPanel",
-        DPNAME_NAVIGATOR + g_navigatorID + ".updateTrigger.paramList",makeDynString(station_obsBaseDP,station_selectedStation));
+  // check if selection is made, and the selection is indeed a new one
+  if (newSelectedStation != 0) {
+    station_selectedStation = newSelectedStation;
+    stationDBName.text(station_selectedStation);
+    
+    dpSet(DPNAME_NAVIGATOR + g_navigatorID + ".updateTrigger.objectName","BeamCtrlPanel",
+          DPNAME_NAVIGATOR + g_navigatorID + ".updateTrigger.paramList",makeDynString(station_obsBaseDP,station_selectedStation));
+    dpSet(DPNAME_NAVIGATOR + g_navigatorID + ".updateTrigger.objectName","CalCtrlPanel",
+          DPNAME_NAVIGATOR + g_navigatorID + ".updateTrigger.paramList",makeDynString(station_obsBaseDP,station_selectedStation));
+    dpSet(DPNAME_NAVIGATOR + g_navigatorID + ".updateTrigger.objectName","TBBCtrlPanel",
+          DPNAME_NAVIGATOR + g_navigatorID + ".updateTrigger.paramList",makeDynString(station_obsBaseDP,station_selectedStation));
+  }
     
+  LOG_TRACE("Station_Processes.ctl:UpdateStationControllers|call UpdateProcessesList");
   if (!Station_Processes_UpdateProcessesList()) {
     LOG_ERROR("Station_Processes.ctl:UpdateStationControllers|UpdateProcessesList returned false");
     return false;
@@ -129,6 +146,7 @@ bool Station_Processes_UpdateStationControllers() {
 //  
 // ***************************************
 bool Station_Processes_UpdateProcessesList() {
+  LOG_TRACE("Station_Processes.ctl:updateProcessesList|entered selected observation: "+ station_selectedObservation);
   dyn_string list;
   
   // copy old station_results from rest of the panel to the new list
@@ -142,13 +160,18 @@ bool Station_Processes_UpdateProcessesList() {
   if(station_selectedObservation != "") {
     // get the real name from the selected Observation
     string obsDP=claimManager_nameToRealName("LOFAR_ObsSW_"+station_selectedObservation);
-    obsDP=station_selectedStation+dpSubStr(obsDP,DPSUB_DP); 
     
+    if (strtok(station_selectedStation,":") < 0) {      
+      obsDP=station_selectedStation+":"+dpSubStr(obsDP,DPSUB_DP);
+    } else { 
+      obsDP=station_selectedStation+dpSubStr(obsDP,DPSUB_DP);
+    }    
     // add Observation 
     list[idx++]=","+station_selectedObservation+","+obsDP;
 
     //select all Ctrl under Station:LOFAR_PermSW_'station_selectedObservation'
     string query="SELECT '_original.._value' FROM '"+obsDP+"_*.status.state' REMOTE '"+station_selectedStation+"'";
+    LOG_DEBUG("Station_Processes.ctl:updateProcessesList|Query: "+ query);
     dpQuery(query, tab);
     LOG_TRACE("Station_Processes.ctl:updateProcessesList|Station Controllers Found: "+ tab);
       
@@ -195,7 +218,7 @@ Station_Processes_UpdateStationTree() {
   }
   
   LOG_DEBUG("Station_Processes.ctl:Station_Processes_UpdateStationTree|Found station_obsBaseDP: "+station_obsBaseDP);
-  if (station_obsBaseDP != "") {
+  if (dpExists(station_obsBaseDP)) {
     // look if that name is available in the Observation List
     int j = dynContains(g_observations["DP"],station_obsBaseDP);
     if ( j > 0) {
@@ -211,9 +234,11 @@ Station_Processes_UpdateStationTree() {
           stationTree.setIcon(stations[k],0,"16_empty.gif");
           if (k==1) {
             stationTree.setSelectedItem(stations[k],true);
+            station_selectedStation=stations[k];
           }
         }
       }
+      LOG_TRACE("Station_Processes.ctl:updateStationTree|calling UpdateStationControllers. selected ststion: "+station_selectedStation);
       if (!Station_Processes_UpdateStationControllers()) {
         LOG_ERROR("Station_Processes.ctl:UpdateStationTree|UpdateStationControllers returned false");
         return false;
@@ -223,4 +248,82 @@ Station_Processes_UpdateStationTree() {
 }
 
 
+
+Station_Processes_ActiveStationObsCallback(string dp1, dyn_string activeObservations) {
+  LOG_TRACE("Station_Processes.ctl:activeObsCallback|Found: "+ activeObservations);
+  
+  // empty the table
+  activeStationObs.clear();
+  station_obsBaseDP="";  
+  
+  // if the active observations list changes the list here should be changed also.
+  // iterate over the found entries and fill the table
+  // if no previous Observation selected, set selection to the first on the list, also
+  // set it here when previous selection disappeared from the list.
+  // otherwise nothing will be changed in the selection
+  
+  // check if this station is involved in an active observation, if so it will be added to the list
+
+  string newSelection="";
+  string oldSelection =activeStationObs.selectedItem();
+  if (oldSelection != "") {
+    station_selectedObservation=activeStationObs.getText(activeStationObs.selectedItem(),0); 
+  }
+  LOG_DEBUG("Station_Processes.ctl:activeObsCallback|oldSelection: "+oldSelection+ " station_selectedObservation: "+station_selectedObservation);
+   
+  bool first=true;
+  for (int i=1; i<= dynlen(activeObservations);i++) {
+    LOG_DEBUG("Station_Processes.ctl:activeObsCallback|checking g_observations for: "+"LOFAR_ObsSW_"+activeObservations[i]);
+    string realName=claimManager_nameToRealName("LOFAR_ObsSW_"+activeObservations[i]);
+    int j = dynContains(g_observations["NAME"],"LOFAR_ObsSW_"+activeObservations[i]);
+    if ( j > 0) {
+      LOG_DEBUG("Station_Processes.ctl:activeObsCallback|checking stationList for: "+station_selectedStation);      
+      // get the Stationlist from that observation
+      string sts=g_observations["STATIONLIST"][j];
+      LOG_DEBUG("Station_Processes.ctl:activeObsCallback|Stations found: "+sts);
+      dyn_string stations = strsplit(sts,",");
+      for (int k=1; k<= dynlen(stations);k++) { 
+        if (stations[k] == station_selectedStation) {
+          if (station_obsBaseDP == "") {
+            station_obsBaseDP=realName;
+          }
+          activeStationObs.appendItem("",realName,activeObservations[i]);
+          activeStationObs.ensureItemVisible(realName);
+          activeStationObs.setIcon(realName,0,"16_empty.gif");
+          if (station_selectedObservation == activeObservations[i]) {
+            newSelection=realName;
+            station_obsBaseDP=realName;
+            first=false;
+          }
+          if (first) {
+            newSelection=realName;
+            station_obsBaseDP=realName;
+            first=false;
+          }
+        }
+      }
+    }
+  }
+  
+  LOG_DEBUG("Station_Processes.ctl:activeObsCallback|oldSelection: "+oldSelection+" newSelection: "+newSelection);
+  
+  if ((oldSelection == newSelection) ||
+      (oldSelection != "" && activeStationObs.itemExists(oldSelection))) {
+    activeStationObs.setSelectedItem(oldSelection,true);    
+    station_selectedObservation=activeStationObs.getText(activeStationObs.selectedItem(),0); 
+    LOG_DEBUG("Station_Processes.ctl:activeObsCallback|Selection: "+station_selectedObservation);
+  } else {
+    activeStationObs.setSelectedItem(newSelection,true);    
+    station_selectedObservation=activeStationObs.getText(activeStationObs.selectedItem(),0); 
+  }
+  
+  LOG_DEBUG("Station_Processes.ctl:activeObsCallback|Selection: "+station_selectedObservation);
+  
+  // something has changed, so update Main Controllers
+  LOG_DEBUG("Station_Processes.ctl:activeObsCallback|Starting updateStationTree");  
+  // something has changed, so update Station Tree
+  Station_Processes_UpdateStationTree();
+   
+}
+
   
diff --git a/MAC/Navigator2/scripts/libs/navCtrl.ctl b/MAC/Navigator2/scripts/libs/navCtrl.ctl
index f33146d92efb3f6eff72c9a9bcd77c551c005926..c1a697c9f3e87c3f14b69865c4541a3e14140a8a 100644
--- a/MAC/Navigator2/scripts/libs/navCtrl.ctl
+++ b/MAC/Navigator2/scripts/libs/navCtrl.ctl
@@ -100,8 +100,8 @@ void navCtrl_handleViewBoxEvent(string dp,string value){
       dpSet(HEADLINESACTIONDP,"ChangeInfo|"+g_currentDatapoint);
    
       // update selectors   
-      dpSet(TOPDETAILSELECTIONACTIONDP,"Update");
-      dpSet(BOTTOMDETAILSELECTIONACTIONDP,"Update");
+//      dpSet(TOPDETAILSELECTIONACTIONDP,"Update");
+//      dpSet(BOTTOMDETAILSELECTIONACTIONDP,"Update");
     }
     return;
   }
@@ -120,6 +120,20 @@ void navCtrl_handleViewBoxEvent(string dp,string value){
     
     // Empty highlight string
     dynClear(strHighlight);
+    dynClear(highlight);
+    
+    for (int i=1;i<= dynlen(aSelection);i++){
+      dyn_string sel = strsplit(aSelection[i],"|"); 
+      LOG_DEBUG("navCtrl.ctl:navCtrl_handleViewBoxEvent|sel: "+sel); 
+      if (dynlen(sel) > 0) {
+        dynAppend(strHighlight,sel[1]);
+      }
+    }   
+    LOG_TRACE("navCtrl.ctl:navCtrl_handleViewBoxEvent| strHighlight contains now: "+strHighlight);                          
+    if (dynlen(strHighlight) > 0) {
+      LOG_TRACE("navCtrl.ctl:navCtrl_handleDetailSelectionEvent| Kick trigger");
+      dpSet(DPNAME_NAVIGATOR + g_navigatorID+".trigger",true);
+    }
     
     // inform headLines Object
     dpSet(HEADLINESACTIONDP,"ChangeInfo|"+aSelection);
@@ -285,12 +299,13 @@ void navCtrl_handleDetailSelectionEvent(string dp,string value,string target){
     }    
   }
   
-  // Empty highlight string
-  dynClear(strHighlight);
   
   // Fill highlight string        
   string action = "Highlight";
   if (anEvent == "EventClick") { 
+    // Empty highlight string
+    dynClear(highlight);
+    dynClear(strHighlight);
     for (int i=1;i<= dynlen(aSelection);i++){
       dyn_string sel = strsplit(aSelection[i],"|"); 
       LOG_DEBUG("navCtrl.ctl:navCtrl_handleDetailSelectionEvent|sel: "+sel); 
@@ -299,23 +314,13 @@ void navCtrl_handleDetailSelectionEvent(string dp,string value,string target){
           typeSelector=sel[1];
           observationType=sel[2];
           selection=sel[3];
-          int nr = dynContains(strHighlight,sel[3]);
-          if (nr > 0) {
-            dynRemove(strHighlight,nr);
-          } else {
-	    dynAppend(strHighlight,sel[3]);
-          }
+          dynAppend(strHighlight,sel[3]);
           action+="|"+sel[1]+"|"+sel[2]+"|"+sel[3];
         } else {  // Hardware or processes
           typeSelector=sel[1];
           observationType="";
           selection=sel[2];
-          int nr = dynContains(strHighlight,sel[2]);
-          if (nr >0) {
-            dynRemove(strHighlight,nr);
-          } else {
-	    dynAppend(strHighlight,sel[2]);
-          }
+          dynAppend(strHighlight,sel[2]);
           action+="|"+sel[1]+"|"+sel[2];
         }
       }
@@ -328,11 +333,9 @@ void navCtrl_handleDetailSelectionEvent(string dp,string value,string target){
       // Also prepare actions for the different objects that can do something
       // with this highlight.
       // the Detail selection events need to highlight the choices involved also
-      if (target=="bottom") {
-        dpSet(TOPDETAILSELECTIONACTIONDP,action);
-      } else {
-        dpSet(BOTTOMDETAILSELECTIONACTIONDP,action);
-      }
+      dpSet(TOPDETAILSELECTIONACTIONDP,action);
+      dpSet(BOTTOMDETAILSELECTIONACTIONDP,action);
+      
           
     }
   }
diff --git a/MAC/Navigator2/scripts/libs/navFunct.ctl b/MAC/Navigator2/scripts/libs/navFunct.ctl
index 21bbac765ce395f6f1240c0c9fc1be3ee775552b..5550ccff68de0ff00ce96cf7da30f3a8f6af7bea 100644
--- a/MAC/Navigator2/scripts/libs/navFunct.ctl
+++ b/MAC/Navigator2/scripts/libs/navFunct.ctl
@@ -42,7 +42,7 @@
 // navFunct_getDynString                      : Returns a dynString from a dyn_dyn[index]
 // navFunct_bareDBName                        : Returns a DatabaseName without the : (if any)
 // navFunct_findFirstOne                      : Returns the number of a given array that is true for a certain range
-
+// navFunct_acknowledgePanel                  : Returns acknowledge on a given action
 
 #uses "GCFLogging.ctl"
 #uses "GCFCommon.ctl"
@@ -114,7 +114,7 @@ void navFunct_queryConnectObservations()
 {
   
   
-  string strQuery = "SELECT '.name:_original.._value, .status.state:_original.._value, .status.childState:_original.._value' FROM '*' WHERE _DPT = \"Observation\"";
+  string strQuery = "SELECT '.claim.name:_original.._value, .status.state:_original.._value, .status.childState:_original.._value' FROM '*' WHERE _DPT = \"Observation\"";
   
   g_observations[ "DP"          ] = makeDynString();                    
   g_observations[ "NAME"        ] = makeDynString();
@@ -168,12 +168,17 @@ void navFunct_queryConnectObservations_Callback(
     if (aResult[t][2] != "") {
       string dpName = claimManager_nameToRealName(aResult[t][2]);
       //get stationList for this Observation from its ObsCtrl DP
-      LOG_TRACE("navFunct.ctl:navFunct_queryConnectObservations_Callback|Getting stationList for: "+dpName + ".stationList");
-      dpGet(dpName + ".stationList",strStationList);
-      g_observations[ "STATIONLIST" ][iPos] = strStationList;
+      LOG_TRACE("navFunct.ctl:navFunct_queryConnectObservations_Callback|Getting stationList for: "+aResult[t][2]+" ==> "+dpName + ".stationList");
+      if (dpExists(dpName + ".stationList")) {
+        dpGet(dpName + ".stationList",strStationList);
+        g_observations[ "STATIONLIST" ][iPos] = strStationList;
+        LOG_DEBUG("navFunct.ctl:navFunct_queryConnectObservations_Callback|StationList: "+g_observations["STATIONLIST"][iPos]);         
+      } else {
+        g_observations[ "STATIONLIST" ][iPos] = makeDynString();
+      }
     } else {
       g_observations[ "STATIONLIST" ][iPos] = makeDynString();
-    }         
+    }
   }
   
 }  
@@ -212,10 +217,26 @@ string navFunct_getArmFromStation(string stationName) {
 //    None
 // *******************************************
 void showMapping(mapping aM,string name) {
-  LOG_DEBUG( "navFunct.ctl:showMapping|Local mapping "+name +" contains now: " );
+  DebugN( "navFunct.ctl:showMapping|Local mapping "+name +" contains now: " );
   for (int i = 1; i <= mappinglen(aM); i++) { 
-  	LOG_DEBUG("navFunct.ctl:showMapping|mappingGetKey", i, " = "+mappingGetKey(aM, i));  
-		LOG_DEBUG("  mappingGetValue", i, " = "+mappingGetValue(aM, i));
+  	DebugN("navFunct.ctl:showMapping|mappingGetKey", i, " = "+mappingGetKey(aM, i));  
+		DebugN("  mappingGetValue", i, " = "+mappingGetValue(aM, i));
+  }
+}
+
+// *******************************************
+// Name : showDynArray
+// *******************************************
+// Description:
+//    Prints all values in a dyn_anytype
+//
+// Returns:
+//    None
+// *******************************************
+void showDynArray(dyn_anytype anArray,string name) {
+  DebugN( "navFunct.ctl:showDynArray|array "+name +" contains now: " );
+  for (int i = 1; i <= dynlen(anArray); i++) { 
+  	DebugN("navFunct.ctl:showDynArray|", i, " = "+anArray[i]);  
   }
 }
 
@@ -513,3 +534,27 @@ string navFunct_bareDBName(string aDBName) {
 // ****************************************
 dyn_string navFunct_findFirstOne(dyn_anytype tab, int start,int end) {
 }
+
+// ****************************************
+// Name : navFunct_acknowledgePanel 
+// ****************************************
+// Description:
+//    Acknowledge an action
+//
+// 
+// Returns:  
+//    Returns a bool
+// ****************************************
+bool navFunct_acknowledgePanel(string text) {
+  dyn_float dreturnf;   // Variables for the return values
+ 
+  dyn_string dreturns;
+  bool  retVal=false;
+
+  
+  ChildPanelOnReturn("vision/MessageInfo","Confirm",makeDynString("$1:"+text,"$2:Yes","$3:No"),10,10,dreturnf, dreturns);
+ 
+  // The code below is executed first when the child panel is closed
+  if (dreturns == "true") retVal=true;
+  return retVal;
+}
diff --git a/MAC/Navigator2/scripts/libs/navTabCtrl.ctl b/MAC/Navigator2/scripts/libs/navTabCtrl.ctl
index bb7299d280ae7e6aae4537d4e4f14f08a5ce6b6f..6e5e9d776e896019458176b4e3474d547e5baf5e 100644
--- a/MAC/Navigator2/scripts/libs/navTabCtrl.ctl
+++ b/MAC/Navigator2/scripts/libs/navTabCtrl.ctl
@@ -219,8 +219,15 @@ bool navTabCtrl_showView()
   dyn_string viewPanels = navTabCtrl_getViewPanels();
    
 
+  // empty all highlights
+  dynClear(highlight);
+  dynClear(strHighlight);
+  
   // load the view
   if (dynlen(viewPanels) > 0) {
+    // remove old view
+    navTabCtrl_removeView();
+    
     LOG_DEBUG("navTabCtrl.ctl:navTabCtrl_showView|Trying to load panel: "+viewPanels[1]);
     setValue(tabCtrl,"namedRegisterPanel", ACTIVE_TAB, viewPanels[1], makeDynString(""));
     return true;
diff --git a/MAC/Navigator2/scripts/libs/navigator.ctl b/MAC/Navigator2/scripts/libs/navigator.ctl
index c4f0b909d3b2ad0022da59626567162d81d618d4..701f4cac5a2d1f716a5565c3ef6531afb633eafc 100644
--- a/MAC/Navigator2/scripts/libs/navigator.ctl
+++ b/MAC/Navigator2/scripts/libs/navigator.ctl
@@ -80,6 +80,17 @@ void navigator_handleEventInitialize()
   // make sure there is a __navigator<id> datapoint of the type GCFNavigatorInstance.
   navConfig_setNavigatorID(navID); 
 
+  // Do a dpQueryConnectSingle() so that we get a permanent list of claims
+  // we can use this to translate a claimed name into a real datapoint name
+  claimManager_queryConnectClaims();
+  
+  // initialize the logSystem
+  if (dpExists(DPNAME_NAVIGATOR + g_navigatorID + ".logger")) {
+    initLog(DPNAME_NAVIGATOR + g_navigatorID + ".logger");
+  } else {
+    DebugN("ERROR: Logsystem hasn't been found.");
+  }
+
   // set user to root for now, has to be taken from PVSS login later
   if (dpExists(DPNAME_NAVIGATOR + g_navigatorID + ".user")) {
     dpSet(DPNAME_NAVIGATOR + g_navigatorID + ".user",getUserName());
diff --git a/MAC/Navigator2/scripts/monitorStateChanges.ctl b/MAC/Navigator2/scripts/monitorStateChanges.ctl
index 0d67a60a95f3bc00c6327f8708aabffe256be5d6..51c3841eee473b0284c85e0dce8d12a08ed3a8a9 100644
--- a/MAC/Navigator2/scripts/monitorStateChanges.ctl
+++ b/MAC/Navigator2/scripts/monitorStateChanges.ctl
@@ -28,7 +28,7 @@
 // 
 
 global bool isConnected=false;
-global bool bDebug = true;
+global bool bDebug = false;
 
 main () {
 
@@ -188,9 +188,9 @@ void stationStateTriggered(string ident, dyn_dyn_anytype tab) {
     // if all needed values are available we can start doing the major update.
     if (state >-1 && datapoint != "" && station != "" && armName != "" && element != ""){
       if (ident == "PIC") {
-	      setStates(datapoint + "_"+ armName + "_" + station,element,state,"",true);
+	      setStates(datapoint + "_"+ armName + "_" + station,element,state,"",true,true);
       } else {
-	      setStates(datapoint,element,state,"",true);
+	      setStates(datapoint,element,state,"",true,true);
       }
     }
   }