diff --git a/nomad/admin/upload.py b/nomad/admin/upload.py
index 84328cd1edcb08db30aa90d8531c62ea3c771423..89171cbffd0e0bbf077e03067c7435b72f3cd33f 100644
--- a/nomad/admin/upload.py
+++ b/nomad/admin/upload.py
@@ -16,7 +16,7 @@ import click
 from tabulate import tabulate
 from mongoengine import Q
 
-from nomad import processing as proc, infrastructure, utils
+from nomad import processing as proc, infrastructure, utils, search, files
 from .__main__ import cli
 
 
@@ -61,9 +61,35 @@ def ls():
 @upload.command(help='Delete selected upload')
 @click.option('--with-coe-repo', help='Also attempt to delete from repository db', is_flag=True)
 def rm(with_coe_repo):
+    logger = utils.get_logger(__name__)
     print('%d uploads selected, deleting ...' % uploads.count())
+
+    if with_coe_repo:
+        from nomad import coe_repo
+        infrastructure.setup_repository_db()
+
     for upload in uploads:
-        upload.delete_upload_local(with_coe_repo=with_coe_repo)
+        # delete repository db entry
+        if with_coe_repo:
+            coe_repo.Upload.delete(upload.upload_id)
+
+        # delete elastic
+        search.delete_upload(upload_id=upload.upload_id)
+
+        # delete files
+        for _ in range(0, 2):
+            upload_files = files.UploadFiles.get(upload_id=upload.upload_id)
+
+            try:
+                if upload_files is not None:
+                    upload_files.delete()
+            except Exception as e:
+                logger.error('could not delete files', exc_info=e)
+                break
+
+        # delete mongo
+        proc.Calc.objects(upload_id=upload.upload_id).delete()
+        upload.delete()
 
 
 @upload.command(help='Attempt to abort the processing of uploads.')