diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Revision history for demangler
 
+## 1.2.0.0 -- 2023.10.29
+
+* Updated support for local names.
+
 ## 1.1.0.0 -- 2023.10.23
 
 * Added support for `ABI_Tags` on `SourceName`.
@@ -16,6 +20,6 @@
 
 * Parity with origin tests.
 
-## 0.1.0.0 -- YYYY-mm-dd
+## 0.1.0.0 -- 2023-10-15
 
 * Initial version.
diff --git a/demangler.cabal b/demangler.cabal
--- a/demangler.cabal
+++ b/demangler.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.0
 name:               demangler
-version:            1.1.0.0
+version:            1.2.0.0
 synopsis:           Demangler for C++ mangled names.
 description:
    Provides a demangler (and mangler) for C++ names, with an intermediate
diff --git a/src/Demangler.hs b/src/Demangler.hs
--- a/src/Demangler.hs
+++ b/src/Demangler.hs
@@ -25,7 +25,7 @@
 where
 
 import           Control.Applicative
-import           Control.Lens ( (&), (^.), view, (.~), (||~) )
+import           Control.Lens ( (&), (^.), (.~), (||~) )
 import           Control.Monad
 import           Data.Char
 import           Data.Either ( isRight )
@@ -203,18 +203,19 @@
 
 
 local_name :: AnyNext Name
-local_name i = do f <- match "Z" i >>= function_encoding
-                  c <- match "E" f
-                  entity f c <|> stringlit f c
-  where
-    entity f c = do e <- entity_name c
-                    discriminated f e
-                      <|> ret e (LocalName (f ^. nVal) (e ^. nVal) Nothing)
-    stringlit f c = do s <- match "s" c
-                       d <- optional (discriminator s)
-                       ret (fromMaybe s d) $ StringLitName (f ^. nVal) (view nVal <$> d)
-    discriminated f e = do d <- discriminator e
-                           ret d $ LocalName (f ^. nVal) (e ^. nVal) (Just $ d ^. nVal)
+local_name = match "Z"
+             >=> function_encoding
+             >=> match "E"
+             >=> asum' [ match "s"
+                         >=> rmap StringLitName
+                         >=> optional' discriminator
+                         >=> rmap (uncurry ($))
+                       , rmap LocalName
+                         >&=> name
+                         >=> rmap (uncurry ($))
+                         >=> optional' discriminator
+                         >=> rmap (uncurry ($))
+                       ]
 
 
 -- | Parse any CV qualifiers; always succeeds but might return an empty array.
@@ -605,11 +606,13 @@
                          >=> rmap (uncurry (ArrayType . ExprBound))
                        ]
 
-function_encoding :: AnyNext FunctionScope
-function_encoding = tbd "function_encoding"
-
-entity_name :: Next a FunctionEntity
-entity_name = tbd "entity_name"
+function_encoding :: AnyNext Encoding
+function_encoding i = do e <- encoding i
+                         require $ case e ^. nVal of
+                                     EncFunc {} -> True
+                                     EncStaticFunc {} -> True
+                                     _ -> False
+                         return e
 
 discriminator :: Next a Int
 discriminator = asum' [ match "_" >=> single_digit_num
diff --git a/src/Demangler/Structure.hs b/src/Demangler/Structure.hs
--- a/src/Demangler/Structure.hs
+++ b/src/Demangler/Structure.hs
@@ -41,8 +41,8 @@
 data Name = NameNested NestedName
           | UnscopedName Bool UnqualifiedName -- Bool is "std::" prefix
           | UnscopedTemplateName Name TemplateArgs
-          | LocalName FunctionScope FunctionEntity (Maybe Discriminator)
-          | StringLitName FunctionScope (Maybe Discriminator)
+          | LocalName Encoding Name (Maybe Discriminator)
+          | StringLitName Encoding (Maybe Discriminator)
   deriving (Eq, Show)
 
 data NestedName = NestedName Prefix UnqualifiedName
@@ -51,7 +51,6 @@
                   [CVQualifier] (Maybe RefQualifier)
   deriving (Eq, Show)
 
-type FunctionScope = Coord
 type FunctionEntity = Coord
 type Discriminator = Coord
 
diff --git a/test/initial-test-cases.txt b/test/initial-test-cases.txt
--- a/test/initial-test-cases.txt
+++ b/test/initial-test-cases.txt
@@ -46,3 +46,4 @@
 _ZN10px4_daemon15get_socket_pathB5cxx11B3fooEi
 _ZN17PositionSmoothing18_generateSetpointsERKN6matrix7Vector3IfEERA3_S3_bS4_fbRNS_26PositionSmoothingSetpointsE
 _ZN17PositionSmoothing18_generateSetpointsERKN6matrix7Vector3IfEERA_S3_bS4_fbRNS_26PositionSmoothingSetpointsE
+_ZZ23airship_att_recalibratevE4amsg
