diff --git a/Text/Regex/TDFA/Common.hs b/Text/Regex/TDFA/Common.hs
--- a/Text/Regex/TDFA/Common.hs
+++ b/Text/Regex/TDFA/Common.hs
@@ -89,13 +89,16 @@
                              , testMatch :: Bool        -- ^ False by default. Set to True to quickly return shortest match (w/o groups). [ UNUSED ]
                              } deriving (Read,Show)
 
--- | Used by implementation to name certain Postions during matching
-type Tag = Int           -- ^ identity of Position tag to set during a transition
+-- | Used by implementation to name certain Positions during matching
+type Tag = Int
 -- | Internal use to indicate type of tag and preference for larger or smaller Positions
 data OP = Maximize | Minimize | Orbit deriving (Eq,Show)
-type Index = Int         -- ^ Internal NFA node identity number
-type SetIndex = IntSet {- Index -} -- ^ Internal DFA identity is this Set of NFA Index
-type Position = Int      -- ^ Index into the text being searched
+-- | Internal NFA node identity number
+type Index = Int
+-- | Internal DFA identity is this Set of NFA Index
+type SetIndex = IntSet {- Index -}
+-- | Index into the text being searched
+type Position = Int
 
 -- | GroupIndex is for indexing submatches from capturing
 -- parenthesized groups (PGroup/Group)
@@ -111,7 +114,7 @@
                    ,regex_init::Index                          -- ^ index of starting DFA state
                    ,regex_tags::Array Tag OP                   -- ^ information about each tag
                    ,regex_groups::Array GroupIndex [GroupInfo] -- ^ information about each group
-                   ,regex_compOptions::CompOption              -- 
+                   ,regex_compOptions::CompOption
                    ,regex_execOptions::ExecOption}
 
 -- | Internal NFA node type
diff --git a/Text/Regex/TDFA/Pattern.hs b/Text/Regex/TDFA/Pattern.hs
--- a/Text/Regex/TDFA/Pattern.hs
+++ b/Text/Regex/TDFA/Pattern.hs
@@ -166,7 +166,7 @@
 {- The PStar should not capture 0 characters on its first iteration,
    so set its mayFirstBeNull flag to False
  -}
-    PPlus  p -> PConcat [p,simplify' $ PStar False p]
+    PPlus  p -> asGroup $ PConcat [p,simplify' $ PStar False p]
 
 {- "An ERE matching a single character repeated by an '*' , '?' , or
    an interval expression shall not match a null expression unless
diff --git a/regex-tdfa.cabal b/regex-tdfa.cabal
--- a/regex-tdfa.cabal
+++ b/regex-tdfa.cabal
@@ -1,8 +1,9 @@
 Name:                   regex-tdfa
-Version:                0.97.3
+Version:                0.97.4
 -- 0.97.1: Bug Fix: Use PGroup Nothing when expanding PBound
 -- 0.97.2: Bug Fix: Use more complex null view in PStar when mayFirstBeNull, fix (()*)* and ((.?)*)*
 -- 0.97.3: Bug Fix: RunMutState.updateWinning was borking the input state (.*)*...?()|. on 123456
+-- 0.97.4: Bug Fix: PPLus needs asGroup as well, "(BB(B?))+(B?)" on "BBBB"
 Cabal-Version:          >=1.2.3
 License:                BSD3
 License-File:           LICENSE
