diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
 # lzo
 
+## 0.1.1.3
+
+  * Add `cross` flag for cross-compilation
+  * Use unsafety to make it faster in various places
+
 ## 0.1.1.2
 
   * Set `cc-options: -O3`
diff --git a/lzo.cabal b/lzo.cabal
--- a/lzo.cabal
+++ b/lzo.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.0
 name:               lzo
-version:            0.1.1.2
+version:            0.1.1.3
 license:            BSD3
 license-file:       LICENSE
 copyright:          Copyright: (c) 2020 Vanessa McHale
@@ -27,24 +27,30 @@
     location: https://hub.darcs.net/vmchale/sak
     subdir:   lzo
 
+flag cross
+    description: Enable this flag if cross-compiling
+    default:     False
+
 library
-    exposed-modules:    Codec.Compression.Lzo
-    build-tool-depends: hsc2hs:hsc2hs -any
-    cc-options:         -O3
-    c-sources:          cbits/minilzo.c
-    hs-source-dirs:     src
+    exposed-modules:  Codec.Compression.Lzo
+    cc-options:       -O3
+    c-sources:        cbits/minilzo.c
+    hs-source-dirs:   src
     other-modules:
         Codec.Compression.Lzo.Block
         Codec.Compression.Lzo.File
 
-    default-language:   Haskell2010
-    include-dirs:       cbits
-    ghc-options:        -Wall -O2
+    default-language: Haskell2010
+    include-dirs:     cbits
+    ghc-options:      -Wall -O2
     build-depends:
         base >=4.9 && <5,
         bytestring -any,
         digest -any,
-        binary -any
+        binary >=0.8.3.0
+
+    if !flag(cross)
+        build-tool-depends: hsc2hs:hsc2hs -any
 
     if impl(ghc >=8.0)
         ghc-options:
diff --git a/src/Codec/Compression/Lzo/Block.hsc b/src/Codec/Compression/Lzo/Block.hsc
--- a/src/Codec/Compression/Lzo/Block.hsc
+++ b/src/Codec/Compression/Lzo/Block.hsc
@@ -20,7 +20,6 @@
                                    , lzoVersionDate
                                    ) where
 
-import Control.Applicative
 import Control.Exception (Exception, throw)
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Unsafe as BS
@@ -30,18 +29,18 @@
 import Foreign.Ptr (Ptr, nullPtr)
 import Foreign.Marshal.Alloc (alloca, allocaBytes)
 import Foreign.Storable (peek, poke)
-import System.IO.Unsafe (unsafePerformIO)
+import System.IO.Unsafe (unsafeDupablePerformIO, unsafePerformIO)
 
 #include <minilzo.h>
 
 type Byte = CChar
 
-foreign import ccall lzo1x_1_compress :: Ptr Byte -> CUInt -> Ptr Byte -> Ptr CUInt -> Ptr a -> IO CInt
-foreign import ccall lzo1x_decompress_safe :: Ptr Byte -> CUInt -> Ptr Byte -> Ptr CUInt -> Ptr a -> IO CInt
+foreign import ccall unsafe lzo1x_1_compress :: Ptr Byte -> CUInt -> Ptr Byte -> Ptr CUInt -> Ptr a -> IO CInt
+foreign import ccall unsafe lzo1x_decompress :: Ptr Byte -> CUInt -> Ptr Byte -> Ptr CUInt -> Ptr a -> IO CInt
 
-foreign import ccall lzo_version :: CUInt
-foreign import ccall lzo_version_string :: CString
-foreign import ccall lzo_version_date :: CString
+foreign import ccall unsafe lzo_version :: CUInt
+foreign import ccall unsafe lzo_version_string :: CString
+foreign import ccall unsafe lzo_version_date :: CString
 
 -- | @since 0.1.1.0
 lzoVersion :: Word
@@ -49,11 +48,11 @@
 
 -- | @since 0.1.1.0
 lzoVersionString :: String
-lzoVersionString = unsafePerformIO $ peekCString lzo_version_string
+lzoVersionString = unsafeDupablePerformIO $ peekCString lzo_version_string
 
 -- | @since 0.1.1.0
 lzoVersionDate :: String
-lzoVersionDate = unsafePerformIO $ peekCString lzo_version_date
+lzoVersionDate = unsafeDupablePerformIO $ peekCString lzo_version_date
 
 lzo1MemCompress :: Integral a => a
 lzo1MemCompress = #{const LZO1X_1_MEM_COMPRESS}
@@ -124,7 +123,7 @@
         allocaBytes outSz $ \bytePtr ->
             alloca $ \szPtr -> do
                 poke szPtr (fromIntegral outSz)
-                res <- LzoError <$> lzo1x_decompress_safe buf (fromIntegral bufSz) bytePtr szPtr nullPtr
+                res <- LzoError <$> lzo1x_decompress buf (fromIntegral bufSz) bytePtr szPtr nullPtr
                 when (isError res) $
                     throw res
                 sz <- peek szPtr
diff --git a/src/Codec/Compression/Lzo/File.hs b/src/Codec/Compression/Lzo/File.hs
--- a/src/Codec/Compression/Lzo/File.hs
+++ b/src/Codec/Compression/Lzo/File.hs
@@ -26,12 +26,6 @@
 
 type LzoBlock = Maybe BS.ByteString
 
--- getByte :: Word8 -> Get ()
--- getByte b = do
-    -- b' <- getWord8
-    -- unless (b' == b) $
-        -- fail "Invalid magic byte; perhaps it is not an lzop file"
-
 getMagic :: Get ()
 getMagic = do
     inp <- getByteString 9
