diff --git a/Data/Universe.hs b/Data/Universe.hs
--- a/Data/Universe.hs
+++ b/Data/Universe.hs
@@ -71,9 +71,8 @@
 instance (Universe a, Universe b, Universe c, Universe d) => Universe (a, b, c, d) where universe = [(a,b,c,d) | (((a,b),c),d) <- universe +*+ universe +*+ universe +*+ universe]
 instance (Universe a, Universe b, Universe c, Universe d, Universe e) => Universe (a, b, c, d, e) where universe = [(a,b,c,d,e) | ((((a,b),c),d),e) <- universe +*+ universe +*+ universe +*+ universe +*+ universe]
 
-instance Finite a => Universe [a] where universe = [] : interleave [[h:t | t <- universe] | h <- universe]
--- probably also possible, but wait until somebody demands it:
--- instance Universe a => Universe [a] where universe = {- something using choices and diagonal and replicate n universe -}
+instance Universe a => Universe [a] where
+	universe = diagonal $ [[]] : [[h:t | t <- universe] | h <- universe]
 
 instance Universe All where universe = map All universe
 instance Universe Any where universe = map Any universe
diff --git a/universe.cabal b/universe.cabal
--- a/universe.cabal
+++ b/universe.cabal
@@ -1,5 +1,5 @@
 name:                universe
-version:             0.4.0.4
+version:             0.4.0.5
 synopsis:            Classes for types where we know all the values
 description:         Munge finite and recursively enumerable types
 license:             BSD3
@@ -16,7 +16,7 @@
 source-repository this
     type:            git
     location:        https://github.com/dmwit/universe
-    tag:             0.4.0.4
+    tag:             0.4.0.5
 
 library
   exposed-modules:     Data.Universe,
