diff --git a/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java b/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
index 06d9e63..edcef19 100644
--- a/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
+++ b/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
@@ -166,6 +166,9 @@
     @Parameter(property = "tomee-plugin.quick-session", defaultValue = "true")
     private boolean quickSession;
 
+    @Parameter(property = "tomee-plugin.force-reloadable", defaultValue = "false")
+    protected boolean forceReloadable;
+
     /**
      * supported formats:
      * --> groupId:artifactId:version...
@@ -554,6 +557,10 @@
             strings.addAll(Arrays.asList(args.split(" ")));
         }
 
+        if (forceReloadable) {
+            strings.add("-Dtomee.force-reloadable=true");
+        }
+
         // init env for RemoteServer
         System.setProperty("openejb.home", catalinaBase.getAbsolutePath());
         if (debug) {
diff --git a/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UpdatableTomEEMojo.java b/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UpdatableTomEEMojo.java
index ecad27d..ffb0d13 100644
--- a/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UpdatableTomEEMojo.java
+++ b/openejb/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UpdatableTomEEMojo.java
@@ -63,10 +63,10 @@
     private boolean reloadOnUpdate;
 
     private Timer timer;
+    private SynchronizerRedeployer task;
 
     @Override
     protected void run() {
-        int sync = 0;
         if (synchronization != null) {
             initSynchronization(synchronization);
         }
@@ -76,7 +76,9 @@
             }
         }
 
-        startSynchronizers();
+        if (startSynchronizers()) {
+            forceReloadable = true;
+        }
 
         super.run();
     }
@@ -108,10 +110,11 @@
 
     @Override
     protected void addShutdownHooks(final RemoteServer server) {
-        if (synchronization != null) {
+        if (synchronization != null || synchronizations != null) {
             Runtime.getRuntime().addShutdownHook(new Thread() {
                 @Override
                 public void run() {
+                    task.cancel();
                     timer.cancel();
                 }
             });
@@ -119,7 +122,7 @@
         super.addShutdownHooks(server);
     }
 
-    protected void startSynchronizers() {
+    protected boolean startSynchronizers() {
         timer = new Timer("tomee-maven-plugin-synchronizer");
 
         final Collection<Synchronizer> synchronizers = new ArrayList<Synchronizer>();
@@ -143,14 +146,16 @@
 
         // serialazing synchronizers to avoid multiple updates at the same time and reload a single time the app
         if (!synchronizers.isEmpty()) {
-            final SynchronizerRedeployer task = new SynchronizerRedeployer(synchronizers);
+            task = new SynchronizerRedeployer(synchronizers);
             getLog().info("Starting synchronizer with an update interval of " + interval);
             if (interval > INITIAL_DELAY) {
                 timer.scheduleAtFixedRate(task, interval, interval);
             } else {
                 timer.scheduleAtFixedRate(task, INITIAL_DELAY, interval);
             }
+            return true;
         }
+        return false;
     }
 
     private class SynchronizerRedeployer extends TimerTask {
diff --git a/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java b/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
index b329ee9..08e50fb 100644
--- a/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
+++ b/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
@@ -175,6 +175,8 @@
     public static final String TOMEE_EAT_EXCEPTION_PROP = "tomee.eat-exception";
     public static final String TOMEE_INIT_J2EE_INFO = "tomee.init-J2EE-info";
 
+    private static final boolean FORCE_RELOADABLE = SystemInstance.get().getOptions().get("tomee.force-reloadable", false);
+
     /**
      * Context information for web applications
      */
@@ -698,6 +700,10 @@
         // just adding a carriage return to get logs more readable
         logger.info("-------------------------\nTomcatWebAppBuilder.init " + finalName(standardContext.getPath()));
 
+        if (FORCE_RELOADABLE) {
+            standardContext.setReloadable(true);
+        }
+
         final String name = standardContext.getName();
 
         initJ2EEInfo(standardContext);
