diff --git a/docs/authors.rst b/docs/authors.rst
index c2c84fd3ee82beed38b885e56abbabc37be2786c..7120f21b2680654261513f03e25cefeb6158d5ea 100644
--- a/docs/authors.rst
+++ b/docs/authors.rst
@@ -9,3 +9,5 @@ Contributors
 ============
 
 `Jonathan Weth <https://github.com/hansegucker>`__ - dev@jonathanweth.de
+
+`Dominik George <https://www.openhub.net/accounts/Natureshadow>`__ - nik@naturalnet.de
diff --git a/docs/menugeneration.rst b/docs/menugeneration.rst
index 8818672f49b19219f5e6bdf285d9066d9bd519fd..b474b4e07ccb124fb1b2527ca0de391fa0ddc3fc 100644
--- a/docs/menugeneration.rst
+++ b/docs/menugeneration.rst
@@ -11,6 +11,7 @@ Django Menu Generator uses python dictionaries to represent the menu items, usua
         "url": URL spec,
         "root": True | False,
         "related_urls": [ list of related URLs ],
+        "related_views": [ list of related views ],
         "validators": [ list of validators ],
         "submenu": Dictionary like this
     }
@@ -25,6 +26,8 @@ Where each key is as follows:
 
 - ``related_urls``: If one of these URLs is part of the path on the currently opened page, the menu item will be marked as selected (format of URLs like described at :doc:`urls`)
 
+  - ``related_views``: If the currently opened page resolves to one of these views, the menu item will be marked as selected.
+
 - ``root``: A flag to indicate this item is the root of a path, with this you can correctly mark nested menus as selected.
 
 - ``validators``: See :doc:`validators`
diff --git a/menu_generator/menu.py b/menu_generator/menu.py
index c4e54eb3161374b3254d386f1d9b9515ddb4d02c..f772d44ea0d09d05abb0762b285a64632831b631 100755
--- a/menu_generator/menu.py
+++ b/menu_generator/menu.py
@@ -5,9 +5,9 @@ from django.core.exceptions import ImproperlyConfigured
 from .utils import get_callable, parse_url, path_startswith
 
 if django.VERSION >= (1, 10):  # pragma: no cover
-    from django.urls import reverse, NoReverseMatch
+    from django.urls import resolve, reverse, NoReverseMatch
 else:
-    from django.core.urlresolvers import reverse, NoReverseMatch
+    from django.core.urlresolvers import resolve, reverse, NoReverseMatch
 
 
 class MenuBase(object):
@@ -83,12 +83,20 @@ class MenuBase(object):
         related_urls = item_dict.get('related_urls', [])
         return [parse_url(url) for url in related_urls]
 
+    def _get_related_views(self, item_dict):
+        """
+        Given a menu item dictionary, it returns the relateds viewss or an empty list.
+        """
+        related_views = item_dict.get('related_views', [])
+        return related_views
+
     def _is_selected(self, item_dict):
         """
         Given a menu item dictionary, it returns true if `url` is on path,
         unless the item is marked as a root, in which case returns true if `url` is part of path.
 
         If related URLS are given, it also returns true if one of the related URLS is part of path.
+        If related views are given, it also returns true if the path maps to one of these views.
         """
         url = self._get_url(item_dict)
         if self._is_root(item_dict) and path_startswith(self.path, url):
@@ -100,6 +108,9 @@ class MenuBase(object):
             for related_url in self._get_related_urls(item_dict):
                 if path_startswith(self.path, related_url):
                     return True
+            # Resolve URL and check if it relates to a related views
+            if resolve(self.path).func in self._get_related_views(item_dict):
+                return True
         return False
 
     def _is_root(self, item_dict):
diff --git a/menu_generator/tests/test_menu.py b/menu_generator/tests/test_menu.py
index c25a89cc6b66a84f18290e5039b9f30bdb7a3844..6b46fd705cc1b5da04539a40aee4b0b4e9376ac3 100755
--- a/menu_generator/tests/test_menu.py
+++ b/menu_generator/tests/test_menu.py
@@ -2,6 +2,7 @@ from django.core.exceptions import ImproperlyConfigured
 from django.http import HttpRequest
 from django.test import TestCase
 
+from .urls import testview
 from .utils import TestUser, is_main_site, is_paid_user
 from ..menu import MenuBase
 from ..templatetags.menu_generator import get_menu
@@ -306,3 +307,48 @@ class MenuTestCase(TestCase):
         self.assertEqual(nav[0]["selected"], True)
         self.assertEqual(nav[0]["submenu"][0]["selected"], True)
         self.assertEqual(nav[0]["submenu"][1]["selected"], False)
+
+    def test_generate_menu_selected_related_views_simple(self):
+        self.request.user = TestUser(authenticated=True)
+        self.request.path = "/known-view/"
+        self.menu.save_user_state(self.request)
+        list_dict = [
+            {
+                "name": "parent1",
+                "url": "/user/account/",
+                "related_views": [testview],
+            }
+        ]
+        nav = self.menu.generate_menu(list_dict)
+
+        self.assertEqual(len(nav), 1)
+        self.assertEqual(nav[0]["selected"], True)
+
+    def test_generate_menu_selected_related_views_submenu(self):
+        self.request.user = TestUser(authenticated=True)
+        self.request.path = "/known-view/"
+        self.menu.save_user_state(self.request)
+        list_dict = [
+            {
+                "name": "parent1",
+                "url": "/user/account/",
+                "submenu": [
+                    {
+                        "name": "child1",
+                        "url": '/user/account/profile/',
+                        "related_views": [testview]
+                    },
+                    {
+                        "name": "child2",
+                        "url": 'named_url',
+                        "related_views": []
+                    },
+                ],
+            }
+        ]
+        nav = self.menu.generate_menu(list_dict)
+
+        self.assertEqual(len(nav), 1)
+        self.assertEqual(nav[0]["selected"], True)
+        self.assertEqual(nav[0]["submenu"][0]["selected"], True)
+        self.assertEqual(nav[0]["submenu"][1]["selected"], False)
diff --git a/menu_generator/tests/urls.py b/menu_generator/tests/urls.py
index fb9c4f1bc7746a8c9aaa9c3b6d2750caec04b09d..1ddb11b717d1db1d77c3a6e6206d855e1b80d469 100755
--- a/menu_generator/tests/urls.py
+++ b/menu_generator/tests/urls.py
@@ -1,7 +1,11 @@
 from django.conf.urls import url
 
+def testview(request):
+    return 'foo'
+
 urlpatterns = [
-    url('', lambda: 'foo'),
-    url('named-url', lambda: 'foo', name='named_url'),
-    url('named-with-params/(?P<pk>\d+)/', lambda: 'foo', name='named_with_params')
+    url(r'named-url', lambda: 'foo', name='named_url'),
+    url(r'named-with-params/(?P<pk>\d+)/', lambda: 'foo', name='named_with_params'),
+    url(r'known-view', testview, name='known_view'),
+    url(r'', lambda: 'foo'),
 ]