diff --git a/CHANGES.rst b/CHANGES.rst
index 7a40b0f37..eb35c5aa0 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -14,6 +14,9 @@ https://github.com/zopefoundation/Zope/blob/4.0a6/CHANGES.rst
 Fixes
 +++++
 
+- Recreate ``App.version_txt.getZopeVersion``
+  (`#411 <https://github.com/zopefoundation/Zope/issues/411>`_)
+
 - Restore the `View` ZMI tab on folders and their subclasses
   (`#449 <https://github.com/zopefoundation/Zope/issues/449>`_)
 
diff --git a/src/App/version_txt.py b/src/App/version_txt.py
index e4db4fe20..ba9ddd975 100644
--- a/src/App/version_txt.py
+++ b/src/App/version_txt.py
@@ -10,22 +10,54 @@
 # FOR A PARTICULAR PURPOSE
 #
 ##############################################################################
+import collections
+import re
 import sys
 
 import pkg_resources
 
 _version_string = None
+_zope_version = None
+
+ZopeVersion = collections.namedtuple(
+    "ZopeVersion",
+    ["major", "minor", "micro", "status", "release"]
+    )
 
 
 def _prep_version_data():
-    global _version_string
+    global _version_string, _zope_version
     if _version_string is None:
         v = sys.version_info
         pyver = "python %d.%d.%d, %s" % (v[0], v[1], v[2], sys.platform)
         dist = pkg_resources.get_distribution('Zope')
         _version_string = "%s, %s" % (dist.version, pyver)
 
+        expr = re.compile(
+            r'(?P<major>[0-9]+)\.(?P<minor>[0-9]+)(\.(?P<micro>[0-9]+))?'
+            '(?P<status>[A-Za-z]+)?(?P<release>[0-9]+)?')
+        version_dict = expr.match(dist.version).groupdict()
+        _zope_version = ZopeVersion(
+            int(version_dict.get('major') or -1),
+            int(version_dict.get('minor') or -1),
+            int(version_dict.get('micro') or -1),
+            version_dict.get('status') or '',
+            int(version_dict.get('release') or -1),
+            )
+        
+        
+
 
 def version_txt():
     _prep_version_data()
     return '(%s)' % _version_string
+
+def getZopeVersion():
+    """return information about the Zope version as a named tuple.
+
+    Format of zope_version tuple:
+    (major <int>, minor <int>, micro <int>, status <string>, release <int>)
+    If unreleased, integers may be -1.
+    """
+    _prep_version_data()
+    return _zope_version

diff --git a/src/App/tests/test_getZopeVersion.py b/src/App/tests/test_getZopeVersion.py
new file mode 100644
index 000000000..eb2172ab8
--- /dev/null
+++ b/src/App/tests/test_getZopeVersion.py
@@ -0,0 +1,32 @@
+##############################################################################
+#
+# Copyright (c) 2004 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Tests for the recreated `getZopeVersion`."""
+
+import unittest
+
+from pkg_resources import get_distribution
+from App.version_txt import getZopeVersion
+
+class Test(unittest.TestCase):
+    def test_major(self):
+        self.assertEqual(
+            getZopeVersion().major,
+            int(get_distribution("Zope").version.split(".")[0])
+            )
+
+    def test_types(self):
+        zv = getZopeVersion()
+        for i in (0, 1, 2, 4):
+            self.assertIsInstance(zv[i], int, str(i))
+        self.assertIsInstance(zv[3], str, '3')

Reliable detecting the Zope version
Add-ons interacting with the ZMI need to provide different templates for Zope 2 (old style ZMI) and Zope 4 (bootstrap based ZMI). Therefore, there is a need to reliable distinguish those versions -- potentially via a mechanism analogous to Python's `sys.version_info`.
src/App/tests/test_getZopeVersion.py::Test::test_major src/App/tests/test_getZopeVersion.py::Test::test_types