diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,11 @@
 # Revision history for language-c99-simple
 
+## 0.2.1 -- 2022-08-15
+
+* Bump version number for release (#10).
+* Fixed a bug where the order of init list was reversed (thanks RyanGlScott!).
+  (#9)
+
 ## 0.2.0 -- 2022-05-21
 
 * Added support for initializers with designators.
diff --git a/language-c99-simple.cabal b/language-c99-simple.cabal
--- a/language-c99-simple.cabal
+++ b/language-c99-simple.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                language-c99-simple
-version:             0.2.0
+version:             0.2.1
 synopsis:            C-like AST to simplify writing C99 programs.
 description:
   This package is a wrapper on top of 'language-c99'. It provides a simpler
diff --git a/src/Language/C99/Simple/Translate.hs b/src/Language/C99/Simple/Translate.hs
--- a/src/Language/C99/Simple/Translate.hs
+++ b/src/Language/C99/Simple/Translate.hs
@@ -168,10 +168,10 @@
     declns' = transvariantdeclns declns
 
 transfielddeclns :: NonEmpty FieldDecln -> C.StructDeclnList
-transfielddeclns (decln NE.:| []) = C.StructDeclnBase (transfielddecln decln)
-transfielddeclns (decln NE.:| (d : ds)) = C.StructDeclnCons
-  (transfielddeclns (d NE.:| ds))
-  (transfielddecln decln)
+transfielddeclns (decln NE.:| declns) = foldl step (base decln) declns
+  where
+    base d    = C.StructDeclnBase (transfielddecln d)
+    step ds d = C.StructDeclnCons ds (transfielddecln d)
 
 transfielddecln :: FieldDecln -> C.StructDecln
 transfielddecln (FieldDecln ty name) = C.StructDecln quals declrlist where
@@ -180,10 +180,10 @@
   quals = getspecquals ty
 
 transvariantdeclns :: NonEmpty Ident -> C.EnumrList
-transvariantdeclns (decln NE.:| []) = C.EnumrBase (transvariantdecln decln)
-transvariantdeclns (decln NE.:| (d : ds)) = C.EnumrCons
-  (transvariantdeclns (d NE.:| ds))
-  (transvariantdecln decln)
+transvariantdeclns (decln NE.:| declns) = foldl step (base decln) declns
+  where
+    base d    = C.EnumrBase (transvariantdecln d)
+    step ds d = C.EnumrCons ds (transvariantdecln d)
 
 transvariantdecln :: Ident -> C.Enumr
 transvariantdecln name = C.Enumr (C.Enum (ident name))
@@ -278,10 +278,10 @@
 transinit (InitList es) = C.InitList (transinitlist es)
 
 transinitlist :: NonEmpty InitItem -> C.InitList
-transinitlist (InitItem mident x NE.:| [])     = C.InitBase
-  (transdesigr <$> mident) (transinit x)
-transinitlist (InitItem mident x NE.:| (y:zs)) = C.InitCons
-  (transinitlist (y NE.:| zs)) (transdesigr <$> mident) (transinit x)
+transinitlist (x NE.:| xs) = foldl step (base x) xs
+  where
+    base (InitItem mident y)    = C.InitBase    (transdesigr <$> mident) (transinit y)
+    step ys (InitItem mident y) = C.InitCons ys (transdesigr <$> mident) (transinit y)
 
 transdesigr :: Ident -> C.Design
 transdesigr = C.Design . C.DesigrBase . C.DesigrIdent . ident
@@ -292,10 +292,7 @@
   inits' = transinititems inits
 
 transinititems :: NonEmpty InitItem -> C.InitList
-transinititems (InitItem mident init NE.:| []) =
-  C.InitBase ((C.Design . C.DesigrBase . C.DesigrIdent . ident) <$> mident) (transinit init)
-transinititems (InitItem mident init NE.:| (x:xs)) =
-  C.InitCons (transinititems (x NE.:| xs)) ((C.Design . C.DesigrBase . C.DesigrIdent . ident) <$> mident) (transinit init)
+transinititems = transinitlist
 
 indexexpr arr idx = C.PostfixIndex arr' idx' where
   arr' = wrap $ transexpr arr
