diff --git a/bioinformatics-toolkit.cabal b/bioinformatics-toolkit.cabal
--- a/bioinformatics-toolkit.cabal
+++ b/bioinformatics-toolkit.cabal
@@ -1,5 +1,5 @@
 name:                bioinformatics-toolkit
-version:             0.9.2
+version:             0.9.3
 synopsis:            A collection of bioinformatics tools
 description:         A collection of bioinformatics tools
 license:             MIT
diff --git a/src/Bio/RealWorld/GENCODE.hs b/src/Bio/RealWorld/GENCODE.hs
--- a/src/Bio/RealWorld/GENCODE.hs
+++ b/src/Bio/RealWorld/GENCODE.hs
@@ -19,6 +19,10 @@
 
 import           Bio.Utils.Misc        (readInt)
 
+data TranscriptType = Coding
+                    | NonCoding
+                    deriving (Show, Eq, Ord)
+
 -- | GTF's position is 1-based, but here we convert it to 0-based indexing.
 data Gene = Gene
     { geneName        :: !(CI B.ByteString)
@@ -37,6 +41,7 @@
     , transStrand      :: !Bool
     , transExon        :: ![(Int, Int)]
     , transUTR         :: ![(Int, Int)]
+    , transType        :: TranscriptType
     } deriving (Show, Eq, Ord)
 
 -- | Read gene information from Gencode GTF file
@@ -72,17 +77,21 @@
         | featType == "utr" = _4 %~ ((tid, utr):) $ acc
         | otherwise = acc
       where
-        gene = Gene (mk $ getField "gene_name") gid chr lPos rPos (f7=="+") []
-        transcript = Transcript tid lPos rPos (f7=="+") [] []
+        gene = Gene (mk $ fromJust $ getField "gene_name") gid chr lPos rPos (f7=="+") []
+        transcript = Transcript tid lPos rPos (f7=="+") [] [] tTy
         exon = (lPos, rPos)
         utr = (lPos, rPos)
         [chr,_,f3,f4,f5,_,f7,_,f9] = B.split '\t' l
-        gid = getField "gene_id"
-        tid = getField "transcript_id"
+        gid = fromJust $ getField "gene_id"
+        tid = fromJust $ getField "transcript_id"
+        tTy = case getField "transcript_type" of
+            Just "protein_coding" -> Coding
+            Nothing -> Coding
+            _ -> NonCoding
         lPos = readInt f4 - 1
         rPos = readInt f5 - 1
         featType = B.map toLower f3
-        getField x = B.init $ B.drop 2 $ fromJust $ lookup x $
+        getField x = fmap (B.init . B.drop 2) $ lookup x $
             map (B.break isSpace . strip) $ B.split ';' f9
     strip = fst . B.spanEnd isSpace . B.dropWhile isSpace
     isSpace = (== ' ')
