diff --git a/HearingTest.py b/HearingTest.py
index 0ef9d42a42c462a826ec61011b6654b2ef5bfc34..0c664ea4c4aa864cd77fc3a64e02ccebc2c7914e 100644
--- a/HearingTest.py
+++ b/HearingTest.py
@@ -17,6 +17,7 @@ class HearingTest:
     lower_lim = 0
     n_blocks = 20
     max_response_time = 1  # in seconds
+    untested_prob = 0.15
 
     @staticmethod
     def block_size():
@@ -46,13 +47,21 @@ class HearingTest:
         return
 
     def play_next_sound(self):
-        # TODO allow tone outside lims with low prob?
         choices = []
-        for i, freq in enumerate(self.freqs):
-            choices.extend([(freq, v) for v in
-                            np.arange(self.lower_bounds[i]+self.block_size(),
-                                      self.upper_bounds[i],
-                                      self.block_size())])
+        if random.random() < self.untested_prob:
+            # completely random - allows a little retesting
+            for freq in self.freqs:
+                choices.extend([(freq, v) for v in
+                                np.arange(self.lower_lim,
+                                          self.upper_lim,
+                                          self.block_size())])
+        else:
+            # only allow choices from untested parts
+            for i, freq in enumerate(self.freqs):
+                choices.extend([(freq, v) for v in
+                                np.arange(self.lower_bounds[i]+self.block_size(),
+                                          self.upper_bounds[i],
+                                          self.block_size())])
         freq, volume = random.choice(choices)
         self.library.play(freq, volume)
         played_time = time.time()