diff --git a/language-vhdl.cabal b/language-vhdl.cabal
--- a/language-vhdl.cabal
+++ b/language-vhdl.cabal
@@ -2,8 +2,8 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                language-vhdl
-version:             0.1.1.0
-synopsis:            VHDL AST and pretty printer in Haskell
+version:             0.1.2.0
+synopsis:            VHDL AST and pretty printer in Haskell.
 -- description:         
 license:             BSD3
 license-file:        LICENSE
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
@@ -18,6 +18,10 @@
   where
     pp = hsep . map pp
 
+instance Pretty a => Pretty (Maybe a)
+  where
+    pp = maybe empty pp
+
 --------------------------------------------------------------------------------
 -- ** Pretty printing instances
 
@@ -313,9 +317,9 @@
   pp (CRange r) = pp r
   pp (CIndex i) = pp i
 
-instance Pretty ContextClause where pp = error "missing: ContextClause" -- todo
-
-instance Pretty ContextItem where pp = error "missing: ContextItem" -- todo
+instance Pretty ContextItem where
+  pp (ContextLibrary l) = pp l
+  pp (ContextUse u)     = pp u
 
 instance Pretty DecimalLiteral where pp = error "missing: DecimalLiteral" -- todo
 
@@ -337,9 +341,8 @@
   pp (DMechTransport)  = text "TRANSPORT"
   pp (DMechInertial e) = condL (text "REJECT") e <+> text "INERTIAL"
 
-instance Pretty DesignFile where pp = error "missing: DesignFile" -- todo
-
-instance Pretty DesignUnit where pp = error "missing: DesignUnit" -- todo
+instance Pretty DesignUnit where
+  pp (DesignUnit primary secondary) = pp primary <+> pp secondary
 
 instance Pretty Designator where
   pp (DId i) = pp i
@@ -627,7 +630,8 @@
 
 instance Pretty LetterOrDigit where pp = error "missing: LetterOrDigit" -- todo
 
-instance Pretty LibraryClause where pp = error "missing: LibraryClause" -- todo
+instance Pretty LibraryClause where
+  pp (LibraryClause ns) = text "LIBRARY" <+> pp ns <+> semi
 
 instance Pretty LibraryUnit where pp = error "missing: LibraryUnit" -- todo
 
@@ -638,9 +642,8 @@
   pp (LitBitString b) = pp b
   pp (LitNull)        = text "NULL"
 
-instance Pretty LogicalName where pp = error "missing: LogicalName" -- todo
-
-instance Pretty LogicalNameList where pp = error "missing: LogicalNameList" -- todo
+instance Pretty LogicalNameList where
+  pp (LogicalNameList ns) = commaSep $ fmap pp ns
 
 instance Pretty LogicalOperator where
   pp (And)  = text "AND"
@@ -793,7 +796,10 @@
   pp (PrimAlloc a) = pp a
   pp (PrimExp e)   = parens (pp e)
 
-instance Pretty PrimaryUnit where pp = error "missing: PrimaryUnit" -- todo
+instance Pretty PrimaryUnit where
+  pp (PrimaryEntity e)  = pp e
+  pp (PrimaryConfig c)  = pp c
+  pp (PrimaryPackage p) = pp p
 
 instance Pretty ProcedureCall where
   pp (ProcedureCall n ap) = pp n <+> cond parens ap
@@ -873,7 +879,9 @@
   pp (ScalarFloat f) = pp f
   pp (ScalarPhys p)  = pp p
 
-instance Pretty SecondaryUnit where pp = error "missing: SecondaryUnit" -- todo
+instance Pretty SecondaryUnit where
+  pp (SecondaryArchitecture a) = pp a
+  pp (SecondaryPackage p)      = pp p
 
 instance Pretty SecondaryUnitDeclaration where
   pp (SecondaryUnitDeclaration i p) = pp i <+> equals <+> pp p
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
@@ -2584,31 +2584,167 @@
   deriving (Eq, Show)
 
 type Label = Identifier
+--------------------------------------------------------------------------------
+--
+--                                  -- 10 --
+--
+--                            Scope and visibility
+--
+--------------------------------------------------------------------------------
 
 --------------------------------------------------------------------------------
--- ?
+-- ** 10.1 Declarative region
 
-data UseClause        = UseClause [SelectedName]
+--------------------------------------------------------------------------------
+-- ** 10.2 Scope of declarations
+
+--------------------------------------------------------------------------------
+-- ** 10.3 Visibility
+
+--------------------------------------------------------------------------------
+-- ** 10.4 Use clauses
+
+{-
+    use_clause ::=
+      USE selected_name { , selected_name } ;
+-}
+
+data UseClause = UseClause [SelectedName]
   deriving (Eq, Show)
 
-data Identifier       = Ident String
+--------------------------------------------------------------------------------
+-- ** 10.5 The context of overload resolution
+
+--------------------------------------------------------------------------------
+--
+--                                  -- 11 --
+--
+--                        Design units and their analysis
+--
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- ** 11.1 Design units
+
+{-
+    design_file ::= design_unit { design_unit }
+
+    design_unit ::= context_clause library_unit
+
+    library_unit ::=
+        primary_unit
+      | secondary_unit
+
+    primary_unit ::=
+        entity_declaration
+      | configuration_declaration
+      | package_declaration
+
+    secondary_unit ::=
+        architecture_body
+      | package_body
+-}
+
+
+type DesignFile = [DesignUnit]
+
+data DesignUnit = DesignUnit {
+    design_primary_unit   :: PrimaryUnit
+  , design_secondary_unit :: SecondaryUnit
+  }
   deriving (Eq, Show)
 
-data CharacterLiteral = CLit Char
+data PrimaryUnit =
+    PrimaryEntity  EntityDeclaration
+  | PrimaryConfig  ConfigurationDeclaration
+  | PrimaryPackage PackageDeclaration
   deriving (Eq, Show)
 
-data StringLiteral    = SLit String
+data SecondaryUnit =
+    SecondaryArchitecture ArchitectureBody
+  | SecondaryPackage      PackageBody
   deriving (Eq, Show)
 
 --------------------------------------------------------------------------------
+-- ** 11.2 Design libraries
+
+{-
+    library_clause ::= LIBRARY logical_name_list ;
+
+    logical_name_list ::= logical_name { , logical_name }
+
+    logical_name ::= identifier
+-}
+
+data LibraryClause = LibraryClause LogicalNameList
+  deriving (Eq, Show)
+
+data LogicalNameList = LogicalNameList [LogicalName]
+  deriving (Eq, Show)
+
+type LogicalName = Identifier
+
+--------------------------------------------------------------------------------
+-- ** 11.3 Context clauses
+
+{-
+    context_clause ::= { context_item }
+
+    context_item ::=
+        library_clause
+      | use_clause
+-}
+
+type ContextClause = Maybe (ContextItem)
+
+data ContextItem =
+    ContextLibrary LibraryClause
+  | ContextUse     UseClause
+  deriving (Eq, Show)
+
+--------------------------------------------------------------------------------
+-- ** 11.3 Order of analysis
+
+--------------------------------------------------------------------------------
 --
+--                                  -- 12 --
+--
+--                           Elaboration and execution
+--
+--------------------------------------------------------------------------------
+
+-- ...
+
+--------------------------------------------------------------------------------
+--
+--                                  -- 13 --
+--
+--                              Lexical elements
+--
+--------------------------------------------------------------------------------
+
+-- ...
+
+--------------------------------------------------------------------------------
+--
 --                                  - ToDo -
 --
 --------------------------------------------------------------------------------
 
+data Identifier       = Ident String
+  deriving (Eq, Show)
+
+data CharacterLiteral = CLit Char
+  deriving (Eq, Show)
+
+data StringLiteral    = SLit String
+  deriving (Eq, Show)
+
 data AbstractLiteral  = AbstractLiteral
   deriving (Eq, Show)
 
+--------------------------------------------------------------------------------
+
 data Base = Base
   deriving (Eq, Show)
 
@@ -2639,21 +2775,9 @@
 data BitValue = BitValue
   deriving (Eq, Show)
 
-data ContextClause = ContextClause
-  deriving (Eq, Show)
-
-data ContextItem = ContextItem
-  deriving (Eq, Show)
-
 data DecimalLiteral = DecimalLiteral
   deriving (Eq, Show)
 
-data DesignFile = DesignFile
-  deriving (Eq, Show)
-
-data DesignUnit = DesignUnit
-  deriving (Eq, Show)
-
 data Exponent = Exponent
   deriving (Eq, Show)
 
@@ -2672,22 +2796,7 @@
 data LetterOrDigit = LetterOrDigit
   deriving (Eq, Show)
 
-data LibraryClause = LibraryClause
-  deriving (Eq, Show)
-
 data LibraryUnit = LibraryUnit
-  deriving (Eq, Show)
-
-data LogicalName = LogicalName
-  deriving (Eq, Show)
-
-data LogicalNameList = LogicalNameList
-  deriving (Eq, Show)
-
-data PrimaryUnit = PrimaryUnit
-  deriving (Eq, Show)
-
-data SecondaryUnit = SecondaryUnit
   deriving (Eq, Show)
 
 --------------------------------------------------------------------------------
