diff --git a/docs/left_recursion.rst b/docs/left_recursion.rst
index 615a5d1..8b16e61 100644
--- a/docs/left_recursion.rst
+++ b/docs/left_recursion.rst
@@ -16,3 +16,30 @@ Left recursion support is enabled by default in |TatSu|. To disable it for a par
 
     @@left_recursion :: False
 
+
+.. warning::
+
+    Not all left-recursive grammars that use the |TatSu| syntax are PEG_. The same happens with right-recursive grammars.  **The order of rules in matters in PEG**.
+
+    For right-recursive grammars the choices that parse the most input must come first. The same is true  for left-recursive grammars.
+
+    Additionally, for grammars with **indirect left recursion, the rules containing choices must be the first invoked during a parse**. The following grammar is correct,but it will not work if the start rule is changed to ```start = mul ;```.
+
+    .. code:: ocaml
+
+            start = expr ;
+
+            expr
+                =
+                mul | identifier
+                ;
+
+            mul
+                =
+                expr '*' identifier
+                ;
+
+            identifier
+                =
+                /\w+/
+                ;
diff --git a/tatsu/contexts.py b/tatsu/contexts.py
index c5dfa78..2a35c4a 100644
--- a/tatsu/contexts.py
+++ b/tatsu/contexts.py
@@ -330,7 +330,6 @@ class ParseContext(object):
             prune_dict(cache, lambda k, _: k[0] < cutpos)
 
         prune(self._memos, self._pos)
-        prune(self._results, self._pos)
 
     def _memoization(self):
         return self.memoize_lookaheads or self._lookahead == 0
@@ -464,7 +463,6 @@ class ParseContext(object):
 
     def _forget(self, key):
         self._memos.pop(key, None)
-        self._results.pop(key, None)
 
     def _memo_for(self, key):
         memo = self._memos.get(key)

Another left recursion problem
Grammar:
```
identifier = /\w+/ ;
expr = mul | identifier ;
mul = expr '*' identifier ;
```

Parsing `a * b` with the start rule `expr` gives the expected result: `['a', '*', 'b']`. But parsing with the start rule `mul` gives the following error:
```
Traceback (most recent call last):
  File "/home/manu/vcs/TatSu/tatsu/contexts.py", line 203, in parse
    result = rule()
  File "/home/manu/vcs/TatSu/tatsu/contexts.py", line 54, in wrapper
    return self._call(ruleinfo)
  File "/home/manu/vcs/TatSu/tatsu/contexts.py", line 513, in _call
    result = self._recursive_call(ruleinfo)
  File "/home/manu/vcs/TatSu/tatsu/contexts.py", line 546, in _recursive_call
    result = self._invoke_rule(ruleinfo, pos, key)
  File "/home/manu/vcs/TatSu/tatsu/contexts.py", line 580, in _invoke_rule
    ruleinfo.impl(self)
  File "parser.py", line 96, in _mul_
    self._token('*')
  File "/home/manu/vcs/TatSu/tatsu/contexts.py", line 617, in _token
    self._error(token, exclass=FailedToken)
  File "/home/manu/vcs/TatSu/tatsu/contexts.py", line 436, in _error
    raise self._make_exception(item, exclass=exclass)
tatsu.exceptions.FailedToken: /proc/self/fd/12(1:1) expecting '*' :

^
mul

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "parser.py", line 122, in <module>
    ast = generic_main(main, UnknownParser, name='Unknown')
  File "/home/manu/vcs/TatSu/tatsu/util.py", line 335, in generic_main
    colorize=args.color
  File "parser.py", line 115, in main
    return parser.parse(text, startrule, filename=filename, **kwargs)
  File "/home/manu/vcs/TatSu/tatsu/contexts.py", line 211, in parse
    raise self._furthest_exception
  File "/home/manu/vcs/TatSu/tatsu/contexts.py", line 679, in _option
    yield
  File "parser.py", line 88, in _expr_
    self._mul_()
  File "/home/manu/vcs/TatSu/tatsu/contexts.py", line 54, in wrapper
    return self._call(ruleinfo)
  File "/home/manu/vcs/TatSu/tatsu/contexts.py", line 513, in _call
    result = self._recursive_call(ruleinfo)
  File "/home/manu/vcs/TatSu/tatsu/contexts.py", line 546, in _recursive_call
    result = self._invoke_rule(ruleinfo, pos, key)
  File "/home/manu/vcs/TatSu/tatsu/contexts.py", line 580, in _invoke_rule
    ruleinfo.impl(self)
  File "parser.py", line 96, in _mul_
    self._token('*')
  File "/home/manu/vcs/TatSu/tatsu/contexts.py", line 617, in _token
    self._error(token, exclass=FailedToken)
  File "/home/manu/vcs/TatSu/tatsu/contexts.py", line 436, in _error
    raise self._make_exception(item, exclass=exclass)
tatsu.exceptions.FailedToken: /proc/self/fd/12(1:1) expecting '*' :

^
mul
expr
mul
```
diff --git a/test/grammar/left_recursion_test.py b/test/grammar/left_recursion_test.py
index 0dced21..1290c3e 100644
--- a/test/grammar/left_recursion_test.py
+++ b/test/grammar/left_recursion_test.py
@@ -309,3 +309,46 @@ class LeftRecursionTests(unittest.TestCase):
 
         ast = model.parse('foo, bar', trace=trace, colorize=True)
         self.assertEqual(['foo', ',', 'bar'], ast)
+
+    def test_change_start_rule(self, trace=False):
+        grammar = '''
+            start = expr ;
+        
+            expr 
+                = 
+                mul | identifier 
+                ;
+                
+            mul 
+                = 
+                expr '*' identifier 
+                ;
+                
+            identifier 
+                = 
+                /\w+/ 
+                ;
+        '''
+        model = compile(grammar)
+
+        ast = model.parse('a * b', start='expr', trace=trace, colorize=True)
+        self.assertEqual(['a', '*', 'b'], ast)
+
+        try:
+            model.parse('a * b', start='mul', trace=trace, colorize=True)
+            self.fail('failure expected as first recursive rule does not cotain a choice')
+        except FailedParse:
+            pass
+
+    def test_with_gather(self, trace=False):
+        grammar = '''
+            identifier = /\w+/ ;
+            expr = mul | tmp ;
+            mul = expr '*' tmp ;
+            tmp = call | identifier ;
+            call = identifier '(' ','.{expr} ')' ;
+        '''
+        model = compile(grammar)
+
+        ast = model.parse('a(b, c)', start='expr', trace=trace, colorize=True)
+        self.assertEqual(['a', '(', ['b', 'c'], ')'], ast)

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest pytest-flake8 pytest-mypy pytest-pylint
3.9
requirements-dev.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
astroid==3.3.9
dill==0.3.9
exceptiongroup==1.2.2
filelock==3.18.0
flake8==7.2.0
iniconfig==2.1.0
isort==6.0.1
mccabe==0.7.0
mypy==1.15.0
mypy-extensions==1.0.0
packaging==24.2
platformdirs==4.3.7
pluggy==1.5.0
pycodestyle==2.13.0
pyflakes==3.3.1
pylint==3.3.6
pytest==8.3.5
pytest-flake8==1.3.0
pytest-mypy==1.0.0
pytest-pylint==0.21.0
-e git+https://github.com/neogeny/TatSu.git@4dcfba04d700e858c2c3ae1fdb258e6d5bbce2ab#egg=TatSu
tomli==2.2.1
tomlkit==0.13.2
typing_extensions==4.13.0

name: TatSu
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - astroid==3.3.9
      - dill==0.3.9
      - exceptiongroup==1.2.2
      - filelock==3.18.0
      - flake8==7.2.0
      - iniconfig==2.1.0
      - isort==6.0.1
      - mccabe==0.7.0
      - mypy==1.15.0
      - mypy-extensions==1.0.0
      - packaging==24.2
      - platformdirs==4.3.7
      - pluggy==1.5.0
      - pycodestyle==2.13.0
      - pyflakes==3.3.1
      - pylint==3.3.6
      - pytest==8.3.5
      - pytest-flake8==1.3.0
      - pytest-mypy==1.0.0
      - pytest-pylint==0.21.0
      - tomli==2.2.1
      - tomlkit==0.13.2
      - typing-extensions==4.13.0
prefix: /opt/conda/envs/TatSu

test/grammar/left_recursion_test.py::LeftRecursionTests::test_with_gather
test/grammar/left_recursion_test.py::LeftRecursionTests::test_change_start_rule test/grammar/left_recursion_test.py::LeftRecursionTests::test_direct_left_recursion test/grammar/left_recursion_test.py::LeftRecursionTests::test_dropped_input_bug test/grammar/left_recursion_test.py::LeftRecursionTests::test_indirect_left_recursion test/grammar/left_recursion_test.py::LeftRecursionTests::test_indirect_left_recursion_with_cut test/grammar/left_recursion_test.py::LeftRecursionTests::test_left_recursion_bug test/grammar/left_recursion_test.py::LeftRecursionTests::test_left_recursion_with_right_associativity test/grammar/left_recursion_test.py::LeftRecursionTests::test_nested_left_recursion test/grammar/left_recursion_test.py::LeftRecursionTests::test_no_left_recursion test/grammar/left_recursion_test.py::LeftRecursionTests::test_partial_input_bug
docs/left_recursion.rst tatsu/contexts.py
docs/left_recursion.rst tatsu/contexts.py