diff --git a/i2c/I2Cv2.py b/i2c/I2Cv2.py
new file mode 100644
index 0000000000000000000000000000000000000000..81cbb131c73ba619ce00bb5802339feecf27160f
--- /dev/null
+++ b/i2c/I2Cv2.py
@@ -0,0 +1,63 @@
+#import pylibi2c;
+#import 
+from periphery import I2C;
+
+import time
+import logging
+#bus = pylibi2c.I2CDevice('/dev/i2c-1'
+#read=0: write to register
+#read=1: read from register
+#read=2: write to register (common in group)
+#read=3: wait ms second
+I2Ccounter=0;
+
+
+i2c1=I2C("/dev/i2c-1")
+
+def I2C1server(addr,data,reg=None,read=0):
+#  print("I2C",addr,reg,data,read)
+  try:
+       if read==3:
+           time.sleep(data[0]/1000.)
+           return True
+       logging.debug(str(("I2C",addr,reg,data,read)))
+
+       if read==1:
+          if not(reg is None):  i2c1.transfer(addr,[I2C.Message(reg)])
+          msgs=[I2C.Message(data,read=True)]
+          i2c1.transfer(addr,msgs)
+          data[:]=msgs[0].data
+       else:
+            if reg is None: 
+               msgs=[I2C.Message(data)]
+            else:
+               msgs=[I2C.Message(reg),I2C.Message(data)]
+            i2c1.transfer(addr,msgs)
+       return True;
+  except:
+       return False;
+
+i2c4=I2C("/dev/i2c-1")
+
+def I2C1server(addr,data,reg=None,read=0):
+#  print("I2C",addr,reg,data,read)
+  try:
+       if read==3:
+           time.sleep(data[0]/1000.)
+           return True
+       logging.debug(str(("I2C",addr,reg,data,read)))
+
+       if read==1:
+          if not(reg is None):  i2c4.transfer(addr,[I2C.Message(reg)])
+          msgs=[I2C.Message(data,read=True)]
+          i2c4.transfer(addr,msgs)
+          data[:]=msgs[0].data
+       else:
+            if reg is None: 
+               msgs=[I2C.Message(data)]
+            else:
+               msgs=[I2C.Message(reg),I2C.Message(data)]
+            i2c4.transfer(addr,msgs)
+       return True;
+  except:
+       return False;