diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst
index 12e3f18..1d462c2 100644
--- a/Doc/whatsnew/3.9.rst
+++ b/Doc/whatsnew/3.9.rst
@@ -664,8 +664,9 @@
   defining ``COUNT_ALLOCS`` macro.
   (Contributed by Victor Stinner in :issue:`39489`.)
 
-* The ``ast.Suite`` node class has been removed due to no longer being needed.
-  (Contributed by Batuhan Taskaya in :issue:`39639`.)
+* The ``ast.Suite`` and ``ast.Param`` node classes has been removed due to no
+  longer being needed.
+  (Contributed by Batuhan Taskaya in :issue:`39639` and :issue:`39969`.)
 
 
 Porting to Python 3.9
diff --git a/Include/Python-ast.h b/Include/Python-ast.h
index f4631f2..c44d6ea 100644
--- a/Include/Python-ast.h
+++ b/Include/Python-ast.h
@@ -17,8 +17,8 @@
 
 typedef struct _expr *expr_ty;
 
-typedef enum _expr_context { Load=1, Store=2, Del=3, AugLoad=4, AugStore=5,
-                             Param=6 } expr_context_ty;
+typedef enum _expr_context { Load=1, Store=2, Del=3, AugLoad=4, AugStore=5 }
+                             expr_context_ty;
 
 typedef enum _boolop { And=1, Or=2 } boolop_ty;
 
diff --git a/Misc/NEWS.d/next/Library/2020-03-15-17-56-48.bpo-39969.6snm0c.rst b/Misc/NEWS.d/next/Library/2020-03-15-17-56-48.bpo-39969.6snm0c.rst
new file mode 100644
index 0000000..d584cf4
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-03-15-17-56-48.bpo-39969.6snm0c.rst
@@ -0,0 +1,2 @@
+Remove ``ast.Param`` node class because it's no longer used. Patch by
+Batuhan Taskaya.
diff --git a/Parser/Python.asdl b/Parser/Python.asdl
index a1ddebd..19b5e1a 100644
--- a/Parser/Python.asdl
+++ b/Parser/Python.asdl
@@ -90,7 +90,7 @@
           -- col_offset is the byte offset in the utf8 string the parser uses
           attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)
 
-    expr_context = Load | Store | Del | AugLoad | AugStore | Param
+    expr_context = Load | Store | Del | AugLoad | AugStore
 
     boolop = And | Or
 
diff --git a/Python/Python-ast.c b/Python/Python-ast.c
index f58dd9c..ed5aba6 100644
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -107,8 +107,6 @@
     PyObject *Not_type;
     PyObject *Or_singleton;
     PyObject *Or_type;
-    PyObject *Param_singleton;
-    PyObject *Param_type;
     PyObject *Pass_type;
     PyObject *Pow_singleton;
     PyObject *Pow_type;
@@ -332,8 +330,6 @@
     Py_CLEAR(astmodulestate(module)->Not_type);
     Py_CLEAR(astmodulestate(module)->Or_singleton);
     Py_CLEAR(astmodulestate(module)->Or_type);
-    Py_CLEAR(astmodulestate(module)->Param_singleton);
-    Py_CLEAR(astmodulestate(module)->Param_type);
     Py_CLEAR(astmodulestate(module)->Pass_type);
     Py_CLEAR(astmodulestate(module)->Pow_singleton);
     Py_CLEAR(astmodulestate(module)->Pow_type);
@@ -556,8 +552,6 @@
     Py_VISIT(astmodulestate(module)->Not_type);
     Py_VISIT(astmodulestate(module)->Or_singleton);
     Py_VISIT(astmodulestate(module)->Or_type);
-    Py_VISIT(astmodulestate(module)->Param_singleton);
-    Py_VISIT(astmodulestate(module)->Param_type);
     Py_VISIT(astmodulestate(module)->Pass_type);
     Py_VISIT(astmodulestate(module)->Pow_singleton);
     Py_VISIT(astmodulestate(module)->Pow_type);
@@ -1656,11 +1650,6 @@
                                                   *)state->AugStore_type, NULL,
                                                   NULL);
     if (!state->AugStore_singleton) return 0;
-    state->Param_type = make_type("Param", state->expr_context_type, NULL, 0);
-    if (!state->Param_type) return 0;
-    state->Param_singleton = PyType_GenericNew((PyTypeObject
-                                               *)state->Param_type, NULL, NULL);
-    if (!state->Param_singleton) return 0;
     state->boolop_type = make_type("boolop", state->AST_type, NULL, 0);
     if (!state->boolop_type) return 0;
     if (!add_attributes(state->boolop_type, NULL, 0)) return 0;
@@ -4474,9 +4463,6 @@
         case AugStore:
             Py_INCREF(astmodulestate_global->AugStore_singleton);
             return astmodulestate_global->AugStore_singleton;
-        case Param:
-            Py_INCREF(astmodulestate_global->Param_singleton);
-            return astmodulestate_global->Param_singleton;
         default:
             /* should never happen, but just in case ... */
             PyErr_Format(PyExc_SystemError, "unknown expr_context found");
@@ -8682,14 +8668,6 @@
         *out = AugStore;
         return 0;
     }
-    isinstance = PyObject_IsInstance(obj, astmodulestate_global->Param_type);
-    if (isinstance == -1) {
-        return 1;
-    }
-    if (isinstance) {
-        *out = Param;
-        return 0;
-    }
 
     PyErr_Format(PyExc_TypeError, "expected some sort of expr_context, but got %R", obj);
     return 1;
@@ -10038,10 +10016,6 @@
         goto error;
     }
     Py_INCREF(astmodulestate(m)->AugStore_type);
-    if (PyModule_AddObject(m, "Param", astmodulestate_global->Param_type) < 0) {
-        goto error;
-    }
-    Py_INCREF(astmodulestate(m)->Param_type);
     if (PyModule_AddObject(m, "boolop", astmodulestate_global->boolop_type) <
         0) {
         goto error;
diff --git a/Python/ast.c b/Python/ast.c
index 62ee60a..1c1395f 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -75,8 +75,6 @@
         return "AugLoad";
     case AugStore:
         return "AugStore";
-    case Param:
-        return "Param";
     default:
         Py_UNREACHABLE();
     }
diff --git a/Python/compile.c b/Python/compile.c
index b92cb44..dd14023 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -3579,10 +3579,10 @@
         case AugStore:
             break;
         case Del: op = DELETE_DEREF; break;
-        case Param:
         default:
-            PyErr_SetString(PyExc_SystemError,
-                            "param invalid for deref variable");
+            PyErr_Format(PyExc_SystemError,
+                         "expr_context kind %d should not be possible",
+                         ctx);
             return 0;
         }
         break;
@@ -3596,10 +3596,10 @@
         case AugLoad:
         case AugStore:
             break;
-        case Param:
         default:
-            PyErr_SetString(PyExc_SystemError,
-                            "param invalid for local variable");
+            PyErr_Format(PyExc_SystemError,
+                         "expr_context kind %d should not be possible",
+                         ctx);
             return 0;
         }
         ADDOP_N(c, op, mangled, varnames);
@@ -3614,10 +3614,10 @@
         case AugLoad:
         case AugStore:
             break;
-        case Param:
         default:
-            PyErr_SetString(PyExc_SystemError,
-                            "param invalid for global variable");
+            PyErr_Format(PyExc_SystemError,
+                         "expr_context kind %d should not be possible",
+                         ctx);
             return 0;
         }
         break;
@@ -3631,10 +3631,10 @@
         case AugLoad:
         case AugStore:
             break;
-        case Param:
         default:
-            PyErr_SetString(PyExc_SystemError,
-                            "param invalid for name variable");
+            PyErr_Format(PyExc_SystemError,
+                         "expr_context kind %d should not be possible",
+                         ctx);
             return 0;
         }
         break;
@@ -5058,10 +5058,10 @@
         case Del:
             ADDOP_NAME(c, DELETE_ATTR, e->v.Attribute.attr, names);
             break;
-        case Param:
         default:
-            PyErr_SetString(PyExc_SystemError,
-                            "param invalid in attribute expression");
+            PyErr_Format(PyExc_SystemError,
+                         "expr_context kind %d should not be possible",
+                         e->v.Attribute.ctx);
             return 0;
         }
         break;
@@ -5359,9 +5359,10 @@
         case AugStore:/* fall through to Store */
         case Store:   op = STORE_SUBSCR; break;
         case Del:     op = DELETE_SUBSCR; break;
-        case Param:
-            PyErr_SetString(PyExc_SystemError,
-                "param invalid in subscript expression");
+        default:
+            PyErr_Format(PyExc_SystemError,
+                         "expr_context kind %d should not be possible",
+                         ctx);
             return 0;
     }
     if (ctx == AugStore) {
