diff --git a/i2c/setRCUversion.py b/i2c/setRCUversion.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfe58a3ce177acf3fbcaf8ebba9ed1656b2f1af5
--- /dev/null
+++ b/i2c/setRCUversion.py
@@ -0,0 +1,20 @@
+from I2C import *
+import time
+RCU=1
+Ver="RCU2L v1.1"
+R1=32
+ROM=0x50
+Ver2=[ord(c.encode('utf-8')[0]) for c in Ver]
+print(len(Ver),Ver,Ver2)
+V2=[0]
+I2C1server(0x70,[1<<RCU],reg=None,read=0) #select RCU
+for i,v in enumerate(Ver2):
+ I2C1server(ROM,[],reg=R1+i,read=0) #select RCU
+ time.sleep(0.01)
+ I2C1server(ROM,[v],reg=None,read=0) #select RCU
+ time.sleep(0.01)
+ I2C1server(ROM,V2,reg=R1+i,read=1) #select RCU
+ print(i,v,V2)
+Ver2=[0]*10
+I2C1server(ROM,Ver2,reg=R1,read=1) #select RCU
+print(Ver2)
diff --git a/rcu/RCU.py b/rcu/RCU.py
index b8eea88a8e5fa6c6ee4aba13edf884ef1789e062..e1ca7b121679d54d33afe9f8ff223883469c4956 100644
--- a/rcu/RCU.py
+++ b/rcu/RCU.py
@@ -34,14 +34,14 @@ def strs2bytes(var):
 #    print("str2bytes",var)
     if len(var)==0: return var;
     if isinstance(var[0],str): #make string a byte array
-            return [c.encode('ascii')[0] for s in var for c in s]
+            return [ord(c.encode('utf-8')[0]) for s in var for c in s]
     return var
 
 def bytes2strs(var,step,dtype):
     if not(dtype==Vars.datatype.dstring): return var
     cnt=int(len(var)/step)
     print(var)
-    return [(bytes(var[i*step:(i+1)*step]).decode("ascii")) for i in range(cnt)]
+    return [(bytearray(var[i*step:(i+1)*step]).decode("utf-8")) for i in range(cnt)]
 
 class RCU1():
     def __init__(self,number,I2Ccallback,Switchcallback):
@@ -172,6 +172,7 @@ class RCU1():
                     var=V1.Vars[Vari]
 #                    print(Step,Step2,i0,i1,value2,len(value1))
                     self.GetI2Cnoreg(RCUi,var.devreg,var.width,var.bitoffset,value2)
+#                    print(value2)
                     if (var.Scale!=0): value2[0]*=var.Scale;
                     value1[i0:i1]=value2
             elif V1.Vars[0].type==Vars.DevType.SPIbb:
@@ -179,6 +180,7 @@ class RCU1():
 #              logging.info("SPIbb all not implemented yet")
             else:
                logging.error("Type not implemented")
+#            print(value1)
     def GetBBValueAll(self,V1,value1,mask):
         def SetBit(RCUi,dev,width,bitoffset,value,buffer=False):
             if not(buffer): self.SWcallback(mask)
@@ -231,7 +233,8 @@ class RCU1():
 #        logging.debug(str(("GetI2Cbuffer",RCUi,dev.store,value)))
         l1=int(np.floor((width+bitoffset+7)/8))
         if (width!=l1*8) or (bitoffset>0): 
-            value[0]=UnMask(value[0],width,bitoffset)      
+          for i in range(len(value)):
+             value[i]=UnMask(value[i],width,bitoffset)      
         return True
 
     def GetI2C(self,RCUi,dev,width,bitoffset,value):
@@ -257,7 +260,8 @@ class RCU1():
             self.previous[RCUi,dev.store-1]=value[0]
 #            logging.debug(str(("Store buffer",RCUi,dev.store,value[0])))
         if (width!=l1*8) or (bitoffset>0): 
-            value[0]=UnMask(value[0],width,bitoffset)      
+            for i in range(len(value)):
+              value[i]=UnMask(value[i],width,bitoffset)      
         else: value[0]=value2[0]
         return True;
     def GetI2Cbit(self,RCUi,dev,pin):
@@ -272,6 +276,7 @@ class RCU1():
 
 
     def GetI2Cnoreg(self,RCUi,dev,width,bitoffset,value):
+        #print(width,len(value))
         l1=int(np.floor((width+bitoffset+7)/8))
         makesinglevalue=((len(value)==1) and (l1>1));
         if makesinglevalue: value2=[0 for x in range(l1)]
@@ -284,9 +289,13 @@ class RCU1():
         if dev.store>0:
             self.previous[RCUi,dev.store-1]=value[0]
 #            logging.debug(str(("Store buffer",RCUi,dev.store,value[0])))
-        if (width!=l1*8) or (bitoffset>0): 
-            value[0]=UnMask(value[0],width,bitoffset)      
+#        if width<8:
+        if (width!=l1*8) or (bitoffset>0):
+            for i in range(len(value)): 
+              value[i]=UnMask(value[i],width,bitoffset)      
+#              value[0]=UnMask(value[0],width,bitoffset)      
         #else: value[0]=value2[0]
+        #if (len(value)>1) and (width<8): print value
         return True;
 
     def start(self,Q1):
diff --git a/rcu/Vars.py b/rcu/Vars.py
index 94dc921e8675cfeb770e492fa20d0c20dccdfb5a..164abf31774f15a9d5e07da4ec761a10169ae18c 100644
--- a/rcu/Vars.py
+++ b/rcu/Vars.py
@@ -49,8 +49,8 @@ HBA1_Pwr  =VarArray("HBA_element_pwr"  ,3,[HBA1_Pwr  ,HBA2_Pwr  ,HBA3_Pwr  ],RW.
 
 RCU_ID0=Var2dev("",RCUmod,DevType.I2C,RCU_ROM_ID,32,0,1)
 RCU_ID=VarArray("RCU_ID",1,[RCU_ID0],RW.ReadOnly,datatype.dInt,1,None,None)
-RCU_Ver0=Var2dev("",RCUmod,DevType.I2C,RCU_ROM_Ver,32,0,1)
-RCU_VER=VarArray("RCU_version",1,[RCU_ID0],RW.ReadOnly,datatype.dstring,10,None,None)
+RCU_Ver0=Var2dev("",RCUmod,DevType.I2C,RCU_ROM_Ver,7,0,1)
+RCU_VER=VarArray("RCU_version",1,[RCU_Ver0],RW.ReadOnly,datatype.dstring,10,None,None)
 
 
 RCU_ADC1_lock=Var2dev("RCU_ADC1_lock",RCUmod,DevType.SPIbb,RCU_ADC1_PLL_stat,8,0,1)