diff --git a/tests/test_mail.py b/tests/test_mail.py
index 0ea10982647b3850ecea9d6218f6e557994fbfea..ab8abe5b96ee86303d1295e8c2429076ab212a66 100644
--- a/tests/test_mail.py
+++ b/tests/test_mail.py
@@ -31,7 +31,7 @@ class TestMailViews(UffdTestCase):
 		self.assertEqual(r.status_code, 200)
 
 	def test_show(self):
-		r = self.client.get(path=url_for('mail.show', uid=self.get_mail().uid), follow_redirects=True)
+		r = self.client.get(path=url_for('mail.show', mai_id=self.get_mail().id), follow_redirects=True)
 		dump('mail_show', r)
 		self.assertEqual(r.status_code, 200)
 
@@ -46,7 +46,7 @@ class TestMailViews(UffdTestCase):
 		self.assertEqual(m.uid, 'test')
 		self.assertEqual(sorted(m.receivers), ['test1@example.com', 'test2@example.com'])
 		self.assertEqual(sorted(m.destinations), ['testuser@mail.example.com'])
-		r = self.client.post(path=url_for('mail.update', uid=m.uid),
+		r = self.client.post(path=url_for('mail.update', mail_id=m.id),
 			data={'mail-uid': 'test1', 'mail-receivers': 'foo@bar.com\ntest@bar.com',
 			'mail-destinations': 'testuser@mail.example.com\ntestadmin@mail.example.com'}, follow_redirects=True)
 		dump('mail_update', r)
@@ -83,7 +83,7 @@ class TestMailViews(UffdTestCase):
 
 	def test_delete(self):
 		self.assertIsNotNone(self.get_mail())
-		r = self.client.get(path=url_for('mail.delete', uid=self.get_mail().uid), follow_redirects=True)
+		r = self.client.get(path=url_for('mail.delete', mail_id=self.get_mail().id), follow_redirects=True)
 		dump('mail_delete', r)
 		self.assertEqual(r.status_code, 200)
 		self.assertIsNone(self.get_mail())
diff --git a/uffd/mail/templates/mail/list.html b/uffd/mail/templates/mail/list.html
index c61bfda65dde7580ed996d99df53f5fd84ccd067..c2e4e8a7468ab85f005324973fe409c1976ec90f 100644
--- a/uffd/mail/templates/mail/list.html
+++ b/uffd/mail/templates/mail/list.html
@@ -18,9 +18,9 @@
 			</thead>
 			<tbody>
 				{% for mail in mails|sort(attribute="uid") %}
-				<tr id="mail-{{ mail.uid }}">
+				<tr id="mail-{{ mail.id }}">
 					<th scope="row">
-						<a href="{{ url_for("mail.show", uid=mail.uid) }}">
+						<a href="{{ url_for("mail.show", mail_id=mail.id) }}">
 						{{ mail.uid }}
 						</a>
 					</th>
diff --git a/uffd/mail/templates/mail/show.html b/uffd/mail/templates/mail/show.html
index 44b0db5c2bfd8fcddf21faebb81bf1d46c8989bd..0f11fa9cd71518520c6358fd93904715b27ab9a7 100644
--- a/uffd/mail/templates/mail/show.html
+++ b/uffd/mail/templates/mail/show.html
@@ -1,11 +1,11 @@
 {% extends 'base.html' %}
 
 {% block body %}
-<form action="{{ url_for("mail.update", uid=mail.uid) }}" method="POST">
+<form action="{{ url_for("mail.update", mail_id=mail.id) }}" method="POST">
 <div class="align-self-center">
 	<div class="form-group col">
 		<label for="mail-name">{{_('Name')}}</label>
-		<input type="text" class="form-control" id="mail-name" name="mail-uid" {% if mail.uid %} value="{{ mail.uid }}" readonly {% else %} value=""{% endif %}>
+		<input type="text" class="form-control" id="mail-name" name="mail-uid" {% if mail.id %} value="{{ mail.uid }}" readonly {% else %} value=""{% endif %}>
 		<small class="form-text text-muted">
 		</small>
 	</div>
@@ -26,8 +26,8 @@
 	<div class="form-group col">
 		<button type="submit" class="btn btn-primary"><i class="fa fa-save" aria-hidden="true"></i> {{_('Save')}}</button>
 		<a href="{{ url_for("mail.index") }}" class="btn btn-secondary">{{_('Cancel')}}</a>
-		{% if mail.uid %}
-			<a href="{{ url_for("mail.delete", uid=mail.uid) }}" class="btn btn-danger"><i class="fa fa-trash" aria-hidden="true"></i> {{_('Delete')}}</a>
+		{% if mail.id %}
+			<a href="{{ url_for("mail.delete", mail_id=mail.id) }}" class="btn btn-danger"><i class="fa fa-trash" aria-hidden="true"></i> {{_('Delete')}}</a>
 		{% else %}
 			<a href="#" class="btn btn-danger disabled"><i class="fa fa-trash" aria-hidden="true"></i> {{_('Delete')}}</a>
 		{% endif %}
diff --git a/uffd/mail/views.py b/uffd/mail/views.py
index 6f3f0c97c2a9b564758945e1ff22e6ef4bcd4be3..30981efa38f617eae29ca71d9b8b7dee4b023c6b 100644
--- a/uffd/mail/views.py
+++ b/uffd/mail/views.py
@@ -23,20 +23,21 @@ def mail_acl():
 def index():
 	return render_template('mail/list.html', mails=Mail.query.all())
 
-@bp.route("/<uid>")
+@bp.route("/<int:mail_id>")
 @bp.route("/new")
-def show(uid=None):
-	mail = Mail()
-	if uid is not None:
-		mail = Mail.query.filter_by(uid=uid).first_or_404()
+def show(mail_id=None):
+	if mail_id is not None:
+		mail = Mail.query.get_or_404(mail_id)
+	else:
+		mail = Mail()
 	return render_template('mail/show.html', mail=mail)
 
-@bp.route("/<uid>/update", methods=['POST'])
+@bp.route("/<int:mail_id>/update", methods=['POST'])
 @bp.route("/new", methods=['POST'])
 @csrf_protect(blueprint=bp)
-def update(uid=None):
-	if uid is not None:
-		mail = Mail.query.filter_by(uid=uid).first_or_404()
+def update(mail_id=None):
+	if mail_id is not None:
+		mail = Mail.query.get_or_404(mail_id)
 	else:
 		mail = Mail(uid=request.form.get('mail-uid'))
 	mail.receivers = request.form.get('mail-receivers', '').splitlines()
@@ -48,12 +49,12 @@ def update(uid=None):
 	db.session.add(mail)
 	db.session.commit()
 	flash(_('Mail mapping updated.'))
-	return redirect(url_for('mail.show', uid=mail.uid))
+	return redirect(url_for('mail.show', mail_id=mail.id))
 
-@bp.route("/<uid>/del")
+@bp.route("/<int:mail_id>/del")
 @csrf_protect(blueprint=bp)
-def delete(uid):
-	mail = Mail.query.filter_by(uid=uid).first_or_404()
+def delete(mail_id):
+	mail = Mail.query.get_or_404(mail_id)
 	db.session.delete(mail)
 	db.session.commit()
 	flash(_('Deleted mail mapping.'))