diff --git a/src/Commands.hs b/src/Commands.hs
--- a/src/Commands.hs
+++ b/src/Commands.hs
@@ -104,6 +104,7 @@
     printf "Magic XOR value: 0x%02X\n" ttAudioXor
     printf "Comment: %s\n" (BC.unpack ttComment)
     printf "Date: %s\n" (BC.unpack ttDate)
+    printf "Language: %s\n" (BC.unpack ttLang)
     printf "Number of registers: %d\n" (length ttInitialRegs)
     printf "Initial registers: %s\n" (show ttInitialRegs)
     printf "Initial sounds: %s\n" (ppPlayListList t ttWelcome)
diff --git a/src/GMEParser.hs b/src/GMEParser.hs
--- a/src/GMEParser.hs
+++ b/src/GMEParser.hs
@@ -108,6 +108,9 @@
 getBS :: Word32 -> SGet B.ByteString
 getBS n   = liftGet $ G.getLazyByteString (fromIntegral n)
 
+getBSNul :: SGet B.ByteString
+getBSNul = liftGet G.getLazyByteStringNul
+
 bytesRead = SGet get
 
 getArray :: Integral a => SGet a -> SGet b -> SGet [b]
@@ -407,11 +410,10 @@
     ttProductId <- getWord32
     ttInitialRegs <- indirection "Initial registers" getInitialRegs
     _ <- getWord32 -- raw Xor
-    (ttComment, ttDate) <- do
-        l <- getWord8
-        c <- getBS (fromIntegral l)
-        d <- getBS 8
-        return (c,d)
+    commentLength <- getWord8
+    ttComment <- getBS (fromIntegral commentLength)
+    ttDate <- getBS 8
+    ttLang <- getBSNul
 
     jumpTo 0x0071
     ttWelcome <- indirection "initial play lists" $ getPlayListList
diff --git a/src/GMEWriter.hs b/src/GMEWriter.hs
--- a/src/GMEWriter.hs
+++ b/src/GMEWriter.hs
@@ -103,6 +103,8 @@
     putWord8 $ fromIntegral (B.length ttComment)
     putBS ttComment
     putBS ttDate
+    putBS ttLang
+    putWord8 0
     seek 0x0071 -- Just to be safe
     putWord32 ipllo
     seek 0x0200 -- Just to be safe
diff --git a/src/TipToiYaml.hs b/src/TipToiYaml.hs
--- a/src/TipToiYaml.hs
+++ b/src/TipToiYaml.hs
@@ -57,16 +57,17 @@
 import TipToiYamlAux
 
 data TipToiYAML = TipToiYAML
-    { ttyScripts :: M.Map String [String]
-    , ttyComment :: Maybe String
-    , ttyMedia_Path :: Maybe String
-    , ttyInit :: Maybe String
-    , ttyWelcome :: Maybe String
-    , ttyProduct_Id :: Word32
+    { ttyScripts     :: M.Map String [String]
+    , ttyComment     :: Maybe String
+    , ttyGME_Lang    :: Maybe String
+    , ttyMedia_Path  :: Maybe String
+    , ttyInit        :: Maybe String
+    , ttyWelcome     :: Maybe String
+    , ttyProduct_Id  :: Word32
     , ttyScriptCodes :: Maybe CodeMap
-    , ttySpeak :: Maybe SpeakSpecs
-    , ttyLanguage :: Maybe Language
-    , ttyGames :: Maybe [GameYaml]
+    , ttySpeak       :: Maybe SpeakSpecs
+    , ttyLanguage    :: Maybe Language
+    , ttyGames       :: Maybe [GameYaml]
     }
     deriving Generic
 
@@ -266,7 +267,10 @@
 $(deriveJSON gameYamlOptions ''GameYaml)
 $(deriveJSON gameYamlOptions ''SubGameYaml)
 
-tipToiYamlOptions = defaultOptions { fieldLabelModifier = map fix . map toLower . drop 3 }
+tipToiYamlOptions = defaultOptions
+    { fieldLabelModifier = map fix . map toLower . drop 3
+    , omitNothingFields  = True
+    }
        where fix '_' = '-'
              fix c   = c
 
@@ -293,6 +297,7 @@
                                 | (r,n) <- zip [0..] ttInitialRegs , n /= 0]
     , ttyWelcome = Just $ playListList2Yaml ttWelcome
     , ttyComment = Just $ BC.unpack ttComment
+    , ttyGME_Lang = if BC.null ttLang then Nothing else Just (BC.unpack ttLang)
     , ttyScripts = M.fromList
         [ (show oid, map exportLine ls) | (oid, Just ls) <- ttScripts]
     , ttyMedia_Path = Just path
@@ -835,6 +840,7 @@
         , ttRawXor = knownRawXOR
         , ttComment = comment
         , ttDate = BC.pack date
+        , ttLang = maybe BC.empty BC.pack ttyGME_Lang
         , ttWelcome = [welcome]
         , ttInitialRegs = [fromMaybe 0 (M.lookup r initRegs) | r <- [0..maxReg]]
         , ttScripts = scripts'
@@ -1078,6 +1084,7 @@
         , ttyScriptCodes = Nothing
         , ttySpeak = Nothing
         , ttyComment = Nothing
+        , ttyGME_Lang = Nothing
         , ttyWelcome = Just $ "blob"
         , ttyScripts = M.fromList [
             (show oid, [line])
diff --git a/src/Types.hs b/src/Types.hs
--- a/src/Types.hs
+++ b/src/Types.hs
@@ -65,11 +65,13 @@
 
 type ProductID = Word32
 
+
 data TipToiFile = TipToiFile
     { ttProductId :: ProductID
     , ttRawXor :: Word32
     , ttComment :: B.ByteString
     , ttDate :: B.ByteString
+    , ttLang :: B.ByteString
     , ttInitialRegs :: [Word16]
     , ttWelcome :: [PlayList]
     , ttScripts :: [(Word16, Maybe [Line ResReg])]
diff --git a/tttool.cabal b/tttool.cabal
--- a/tttool.cabal
+++ b/tttool.cabal
@@ -1,5 +1,5 @@
 name:                tttool
-version:             1.6.1.4
+version:             1.7.0.1
 synopsis:            Working with files for the Tiptoi® pen
 description:         The Ravensburger Tiptoi® pen is programmed via special
                      files. Their file format has been reverse engineered; this
@@ -54,7 +54,7 @@
     base        >= 4.5 && < 4.10,
     binary      >= 0.5 && < 0.9,
     containers  == 0.4.*   ||  == 0.5.*,
-    directory   == 1.2.*,
+    directory   >= 1.2 && < 1.4,
     executable-path == 0.0.*,
     filepath    == 1.3.*   ||  == 1.4.*,
     template-haskell >= 2.7 && < 2.12,
@@ -67,7 +67,7 @@
     parsec      == 3.1.*,
     process     >= 1.1      &&   < 1.5,
     random      >= 1.0      &&   < 1.2,
-    vector      >= 0.10     &&   < 0.12,
+    vector      >= 0.10     &&   < 0.13,
     yaml        == 0.8.*,
     HPDF        >= 1.4.10   && < 1.5,
     split       == 0.2.*,
@@ -84,7 +84,7 @@
   if flag(old-locale)
     build-depends: time == 1.4.*, old-locale
   else
-    build-depends: time >= 1.5 && < 1.7
+    build-depends: time >= 1.5 && < 1.8
 
   if flag(bytestring_has_builder)
     build-depends:
