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