diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,5 +1,5 @@
 Copyright (c) 2014 - 2015 Tim Baumann <tim@timbaumann.info>
-Copyright (c) 2014 - 2015 Alexander Thiemann <mail@athiemann.net>
+Copyright (c) 2014 - 2016 Alexander Thiemann <mail@athiemann.net>
 
 Permission is hereby granted, free of charge, to any person obtaining
 a copy of this software and associated documentation files (the
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -30,4 +30,4 @@
 ### License
 
 Released under the MIT license.
-(c) 2014 - 2015 Alexander Thiemann <mail@athiemann.net>, Tim Baumann <tim@timbaumann.info>
+(c) 2014 - 2016 Alexander Thiemann <mail@athiemann.net>, Tim Baumann <tim@timbaumann.info>
diff --git a/hvect.cabal b/hvect.cabal
--- a/hvect.cabal
+++ b/hvect.cabal
@@ -1,5 +1,5 @@
 name:                hvect
-version:             0.3.0.0
+version:             0.3.1.0
 synopsis:            Simple strict heterogeneous lists
 description:         Small, concise and simple implementation of heterogeneous lists with useful utility functions
 homepage:            https://github.com/agrafix/hvect
@@ -8,7 +8,7 @@
 license-file:        LICENSE
 author:              Alexander Thiemann <mail@athiemann.net>, Tim Baumann <tim@timbaumann.info>
 maintainer:          Alexander Thiemann <mail@athiemann.net>
-copyright:           (c) 2014 - 2015 Alexander Thiemann <mail@athiemann.net>, Tim Baumann <tim@timbaumann.info>
+copyright:           (c) 2014 - 2016 Alexander Thiemann <mail@athiemann.net>, Tim Baumann <tim@timbaumann.info>
 category:            Data
 build-type:          Simple
 cabal-version:       >=1.10
diff --git a/src/Data/HVect.hs b/src/Data/HVect.hs
--- a/src/Data/HVect.hs
+++ b/src/Data/HVect.hs
@@ -15,9 +15,10 @@
     HVect (..)
   , empty, null, head, tail
   , singleton
-  , length, HVectLen (..)
-  , findFirst, InList (..), ListContains (..), NotInList(..)
-  , (!!), HVectIdx (..)
+  , length, HVectLen
+  , findFirst, InList, ListContains, NotInList
+  , MaybeToList
+  , (!!), HVectIdx
   , HVectElim
   , Append, (<++>)
   , ReverseLoop, Reverse, reverse
@@ -31,7 +32,6 @@
   , (:<)
   ) where
 
-import Data.Proxy
 import Prelude hiding (reverse, uncurry, curry, head, null, (!!), length, tail)
 
 -- | Heterogeneous vector
@@ -98,6 +98,10 @@
 
 type ListContains n x ts = (SNatRep n, InList x ts ~ n, HVectIdx n ts ~ x)
 
+type family MaybeToList (a :: Maybe *) :: [*] where
+    MaybeToList ('Just r) = '[r]
+    MaybeToList 'Nothing = '[]
+
 -- | Find first element in 'HVect' of type x
 findFirst :: forall x ts n. (ListContains n x ts) => HVect ts -> x
 findFirst vect = idx !! vect
@@ -116,14 +120,14 @@
 null _ = False
 
 head :: HVect (t ': ts) -> t
-head (a :&: as) = a
+head (a :&: _) = a
 
 tail :: HVect (t ': ts) -> HVect ts
-tail (a :&: as) = as
+tail (_ :&: as) = as
 
 length :: HVect as -> SNat (HVectLen as)
 length HNil = SZero
-length (a :&: as) = SSucc (length as)
+length (_ :&: as) = SSucc (length as)
 
 sNatToInt :: SNat n -> Int
 sNatToInt SZero = 0
@@ -133,7 +137,7 @@
 intToSNat 0 = AnySNat SZero
 intToSNat n =
     case intToSNat (n - 1) of
-      AnySNat n -> AnySNat (SSucc n)
+      AnySNat m -> AnySNat (SSucc m)
 
 data Nat where
     Zero :: Nat
@@ -164,8 +168,9 @@
     (Succ m) :- (Succ n) = m :- n
 
 (!!) :: SNat n -> HVect as -> HVectIdx n as
-SZero !! (a :&: as) = a
-(SSucc s) !! (a :&: as) = s !! as
+SZero !! (a :&: _) = a
+(SSucc s) !! (_ :&: as) = s !! as
+_ !! _ = error "HVect !!: This should never happen"
 
 infixr 5 :&:
 infixr 5 <++>
diff --git a/test/Data/HVectTest.hs b/test/Data/HVectTest.hs
--- a/test/Data/HVectTest.hs
+++ b/test/Data/HVectTest.hs
@@ -1,4 +1,4 @@
-{-# OPTIONS_GHC -F -pgmF htfpp #-}
+{-# OPTIONS_GHC -fno-warn-type-defaults -F -pgmF htfpp #-}
 {-# LANGUAGE GADTs #-}
 {-# LANGUAGE DataKinds #-}
 module Data.HVectTest (htf_thisModulesTests) where
