diff --git a/Antlr4.Runtime/Lexer.cs b/Antlr4.Runtime/Lexer.cs
index 836c3ade3..5edcabc7a 100644
--- a/Antlr4.Runtime/Lexer.cs
+++ b/Antlr4.Runtime/Lexer.cs
@@ -109,7 +109,7 @@ namespace Antlr4.Runtime
         /// <summary>The token type for the current token</summary>
         public int _type;
 
-        public readonly IntegerStack _modeStack = new IntegerStack();
+        public readonly List<int> _modeStack = new List<int>();
 
         public int _mode = Antlr4.Runtime.Lexer.DefaultMode;
 
@@ -260,7 +260,7 @@ outer_break: ;
 
         public virtual void PushMode(int m)
         {
-            _modeStack.Push(_mode);
+            _modeStack.Add(_mode);
             Mode(m);
         }
 
diff --git a/Antlr4.Runtime/Parser.cs b/Antlr4.Runtime/Parser.cs
index b8da1911e..b8218010f 100644
--- a/Antlr4.Runtime/Parser.cs
+++ b/Antlr4.Runtime/Parser.cs
@@ -108,7 +108,7 @@ namespace Antlr4.Runtime
 
         protected internal ITokenStream _input;
 
-        protected internal readonly IntegerStack _precedenceStack;
+        protected internal readonly List<int> _precedenceStack;
 
         /// <summary>The RuleContext object for the currently executing rule.</summary>
         /// <remarks>
@@ -146,8 +146,8 @@ namespace Antlr4.Runtime
         public Parser(ITokenStream input)
         {
             {
-                _precedenceStack = new IntegerStack();
-                _precedenceStack.Push(0);
+                _precedenceStack = new List<int>();
+                _precedenceStack.Add(0);
             }
             SetInputStream(input);
         }
@@ -164,7 +164,7 @@ namespace Antlr4.Runtime
             _syntaxErrors = 0;
             _tracer = null;
             _precedenceStack.Clear();
-            _precedenceStack.Push(0);
+            _precedenceStack.Add(0);
             ATNSimulator interpreter = Interpreter;
             if (interpreter != null)
             {
@@ -630,7 +630,7 @@ namespace Antlr4.Runtime
         public virtual void EnterRecursionRule(ParserRuleContext localctx, int ruleIndex, 
             int precedence)
         {
-            _precedenceStack.Push(precedence);
+            _precedenceStack.Add(precedence);
             _ctx = localctx;
             _ctx.start = _input.Lt(1);
             if (_parseListeners != null)
diff --git a/reference/sharpen-all-options.txt b/reference/sharpen-all-options.txt
index bfa4510b7..ce588e8c4 100644
--- a/reference/sharpen-all-options.txt
+++ b/reference/sharpen-all-options.txt
@@ -197,6 +197,8 @@
 -propertyMapping org.antlr.v4.runtime.misc.Tuple3.getItem3 Item3
 
 -typeMapping org.antlr.v4.runtime.misc.IntegerList System.Collections.Generic.List<int>
+-typeMapping org.antlr.v4.runtime.misc.IntegerStack System.Collections.Generic.List<int>
+-methodMapping org.antlr.v4.runtime.misc.IntegerStack.push Add
 
 -typeMapping org.antlr.v4.runtime.ANTLRErrorListener<> IAntlrErrorListener
 -typeMapping org.antlr.v4.runtime.ANTLRErrorStrategy IAntlrErrorStrategy