diff --git a/distro_tracker/core/package_tables.py b/distro_tracker/core/package_tables.py
index d445bb66286e16c9057a8d27c329620deb08805d..348d29c46a4fcea357d484607a2518a21b5ebe9a 100644
--- a/distro_tracker/core/package_tables.py
+++ b/distro_tracker/core/package_tables.py
@@ -11,9 +11,9 @@
 import logging
 import importlib
 
-from django.utils.functional import cached_property
 from django.db.models import Prefetch
 from django.conf import settings
+from django.template.loader import get_template
 
 from distro_tracker import vendor
 from django.core.exceptions import ObjectDoesNotExist
@@ -39,11 +39,7 @@ class BaseTableField(metaclass=PluginRegistry):
        ``tracker_package_tables`` module at the top level of a Django app.
     """
 
-    def __init__(self, package):
-        self.package = package
-
-    @property
-    def context(self):
+    def context(self, package):
         """
         Should return a dictionary representing context variables necessary for
         the package table field.
@@ -67,22 +63,15 @@ class BaseTableField(metaclass=PluginRegistry):
         """
         return None
 
-    @property
-    def html_output(self):
-        """
-        If the field does not want to use a template, it can return rendered
-        HTML in this property. The HTML needs to be marked safe or else it will
-        be escaped in the final output.
-        """
-        return None
-
-    @property
-    def has_content(self):
+    def render(self, package, context=None, request=None):
         """
-        Returns a bool indicating whether the table actually has any content to
-        display for the package.
+        Render the field's HTML output for the given package.
         """
-        return True
+        if not hasattr(self, '_template'):
+            self._template = get_template(self.template_name)
+        if context is None:
+            context = self.context(package)
+        return self._template.render(context, request)
 
     @property
     def prefetch_related_lookups():
@@ -124,25 +113,24 @@ class GeneralInformationTableField(BaseTableField):
         ),
     ]
 
-    @cached_property
-    def context(self):
+    def context(self, package):
         try:
-            info = self.package.general_data[0]
+            info = package.general_data[0]
         except IndexError:
             # There is no general info for the package
             return {
-                'url': self.package.get_absolute_url,
-                'name': self.package.name
+                'url': package.get_absolute_url,
+                'name': package.name
             }
 
         general = info.value
-        general['url'] = self.package.get_absolute_url
+        general['url'] = package.get_absolute_url
 
         # Add developer information links and any other vendor-specific extras
-        general = add_developer_extras(general)
+        general = add_developer_extras(general, url_only=True)
 
         try:
-            info = self.package.binaries_data[0]
+            info = package.binaries_data[0]
             general['binaries'] = info.value
         except IndexError:
             general['binaries'] = []
@@ -187,7 +175,7 @@ class VcsTableField(BaseTableField):
         Prefetch(
             'data',
             queryset=PackageData.objects.filter(key='general'),
-            to_attr='general_vcs_data'
+            to_attr='general_data'
         )
     ]
 
@@ -198,22 +186,22 @@ class VcsTableField(BaseTableField):
             'DISTRO_TRACKER_VCS_TABLE_FIELD_TEMPLATE',
             self._default_template_name)
 
-    @cached_property
-    def context(self):
+    def context(self, package):
         try:
-            info = self.package.general_vcs_data[0]
+            info = package.general_data[0]
         except IndexError:
             # There is no general info for the package
             return
 
-        general = info.value
-        # Map the VCS type to its name.
-        if 'vcs' in general:
+        general = {}
+        if 'vcs' in info.value:
+            general['vcs'] = info.value['vcs']
+            # Map the VCS type to its name.
             shorthand = general['vcs'].get('type', 'Unknown')
             general['vcs']['full_name'] = get_vcs_name(shorthand)
 
         result, implemented = vendor.call(
-            'get_vcs_data', self.package)
+            'get_vcs_data', package)
 
         if implemented:
             general.update(result)
@@ -234,7 +222,7 @@ class ArchiveTableField(BaseTableField):
         Prefetch(
             'data',
             queryset=PackageData.objects.filter(key='general'),
-            to_attr='general_archive_data'
+            to_attr='general_data'
         ),
         Prefetch(
             'data',
@@ -243,18 +231,19 @@ class ArchiveTableField(BaseTableField):
         )
     ]
 
-    @cached_property
-    def context(self):
+    def context(self, package):
         try:
-            info = self.package.general_archive_data[0]
+            info = package.general_data[0]
         except IndexError:
             # There is no general info for the package
             return
 
-        general = info.value
+        general = {}
+        if 'version' in info.value:
+            general['version'] = info.value['version']
 
         try:
-            info = self.package.versions[0].value
+            info = package.versions[0].value
             general['default_pool_url'] = info['default_pool_url']
         except IndexError:
             # There is no versions info for the package
@@ -271,11 +260,10 @@ class BugStatsTableField(BaseTableField):
     template_name = 'core/package-table-fields/bugs.html'
     prefetch_related_lookups = ['bug_stats']
 
-    @cached_property
-    def context(self):
+    def context(self, package):
         stats = {}
         try:
-            stats['bugs'] = self.package.bug_stats.stats
+            stats['bugs'] = package.bug_stats.stats
         except ObjectDoesNotExist:
             stats['all'] = 0
             return stats
@@ -317,7 +305,6 @@ class BasePackageTable(metaclass=PluginRegistry):
         self.scope = scope
         self.limit = limit
 
-    @property
     def context(self):
         """
         Should return a dictionary representing context variables necessary for
@@ -354,9 +341,15 @@ class BasePackageTable(metaclass=PluginRegistry):
         Returns the list of packages with prefetched relationships defined by
         table fields
         """
+        attributes_name = set()
         package_query_set = self.packages
         for field in self.table_fields:
             for l in field.prefetch_related_lookups:
+                if isinstance(l, Prefetch):
+                    if l.to_attr in attributes_name:
+                        continue
+                    else:
+                        attributes_name.add(l.to_attr)
                 package_query_set = package_query_set.prefetch_related(l)
 
         additional_data, implemented = vendor.call(
@@ -419,10 +412,18 @@ class BasePackageTable(metaclass=PluginRegistry):
         if self.limit:
             packages = packages[:self.limit]
 
+        fields = [f() for f in self.table_fields]
+        context = {
+            'field': {
+                'context': ''
+            },
+        }
         for package in packages:
+            context['package'] = package
             row = []
-            for field_class in self.table_fields:
-                row.append(field_class(package))
+            for field in fields:
+                context['field']['context'] = field.context(package)
+                row.append(field.render(package, context))
             rows_list.append(row)
 
         return rows_list
diff --git a/distro_tracker/core/templates/core/package-table-fields/bugs.html b/distro_tracker/core/templates/core/package-table-fields/bugs.html
index 83ebb4c0b29e9386bcce8c45ec33fcad9aedf846..30a10d9785f898a59db69940c3434ad87d20c074 100644
--- a/distro_tracker/core/templates/core/package-table-fields/bugs.html
+++ b/distro_tracker/core/templates/core/package-table-fields/bugs.html
@@ -1,7 +1,13 @@
 {% if field.context.all == 0 %}
   <b class='center'>{{field.context.all}}</b>
 {% else %}
-  <span class="popover-hover cursor-pointer text-primary" id="bugs-field" data-toggle="popover" data-placement="left" title="All bugs" data-content='{% include "core/package-table-fields/popovers/bugs.html" with field=field %}'>
+  <span class="popover-hover cursor-pointer text-primary" id="bugs-field" data-toggle="popover" data-placement="left" title="All bugs" data-content='
+    <p>
+    {% for bug in field.context.bugs %}
+      <span class="font-weight-bold">{{ bug.category_name}}:</span> {{ bug.bug_count }}
+      <br>
+    {% endfor %}
+  '>
     <b class='center'>{{field.context.all}}</b>
   </span>
 {% endif %}
diff --git a/distro_tracker/core/templates/core/package-table-fields/general.html b/distro_tracker/core/templates/core/package-table-fields/general.html
index c6aeb31876c2014f3c11b5c1a5a015dd01be72dc..f87085ad8dacb25b183f008667a552a52df3ee55 100644
--- a/distro_tracker/core/templates/core/package-table-fields/general.html
+++ b/distro_tracker/core/templates/core/package-table-fields/general.html
@@ -1,3 +1,56 @@
-<span class="popover-hover cursor-pointer text-primary" id="general-field" data-toggle="popover" data-placement="right" title="<a href='{{ field.context.url }}'>{{ field.context.name }}</a>" data-content='{% include "core/package-table-fields/popovers/general.html" with field=field %}'>
+<span class="popover-hover cursor-pointer text-primary" id="general-field" data-toggle="popover" data-placement="right" title="<a href='{{ field.context.url }}'>{{ field.context.name }}</a>" data-content='
+  <p>
+  <span class="font-weight-bold">version:</span> {{ field.context.version }} <br>
+  {% if field.context.maintainer %}
+  <span class="font-weight-bold">maintainer:</span>
+    {% with mailto="mailto:"|add:field.context.maintainer.email %}
+    {% with url=field.context.maintainer.developer_info_url|default:mailto %}
+    <a href="{{ url }}">{{ field.context.maintainer.name }}</a>
+    {% endwith %}{% endwith %}
+    <br>
+  {% endif %}
+
+  {% if field.context.uploaders %}
+    <span class="font-weight-bold">uploaders:</span>
+    {% for uploader in field.context.uploaders %}
+      {% with mailto="mailto:"|add:uploader.email %}
+      {% with url=uploader.developer_info_url|default:mailto %}
+      <br><a href="{{ url }}">{{ uploader.name }}</a>
+      {% endwith %}{% endwith %}
+    {% endfor %}
+    <br>
+  {% endif %}
+
+  {% if field.context.architectures %}
+    <span class="font-weight-bold">arch:</span>
+    {{ field.context.architectures|join:", " }}
+    <br>
+  {% endif %}
+
+  {% if field.context.standards_version %}
+    <span class="font-weight-bold">std-ver:</span>
+    {{ field.context.standards_version }}
+    <br>
+  {% endif %}
+  </p>
+
+  <p>
+  {% with items=field.context.binaries|dictsort:"name"|slice:":5" %}
+    <span class="font-weight-bold">Binaries ({{field.context.binaries|length}}):</span>
+    {% for item in items %}
+      <br>
+      {% with url=item.url|default:"#" %}
+      <a href="{{ url }}" title="{{ item.repository_name }}">{{ item.name }}</a>
+      {% endwith %}
+    {% endfor %}
+    {% with count=field.context.binaries|length %}
+    {% if count > 5 %}
+      <br>
+      <a href="{{ field.context.url }}"><small>More...</small></a>
+    {% endif %}
+    {% endwith %}
+  {% endwith %}
+  </p>
+'>
 	<a href='{{ field.context.url }}'>{{ field.context.name }}</a>
 </span>
diff --git a/distro_tracker/core/templates/core/package-table-fields/popovers/bugs.html b/distro_tracker/core/templates/core/package-table-fields/popovers/bugs.html
deleted file mode 100644
index b971f1bd58893b563ab58fd1d6b060cc1ab0228c..0000000000000000000000000000000000000000
--- a/distro_tracker/core/templates/core/package-table-fields/popovers/bugs.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<p>
-{% for bug in field.context.bugs %}
-  <span class="font-weight-bold">{{ bug.category_name}}:</span> {{ bug.bug_count }}
-  <br>
-{% endfor %}
diff --git a/distro_tracker/core/templates/core/package-table-fields/popovers/general.html b/distro_tracker/core/templates/core/package-table-fields/popovers/general.html
deleted file mode 100644
index a7bcaf5775cedf12491b6c88030504b0124f59c8..0000000000000000000000000000000000000000
--- a/distro_tracker/core/templates/core/package-table-fields/popovers/general.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<p>
-<span class="font-weight-bold">version:</span> {{ field.context.version }} <br>
-{% if field.context.maintainer %}
-<span class="font-weight-bold">maintainer:</span>
-  {% with mailto="mailto:"|add:field.context.maintainer.email %}
-  {% with url=field.context.maintainer.developer_info_url|default:mailto %}
-  <a href="{{ url }}">{{ field.context.maintainer.name }}</a>
-  {% endwith %}{% endwith %}
-  <br>
-{% endif %}
-
-{% if field.context.uploaders %}
-  <span class="font-weight-bold">uploaders:</span>
-  {% for uploader in field.context.uploaders %}
-    {% with mailto="mailto:"|add:uploader.email %}
-    {% with url=uploader.developer_info_url|default:mailto %}
-    <br><a href="{{ url }}">{{ uploader.name }}</a>
-    {% endwith %}{% endwith %}
-  {% endfor %}
-  <br>
-{% endif %}
-
-{% if field.context.architectures %}
-  <span class="font-weight-bold">arch:</span>
-  {{ field.context.architectures|join:', ' }}
-  <br>
-{% endif %}
-
-{% if field.context.standards_version %}
-  <span class="font-weight-bold">std-ver:</span>
-  {{ field.context.standards_version }}
-  <br>
-{% endif %}
-</p>
-
-<p>
-{% with items=field.context.binaries|dictsort:'name'|slice:":5" %}
-  <span class="font-weight-bold">Binaries ({{field.context.binaries|length}}):</span>
-  {% for item in items %}
-    <br>
-    {% with url=item.url|default:"#" %}
-    <a href="{{ url }}" title="{{ item.repository_name }}">{{ item.name }}</a>
-    {% endwith %}
-  {% endfor %}
-  {% with count=field.context.binaries|length %}
-  {% if count > 5 %}
-    <br>
-    <a href="{{ field.context.url }}"><small>More...</small></a>
-  {% endif %}
-  {% endwith %}
-{% endwith %}
-</p>
diff --git a/distro_tracker/core/templates/core/package-table.html b/distro_tracker/core/templates/core/package-table.html
index 37fd2d9ad70e97b4653b669cbc6951cfef41983c..467e4575a5af83b05d669dd1f5980de331580699 100644
--- a/distro_tracker/core/templates/core/package-table.html
+++ b/distro_tracker/core/templates/core/package-table.html
@@ -13,13 +13,9 @@
         {% with rows=table.rows %}
           {% for row in rows %}
           <tr scope='row'>
-            {% for field in row %}
+            {% for cell in row %}
             <td class='center' scope='col'>
-              {% if field.template_name %}
-                {% include field.template_name with field=field %}
-              {% else %}
-                {{ field.html_output }}
-              {% endif %}
+	            {{ cell }}
             </td>
             {% endfor %}
           </tr>
diff --git a/distro_tracker/core/tests/tests_package_tables.py b/distro_tracker/core/tests/tests_package_tables.py
index e595921d604795416c31a6576f2a57e7bbf56d1c..09f637752db86ca1553286893bd56c36e6ac8e0a 100644
--- a/distro_tracker/core/tests/tests_package_tables.py
+++ b/distro_tracker/core/tests/tests_package_tables.py
@@ -82,13 +82,13 @@ class GeneralInformationTableFieldTests(TestCase):
         self.package = create_source_package_with_data('dummy-package')
         self.package.general_data = self.package.data.filter(key='general')
         self.package.binaries_data = self.package.data.filter(key='binaries')
-        self.field = GeneralInformationTableField(self.package)
+        self.field = GeneralInformationTableField()
 
     def test_field_context(self):
         """
         Tests field context content
         """
-        context = self.field.context
+        context = self.field.context(self.package)
         self.assertEqual(context['url'], self.package.get_absolute_url)
         self.assertTrue(context['vcs'])
         self.assertIn('type', context['vcs'])
@@ -103,8 +103,6 @@ class GeneralInformationTableFieldTests(TestCase):
         Tests field specific properties
         """
         self.assertEqual(self.field.column_name, 'Package')
-        self.assertTrue(self.field.has_content)
-        self.assertIsNone(self.field.html_output)
         self.assertEqual(
             self.field.template_name, 'core/package-table-fields/general.html')
         self.assertEqual(len(self.field.prefetch_related_lookups), 2)
@@ -113,14 +111,14 @@ class GeneralInformationTableFieldTests(TestCase):
 class VcsTableFieldTests(TestCase):
     def setUp(self):
         self.package = create_source_package_with_data('dummy-package')
-        self.package.general_vcs_data = self.package.data.all()
-        self.field = VcsTableField(self.package)
+        self.package.general_data = self.package.data.all()
+        self.field = VcsTableField()
 
     def test_field_context(self):
         """
         Tests field context content
         """
-        context = self.field.context
+        context = self.field.context(self.package)
         self.assertTrue(context['vcs'])
         self.assertIn('type', context['vcs'])
         self.assertIn('url', context['vcs'])
@@ -132,8 +130,6 @@ class VcsTableFieldTests(TestCase):
         Tests field specific properties
         """
         self.assertEqual(self.field.column_name, 'VCS')
-        self.assertTrue(self.field.has_content)
-        self.assertIsNone(self.field.html_output)
         self.assertEqual(
             self.field.template_name,
             'core/package-table-fields/vcs.html')
@@ -143,17 +139,17 @@ class VcsTableFieldTests(TestCase):
 class ArchiveTableFieldTests(TestCase):
     def setUp(self):
         self.package = create_source_package_with_data('dummy-package')
-        self.package.general_archive_data = self.package.data.filter(
+        self.package.general_data = self.package.data.filter(
             key='general')
         self.package.versions = self.package.data.filter(
             key='versions')
-        self.field = ArchiveTableField(self.package)
+        self.field = ArchiveTableField()
 
     def test_field_context(self):
         """
         Tests field context content
         """
-        context = self.field.context
+        context = self.field.context(self.package)
         self.assertTrue(context['version'])
         self.assertTrue(context['default_pool_url'])
 
@@ -162,8 +158,6 @@ class ArchiveTableFieldTests(TestCase):
         Tests field specific properties
         """
         self.assertEqual(self.field.column_name, 'Archive')
-        self.assertTrue(self.field.has_content)
-        self.assertIsNone(self.field.html_output)
         self.assertEqual(
             self.field.template_name,
             'core/package-table-fields/archive.html')
@@ -174,13 +168,13 @@ class BugStatsTableFieldTests(TestCase):
     def setUp(self):
         self.package = create_source_package_with_data('dummy-package')
         create_package_bug_stats(self.package)
-        self.field = BugStatsTableField(self.package)
+        self.field = BugStatsTableField()
 
     def test_field_context(self):
         """
         Tests field context content
         """
-        context = self.field.context
+        context = self.field.context(self.package)
         self.assertTrue(context['all'])
         self.assertEqual(context['all'], 11)
         self.assertEqual(len(context['bugs']), 3)
@@ -193,8 +187,6 @@ class BugStatsTableFieldTests(TestCase):
         Tests field specific properties
         """
         self.assertEqual(self.field.column_name, 'Bugs')
-        self.assertTrue(self.field.has_content)
-        self.assertIsNone(self.field.html_output)
         self.assertEqual(
             self.field.template_name,
             'core/package-table-fields/bugs.html')
@@ -227,14 +219,11 @@ class GeneralTeamPackageTableTests(TestCase, TemplateTestsMixin):
                 return table
         return False
 
-    def assert_number_of_queries(self, table):
-        number_of_queries = 1 + sum(
-            len(f.prefetch_related_lookups) for f in table.table_fields)
-
+    def assert_number_of_queries(self, table, number_of_queries):
         with self.assertNumQueries(number_of_queries):
             for row in table.rows:
-                for field in row:
-                    field.context
+                for cell in row:
+                    self.assertIsNotNone(cell)
 
     def test_table_displayed(self):
         """
@@ -293,12 +282,12 @@ class GeneralTeamPackageTableTests(TestCase, TemplateTestsMixin):
         queries regardless of the number of packages
         """
         table = GeneralTeamPackageTable(self.team)
-        self.assert_number_of_queries(table)
+        self.assert_number_of_queries(table, 5)
 
         new_package = create_source_package_with_data('another-dummy-package')
         create_package_bug_stats(new_package)
         self.team.packages.add(new_package)
-        self.assert_number_of_queries(table)
+        self.assert_number_of_queries(table, 5)
 
     def test_table_limit_of_packages(self):
         """
@@ -312,12 +301,14 @@ class GeneralTeamPackageTableTests(TestCase, TemplateTestsMixin):
         self.assertEqual(len(table.rows), 1)
         # Get the first column from the first row
         table_field = table.rows[0][0]
-        self.assertEqual(self.package, table_field.package)
+        self.assertIn(self.package.name, table_field)
 
         table.limit = 2
         # Get the first column from the first row
         table_field = table.rows[0][0]
-        self.assertEqual(self.package, table_field.package)
+        self.assertIn(self.package.name, table_field)
+        self.assertNotIn(new_package.name, table_field)
         # Get the first column from the second row
         table_field = table.rows[1][0]
-        self.assertEqual(new_package, table_field.package)
+        self.assertIn(new_package.name, table_field)
+        # Get the first column from the second row
diff --git a/distro_tracker/core/utils/__init__.py b/distro_tracker/core/utils/__init__.py
index d368f28cfe9a3c4664788d373674fa65981cd1a6..f28ab8849977227d5320cfe154b764b2425566a9 100644
--- a/distro_tracker/core/utils/__init__.py
+++ b/distro_tracker/core/utils/__init__.py
@@ -266,7 +266,7 @@ def get_developer_information_url(email):
         return info_url
 
 
-def add_developer_extras(general):
+def add_developer_extras(general, url_only=False):
     """
     Receives a general dict with package data and add to it more data
     regarding that package's developers
@@ -276,20 +276,23 @@ def add_developer_extras(general):
         url = get_developer_information_url(maintainer_email)
         if url:
             general['maintainer']['developer_info_url'] = url
-            extra, implemented = vendor.call(
-                'get_maintainer_extra', maintainer_email, general['name'])
-            general['maintainer']['extra'] = extra
+            if not url_only:
+                extra, implemented = vendor.call(
+                    'get_maintainer_extra', maintainer_email, general['name'])
+                general['maintainer']['extra'] = extra
 
     uploaders = general.get('uploaders', None)
     if uploaders:
         for uploader in uploaders:
+            url = get_developer_information_url(uploader['email'])
+            if url:
+                uploader['developer_info_url'] = url
+            if url_only:
+                continue
             # Vendor specific extras.
             extra, implemented = vendor.call(
                 'get_uploader_extra', uploader['email'], general['name'])
             if implemented and extra:
                 uploader['extra'] = extra
-            url = get_developer_information_url(uploader['email'])
-            if url:
-                uploader['developer_info_url'] = url
 
     return general
diff --git a/distro_tracker/vendor/debian/rules.py b/distro_tracker/vendor/debian/rules.py
index d2ffd6706e35c0e6ff2e97d2a3d87fb68408ded0..ed39f621496dd87208d3e33fcbee47e206c7cfa5 100644
--- a/distro_tracker/vendor/debian/rules.py
+++ b/distro_tracker/vendor/debian/rules.py
@@ -840,7 +840,8 @@ def additional_prefetch_related_lookups():
         Prefetch(
             'action_items',
             queryset=ActionItem.objects.filter(
-                item_type__type_name='vcswatch-warnings-and-errors'),
+                item_type__type_name='vcswatch-warnings-and-errors'
+            ).prefetch_related('item_type'),
         ),
         Prefetch(
             'data',
@@ -857,10 +858,10 @@ def get_vcs_data(package):
     <distro_tracker.project.local_settings.DISTRO_TRACKER_VCS_TABLE_FIELD_TEMPLATE>`
     settings.
     """
+    data = {}
     try:
-        data = {}
         item = package.vcswatch_data[0]
-        data['vcs_extra_data'] = item.value
+        data['changelog_version'] = item.value['changelog_version']
     except IndexError:
         # There is no vcs extra data for the package
         pass
diff --git a/distro_tracker/vendor/debian/templates/debian/package-table-fields/popovers/vcs.html b/distro_tracker/vendor/debian/templates/debian/package-table-fields/popovers/vcs.html
deleted file mode 100644
index 2cbe56c0479a951c36f33a80fa70cd5f880b91c3..0000000000000000000000000000000000000000
--- a/distro_tracker/vendor/debian/templates/debian/package-table-fields/popovers/vcs.html
+++ /dev/null
@@ -1,4 +0,0 @@
-{{ field.context.action_item.short_description }}
-
-<hr>
-<a href="{{ field.context.action_item.url }}" class="text-primary">More details</a>
diff --git a/distro_tracker/vendor/debian/templates/debian/package-table-fields/vcs.html b/distro_tracker/vendor/debian/templates/debian/package-table-fields/vcs.html
index 10a5895381b5629d29bcbbc4d987b833d39ecf64..5c227a5b87b75f23a738fb57449118b58ec4fffa 100644
--- a/distro_tracker/vendor/debian/templates/debian/package-table-fields/vcs.html
+++ b/distro_tracker/vendor/debian/templates/debian/package-table-fields/vcs.html
@@ -1,7 +1,12 @@
 <div id='vcs-field'>
-  <a href='{{ field.context.vcs.browser }}'>{{ field.context.vcs_extra_data.changelog_version }} <small>({{ field.context.vcs.full_name }})</small></a>
+  <a href='{{ field.context.vcs.browser }}'>{{ field.context.changelog_version }} <small>({{ field.context.vcs.full_name }})</small></a>
   {% if field.context.action_item != None %}
-    <span class="popover-hover cursor-pointer label label-{{field.context.action_item.severity.label_type}}" data-toggle="popover" data-placement="left" title="Issue with <b>{{ field.context.action_item.severity.name }}</b> severity" data-content='{% include "debian/package-table-fields/popovers/vcs.html" with field=field %}'>
+    <span class="popover-hover cursor-pointer label label-{{field.context.action_item.severity.label_type}}" data-toggle="popover" data-placement="left" title="Issue with <b>{{ field.context.action_item.severity.name }}</b> severity" data-content='
+      {{ field.context.action_item.short_description }}
+
+      <hr>
+      <a href="{{ field.context.action_item.url }}" class="text-primary">More details</a>
+    '>
       action needed
     </span>
   {% endif %}
diff --git a/distro_tracker/vendor/debian/tests.py b/distro_tracker/vendor/debian/tests.py
index 015c9c3eb865e9dedce9ea1553486e2d37de97c4..66c870293b730dd1fd97e16c1b533360cb18ca1a 100644
--- a/distro_tracker/vendor/debian/tests.py
+++ b/distro_tracker/vendor/debian/tests.py
@@ -6010,15 +6010,15 @@ class UpstreamTableFieldTests(TestCase):
             }
         }
         self.data.save()
-        self.package.general_upstream_data = self.package.data.filter(
+        self.package.general_data = self.package.data.filter(
             key='general')
-        self.field = UpstreamTableField(self.package)
+        self.field = UpstreamTableField()
 
     def test_field_context(self):
         """
         Tests field contex content
         """
-        context = self.field.context
+        context = self.field.context(self.package)
         self.assertTrue(context['version'])
         self.assertTrue(context['url'])
 
@@ -6027,8 +6027,6 @@ class UpstreamTableFieldTests(TestCase):
         Tests field specific properties
         """
         self.assertEqual(self.field.column_name, 'Upstream')
-        self.assertTrue(self.field.has_content)
-        self.assertIsNone(self.field.html_output)
         self.assertEqual(
             self.field.template_name,
             'debian/package-table-fields/upstream.html')
diff --git a/distro_tracker/vendor/debian/tracker_package_tables.py b/distro_tracker/vendor/debian/tracker_package_tables.py
index 3bf1a85f3f1e403b47dfdbae10f76b1a92a4ff06..870d6f141bffe22196ebae16b8f9d1a1f1954e59 100644
--- a/distro_tracker/vendor/debian/tracker_package_tables.py
+++ b/distro_tracker/vendor/debian/tracker_package_tables.py
@@ -10,7 +10,6 @@
 # including this file, may be copied, modified, propagated, or distributed
 # except according to the terms contained in the LICENSE file.
 
-from django.utils.functional import cached_property
 from django.db.models import Prefetch
 from distro_tracker.core.models import (
     PackageData,
@@ -31,14 +30,13 @@ class UpstreamTableField(BaseTableField):
         Prefetch(
             'data',
             queryset=PackageData.objects.filter(key='general'),
-            to_attr='general_upstream_data'
+            to_attr='general_data'
         ),
     ]
 
-    @cached_property
-    def context(self):
+    def context(self, package):
         try:
-            info = self.package.general_upstream_data[0]
+            info = package.general_data[0]
             if 'upstream' in info.value:
                 return info.value['upstream']
         except IndexError: