diff --git a/pypcc/yamlreader.py b/pypcc/yamlreader.py
index 8124e057f7676b0145dae5a07296fe70072fd6d6..0b731d30015947c8e98b55c95fd8bdc123ebd182 100644
--- a/pypcc/yamlreader.py
+++ b/pypcc/yamlreader.py
@@ -98,7 +98,7 @@ class yamlreader():
         print("M2:",mask)
         dtype=v.get('dtype','integer');
         width=(v.get('width',8)-1)//8+1
-        if (dtype=="float"): 
+        if (dtype=="double"): 
                 scale=v.get('scale',1.)
                 data=[int(d/scale) for d in data]
         if (dtype=="boolean"): 
@@ -171,7 +171,7 @@ class yamlreader():
         else:
                 print("OPCset unsupported type");
                 return;
-        if dtype=="float": 
+        if dtype=="double": 
                 scale=float(v.get('scale',1.))
                 data2=[(d*scale) for d in data2]
         data3=v['OPCR'].get_value();
diff --git a/src/apsctl/RCU.yaml b/src/apsctl/RCU.yaml
index 86877bbf0fb2aea6ff6114594bc1c1d1349d6b66..683776ba4003ebf33a064791924ce6f8dec72dcd 100644
--- a/src/apsctl/RCU.yaml
+++ b/src/apsctl/RCU.yaml
@@ -210,6 +210,24 @@ variables:
      dim: 96
      mask: Ant_mask
 
+   - name: RCU_GPIO1
+     driver: I2C_RFCHAIN
+     devreg:  [IO1.GPIO1,IO2.GPIO1,IO3.GPIO1]
+     width: 8
+     rw:  ro
+     dtype: uint8
+     dim: 96
+     mask: Ant_mask
+
+   - name: RCU_GPIO2
+     driver: I2C_RFCHAIN
+     devreg:  [IO1.GPIO2,IO2.GPIO2,IO3.GPIO2]
+     width: 8
+     rw:  ro
+     dtype: uint8
+     dim: 96
+     mask: Ant_mask
+
    - name: RCU_band
      description: Band select switch 1=10MHz,2=30MHz
      driver: I2C_RFCHAIN
diff --git a/src/drivers/drvbase.cpp b/src/drivers/drvbase.cpp
index 365a1ed704fe02336755ab6fd147557963f14343..d4edba444c2f1a39ebf2df12b6467f52a419273e 100644
--- a/src/drivers/drvbase.cpp
+++ b/src/drivers/drvbase.cpp
@@ -3,7 +3,7 @@
 
 drvbase::drvbase(const t_driver config1) : config (config1){};
 bool drvbase::I2Csend(int addr,int reg,int len,t_buffer* data,int direction){
-        std::cout << "I2Csend "<<config.name <<" not implemented!\n";
+//        std::cout << "I2Csend "<<config.name <<" not implemented!\n";
         return false;
 };
 
diff --git a/src/drivers/i2c_array.cpp b/src/drivers/i2c_array.cpp
index afa4b25b7b871ff8ddbb5b84553f67d9cc525442..47adb9567dda424dd4c7774b6b30e817c8923e97 100644
--- a/src/drivers/i2c_array.cpp
+++ b/src/drivers/i2c_array.cpp
@@ -94,6 +94,9 @@ void c_i2c_array::geti2c(const t_devreg devreg,int width,int bitoffset,t_buffer*
 //      buffer[0]=storedRegs[devreg.store-1][rcui];
       storedRegs[devreg.store-1][selectedRCU]=buffer[0];
       buffer[0]=UnMask(buffer[0],width,bitoffset);
+    } else
+   if ((bitoffset==0) && (len2*8-width>0)) {//Just mask on last byte
+       buffer[0]=UnMask(buffer[0],width-(len2-1)*8,0);
     }
 
 }
diff --git a/src/drivers/i2c_array2.cpp b/src/drivers/i2c_array2.cpp
index 5977d56291427e436e81b88e879f34e90625310c..d879e45f44ddba689e618a00d5fbb751dae051d2 100644
--- a/src/drivers/i2c_array2.cpp
+++ b/src/drivers/i2c_array2.cpp
@@ -33,7 +33,7 @@ int  c_i2c_array2::getvar(int x,t_buffer* buffer,int lenmask,bool* mask){
             N=parent->getvar2(variables[x],y,stride*N2,&(buffer[y*stride]),1,mask);
   else
       for (int y=0;y<N2;y++)
-            N=parent->getvar2(variables[x],y,stride*N2,&(buffer[y*stride]),stepmask,&(mask[y]));
+            N=parent->getvar2(variables[x],y,stride*N2,&(buffer[y*stride]),lenmask,&(mask[y]));
   return stride*N*N2;
 };
 
diff --git a/src/drivers/spibitbang1.cpp b/src/drivers/spibitbang1.cpp
index 2edb3c2cf695dbdaff3e1ceabbc8fefc93e06ae4..2cf5ea3a5c76e7c9da38d0fd40074ff5ad016954 100644
--- a/src/drivers/spibitbang1.cpp
+++ b/src/drivers/spibitbang1.cpp
@@ -8,9 +8,10 @@ c_spibitbang1::c_spibitbang1(const t_driver config1) : drvbase (config1){
   SDIO=config1.devreg[1];
   SDIOdir=config1.devreg[2];
   CS=config1.devreg[3];
+
   CLKpin=config1.parameters[0];
   SDIOpin=config1.parameters[1];
-  CSpin=config1.parameters[2];
+  CSpin=config1.parameters[3];
 };
 
 bool c_spibitbang1::I2Csend(int addr,int reg,int len,t_buffer* data,int direction){
@@ -44,7 +45,7 @@ bool c_spibitbang1::I2Csend(int addr,int reg,int len,t_buffer* data,int directio
     data2=0;
     for (int x=0;x<8;x++){
         parent->geti2c(SDIO,1,SDIOpin,bit);
-        data2<<=2;
+        data2<<=1;
         data2+=bit[0];
         bit[0]=1;parent->seti2c(CLK,1,CLKpin,bit);
         bit[0]=0;parent->seti2c(CLK,1,CLKpin,bit);
@@ -53,7 +54,8 @@ bool c_spibitbang1::I2Csend(int addr,int reg,int len,t_buffer* data,int directio
     bit[0]=1;parent->seti2c(CS,1,CSpin,bit);//disable
     bit[0]=1;parent->seti2c(SDIO,1,SDIOpin,bit);
     bit[0]=0;parent->seti2c(SDIOdir,1,SDIOpin,bit);
-
+    std::cout << "spibitbang  reg="<<reg<<" data="<<data2<<"\n";
+    data[0]=data2;
   }
   return true;
 }