diff --git a/src/fpga.cpp b/src/fpga.cpp
index 515fe87a0d8c28266d42fb360802a49870a0aa01..557acc9956142a068d8ff47b127763bb59e3b2b0 100644
--- a/src/fpga.cpp
+++ b/src/fpga.cpp
@@ -59,6 +59,8 @@ Fpga::Fpga(list<class Node*>& nodelist, const int32_t n_beam_sets):
     pointMap->add_register("FPGA_firmware_version_R",                        "fpga/firmware_version",                       nodes.size(), 1, "RO", REG_FORMAT_STRING);
     pointMap->add_register("FPGA_hardware_version_R",                        "fpga/hardware_version",                       nodes.size(), 1, "RO", REG_FORMAT_STRING);
 
+    pointMap->add_register("FPGA_global_node_index_R",                       "fpga/global_node_index",                      nodes.size(), 1, "RO", REG_FORMAT_UINT32);
+
     pointMap->add_register("FPGA_sst_offload_weighted_subbands_R",           "fpga/sst_offload_weighted_subbands",          nodes.size(), 1, "RO", REG_FORMAT_BOOLEAN);
     pointMap->add_register("FPGA_sst_offload_weighted_subbands_RW",          "fpga/sst_offload_weighted_subbands",          nodes.size(), 1, "RW", REG_FORMAT_BOOLEAN);
     pointMap->add_register("FPGA_sst_offload_enable_R",                      "fpga/sst_offload_enable",                     nodes.size(), 1, "RO", REG_FORMAT_BOOLEAN);
diff --git a/src/node.cpp b/src/node.cpp
index a953c71aaabe7808159781d315f9b178ec82a063..221ae13f1185d8a4e6e36dbe620b2db64e737b50 100644
--- a/src/node.cpp
+++ b/src/node.cpp
@@ -263,7 +263,8 @@ bool Node::exec_reply(TermOutput& termout)
     // cout << "received " << r->nof_vals << " bytes from worker node=" << GlobalNr 
     //      << " retval=" << r->retval << " datatype=" << r->datatype << endl;
 
-    if (isOnline() && r.retval) {
+    // if (isOnline() && r.retval) {
+    if (r.retval) {
         int sz = reg_format_size_in_bytes(r.format);
         memcpy((void *)termout.val, (void *)r.data, r.nvalues * sz);
     }
diff --git a/src/periph/fpga.cpp b/src/periph/fpga.cpp
index f5619654fd044a2c81f5914df4dad64cd1f8a758..199fd5d79131a9e823d141ba741f2c609b2fe50e 100644
--- a/src/periph/fpga.cpp
+++ b/src/periph/fpga.cpp
@@ -123,6 +123,11 @@ bool Periph_fpga::read(TermOutput& termout, const string addr,
 
     termout.datatype = format;
     termout.nof_vals = 0;
+    
+    if (addr == "fpga/global_node_index") {
+        retval = read_global_node_index(termout, format);
+        return true;
+    }
 
     if (!Masked) {  // Not selected
         return false;
@@ -140,7 +145,6 @@ bool Periph_fpga::read(TermOutput& termout, const string addr,
     if (type == "mm") {
         uint32_t *data_ptr = (uint32_t *)data;
         retval = Read(addr, data_ptr, true);
-        termout.datatype = format;
     }
     else { // "fpga/..."
 
@@ -149,16 +153,13 @@ bool Periph_fpga::read(TermOutput& termout, const string addr,
         }
         else if (addr == "fpga/name") {
             termout.nof_vals = 1; //my_current_design_name.size();
-            termout.datatype = format;
             strcpy(termout.val, my_current_design_name.c_str());
             retval = true;
         }
         else if (addr == "fpga/stamps") {
             retval = read_stamps(termout, format);
-            termout.datatype = format;
         }
         else if (addr == "fpga/note") {
-            termout.datatype = format;
             retval = true;
         }
         else if (addr == "fpga/firmware_version") {
@@ -893,6 +894,17 @@ bool Periph_fpga::read_stamps(TermOutput& termout, int format)
     return retval;
 }
 
+bool Periph_fpga::read_global_node_index(TermOutput& termout, int format)
+{
+    bool retval = true;
+
+    uint32_t *_ptr = (uint32_t *)termout.val;
+    *_ptr = GlobalNr;
+    termout.nof_vals = 1;
+    termout.datatype = format;
+    return retval;
+}
+
 bool Periph_fpga::read_fpga_temperature(TermOutput& termout, int format)
 {
     bool retval = true;
diff --git a/src/periph/fpga.h b/src/periph/fpga.h
index 3419809fdae938a6d684be3fac6d3ff371745273..24337ee3dda554a45c910ef823c4aee356647f99 100644
--- a/src/periph/fpga.h
+++ b/src/periph/fpga.h
@@ -58,7 +58,7 @@ private:
   std::string my_current_design_name;
   uint my_current_hw_version;
   std::string my_current_fw_version;
-  
+
   bool    my_bsn_input_sync_timeout;
   int64_t my_bsn_input_bsn;
   int32_t my_bsn_input_nof_packets;
@@ -99,6 +99,8 @@ private:
   bool read_firmware_version(TermOutput& termout, int format);
   bool read_stamps(TermOutput& termout, int format);
 
+  bool read_global_node_index(TermOutput& termout, int format);
+
   bool read_fpga_temperature(TermOutput& termout, int format);
 
   bool read_fpga_scrap(TermOutput& termout, int format);
@@ -176,7 +178,7 @@ private:
   bool read_jesd204b_csr_dev_syncn(TermOutput& termout, int format, int mode);
   bool read_jesd204b_rx_err0(TermOutput& termout, int format, int mode);
   bool read_jesd204b_rx_err1(TermOutput& termout, int format, int mode);
-  
+
   bool write_signal_input_samples_delay(const char *data);
   bool read_signal_input_samples_delay(TermOutput& termout, int format);
   bool read_signal_input_mean(TermOutput& termout, int format, int mode);