diff --git a/src/ch/alice/o2/ccdb/servlets/RetryCopyToGrid.java b/src/ch/alice/o2/ccdb/servlets/RetryCopyToGrid.java
new file mode 100644
index 0000000000000000000000000000000000000000..3c0fd6ba53a50e09f9d2ab8288b97c65541c3b59
--- /dev/null
+++ b/src/ch/alice/o2/ccdb/servlets/RetryCopyToGrid.java
@@ -0,0 +1,47 @@
+package ch.alice.o2.ccdb.servlets;
+
+import java.util.UUID;
+
+import alien.catalogue.GUIDUtils;
+import lazyj.DBFunctions;
+
+/**
+ * Iterate through objects missing a Grid copy and upload them
+ *
+ * @author costing
+ * @since 2021-10-28
+ */
+public class RetryCopyToGrid {
+	/**
+	 * Entry point
+	 *
+	 * @param args
+	 */
+	public static void main(final String[] args) {
+		final String q = "SELECT * FROM ccdb where -1 != all(replicas)";
+
+		for (final String arg : args) {
+			try (DBFunctions db = SQLObject.getDB()) {
+				if (GUIDUtils.isValidGUID(arg)) {
+					db.query(q + " AND id=?", false, UUID.fromString(arg));
+				}
+				else
+					if ("*".equals(arg)) {
+						db.query(q);
+					}
+					else {
+						System.err.println("Don't know how to process argument `" + arg + "`");
+						continue;
+					}
+
+				while (db.moveNext()) {
+					SQLObject obj = SQLObject.fromDb(db);
+
+					System.err.println("Notifying with: " + obj);
+
+					AsyncReplication.getInstance().newObject(obj);
+				}
+			}
+		}
+	}
+}