diff --git a/core/Dockerfile b/core/Dockerfile
index 8261ac1..54d2be2 100644
--- a/core/Dockerfile
+++ b/core/Dockerfile
@@ -1,5 +1,5 @@
 FROM openjdk:8-jre-alpine
 WORKDIR /
-ADD target/jemo-1.0.jar jemo-1.0.jar
+ADD target/jemo-*.jar jemo.jar
 EXPOSE 80 443
-CMD java -jar jemo-1.0.jar
\ No newline at end of file
+CMD java -jar jemo.jar
\ No newline at end of file
diff --git a/core/pom.xml b/core/pom.xml
index c7f523e..fe17cc3 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -22,7 +22,7 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.eclipse.jemo</groupId>
     <artifactId>jemo</artifactId>
-    <version>1.0</version>
+    <version>1.0.1</version>
     <packaging>jar</packaging>
 
     <properties>
@@ -293,8 +293,6 @@
                 <configuration>
                     <archive>
                         <manifest>
-                            <!--<addClasspath>true</addClasspath>-->
-                            <!--<classpathPrefix>libs/</classpathPrefix>-->
                             <mainClass>
                                 org.eclipse.jemo.Jemo
                             </mainClass>
diff --git a/core/src/main/java/org/eclipse/jemo/AbstractJemo.java b/core/src/main/java/org/eclipse/jemo/AbstractJemo.java
index b8040c3..22277bf 100644
--- a/core/src/main/java/org/eclipse/jemo/AbstractJemo.java
+++ b/core/src/main/java/org/eclipse/jemo/AbstractJemo.java
@@ -362,8 +362,6 @@
         } else {
             onSuccessfulValidation(provider.getRuntime());
         }
-        //we need to initialize our plugins/modules first and once they are there we will receive messages which they can process as a result
-        pluginManager = new JemoPluginManager(this);
 
         //http comes next as we need an operational system for synchronous processing before asynchronous processing can begin.
         httpServer = new JemoHTTPConnector(JEMO_HTTPS_PORT, JEMO_HTTP_PORT, this);
@@ -498,6 +496,11 @@
 
         //we should initialize the authentication layer before starting the plugin manager as all plugins will require authorisation
         JemoAuthentication.init(this);
+
+        IS_IN_INSTALLATION_MODE = false;
+
+        //we need to initialize our plugins/modules first and once they are there we will receive messages which they can process as a result
+        pluginManager = new JemoPluginManager(this);
     }
 
     public synchronized void stop() throws Exception {
@@ -617,7 +620,7 @@
         return moduleBatchList;
     }
 
-    public void sendRunBatchMessage(int moduleId, String moduleImplementation, String targetInstanceQueueUrl) {
+    public void sendRunBatchMessage(int moduleId, String moduleImplementation, double version, String targetInstanceQueueUrl) {
         Util.B(null, y -> {
             pluginManager.runWithModuleContext(Void.class, x -> {
                 JemoMessage scheduleMsg = new JemoMessage();
@@ -625,6 +628,7 @@
                 scheduleMsg.setPluginId(moduleId);
                 scheduleMsg.getAttributes().put("module_class", moduleImplementation);
                 scheduleMsg.send(targetInstanceQueueUrl);
+                scheduleMsg.setPluginVersion(version);
                 return null;
             });
         });
diff --git a/core/src/main/java/org/eclipse/jemo/internal/model/AmazonAWSRuntime.java b/core/src/main/java/org/eclipse/jemo/internal/model/AmazonAWSRuntime.java
index 7df475a..223b42b 100644
--- a/core/src/main/java/org/eclipse/jemo/internal/model/AmazonAWSRuntime.java
+++ b/core/src/main/java/org/eclipse/jemo/internal/model/AmazonAWSRuntime.java
@@ -1695,7 +1695,7 @@
                                         .containers(asList(
                                                 new V1Container()
                                                         .name("jemo")
-                                                        .image("eclipse/jemo:0.2")
+                                                        .image("eclipse/jemo:1.0.1")
                                                         .env(asList(
                                                                 new V1EnvVar().name(REGION.label()).value(AWSREGION),
                                                                 new V1EnvVar().name(CLOUD.label()).value("AWS"),
diff --git a/core/src/main/java/org/eclipse/jemo/internal/model/ServerMessage.java b/core/src/main/java/org/eclipse/jemo/internal/model/ServerMessage.java
index df95b1e..a9bdf90 100644
--- a/core/src/main/java/org/eclipse/jemo/internal/model/ServerMessage.java
+++ b/core/src/main/java/org/eclipse/jemo/internal/model/ServerMessage.java
@@ -213,7 +213,7 @@
 					queueUrls.add(JemoPluginManager.getServerInstance().getINSTANCE_QUEUE_URL());
 					break;
 				case JemoMessage.LOCATION_CLOUD:
-					if(Arrays.asList(Jemo.CLOUD_LOCATIONS).stream().anyMatch(cl -> JemoPluginManager.getServerInstance().getINSTANCE_QUEUE_URL().contains("/JEMO-"+cl.toUpperCase()))) {
+					if(Arrays.asList(Jemo.CLOUD_LOCATIONS).stream().anyMatch(cl -> JemoPluginManager.getServerInstance().getINSTANCE_QUEUE_URL().toUpperCase().contains("/JEMO-"+cl.toUpperCase()))) {
 						queueUrls.add(JemoPluginManager.getServerInstance().getINSTANCE_QUEUE_URL());
 					}
 					break;
@@ -225,15 +225,15 @@
 		}
 		//make sure we are not sending to dead instances.
 		Set<String> activeInstances = JemoPluginManager.getServerInstance().getPluginManager().getActiveLocationList().stream()
-			.flatMap(l -> JemoPluginManager.getServerInstance().getPluginManager().listInstances(l).stream().map(inst -> "JEMO-"+l+"-"+inst))
+			.flatMap(l -> JemoPluginManager.getServerInstance().getPluginManager().listInstances(l).stream().map(inst -> ("jemo-"+l+"-"+inst).toUpperCase()))
 			.collect(Collectors.toSet());
 
-		queueUrls.removeIf(q -> !activeInstances.contains(CloudProvider.getInstance().getRuntime().getQueueName(q)));
+		queueUrls.removeIf(q -> !activeInstances.contains(CloudProvider.getInstance().getRuntime().getQueueName(q).toUpperCase()));
 		
 		queueUrls.parallelStream().forEach((q) -> {
 			try {
 				String queueName = CloudProvider.getInstance().getRuntime().getQueueName(q);
-				transmitMessage(message, q, queueName.substring(3,queueName.length()-37));
+				transmitMessage(message, q, queueName.substring(5,queueName.length()-37));
 			}catch(Throwable ex) {
 				Jemo.log(Level.FINE, "[%s][%s] could not broadcast message the queue probably does not exist: message body: %s error %s", q, location, msgJson, JemoError.toString(ex));
 			}
diff --git a/core/src/main/java/org/eclipse/jemo/sys/JemoPluginManager.java b/core/src/main/java/org/eclipse/jemo/sys/JemoPluginManager.java
index 0ba4309..2de10e3 100644
--- a/core/src/main/java/org/eclipse/jemo/sys/JemoPluginManager.java
+++ b/core/src/main/java/org/eclipse/jemo/sys/JemoPluginManager.java
@@ -411,7 +411,7 @@
     protected static long PLUGIN_INSTALLED_ON(String jarFileName) {
         try {
             return CloudProvider.getInstance().getRuntime().getModuleInstallDate(jarFileName);
-        } catch (IOException ioEx) {
+        } catch (Exception e) {
             return System.currentTimeMillis();
         }
     }
@@ -542,7 +542,7 @@
         Set<JemoModule> moduleSet = appList.stream()
                 .flatMap(app -> Util.F(null, x -> loadModules(app.getId()).stream()))
                 .filter(m -> m.getModule().getClass().getName().equals(msg.getModuleClass()))
-                .filter(m -> msg.getPluginVersion() != 0 ? m.getModule().getVersion() == msg.getPluginVersion() : m.getModule().getVersion() == version)
+                .filter(m -> msg.getPluginVersion() != 0 ? m.getMetaData().getVersion() == msg.getPluginVersion() : m.getMetaData().getVersion() == version)
                 .collect(Collectors.toSet());
 
         JemoModule module = moduleSet.stream().limit(1).findAny().orElse(null);
diff --git a/core/src/main/java/org/eclipse/jemo/sys/JemoScheduler.java b/core/src/main/java/org/eclipse/jemo/sys/JemoScheduler.java
index cb16bf5..0e62d3a 100644
--- a/core/src/main/java/org/eclipse/jemo/sys/JemoScheduler.java
+++ b/core/src/main/java/org/eclipse/jemo/sys/JemoScheduler.java
@@ -241,7 +241,7 @@
 				Map<String,List<String>> moduleInstanceTargetMap = moduleInstanceMap.entrySet().stream()
 					.filter(e -> !e.getValue().isEmpty())
 					.map(e -> {
-						final KeyValue<List<String>> result = new KeyValue<>(e.getKey().getImplementation(),new ArrayList<>());
+						final KeyValue<List<String>> result = new KeyValue<>(e.getKey().getImplementation() + "_" + e.getKey().getVersion(),new ArrayList<>());
 						ModuleActivityMap modActivity = activityMap.stream().filter(act -> act.module.getImplementation().equals(e.getKey().getImplementation()) && act.module.getId() == e.getKey().getId())
 							.findAny().orElse(null);
 						if(modActivity != null) {
@@ -281,15 +281,16 @@
 					.forEach(e -> {
 					final String queueUrl = instanceQueueUrlList.stream().filter(qId -> qId.endsWith(e.getKey())).findFirst().orElse(e.getKey());
 					if(queueUrl != null) {
+						final String[] moduleClassNameAndVersion = e.getValue().split("_");
 						final int moduleId = instanceModuleMap.values().stream()
 							.flatMap(List::stream)
-							.filter(m -> m.getImplementation().equals(e.getValue()))
+							.filter(m -> m.getImplementation().equals(moduleClassNameAndVersion[0]))
 							.findAny()
 							.map(m -> m.getId())
 							.orElse(-1);
 						if(moduleId != -1) {
 							if(RUNNING.get()) {
-								jemoServer.sendRunBatchMessage(moduleId, e.getValue(), queueUrl);
+								jemoServer.sendRunBatchMessage(moduleId, moduleClassNameAndVersion[0], Double.parseDouble(moduleClassNameAndVersion[1]), queueUrl);
 							}
 						}
 					}
diff --git a/core/src/main/resources/aws/cluster/kubernetes/jemo-statefulset.yaml b/core/src/main/resources/aws/cluster/kubernetes/jemo-statefulset.yaml
index e9ab10c..30ac4b2 100644
--- a/core/src/main/resources/aws/cluster/kubernetes/jemo-statefulset.yaml
+++ b/core/src/main/resources/aws/cluster/kubernetes/jemo-statefulset.yaml
@@ -15,7 +15,7 @@
     spec:
       containers:
         - name: jemo
-          image: eclipse/jemo:0.2
+          image: eclipse/jemo:1.0.1
           env:
             - name: eclipse.jemo.csp.region
               value: "_REGION_"
diff --git a/core/src/main/resources/runtime-jars/azure-runtime.jar b/core/src/main/resources/runtime-jars/azure-runtime.jar
index 767fdee..2a21daf 100644
--- a/core/src/main/resources/runtime-jars/azure-runtime.jar
+++ b/core/src/main/resources/runtime-jars/azure-runtime.jar
Binary files differ
