diff --git a/pypcc/config/APSCTTR.yaml b/pypcc/config/APSCTTR.yaml
index 9c5f7c42d61483d95ffd7c387fde88e478bb3660..85a8a0d8d628ac20f36c39386b90c9f03cd71351 100644
--- a/pypcc/config/APSCTTR.yaml
+++ b/pypcc/config/APSCTTR.yaml
@@ -3,7 +3,7 @@ description: "1234"
 
 drivers:
  - name: I2C
-   type: i2c
+   type: i2c_smbus2
    parameters: [5] #I2C port number
  - name: I2C_CLK
    type: i2c_dev #I2C devices
diff --git a/pypcc/i2cserv/i2c_smbus2.py b/pypcc/i2cserv/i2c_smbus2.py
new file mode 100644
index 0000000000000000000000000000000000000000..962255fd9d49be7de313b78d64dfb06c8084892e
--- /dev/null
+++ b/pypcc/i2cserv/i2c_smbus2.py
@@ -0,0 +1,53 @@
+import os
+from smbus2 import SMBus,i2c_msg
+import time
+import logging
+#read=0: write to register
+#read=1: read from register
+#read=2: write to register (common in group)
+#read=3: wait ms second
+from .hwdev import hwdev;
+
+class i2c_smbus2(hwdev):
+    def __init__(self,config):
+       hwdev.__init__(self,config);
+       self.bus_nr=config['parameters'][0]
+       logging.info("smbus2 driver on bus "+str(self.bus_nr))
+       self.bus = SMBus(self.bus_nr)
+       self.I2Ccounter=0
+
+
+    def i2csetget(self,addr,data,reg=None,read=0):
+#       logging.debug(str(("I2C",addr,reg,data,read)))
+       try:
+#       if True:
+              if read==3:
+                     time.sleep(data[0]/1000.)
+                     return True
+
+              if read==1:
+                     if not(reg is None):
+                          data[:]=self.bus.read_i2c_block_data(addr, reg, len(data))
+                     else:
+                          msg=i2c_msg.read(addr,len(data))
+                          self.bus.i2c_rdwr(msg)
+                          if len(msg)!=len(data):
+                              logging.debug(str(("I2C get failed",addr,reg,data,read)))
+                              data[0]=0;
+                              return False
+
+                          data[:]=list(msg)
+                     logging.debug(str(("I2C get",addr,reg,data,read)))
+              else:
+                     if not(reg is None): 
+                            self.bus.write_i2c_block_data(addr, reg, data)
+                     else:
+                          msg=i2c_msg.write(addr,data)
+                          self.bus.i2c_rdwr(msg)
+              return True;
+       except:
+#       else:
+              logging.debug("I2C failed!")
+              if len(data)>0: data[0]=0
+              return False;
+
diff --git a/pypcc/i2cserv/i2c_switch.py b/pypcc/i2cserv/i2c_switch.py
index 7934f2b6652c57bb2ce8c1f03e27e9c1dd0d5e22..dadae419bd23244197575ed62e6adce87fe5727b 100644
--- a/pypcc/i2cserv/i2c_switch.py
+++ b/pypcc/i2cserv/i2c_switch.py
@@ -1,5 +1,6 @@
 import logging
-from .i2c import i2c
+#from .i2c import i2c
+from .i2c_smbus2 import i2c_smbus2 as i2c
 
 #import HWconf
 #SWaddr=0x70
diff --git a/pypcc/pypcc.py b/pypcc/pypcc.py
index dcbaba6db7871284103b4499e3838e9dff50a1ba..16e7898c1dd55725b7450cdd5b582974f36bfa81 100755
--- a/pypcc/pypcc.py
+++ b/pypcc/pypcc.py
@@ -22,7 +22,7 @@ def main():
     #Todo test logstash
     #from logconfig import configure_logger
     #log_extra = {
-    #    "simulator": args.simulator, 
+    #    "simulator": args.simulator,
     #    "test": args.test,
     #    "port": args.port,
     #    "config": args.config,
@@ -42,15 +42,15 @@ def main():
     RunTimer=True;
     def signal_handler(sig, frame):
         logging.warn('Stop signal received!')
-        global RunTimer; 
+        global RunTimer;
         RunTimer=False
     signal.signal(signal.SIGINT, signal_handler)
 
     #Start i2c processes as soon as possible to have minimum duplication
-    logging.info("Start I2C processes")   
+    logging.info("Start I2C processes")
 
     if not(args.simulator):
-      logging.info("Make I2C lock")   
+      logging.info("Make I2C lock")
       import multiprocessing as mp
     #  lock=mp.Lock()
     #else:
@@ -63,18 +63,18 @@ def main():
     I2C_process=[]
     I2Cclients=[]
     for name in I2Cports:
-        RCU_I2C=i2client.i2client(name=name) 
-        if not(args.simulator):  
+        RCU_I2C=i2client.i2client(name=name)
+        if not(args.simulator):
             thread1=i2cthread.start(*RCU_I2C.GetInfo(),lock=lock) #Start a new I2C process
             I2C_process.append(thread1)
         I2Cclients.append(RCU_I2C)
     #Initialise OPCUA server and load variables
-    logging.info("Initialised OPC-UA Server")   
+    logging.info("Initialised OPC-UA Server")
     configs=[]
     I2C_threads=[]
-    if not(args.test):  
+    if not(args.test):
         handler=opcuaserv.InitServer(port=args.port)
-        logging.info("Load OPCUA variables & start i2c listing thread")   
+        logging.info("Load OPCUA variables & start i2c listing thread")
         opcuaserv.AddVarR("TR_software_version_R",git_hash+"_"+args.config,[],False)
         for i,name in enumerate(I2Cports):
             RCU_I2C=I2Cclients[i]
@@ -104,7 +104,7 @@ def main():
         thread.join(1)
       if thread.exitcode is None:
         logging.warning("Terminate thread")
-        thread.terminate() 
+        thread.terminate()
       return thread.exitcode
 
     def restart_I2C(i):
@@ -132,26 +132,26 @@ def main():
     #cnt=0
     try:
      while RunTimer:
-        if not(args.test): 
+        if not(args.test):
             handler.check_datachange(0.1);
         else:
             time.sleep(0.1);
         for c in configs:
             if c.Monitor(): continue
-        if not(args.simulator) and not(args.test):  
-            for i,c in enumerate(configs):
-               timeout=c.watchdog()
-               if timeout>10:
-                     print(i,timeout)
-               if timeout>60:
-                  logging.error("I2C timeout!")
+    #    if not(args.simulator) and not(args.test):
+    #        for i,c in enumerate(configs):
+    #           timeout=c.watchdog()
+    #           if timeout>10:
+    #                 print(i,timeout)
+    #           if timeout>60:
+    #              logging.error("I2C timeout!")
     #               restart_I2C(i)
-                  RunTimer=False
+    #              RunTimer=False
     #    cnt+=1;
-    #    if cnt==60*10*2: 
+    #    if cnt==60*10*2:
     #      print("****** restart test *****")
     #      restart_I2C(0)
-              
+
     finally:
        if not(args.test):
            logging.info("Stop OPC-UA server")