diff --git a/debexpo/controllers/my.py b/debexpo/controllers/my.py
index 32953b5..eea715f 100644
--- a/debexpo/controllers/my.py
+++ b/debexpo/controllers/my.py
@@ -41,6 +41,7 @@ import md5
 from debexpo.lib.base import *
 from debexpo.lib import constants, form
 from debexpo.lib.schemas import DetailsForm, GpgForm, PasswordForm, OtherDetailsForm
+from debexpo.lib.utils import parse_key_id
 
 from debexpo.model import meta
 from debexpo.model.users import User
@@ -92,11 +93,13 @@ class MyController(BaseController):
         if self.form_result['delete_gpg'] and self.user.gpg is not None:
             log.debug('Deleting current GPG key')
             self.user.gpg = None
+            self.user.gpg_id = None
 
         # Should the key be updated.
         if 'gpg' in self.form_result and self.form_result['gpg'] is not None:
             log.debug('Setting a new GPG key')
             self.user.gpg = self.form_result['gpg'].value
+            self.user.gpg_id = parse_key_id(self.user.gpg)
 
         meta.session.commit()
 
@@ -207,8 +210,7 @@ class MyController(BaseController):
 
         # Enable the form to show information on the user's GPG key.
         if self.user.gpg is not None:
-            # TODO: Make this display the right key ID.
-            c.currentgpg = '0xXXXXXX'
+            c.currentgpg = c.user.gpg_id
 
         log.debug('Rendering page')
         return render('/my/index.mako')
diff --git a/debexpo/lib/schemas.py b/debexpo/lib/schemas.py
index 3113c62..aef80a7 100644
--- a/debexpo/lib/schemas.py
+++ b/debexpo/lib/schemas.py
@@ -37,6 +37,8 @@ __license__ = 'MIT'
 
 import formencode
 
+from pylons import config
+
 from debexpo.lib.validators import NewEmailToSystem, NewDebianEmailToSystem, GpgKey, \
     CurrentPassword, CheckBox
 
@@ -68,6 +70,7 @@ class GpgForm(MyForm):
     Schema for updating the user's GPG key in the my controller.
     """
     gpg = GpgKey()
+    gpg_id = gpg.key_id()
     delete_gpg = formencode.validators.Int()
 
 class PasswordForm(MyForm):
@@ -118,4 +121,7 @@ class SponsorForm(RegisterForm):
     """
     Schema for the sponsor registration form in the register controller.
     """
-    email = NewDebianEmailToSystem(not_empty=True)
+    if config['debug']: # allow non-DD emails for debugging
+        email = NewEmailToSystem(not_empty=True)
+    else:
+        email = NewDebianEmailToSystem(not_empty=True)
diff --git a/debexpo/lib/utils.py b/debexpo/lib/utils.py
index 5b93774..92fe878 100644
--- a/debexpo/lib/utils.py
+++ b/debexpo/lib/utils.py
@@ -35,6 +35,7 @@ __author__ = 'Jonny Lamb'
 __copyright__ = 'Copyright © 2008 Jonny Lamb'
 __license__ = 'MIT'
 
+import commands
 import os
 import md5
 
@@ -105,3 +106,19 @@ def md5sum(filename):
     f.close()
 
     return sum.hexdigest()
+
+def parse_key_id(key):
+    """
+    Returns the key id of the given GPG public key.
+
+    ``key``
+        ASCII armored GPG public key.
+    """
+    cmd = 'echo "%s" | gpg2' % key
+    status, output = commands.getstatusoutput(cmd)
+    if status != 0:
+        return None
+    try:
+        return output.split()[1]
+    except KeyError:
+        return None
diff --git a/debexpo/lib/validators.py b/debexpo/lib/validators.py
index e13bbfc..7c191ad 100644
--- a/debexpo/lib/validators.py
+++ b/debexpo/lib/validators.py
@@ -40,6 +40,7 @@ import logging
 import md5
 
 from debexpo.lib.base import *
+from debexpo.lib.utils import parse_key_id
 
 from debexpo.model import meta
 from debexpo.model.users import User
@@ -52,6 +53,9 @@ class GpgKey(formencode.validators.FieldStorageUploadConverter):
     text.
     """
 
+    def __init__(self):
+        self.gpg_id = None
+
     def _to_python(self, value, c):
         """
         Validate the GPG key.
@@ -65,8 +69,16 @@ class GpgKey(formencode.validators.FieldStorageUploadConverter):
             log.error('GPG key does not start with BEGIN PGP PUBLIC KEY BLOCK')
             raise formencode.Invalid(_('Invalid GPG key'), value, c)
 
+        self.gpg_id = parse_key_id(value.value)
+        if self.gpg_id is None:
+            log.error("Failed to parse GPG key")
+            raise formencode.Invalid(_('Invalid GPG key'), value, c)
+
         return formencode.validators.FieldStorageUploadConverter._to_python(self, value, c)
 
+    def key_id(self):
+        return self.gpg_id
+
 class CurrentPassword(formencode.validators.String):
     """
     Validator for a current password depending on the session's user_id.
diff --git a/debexpo/model/users.py b/debexpo/model/users.py
index a141300..c87df58 100644
--- a/debexpo/model/users.py
+++ b/debexpo/model/users.py
@@ -47,6 +47,7 @@ t_users = sa.Table('users', meta.metadata,
     sa.Column('name', sa.types.String(200), nullable=False),
     sa.Column('email', sa.types.String(200), nullable=False),
     sa.Column('gpg', sa.types.Text, nullable=True),
+    sa.Column('gpg_id', sa.types.String(30), nullable=True),
     sa.Column('password', sa.types.String(200), nullable=False),
     sa.Column('lastlogin', sa.types.DateTime, nullable=False),
     sa.Column('type', sa.types.Integer, nullable=False, default=USER_TYPE_NORMAL),
diff --git a/debexpo/public/style.css b/debexpo/public/style.css
index 15aa607..2bd5e35 100644
--- a/debexpo/public/style.css
+++ b/debexpo/public/style.css
@@ -246,6 +246,7 @@ li
 td
 {
     vertical-align: top;
+    padding-left: 6px;
 }
 
 /* Table rows with light lines seperating the rows */

