diff --git a/src/_zkapauthorizer/model.py b/src/_zkapauthorizer/model.py
index df00eb635eeb6c5b53b4d719e61a860b1b683e4a..fb67ec74de980344e3d0a45f7c3db52b06b8d637 100644
--- a/src/_zkapauthorizer/model.py
+++ b/src/_zkapauthorizer/model.py
@@ -25,7 +25,6 @@ from sqlite3 import connect as _connect
 
 import attr
 from aniso8601 import parse_datetime
-from past.builtins import long
 from twisted.logger import Logger
 from twisted.python.filepath import FilePath
 from zope.interface import Interface, implementer
@@ -891,7 +890,7 @@ class RandomToken(object):
 def _counter_attribute():
     return attr.ib(
         validator=attr.validators.and_(
-            attr.validators.instance_of((int, long)),
+            attr.validators.instance_of(int),
             greater_than(-1),
         ),
     )
@@ -952,7 +951,7 @@ class Redeemed(object):
     """
 
     finished = attr.ib(validator=attr.validators.instance_of(datetime))
-    token_count = attr.ib(validator=attr.validators.instance_of((int, long)))
+    token_count = attr.ib(validator=attr.validators.instance_of(int))
 
     def should_start_redemption(self):
         return False
@@ -1051,7 +1050,7 @@ class Voucher(object):
     expected_tokens = attr.ib(
         validator=attr.validators.optional(
             attr.validators.and_(
-                attr.validators.instance_of((int, long)),
+                attr.validators.instance_of(int),
                 greater_than(0),
             ),
         ),
diff --git a/src/_zkapauthorizer/resource.py b/src/_zkapauthorizer/resource.py
index 9399392129c2c91601199e0ba573b6e876aa2788..62c3f3ca967cc76250dcedad72fe5c3e1d957840 100644
--- a/src/_zkapauthorizer/resource.py
+++ b/src/_zkapauthorizer/resource.py
@@ -25,7 +25,6 @@ from itertools import islice
 from json import load, loads
 from sys import maxsize
 
-from past.builtins import long
 from twisted.logger import Logger
 from twisted.web.http import BAD_REQUEST
 from twisted.web.resource import ErrorPage, IResource, NoResource, Resource
@@ -256,7 +255,7 @@ class _CalculatePrice(Resource):
             )
 
         if not isinstance(sizes, list) or not all(
-            isinstance(size, (int, long)) and size >= 0 for size in sizes
+            isinstance(size, int) and size >= 0 for size in sizes
         ):
             request.setResponseCode(BAD_REQUEST)
             return dumps_utf8(
diff --git a/src/_zkapauthorizer/tests/test_pricecalculator.py b/src/_zkapauthorizer/tests/test_pricecalculator.py
index 2d447e3f630e7a33e2be7b220934fdca2c9a28e1..c1652f2b4bcf4550a141c87615437e36ed3b4b98 100644
--- a/src/_zkapauthorizer/tests/test_pricecalculator.py
+++ b/src/_zkapauthorizer/tests/test_pricecalculator.py
@@ -21,7 +21,6 @@ from functools import partial
 
 from hypothesis import given
 from hypothesis.strategies import integers, lists, tuples
-from past.builtins import long
 from testtools import TestCase
 from testtools.matchers import Equals, GreaterThan, IsInstance, MatchesAll
 
@@ -156,7 +155,7 @@ class PriceCalculatorTests(TestCase):
         self.assertThat(
             price,
             MatchesAll(
-                IsInstance((int, long)),
+                IsInstance(int),
                 GreaterThan(0),
             ),
         )