diff --git a/jams-common/pom.xml b/jams-common/pom.xml
index 5bc99ad07fec94f340f460b601b1f2e8eda156f0..065b4c7495ea8df8fa4e347d69376cf681f860ff 100644
--- a/jams-common/pom.xml
+++ b/jams-common/pom.xml
@@ -27,11 +27,6 @@
             <artifactId>xbean-classloader</artifactId>
             <version>${xbean.version}</version>
         </dependency>
-        <dependency>
-            <groupId>org.zeromq</groupId>
-            <artifactId>jeromq</artifactId>
-            <version>0.5.2</version>
-        </dependency>
     </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/jams-common/src/main/java/module-info.java b/jams-common/src/main/java/module-info.java
index 926944b8d988a1297a6dc4065502613c0e5e46e7..b45f2121dba54f22dec6baa7ca8494c10814bdcc 100644
--- a/jams-common/src/main/java/module-info.java
+++ b/jams-common/src/main/java/module-info.java
@@ -80,7 +80,6 @@ module jams.common {
     requires java.base;
     requires java.sql;
     requires org.apache.xbean.classloader;
-    requires jeromq;
     requires java.naming;
 }
 
diff --git a/jams-common/src/main/java/net/jami/jams/common/objects/responses/SubscriptionStatusResponse.java b/jams-common/src/main/java/net/jami/jams/common/objects/responses/SubscriptionStatusResponse.java
index f13d8677963e1fb72604fcb7d48652d74ffda8b6..4e7a61794bac8e9f1344c6200500a6fe6b747c4b 100644
--- a/jams-common/src/main/java/net/jami/jams/common/objects/responses/SubscriptionStatusResponse.java
+++ b/jams-common/src/main/java/net/jami/jams/common/objects/responses/SubscriptionStatusResponse.java
@@ -2,6 +2,7 @@ package net.jami.jams.common.objects.responses;
 
 import lombok.Getter;
 import lombok.Setter;
+import net.jami.jams.common.updater.FileDescription;
 import net.jami.jams.common.updater.subscription.LicenseInformation;
 
 import java.util.HashMap;
@@ -14,6 +15,6 @@ public class SubscriptionStatusResponse {
 
     private LicenseInformation licenseInformation;
     private Boolean activated;
-    private HashMap<String,String> versions = checkVersion();
+    private HashMap<String, FileDescription> versions = checkVersion();
 
 }
diff --git a/jams-common/src/main/java/net/jami/jams/common/updater/AppUpdater.java b/jams-common/src/main/java/net/jami/jams/common/updater/AppUpdater.java
index f04c223392be593f862694f923948c7d33e34b44..f147116393689436a16b4a03d371ca3e1d680456 100644
--- a/jams-common/src/main/java/net/jami/jams/common/updater/AppUpdater.java
+++ b/jams-common/src/main/java/net/jami/jams/common/updater/AppUpdater.java
@@ -2,8 +2,8 @@ package net.jami.jams.common.updater;
 
 public interface AppUpdater {
 
-    String getCurrentVersion();
-    String getLatestVersion();
+    String getLocalVersions();
+    String getRemoteVersions();
     boolean downloadUpdates();
 
 }
diff --git a/jams-common/src/main/java/net/jami/jams/common/updater/FileDescription.java b/jams-common/src/main/java/net/jami/jams/common/updater/FileDescription.java
new file mode 100644
index 0000000000000000000000000000000000000000..6a8133bd6fe89d6771f7d3ebca2de4a1d98dde68
--- /dev/null
+++ b/jams-common/src/main/java/net/jami/jams/common/updater/FileDescription.java
@@ -0,0 +1,18 @@
+package net.jami.jams.common.updater;
+
+import lombok.*;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode
+public class FileDescription {
+
+    private String fileName;
+    private String version;
+    private String md5hash;
+    private String mainClass;
+
+
+}
diff --git a/jams-common/src/main/java/net/jami/jams/common/updater/FileRepository.java b/jams-common/src/main/java/net/jami/jams/common/updater/FileRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..29c031070cfc402ec9e072daba91387684cc5ddf
--- /dev/null
+++ b/jams-common/src/main/java/net/jami/jams/common/updater/FileRepository.java
@@ -0,0 +1,7 @@
+package net.jami.jams.common.updater;
+
+import java.util.HashMap;
+
+public interface FileRepository {
+    HashMap<String,FileDescription> getFileVersions();
+}
diff --git a/jams-common/src/main/java/net/jami/jams/common/utils/VersioningUtils.java b/jams-common/src/main/java/net/jami/jams/common/utils/VersioningUtils.java
index c2b42a5b0f1a022272d683dfc3a139f6b780d76f..c580fb105de050b79c5e28cf6691cda8af7e38fd 100644
--- a/jams-common/src/main/java/net/jami/jams/common/utils/VersioningUtils.java
+++ b/jams-common/src/main/java/net/jami/jams/common/utils/VersioningUtils.java
@@ -1,11 +1,14 @@
 package net.jami.jams.common.utils;
 
 import lombok.extern.slf4j.Slf4j;
+import net.jami.jams.common.updater.FileDescription;
+import org.bouncycastle.util.encoders.Hex;
 
 import java.io.File;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.security.MessageDigest;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.jar.JarFile;
@@ -14,18 +17,32 @@ import java.util.jar.JarFile;
 public class VersioningUtils {
 
     private static final String IMPLEMENTATION_VERSION_FIELD = "Implementation-Version";
+    private static final String MAIN_CLASS_FIELD = "Main-Class";
+    private static MessageDigest messageDigest;
 
-    public static HashMap<String,String> checkVersion() {
+    static {
         try {
-            HashMap<String,String> res = new HashMap<>();
+            messageDigest = MessageDigest.getInstance("MD5");
+        }
+        catch (Exception e){
+            messageDigest = null;
+        }
+    }
+
+    public static HashMap<String, FileDescription> checkVersion() {
+        try {
+            HashMap<String,FileDescription> res = new HashMap<>();
             ArrayList<Path> files = new ArrayList<>();
             Files.walk(Paths.get(System.getProperty("user.dir"))).filter(Files::isRegularFile).forEach(files::add);
             files.forEach( e ->{
                 if(e.toString().endsWith(".jar")){
                     try {
-                        String version = new JarFile(e.toFile()).getManifest().getMainAttributes().getValue(IMPLEMENTATION_VERSION_FIELD);
+                        JarFile file = new JarFile(e.toFile());
+                        String version = file.getManifest().getMainAttributes().getValue(IMPLEMENTATION_VERSION_FIELD);
+                        String className = file.getManifest().getMainAttributes().getValue(MAIN_CLASS_FIELD);
+                        String md5 = Hex.toHexString(messageDigest.digest(Files.readAllBytes(e.toAbsolutePath())));
                         String[] arr = e.toString().split(File.separator);
-                        res.put(arr[arr.length - 1],version);
+                        res.put(arr[arr.length - 1],new FileDescription(arr[arr.length - 1],version,md5,className));
                         log.info("Found version {} of {}",version,e.toString());
                     }
                     catch (Exception e1){
diff --git a/jams-common/src/test/java/net/jami/jams/common/utils/VersioningUtilsTest.java b/jams-common/src/test/java/net/jami/jams/common/utils/VersioningUtilsTest.java
index 15d5ddfa01219c2d4ae3d95f7cc273b8bc6a1876..e84c85c10adea27541417f4829f4416033597209 100644
--- a/jams-common/src/test/java/net/jami/jams/common/utils/VersioningUtilsTest.java
+++ b/jams-common/src/test/java/net/jami/jams/common/utils/VersioningUtilsTest.java
@@ -1,5 +1,6 @@
 package net.jami.jams.common.utils;
 
+import net.jami.jams.common.updater.FileDescription;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
@@ -11,7 +12,7 @@ class VersioningUtilsTest {
     @Test
     @Disabled
     public void testFileScan(){
-        HashMap<String,String> res = VersioningUtils.checkVersion();
+        HashMap<String, FileDescription> res = VersioningUtils.checkVersion();
         Assertions.assertEquals(6,res.size(),"Incorrect number of versions detected!");
     }
 
diff --git a/jams-launcher/pom.xml b/jams-launcher/pom.xml
index 9eb9bc4d220b2f0c28d578179eae6d92fea7f15c..a1668970417e49ad1b9eba0c7c5b6188b1536af6 100644
--- a/jams-launcher/pom.xml
+++ b/jams-launcher/pom.xml
@@ -26,11 +26,6 @@
             <artifactId>httpclient</artifactId>
             <version>${apache.httpclient.version}</version>
         </dependency>
-        <dependency>
-            <groupId>com.google.guava</groupId>
-            <artifactId>guava</artifactId>
-            <version>${google.guava.version}</version>
-        </dependency>
         <dependency>
             <groupId>org.zeromq</groupId>
             <artifactId>jeromq</artifactId>
diff --git a/jams-launcher/src/main/java/launcher/UpdateThread.java b/jams-launcher/src/main/java/launcher/UpdateThread.java
index 24260219b58b5b1d34dd273b80e85f43fe1868e0..0cd2856504b399d6bf4dd14e4d1e925c87da9028 100644
--- a/jams-launcher/src/main/java/launcher/UpdateThread.java
+++ b/jams-launcher/src/main/java/launcher/UpdateThread.java
@@ -46,6 +46,7 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.security.KeyFactory;
 import java.security.KeyStore;
+import java.security.MessageDigest;
 import java.security.PrivateKey;
 import java.security.cert.Certificate;
 import java.security.cert.CertificateFactory;
@@ -62,6 +63,10 @@ import java.util.jar.Manifest;
 @Slf4j
 public class UpdateThread extends Thread {
 
+    private static final String IFACE_TCP_RECEIVER = "tcp://localhost:4573";
+    private static final String IFACE_TCP_PUBLISHER = "tcp://localhost:4572";
+    private static final String SUBSCRIBER_TOPIC = "UPDATE";
+
     private HashMap<String, String> localVersions = new HashMap<>();
     private HashMap<String, String> localExecs = new HashMap<>();
     private HashMap<String, String> remoteVersions = new HashMap<>();
@@ -74,117 +79,31 @@ public class UpdateThread extends Thread {
     private static volatile Long UPDATE_INTERVAL;
     private SSLContext sslContext = null;
     private Process applicationProcess;
-    private ZMQ.Socket publisher;
-    private ZMQ.Socket receiver;
+    private ZMQ.Socket publisher =  AppStarter.context.socket(SocketType.PUB);
+    private ZMQ.Socket receiver = AppStarter.context.socket(SocketType.REP);
     private AtomicBoolean doUpdate = new AtomicBoolean(false);
     private MessageReceiver messageReceiver;
 
+
+
     public UpdateThread() {
     }
 
     public UpdateThread(Process applicationProcess, String[] parentArgs) {
         try {
-            //Use this to notify
-            publisher = AppStarter.context.socket(SocketType.PUB);
-            publisher.bind("tcp://*:4572");
-            //Use this to updater.
-            receiver = AppStarter.context.socket(SocketType.REP);
-            receiver.bind("tcp://*:4573");
+            publisher.bind(IFACE_TCP_PUBLISHER);
+            receiver.bind(IFACE_TCP_RECEIVER);
             messageReceiver = new MessageReceiver(receiver,doUpdate);
             messageReceiver.start();
         } catch (Exception e) {
             log.warn("Could not create and bind publisher and/or receiver! Please contact software developer");
             System.exit(-1);
         }
-
-        try {
-            InputStream input = AppStarter.class.getClassLoader().getResourceAsStream("oem/config.json");
-            Any any = JsonIterator.deserialize(input.readAllBytes());
-            CORE_PACKAGE_MAIN_CLASS_NAME = any.get("CORE_PACKAGE_MAIN_CLASS_NAME").toString();
-            UPDATE_SERVER_URL = any.get("UPDATE_URL").toString();
-            UPDATE_INTERVAL = any.get("UPDATE_INTERVAL").toLong();
-
-        } catch (IOException e) {
-            log.warn("Missing OEM configuration! Please contact software developer");
-            System.exit(-1);
-        }
-
-        System.out.println("Update thread created...");
+        log.info("Update thread created...");
         this.parentArgs = parentArgs;
         this.applicationProcess = applicationProcess;
     }
 
-    //It is a VERY bad idea to use version numbers inside file names as this will break at some point and cause MAJOR
-    //user problems, we can therefore by-pass this by doing the following.
-
-    public static String[] unzipJar(String destinationDir, String jarPath) throws IOException {
-        String[] resp = new String[2];
-        File file = new File(jarPath);
-        JarFile jar = new JarFile(file);
-
-        // fist get all directories,
-        // then make those directory on the destination Path
-        for (Enumeration<JarEntry> enums = jar.entries(); enums.hasMoreElements(); ) {
-            JarEntry entry = (JarEntry) enums.nextElement();
-
-            String fileName = destinationDir + File.separator + entry.getName();
-            File f = new File(fileName);
-
-            if (fileName.endsWith("/")) {
-                f.mkdirs();
-            }
-        }
-
-        //now create all files
-        for (Enumeration<JarEntry> enums = jar.entries(); enums.hasMoreElements(); ) {
-            JarEntry entry = (JarEntry) enums.nextElement();
-            if (entry.toString().contains("META-INF/MANIFEST.MF")) {
-                String fileName = destinationDir + File.separator + entry.getName();
-                File f = new File(fileName);
-
-                if (!fileName.endsWith("/")) {
-                    InputStream is = jar.getInputStream(entry);
-                    FileOutputStream fos = new FileOutputStream(f);
-
-                    // write contents of 'is' to 'fos'
-                    while (is.available() > 0) {
-                        fos.write(is.read());
-                    }
-
-                    fos.close();
-                    is.close();
-                }
-            }
-        }
-
-        String manifestPath = destinationDir + "/META-INF/MANIFEST.MF";
-        Manifest manifest = new Manifest(new URL("file:///" + manifestPath).openStream());
-        resp[0] = manifest.getMainAttributes().getValue("Implementation-Version");
-        resp[1] = manifest.getMainAttributes().getValue("Main-Class");
-        return resp;
-    }
-
-    public void detectCurrentVersions(String folder) {
-        try {
-            File folderExec = new File(folder.replace("/jams-launcher", ""));
-            File folderLibs = new File(folder.replace("/jams-launcher", "") + "/libs");
-            discoverVersions(folderExec);
-            discoverVersions(folderLibs);
-        } catch (Exception e) {
-            log.warn(e.toString());
-        }
-    }
-
-    private void discoverVersions(File folderLibs) throws IOException {
-        for (File f : Objects.requireNonNull(folderLibs.listFiles())) {
-            if (f.isFile() && f.getName().contains(".jar") && !f.getName().contains("jams-launcher")) {
-                String[] resp = unzipJar(System.getProperty("user.dir") + "/tmpjar/" + f.getName(), f.getAbsolutePath());
-                localVersions.put(resp[1], resp[0]);
-                localExecs.put(resp[1], f.getName());
-            }
-        }
-    }
-
     // This reads a file on the server which contains some basic info
     // about what new versions of WHAT are available.
     private void getLatestVersion() {
@@ -401,21 +320,12 @@ public class UpdateThread extends Thread {
         }
     }
 
-    private static String checksum(String filepath) throws IOException {
-
-        HashCode hash = com.google.common.io.Files
-                .hash(new File(filepath), Hashing.md5());
-
-        log.warn("Calculated md5: " + hash.toString());
-        return hash.toString();
-    }
-
     @Override
     public void run() {
         Timer timer = new Timer();
         // check if license is valid, then attempt SSL handshake with update server.
         try {
-            System.out.println("Update timer started");
+            log.info("Update timer started");
             TimerTask pollTask = new TimerTask() {
                 @Override
                 public void run() {
diff --git a/jams-launcher/src/main/java/module-info.java b/jams-launcher/src/main/java/module-info.java
index 9b8350ad4957de2467826efd3270bd36f25154a3..4107c6e4b8e17ab94baeed18e9bb227e30b946c3 100644
--- a/jams-launcher/src/main/java/module-info.java
+++ b/jams-launcher/src/main/java/module-info.java
@@ -22,8 +22,6 @@
 */
 
 module jams.launcher {
-    opens com.google.guava;
-    opens org.zeromq.ZMQ;
     requires lombok;
     requires org.slf4j;
     requires jsoniter;
@@ -36,5 +34,6 @@ module jams.launcher {
     requires org.apache.httpcomponents.httpcore;
     requires org.apache.httpcomponents.httpclient;
     requires plexus.utils;
+    requires jams.common;
 }
 
diff --git a/pom.xml b/pom.xml
index 2e60499d4adf8f50dc746160a781d9e96de07d2a..3ff549e6ff02a6dcc83b3587303d1359802e7ded 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,7 +52,6 @@
         <maven.model.version>3.2.5</maven.model.version>
         <apache.httpcore.version>4.4.12</apache.httpcore.version>
         <apache.httpclient.version>4.5.10</apache.httpclient.version>
-        <google.guava.version>20.0</google.guava.version>
     </properties>
 
     <dependencies>
diff --git a/updater/pom.xml b/updater/pom.xml
index fc45cafa89560c6bbb9fbaea72ba50efa10db524..4abff6158fe28f10defb15021bf9dee775a72f0d 100644
--- a/updater/pom.xml
+++ b/updater/pom.xml
@@ -17,6 +17,11 @@
             <version>${revision}</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>org.zeromq</groupId>
+            <artifactId>jeromq</artifactId>
+            <version>${jeromq.version}</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/updater/src/main/java/net/jami/jams/updater/JAMSUpdater.java b/updater/src/main/java/net/jami/jams/updater/JAMSUpdater.java
index 9f72268f5b277499e97aa9299590c002dff16545..33fd8591818a55492c5af1639dd9c5448b3bb27b 100644
--- a/updater/src/main/java/net/jami/jams/updater/JAMSUpdater.java
+++ b/updater/src/main/java/net/jami/jams/updater/JAMSUpdater.java
@@ -27,13 +27,14 @@ public class JAMSUpdater extends Thread implements AppUpdater {
         this.start();
     }
 
+
     @Override
-    public String getCurrentVersion() {
+    public String getLocalVersions() {
         return null;
     }
 
     @Override
-    public String getLatestVersion() {
+    public String getRemoteVersions() {
         return null;
     }
 
diff --git a/updater/src/main/java/net/jami/jams/updater/LocalVersionRepository.java b/updater/src/main/java/net/jami/jams/updater/LocalVersionRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..d9db31521fe9f8a2997770abb1e2d70d6cfa154f
--- /dev/null
+++ b/updater/src/main/java/net/jami/jams/updater/LocalVersionRepository.java
@@ -0,0 +1,14 @@
+package net.jami.jams.updater;
+
+import net.jami.jams.common.updater.FileDescription;
+import net.jami.jams.common.updater.FileRepository;
+
+import java.util.HashMap;
+
+public class LocalVersionRepository implements FileRepository {
+
+    @Override
+    public HashMap<String, FileDescription> getFileVersions() {
+        return null;
+    }
+}
diff --git a/updater/src/main/java/net/jami/jams/updater/RemoteVersionRepository.java b/updater/src/main/java/net/jami/jams/updater/RemoteVersionRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..e45bc8b059b41bbc64c539c7589126d1044aaa87
--- /dev/null
+++ b/updater/src/main/java/net/jami/jams/updater/RemoteVersionRepository.java
@@ -0,0 +1,4 @@
+package net.jami.jams.updater;
+
+public class RemoteVersionRepository {
+}