diff --git a/test_all.py b/test_all.py
index ef4e26a26c0cd0605a4489870b325f9f7d77a3c9..5cc31218e8e3cb8018fba13ced03610f45d02348 100644
--- a/test_all.py
+++ b/test_all.py
@@ -8,6 +8,7 @@ from time import sleep
 import requests
 import signal
 import re
+from prometheus_client.registry import REGISTRY as pc
 
 class TestVC(TestCase):
 
@@ -20,7 +21,6 @@ class TestVC(TestCase):
         self.assertEqual(c, '.')
         self.assertEqual(r, 3)
 
-
     def test_singular(self):
         f = vcheck.tfoot(1, 0, 0)
         r = re.compile('>1 program<')
@@ -40,12 +40,15 @@ class TestVC(TestCase):
         self.assertNotEqual(err, '')
 
     def test_run(self):
-        self.server = threading.Thread(target = vcheck.run, args = [8080, './testconf', 30])
+        self.server = threading.Thread(target = vcheck.run, args = [8080, './testconf', 2])
         self.server.start()
-        sleep(3)
+        sleep(2)
+        self.assertNotEqual(requests.get('http://localhost:8080/metrics'), '')
+        self.assertNotEqual(requests.get('http://localhost:8080'), '')
         self.assertTrue(self.server.is_alive())
+        sleep(3)
         vcheck.shutdown(2, None)
-        sleep(2)
+        sleep(1)
         self.assertFalse(self.server.is_alive())
         self.server.join()
 
@@ -53,12 +56,3 @@ class TestVC(TestCase):
         c = { 'name': 'something', 'a': '1', 'b': '2' }
         self.assertIsNone(vcheck.missing(c, 'a', 'b'))
         self.assertIsNotNone(vcheck.missing(c, 'c'))
-
-    def test_serve(self):
-        self.server = threading.Thread(target = vcheck.run, args = [8080, './testconf', 3])
-        self.server.start()
-        sleep(1)
-        self.assertNotEqual(requests.get('http://localhost:8080/metrics'), '')
-        self.assertNotEqual(requests.get('http://localhost:8080'), '')
-        vcheck.shutdown(2, None)
-        self.server.join()
diff --git a/vcheck.py b/vcheck.py
index a1aa328d91831c0086ac9ce9e20fa1210e30e88d..ef79aa53d11425db49a4c908db5300ec60d1234b 100755
--- a/vcheck.py
+++ b/vcheck.py
@@ -129,6 +129,7 @@ html_end = """</table>
 global content
 global running
 
+
 def td(name, running, latest, status):
     return f"""
 <tr class="{status}">
@@ -151,6 +152,16 @@ def tfoot(total, ood, err):
 </tr></tfoot>"""
 
 
+def remove_by_label(g, p):
+    for sample in g.collect()[0].samples:
+        match = True
+        for (v, k) in p.items():
+            if sample.labels[v] != k:
+                match = False
+        if match:
+            g.remove(*sample.labels.values())
+
+
 def latest(versions, pattern):
     p = re.compile(pattern)
     v = [ v for v in versions if p.search(v) ]
@@ -267,11 +278,13 @@ def check(confd, v):
 
         if not current:
             res += td(c['name'], c['version'], f'UNKNOWN: {error}', 'unknown')
+            remove_by_label(v, {'name': c['name']})
             v.labels(name=c['name'], running=c['version'], latest=current).set(2)
             err += 1
         else:
             uptodate = not c['version'] == current
             res += td(c['name'], c['version'], current, 'uptodate' if uptodate else 'outofdate')
+            remove_by_label(v, {'name': c['name']})
             v.labels(name=c['name'], running=c['version'], latest=current).set(uptodate)
             ood += not uptodate