diff --git a/java/maven/src/org/netbeans/modules/maven/newproject/TemplateUtils.java b/java/maven/src/org/netbeans/modules/maven/newproject/TemplateUtils.java
index 77bf150..03a4afb 100644
--- a/java/maven/src/org/netbeans/modules/maven/newproject/TemplateUtils.java
+++ b/java/maven/src/org/netbeans/modules/maven/newproject/TemplateUtils.java
@@ -255,27 +255,29 @@
             POMModel model = POMModelFactory.getDefault().getModel(modelSource);
             org.netbeans.modules.maven.model.pom.Project root = model.getProject();
             if (root != null) {
-                if (model.startTransaction()) {
-                    try {
-                        org.netbeans.modules.maven.model.pom.Properties props = root.getProperties();
-                        if (props == null) {
-                            props = model.getFactory().createProperties();
-                            root.setProperties(props);
-                        }
-                        String packageName = (String) properties.get(TemplateUtils.PARAM_PACKAGE);
-                        String mainClass = (String) properties.get(TemplateUtils.PARAM_MAIN_CLASS_NAME);
-                        if (mainClass == null || mainClass.isEmpty()) {
-                            mainClass = "App";  // NOI18N
-                        }
-                        if (packageName != null && !packageName.isEmpty()) {
-                            mainClass = packageName + '.' + mainClass;
-                        }
-                        props.setProperty("exec.mainClass", mainClass); // NOI18N
-                    } finally {
-                        model.endTransaction();
+                if (model.getProject().getPackaging() == null || "jar".equals(model.getProject().getPackaging())) {
+                    if (model.startTransaction()) {
                         try {
-                            Utilities.saveChanges(model);
-                        } catch (IOException ex) {}
+                            org.netbeans.modules.maven.model.pom.Properties props = root.getProperties();
+                            if (props == null) {
+                                props = model.getFactory().createProperties();
+                                root.setProperties(props);
+                            }
+                            String packageName = (String) properties.get(TemplateUtils.PARAM_PACKAGE);
+                            String mainClass = (String) properties.get(TemplateUtils.PARAM_MAIN_CLASS_NAME);
+                            if (mainClass == null || mainClass.isEmpty()) {
+                                mainClass = "App";  // NOI18N
+                            }
+                            if (packageName != null && !packageName.isEmpty()) {
+                                mainClass = packageName + '.' + mainClass;
+                            }
+                            props.setProperty("exec.mainClass", mainClass); // NOI18N
+                        } finally {
+                            model.endTransaction();
+                            try {
+                                Utilities.saveChanges(model);
+                            } catch (IOException ex) {}
+                        }
                     }
                 }
             }
diff --git a/java/maven/src/org/netbeans/modules/maven/newproject/idenative/IDENativeMavenWizardIterator.java b/java/maven/src/org/netbeans/modules/maven/newproject/idenative/IDENativeMavenWizardIterator.java
index ef2e035..7e380de 100644
--- a/java/maven/src/org/netbeans/modules/maven/newproject/idenative/IDENativeMavenWizardIterator.java
+++ b/java/maven/src/org/netbeans/modules/maven/newproject/idenative/IDENativeMavenWizardIterator.java
@@ -93,6 +93,7 @@
 
         return new FileBuilder(w.getTemplate().getPrimaryFile(), w.getTargetFolder().getPrimaryFile().getParent()).
             param(TemplateUtils.PARAM_PACKAGE, (String) wiz.getProperty("package")).
+            param(TemplateUtils.PARAM_PACKAGING, (String) this.packaging).
             defaultMode(FileBuilder.Mode.COPY).
             name(w.getTargetName()).
             useLookup(Lookups.fixed(h));
diff --git a/java/maven/src/org/netbeans/modules/maven/newproject/idenative/IDENativeTemplateHandler.java b/java/maven/src/org/netbeans/modules/maven/newproject/idenative/IDENativeTemplateHandler.java
index 8d81e48..4a4261f 100644
--- a/java/maven/src/org/netbeans/modules/maven/newproject/idenative/IDENativeTemplateHandler.java
+++ b/java/maven/src/org/netbeans/modules/maven/newproject/idenative/IDENativeTemplateHandler.java
@@ -122,15 +122,18 @@
         params.put("projecName", cd.getName());
         params.put("packagePath", pi.packageName == null ? "" : pi.packageName.replace('.', '/')); // NOI18N
         
-        String mainName;
-        if (!params.containsKey("mainClassName")) { // NOI18N
-            String derived = deriveClassName(pi.artifactId);
-            if (BaseUtilities.isJavaIdentifier(derived)) {
-                mainName = derived;
-            } else {
-                mainName = "App"; // NOI18N
+        String packaging = cd.getValue(TemplateUtils.PARAM_PACKAGING);
+        if (packaging == null || "jar".equals(packaging)) { // NOI18N
+            String mainName;
+            if (!params.containsKey("mainClassName")) { // NOI18N
+                String derived = deriveClassName(pi.artifactId);
+                if (BaseUtilities.isJavaIdentifier(derived)) {
+                    mainName = derived;
+                } else {
+                    mainName = "App"; // NOI18N
+                }
+                params.put("mainClassName", mainName); // NOI18N
             }
-            params.put("mainClassName", mainName); // NOI18N
         }
         
 
diff --git a/java/maven/src/org/netbeans/modules/maven/newproject/idenative/PomJavaNativeMWI.java b/java/maven/src/org/netbeans/modules/maven/newproject/idenative/PomJavaNativeMWI.java
index ac01a5c..be689be 100644
--- a/java/maven/src/org/netbeans/modules/maven/newproject/idenative/PomJavaNativeMWI.java
+++ b/java/maven/src/org/netbeans/modules/maven/newproject/idenative/PomJavaNativeMWI.java
@@ -28,7 +28,14 @@
  *
  * @author mkleint
  */
-@TemplateRegistration(folder=ArchetypeWizards.TEMPLATE_FOLDER, position=980, displayName="#LBL_Maven_POM_Archetype", iconBase="org/netbeans/modules/maven/resources/Maven2Icon.gif", description="pom-root.html")
+@TemplateRegistration(
+        displayName="#LBL_Maven_POM_Archetype",
+        iconBase="org/netbeans/modules/maven/resources/Maven2Icon.gif",
+        description="pom-root.html",
+        folder=ArchetypeWizards.TEMPLATE_FOLDER,
+        position=980,
+        createHandlerClass = IDENativeTemplateHandler.class
+)
 @NbBundle.Messages("LBL_Maven_POM_Archetype=POM Project")
 public class PomJavaNativeMWI extends IDENativeMavenWizardIterator {
 
diff --git a/platform/openide.util.lookup/src/org/openide/util/lookup/implspi/ActiveQueue.java b/platform/openide.util.lookup/src/org/openide/util/lookup/implspi/ActiveQueue.java
index dd57b50..abf380a 100644
--- a/platform/openide.util.lookup/src/org/openide/util/lookup/implspi/ActiveQueue.java
+++ b/platform/openide.util.lookup/src/org/openide/util/lookup/implspi/ActiveQueue.java
@@ -57,17 +57,23 @@
         }
 
         @Override
-        public Reference<Object> remove(long timeout) throws IllegalArgumentException, InterruptedException {
-            throw new InterruptedException();
+        public Reference<? extends Object> remove(long timeout) throws IllegalArgumentException, InterruptedException {
+            if (timeout < 0) {
+                throw new IllegalArgumentException("Negative timeout value");
+            } else if (Thread.currentThread() != Daemon.running) {
+                throw new InterruptedException();
+            }
+
+            return super.remove(timeout);
         }
 
         @Override
-        public Reference<Object> remove() throws InterruptedException {
-            throw new InterruptedException();
-        }
-        
-        final Reference<? extends Object> removeSuper() throws InterruptedException {
-            return super.remove(0);
+        public Reference<? extends Object> remove() throws InterruptedException {
+            if (Thread.currentThread() != Daemon.running) {
+                throw new InterruptedException();
+            }
+
+            return super.remove();
         }
     }
 
@@ -112,7 +118,7 @@
                     if (impl == null) {
                         return;
                     }
-                    Reference<?> ref = impl.removeSuper();
+                    Reference<?> ref = impl.remove();
                     LOGGER.log(Level.FINE, "Got dequeued reference {0}", new Object[] { ref });
                     if (!(ref instanceof Runnable)) {
                         LOGGER.log(Level.WARNING, "A reference not implementing runnable has been added to the Utilities.activeReferenceQueue(): {0}", ref.getClass());
@@ -131,9 +137,8 @@
                         // to allow GC
                         ref = null;
                     }
-                } catch (InterruptedException ex) {
-                    // Can happen during VM shutdown, it seems. Ignore.
-                    continue;
+                } catch (InterruptedException ignored) {
+                    // Can happen during VM shutdown, it seems.
                 }
             }
         }
