diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+Changes in 0.1.0.5
+
+* Provide 'BladeRFReturnType' type-alias and replace 'Either BladeRFError a'
+  with 'BladeRFReturnType a'. For brevity and clarity, use a type-alias to
+  wrap the Either error or result context in the return type of the
+  bindings various IO actions.
+* Sync.hs: Handle bladerf_sync_{t,r}x return err codes. Deal with possible
+  return error codes from the C functions, wrapping them in the
+  Either context mapped to the 'BladeRFError' type.
+
 Changes in 0.1.0.4
 
 * No need to explicitly pass #. of samples to bladeRFSyncTx
diff --git a/hlibBladeRF.cabal b/hlibBladeRF.cabal
--- a/hlibBladeRF.cabal
+++ b/hlibBladeRF.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                hlibBladeRF
-version:             0.1.0.4
+version:             0.1.0.5
 synopsis:            Haskell binding to libBladeRF SDR library
 description:         IO Monadic binding for libbladeRF software defined radio.
 homepage:            https://victoredwardocallaghan.github.io/hlibBladeRF
@@ -77,4 +77,4 @@
   type:                git
   location:            git://github.com/victoredwardocallaghan/hlibBladeRF
   branch:              master
-  tag:                 v0.1.0.4
+  tag:                 v0.1.0.5
diff --git a/src/LibBladeRF/Flash.hs b/src/LibBladeRF/Flash.hs
--- a/src/LibBladeRF/Flash.hs
+++ b/src/LibBladeRF/Flash.hs
@@ -31,7 +31,7 @@
 bladeRFEraseFlash :: DeviceHandle  -- ^ Device handle
                   -> Word32        -- ^ Erase block to start erasing at
                   -> Word32        -- ^ Number of blocks to erase.
-                  -> IO (Either BladeRFError ())
+                  -> IO (BladeRFReturnType ())
 bladeRFEraseFlash dev b n = do
   ret <- c'bladerf_erase_flash (unDeviceHandle dev) b n
   return $ bladeRFErrorTy ret
@@ -53,7 +53,7 @@
                   -> BS.ByteString    -- ^ Data to write to flash
                   -> Word32           -- ^ page  Page to begin writing at
                   -> Word32           -- ^ count
-                  -> IO (Either BladeRFError ())
+                  -> IO (BladeRFReturnType ())
 bladeRFWriteFlash dev b p c = allocaBytes (fromIntegral $ p * c'BLADERF_FLASH_PAGE_SIZE) $ \bptr -> do
   -- XXX - Buffer allocation size must be `page` * BLADERF_FLASH_PAGE_SIZE bytes or larger.
   pokeArray bptr (BS.unpack b) -- XXX can we overflow here??
diff --git a/src/LibBladeRF/Frequency.hs b/src/LibBladeRF/Frequency.hs
--- a/src/LibBladeRF/Frequency.hs
+++ b/src/LibBladeRF/Frequency.hs
@@ -28,7 +28,7 @@
 -- | Write value to VCTCXO DAC.
 bladeRFDACWrite :: DeviceHandle -- ^ Device handle
                 -> Word16       -- ^ Data to write to DAC register
-                -> IO (Either BladeRFError ())
+                -> IO (BladeRFReturnType ())
 bladeRFDACWrite dev v = do
   ret <- c'bladerf_dac_write (unDeviceHandle dev) v
   return $ bladeRFErrorTy ret
@@ -47,7 +47,7 @@
 bladeRFSetFrequency :: DeviceHandle  -- ^ Device handle
                     -> BladeRFModule -- ^ Module to configure
                     -> Int           -- ^ Desired frequency
-                    -> IO (Either BladeRFError ())
+                    -> IO (BladeRFReturnType ())
 bladeRFSetFrequency dev m f = do
   ret <- c'bladerf_set_frequency (unDeviceHandle dev) ((fromIntegral . fromEnum) m) (fromIntegral f)
   return $ bladeRFErrorTy ret
@@ -66,7 +66,7 @@
                      -> BladeRFModule     -- ^ Module to apply correction to
                      -> BladeRFCorrection -- ^ Correction type
                      -> Word16            -- ^ Value to apply
-                     -> IO (Either BladeRFError ())
+                     -> IO (BladeRFReturnType ())
 bladeRFSetCorrection dev m c v = do
   ret <- c'bladerf_set_correction (unDeviceHandle dev) ((fromIntegral . fromEnum) m) ((fromIntegral . fromEnum) c) v
   return $ bladeRFErrorTy ret
diff --git a/src/LibBladeRF/Gain.hs b/src/LibBladeRF/Gain.hs
--- a/src/LibBladeRF/Gain.hs
+++ b/src/LibBladeRF/Gain.hs
@@ -40,7 +40,7 @@
 -- | Set the PA gain in dB.
 bladeRFSetTXVGA2 :: DeviceHandle -- ^ Device handle
                  -> Int          -- ^ Desired gain
-                 -> IO (Either BladeRFError ())
+                 -> IO (BladeRFReturnType ())
 bladeRFSetTXVGA2 dev g = do
   ret <- c'bladerf_set_txvga2 (unDeviceHandle dev) (fromIntegral g)
   return $ bladeRFErrorTy ret
@@ -57,7 +57,7 @@
 -- | Set the post-LPF gain in dB.
 bladeRFSetTXVGA1 :: DeviceHandle         -- ^ Device handle
                  -> BladeRFVGAGainBounds -- ^ Desired gain
-                 -> IO (Either BladeRFError ())
+                 -> IO (BladeRFReturnType ())
 bladeRFSetTXVGA1 dev g = do
   ret <- c'bladerf_set_txvga1 (unDeviceHandle dev) ((fromIntegral . fromEnum) g)
   return $ bladeRFErrorTy ret
@@ -74,7 +74,7 @@
 -- | Set the post-LPF VGA gain.
 bladeRFSetRXVGA2 :: DeviceHandle         -- ^ Device handle
                  -> BladeRFVGAGainBounds -- ^ Desired gain
-                 -> IO (Either BladeRFError ())
+                 -> IO (BladeRFReturnType ())
 bladeRFSetRXVGA2 dev g = do
   ret <- c'bladerf_set_rxvga2 (unDeviceHandle dev) ((fromIntegral . fromEnum) g)
   return $ bladeRFErrorTy ret
@@ -91,7 +91,7 @@
 -- | Set the pre-LPF VGA gain.
 bladeRFSetRXVGA1 :: DeviceHandle         -- ^ Device handle
                  -> BladeRFVGAGainBounds -- ^ Desired gain
-                 -> IO (Either BladeRFError ())
+                 -> IO (BladeRFReturnType ())
 bladeRFSetRXVGA1 dev g = do
   ret <- c'bladerf_set_rxvga1 (unDeviceHandle dev) ((fromIntegral . fromEnum) g)
   return $ bladeRFErrorTy ret
@@ -108,7 +108,7 @@
 -- | Set LNA Gain.
 bladeRFSetLNAGain :: DeviceHandle   -- ^ Device handle
                   -> BladeRFLNAGain -- ^ Desired gain level
-                  -> IO (Either BladeRFError ())
+                  -> IO (BladeRFReturnType ())
 bladeRFSetLNAGain dev g = do
   ret <- c'bladerf_set_lna_gain (unDeviceHandle dev) ((fromIntegral . fromEnum) g)
   return $ bladeRFErrorTy ret
@@ -130,7 +130,7 @@
 bladeRFSetGain :: DeviceHandle  -- ^ Device handle
                -> BladeRFModule -- ^ Module
                -> Int           -- ^ Desired gain
-               -> IO (Either BladeRFError ())
+               -> IO (BladeRFReturnType ())
 bladeRFSetGain dev m g = do
   ret <- c'bladerf_set_gain (unDeviceHandle dev) ((fromIntegral . fromEnum) m) (fromIntegral g)
   return $ bladeRFErrorTy ret
diff --git a/src/LibBladeRF/Gpio.hs b/src/LibBladeRF/Gpio.hs
--- a/src/LibBladeRF/Gpio.hs
+++ b/src/LibBladeRF/Gpio.hs
@@ -35,7 +35,7 @@
 -- accidentally clearing other GPIO bits that may be set by the library internally.
 bladeRFConfigGPIOWrite :: DeviceHandle -- ^ Device handle
                        -> Word32       -- ^ Data to write to GPIO register
-                       -> IO (Either BladeRFError ())
+                       -> IO (BladeRFReturnType ())
 bladeRFConfigGPIOWrite dev v = do
   ret <- c'bladerf_config_gpio_write (unDeviceHandle dev) v
   return $ bladeRFErrorTy ret
diff --git a/src/LibBladeRF/LibBladeRF.hs b/src/LibBladeRF/LibBladeRF.hs
--- a/src/LibBladeRF/LibBladeRF.hs
+++ b/src/LibBladeRF/LibBladeRF.hs
@@ -18,6 +18,7 @@
 module LibBladeRF.LibBladeRF ( withBladeRF
                              , DeviceHandle(..)
                              , BladeRFError(..)
+                             , BladeRFReturnType(..)
                              , bladeRFErrorValue
                              , bladeRFErrorTy
                              ) where
@@ -95,15 +96,18 @@
          ]
 
 -- | (For internal use) Obtain a 'BladeRFError' type of a C value from the Error codes list.
-bladeRFErrorValue :: CInt -> Either BladeRFError Int
+bladeRFErrorValue :: CInt -> BladeRFReturnType Int
 bladeRFErrorValue c | c >= 0 = (Right . fromIntegral) c         -- Success (on ret == 0)
                     | c <  0 = (Left . toEnum . fromIntegral) c -- C ret code to typed error
 
 -- | (For internal use) Obtain a 'BladeRFError' type of a C value from the Error codes list.
-bladeRFErrorTy :: CInt -> Either BladeRFError ()
+bladeRFErrorTy :: CInt -> BladeRFReturnType ()
 bladeRFErrorTy c | c >= 0 = return ()                        -- Success (on ret == 0)
                  | c <  0 = (Left . toEnum . fromIntegral) c -- C ret code to typed error
 
+-- | Short-hand type for brevity and clarity.
+type BladeRFReturnType a = Either BladeRFError a
+
 -- | DeviceHandle wrapper around C device descriptor pointer
 newtype DeviceHandle = DeviceHandle { unDeviceHandle :: Ptr C'bladerf }
 
@@ -122,7 +126,7 @@
 -- Open specified device using a device identifier string.
 -- See bladerf_open_with_devinfo() if a device identifier string
 -- is not readily available.
-openBladeRF' :: IO (Either BladeRFError DeviceHandle)
+openBladeRF' :: IO (BladeRFReturnType DeviceHandle)
 openBladeRF'  = alloca $ \ptr -> do
   ret <- c'bladerf_open ptr nullPtr
   if ret /= 0 then
diff --git a/src/LibBladeRF/Sync.hs b/src/LibBladeRF/Sync.hs
--- a/src/LibBladeRF/Sync.hs
+++ b/src/LibBladeRF/Sync.hs
@@ -44,8 +44,7 @@
                   -> Int           -- ^ The size of the underlying stream buffers, in samples. This value must be a multiple of 1024.
                   -> Int           -- ^ The number of active USB transfers that may be in-flight at any given time.
                   -> Int           -- ^ Timeout (milliseconds) for transfers in the underlying data stream.
-                  -> IO (Either BladeRFError ())
-
+                  -> IO (BladeRFReturnType ())
 bladeRFSyncConfig dev m f nb sz tr to = do
   ret <- c'bladerf_sync_config (unDeviceHandle dev) ((fromIntegral . fromEnum) m) ((fromIntegral . fromEnum) f) (fromIntegral nb) (fromIntegral sz) (fromIntegral tr) (fromIntegral to)
   return $ bladeRFErrorTy ret
@@ -75,10 +74,10 @@
                                        --   be 'Nothing' when the interface is configured for
                                        --   the 'FORMAT_SC16_Q11' format.
               -> Int                   -- ^ Timeout (milliseconds) for this call to complete. Zero implies infinite.
-              -> IO ()
+              -> IO (BladeRFReturnType ())
 bladeRFSyncTx dev s md t = do
   -- The number of samples to write is the length of the bytestring `div` by (|IQ|=2 * |int16_t|=2)=4
-  alloca $ \pmd ->
+  ret <- alloca $ \pmd ->
     case md of
       Nothing -> BS.useAsCStringLen s $
                    \(p, len) -> c'bladerf_sync_tx (unDeviceHandle dev) p (fromIntegral $ len `div` 4) nullPtr (fromIntegral t)
@@ -94,7 +93,7 @@
                  poke pmd meta
                  BS.useAsCStringLen s $
                    \(p, len) -> c'bladerf_sync_tx (unDeviceHandle dev) p (fromIntegral $ len `div` 4) pmd (fromIntegral t)
-  return () -- XXX ignores ret
+  return $ bladeRFErrorTy ret
 
 -- | Receive IQ samples.
 --
@@ -113,18 +112,23 @@
 bladeRFSyncRx :: DeviceHandle    -- ^ Device handle
               -> Int             -- ^ Number of samples to read
               -> Int             -- ^ Timeout (milliseconds) for this call to complete. Zero implies infinite.
-              -> IO (BS.ByteString, BladeRFMetadata)
+              -> IO (BladeRFReturnType (BS.ByteString, BladeRFMetadata))
 bladeRFSyncRx dev n t = alloca $ \pmd -> do
   par <- allocaBytes (4 * n) $ \ptr -> do
-      c'bladerf_sync_rx (unDeviceHandle dev) ptr (fromIntegral n) pmd (fromIntegral t)
-      peekArray (4 * n) ptr
-  let bs = BS.pack par
-  cmd <- peek pmd
-  -- Use the following instead when switching to ghc7.8 later..
-  -- bladeRFMetadataFromCBladeRFMetadata :: C'bladerf_metadata -> BladeRFMetadata
-  let meta = BladeRFMetadata { timestamp = c'bladerf_metadata'timestamp    cmd
-                             , flags     = c'bladerf_metadata'flags        cmd
-                             , status    = c'bladerf_metadata'status       cmd
-                             , count     = fromIntegral $ c'bladerf_metadata'actual_count cmd
-                             }
-  return (bs, meta)
+      ret <- c'bladerf_sync_rx (unDeviceHandle dev) ptr (fromIntegral n) pmd (fromIntegral t)
+      if ret < 0 then (return . Left . toEnum . fromIntegral) ret -- C ret code to typed error
+      else (return . Right) $ peekArray (4 * n) ptr
+  case par of
+    Left ret -> (return . Left) ret
+    Right par' -> do
+      par'' <- par'
+      let bs = BS.pack par''
+      cmd <- peek pmd
+      -- Use the following instead when switching to ghc7.8 later..
+      -- bladeRFMetadataFromCBladeRFMetadata :: C'bladerf_metadata -> BladeRFMetadata
+      let meta = BladeRFMetadata { timestamp = c'bladerf_metadata'timestamp    cmd
+                                 , flags     = c'bladerf_metadata'flags        cmd
+                                 , status    = c'bladerf_metadata'status       cmd
+                                 , count     = fromIntegral $ c'bladerf_metadata'actual_count cmd
+                                 }
+      return $ Right (bs, meta)
diff --git a/src/LibBladeRF/Utils.hs b/src/LibBladeRF/Utils.hs
--- a/src/LibBladeRF/Utils.hs
+++ b/src/LibBladeRF/Utils.hs
@@ -91,7 +91,7 @@
 -- power cycle. Pass Full path to FPGA bitstream.
 bladeRFLoadFPGA :: DeviceHandle -- ^ Device handle
                 -> String       -- ^ Full path to FPGA bitstream
-                -> IO (Either BladeRFError ())
+                -> IO (BladeRFReturnType ())
 bladeRFLoadFPGA dev s = do
   p <- newCString s
   ret <- c'bladerf_load_fpga (unDeviceHandle dev) p
@@ -146,7 +146,7 @@
 bladeRFEnableModule :: DeviceHandle  -- ^ Device handle
                     -> BladeRFModule -- ^ Device module
                     -> Bool          -- ^ 'True' to enable, 'False' to disable
-                    -> IO (Either BladeRFError ())
+                    -> IO (BladeRFReturnType ())
 bladeRFEnableModule dev m t = do
   ret <- c'bladerf_enable_module (unDeviceHandle dev) ((fromIntegral . fromEnum) m) t
   return $ bladeRFErrorTy ret
@@ -159,7 +159,7 @@
 bladeRFSetLoopback :: DeviceHandle    -- ^ Device handle
                    -> BladeRFLoopback -- ^ Loopback mode. Note that 'LB_NONE'
                                       --   disables the use of loopback functionality.
-                   -> IO (Either BladeRFError ())
+                   -> IO (BladeRFReturnType ())
 bladeRFSetLoopback dev l = do
   ret <- c'bladerf_set_loopback (unDeviceHandle dev) ((fromIntegral . fromEnum) l)
   return $ bladeRFErrorTy ret
