diff --git a/Lambdaya.cabal b/Lambdaya.cabal
--- a/Lambdaya.cabal
+++ b/Lambdaya.cabal
@@ -11,7 +11,7 @@
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
 --                   | | | | +- doc update
-version:             0.2.0.0.1
+version:             0.3.0.0.0
 
 -- A short (one-line) description of the package.
 synopsis: Library for RedPitaya         
diff --git a/src/System/RedPitaya/Arm.hs b/src/System/RedPitaya/Arm.hs
--- a/src/System/RedPitaya/Arm.hs
+++ b/src/System/RedPitaya/Arm.hs
@@ -31,15 +31,16 @@
 
 
 type FpgaPtr = Ptr ()
+type FA a = ReaderT FpgaPtr IO a
 
 -- | FpgaSetGet get for running on Arm
-type FpgaArm = ReaderT FpgaPtr IO
-
+newtype FpgaArm a = FpgaArm {unFA :: FA a}
+    deriving(Functor, Applicative,Monad,MonadIO,MonadReader FpgaPtr)
 
 #ifdef arm_HOST_ARCH
 
 runArm :: FpgaArm a -> FpgaPtr -> IO a
-runArm  = runReaderT
+runArm  = runReaderT . unFA
 
 
 instance FpgaSetGet FpgaArm where 
diff --git a/src/System/RedPitaya/Fpga.hs b/src/System/RedPitaya/Fpga.hs
--- a/src/System/RedPitaya/Fpga.hs
+++ b/src/System/RedPitaya/Fpga.hs
@@ -123,7 +123,7 @@
     -- user can provide only one set and one get if requred
     fpgaGet off = fmap head $ fpgaGetArray off 1
     fpgaSet off v = fpgaSetArray off [v]
-    fpgaGetArray off len = sequence $ map fpgaGet [off, off+4 .. (off + (4*len))]
+    fpgaGetArray off len = sequence $ map fpgaGet $ take len [off, off+4 .. ]
     fpgaSetArray off d = sequence_ $ zipWith fpgaSet [off, off+4 .. ] d
 
 
diff --git a/src/System/RedPitaya/Tcp.hs b/src/System/RedPitaya/Tcp.hs
--- a/src/System/RedPitaya/Tcp.hs
+++ b/src/System/RedPitaya/Tcp.hs
@@ -64,9 +64,11 @@
                        >> putWord32be a
 
   put (ReadArray len addr) = putWord32be cReadArray 
+                             >> putWord32be len
                              >> putWord32be addr
 
-  put (RespSingle reg) = putWord32be cRespSingle >> putWord32be reg
+  put (RespSingle reg) = putWord32be cRespSingle 
+                      >> putWord32be reg
 
   put (RespArray len arr) = putWord32be cRespArray
                             >> putWord32be len
@@ -122,7 +124,7 @@
     handle (WriteSingle addr reg) = lift $ ( fpgaSet (frInt addr) reg )
     handle (WriteArray len addr arr) = lift $ fpgaSetArray (frInt addr) arr
     handle (ReadSingle addr ) =   lift (fpgaGet (frInt addr)) >>= (yield . RespSingle )
-    handle (ReadArray len addr ) =  lift (fpgaGetArray (frInt len)  (frInt addr) ) 
+    handle (ReadArray len addr ) =  lift (fpgaGetArray (frInt addr) (frInt len)) 
                                              >>= yield . RespArray len
     handle _ = yield Error
 
