diff --git a/dev_scripts/convert_alta_to_adex_cache.py b/dev_scripts/convert_alta_to_adex_cache.py
index b93e23845b009fcfd4691a2358cc12cd44c1fc29..fe2e8aa2beca7e6fccce8002218fef5518ad9a4a 100644
--- a/dev_scripts/convert_alta_to_adex_cache.py
+++ b/dev_scripts/convert_alta_to_adex_cache.py
@@ -41,6 +41,35 @@ def calc_beam(name):
     return 0
 
 
+# conversion algorithm to extract a bit more metadata from an ALTA record
+def convert_dataproduct(row):
+    name, pid, access_url, ra, dec, dt, dst, observation = row
+
+    if dt in ['inspectionPlot']:
+        return None
+
+    if dst in ['calibrationTable']:
+        return None
+
+    # determine collection
+    collection = 'apertif-imaging'
+    if dt == 'timeSeries':
+        collection = 'apertif-timeseries'
+
+    level = 0
+    if dst == 'uncalibratedVisibility':
+        level = 0
+    if dst == 'calibratedVisibility':
+        level = 1
+    if dst in ['continuumMF','continuumChunk','imageCube','beamCube','polarisationImage','polarisationCube','continuumCube']:
+        level = 2
+
+    beam = calc_beam(name)
+
+    record_to_insert = (name, observation, beam, ra, dec, collection, level, dt, dst, access_url)
+    return record_to_insert
+
+
 def do_convert(source, target):
 
     try:
@@ -82,31 +111,10 @@ def do_convert(source, target):
         insert_count = 0
         for row in rows:
             name, pid, access_url,ra,dec,dt,dst,observation = row
-
-            # TODO: move this algorithm to a sane place, finish it and have scientists review it.
-            # determine which dataproducts to skip
-            insert_this_record = True
-            if dt in ['inspectionPlot']:
-                continue
-
-            if dst in ['calibrationTable']:
+            record_to_insert = convert_dataproduct(row)
+            if not record_to_insert:
                 continue
 
-            # determine collection
-            collection = 'apertif-imaging'
-            if dt == 'timeSeries':
-                collection = 'apertif-timeseries'
-
-            level = 0
-            if dst == 'calibratedVisibility':
-                level=1
-            if 'cube' in dt:
-                level=2
-
-            # todo: calculate beam
-            beam = calc_beam(name)
-
-            record_to_insert = (name, pid, observation, beam, ra, dec, collection, level, dt,dst, access_url)
             target_cursor.execute(sql_scripts.insert_into_skyviews,record_to_insert)
             target_connection.commit()
             insert_count = insert_count + 1