diff --git a/0001-src-if_python3.c-fix-build-with-python-3.9.patch b/0001-src-if_python3.c-fix-build-with-python-3.9.patch
deleted file mode 100644
index 1ec1181..0000000
--- a/0001-src-if_python3.c-fix-build-with-python-3.9.patch
+++ /dev/null
@@ -1,133 +0,0 @@
-From 39049f0fc3562330e75ccdcca230a5bb8de2babf Mon Sep 17 00:00:00 2001
-From: Zdenek Dohnal <zdohnal@redhat.com>
-Date: Thu, 16 Jul 2020 13:37:18 +0200
-Subject: [PATCH] src/if_python3.c: fix build with python 3.9
-
----
- src/if_python3.c | 40 +++++++++++++++++++++++++++++++++++++---
- 1 file changed, 37 insertions(+), 3 deletions(-)
-
-diff --git a/src/if_python3.c b/src/if_python3.c
-index d540226b3..843fa079f 100644
---- a/src/if_python3.c
-+++ b/src/if_python3.c
-@@ -203,6 +203,9 @@ typedef PySliceObject PySliceObject_T;
- # define PySys_GetObject py3_PySys_GetObject
- # define PySys_SetArgv py3_PySys_SetArgv
- # define PyType_Ready py3_PyType_Ready
-+# if PY_VERSION_HEX >= 0x030900b0
-+#  define PyType_GetFlags py3_PyType_GetFlags
-+# endif
- #undef Py_BuildValue
- # define Py_BuildValue py3_Py_BuildValue
- # define Py_SetPythonHome py3_Py_SetPythonHome
-@@ -233,6 +236,9 @@ typedef PySliceObject PySliceObject_T;
- # define PyBytes_FromString py3_PyBytes_FromString
- # undef PyBytes_FromStringAndSize
- # define PyBytes_FromStringAndSize py3_PyBytes_FromStringAndSize
-+# if defined(Py_DEBUG) || PY_VERSION_HEX >= 0x030900b0
-+#  define _Py_Dealloc py3__Py_Dealloc
-+# endif
- # define PyFloat_FromDouble py3_PyFloat_FromDouble
- # define PyFloat_AsDouble py3_PyFloat_AsDouble
- # define PyObject_GenericGetAttr py3_PyObject_GenericGetAttr
-@@ -247,7 +253,6 @@ typedef PySliceObject PySliceObject_T;
- # ifdef Py_DEBUG
- #  define _Py_NegativeRefcount py3__Py_NegativeRefcount
- #  define _Py_RefTotal (*py3__Py_RefTotal)
--#  define _Py_Dealloc py3__Py_Dealloc
- #  define PyModule_Create2TraceRefs py3_PyModule_Create2TraceRefs
- # else
- #  define PyModule_Create2 py3_PyModule_Create2
-@@ -287,6 +292,10 @@ typedef PySliceObject PySliceObject_T;
- #  define PyObject_NEW(type, typeobj) \
- ( (type *) PyObject_Init( \
- 	(PyObject *) _PyObject_DebugMalloc( _PyObject_SIZE(typeobj) ), (typeobj)) )
-+# elif PY_VERSION_HEX >= 0x030900b0
-+#  undef PyObject_NEW
-+#  define PyObject_NEW(type, typeobj) \
-+	((type *)py3__PyObject_New(typeobj))
- # endif
- 
- /*
-@@ -352,6 +361,9 @@ static PyObject* (*py3_PyObject_Repr)(PyObject *);
- static PyObject* (*py3_PyObject_GetItem)(PyObject *, PyObject *);
- static int (*py3_PyObject_IsTrue)(PyObject *);
- static PyObject* (*py3_Py_BuildValue)(char *, ...);
-+# if PY_VERSION_HEX >= 0x030900b0
-+static int (*py3_PyType_GetFlags)(PyTypeObject *o);
-+# endif
- static int (*py3_PyType_Ready)(PyTypeObject *type);
- static int (*py3_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
- static PyObject* (*py3_PyUnicode_FromString)(const char *u);
-@@ -396,6 +408,12 @@ static char* (*py3_PyBytes_AsString)(PyObject *bytes);
- static int (*py3_PyBytes_AsStringAndSize)(PyObject *bytes, char **buffer, Py_ssize_t *length);
- static PyObject* (*py3_PyBytes_FromString)(char *str);
- static PyObject* (*py3_PyBytes_FromStringAndSize)(char *str, Py_ssize_t length);
-+# if defined(Py_DEBUG) || PY_VERSION_HEX >= 0x030900b0
-+static void (*py3__Py_Dealloc)(PyObject *obj);
-+# endif
-+# if PY_VERSION_HEX >= 0x030900b0
-+static PyObject* (*py3__PyObject_New)(PyTypeObject *);
-+# endif
- static PyObject* (*py3_PyFloat_FromDouble)(double num);
- static double (*py3_PyFloat_AsDouble)(PyObject *);
- static PyObject* (*py3_PyObject_GenericGetAttr)(PyObject *obj, PyObject *name);
-@@ -414,7 +432,6 @@ static void* (*py3_PyCapsule_GetPointer)(PyObject *, char *);
- # ifdef Py_DEBUG
- static void (*py3__Py_NegativeRefcount)(const char *fname, int lineno, PyObject *op);
- static Py_ssize_t* py3__Py_RefTotal;
--static void (*py3__Py_Dealloc)(PyObject *obj);
- static PyObject* (*py3_PyModule_Create2TraceRefs)(struct PyModuleDef* module, int module_api_version);
- # else
- static PyObject* (*py3_PyModule_Create2)(struct PyModuleDef* module, int module_api_version);
-@@ -525,6 +542,9 @@ static struct
-     {"PyObject_IsTrue", (PYTHON_PROC*)&py3_PyObject_IsTrue},
-     {"PyLong_FromLong", (PYTHON_PROC*)&py3_PyLong_FromLong},
-     {"PyDict_New", (PYTHON_PROC*)&py3_PyDict_New},
-+# if PY_VERSION_HEX >= 0x030900b0
-+    {"PyType_GetFlags", (PYTHON_PROC*)&py3_PyType_GetFlags},
-+# endif
-     {"PyType_Ready", (PYTHON_PROC*)&py3_PyType_Ready},
-     {"PyDict_SetItemString", (PYTHON_PROC*)&py3_PyDict_SetItemString},
-     {"PyLong_AsLong", (PYTHON_PROC*)&py3_PyLong_AsLong},
-@@ -562,6 +582,12 @@ static struct
-     {"PyBytes_AsStringAndSize", (PYTHON_PROC*)&py3_PyBytes_AsStringAndSize},
-     {"PyBytes_FromString", (PYTHON_PROC*)&py3_PyBytes_FromString},
-     {"PyBytes_FromStringAndSize", (PYTHON_PROC*)&py3_PyBytes_FromStringAndSize},
-+# if defined(Py_DEBUG) || PY_VERSION_HEX >= 0x030900b0
-+    {"_Py_Dealloc", (PYTHON_PROC*)&py3__Py_Dealloc},
-+# endif
-+# if PY_VERSION_HEX >= 0x030900b0
-+    {"_PyObject_New", (PYTHON_PROC*)&py3__PyObject_New},
-+# endif
-     {"PyFloat_FromDouble", (PYTHON_PROC*)&py3_PyFloat_FromDouble},
-     {"PyFloat_AsDouble", (PYTHON_PROC*)&py3_PyFloat_AsDouble},
-     {"PyObject_GenericGetAttr", (PYTHON_PROC*)&py3_PyObject_GenericGetAttr},
-@@ -578,7 +604,6 @@ static struct
- # ifdef Py_DEBUG
-     {"_Py_NegativeRefcount", (PYTHON_PROC*)&py3__Py_NegativeRefcount},
-     {"_Py_RefTotal", (PYTHON_PROC*)&py3__Py_RefTotal},
--    {"_Py_Dealloc", (PYTHON_PROC*)&py3__Py_Dealloc},
-     {"PyModule_Create2TraceRefs", (PYTHON_PROC*)&py3_PyModule_Create2TraceRefs},
- # else
-     {"PyModule_Create2", (PYTHON_PROC*)&py3_PyModule_Create2},
-@@ -634,6 +659,15 @@ py3__Py_XDECREF(PyObject *op)
- #  define Py_XDECREF(op) py3__Py_XDECREF(_PyObject_CAST(op))
- # endif
- 
-+# if PY_VERSION_HEX >= 0x030900b0
-+    static inline int
-+py3_PyType_HasFeature(PyTypeObject *type, unsigned long feature)
-+{
-+    return ((PyType_GetFlags(type) & feature) != 0);
-+}
-+#  define PyType_HasFeature(t,f) py3_PyType_HasFeature(t,f)
-+# endif
-+
- /*
-  * Load library and get all pointers.
-  * Parameter 'libname' provides name of DLL.
--- 
-2.25.4
-
diff --git a/vim.spec b/vim.spec
index dc076c6..7e8e74e 100644
--- a/vim.spec
+++ b/vim.spec
@@ -21,7 +21,7 @@ Summary: The VIM editor
 URL:     http://www.vim.org/
 Name: vim
 Version: %{baseversion}.%{patchlevel}
-Release: 3%{?dist}
+Release: 4%{?dist}
 License: Vim and MIT
 Source0: ftp://ftp.vim.org/pub/vim/unix/vim-%{baseversion}-%{patchlevel}.tar.bz2
 Source1: vim.sh
@@ -59,8 +59,6 @@ Patch3016: vim-8.0-copy-paste.patch
 Patch3017: vim-python3-tests.patch
 # fips warning
 Patch3018: vim-crypto-warning.patch
-# fix dynamic python3 linking with python3.8
-Patch3019: 0001-src-if_python3.c-fix-build-with-python-3.9.patch
 
 # gcc is no longer in buildroot by default
 BuildRequires: gcc
@@ -248,7 +246,6 @@ perl -pi -e "s,bin/nawk,bin/awk,g" runtime/tools/mve.awk
 %patch3016 -p1 -b .copypaste
 %patch3017 -p1 -b .python-tests
 %patch3018 -p1
-%patch3019 -p1 -b .python38-ftbfs
 
 %build
 cd src
@@ -775,6 +772,9 @@ touch %{buildroot}/%{_datadir}/%{name}/vimfiles/doc/tags
 %{_datadir}/icons/locolor/*/apps/*
 
 %changelog
+* Thu Jul 23 2020 Zdenek Dohnal <zdohnal@redhat.com> - 2:8.2.1224-4
+- python3 dynamic linking patch is already in upstream, remove it
+
 * Wed Jul 22 2020 Zdenek Dohnal <zdohnal@redhat.com> - 2:8.2.1224-3
 - use %%make_build and %%make_install according FPG