diff --git a/Graphics/HsExif.hs b/Graphics/HsExif.hs
--- a/Graphics/HsExif.hs
+++ b/Graphics/HsExif.hs
@@ -146,9 +146,11 @@
 import Data.Binary.Get
 import Data.Binary.Put
 import qualified Data.ByteString.Lazy as B
+import qualified Data.ByteString as BS
 import Control.Monad (liftM, unless, replicateM)
 import Control.Applicative ( (<$>) )
 import qualified Data.ByteString.Char8 as Char8
+import Data.ByteString.Internal (w2c)
 import Data.Word
 import Data.Char (ord)
 import Data.Int (Int32, Int16, Int8)
@@ -300,6 +302,14 @@
 readNumberList decoder byteAlign components = ExifNumberList . fmap fromIntegral <$>
             count components (decoder byteAlign)
 
+decodeTextByteString :: BS.ByteString -> String
+decodeTextByteString bs = w2c <$> strippedWords
+    where
+      strippedWords = if not (null bsWords) && last bsWords == 0
+                      then init bsWords
+                      else bsWords
+      bsWords = BS.unpack bs
+
 unsignedByteValueHandler = ValueHandler
     {
         dataTypeId = 1,
@@ -313,7 +323,7 @@
         dataTypeId = 2,
         dataLength = 1,
         readSingle = \ba -> readMany asciiStringValueHandler ba 1,
-        readMany = \_ components -> ExifText . Char8.unpack <$> getByteString (components-1)
+        readMany = \_ components -> ExifText . decodeTextByteString <$> getByteString components
     }
 
 unsignedShortValueHandler = ValueHandler
diff --git a/hsexif.cabal b/hsexif.cabal
--- a/hsexif.cabal
+++ b/hsexif.cabal
@@ -1,5 +1,5 @@
 name:                hsexif
-version:             0.6.0.4
+version:             0.6.0.5
 synopsis:            EXIF handling library in pure Haskell
 description:         The hsexif library provides functions for working with EXIF data
                      contained in JPEG files. Currently it only supports reading the data.
diff --git a/tests/Tests.hs b/tests/Tests.hs
--- a/tests/Tests.hs
+++ b/tests/Tests.hs
@@ -24,11 +24,13 @@
     png <- B.readFile "tests/test.png"
     gps <- B.readFile "tests/gps.jpg"
     gps2 <- B.readFile "tests/gps2.jpg"
+    gps3 <- B.readFile "tests/gps3.jpg"
     partial <- B.readFile "tests/partial_exif.jpg"
     let parseExifM = hush . parseExif
     let exifData = parseExifM imageContents
     let gpsExifData = parseExifM gps
     let gps2ExifData = parseExifM gps2
+    let gps3ExifData = parseExifM gps3
     hspec $ do
         describe "not a JPG" $ testNotAJpeg png
         describe "no EXIF" $ testNoExif noExif
@@ -36,8 +38,10 @@
         describe "extract picture date" $ testDate exifData
         describe "image orientation" $ testOrientation exifData
         describe "read exif date time" testReadExifDateTime
-        describe "read GPS lat long" $ testReadGpsLatLong gpsExifData
+        describe "read GPS lat long" $ testReadGpsLatLong gpsExifData 50.2179 (-5.031)
         describe "read GPS lat long -- no data" $ testReadGpsLatLongNoData exifData
+        describe "read GPS lat long -- length 1 for rel" $
+            testReadGpsLatLong gps3ExifData 38.1785 (-7.2109)
         describe "test formatAsFloatingPoint" testFormatAsFloatingPoint
         describe "pretty printing" $ testPrettyPrint gpsExifData exifData gps2ExifData
         describe "flash fired" $ testFlashFired exifData
@@ -130,11 +134,13 @@
     assertEqual' (Just $ LocalTime (fromGregorian 2013 10 2) (TimeOfDay 20 33 33)) (readExifDateTime "2013:10:02 20:33:33")
     assertEqual' Nothing (readExifDateTime "2013:10:02 20:33:3")
 
-testReadGpsLatLong :: Maybe (Map ExifTag ExifValue) -> Spec
-testReadGpsLatLong exifData = it "reads gps latitude longitude" $ do
+testReadGpsLatLong :: Maybe (Map ExifTag ExifValue) -> Double -> Double -> Spec
+testReadGpsLatLong exifData xLat xLong = it "reads gps latitude longitude" $ do
     let (Just (lat,long)) = exifData >>= getGpsLatitudeLongitude
-    assertBool' $ 50.2179 < lat && 50.2180 > lat
-    assertBool' $ -5.031 > long && -5.032 < long
+    let equalEnough a b = assertBool (show a ++ " too different from " ++ show b ) $
+                          abs (a - b) < 0.001
+    equalEnough lat xLat
+    equalEnough long xLong
 
 testReadGpsLatLongNoData :: Maybe (Map ExifTag ExifValue) -> Spec
 testReadGpsLatLongNoData exifData = it "reads gps latitude longitude" $
@@ -212,6 +218,3 @@
 
 assertEqual' :: (Show a, Eq a) => a -> a -> Assertion
 assertEqual' = assertEqual "doesn't match"
-
-assertBool' :: Bool -> Assertion
-assertBool' = assertBool "doesn't match"
diff --git a/tests/gps3.jpg b/tests/gps3.jpg
new file mode 100644
Binary files /dev/null and b/tests/gps3.jpg differ
