diff --git a/compile.sh b/compile.sh
index 256c591e106a03f05b35f8c588a3553650920dd3..be8c7d30285474a37d3e27ff6481708fab176154 100644
--- a/compile.sh
+++ b/compile.sh
@@ -1,3 +1,5 @@
+cd src/apsctl
+python3 yaml2head.py
 rm pypcc/pypcc.capnp
 cd src/interface
 capnp compile -oc++ pypcc.capnp
diff --git a/pypcc/pypcc3.py b/pypcc/pypcc3.py
index 906e5e7be22a4af3eb2c4fdfb756301780e7b9cd..c94b92ac119bf13b3d1d1eca693e5f31763fccb0 100644
--- a/pypcc/pypcc3.py
+++ b/pypcc/pypcc3.py
@@ -75,8 +75,8 @@ def TimerThread(RCU_I2C,RCU_conf):
 
     logging.info("End Timer thread")
 
-Timerthread1 = threading.Thread(target=TimerThread, args=(RCU_I2C,RCU_conf))
-Timerthread1.start()
+#Timerthread1 = threading.Thread(target=TimerThread, args=(RCU_I2C,RCU_conf))
+#Timerthread1.start()
 
 # on SIGINT: stop thread(s) by adding None to instruction queue(s)
 def signal_handler(sig, frame):
@@ -102,4 +102,4 @@ finally:
         opcuaserv.server.stop()
 #        RCUthread1.join()
 #        CLKthread1.join()
-        Timerthread1.join()
+#        Timerthread1.join()
diff --git a/pypcc/yamlreader.py b/pypcc/yamlreader.py
index 815e5d53e935eb9bff9b20f8dc540eb903fef937..8124e057f7676b0145dae5a07296fe70072fd6d6 100644
--- a/pypcc/yamlreader.py
+++ b/pypcc/yamlreader.py
@@ -1,5 +1,6 @@
 import yaml
 import struct
+import time
 def Find(L,name,value):
   for x in L:
     if x[name]==value:
@@ -51,6 +52,7 @@ class yamlreader():
             v['OPCR']=var1
             print("Var added:"+name+"_R")
             self.server.readvar(v['id'])
+            time.sleep(0.1);
 #            Inst=Vars.Instr(Vars.DevType.VarUpdate,v,dim2,varvalue2)
 #            Q1.put(Inst)
 
@@ -152,19 +154,20 @@ class yamlreader():
             if width<=1: 
                 data2=[d for d in data]
             elif width==2:
-                data2 = struct.unpack('>%sH' % len(data), data)
+                data2 = struct.unpack('>%sH' % (len(data)//2), data)
             elif width==3:
                 data2 = [struct.unpack('>L' ,bytearray([0])+data[x*3:x*3+3])[0] for x in range(len(data)//3)]
             elif width==4:
-                data2 = struct.unpack('>%sL' % len(data), data)
+                data2 = struct.unpack('>%sL' % (len(data)//4), data)
             elif width==8:
-                data2 = struct.unpack('>%sQ' % len(data), data)
+                data2 = struct.unpack('>%sQ' % (len(data)//8), data)
             else:
                 print("OPCset",v['name']," unsupported width!",width)
                 return;
         elif dtype=="string": 
                 cnt=int(len(data)/width)
-                data2=[(bytearray(data[i*width:(i+1)*width]).decode("utf-8")) for i in range(cnt)]
+#                data2=[(bytearray(data[i*width:(i+1)*width]).decode("utf-8")) for i in range(cnt)]
+                data2=[bytearray(data)[i*width:(i+1)*width].decode("utf-8") for i in range(cnt)]
         else:
                 print("OPCset unsupported type");
                 return;
diff --git a/scripts/Band.py b/scripts/Band.py
new file mode 100644
index 0000000000000000000000000000000000000000..3a70bfe6238d37c3b24fd3d548e304c4621f0dec
--- /dev/null
+++ b/scripts/Band.py
@@ -0,0 +1,19 @@
+from test_common import *
+
+name="RCU_band"
+RCU=1;
+Att=[2,2,2]
+
+setAntmask([RCU])
+
+att=get_value(name+"_R")
+print("Att old:",att[3*RCU:3*RCU+3])
+
+att[3*RCU:3*RCU+3]=Att
+set_value(name+"_RW",att)
+
+time.sleep(0.5)
+att=get_value(name+"_R")
+print("Att new:",att[3*RCU:3*RCU+3])
+
+disconnect()
\ No newline at end of file
diff --git a/src/drivers/i2c.cpp b/src/drivers/i2c.cpp
index 23c2ff1461a46faa49d2bded1116226e2d9a68d4..76b2a3099fbb85a15a1657d77a1d0f74fe38c0b1 100644
--- a/src/drivers/i2c.cpp
+++ b/src/drivers/i2c.cpp
@@ -1,5 +1,7 @@
 #include "i2c.h"
 #include <iostream>
+//#include <cstdio>
+//#include <cstdlib>
 #include <linux/i2c-dev.h>
 #include <linux/i2c.h>
 #include "smbus.h"
@@ -7,7 +9,9 @@
 #include <fcntl.h>
 #include <sys/ioctl.h>
 #include <linux/types.h>
-
+#include <unistd.h>
+//#include <sys/stat.h>
+using namespace std;
 c_i2c::c_i2c(const t_driver config1) : drvbase (config1){
   std::cout << config.name <<": i2c server, connecting to device " << config.parameters[0] << "\n";
   char filename[20];
@@ -23,18 +27,24 @@ bool c_i2c::I2Csend_reg(int addr,int reg,int len,t_buffer* data){
   std::cout << config.name <<": i2c send to addr="<<addr<<" reg="<<reg<<" len="<<len<<" value="<<int(data[0]) <<"\n";
   if (ioctl(file, I2C_SLAVE, addr)<0) return false;
 //  return true;
-  return (i2c_smbus_write_block_data(file,reg,len,data)>=0);
+//  return (i2c_smbus_write_block_data(file,reg,len,data)>=0);
+  return (i2c_smbus_write_i2c_block_data(file,reg,len,data)>=0);
 }
 
 bool c_i2c::I2Cget_reg(int addr,int reg,int len,t_buffer* data){
-  std::cout << config.name <<": i2c get from addr="<<addr<<" reg="<<reg<<" len="<<len<<" value="<<int(data[0]) <<"\n";
   if (ioctl(file, I2C_SLAVE, addr)<0) return false;
 //  return true;
-  return (i2c_smbus_read_i2c_block_data(file,reg,len,data)==len);
+  int result=i2c_smbus_read_i2c_block_data(file,reg,len,data);
+  std::cout << config.name <<": i2c get from addr="<<addr<<" reg="<<reg<<" len="<<len<<" value="<<int(data[0]) <<" result" << result<<"\n";
+  return (result==len);
 }
 
 bool c_i2c::I2Csend(int addr,int len,t_buffer* data){
-  std::cout << config.name <<": i2c send to addr="<<addr<<" len="<<len<<" value="<<int(data[0])<<"\n";
+//  std::cout << config.name <<": i2c send to addr="<<addr<<" len="<<len<<" value="<<int(data[0])<<"\n";
+  if (ioctl(file, I2C_SLAVE, addr)<0) return false;
+  int result=write(file,data,len);
+  std::cout << config.name <<": i2c send to addr="<<addr<<" len="<<len<<" value="<<int(data[0])<<" result" << result<<"\n";
+  return (result>=0);
 }
 
 
diff --git a/src/drivers/i2c_array.cpp b/src/drivers/i2c_array.cpp
index 5a00d7ccdda7c6dc8fb82cd447fc76e95d7a53bf..9883c307a29c3a0d9ab136460636b678cd8d4b18 100644
--- a/src/drivers/i2c_array.cpp
+++ b/src/drivers/i2c_array.cpp
@@ -81,11 +81,11 @@ void c_i2c_array::seti2c(int rcui,const t_devreg devreg,int width,int bitoffset,
 
 void c_i2c_array::geti2c(int rcui,const t_devreg devreg,int width,int bitoffset,t_buffer* buffer){
     int len2=((width+bitoffset-1)>>3)+1; //1..8 bits = 1 byte, 9..16 bits=2bytes etc.
-    parent->I2Cget_reg(devreg.address,devreg.register_W,len2,buffer);
+    parent->I2Cget_reg(devreg.address,devreg.register_R,len2,buffer);
     if (devreg.store>0) {
-      std::cout << "DEBUG: USED stored value="<< int(buffer[0]) <<"\n";
-      buffer[0]=storedRegs[devreg.store-1][rcui];
-//      storedRegs[devreg.store-1][rcui]=buffer[0];
+//      std::cout << "DEBUG: USED stored value="<< int(buffer[0]) <<"\n";
+//      buffer[0]=storedRegs[devreg.store-1][rcui];
+      storedRegs[devreg.store-1][rcui]=buffer[0];
       buffer[0]=UnMask(buffer[0],width,bitoffset);
     }