diff --git a/MAC/APL/PIC/_RegisterAccess/src/ARAPhysicalModel.cc b/MAC/APL/PIC/_RegisterAccess/src/ARAPhysicalModel.cc
index c48c265eea361daf6f72ec9653355ae5d602a3e6..a832f438853804921f91d41d2afc02976a03e899 100644
--- a/MAC/APL/PIC/_RegisterAccess/src/ARAPhysicalModel.cc
+++ b/MAC/APL/PIC/_RegisterAccess/src/ARAPhysicalModel.cc
@@ -26,7 +26,8 @@
 
 #include <GCF/PAL/GCF_ExtProperty.h>
 #include <GCF/GCF_PVUnsigned.h>
-#include <GCF/ParameterSet.h>
+#include <APS/ParameterSet.h>
+#include <Common/LofarLocators.h>
 
 #include "ARAPhysicalModel.h"
 #include "ARAPropertyDefines.h"
@@ -35,6 +36,7 @@
 using namespace std;
 using namespace boost;
 
+using namespace LOFAR::ACC::APS;
 using namespace LOFAR::GCF::Common;
 using namespace LOFAR::GCF::TM;
 using namespace LOFAR::GCF::PAL;
@@ -51,13 +53,22 @@ ARAPhysicalModel::ARAPhysicalModel() :
 {
   int rack,subrack,board,ap,rcu;
 
-  ParameterSet::instance()->adoptFile(GCF::ParameterSet::instance()->getSearchPath() + string("RegisterAccess.conf"));
+  try
+  {
+    ConfigLocator cl;
+    globalParameterSet()->adoptFile(cl.locate("RegisterAccess.conf"));
+  }
+  catch (Exception e)
+  {
+    LOG_ERROR_STR("Failed to load configuration files: " << e.text());
+    exit(EXIT_FAILURE);
+  }
 
-  int n_racks               = ParameterSet::instance()->getInt(PARAM_N_RACKS);
-  int n_subracks_per_rack   = ParameterSet::instance()->getInt(PARAM_N_SUBRACKS_PER_RACK);
-  int n_boards_per_subrack  = ParameterSet::instance()->getInt(PARAM_N_BOARDS_PER_SUBRACK);
-  int n_aps_per_board       = ParameterSet::instance()->getInt(PARAM_N_APS_PER_BOARD);
-  int n_rcus_per_ap         = ParameterSet::instance()->getInt(PARAM_N_RCUS_PER_AP);
+  int n_racks               = globalParameterSet()->getInt32(PARAM_N_RACKS);
+  int n_subracks_per_rack   = globalParameterSet()->getInt32(PARAM_N_SUBRACKS_PER_RACK);
+  int n_boards_per_subrack  = globalParameterSet()->getInt32(PARAM_N_BOARDS_PER_SUBRACK);
+  int n_aps_per_board       = globalParameterSet()->getInt32(PARAM_N_APS_PER_BOARD);
+  int n_rcus_per_ap         = globalParameterSet()->getInt32(PARAM_N_RCUS_PER_AP);
 
   char tempString[200];
   vector<string> childrenPIC,childrenRack,childrenSubRack,childrenBoard;
diff --git a/MAC/APL/PIC/_RegisterAccess/src/ARAPropertyDefines.h b/MAC/APL/PIC/_RegisterAccess/src/ARAPropertyDefines.h
index bf82f800dd68acc4ec53a8870114b12422cbad71..94cdab7662e1f734b617694976e7ac9a169a3d01 100644
--- a/MAC/APL/PIC/_RegisterAccess/src/ARAPropertyDefines.h
+++ b/MAC/APL/PIC/_RegisterAccess/src/ARAPropertyDefines.h
@@ -36,10 +36,10 @@ const int STATUS_OK = 0;
 const int STATUS_ERROR = 1;
 
 /*
-const int N_RACKS               = 1; // 6
-const int N_SUBRACKS_PER_RACK   = 1; // 4
-const int N_BOARDS_PER_SUBRACK  = 1;
-const int N_APS_PER_BOARD       = 1;
+const int N_RACKS               = 3; // 6
+const int N_SUBRACKS_PER_RACK   = 2; // 4
+const int N_BOARDS_PER_SUBRACK  = 4;
+const int N_APS_PER_BOARD       = 4;
 const int N_RCUS_PER_AP         = 2;
 const int N_RCUS                = N_RCUS_PER_AP*
                                   N_APS_PER_BOARD*
@@ -73,42 +73,42 @@ const char APC_MEPStatus[]      = "ApcMEPStatusType";
 const char APC_SYNCStatus[]     = "ApcSYNCStatusType";
 const char APC_BoardRCUStatus[] = "ApcBoardRCUStatusType";
 
-const char SCOPE_PIC[] =                                              "PIC";
-const char SCOPE_PIC_RackN[] =                                        "PIC_Rack%d";
-const char SCOPE_PIC_RackN_SubRackN[] =                               "PIC_Rack%d_SubRack%d";
-const char SCOPE_PIC_RackN_SubRackN_BoardN[] =                        "PIC_Rack%d_SubRack%d_Board%d";
-const char SCOPE_PIC_RackN_SubRackN_BoardN_MEPStatus[] =              "PIC_Rack%d_SubRack%d_Board%d_MEPStatus";
-const char SCOPE_PIC_RackN_SubRackN_BoardN_ETH[] =                    "PIC_Rack%d_SubRack%d_Board%d_ETH";
-const char SCOPE_PIC_RackN_SubRackN_BoardN_BP[] =                     "PIC_Rack%d_SubRack%d_Board%d_BP";
-const char SCOPE_PIC_RackN_SubRackN_BoardN_APN[] =                    "PIC_Rack%d_SubRack%d_Board%d_AP%d";
-const char SCOPE_PIC_RackN_SubRackN_BoardN_APN_SYNCStatus[] =         "PIC_Rack%d_SubRack%d_Board%d_AP%d_SYNCStatus";
-const char SCOPE_PIC_RackN_SubRackN_BoardN_APN_BoardRCUStatus[] =     "PIC_Rack%d_SubRack%d_Board%d_AP%d_BoardRCUStatus";
-const char SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN[] =               "PIC_Rack%d_SubRack%d_Board%d_AP%d_RCU%d";
-const char SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN_LFA[] =           "PIC_Rack%d_SubRack%d_Board%d_AP%d_RCU%d_LFA";
-const char SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN_HFA[] =           "PIC_Rack%d_SubRack%d_Board%d_AP%d_RCU%d_HFA";
-const char SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN_ADCStatistics[] = "PIC_Rack%d_SubRack%d_Board%d_AP%d_RCU%d_ADCStatistics";
-const char SCOPE_PIC_Maintenance[] =                                  "PIC_Maintenance";
-const char SCOPE_PIC_RackN_Maintenance[] =                            "PIC_Rack%d_Maintenance";
-const char SCOPE_PIC_RackN_SubRackN_Maintenance[] =                   "PIC_Rack%d_SubRack%d_Maintenance";
-const char SCOPE_PIC_RackN_SubRackN_BoardN_Maintenance[] =            "PIC_Rack%d_SubRack%d_Board%d_Maintenance";
-const char SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN_Maintenance[] =   "PIC_Rack%d_SubRack%d_Board%d_AP%d_RCU%d_Maintenance";
-const char SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN_LFA_Maintenance[] =  "PIC_Rack%d_SubRack%d_Board%d_AP%d_RCU%d_LFA_Maintenance";
-const char SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN_HFA_Maintenance[] =  "PIC_Rack%d_SubRack%d_Board%d_AP%d_RCU%d_HFA_Maintenance";
-const char SCOPE_PIC_RackN_Alert[] =                                  "PIC_Rack%d_Alert";
-const char SCOPE_PIC_RackN_SubRackN_Alert[] =                         "PIC_Rack%d_SubRack%d_Alert";
-const char SCOPE_PIC_RackN_SubRackN_BoardN_Alert[] =                  "PIC_Rack%d_SubRack%d_Board%d_Alert";
-const char SCOPE_PIC_Command[] =                                      "PIC_Command";
-const char SCOPE_PIC_RackN_SubRackN_Command[] =                       "PIC_Rack%d_SubRack%d_Command";
-const char SCOPE_PIC_RackN_SubRackN_BoardN_Command[] =                "PIC_Rack%d_SubRack%d_Board%d_Command";
-const char SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN_Command[] =       "PIC_Rack%d_SubRack%d_Board%d_AP%d_RCU%d_Command";
-const char SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN_HFA_Command[] =   "PIC_Rack%d_SubRack%d_Board%d_AP%d_RCU%d_HFA_Command";
-
-const char TYPE_LCU_PIC[]               = "TLcuPic";
-const char TYPE_LCU_PIC_Maintenance[]   = "TLcuPicMaintenance";
-const char TYPE_LCU_PIC_Rack[]          = "TLcuPicRack";
-const char TYPE_LCU_PIC_Alert[]         = "TLcuPicAlert";
-const char TYPE_LCU_PIC_SubRack[]       = "TLcuPicSubRack";
-const char TYPE_LCU_PIC_Board[]         = "TLcuPicBoard";
+const char SCOPE_PIC[] =                                              "LOFAR_PIC";
+const char SCOPE_PIC_RackN[] =                                        "LOFAR_PIC_Cabinet%d";
+const char SCOPE_PIC_RackN_SubRackN[] =                               "LOFAR_PIC_Cabinet%d_SubRack%d";
+const char SCOPE_PIC_RackN_SubRackN_BoardN[] =                        "LOFAR_PIC_Cabinet%d_SubRack%d_RSPBoard%d";
+const char SCOPE_PIC_RackN_SubRackN_BoardN_MEPStatus[] =              "LOFAR_PIC_Cabinet%d_SubRack%d_RSPBoard%d.MEPStatus";
+const char SCOPE_PIC_RackN_SubRackN_BoardN_ETH[] =                    "LOFAR_PIC_Cabinet%d_SubRack%d_RSPBoard%d.ETH";
+const char SCOPE_PIC_RackN_SubRackN_BoardN_BP[] =                     "LOFAR_PIC_Cabinet%d_SubRack%d_RSPBoard%d.BP";
+const char SCOPE_PIC_RackN_SubRackN_BoardN_APN[] =                    "LOFAR_PIC_Cabinet%d_SubRack%d_RSPBoard%d.AP%d";
+const char SCOPE_PIC_RackN_SubRackN_BoardN_APN_SYNCStatus[] =         "LOFAR_PIC_Cabinet%d_SubRack%d_RSPBoard%d.AP%d.SYNCStatus";
+const char SCOPE_PIC_RackN_SubRackN_BoardN_APN_BoardRCUStatus[] =     "LOFAR_PIC_Cabinet%d_SubRack%d_RSPBoard%d.AP%d.BoardRCUStatus";
+const char SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN[] =               "LOFAR_PIC_Cabinet%d_SubRack%d_RSPBoard%d.AP%d.RCU%d";
+const char SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN_LFA[] =           "LOFAR_PIC_Cabinet%d_SubRack%d_RSPBoard%d.AP%d.RCU%d.LFA";
+const char SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN_HFA[] =           "LOFAR_PIC_Cabinet%d_SubRack%d_RSPBoard%d.AP%d.RCU%d.HFA";
+const char SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN_ADCStatistics[] = "LOFAR_PIC_Cabinet%d_SubRack%d_RSPBoard%d.AP%d.RCU%d.ADCStatistics";
+const char SCOPE_PIC_Maintenance[] =                                  "LOFAR_PIC_Maintenance";
+const char SCOPE_PIC_RackN_Maintenance[] =                            "LOFAR_PIC_Cabinet%d_Maintenance";
+const char SCOPE_PIC_RackN_SubRackN_Maintenance[] =                   "LOFAR_PIC_Cabinet%d_SubRack%d_Maintenance";
+const char SCOPE_PIC_RackN_SubRackN_BoardN_Maintenance[] =            "LOFAR_PIC_Cabinet%d_SubRack%d_RSPBoard%d.Maintenance";
+const char SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN_Maintenance[] =   "LOFAR_PIC_Cabinet%d_SubRack%d_RSPBoard%d.AP%d.RCU%d.Maintenance";
+const char SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN_LFA_Maintenance[] =  "LOFAR_PIC_Cabinet%d_SubRack%d_RSPBoard%d.AP%d.RCU%d.LFA.Maintenance";
+const char SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN_HFA_Maintenance[] =  "LOFAR_PIC_Cabinet%d_SubRack%d_RSPBoard%d.AP%d.RCU%d.HFA.Maintenance";
+const char SCOPE_PIC_RackN_Alert[] =                                  "LOFAR_PIC_Cabinet%d_Alert";
+const char SCOPE_PIC_RackN_SubRackN_Alert[] =                         "LOFAR_PIC_Cabinet%d_SubRack%d_Alert";
+const char SCOPE_PIC_RackN_SubRackN_BoardN_Alert[] =                  "LOFAR_PIC_Cabinet%d_SubRack%d_RSPBoard%d.Alert";
+const char SCOPE_PIC_Command[] =                                      "LOFAR_PIC_Command";
+const char SCOPE_PIC_RackN_SubRackN_Command[] =                       "LOFAR_PIC_Cabinet%d_SubRack%d_Command";
+const char SCOPE_PIC_RackN_SubRackN_BoardN_Command[] =                "LOFAR_PIC_Cabinet%d_SubRack%d_RSPBoard%d.Command";
+const char SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN_Command[] =       "LOFAR_PIC_Cabinet%d_SubRack%d_RSPBoard%d.AP%d.RCU%d.Command";
+const char SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN_HFA_Command[] =   "LOFAR_PIC_Cabinet%d_SubRack%d_RSPBoard%d.AP%d.RCU%d.HFA.Command";
+
+const char TYPE_LCU_PIC[]               = "PIC";
+const char TYPE_LCU_PIC_Maintenance[]   = "Maintenance";
+const char TYPE_LCU_PIC_Rack[]          = "Cabinet";
+const char TYPE_LCU_PIC_Alert[]         = "Alert";
+const char TYPE_LCU_PIC_SubRack[]       = "SubRack";
+const char TYPE_LCU_PIC_Board[]         = "RSPBoard";
 const char TYPE_LCU_PIC_MEPStatus[]     = "TLcuPicMEPStatus";
 const char TYPE_LCU_PIC_SYNCStatus[]    = "TLcuPicSYNCStatus";
 const char TYPE_LCU_PIC_BoardRCUStatus[]= "TLcuPicBoardRCUStatus";
@@ -145,7 +145,8 @@ const GCF::Common::TPSCategory PSCAT_LCU_PIC_Command       = GCF::Common::PS_CAT
 #define PROPNAME_COMMAND         "command"
 #define PROPNAME_RESULT          "result"
 #define PROPNAME_RESULT_CODE     "resultCode"
-#define PROPNAME_VOLTAGE15       "voltage15"
+#define PROPNAME_VOLTAGE12       "voltage12"
+#define PROPNAME_VOLTAGE25       "voltage25"
 #define PROPNAME_VOLTAGE33       "voltage33"
 #define PROPNAME_FRAMESRECEIVED  "packetsReceived"
 #define PROPNAME_FRAMESERROR     "packetsError"
@@ -252,7 +253,8 @@ PROPERTYCONFIG_END
 PROPERTYCONFIG_BEGIN(PROPS_Board)
 PROPERTYCONFIG_ITEM(PROPNAME_STATUS, GCF_READWRITE_PROP, "0")
 PROPERTYCONFIG_ITEM(PROPNAME_FUNCTIONALITY, GCF_READABLE_PROP, "true")
-PROPERTYCONFIG_ITEM(PROPNAME_VOLTAGE15, GCF_READABLE_PROP, "0")
+PROPERTYCONFIG_ITEM(PROPNAME_VOLTAGE12, GCF_READABLE_PROP, "0")
+PROPERTYCONFIG_ITEM(PROPNAME_VOLTAGE25, GCF_READABLE_PROP, "0")
 PROPERTYCONFIG_ITEM(PROPNAME_VOLTAGE33, GCF_READABLE_PROP, "0")
 PROPERTYCONFIG_ITEM(PROPNAME_FFI0, GCF_READABLE_PROP, "0")
 PROPERTYCONFIG_ITEM(PROPNAME_FFI1, GCF_READABLE_PROP, "0")
diff --git a/MAC/APL/PIC/_RegisterAccess/src/ARARegisterAccessTask.cc b/MAC/APL/PIC/_RegisterAccess/src/ARARegisterAccessTask.cc
index 3860838f2dc15aa3ed7ba6b4bbfdba52e77919a3..9afdc8c66b70f9fdc0dbbd8eb78c745aca164fef 100644
--- a/MAC/APL/PIC/_RegisterAccess/src/ARARegisterAccessTask.cc
+++ b/MAC/APL/PIC/_RegisterAccess/src/ARARegisterAccessTask.cc
@@ -36,10 +36,11 @@
 #include <time.h>
 #include <Common/lofar_string.h>
 #include <Common/lofar_vector.h>
+#include <Common/LofarLocators.h>
 
 #include <boost/date_time/posix_time/posix_time.hpp>
 
-#include <GCF/ParameterSet.h>
+#include <APS/ParameterSet.h>
 #include <GCF/GCF_Defines.h>
 #include <GCF/GCF_PValue.h>
 #include <GCF/GCF_PVInteger.h>
@@ -52,6 +53,7 @@
 #include "ARAPropertyDefines.h"
 #include "ARAPhysicalModel.h"
 
+using namespace LOFAR::ACC::APS;
 using namespace LOFAR::GCF::Common;
 using namespace LOFAR::GCF::TM;
 using namespace LOFAR::GCF::PAL;
@@ -89,6 +91,7 @@ RegisterAccessTask::RegisterAccessTask(string name)
       m_n_aps_per_board(1),
       m_n_rcus_per_ap(2),
       m_n_rcus(2),
+      m_n_rspboards(1),
       m_status_update_interval(1),
       m_stats_update_interval(1),
       m_centralized_stats(false),
@@ -109,10 +112,20 @@ RegisterAccessTask::RegisterAccessTask(string name)
   registerProtocol(RSP_PROTOCOL, RSP_PROTOCOL_signalnames);
   m_answer.setTask(this);
   
-  ParameterSet::instance()->adoptFile(GCF::ParameterSet::instance()->getSearchPath() + string("RegisterAccess.conf"));
-  m_status_update_interval = ParameterSet::instance()->getInt(PARAM_STATUS_UPDATE_INTERVAL);
-  m_stats_update_interval  = ParameterSet::instance()->getInt(PARAM_STATISTICS_UPDATE_INTERVAL);
-  m_centralized_stats      = (0!=ParameterSet::instance()->getInt(PARAM_STATISTICS_CENTRALIZED));
+  try
+  {
+    ConfigLocator cl;
+    globalParameterSet()->adoptFile(cl.locate("RegisterAccess.conf"));
+  }
+  catch (Exception e)
+  {
+    LOG_ERROR_STR("Failed to load configuration files: " << e.text());
+    exit(EXIT_FAILURE);
+  }
+
+  m_status_update_interval = globalParameterSet()->getInt32(PARAM_STATUS_UPDATE_INTERVAL);
+  m_stats_update_interval  = globalParameterSet()->getInt32(PARAM_STATISTICS_UPDATE_INTERVAL);
+  m_centralized_stats      = (0!=globalParameterSet()->getInt32(PARAM_STATISTICS_CENTRALIZED));
 }
 
 RegisterAccessTask::~RegisterAccessTask()
@@ -234,9 +247,9 @@ GCFEvent::TResult RegisterAccessTask::connected_state(GCFEvent& e, GCFPortInterf
     {
       LOG_INFO("RSP_GETCONFIGACK received");
       RSPGetconfigackEvent ack(e);
-      LOG_INFO(formatString("n_rcus     =%d",ack.n_rcus));
-      LOG_INFO(formatString("n_rspboards=%d",ack.n_rspboards));
-      LOG_INFO(formatString("n_tdboards =%d",ack.n_tdboards));
+      LOG_INFO(formatString("n_rcus        =%d",ack.n_rcus));
+      LOG_INFO(formatString("n_rspboards   =%d",ack.n_rspboards));
+      LOG_INFO(formatString("max_rspboards =%d",ack.max_rspboards));
 
       char scopeString[300];
       int rack;
@@ -246,12 +259,13 @@ GCFEvent::TResult RegisterAccessTask::connected_state(GCFEvent& e, GCFPortInterf
       int rcu;
       int globalRcuNr(0);
       
-      m_n_racks               = ParameterSet::instance()->getInt(PARAM_N_RACKS);
-      m_n_subracks_per_rack   = ParameterSet::instance()->getInt(PARAM_N_SUBRACKS_PER_RACK);
+      m_n_racks               = globalParameterSet()->getInt32(PARAM_N_RACKS);
+      m_n_subracks_per_rack   = globalParameterSet()->getInt32(PARAM_N_SUBRACKS_PER_RACK);
       m_n_boards_per_subrack  = (m_n_racks * m_n_subracks_per_rack) / ack.n_rspboards;
-      m_n_aps_per_board       = ParameterSet::instance()->getInt(PARAM_N_APS_PER_BOARD);
-      m_n_rcus_per_ap         = ParameterSet::instance()->getInt(PARAM_N_RCUS_PER_AP);
+      m_n_aps_per_board       = globalParameterSet()->getInt32(PARAM_N_APS_PER_BOARD);
+      m_n_rcus_per_ap         = globalParameterSet()->getInt32(PARAM_N_RCUS_PER_AP);
       m_n_rcus                = ack.n_rcus;
+      m_n_rspboards           = ack.n_rspboards;
       if(m_n_rcus != m_n_rcus_per_ap*
                      m_n_aps_per_board*
                      m_n_boards_per_subrack*
@@ -502,31 +516,29 @@ GCFEvent::TResult RegisterAccessTask::getVersion_state(GCFEvent& e, GCFPortInter
       {
         char scopeString[300];
         char version[20];
-        for (int board = 0; board < ack.versions.rsp().extent(blitz::firstDim); board++)
-        {
-          int rackNr;
-          int subRackNr;
-          int relativeBoardNr;
-          getBoardRelativeNumbers(board,rackNr,subRackNr,relativeBoardNr);
-          sprintf(version,"%d.%d",ack.versions.rsp()(board) >> 4,ack.versions.rsp()(board) & 0xF);
-          LOG_INFO(formatString("board[%d].version = 0x%x",board,ack.versions.rsp()(board)));
-          sprintf(scopeString,SCOPE_PIC_RackN_SubRackN_BoardN,rackNr,subRackNr,relativeBoardNr);
-          updateVersion(scopeString,string(version),double(ack.timestamp));
-          
-          sprintf(version,"%d.%d",ack.versions.bp()(board)  >> 4,ack.versions.bp()(board)  & 0xF);
-          LOG_INFO(formatString("bp[%d].version = 0x%x",board,ack.versions.bp()(board)));
-          sprintf(scopeString,SCOPE_PIC_RackN_SubRackN_BoardN_BP,rackNr,subRackNr,relativeBoardNr);
-          updateVersion(scopeString,string(version),double(ack.timestamp));
-  
-          for (int ap = 0; ap < EPA_Protocol::N_AP; ap++)
-          {
-            sprintf(version,"%d.%d",ack.versions.ap()(board * EPA_Protocol::N_AP + ap) >> 4,
-                                    ack.versions.ap()(board * EPA_Protocol::N_AP + ap) &  0xF);
-            LOG_INFO(formatString("ap[%d][%d].version = 0x%x",board,ap,ack.versions.ap()(board * EPA_Protocol::N_AP + ap)));
-            sprintf(scopeString,SCOPE_PIC_RackN_SubRackN_BoardN_APN,rackNr,subRackNr,relativeBoardNr,ap);
-            updateVersion(scopeString,string(version),double(ack.timestamp));
-          }
-        }
+        int board = 0;
+	int rackNr;
+	int subRackNr;
+	int relativeBoardNr;
+	getBoardRelativeNumbers(board,rackNr,subRackNr,relativeBoardNr);
+	sprintf(version,"%d.%d",ack.versions.bp()(board).rsp_version >> 4,ack.versions.bp()(board).rsp_version & 0xF);
+	LOG_INFO(formatString("board[%d].version = 0x%x",board,ack.versions.bp()(board).rsp_version));
+	sprintf(scopeString,SCOPE_PIC_RackN_SubRackN_BoardN,rackNr,subRackNr,relativeBoardNr);
+	updateVersion(scopeString,string(version),double(ack.timestamp));
+
+	sprintf(version,"%d.%d",ack.versions.bp()(board).fpga_maj,ack.versions.bp()(board).fpga_min);
+	LOG_INFO(formatString("bp[%d].version = %s",version));
+	sprintf(scopeString,SCOPE_PIC_RackN_SubRackN_BoardN_BP,rackNr,subRackNr,relativeBoardNr);
+	updateVersion(scopeString,string(version),double(ack.timestamp));
+
+	for (int ap = 0; ap < EPA_Protocol::N_AP; ap++)
+	{
+	  sprintf(version,"%d.%d",ack.versions.ap()(board * EPA_Protocol::N_AP + ap).fpga_maj,
+				  ack.versions.ap()(board * EPA_Protocol::N_AP + ap).fpga_min);
+	  LOG_INFO(formatString("ap[%d][%d].version = %s",board,ap,version));
+	  sprintf(scopeString,SCOPE_PIC_RackN_SubRackN_BoardN_APN,rackNr,subRackNr,relativeBoardNr,ap);
+	  updateVersion(scopeString,string(version),double(ack.timestamp));
+	}
       }
       
       TRAN(RegisterAccessTask::subscribingStatus_state);
@@ -604,7 +616,7 @@ GCFEvent::TResult RegisterAccessTask::subscribingStatus_state(GCFEvent& e, GCFPo
       // subscribe to status updates
       RSPSubstatusEvent substatus;
       substatus.timestamp.setNow();
-      substatus.rcumask = std::bitset<MAX_N_RCUS>((1<<m_n_rcus)-1);
+      substatus.rspmask = std::bitset<MAX_N_RSPBOARDS>((1<<m_n_rspboards)-1);
       substatus.period = m_status_update_interval;
       m_RSPclient.send(substatus);
       
@@ -1210,7 +1222,6 @@ GCFEvent::TResult RegisterAccessTask::handleUpdStatus(GCFEvent& e, GCFPortInterf
         updStatusEvent.handle));
 
     blitz::Array<EPA_Protocol::BoardStatus,  1>& boardStatus = updStatusEvent.sysstatus.board();
-    blitz::Array<EPA_Protocol::RCUStatus,  1>& rcuStatus = updStatusEvent.sysstatus.rcu();
     
     int rackNr;
     int subRackNr;
@@ -1224,24 +1235,27 @@ GCFEvent::TResult RegisterAccessTask::handleUpdStatus(GCFEvent& e, GCFPortInterf
       getBoardRelativeNumbers(boardNr,rackNr,subRackNr,relativeBoardNr);
       LOG_INFO(formatString("UpdStatus:Rack:%d:SubRack:%d:Board::%d\n",rackNr,subRackNr,relativeBoardNr));
       
-      uint8   rspVoltage_1_5 = boardStatus(boardNr).rsp.voltage_1_5;
+      uint8   rspVoltage_1_2 = boardStatus(boardNr).rsp.voltage_1_2;
       uint8   rspVoltage_2_5 = boardStatus(boardNr).rsp.voltage_2_5;
       uint8   rspVoltage_3_3 = boardStatus(boardNr).rsp.voltage_3_3;
-      uint8   rspVoltage_12 = boardStatus(boardNr).rsp.voltage_12;
-      LOG_INFO(formatString("UpdStatus:RSP voltage_1_5:%d:voltage_2_5:%d:voltage_3_3:%d:voltage_12:%d",rspVoltage_1_5,rspVoltage_2_5,rspVoltage_3_3,rspVoltage_12));
+      LOG_INFO(formatString("UpdStatus:RSP voltage_1_2:%d:voltage_2_5:%d:voltage_3_3:%d",rspVoltage_1_2,rspVoltage_2_5,rspVoltage_3_3));
       sprintf(scopeString,SCOPE_PIC_RackN_SubRackN_BoardN,rackNr,subRackNr,relativeBoardNr);
-      updateBoardProperties(scopeString,rspVoltage_1_5,rspVoltage_2_5,rspVoltage_3_3,rspVoltage_12,timestamp);
+      updateBoardProperties(scopeString,rspVoltage_1_2,rspVoltage_2_5,rspVoltage_3_3,timestamp);
       
-      uint8   bpTemp    = boardStatus(boardNr).fpga.bp_temp;
-      uint8   ap0Temp   = boardStatus(boardNr).fpga.ap0_temp;
-      uint8   ap1Temp   = boardStatus(boardNr).fpga.ap1_temp;
-      uint8   ap2Temp   = boardStatus(boardNr).fpga.ap2_temp;
-      uint8   ap3Temp   = boardStatus(boardNr).fpga.ap3_temp;
+      uint8   pcbTemp   = boardStatus(boardNr).rsp.pcb_temp;
+      uint8   bpTemp    = boardStatus(boardNr).rsp.bp_temp;
+      uint8   ap0Temp   = boardStatus(boardNr).rsp.ap0_temp;
+      uint8   ap1Temp   = boardStatus(boardNr).rsp.ap1_temp;
+      uint8   ap2Temp   = boardStatus(boardNr).rsp.ap2_temp;
+      uint8   ap3Temp   = boardStatus(boardNr).rsp.ap3_temp;
+      uint8   bpClock   = boardStatus(boardNr).rsp.bp_clock;
+      LOG_INFO(formatString("UpdStatus:PCB temp:%d",pcbTemp));
       LOG_INFO(formatString("UpdStatus:BP temp:%d",bpTemp));
       LOG_INFO(formatString("UpdStatus:AP0 temp:%d",ap0Temp));
       LOG_INFO(formatString("UpdStatus:AP1 temp:%d",ap1Temp));
       LOG_INFO(formatString("UpdStatus:AP2 temp:%d",ap2Temp));
       LOG_INFO(formatString("UpdStatus:AP3 temp:%d",ap3Temp));
+      LOG_INFO(formatString("UpdStatus:BP clock:%d",bpClock));
       sprintf(scopeString,SCOPE_PIC_RackN_SubRackN_BoardN,rackNr,subRackNr,relativeBoardNr);
       updateFPGAboardProperties(scopeString,timestamp);
       
@@ -1302,15 +1316,11 @@ GCFEvent::TResult RegisterAccessTask::handleUpdStatus(GCFEvent& e, GCFPortInterf
       updateSYNCStatusProperties(scopeString,syncSample_offset,syncSync_count,syncSlice_count,timestamp);
 
       int apNr=0;
-      uint8     boardRCUstatusStatusX       = boardStatus(boardNr).ap0_rcu.statusx;
-      uint8     boardRCUstatusStatusY       = boardStatus(boardNr).ap0_rcu.statusy;
-      uint8     boardRCUstatusFFI0          = boardStatus(boardNr).ap0_rcu.ffi0;
-      uint8     boardRCUstatusFFI1          = boardStatus(boardNr).ap0_rcu.ffi1;
-      uint32    boardRCUstatusNofOverflowX  = boardStatus(boardNr).ap0_rcu.nof_overflowx;
-      uint32    boardRCUstatusNofOverflowY  = boardStatus(boardNr).ap0_rcu.nof_overflowy;
-      LOG_INFO(formatString("BoardRCUStatus ap0:statusX:%d:statusY:%d:ffi0:%d:ffi1:%d:nofOverflowX:%d:nofOverflowY:%d",boardRCUstatusStatusX,boardRCUstatusStatusY,boardRCUstatusFFI0,boardRCUstatusFFI1,boardRCUstatusNofOverflowX,boardRCUstatusNofOverflowY));
-      sprintf(scopeString,SCOPE_PIC_RackN_SubRackN_BoardN_APN_BoardRCUStatus,rackNr,subRackNr,relativeBoardNr,apNr);
-      updateBoardRCUproperties(scopeString,boardRCUstatusFFI0,boardRCUstatusFFI1,timestamp);
+      uint8     boardRCUstatusStatusX       = boardStatus(boardNr).blp0_rcu.pllx;
+      uint8     boardRCUstatusStatusY       = boardStatus(boardNr).blp0_rcu.plly;
+      uint32    boardRCUstatusNofOverflowX  = boardStatus(boardNr).blp0_rcu.nof_overflowx;
+      uint32    boardRCUstatusNofOverflowY  = boardStatus(boardNr).blp0_rcu.nof_overflowy;
+      LOG_INFO(formatString("BoardRCUStatus ap0:statusX:%d:statusY:%d:nofOverflowX:%d:nofOverflowY:%d",boardRCUstatusStatusX,boardRCUstatusStatusY,boardRCUstatusNofOverflowX,boardRCUstatusNofOverflowY));
       int rcuNr=0;
       sprintf(scopeString,SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN,rackNr,subRackNr,relativeBoardNr,apNr,rcuNr);
       updateBoardRCUproperties(scopeString,boardRCUstatusStatusX,boardRCUstatusNofOverflowX,timestamp);
@@ -1319,15 +1329,11 @@ GCFEvent::TResult RegisterAccessTask::handleUpdStatus(GCFEvent& e, GCFPortInterf
       updateBoardRCUproperties(scopeString,boardRCUstatusStatusY,boardRCUstatusNofOverflowY,timestamp);
 
       apNr++;
-      boardRCUstatusStatusX       = boardStatus(boardNr).ap1_rcu.statusx;
-      boardRCUstatusStatusY       = boardStatus(boardNr).ap1_rcu.statusy;
-      boardRCUstatusFFI0          = boardStatus(boardNr).ap1_rcu.ffi0;
-      boardRCUstatusFFI1          = boardStatus(boardNr).ap1_rcu.ffi1;
-      boardRCUstatusNofOverflowX  = boardStatus(boardNr).ap1_rcu.nof_overflowx;
-      boardRCUstatusNofOverflowY  = boardStatus(boardNr).ap1_rcu.nof_overflowy;
-      LOG_INFO(formatString("BoardRCUStatus ap1:statusX:%d:statusY:%d:ffi0:%d:ffi1:%d:nofOverflowX:%d:nofOverflowY:%d",boardRCUstatusStatusX,boardRCUstatusStatusY,boardRCUstatusFFI0,boardRCUstatusFFI1,boardRCUstatusNofOverflowX,boardRCUstatusNofOverflowY));
-      sprintf(scopeString,SCOPE_PIC_RackN_SubRackN_BoardN_APN_BoardRCUStatus,rackNr,subRackNr,relativeBoardNr,apNr);
-      updateBoardRCUproperties(scopeString,boardRCUstatusFFI0,boardRCUstatusFFI1,timestamp);
+      boardRCUstatusStatusX       = boardStatus(boardNr).blp1_rcu.pllx;
+      boardRCUstatusStatusY       = boardStatus(boardNr).blp1_rcu.plly;
+      boardRCUstatusNofOverflowX  = boardStatus(boardNr).blp1_rcu.nof_overflowx;
+      boardRCUstatusNofOverflowY  = boardStatus(boardNr).blp1_rcu.nof_overflowy;
+      LOG_INFO(formatString("BoardRCUStatus ap0:statusX:%d:statusY:%d:nofOverflowX:%d:nofOverflowY:%d",boardRCUstatusStatusX,boardRCUstatusStatusY,boardRCUstatusNofOverflowX,boardRCUstatusNofOverflowY));
       rcuNr=0;
       sprintf(scopeString,SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN,rackNr,subRackNr,relativeBoardNr,apNr,rcuNr);
       updateBoardRCUproperties(scopeString,boardRCUstatusStatusX,boardRCUstatusNofOverflowX,timestamp);
@@ -1336,15 +1342,11 @@ GCFEvent::TResult RegisterAccessTask::handleUpdStatus(GCFEvent& e, GCFPortInterf
       updateBoardRCUproperties(scopeString,boardRCUstatusStatusY,boardRCUstatusNofOverflowY,timestamp);
 
       apNr++;
-      boardRCUstatusStatusX       = boardStatus(boardNr).ap2_rcu.statusx;
-      boardRCUstatusStatusY       = boardStatus(boardNr).ap2_rcu.statusy;
-      boardRCUstatusFFI0          = boardStatus(boardNr).ap2_rcu.ffi0;
-      boardRCUstatusFFI1          = boardStatus(boardNr).ap2_rcu.ffi1;
-      boardRCUstatusNofOverflowX  = boardStatus(boardNr).ap2_rcu.nof_overflowx;
-      boardRCUstatusNofOverflowY  = boardStatus(boardNr).ap2_rcu.nof_overflowy;
-      LOG_INFO(formatString("BoardRCUStatus ap2:statusX:%d:statusY:%d:ffi0:%d:ffi1:%d:nofOverflowX:%d:nofOverflowY:%d",boardRCUstatusStatusX,boardRCUstatusStatusY,boardRCUstatusFFI0,boardRCUstatusFFI1,boardRCUstatusNofOverflowX,boardRCUstatusNofOverflowY));
-      sprintf(scopeString,SCOPE_PIC_RackN_SubRackN_BoardN_APN_BoardRCUStatus,rackNr,subRackNr,relativeBoardNr,apNr);
-      updateBoardRCUproperties(scopeString,boardRCUstatusFFI0,boardRCUstatusFFI1,timestamp);
+      boardRCUstatusStatusX       = boardStatus(boardNr).blp2_rcu.pllx;
+      boardRCUstatusStatusY       = boardStatus(boardNr).blp2_rcu.plly;
+      boardRCUstatusNofOverflowX  = boardStatus(boardNr).blp2_rcu.nof_overflowx;
+      boardRCUstatusNofOverflowY  = boardStatus(boardNr).blp2_rcu.nof_overflowy;
+      LOG_INFO(formatString("BoardRCUStatus ap0:statusX:%d:statusY:%d:nofOverflowX:%d:nofOverflowY:%d",boardRCUstatusStatusX,boardRCUstatusStatusY,boardRCUstatusNofOverflowX,boardRCUstatusNofOverflowY));
       rcuNr=0;
       sprintf(scopeString,SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN,rackNr,subRackNr,relativeBoardNr,apNr,rcuNr);
       updateBoardRCUproperties(scopeString,boardRCUstatusStatusX,boardRCUstatusNofOverflowX,timestamp);
@@ -1353,15 +1355,11 @@ GCFEvent::TResult RegisterAccessTask::handleUpdStatus(GCFEvent& e, GCFPortInterf
       updateBoardRCUproperties(scopeString,boardRCUstatusStatusY,boardRCUstatusNofOverflowY,timestamp);
 
       apNr++;
-      boardRCUstatusStatusX       = boardStatus(boardNr).ap3_rcu.statusx;
-      boardRCUstatusStatusY       = boardStatus(boardNr).ap3_rcu.statusy;
-      boardRCUstatusFFI0          = boardStatus(boardNr).ap3_rcu.ffi0;
-      boardRCUstatusFFI1          = boardStatus(boardNr).ap3_rcu.ffi1;
-      boardRCUstatusNofOverflowX  = boardStatus(boardNr).ap3_rcu.nof_overflowx;
-      boardRCUstatusNofOverflowY  = boardStatus(boardNr).ap3_rcu.nof_overflowy;
-      LOG_INFO(formatString("BoardRCUStatus ap3:statusX:%d:statusY:%d:ffi0:%d:ffi1:%d:nofOverflowX:%d:nofOverflowY:%d",boardRCUstatusStatusX,boardRCUstatusStatusY,boardRCUstatusFFI0,boardRCUstatusFFI1,boardRCUstatusNofOverflowX,boardRCUstatusNofOverflowY));
-      sprintf(scopeString,SCOPE_PIC_RackN_SubRackN_BoardN_APN_BoardRCUStatus,rackNr,subRackNr,relativeBoardNr,apNr);
-      updateBoardRCUproperties(scopeString,boardRCUstatusFFI0,boardRCUstatusFFI1,timestamp);
+      boardRCUstatusStatusX       = boardStatus(boardNr).blp3_rcu.pllx;
+      boardRCUstatusStatusY       = boardStatus(boardNr).blp3_rcu.plly;
+      boardRCUstatusNofOverflowX  = boardStatus(boardNr).blp3_rcu.nof_overflowx;
+      boardRCUstatusNofOverflowY  = boardStatus(boardNr).blp3_rcu.nof_overflowy;
+      LOG_INFO(formatString("BoardRCUStatus ap0:statusX:%d:statusY:%d:nofOverflowX:%d:nofOverflowY:%d",boardRCUstatusStatusX,boardRCUstatusStatusY,boardRCUstatusNofOverflowX,boardRCUstatusNofOverflowY));
       rcuNr=0;
       sprintf(scopeString,SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN,rackNr,subRackNr,relativeBoardNr,apNr,rcuNr);
       updateBoardRCUproperties(scopeString,boardRCUstatusStatusX,boardRCUstatusNofOverflowX,timestamp);
@@ -1369,19 +1367,6 @@ GCFEvent::TResult RegisterAccessTask::handleUpdStatus(GCFEvent& e, GCFPortInterf
       sprintf(scopeString,SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN,rackNr,subRackNr,relativeBoardNr,apNr,rcuNr);
       updateBoardRCUproperties(scopeString,boardRCUstatusStatusY,boardRCUstatusNofOverflowY,timestamp);
     }
-
-    for(int rcuNr=rcuStatus.lbound(blitz::firstDim); rcuNr <= rcuStatus.ubound(blitz::firstDim); ++rcuNr)
-    {
-      uint8   rcuStatusBits = rcuStatus(rcuNr).status;
-      LOG_INFO(formatString("UpdStatus:RCU[%d] status:0x%x",rcuNr,rcuStatusBits));
-      
-      int rackRelativeNr,subRackRelativeNr,boardRelativeNr,apRelativeNr,rcuRelativeNr;
-      getRCURelativeNumbers(rcuNr,rackRelativeNr,subRackRelativeNr,boardRelativeNr,apRelativeNr,rcuRelativeNr);
-
-      sprintf(scopeString,SCOPE_PIC_RackN_SubRackN_BoardN_APN_RCUN,rackRelativeNr,subRackRelativeNr,boardRelativeNr,apRelativeNr,rcuRelativeNr);
-      LOG_DEBUG(formatString("RCU[%d]= %s",rcuNr,scopeString));
-      updateRCUproperties(scopeString,rcuStatusBits,timestamp);
-    }
   }
   
   return status;
@@ -1426,10 +1411,9 @@ GCFEvent::TResult RegisterAccessTask::handleUpdXcStats(GCFEvent& e, GCFPortInter
 }
 
 void RegisterAccessTask::updateBoardProperties(string scope,
-                                               uint8  voltage_15,
-                                               uint8  voltage_33,
-                                               uint8  ffi0,
-                                               uint8  ffi1,
+                                               uint8  voltage_1_2,
+                                               uint8  voltage_2_5,
+                                               uint8  voltage_3_3,
                                                double timestamp)
 {
   LOG_TRACE_LIFETIME(TRACE_LEVEL_FLOW,getName().c_str());
@@ -1441,20 +1425,17 @@ void RegisterAccessTask::updateBoardProperties(string scope,
   }
   else
   {
-    double v15 = static_cast<double>(voltage_15) * (2.5/192.0);
-    GCFPVDouble pvDouble15(v15);
-    it->second->setValueTimed(string(PROPNAME_VOLTAGE15),pvDouble15,timestamp);
+    double v12 = static_cast<double>(voltage_1_2) * (2.5/192.0);
+    GCFPVDouble pvDouble12(v12);
+    it->second->setValueTimed(string(PROPNAME_VOLTAGE12),pvDouble12,timestamp);
+    
+    double v25 = static_cast<double>(voltage_2_5) * (3.3/192.0);
+    GCFPVDouble pvDouble25(v25);
+    it->second->setValueTimed(string(PROPNAME_VOLTAGE25),pvDouble25,timestamp);
     
-    double v33 = static_cast<double>(voltage_33) * (5.0/192.0);
+    double v33 = static_cast<double>(voltage_3_3) * (5.0/192.0);
     GCFPVDouble pvDouble33(v33);
     it->second->setValueTimed(string(PROPNAME_VOLTAGE33),pvDouble33, timestamp);
-
-    GCFPVUnsigned pvTemp;
-    pvTemp.setValue(ffi0);
-    it->second->setValueTimed(string(PROPNAME_FFI0),pvTemp, timestamp);
-
-    pvTemp.setValue(ffi1);
-    it->second->setValueTimed(string(PROPNAME_FFI1),pvTemp, timestamp);
   }
 }
 
@@ -2215,9 +2196,11 @@ void RegisterAccessTask::handleRCUSettings(string propName, const int bitnr, con
       setrcu.rcumask.set(rcu);
           
       setrcu.settings().resize(1);
-      setrcu.settings()(0).value = rcucontrol;
-    
-      m_RSPclient.send(setrcu);
+      /*      setrcu.settings()(0).value = rcucontrol;
+       *
+       *      m_RSPclient.send(setrcu);
+       */
+      LOG_FATAL("TODO: RCU Settings");
     }
     else
     {
@@ -2770,7 +2753,7 @@ int RegisterAccessTask::_isDefect(char* scopeString)
     }
     else
     {
-      if(pvStatus->getValue()==APLCommon::RS_DEFECT)
+      if(pvStatus->getValue()==-3/*APLCommon::RS_DEFECT*/)
       {
         isDefect=1;
       }
diff --git a/MAC/APL/PIC/_RegisterAccess/src/ARARegisterAccessTask.h b/MAC/APL/PIC/_RegisterAccess/src/ARARegisterAccessTask.h
index c5ccbd9399cec1265e966fbeee74e33c5ebaae28..2a9ac9d82ab89b5e9d3bc312d4bee3aa02b54661 100644
--- a/MAC/APL/PIC/_RegisterAccess/src/ARARegisterAccessTask.h
+++ b/MAC/APL/PIC/_RegisterAccess/src/ARARegisterAccessTask.h
@@ -143,10 +143,9 @@ namespace ARA
           GCF::PAL::GCFMyPropertySet::TDefaultUse defaultUse = GCF::PAL::GCFMyPropertySet::USE_MY_DEFAULTS);
 
       void updateBoardProperties(string scope,
-                                 uint8  voltage_15,
-                                 uint8  voltage_33,
-                                 uint8  ffi0,
-                                 uint8  ffi1,
+                                 uint8  voltage_1_2,
+                                 uint8  voltage_2_5,
+                                 uint8  voltage_3_3,
                                  double timestamp);
       /**
        * update eth properties based on status bits
@@ -249,6 +248,7 @@ namespace ARA
       int               m_n_aps_per_board;
       int               m_n_rcus_per_ap;
       int               m_n_rcus;
+      int               m_n_rspboards;
       int               m_status_update_interval;
       int               m_stats_update_interval;
       bool              m_centralized_stats;
diff --git a/MAC/APL/PIC/_RegisterAccess/test/ARATestDriverTask.cc b/MAC/APL/PIC/_RegisterAccess/test/ARATestDriverTask.cc
index ff96d6c47d93dca506daef1f69ae85873a8037b0..f816563fb7910b42cb02f5cb0a13e9c11374f252 100644
--- a/MAC/APL/PIC/_RegisterAccess/test/ARATestDriverTask.cc
+++ b/MAC/APL/PIC/_RegisterAccess/test/ARATestDriverTask.cc
@@ -23,6 +23,7 @@
 #undef VERSION
 #include <lofar_config.h>
 #include <Common/LofarLogger.h>
+#include <Common/LofarLocators.h>
 
 #include <APL/RSP_Protocol/RSP_Protocol.ph>
 
@@ -36,9 +37,10 @@
 #include <Common/lofar_sstream.h>
 #include <time.h>
 
-#include <GCF/ParameterSet.h>
+#include <APS/ParameterSet.h>
 #include <GCF/PAL/GCF_PVSSInfo.h>
 
+using namespace LOFAR::ACC::APS;
 using namespace LOFAR::GCF::Common;
 using namespace LOFAR::GCF::TM;
 using namespace LOFAR::GCF::PAL;
@@ -85,13 +87,22 @@ ARATestDriverTask::ARATestDriverTask() :
   registerProtocol(RSP_PROTOCOL, RSP_PROTOCOL_signalnames);
   m_answer.setTask(this);
 
-  ParameterSet::instance()->adoptFile("RegisterAccess.conf");
+  try
+  {
+    ConfigLocator cl;
+    globalParameterSet()->adoptFile(cl.locate("RegisterAccess.conf"));
+  }
+  catch (Exception e)
+  {
+    LOG_ERROR_STR("Failed to load configuration files: " << e.text());
+    exit(EXIT_FAILURE);
+  }
 
-  n_racks               = ParameterSet::instance()->getInt(PARAM_N_RACKS);
-  n_subracks_per_rack   = ParameterSet::instance()->getInt(PARAM_N_SUBRACKS_PER_RACK);
-  n_boards_per_subrack  = ParameterSet::instance()->getInt(PARAM_N_BOARDS_PER_SUBRACK);
-  n_aps_per_board       = ParameterSet::instance()->getInt(PARAM_N_APS_PER_BOARD);
-  n_rcus_per_ap         = ParameterSet::instance()->getInt(PARAM_N_RCUS_PER_AP);
+  n_racks               = globalParameterSet()->getInt32(PARAM_N_RACKS);
+  n_subracks_per_rack   = globalParameterSet()->getInt32(PARAM_N_SUBRACKS_PER_RACK);
+  n_boards_per_subrack  = globalParameterSet()->getInt32(PARAM_N_BOARDS_PER_SUBRACK);
+  n_aps_per_board       = globalParameterSet()->getInt32(PARAM_N_APS_PER_BOARD);
+  n_rcus_per_ap         = globalParameterSet()->getInt32(PARAM_N_RCUS_PER_AP);
   n_rcus                = n_rcus_per_ap*
                               n_aps_per_board*
                               n_boards_per_subrack*
@@ -99,7 +110,6 @@ ARATestDriverTask::ARATestDriverTask() :
                               n_racks;
   
   m_systemStatus.board().resize(n_boards_per_subrack);
-  m_systemStatus.rcu().resize(n_rcus);
 
   EPA_Protocol::BoardStatus boardStatus;
   memset(&boardStatus,0,sizeof(boardStatus));
@@ -107,7 +117,6 @@ ARATestDriverTask::ARATestDriverTask() :
 
   EPA_Protocol::RCUStatus rcuStatus;
   memset(&rcuStatus,0,sizeof(rcuStatus));
-  m_systemStatus.rcu()(blitz::Range::all()) = rcuStatus;
   
   m_stats().resize(n_rcus,MEPHeader::N_BEAMLETS);
   m_xcstats().resize(n_pols,n_pols,n_racks*n_subracks_per_rack*n_boards_per_subrack*n_aps_per_board,n_racks*n_subracks_per_rack*n_boards_per_subrack*n_aps_per_board);
@@ -573,8 +582,6 @@ void ARATestDriverTask::updateAPstatus(string& propName,const GCFPValue* pvalue)
   
   LOG_INFO(formatString("updateAPstatus hier?? %d (rack=%d,subrack=%d,board=%d,ap=%d)", ++testI,rack,subrack,board,ap));
 
-  EPA_Protocol::FPGAStatus fpgaStatus = m_systemStatus.board()(board-1).fpga;
-
   // layout fpga status: 
   // 15..9 8       7........0       
   // ----- alive   temperature
@@ -585,13 +592,13 @@ void ARATestDriverTask::updateAPstatus(string& propName,const GCFPValue* pvalue)
   else if(propName.find(string(PROPNAME_TEMPERATURE),0) != string::npos)
   {
     if(ap==1)
-      m_systemStatus.board()(board-1).fpga.ap0_temp = (uint8)(pvDouble.getValue()*100);
+      m_systemStatus.board()(board-1).rsp.ap0_temp = (uint8)(pvDouble.getValue()*100);
     else if(ap==2)
-      m_systemStatus.board()(board-1).fpga.ap1_temp = (uint8)(pvDouble.getValue()*100);
+      m_systemStatus.board()(board-1).rsp.ap1_temp = (uint8)(pvDouble.getValue()*100);
     else if(ap==3)
-      m_systemStatus.board()(board-1).fpga.ap2_temp = (uint8)(pvDouble.getValue()*100);
+      m_systemStatus.board()(board-1).rsp.ap2_temp = (uint8)(pvDouble.getValue()*100);
     else
-        m_systemStatus.board()(board-1).fpga.ap3_temp = (uint8)(pvDouble.getValue()*100);
+        m_systemStatus.board()(board-1).rsp.ap3_temp = (uint8)(pvDouble.getValue()*100);
   }
   if(propName.find(string(PROPNAME_VERSION),0) != string::npos)
   {
@@ -615,8 +622,6 @@ void ARATestDriverTask::updateBPstatus(string& propName,const GCFPValue* pvalue)
 //  int subrack = hardwareIndexes[1];
   int board   = hardwareIndexes[2];
 
-  EPA_Protocol::FPGAStatus fpgaStatus = m_systemStatus.board()(board-1).fpga;
-
   // layout fpga status: 
   // 15..9 8       7........0       
   // ----- alive   temperature
@@ -626,7 +631,7 @@ void ARATestDriverTask::updateBPstatus(string& propName,const GCFPValue* pvalue)
   }
   else if(propName.find(string(PROPNAME_TEMPERATURE),0) != string::npos)
   {
-    m_systemStatus.board()(board-1).fpga.bp_temp = (uint8)(pvDouble.getValue()*100);
+    m_systemStatus.board()(board-1).rsp.bp_temp = (uint8)(pvDouble.getValue()*100);
   }
   if(propName.find(string(PROPNAME_VERSION),0) != string::npos)
   {
@@ -634,10 +639,11 @@ void ARATestDriverTask::updateBPstatus(string& propName,const GCFPValue* pvalue)
   }
 }
 
-void ARATestDriverTask::updateRCUstatus(string& propName,const GCFPValue* pvalue)
+void ARATestDriverTask::updateRCUstatus(string& propName,const GCFPValue* /*pvalue*/)
 {
   LOG_INFO(formatString("updateRCUstatus %s", propName.c_str()));
   
+/*
   GCFPVBool pvBool;
   GCFPVUnsigned pvUnsigned;
   pvBool.copy(*pvalue);
@@ -732,6 +738,7 @@ void ARATestDriverTask::updateRCUstatus(string& propName,const GCFPValue* pvalue
       m_systemStatus.rcu()(rcuNumber-1).status = tempStatus;
     }
   }
+*/
 }
 
 void ARATestDriverTask::sendToAll(GCFEvent& event)
@@ -752,7 +759,6 @@ void ARATestDriverTask::updateSystemStatus()
   updStatusEvent.status=SUCCESS;
   updStatusEvent.handle=1; // ignore
   updStatusEvent.sysstatus.board().reference(m_systemStatus.board().copy());
-  updStatusEvent.sysstatus.rcu().reference(m_systemStatus.rcu().copy());
 
   sendToAll(updStatusEvent);
 }
@@ -971,16 +977,12 @@ GCFEvent::TResult ARATestDriverTask::initial(GCFEvent& event, GCFPortInterface&
       ack.status = SUCCESS;
     
       ack.sysstatus.board().resize(1);
-      ack.sysstatus.rcu().resize(8);
     
       BoardStatus boardinit;
-      RCUStatus rcuinit;
     
       memset(&boardinit, 0, sizeof(BoardStatus));
-      memset(&rcuinit, 0, sizeof(RCUStatus));
       
       ack.sysstatus.board() = boardinit;
-      ack.sysstatus.rcu()   = rcuinit;
     
       port.send(ack);
       break;      
@@ -1127,18 +1129,17 @@ GCFEvent::TResult ARATestDriverTask::initial(GCFEvent& event, GCFPortInterface&
       RSPGetversionEvent getversion(event);
       
       RSP_Protocol::Versions versions;
-      versions.rsp().resize(n_racks*n_subracks_per_rack*n_boards_per_subrack);
       versions.bp().resize(n_racks*n_subracks_per_rack*n_boards_per_subrack);
       versions.ap().resize(n_racks*n_subracks_per_rack*n_boards_per_subrack*n_aps_per_board);
       for(int board=0;board<n_racks*n_subracks_per_rack*n_boards_per_subrack;board++)
       {
-        versions.rsp()(board) = (board+1);
-        LOG_INFO(formatString("board[%d].version = 0x%x",board,versions.rsp()(board)));
-        versions.bp()(board) = (board+1)*8;
+        versions.bp()(board).fpga_min = (board+1)*8;
+        versions.bp()(board).fpga_maj = (board+1)*8;
         LOG_INFO(formatString("bp[%d].version = 0x%x",board,versions.bp()(board)));
         for(int ap=0;ap<EPA_Protocol::N_AP; ap++)
         {
-          versions.ap()(board * EPA_Protocol::N_AP + ap) = ((board+1)<<4)+ap;
+          versions.ap()(board * EPA_Protocol::N_AP + ap).fpga_min = ((board+1)<<4)+ap;
+          versions.ap()(board * EPA_Protocol::N_AP + ap).fpga_maj = ((board+1)<<4)+ap;
           LOG_INFO(formatString("ap[%d][%d].version = 0x%x",board,ap,versions.ap()(board * EPA_Protocol::N_AP + ap)));
         }
       }
@@ -1146,7 +1147,6 @@ GCFEvent::TResult ARATestDriverTask::initial(GCFEvent& event, GCFPortInterface&
       RSPGetversionackEvent ack;
       ack.timestamp.setNow(600.0);
       ack.status = SUCCESS;
-      ack.versions.rsp().reference(versions.rsp().copy());
       ack.versions.bp().reference(versions.bp().copy());
       ack.versions.ap().reference(versions.ap().copy());
       
@@ -1159,11 +1159,12 @@ GCFEvent::TResult ARATestDriverTask::initial(GCFEvent& event, GCFPortInterface&
       RSPGetconfigackEvent ack;
       ack.n_rcus=n_rcus;
       ack.n_rspboards=n_boards_per_subrack*n_subracks_per_rack*n_racks;
-      ack.n_tdboards=1;
+      ack.max_rspboards=1;
       port.send(ack);
       break;
     }
     
+/*
     case RSP_SETCLOCKS:
     {
       RSPSetclocksackEvent ack;
@@ -1172,6 +1173,7 @@ GCFEvent::TResult ARATestDriverTask::initial(GCFEvent& event, GCFPortInterface&
       port.send(ack);
       break;
     }
+*/
     
     case RSP_SETRCU:
     {
diff --git a/MAC/APL/PIC/_RegisterAccess/test/ARATestTask.cc b/MAC/APL/PIC/_RegisterAccess/test/ARATestTask.cc
index d03d3eec6a0b93c260ba6d235acf6df461ec6dee..9c227c0dcfd5bca72666ce12966759c8eb44e18f 100644
--- a/MAC/APL/PIC/_RegisterAccess/test/ARATestTask.cc
+++ b/MAC/APL/PIC/_RegisterAccess/test/ARATestTask.cc
@@ -712,19 +712,10 @@ GCFEvent::TResult ARATestTask::test8(GCFEvent& event, GCFPortInterface& /*p*/)
       
       EPA_Protocol::BoardStatus boardStatus;
       memset(&boardStatus,0,sizeof(boardStatus));
-      boardStatus.fpga.ap0_temp = 2850;
-      boardStatus.fpga.ap1_temp = 2902;
-      boardStatus.fpga.ap2_temp = 2953;
-      boardStatus.fpga.ap3_temp = 3005;
-
-      EPA_Protocol::RCUStatus rcuStatus;
-      std::bitset<8> rcuBitStatus;
-      rcuBitStatus[7] = 1; // overflow
-      rcuStatus.status = rcuBitStatus.to_ulong();
-      updStatusEvent.sysstatus.board().resize(1);
-      updStatusEvent.sysstatus.board()(0) = boardStatus;
-      updStatusEvent.sysstatus.rcu().resize(1);
-      updStatusEvent.sysstatus.rcu()(0) = rcuStatus;
+      boardStatus.rsp.ap0_temp = 2850;
+      boardStatus.rsp.ap1_temp = 2902;
+      boardStatus.rsp.ap2_temp = 2953;
+      boardStatus.rsp.ap3_temp = 3005;
 
       m_RSPserver.send(updStatusEvent);
 
@@ -788,19 +779,10 @@ GCFEvent::TResult ARATestTask::test9(GCFEvent& event, GCFPortInterface& /*p*/)
 
       EPA_Protocol::BoardStatus boardStatus;
       memset(&boardStatus,0,sizeof(boardStatus));
-      boardStatus.fpga.ap0_temp = 28;
-      boardStatus.fpga.ap1_temp = 29;
-      boardStatus.fpga.ap2_temp = 30;
-      boardStatus.fpga.ap3_temp = 31;
-
-      EPA_Protocol::RCUStatus rcuStatus;
-      std::bitset<8> rcuBitStatus;
-      rcuBitStatus[7] = 0; // no overflow
-      rcuStatus.status = rcuBitStatus.to_ulong();
-      updStatusEvent.sysstatus.board().resize(1);
-      updStatusEvent.sysstatus.board()(0) = boardStatus;
-      updStatusEvent.sysstatus.rcu().resize(1);
-      updStatusEvent.sysstatus.rcu()(0) = rcuStatus;
+      boardStatus.rsp.ap0_temp = 28;
+      boardStatus.rsp.ap1_temp = 29;
+      boardStatus.rsp.ap2_temp = 30;
+      boardStatus.rsp.ap3_temp = 31;
 
       m_RSPserver.send(updStatusEvent);
 
@@ -869,24 +851,10 @@ GCFEvent::TResult ARATestTask::test10(GCFEvent& event, GCFPortInterface& /*p*/)
 
       EPA_Protocol::BoardStatus boardStatus;
       memset(&boardStatus,0,sizeof(boardStatus));
-      boardStatus.fpga.ap0_temp = 28;
-      boardStatus.fpga.ap1_temp = 29;
-      boardStatus.fpga.ap2_temp = 30;
-      boardStatus.fpga.ap3_temp = 31;
-
-      EPA_Protocol::RCUStatus rcuStatus;
-      std::bitset<8> rcuBitStatus;
-      rcuBitStatus[7] = 1; // overflow
-      rcuStatus.status = rcuBitStatus.to_ulong();
-      updStatusEvent.sysstatus.board().resize(1);
-      updStatusEvent.sysstatus.board()(0) = boardStatus;
-      updStatusEvent.sysstatus.rcu().resize(6);
-      updStatusEvent.sysstatus.rcu()(0) = rcuStatus;
-      updStatusEvent.sysstatus.rcu()(1) = rcuStatus;
-      updStatusEvent.sysstatus.rcu()(2) = rcuStatus;
-      updStatusEvent.sysstatus.rcu()(3) = rcuStatus;
-      updStatusEvent.sysstatus.rcu()(4) = rcuStatus;
-      updStatusEvent.sysstatus.rcu()(5) = rcuStatus;
+      boardStatus.rsp.ap0_temp = 28;
+      boardStatus.rsp.ap1_temp = 29;
+      boardStatus.rsp.ap2_temp = 30;
+      boardStatus.rsp.ap3_temp = 31;
 
       m_RSPserver.send(updStatusEvent);