diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,11 @@
 All notable changes to this project will be documented in this file.
 This project adheres to [Package Versioning Policy](https://wiki.haskell.org/Package_versioning_policy).
 
+## [2.3.0.2] - 2018-01-28
+
+### Fixed
+- Uploading files with GridFS
+
 ## [2.3.0.1] - 2017-12-28
 
 ### Removed
diff --git a/Database/MongoDB/GridFS.hs b/Database/MongoDB/GridFS.hs
--- a/Database/MongoDB/GridFS.hs
+++ b/Database/MongoDB/GridFS.hs
@@ -3,7 +3,7 @@
 -- | MongoDB GridFS implementation
 {-# LANGUAGE OverloadedStrings, RecordWildCards, NamedFieldPuns, TupleSections, FlexibleContexts, FlexibleInstances, UndecidableInstances, MultiParamTypeClasses, GeneralizedNewtypeDeriving, StandaloneDeriving, TypeSynonymInstances, TypeFamilies, CPP, RankNTypes #-}
 
-module Database.MongoDB.GridFS 
+module Database.MongoDB.GridFS
   ( Bucket
   , files, chunks
   , File
@@ -24,11 +24,11 @@
   where
 
 import Control.Applicative((<$>))
-import Control.Concurrent(forkIO)
+
 import Control.Monad(when)
 import Control.Monad.IO.Class
 import Control.Monad.Trans(MonadTrans, lift)
-import Control.Monad.Trans.Resource(MonadResource(..))
+
 import Data.Conduit
 import Data.Digest.Pure.MD5
 import Data.Int
@@ -40,13 +40,17 @@
 import qualified Data.Bson as B
 import qualified Data.ByteString as S
 import qualified Data.ByteString.Lazy as L
-import qualified Data.Conduit.Binary as BI
-import qualified Data.Conduit.List as CL
 
+
 defaultChunkSize :: Int64
 -- ^ The default chunk size is 256 kB
 defaultChunkSize = 256 * 1024
 
+-- magic constant for md5Finalize
+md5BlockSizeInBytes :: Int
+md5BlockSizeInBytes = 64
+
+
 data Bucket = Bucket {files :: Text, chunks :: Text}
 -- ^ Files are stored in "buckets". You open a bucket with openDefaultBucket or openBucket
 
@@ -125,12 +129,12 @@
   , fwAcc :: L.ByteString
   , fwMd5Context :: MD5Context
   , fwMd5acc :: L.ByteString
-  } 
+  }
 
 -- Finalize file, calculating md5 digest, saving the last chunk, and creating the file in the bucket
 finalizeFile :: (Monad m, MonadIO m) => Text -> FileWriter -> Action m File
 finalizeFile filename (FileWriter chunkSize bucket files_id i size acc md5context md5acc) = do
-  let md5digest = md5Finalize md5context (L.toStrict md5acc)
+  let md5digest = finalizeMD5 md5context (L.toStrict md5acc)
   when (L.length acc > 0) $ putChunk bucket files_id i acc
   timestamp <- liftIO $ getCurrentTime
   let doc = [ "_id" =: files_id
@@ -142,6 +146,16 @@
             ]
   insert_ (files bucket) doc
   return $ File bucket doc
+
+-- finalize the remainder and return the MD5Digest.
+finalizeMD5 :: MD5Context -> S.ByteString -> MD5Digest
+finalizeMD5 ctx rest =
+  md5Finalize ctx2 (S.drop lu rest) -- can only handle max md5BlockSizeInBytes length
+  where
+    l = S.length rest
+    r = l `mod` md5BlockSizeInBytes
+    lu = l - r
+    ctx2 = md5Update ctx (S.take lu rest)
 
 -- Write as many chunks as can be written from the file writer
 writeChunks :: (Monad m, MonadIO m) => FileWriter -> L.ByteString -> Action m FileWriter
diff --git a/mongoDB.cabal b/mongoDB.cabal
--- a/mongoDB.cabal
+++ b/mongoDB.cabal
@@ -1,5 +1,5 @@
 Name:           mongoDB
-Version:        2.3.0.1
+Version:        2.3.0.2
 Synopsis:       Driver (client) for MongoDB, a free, scalable, fast, document
                 DBMS
 Description:    This package lets you connect to MongoDB servers and
