diff --git a/kwant/kpm.py b/kwant/kpm.py
index 595cba04a93bc3cb1ebae65cedc274a9a43d46a4..2c4ee432e480e3436ce44ca67548f07319579b7b 100644
--- a/kwant/kpm.py
+++ b/kwant/kpm.py
@@ -141,19 +141,6 @@ class SpectralDensity:
             raise TypeError("either 'num_moments' or 'energy_resolution' "
                             "must be provided.")
 
-        if energy_resolution:
-            num_moments = math.ceil((1.6 * self._a) / energy_resolution)
-        elif num_moments is None:
-            num_moments = 100
-
-        must_be_positive_int = ['num_vectors', 'num_moments']
-        for var in must_be_positive_int:
-            val = locals()[var]
-            if val <= 0 or val != int(val):
-                raise ValueError('{} must be a positive integer'.format(var))
-        if eps <= 0:
-            raise ValueError('eps must be positive')
-
         rng = ensure_rng(rng)
         # self.eps ensures that the rescaled Hamiltonian has a
         # spectrum strictly in the interval (-1,1).
@@ -195,6 +182,19 @@ class SpectralDensity:
                                                         bounds=bounds)
         self.bounds = (self._b - self._a, self._b + self._a)
 
+        if energy_resolution:
+            num_moments = math.ceil((1.6 * self._a) / energy_resolution)
+        elif num_moments is None:
+            num_moments = 100
+
+        must_be_positive_int = ['num_vectors', 'num_moments']
+        for var in must_be_positive_int:
+            val = locals()[var]
+            if val <= 0 or val != int(val):
+                raise ValueError('{} must be a positive integer'.format(var))
+        if eps <= 0:
+            raise ValueError('eps must be positive')
+
         for r in range(num_vectors):
             self._rand_vect_list.append(
                 self._vector_factory(self.hamiltonian.shape[0]))
diff --git a/kwant/tests/test_kpm.py b/kwant/tests/test_kpm.py
index 23529efc874ed18dbd79ae255b643ef83051b20c..c5b8806ba0c35513266607668a10708d4d2f3007 100644
--- a/kwant/tests/test_kpm.py
+++ b/kwant/tests/test_kpm.py
@@ -175,6 +175,24 @@ def test_api_single_eigenvalue_error():
         SpectralDensity(np.identity(dim, dtype=complex))
 
 
+def test_energy_resolution():
+    """Check that energy resolution works and gives the same output as
+    setting the equivalent number of moments.
+    """
+    ham = kwant.rmt.gaussian(dim)
+    rng = 1
+    energy_resolution = 0.05
+
+    sp1 = SpectralDensity(ham, rng=rng, energy_resolution=energy_resolution)
+    # number of moments for this energy resolution
+    num_moments = sp1.num_moments
+    # use the same number of moments but not passing energy resolution
+    sp2 = SpectralDensity(ham, rng=rng, num_moments=num_moments)
+
+    # Check bit for bit equality
+    assert np.all(sp1.densities == sp2.densities)
+
+
 def test_operator_none():
     """Check operator=None gives the same results as operator=np.identity(),
     with the same random vectors.