diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,12 @@
 # lz4
 
+## 0.1.1.0
+
+  * Export `lZ4VersionString` and `lZ4VersionNumber`
+  * Add `lZ4MaxInputSize` and `lZ4HCClevelMax`
+  * Add `compressBlockHC`
+  * Add `{-# NOINLINE -#}` pragmas in various places
+
 ## 0.1.0.0
 
 Initial release
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -9,4 +9,4 @@
 [lz4](https://hackage.haskell.org/package/lz4) and
 [lz4-conduit](https://hackage.haskell.org/package/lz4-conduit).
 
-This mean you can work with `.lz4` files.
+This means you can work with `.lz4` files.
diff --git a/lz4-hs.cabal b/lz4-hs.cabal
--- a/lz4-hs.cabal
+++ b/lz4-hs.cabal
@@ -1,6 +1,6 @@
 cabal-version:   1.18
 name:            lz4-hs
-version:         0.1.0.0
+version:         0.1.1.0
 license:         BSD3
 license-file:    LICENSE
 copyright:       Copyright: (c) 2020 Vanessa McHale
@@ -36,7 +36,7 @@
 
     ghc-options:        -Wall
     build-depends:
-        base >=4.3 && <5,
+        base >=4.8 && <5,
         bytestring -any
 
     if impl(ghc >=8.0)
diff --git a/src/Codec/Lz4.hs b/src/Codec/Lz4.hs
--- a/src/Codec/Lz4.hs
+++ b/src/Codec/Lz4.hs
@@ -4,9 +4,15 @@
 module Codec.Lz4 ( -- * Functions for working with blocks
                    compressBlock
                  , decompressBlockSz
+                 , lZ4MaxInputSize
+                 , compressBlockHC
+                 , lZ4HCClevelMax
                  -- * Functions for working with frames
                  , compress
                  , decompress
+                 -- * Version info
+                 , lZ4VersionNumber
+                 , lZ4VersionString
                  ) where
 
 import           Codec.Lz4.Foreign
@@ -18,6 +24,8 @@
 import qualified Data.ByteString.Internal     as BS
 import qualified Data.ByteString.Lazy         as BSL
 import qualified Data.ByteString.Unsafe       as BS
+import           Foreign.C.String             (CString)
+import           Foreign.C.Types              (CInt)
 import           Foreign.ForeignPtr           (ForeignPtr, castForeignPtr,
                                                mallocForeignPtrBytes,
                                                newForeignPtr, withForeignPtr)
@@ -117,16 +125,28 @@
                     check res
                     BS.packCStringLen (d, fromIntegral res)
 
+{-# NOINLINE compressBlock #-}
 compressBlock :: BS.ByteString -> BS.ByteString
-compressBlock bs = unsafePerformIO $
+compressBlock = unsafePerformIO . compressBlockGeneric lZ4CompressDefault
+
+{-# NOINLINE compressBlockHC #-}
+-- | @since 0.1.1.0
+compressBlockHC :: Int -- ^ Compression level (must be less than 'lZ4HCClevelMax')
+                -> BS.ByteString
+                -> BS.ByteString
+compressBlockHC lvl = unsafePerformIO . compressBlockGeneric (\src dst ssz dsz -> lZ4CompressHC src dst ssz dsz (fromIntegral lvl))
+
+compressBlockGeneric :: (CString -> CString -> CInt -> CInt -> IO CInt) -> BS.ByteString -> IO BS.ByteString
+compressBlockGeneric cfun bs =
     BS.unsafeUseAsCStringLen bs $ \(buf, sz) -> do
         let resSz = lZ4CompressBound (fromIntegral sz)
         dst <- mallocForeignPtrBytes (fromIntegral resSz)
         withForeignPtr dst $ \d -> do
-            bWritten <- lZ4CompressDefault buf d (fromIntegral sz) resSz
+            bWritten <- cfun buf d (fromIntegral sz) resSz
             when (bWritten == 0) $ error "Compression error"
             BS.packCStringLen (d, fromIntegral bWritten)
 
+{-# NOINLINE decompressBlockSz #-}
 -- | Decompress a block. The size of the uncompressed data must be known.
 decompressBlockSz :: BS.ByteString
                   -> Int -- ^ Decompressed size
diff --git a/src/Codec/Lz4/Foreign.chs b/src/Codec/Lz4/Foreign.chs
--- a/src/Codec/Lz4/Foreign.chs
+++ b/src/Codec/Lz4/Foreign.chs
@@ -18,6 +18,9 @@
                          , lZ4FCreateDecompressionContext
                          , lZ4FFreeDecompressionContext
                          , lZ4FDecompress
+                         , lZ4MaxInputSize
+                         , lZ4CompressHC
+                         , lZ4HCClevelMax
                          -- * Types
                          , LZ4FErrorCode
                          , LzCtx
@@ -34,6 +37,7 @@
 
 #include <lz4.h>
 #include <lz4frame.h>
+#include <lz4hc.h>
 
 {# fun pure LZ4_versionNumber as ^ {} -> `CInt' #}
 {# fun pure LZ4_versionString as ^ {} -> `String' #}
@@ -104,3 +108,12 @@
     , `LzDecompressOptionsPtr'
     } -> `CULong' 
   #}
+
+lZ4MaxInputSize :: Integral a => a
+lZ4MaxInputSize = {# const LZ4_MAX_INPUT_SIZE #}
+
+{# fun LZ4_compress_HC as ^ 
+    { `CString', `CString', `CInt', `CInt', `CInt' } -> `CInt' #}
+
+lZ4HCClevelMax :: Integral a => a
+lZ4HCClevelMax = {# const LZ4HC_CLEVEL_MAX #}
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -20,7 +20,7 @@
     actual @?= contents
 
 main :: IO ()
-main = do
+main =
 
     defaultMain $
         testGroup "lz4" [testBlocks, testFrames]
@@ -31,4 +31,5 @@
             , testRoundtripBlocks "LICENSE"
             ]
         testFrames = testGroup "Frame compression"
-            [ testRoundtripFrames "cbits/lz4.c" ]
+            [ testRoundtripFrames "cbits/lz4.c"
+            ]
