I fix bug related to running multiple versions of the same module on Jemo. Also updated the jemo pom/image version to 1.0.1
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