diff --git a/src/periph/fpga.cpp b/src/periph/fpga.cpp
index 992a3e976b25f5c0287583b15fffdce590444320..7c1a27d13c1a50978ac058a9b33ac0206f437b48 100644
--- a/src/periph/fpga.cpp
+++ b/src/periph/fpga.cpp
@@ -345,7 +345,7 @@ bool Periph_fpga::read(TermOutput& termout, const string addr,
             retval = read_all_from_port(termout, "REG_SI", "enable", format);
         }
         else if (addr == "fpga/pps_expected_cnt") {
-            retval = read_all_from_port(termout, "PIO_PPS", "expected_cnt", format);
+            retval = read_pps_expected_cnt(termout, format);
         }
         else if (addr == "fpga/pps_present") {
             retval = read_pps_present(termout, format, R_MEM);
@@ -557,9 +557,11 @@ bool Periph_fpga::monitor(TermOutput& termout)
     tictoc.tic(name.c_str());
     read_system_info(termout);  // read_system_info() will set Online state.
     if (Online) {
+        if (my_pps_expected_cnt == 0) {
+            read_pps_expected_cnt(termout, REG_FORMAT_UINT32);
+        }
         read_time_since_last_pps(termout, REG_FORMAT_INT64, R_UCP);
         read_pps_capture_cnt(termout, REG_FORMAT_UINT32, R_UCP);
-        read_pps_present(termout, REG_FORMAT_BOOLEAN, R_UCP);
         read_bsn_monitor_input_sync_timeout(termout, REG_FORMAT_INT64, R_UCP);
         read_bsn_monitor_input_bsn(termout, REG_FORMAT_INT64, R_UCP);
         read_xst_input_sync_at_bsn(termout, REG_FORMAT_INT64, R_UCP);
@@ -2230,10 +2232,25 @@ bool Periph_fpga::read_all_from_port(TermOutput& termout, const string& port_nam
 }*/
 
 
+bool Periph_fpga::read_pps_expected_cnt(TermOutput& termout, int format) {
+    bool retval = true;
+    uint32_t data = 0;
+    retval = Read("mm/0/PIO_PPS/0/expected_cnt", &data);
+    my_pps_expected_cnt = data;
+
+    uint32_t *_ptr = (uint32_t *)termout.val;
+    *_ptr = my_pps_expected_cnt;
+    termout.nof_vals = 1;
+    termout.datatype = format;
+    return retval;
+}
+
+
 bool Periph_fpga::write_pps_expected_cnt(const char *data) {
     uint32_t *_ptr = (uint32_t *)data;
     bool retval = true;
 
+
     retval = Write("mm/0/PIO_PPS/0/expected_cnt", _ptr);
     return retval;
 }
@@ -2257,7 +2274,10 @@ bool Periph_fpga::read_pps_capture_cnt(TermOutput& termout, int format, int mode
         retval = Read("mm/0/PIO_PPS/0/capture_cnt", &data);
         my_pps_capture_cnt = data;
         // check if capture count is as expected, and set pps_present
-        my_pps_present = (my_pps_capture_cnt == my_pps_expected_cnt);
+        my_pps_present = false;
+        if (my_pps_capture_cnt == my_pps_expected_cnt) {
+            my_pps_present = true;
+        }
     }
 
     uint32_t *_ptr = (uint32_t *)termout.val;