diff --git a/rd_unb2c.py b/rd_unb2c.py
index 50dccb847f535d47fefaddc88f221337ecaaabee..bbb3992dd488b4eee94d781923f5b48fff3fd467 100644
--- a/rd_unb2c.py
+++ b/rd_unb2c.py
@@ -15,12 +15,143 @@ else:
 from UniBoard2_I2C import *
 I2CBUSNR=3
 
+class c_node:
+    def __int__(self, number):
+        self.node_number = number
+        self.pols=[]
+        for pol in list(LOC_POLS.keys()):
+            self.pols.append(c_pol(pol))
+        self.ddr=[]
+        for bank_cnt in range(2):
+            self.ddr.append(c_ddr(bank_cnt))
+        self.qsfp=[]
+        for qsfp_cnt in range(6):
+                self.qsfp.append(c_qsfp(qsfp_cnt))
+
+    def read_all(self):
+        for pol in self.pols:
+            pol.read_all()
+        for ddr in self.ddr:
+            ddr.read_all()
+        for qsfp in self.qsfp:
+            qsfp.read_all()
+
+    def print_status(self):
+        for pol in self.pols:
+            pol.print_status()
+        for ddr in self.ddr:
+            ddr.print_status()
+        for qsfp in self.qsfp:
+            qsfp.print_status()
+
+    def set_i2c_switches(self):
+        main_switch = I2C(MAIN_I2C_SWITCH)
+        main_switch.bus = I2CBUSNR
+        ret_ack = main_switch.write_bytes(0x0, 0x01<<self.node_number)  # select Node
+        if ret_ack < 1:
+            print("Main I2C switch not found")
+        else:
+            node_switch = I2C(NODE_I2C_SWITCH)
+            node_switch.bus = I2CBUSNR
+            ret_ack = node_switch.write_bytes(0x0, 0x20)  # select DDR4
+            if ret_ack < 1:
+                print("Node I2C switch not found")
+
+class c_qsfp:
+    def __init__(self, port):
+        self.port = port
+        self.temp = 0
+        self.volt = 0
+        self.status = False
+
+    def select_qsfp(self):
+        node_switch = I2C(NODE_I2C_SWITCH)
+        node_switch.bus = I2CBUSNR
+        ret_ack = node_switch.write_bytes(0x0, QSFP_PORT[self.port])
+        if ret_ack < 1:
+            print("Node I2C switch not found")
+            self.status = True
+        else:
+            self.status = False
+
+    def read_temp(selfs):
+        ret_ack, raw_ret = QSFP_cage.read_bytes(QSFP_TEMP, 2)
+        if ret_ack < 1 :
+            self.status=False
+        else:
+            ret_value = []
+            ret_value.append(int(raw_ret[:2], 16))
+            ret_value.append(int(raw_ret[2:], 16))
+            self.temp = (ret_value[0] * 256 + ret_value[1]) / 256
+
+    def read_volt(selfs):
+        ret_ack, raw_ret = QSFP_cage.read_bytes(QSFP_VOLT, 2)
+        if ret_ack < 1 :
+            self.status=False
+        else:
+            ret_value.append(int(raw_ret[:2], 16))
+            ret_value.append(int(raw_ret[2:], 16))
+            self.volt = (ret_value[0] * 256 + ret_value[1]) * 0.0001
+
+    def read_all(self):
+        self.read_temp()
+        self.read_volt()
+
+    def print_status(self):
+        if self.status:
+            stri = "Slot {0} : QSFP Temperature QSFP  {1:3.2f} gr. C  Voltage {2:3.2f} V".format(self.port self.temp, self.volt)
+            print(stri)
+
+
+class c_ddr:
+    def __init__(self, bank):
+        self.bank = bank
+        if self.bank == 0:
+            self.ddr_dev = I2C(MB_I_TEMP_I2C_ADDR)
+        else:
+            self.ddr_dev = I2C(MB_II_TEMP_I2C_ADDR)
+        self.ddr_dev.bus = I2CBUSNR
+
+    def set_i2c_switch(self):
+        node_switch = I2C(NODE_I2C_SWITCH)
+        node_switch.bus = I2CBUSNR
+        ret_ack = node_switch.write_bytes(0x0, DDR4)
+        if ret_ack < 1:
+            print("Node I2C switch not found")
+            self.status = True
+        else:
+            self.status = False
+
+    def read_temp(self):
+        ret_ack, raw_ret = self.ddr_dev.read_bytes(MB_TEMP_REG, 2)
+        if ret_ack < 1:
+            stri = "No DDR moduel in slot {0} node  {1}".format(module, node_nr)
+        else:
+            ret_value = []
+            ret_value.append(int(raw_ret[:2], 16))
+            ret_value.append(int(raw_ret[2:], 16))
+            temp = (((ret_value[0] & 0x1F) * 0x100) + (ret_value[1] & 0xFC)) * 0.0625
+
+    def read_all(self):
+        self.set_i2c_switch()
+        self.read_temp()
+
+    def print_status(self):
+        if self.status:
+            stri = "Temperature DDR4 in slot {0} is {2:3.2f} C".format(self.bank, temp)
+            print(stri)
+
+
+
 class c_pol:
-    def __init__(self, name):
+    def __init__(self, name, type="node"):
         self.name = name
+        self.type = type
         self.vout=0
         self.iout=0
         self.tem=0
+        if type == "node":
+            self.set_i2c_switch()
         self.pol_dev = I2C(LOC_POLS[self.name])
         self.pol_dev.bus = I2CBUSNR
         sleep(0.1)
@@ -32,8 +163,21 @@ class c_pol:
         else:
             self.status=True
 
+    def set_i2c_switch(self):
+        node_switch = I2C(NODE_I2C_SWITCH)
+        node_switch.bus = I2CBUSNR
+        ret_ack = node_switch.write_bytes(0x0, LOC_POWER)
+        if ret_ack < 1:
+            print("Node I2C switch not found")
+            self.status = True
+        else:
+            self.status = False
+
+
     def read_vout(self):
         if self.status:
+            if type == "node":
+                self.set_i2c_switch()
             sleep(0.1)
             ret_ack, vout_mod = self.pol_dev.read_bytes(LP_VOUT_MODE, 1)
             sleep(0.1)
@@ -48,6 +192,8 @@ class c_pol:
  
     def read_iout(self):
         if self.status:
+            if type == "node":
+                self.set_i2c_switch()
             sleep(0.1)
             ret_ack, raw_value = self.pol_dev.read_bytes(LP_IOUT, 2)
             ret_value=[]
@@ -59,6 +205,8 @@ class c_pol:
 
     def read_temp(self):
         if self.status:
+            if type == "node":
+                self.set_i2c_switch()
             sleep(0.1)
             ret_ack,raw_value = self.pol_dev.read_bytes(LP_temp, 2)
             ret_value=[]
@@ -75,7 +223,7 @@ class c_pol:
 
     def print_status(self):
         if self.status:
-            self.read_all()
+#            self.read_all()
             stri = "POL: " + self.name + "  "
             stri += "Output voltage :{0: <5.2f} V ".format(self.vout)
             stri += "Output Current :{0: <5.2f} A ".format(self.iout)
@@ -258,6 +406,10 @@ else:
     ret_ack = node_switch.write_bytes(0x0, 0x20) #select DDR4
     if ret_ack < 1:
         print("Node I2C switch not found")
-for pol in list(LOC_POLS.keys()):
-    polletje = c_pol(pol)
-    polletje.print_status()
+
+node = c_node(0)
+node.read_all()
+node.print_status()
+#for pol in list(LOC_POLS.keys()):
+#    polletje = c_pol(pol)
+#    polletje.print_status()