diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index 2bd9224..08d706e 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -19,6 +19,17 @@
                     Apache Karaf 2.1.0
                     ==================
 
+  Overview
+  --------
+
+   New to this release of Apache Karaf is a JAAS Database Login Module, a way to store
+ passwords in a secured way, a mechanism that allows a karaf application to distinguish 
+ between UserPrincipal and RolePrincipal without depending from the Karaf JAAS Module. 
+   The shell console has been enhanced to be available in a plain non-OSGi environment and
+ smart tab completion has been improved, along with various commands. 
+   We have also resolved a number of outstanding issues, and improved support on OS X and 
+ IBM Java based systems. For more detail please see the change log below.
+
   Changelog
   ---------
 
diff --git a/archetypes/command/pom.xml b/archetypes/command/pom.xml
index 042f2af..7bddecf 100644
--- a/archetypes/command/pom.xml
+++ b/archetypes/command/pom.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
 
diff --git a/archetypes/command/src/main/resources/META-INF/maven/archetype-metadata.xml b/archetypes/command/src/main/resources/META-INF/maven/archetype-metadata.xml
index 1222d33..f0b418c 100644
--- a/archetypes/command/src/main/resources/META-INF/maven/archetype-metadata.xml
+++ b/archetypes/command/src/main/resources/META-INF/maven/archetype-metadata.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
 <archetype-descriptor xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd" name="org.apache.karaf.archetypes.command"
     xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
diff --git a/archetypes/command/src/main/resources/archetype-resources/pom.xml b/archetypes/command/src/main/resources/archetype-resources/pom.xml
index 7543b7d..494cc59 100644
--- a/archetypes/command/src/main/resources/archetype-resources/pom.xml
+++ b/archetypes/command/src/main/resources/archetype-resources/pom.xml
@@ -1,3 +1,19 @@
+##---------------------------------------------------------------------------
+##  Licensed to the Apache Software Foundation (ASF) under one or more
+##  contributor license agreements.  See the NOTICE file distributed with
+##  this work for additional information regarding copyright ownership.
+##  The ASF licenses this file to You under the Apache License, Version 2.0
+##  (the "License"); you may not use this file except in compliance with
+##  the License.  You may obtain a copy of the License at
+##
+##     http://www.apache.org/licenses/LICENSE-2.0
+##
+##  Unless required by applicable law or agreed to in writing, software
+##  distributed under the License is distributed on an "AS IS" BASIS,
+##  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+##  See the License for the specific language governing permissions and
+##  limitations under the License.
+##---------------------------------------------------------------------------
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     <modelVersion>4.0.0</modelVersion>
diff --git a/archetypes/command/src/main/resources/archetype-resources/src/main/java/__command__.java b/archetypes/command/src/main/resources/archetype-resources/src/main/java/__command__.java
index 2694702..6982495 100644
--- a/archetypes/command/src/main/resources/archetype-resources/src/main/java/__command__.java
+++ b/archetypes/command/src/main/resources/archetype-resources/src/main/java/__command__.java
@@ -1,3 +1,19 @@
+##---------------------------------------------------------------------------
+##  Licensed to the Apache Software Foundation (ASF) under one or more
+##  contributor license agreements.  See the NOTICE file distributed with
+##  this work for additional information regarding copyright ownership.
+##  The ASF licenses this file to You under the Apache License, Version 2.0
+##  (the "License"); you may not use this file except in compliance with
+##  the License.  You may obtain a copy of the License at
+##
+##     http://www.apache.org/licenses/LICENSE-2.0
+##
+##  Unless required by applicable law or agreed to in writing, software
+##  distributed under the License is distributed on an "AS IS" BASIS,
+##  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+##  See the License for the specific language governing permissions and
+##  limitations under the License.
+##---------------------------------------------------------------------------
 #set( $symbol_pound = '#' )
 #set( $symbol_dollar = '$' )
 #set( $symbol_escape = '\' )
diff --git a/archetypes/command/src/main/resources/archetype-resources/src/main/resources/OSGI-INF/blueprint/shell-log.xml b/archetypes/command/src/main/resources/archetype-resources/src/main/resources/OSGI-INF/blueprint/shell-log.xml
index 0c6fabf..f7dd91f 100644
--- a/archetypes/command/src/main/resources/archetype-resources/src/main/resources/OSGI-INF/blueprint/shell-log.xml
+++ b/archetypes/command/src/main/resources/archetype-resources/src/main/resources/OSGI-INF/blueprint/shell-log.xml
@@ -1,3 +1,19 @@
+##---------------------------------------------------------------------------
+##  Licensed to the Apache Software Foundation (ASF) under one or more
+##  contributor license agreements.  See the NOTICE file distributed with
+##  this work for additional information regarding copyright ownership.
+##  The ASF licenses this file to You under the Apache License, Version 2.0
+##  (the "License"); you may not use this file except in compliance with
+##  the License.  You may obtain a copy of the License at
+##
+##     http://www.apache.org/licenses/LICENSE-2.0
+##
+##  Unless required by applicable law or agreed to in writing, software
+##  distributed under the License is distributed on an "AS IS" BASIS,
+##  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+##  See the License for the specific language governing permissions and
+##  limitations under the License.
+##---------------------------------------------------------------------------
 #set( $symbol_pound = '#' )
 #set( $symbol_dollar = '$' )
 #set( $symbol_escape = '\' )
diff --git a/archetypes/command/src/main/resources/archetype-resources/src/test/java/__command__Test.java b/archetypes/command/src/main/resources/archetype-resources/src/test/java/__command__Test.java
index a386dac..07844ac 100644
--- a/archetypes/command/src/main/resources/archetype-resources/src/test/java/__command__Test.java
+++ b/archetypes/command/src/main/resources/archetype-resources/src/test/java/__command__Test.java
@@ -1,3 +1,19 @@
+##---------------------------------------------------------------------------
+##  Licensed to the Apache Software Foundation (ASF) under one or more
+##  contributor license agreements.  See the NOTICE file distributed with
+##  this work for additional information regarding copyright ownership.
+##  The ASF licenses this file to You under the Apache License, Version 2.0
+##  (the "License"); you may not use this file except in compliance with
+##  the License.  You may obtain a copy of the License at
+##
+##     http://www.apache.org/licenses/LICENSE-2.0
+##
+##  Unless required by applicable law or agreed to in writing, software
+##  distributed under the License is distributed on an "AS IS" BASIS,
+##  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+##  See the License for the specific language governing permissions and
+##  limitations under the License.
+##---------------------------------------------------------------------------
 #set( $symbol_pound = '#' )
 #set( $symbol_dollar = '$' )
 #set( $symbol_escape = '\' )
diff --git a/archetypes/command/src/test/resources/projects/basic/archetype.properties b/archetypes/command/src/test/resources/projects/basic/archetype.properties
index 694cc99..f3824a3 100644
--- a/archetypes/command/src/test/resources/projects/basic/archetype.properties
+++ b/archetypes/command/src/test/resources/projects/basic/archetype.properties
@@ -1,4 +1,19 @@
-#Mon Jul 19 10:12:55 EEST 2010
+##---------------------------------------------------------------------------
+##  Licensed to the Apache Software Foundation (ASF) under one or more
+##  contributor license agreements.  See the NOTICE file distributed with
+##  this work for additional information regarding copyright ownership.
+##  The ASF licenses this file to You under the Apache License, Version 2.0
+##  (the "License"); you may not use this file except in compliance with
+##  the License.  You may obtain a copy of the License at
+##
+##     http://www.apache.org/licenses/LICENSE-2.0
+##
+##  Unless required by applicable law or agreed to in writing, software
+##  distributed under the License is distributed on an "AS IS" BASIS,
+##  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+##  See the License for the specific language governing permissions and
+##  limitations under the License.
+##---------------------------------------------------------------------------
 version=0.1-SNAPSHOT
 groupId=archetype.it
 artifactId=basic
diff --git a/archetypes/itests/pom.xml b/archetypes/itests/pom.xml
index 41f2dba..ac94b7c 100644
--- a/archetypes/itests/pom.xml
+++ b/archetypes/itests/pom.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
diff --git a/deployer/war/src/main/java/org/apache/karaf/deployer/war/WarDeploymentListener.java b/deployer/war/src/main/java/org/apache/karaf/deployer/war/WarDeploymentListener.java
index d84a028..536a69f 100644
--- a/deployer/war/src/main/java/org/apache/karaf/deployer/war/WarDeploymentListener.java
+++ b/deployer/war/src/main/java/org/apache/karaf/deployer/war/WarDeploymentListener.java
@@ -18,28 +18,13 @@
 package org.apache.karaf.deployer.war;
 
 import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
 import java.net.URL;
 import java.util.jar.Attributes;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
-import java.util.jar.JarInputStream;
 import java.util.jar.Manifest;
 
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.apache.felix.fileinstall.ArtifactUrlTransformer;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
 
 /**
  * A deployment listener that listens for war deployements.
@@ -48,11 +33,6 @@
 
 	private static final String PATH_SEPERATOR = "/";
 
-	private static final Log LOGGER = LogFactory
-			.getLog(WarDeploymentListener.class);
-
-	private DocumentBuilderFactory dbf;
-
 	public boolean canHandle(File artifact) {
 		try {
 			JarFile jar = new JarFile(artifact);
@@ -80,79 +60,24 @@
 		String path = artifact.getPath();
 		String protocol = artifact.getProtocol();
 
+		int lastSlash = 0;
 		// match the last slash to retrieve the name of the archive
-		int lastSlash = path.lastIndexOf(PATH_SEPERATOR);
+		if ("jardir".equalsIgnoreCase(protocol)) {
+		    // just to make sure this works on all kinds of windows
+		    File fileInstance = new File(path);
+		    // with a jardir this is system specific
+		    lastSlash = fileInstance.getAbsolutePath().lastIndexOf(File.separator);
+		} else {
+		    // a standard file is not system specific, this is always a standardized URL path
+		    lastSlash = path.lastIndexOf(PATH_SEPERATOR);
+		}
 		// match the suffix so we get rid of it for displaying
-		int suffixPos = path.lastIndexOf(".war");
+		int suffixPos = path.length() - 4; // usually this should be a war but might also be a jar plus the colon makes 4 signs
 
-		// Fall back if there is no display-name set in the web.xml or if the
-		// web.xml can't be read.
+		// the display name for a web context is derived from the name of the archive
 		String displayName = path.substring(lastSlash + 1, suffixPos);
-		try {
-			// step through the jar to find the web.xml
-			JarInputStream jar = new JarInputStream(artifact.openStream());
-			JarEntry nextJarEntry = jar.getNextJarEntry();
-			boolean found = false;
-			while (nextJarEntry != null) {
-				if (nextJarEntry.getName().indexOf("web.xml") != -1
-						&& !nextJarEntry.isDirectory()) {
-					Document doc = parse(jar); // found the web.xml
-					NodeList nodeList = doc.getDocumentElement()
-							.getChildNodes(); // getElementsByTagName("display-name");
-					for (int i = 0; i < nodeList.getLength(); i++) {
-						Node item = nodeList.item(i);
-						String nodeName = item.getNodeName();
-						if ("display-name".equalsIgnoreCase(nodeName)) {
-							String nodeValue = item.getFirstChild()
-									.getNodeValue();
-							if (nodeValue != null) {
-								displayName = nodeValue;
-							}
-							found = true;
-							jar.close();
-							break;
-						}
-					}
-				}
-				if (found)
-					break;
-				else
-					nextJarEntry = jar.getNextJarEntry();
-			}
-			// alter the original URL artifact
-		} catch (Exception e) {
-			LOGGER.warn("Unable to create Webapp-Context from web.xml", e);
-		}
-		return new URL("war", null, protocol + ":" + path + "?Webapp-Context="
-				+ displayName);
-	}
-
-	private Document parse(InputStream inputStream)
-			throws ParserConfigurationException, SAXException, IOException {
-		if (dbf == null) {
-			dbf = DocumentBuilderFactory.newInstance();
-			dbf.setNamespaceAware(true);
-		}
-
-		DocumentBuilder db = dbf.newDocumentBuilder();
-		db.setErrorHandler(new ErrorHandler() {
-
-			public void warning(SAXParseException exception)
-					throws SAXException {
-				// ignore waring
-			}
-
-			public void fatalError(SAXParseException exception)
-					throws SAXException {
-				throw exception;
-			}
-
-			public void error(SAXParseException exception) throws SAXException {
-				throw exception;
-			}
-		});
-
-		return db.parse(inputStream);
+		
+		return new URL("war", null, protocol + ":" + path + "?Webapp-Context=" + displayName);
 	}
 
 }
diff --git a/jaas/jasypt/pom.xml b/jaas/jasypt/pom.xml
index de78aa4..5eadc61 100644
--- a/jaas/jasypt/pom.xml
+++ b/jaas/jasypt/pom.xml
@@ -87,4 +87,4 @@
         </plugins>
     </build>
 
-</project>
\ No newline at end of file
+</project>
diff --git a/shell/commands/src/main/resources/META-INF/services/org/apache/karaf/shell/commands b/shell/commands/src/main/resources/META-INF/services/org/apache/karaf/shell/commands
index fb7bf30..7d6e2b9 100644
--- a/shell/commands/src/main/resources/META-INF/services/org/apache/karaf/shell/commands
+++ b/shell/commands/src/main/resources/META-INF/services/org/apache/karaf/shell/commands
@@ -1,3 +1,19 @@
+##---------------------------------------------------------------------------
+##  Licensed to the Apache Software Foundation (ASF) under one or more
+##  contributor license agreements.  See the NOTICE file distributed with
+##  this work for additional information regarding copyright ownership.
+##  The ASF licenses this file to You under the Apache License, Version 2.0
+##  (the "License"); you may not use this file except in compliance with
+##  the License.  You may obtain a copy of the License at
+##
+##     http://www.apache.org/licenses/LICENSE-2.0
+##
+##  Unless required by applicable law or agreed to in writing, software
+##  distributed under the License is distributed on an "AS IS" BASIS,
+##  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+##  See the License for the specific language governing permissions and
+##  limitations under the License.
+##---------------------------------------------------------------------------
 org.apache.karaf.shell.commands.CatAction
 org.apache.karaf.shell.commands.ClearAction
 org.apache.karaf.shell.commands.EachAction
diff --git a/shell/console/src/main/resources/META-INF/services/org/apache/karaf/shell/commands b/shell/console/src/main/resources/META-INF/services/org/apache/karaf/shell/commands
index 0616a95..3f110a7 100644
--- a/shell/console/src/main/resources/META-INF/services/org/apache/karaf/shell/commands
+++ b/shell/console/src/main/resources/META-INF/services/org/apache/karaf/shell/commands
@@ -1 +1,17 @@
+##---------------------------------------------------------------------------
+##  Licensed to the Apache Software Foundation (ASF) under one or more
+##  contributor license agreements.  See the NOTICE file distributed with
+##  this work for additional information regarding copyright ownership.
+##  The ASF licenses this file to You under the Apache License, Version 2.0
+##  (the "License"); you may not use this file except in compliance with
+##  the License.  You may obtain a copy of the License at
+##
+##     http://www.apache.org/licenses/LICENSE-2.0
+##
+##  Unless required by applicable law or agreed to in writing, software
+##  distributed under the License is distributed on an "AS IS" BASIS,
+##  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+##  See the License for the specific language governing permissions and
+##  limitations under the License.
+##---------------------------------------------------------------------------
 org.apache.karaf.shell.console.HelpAction
diff --git a/util/pom.xml b/util/pom.xml
index a469667..5c158de 100644
--- a/util/pom.xml
+++ b/util/pom.xml
@@ -42,4 +42,4 @@
         <appendedResourcesDirectory>${basedir}/../etc/appended-resources</appendedResourcesDirectory>
     </properties>
 
-</project>
\ No newline at end of file
+</project>
diff --git a/util/src/test/resources/test.properties b/util/src/test/resources/test.properties
index 616c260..2856e72 100644
--- a/util/src/test/resources/test.properties
+++ b/util/src/test/resources/test.properties
@@ -1,3 +1,19 @@
+##---------------------------------------------------------------------------
+##  Licensed to the Apache Software Foundation (ASF) under one or more
+##  contributor license agreements.  See the NOTICE file distributed with
+##  this work for additional information regarding copyright ownership.
+##  The ASF licenses this file to You under the Apache License, Version 2.0
+##  (the "License"); you may not use this file except in compliance with
+##  the License.  You may obtain a copy of the License at
+##
+##     http://www.apache.org/licenses/LICENSE-2.0
+##
+##  Unless required by applicable law or agreed to in writing, software
+##  distributed under the License is distributed on an "AS IS" BASIS,
+##  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+##  See the License for the specific language governing permissions and
+##  limitations under the License.
+##---------------------------------------------------------------------------
 #
 # test.properties
 # Used in the PropertiesTest
