diff --git a/exec/update.js b/exec/update.js
new file mode 100644
index 0000000000000000000000000000000000000000..efd64af3677670f36ddd4c02e01c15f7f2e9ae23
--- /dev/null
+++ b/exec/update.js
@@ -0,0 +1,37 @@
+/* $Id$ */
+
+/* Synchronet v3.15 update script (to be executed with jsexec) */
+
+const REVISION = "$Revision$".split(' ')[1];
+
+function update_exec_dir()
+{
+	var files;
+	var fi,f1,f2;
+
+	files=directory(system.exec_dir + "load/*.js");
+
+	for(fi in files) {
+		f1 = files[fi];
+		f2 = system.exec_dir + file_getname(f1);
+		if(!file_exists(f2))
+			continue;
+//		print("\nDuplicate detected: " +f1);
+		if(file_compare(f1, f2)) {
+			if(!file_remove(f2)) {
+				printf("!Error %u removing %s\n", errno, f2);
+				return false;
+			}
+		} else if(!file_rename(f2, f2 + ".old")) {
+				printf("!Error %u renaming %s\n", errno, f2);
+				return false;
+		}
+	}
+	return true;
+}
+
+
+printf("Synchronet update.js revision %u\n", REVISION);
+printf("Updating exec directory: ");
+printf("%s\n", update_exec_dir() ? "Success" : "FAILURE");
+