diff --git a/language-vhdl.cabal b/language-vhdl.cabal
--- a/language-vhdl.cabal
+++ b/language-vhdl.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                language-vhdl
-version:             0.1.3
+version:             0.1.4
 synopsis:            VHDL AST and pretty printer in Haskell.
 -- description:         
 license:             BSD3
diff --git a/src/Language/VHDL/Pretty.hs b/src/Language/VHDL/Pretty.hs
--- a/src/Language/VHDL/Pretty.hs
+++ b/src/Language/VHDL/Pretty.hs
@@ -4,7 +4,8 @@
 module Language.VHDL.Pretty (Pretty (..)) where
 
 import Language.VHDL.Syntax
-import Text.PrettyPrint     hiding (Mode)
+import Text.PrettyPrint hiding (Mode)
+import Prelude hiding ((<>))
 
 --------------------------------------------------------------------------------
 -- * Pretty printing class
@@ -121,7 +122,10 @@
     <+> text "OF" <+> pp s
     <+> text "IS" <+> pp e <+> semi
 
-instance Pretty BaseSpecifier where pp = error "missing: BaseSpecifier" -- todo
+instance Pretty BaseSpecifier where
+  pp BSOctal = char 'o'
+  pp BSBinary = char 'b'
+  pp BSHexadecimal = char 'x'
 
 instance Pretty BaseUnitDeclaration where pp = error "missing: BaseUnitDeclaration" -- todo
 
@@ -138,9 +142,11 @@
   pp (BindingIndication e g p) =
     vcat [condR (text "USE") e, cond id g, cond id p]
 
-instance Pretty BitStringLiteral where pp = error "missing: BitStringLiteral" -- todo
+instance Pretty BitStringLiteral where
+  pp (BitStringLiteral bs bv) = pp bs <> doubleQuotes (pp bv)
 
-instance Pretty BitValue where pp = error "missing: BitValue" -- todo
+instance Pretty BitValue where
+  pp (BitValue eds) = text eds
 
 instance Pretty BlockConfiguration where
   pp (BlockConfiguration s u c) =
@@ -161,8 +167,8 @@
   pp (BDIAlias a)       = pp a
   pp (BDIComp c)        = pp c
   pp (BDIAttrDecl a)    = pp a
-  pp (BDIAttrSepc a)    = pp a
-  pp (BDIConfigSepc c)  = pp c
+  pp (BDIAttrSpec a)    = pp a
+  pp (BDIConfigSpec c)  = pp c
   pp (BDIDisconSpec d)  = pp d
   pp (BDIUseClause u)   = pp u
   pp (BDIGroupTemp g)   = pp g
@@ -464,7 +470,7 @@
   pp (EChar c) = pp c
 
 instance Pretty EnumerationTypeDefinition where
-  pp (EnumerationTypeDefinition es) = commaSep $ fmap pp es
+  pp (EnumerationTypeDefinition es) = parens . commaSep . fmap pp $ es
 
 instance Pretty ExitStatement where
   pp (ExitStatement l b c) =
@@ -482,8 +488,6 @@
   pp (ENor r rs)  = pp r <+> condL (text "NOR")  rs
   pp (EXnor rs)   = textSep "XNOR" $ map pp rs
 
-instance Pretty ExtendedDigit where pp = error "missing: ExtendedDigit" -- todo
-
 instance Pretty ExtendedIdentifier where pp = error "missing: ExtendedIdentifier" -- todo
 
 instance Pretty Factor where
@@ -537,15 +541,15 @@
   pp (GenerateStatement l g d s) =
     pp l <+> colon `hangs` vcat
       [ pp g <+> text "GENERATE"
-      , cond indent d
+      , maybe empty (indent . vcat . fmap pp) d
       , cond (const $ text "BEGIN") d
       , indent $ vcat $ fmap pp s
       , text "END GENERATE" <+> pp l <+> semi
       ]
 
 instance Pretty GenerationScheme where
-  pp (GSFor p) = pp p
-  pp (GSIf c)  = pp c
+  pp (GSFor p) = text "FOR" <+> pp p
+  pp (GSIf c)  = text "IF" <+> pp c
 
 instance Pretty GenericClause where
   pp (GenericClause ls) = text "GENERIC" <+> parens (pp ls) <+> semi
@@ -1055,6 +1059,9 @@
         Nothing    -> empty
         Just True  -> text "PURE"
         Just False -> text "IMPURE"
+
+instance Pretty SubprogramDeclaration where
+  pp (SubprogramDeclaration s) = pp s <+> semi
 
 --instance Pretty SubprogramStatementPart where pp = undefined
 
diff --git a/src/Language/VHDL/Syntax.hs b/src/Language/VHDL/Syntax.hs
--- a/src/Language/VHDL/Syntax.hs
+++ b/src/Language/VHDL/Syntax.hs
@@ -192,8 +192,8 @@
   | BDIAlias        AliasDeclaration
   | BDIComp         ComponentDeclaration
   | BDIAttrDecl     AttributeDeclaration
-  | BDIAttrSepc     AttributeSpecification
-  | BDIConfigSepc   ConfigurationSpecification
+  | BDIAttrSpec     AttributeSpecification
+  | BDIConfigSpec   ConfigurationSpecification
   | BDIDisconSpec   DisconnectionSpecification
   | BDIUseClause    UseClause
   | BDIGroupTemp    GroupTemplateDeclaration
@@ -333,7 +333,8 @@
     operator_symbol ::= string_literal
 -}
 
-type SubprogramDeclaration   = SubprogramSpecification
+newtype SubprogramDeclaration = SubprogramDeclaration SubprogramSpecification
+  deriving (Eq, Show)
 
 data SubprogramSpecification =
     SubprogramProcedure {
@@ -530,7 +531,7 @@
 -- * 2.6 Package bodies
 {-
     package_body ::=
-      PACKAGE  package_simple_name IS
+      PACKAGE BODY package_simple_name IS
         package_body_declarative_part
       END [ PACKAGE BODY ] [ package_simple_name ] ;
 
@@ -2573,7 +2574,7 @@
 data GenerateStatement = GenerateStatement {
     gens_label                  :: Label
   , gens_generation_scheme      :: GenerationScheme
-  , gens_block_declarative_item :: Maybe (BlockDeclarativeItem)
+  , gens_block_declarative_item :: Maybe [BlockDeclarativeItem]
   , gens_concurrent_statement   :: [ConcurrentStatement]
   }
   deriving (Eq, Show)
@@ -2791,7 +2792,35 @@
 
 type BasedInteger = Integer
 
+type ExtendedDigit = Char
+
 --------------------------------------------------------------------------------
+-- *** 13.7 Bit string literals
+
+{-
+    bit_string_literal ::= base_specifier "[ bit_value ]"
+
+    bit_value ::= extended_digit { [ underline ] extended_digit }
+
+    base_specifier ::= B | O | X
+-}
+
+data BitStringLiteral = BitStringLiteral {
+    bsl_base_specifier :: BaseSpecifier
+  , bsl_bit_value :: BitValue
+  }
+  deriving (Eq, Show)
+
+data BitValue = BitValue [ExtendedDigit]
+  deriving (Eq, Show)
+
+data BaseSpecifier =
+    BSOctal
+  | BSBinary
+  | BSHexadecimal
+  deriving (Eq, Show)
+
+--------------------------------------------------------------------------------
 --
 --                                  - ToDo -
 --
@@ -2808,9 +2837,6 @@
 
 --------------------------------------------------------------------------------
 
-data BaseSpecifier = BaseSpecifier
-  deriving (Eq, Show)
-
 data BaseUnitDeclaration = BaseUnitDeclaration
   deriving (Eq, Show)
 
@@ -2821,15 +2847,6 @@
   deriving (Eq, Show)
 
 data BasicIdentifier = BasicIdentifier
-  deriving (Eq, Show)
-
-data BitStringLiteral = BitStringLiteral
-  deriving (Eq, Show)
-
-data BitValue = BitValue
-  deriving (Eq, Show)
-
-data ExtendedDigit = ExtendedDigit
   deriving (Eq, Show)
 
 data ExtendedIdentifier = ExtendedIdentifier
