diff --git a/kwant/tests/test_builder.py b/kwant/tests/test_builder.py
index 69bfc7e55fadc7cd8462b3b02e58fe60c70e8c94..ae4b0e4630eea7402523cdf9dc184d39f6a6a5bd 100644
--- a/kwant/tests/test_builder.py
+++ b/kwant/tests/test_builder.py
@@ -637,20 +637,45 @@ def test_builder_with_symmetry():
 
 
 def test_fill():
-    # Use function as a value since otherwise a hopping in the opposite
-    # direction may be stored after fill.
-    def f(*sites): pass
     g = kwant.lattice.square()
     sym_x = kwant.TranslationalSymmetry((-1, 0))
     sym_xy = kwant.TranslationalSymmetry((-1, 0), (0, 1))
 
     template_1d = builder.Builder(sym_x)
-    template_1d[g(0, 0)] = f
-    template_1d[g.neighbors()] = f
+    template_1d[g(0, 0)] = None
+    template_1d[g.neighbors()] = None
 
     def line_200(site):
         return -100 <= site.pos[0] < 100
 
+    ## Test that copying a builder by "fill" preserves everything.
+    cubic = kwant.lattice.general(ta.identity(3))
+    sym = kwant.TranslationalSymmetry((3, 0, 0), (0, 4, 0), (0, 0, 5))
+
+    # Make a weird system.
+    orig = kwant.Builder(sym)
+    sites = cubic.shape(lambda pos: True, (0, 0, 0))
+    for i, site in enumerate(orig.expand(sites)):
+        if i % 7 == 0:
+            continue
+        orig[site] = i
+    for i, hopp in enumerate(orig.expand(cubic.neighbors(1))):
+        if i % 11 == 0:
+            continue
+        orig[hopp] = i * 1.2345
+    for i, hopp in enumerate(orig.expand(cubic.neighbors(2))):
+        if i % 13 == 0:
+            continue
+        orig[hopp] = i * 1j
+
+    # Clone the original using fill.
+    clone = kwant.Builder(sym)
+    clone.fill(orig, lambda s: True, (0, 0, 0))
+
+    # Verify that both are identical.
+    assert set(clone.site_value_pairs()) == set(orig.site_value_pairs())
+    assert set(clone.hopping_value_pairs()) == set(orig.hopping_value_pairs())
+
     ## Test for warning when "start" is out.
     target = builder.Builder()
     for start in [(-101, 0), (101, 0)]:
@@ -698,8 +723,8 @@ def test_fill():
     target.fill(template_1d, lambda site: True, g(0, 0))
 
     should_be_syst = builder.Builder(sym_nx)
-    should_be_syst[(g(i, 0) for i in range(n_cells))] = f
-    should_be_syst[g.neighbors()] = f
+    should_be_syst[(g(i, 0) for i in range(n_cells))] = None
+    should_be_syst[g.neighbors()] = None
 
     assert sorted(target.sites()) == sorted(should_be_syst.sites())
     assert sorted(target.hoppings()) == sorted(should_be_syst.hoppings())
@@ -707,9 +732,9 @@ def test_fill():
 
     ## test multiplying unit cell size in 2D
     template_2d = builder.Builder(sym_xy)
-    template_2d[g(0, 0)] = f
-    template_2d[g.neighbors()] = f
-    template_2d[builder.HoppingKind((2, 2), g)] = f
+    template_2d[g(0, 0)] = None
+    template_2d[g.neighbors()] = None
+    template_2d[builder.HoppingKind((2, 2), g)] = None
 
     nm_cells = (3, 5)
     sym_nmxy = kwant.TranslationalSymmetry(*(sym_xy.periods * nm_cells))
@@ -717,9 +742,9 @@ def test_fill():
     target.fill(template_2d, lambda site: True, g(0, 0))
 
     should_be_syst = builder.Builder(sym_nmxy)
-    should_be_syst[(g(i, j) for i in range(10) for j in range(10))] = f
-    should_be_syst[g.neighbors()] = f
-    should_be_syst[builder.HoppingKind((2, 2), g)] = f
+    should_be_syst[(g(i, j) for i in range(10) for j in range(10))] = None
+    should_be_syst[g.neighbors()] = None
+    should_be_syst[builder.HoppingKind((2, 2), g)] = None
 
     assert sorted(target.sites()) == sorted(should_be_syst.sites())
     assert sorted(target.hoppings()) == sorted(should_be_syst.hoppings())
@@ -734,9 +759,9 @@ def test_fill():
     target.fill(template_2d, square_shape, g(0, 0))
 
     should_be_syst = builder.Builder()
-    should_be_syst[(g(i, j) for i in range(10) for j in range(10))] = f
-    should_be_syst[g.neighbors()] = f
-    should_be_syst[builder.HoppingKind((2, 2), g)] = f
+    should_be_syst[(g(i, j) for i in range(10) for j in range(10))] = None
+    should_be_syst[g.neighbors()] = None
+    should_be_syst[builder.HoppingKind((2, 2), g)] = None
 
     assert sorted(target.sites()) == sorted(should_be_syst.sites())
     assert sorted(target.hoppings()) == sorted(should_be_syst.hoppings())