diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
 # Changelog for the [`clash-lib`](http://hackage.haskell.org/package/clash-lib) package
 
+## 0.6.4 *November 12th 2015*
+* Fixes bugs:
+  * Reversing alternatives is not meaning preserving for literal patterns [#91](https://github.com/clash-lang/clash-compiler/issues/91)
+  * DEC: root of the case-tree must contain at least 2 alternatives [#92](https://github.com/clash-lang/clash-compiler/issues/92)
+
 ## 0.6.3 *October 24th 2015*
 * New features:
   * Improve DEC transformation: consider alternatives before the subject when checking for disjoint expressions.
diff --git a/clash-lib.cabal b/clash-lib.cabal
--- a/clash-lib.cabal
+++ b/clash-lib.cabal
@@ -1,5 +1,5 @@
 Name:                 clash-lib
-Version:              0.6.3
+Version:              0.6.4
 Synopsis:             CAES Language for Synchronous Hardware - As a Library
 Description:
   CλaSH (pronounced ‘clash’) is a functional hardware description language that
diff --git a/src/CLaSH/Netlist.hs b/src/CLaSH/Netlist.hs
--- a/src/CLaSH/Netlist.hs
+++ b/src/CLaSH/Netlist.hs
@@ -204,16 +204,16 @@
   return (decls ++ [Assignment dstId extractExpr])
 
 mkDeclarations bndr (Case scrut altTy alts) = do
-  alts'                  <- mapM unbind alts
+  alts'                  <- reorderPats <$> mapM unbind alts
   tcm                    <- Lens.use tcCache
   scrutTy                <- termType tcm scrut
   scrutHTy               <- unsafeCoreTypeToHWTypeM $(curLoc) scrutTy
   altHTy                 <- unsafeCoreTypeToHWTypeM $(curLoc) altTy
-  (scrutExpr,scrutDecls) <- first (mkScrutExpr scrutHTy (fst (last alts'))) <$> mkExpr True scrutTy scrut
+  (scrutExpr,scrutDecls) <- first (mkScrutExpr scrutHTy (fst (head alts'))) <$> mkExpr True scrutTy scrut
   (exprs,altsDecls)      <- (second concat . unzip) <$> mapM (mkCondExpr scrutHTy) alts'
 
   let dstId = mkBasicId . Text.pack . name2String $ varName bndr
-  return $! scrutDecls ++ altsDecls ++ [CondAssignment dstId altHTy scrutExpr scrutHTy (reverse exprs)]
+  return $! scrutDecls ++ altsDecls ++ [CondAssignment dstId altHTy scrutExpr scrutHTy exprs]
   where
     mkCondExpr :: HWType -> (Pat,Term) -> NetlistMonad ((Maybe HW.Literal,Expr),[Declaration])
     mkCondExpr scrutHTy (pat,alt) = do
@@ -231,6 +231,12 @@
                                   Identifier scrutId _ -> Identifier scrutId modifier
                                   _ -> error $ $(curLoc) ++ "Not in normal form: Not a variable reference or primitive as subject of a case-statement"
       _ -> scrutE
+
+    -- GHC puts default patterns in the first position, we want them in the
+    -- last position.
+    reorderPats :: [(Pat,Term)] -> [(Pat,Term)]
+    reorderPats ((DefaultPat,e):alts') = alts' ++ [(DefaultPat,e)]
+    reorderPats alts'                  = alts'
 
 mkDeclarations bndr app =
   let (appF,(args,tyArgs)) = second partitionEithers $ collectArgs app
diff --git a/src/CLaSH/Netlist/Types.hs b/src/CLaSH/Netlist/Types.hs
--- a/src/CLaSH/Netlist/Types.hs
+++ b/src/CLaSH/Netlist/Types.hs
@@ -146,7 +146,7 @@
   | BoolLit   !Bool      -- ^ Boolean literal
   | VecLit    [Literal] -- ^ Vector literal
   | StringLit !String    -- ^ String literal
-  deriving Show
+  deriving (Eq,Show)
 
 -- | Bit literal
 data Bit
@@ -154,7 +154,7 @@
   | L -- ^ Low
   | U -- ^ Undefined
   | Z -- ^ High-impedance
-  deriving Show
+  deriving (Eq,Show)
 
 -- | Context used to fill in the holes of a BlackBox template
 data BlackBoxContext
diff --git a/src/CLaSH/Normalize/DEC.hs b/src/CLaSH/Normalize/DEC.hs
--- a/src/CLaSH/Normalize/DEC.hs
+++ b/src/CLaSH/Normalize/DEC.hs
@@ -82,12 +82,14 @@
 -- case-expression.
 isDisjoint :: CaseTree ([Either Term Type])
            -> Bool
-isDisjoint (Leaf _)             = False
-isDisjoint (LB _ ct)            = isDisjoint ct
-isDisjoint (Branch _ [])        = False
-isDisjoint (Branch _ [(_,x)])   = isDisjoint x
-isDisjoint b@(Branch _ (_:_:_)) = allEqual (map Either.rights
-                                                (Foldable.toList b))
+isDisjoint (Branch _ [_]) = False
+isDisjoint ct = go ct
+  where
+    go (Leaf _)             = False
+    go (LB _ ct')           = go ct'
+    go (Branch _ [])        = False
+    go (Branch _ [(_,x)])   = go x
+    go b@(Branch _ (_:_:_)) = allEqual (map Either.rights (Foldable.toList b))
 
 -- Remove empty branches from a 'CaseTree'
 removeEmpty :: Eq a => CaseTree [a] -> CaseTree [a]
diff --git a/src/CLaSH/Normalize/Transformations.hs b/src/CLaSH/Normalize/Transformations.hs
--- a/src/CLaSH/Normalize/Transformations.hs
+++ b/src/CLaSH/Normalize/Transformations.hs
@@ -982,7 +982,7 @@
 --       C -> h x
 -- @
 disjointExpressionConsolidation :: NormRewrite
-disjointExpressionConsolidation ctx e@(Case _scrut _ty _alts) = do
+disjointExpressionConsolidation ctx e@(Case _scrut _ty _alts@(_:_:_)) = do
     let eFreeIds = Lens.setOf termFreeIds e
     (_,collected) <- collectGlobals eFreeIds [] [] e
     let disJoint = filter (isDisjoint . snd) collected
