diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,3 +15,7 @@
 ---
 * Revive convenience show functions
 * Ints and Bools are no longer shown as floats
+
+0.4.1
+---
+* add version of flatten which returns name as [String]
diff --git a/generic-accessors.cabal b/generic-accessors.cabal
--- a/generic-accessors.cabal
+++ b/generic-accessors.cabal
@@ -1,5 +1,5 @@
 name:                generic-accessors
-version:             0.4.0
+version:             0.4.1
 synopsis:            stringly-named getters for generic data
 license:             BSD3
 license-file:        LICENSE
diff --git a/src/Accessors.hs b/src/Accessors.hs
--- a/src/Accessors.hs
+++ b/src/Accessors.hs
@@ -13,6 +13,7 @@
        , Getter(..)
        , accessors
        , flatten
+       , flatten'
        , showTree
        , showFlat
        ) where
@@ -66,13 +67,18 @@
 showMsgs = intercalate "."
 
 flatten :: AccessorTree a -> [(String, Getter a, Setter a)]
-flatten = flatten' []
+flatten = map f . flatten'
+  where
+    f (x,y,z) = (showMsgs x, y, z)
 
-flatten' :: [String] -> AccessorTree a -> [(String, Getter a, Setter a)]
-flatten' msgs (ATGetter (get, set)) = [(showMsgs (reverse msgs), get, set)]
-flatten' msgs (Data (_,_) trees) = concatMap f trees
+flatten' :: AccessorTree a -> [([String], Getter a, Setter a)]
+flatten' = flattenChain []
   where
-    f (name,tree) = flatten' (name:msgs) tree
+    flattenChain :: [String] -> AccessorTree a -> [([String], Getter a, Setter a)]
+    flattenChain msgs (ATGetter (get, set)) = [(reverse msgs, get, set)]
+    flattenChain msgs (Data (_,_) trees) = concatMap f trees
+      where
+        f (name,tree) = flattenChain (name:msgs) tree
 
 -- | Things which you can make a tree of labeled getters for.
 -- You should derive this using GHC.Generics.
