[maven-release-plugin]  copy for tag karaf-2.3.1

git-svn-id: https://svn.apache.org/repos/asf/karaf/tags/karaf-2.3.1@1451431 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index d3ea777..a21b5e4 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -73,6 +73,7 @@
     * [KARAF-2192] - Karaf obr:listURl and obr:list tests fail on faster boxes
     * [KARAF-2206] - The container fails to start correctly with IBM Java 6
     * [KARAF-2209] - Allow overriding system properties
+    * [KARAF-2213] - Missing org.apache.karaf.jaas.authz-2.3.1.jar from the system repo prevents minimal distro startup
 
 ** Dependency upgrade
     * [KARAF-1801] - slf4j 1.7.0
diff --git a/assemblies/apache-karaf/src/main/filtered-resources/minimal/startup.properties b/assemblies/apache-karaf/src/main/filtered-resources/minimal/startup.properties
index e0b9d62..6a69fc1 100644
--- a/assemblies/apache-karaf/src/main/filtered-resources/minimal/startup.properties
+++ b/assemblies/apache-karaf/src/main/filtered-resources/minimal/startup.properties
@@ -51,7 +51,6 @@
 org/apache/karaf/jaas/org.apache.karaf.jaas.config/${project.version}/org.apache.karaf.jaas.config-${project.version}.jar=30
 org/apache/karaf/jaas/org.apache.karaf.jaas.modules/${project.version}/org.apache.karaf.jaas.modules-${project.version}.jar=30
 org/apache/karaf/jaas/org.apache.karaf.jaas.command/${project.version}/org.apache.karaf.jaas.command-${project.version}.jar=30
-org/apache/karaf/jaas/org.apache.karaf.jaas.authz/${project.version}/org.apache.karaf.jaas.authz-${project.version}.jar=30
 org/apache/karaf/features/org.apache.karaf.features.core/${project.version}/org.apache.karaf.features.core-${project.version}.jar=30
 org/apache/karaf/features/org.apache.karaf.features.command/${project.version}/org.apache.karaf.features.command-${project.version}.jar=30
 org/apache/karaf/features/org.apache.karaf.features.management/${project.version}/org.apache.karaf.features.management-${project.version}.jar=30
diff --git a/karaf-2.3.x/.gitignore b/karaf-2.3.x/.gitignore
deleted file mode 100644
index 27bf151..0000000
--- a/karaf-2.3.x/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-*.i??
-.idea
-.project
-.classpath
-.settings
-target
-eclipse-classes
-bin
diff --git a/karaf-2.3.x/BUILDING b/karaf-2.3.x/BUILDING
deleted file mode 100644
index 474fa48..0000000
--- a/karaf-2.3.x/BUILDING
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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.
- */
-
-Building Apache Karaf
-=====================
-
-Initial Setup
--------------
-
-1) Install J2SE 5.0 SDK (or later), which can be downloaded from 
-   http://www.oracle.com/technetwork/java/javase/downloads/index-jdk5-jsp-142662.html. 
-   Use version of "JDK 5.0 Update 22" (or later).
-
-2) Make sure that your JAVA_HOME environment variable is set to the newly installed 
-   JDK location, and that your PATH includes %JAVA_HOME%\bin (windows) or 
-   $JAVA_HOME$/bin (unix).
-
-3) Install Maven 2.2.1 (or later), which can be downloaded from 
-   http://maven.apache.org/download.html. Make sure that your PATH includes 
-   the MVN_HOME/bin directory. 
-
-
-Building
---------
-
-1) Change to the top level directory of Apache Karaf source distribution.
-2) Run
-         $> mvn
-   This will compile Apache Karaf and run all of the tests in the
-   Apache Karaf source distribution. Alternatively, you can run
-         $> mvn -Pfastinstall
-   This will compile Apache Karaf without running the tests and takes less
-   time to build.
-   Depending on the load of remote Maven 2.0 repositories, you may have 
-   to run "mvn" several times until the required dependencies are 
-   all located in your local maven repository. It usually takes some time for 
-   maven to download required dependencies in the first build.
-3) The distributions will be available under "assembly/target" directory.
-
diff --git a/karaf-2.3.x/LICENSE b/karaf-2.3.x/LICENSE
deleted file mode 100644
index b36a53d..0000000
--- a/karaf-2.3.x/LICENSE
+++ /dev/null
@@ -1,475 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed 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.
-
-For asm:
-Copyright (c) 2000-2011 INRIA, France Telecom
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-
-3. Neither the name of the copyright holders nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGE.
-
-For equinox:
-Eclipse Public License - v 1.0
-
-THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT").
-ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
-
-1. DEFINITIONS
-
-"Contribution" means:
-
-a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
-
-b) in the case of each subsequent Contributor:
-
-i) changes to the Program, and
-
-ii) additions to the Program;
-
-where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.
-A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone
-acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate
-modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not
-derivative works of the Program.
-
-"Contributor" means any person or entity that distributes the Program.
-
-"Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale
-of its Contribution alone or when combined with the Program.
-
-"Program" means the Contributions distributed in accordance with this Agreement.
-
-"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
-
-2. GRANT OF RIGHTS
-
-a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
-royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform,
-distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code
-and object code form.
-
-b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
-royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer
-the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to
-the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such
-addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall
-not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
-
-c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no
-assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity
-based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses
-granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights
-needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program,
-it is Recipient's responsibility to acquire that license before distributing the Program.
-
-d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any,
-to grant the copyright license set forth in this Agreement.
-
-3. REQUIREMENTS
-
-A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
-
-a) it complies with the terms and conditions of this Agreement; and
-
-b) its license agreement:
-
-i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including
-warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and
-fitness for a particular purpose;
-
-ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special,
-incidental and consequential damages, such as lost profits;
-
-iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any
-other party; and
-
-iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain
-it in a reasonable manner on or through a medium customarily used for software exchange.
-
-When the Program is made available in source code form:
-
-a) it must be made available under this Agreement; and
-
-b) a copy of this Agreement must be included with each copy of the Program.
-
-Contributors may not remove or alter any copyright notices contained within the Program.
-
-Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably
-allows subsequent Recipients to identify the originator of the Contribution.
-
-4. COMMERCIAL DISTRIBUTION
-
-Commercial distributors of software may accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who
-includes the Program in a commercial product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering,
-such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor
-("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims,
-lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused
-by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a
-commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any
-actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly
-notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and
-cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The
-Indemnified Contributor may participate in any such claim at its own expense.
-
-For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is
-then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties
-related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.
-Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to
-those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result,
-the Commercial Contributor must pay those damages.
-
-5. NO WARRANTY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
-CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
-NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for
-determining the appropriateness of using and distributing the Program and assumes all risks associated with its
-exercise of rights under this Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption
-of operations.
-
-6. DISCLAIMER OF LIABILITY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
-PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
-GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-7. GENERAL
-
-If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity
-or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto,
-such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
-
-If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes
-such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed.
-
-All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of
-such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement
-and any licenses granted by Recipient relating to the Program shall continue and survive.
-
-Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the
-Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right
-to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement
-Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse
-Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new
-version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may
-always be distributed subject to the version of the Agreement under which it was received. In addition, after a new
-version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions)
-under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or
-licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication,
-estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
-
-This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States
-of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the
-cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
-
-For Java Service Wrapper:
-Copyright (c) 1999, 2006 Tanuki Software, Inc.
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of the Java Service Wrapper and associated
-documentation files (the "Software"), to deal in the Software
-without  restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sub-license,
-and/or sell copies of the Software, and to permit persons to
-whom the Software is furnished to do so, subject to the
-following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-
-Portions of the Software have been derived from source code
-developed by Silver Egg Technology under the following license:
-
-BEGIN Silver Egg Techology License -----------------------------------
-
-    Copyright (c) 2001 Silver Egg Technology
-
-    Permission is hereby granted, free of charge, to any person
-    obtaining a copy of this software and associated documentation
-    files (the "Software"), to deal in the Software without
-    restriction, including without limitation the rights to use,
-    copy, modify, merge, publish, distribute, sub-license, and/or
-    sell copies of the Software, and to permit persons to whom the
-    Software is furnished to do so, subject to the following
-    conditions:
-
-    The above copyright notice and this permission notice shall be
-    included in all copies or substantial portions of the Software.
-
-    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-    OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-    NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-    OTHER DEALINGS IN THE SOFTWARE.
-
-END Silver Egg Techology License -------------------------------------
-
-For slf4j
-Copyright (c) 2004-2011 QOS.ch
-All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/karaf-2.3.x/NOTICE b/karaf-2.3.x/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/README b/karaf-2.3.x/README
deleted file mode 100644
index fc19797..0000000
--- a/karaf-2.3.x/README
+++ /dev/null
@@ -1,77 +0,0 @@
-/*

- * 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.

- */

-

-Welcome to Apache Karaf

-=======================

-Apache Karaf is a small OSGi based kernel which provides a

-lightweight container onto which various bundles can be deployed.

-

-The following features are included:

-    * Hot deployment: Karaf supports hot deployment of OSGi bundles by monitoring

-      jar files inside the [home]/deploy directory. Each time a jar is copied in this folder,

-      it will be installed inside the runtime. You can then update or delete it and changes will

-      be handled automatically. In addition, the Kernel also supports exploded bundles and custom

-      deployers (a spring one is included by default).

-    * Dynamic configuration: Services are usually configured through the ConfigurationAdmin OSGi

-      service. Such configuration can be defined in Karaf using property files inside

-      the [home]/etc directory. These configurations are monitored and changes on the properties

-      files will be propagated to the services.

-    * Logging System: using a centralized logging back end supported by Log4J, Karaf

-      supports a number of different APIs (JDK 1.4, JCL, SLF4J, Avalon, Tomcat, OSGi)

-    * Provisioning: Provisioning of libraries or applications can be done through a number of

-      different ways, by which they will be downloaded locally, installed and started.

-    * Native OS integration: Karaf can be integrated into your own Operating System as

-      a service so that the lifecycle will be bound to your Operating System.

-    * Extensible Shell console: Karaf features a nice text console where you can manage the

-      services, install new applications or libraries and manage their state. This shell is easily

-      extensible by deploying new commands dynamically along with new features or applications.

-    * Remote access: use any SSH client to connect to the kernel and issue commands in the console

-    * Security framework based on JAAS

-    * Managing instances: Karaf provides simple commands for managing instances of Karaf.

-      You can easily create, delete, start and stop instances of Karaf through the console.

-

-Getting Started

-===============

-For an Apache Karaf source distribution, please read

-BUILDING for instructions on building Apache Karaf.

-

-For an Apache Karaf binary distribution, please read

-RELEASE-NOTES for installation instructions and list of supported 

-and unsupported features.

-

-The PDF manual is the right place to find any information about Karaf.

-

-Alternatively, you can also find out how to get started here:

-    http://karaf.apache.org/

-

-If you need more help try talking to us on our mailing lists

-    http://karaf.apache.org/site/mailinglists.html

-

-If you find any issues with Apache Karaf, please submit reports

-with JIRA here:

-    http://issues.apache.org/jira/browse/KARAF

-

-We welcome contributions, and encourage you to get involved in the 

-Karaf community. If you'd like to learn more about how you can

-contribute, please see:

-    http://karaf.apache.org/index/community/contributing.html

-

-Many thanks for using Apache Karaf.

-

-

-The Karaf Team

-

diff --git a/karaf-2.3.x/RELEASE-NOTES b/karaf-2.3.x/RELEASE-NOTES
deleted file mode 100644
index a21b5e4..0000000
--- a/karaf-2.3.x/RELEASE-NOTES
+++ /dev/null
@@ -1,1831 +0,0 @@
-/*
- * 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.
- */
-
-                    Apache Karaf 2.3.1
-                    ==================
-
-  Overview
-  --------
-
-  In this patch update to the 2.3.x line contains multiple bug fixes, improvements, and dependency updates including; an upgrade to OSGi spec 4.3.1, Spring 3.1.4.RELEASE, Pax Exam 2.6.0, Pax Web 1.1.12, Jetty 7.6.8.v20121106, Aries Blueprint Core 1.1.0, and fixes to the LDAP login module, improved failover lock logic, removes a console shutdown -f hang, and adds a jre-1.8 to jre.properties.
-  For more detail please see the change log below.
-
-  Changelog
-  ---------
-
-** Bug
-    * [KARAF-1278] - Comands: History does not work, can not edit current comand
-    * [KARAF-1327] - Client: can't execute alias command
-    * [KARAF-1386] - feature install war fails if http-whiteboard is already installed
-    * [KARAF-1715] - Occasional freeze on feature:install webconsole
-    * [KARAF-1748] - Karaf startup fails with NullPointerException when logfile can't be written
-    * [KARAF-1770] - Unable to feature:install webconsole under apache-karaf minimal package
-    * [KARAF-1914] - SSH client authentication randomly fails
-    * [KARAF-1921] - Upgrade to Spring 3.1.x for Karaf 2.3.x
-    * [KARAF-1936] - LDAPLoginModule not working in 2.3.0 due to missing import of javax.net.SocketFactory
-    * [KARAF-1938] - Lock logic should wait for start level change to occur
-    * [KARAF-1949] - console shutdown -f hang
-    * [KARAF-1963] - incorrect statement in developers-guide/branding-console.html
-    * [KARAF-1968] - Uninstalling jndi feature leads to hanging Karaf
-    * [KARAF-1978] - if use script to start a child instance then using karaf console admin:list can't get the instance correct status
-    * [KARAF-1986] - instance.properties file doesn't get updated if karaf.name is changed
-    * [KARAF-1992] - PropertiesLoginModule handles usernames with backslash not correct
-    * [KARAF-2007] - features without start-level in features.xml are always started first
-    * [KARAF-2009] - Error on visualize Licences page
-    * [KARAF-2013] - Bug in Karaf 2.3.0 Maven2 Features Plugin Documentation
-    * [KARAF-2026] - Two broken links on remote console manual page
-    * [KARAF-2027] - invalid password option for admin:connect command in documenation
-    * [KARAF-2029] - delete.user option missing from JDBCLoginModule
-    * [KARAF-2035] - Not able to clone the root instance
-    * [KARAF-2047] - config:edit -f command doesn't work on Windows platform
-    * [KARAF-2052] - Progress bar doesn't display properly on 80 char consoles
-    * [KARAF-2057] - NOTICE and LICENSE files are not correct
-    * [KARAF-2058] - ensure find the root instance entry when update root karaf instance name in instances.properties
-    * [KARAF-2071] - Minimal distribution doesn't start
-    * [KARAF-2073] - Progress bar sometimes goes backwards
-    * [KARAF-2074] - ensure admin service always load storage file instance.properties before each operation
-    * [KARAF-2096] - Upgrade to Pax Exam 2.6.0
-    * [KARAF-2114] - Update org.ops4j.pax.url.mvn.cfg file in child instance to include the system folder
-    * [KARAF-2115] - Sync weaving behavior between root and child instances
-    * [KARAF-2117] - LDAP login module is broken
-    * [KARAF-2133] - Generated title contain unresolved placeholder
-    * [KARAF-2134] - Features deployer does not support mvn urls
-    * [KARAF-2136] - ServiceMix Spec property mispelled in etc/system.properties
-    * [KARAF-2137] - Unable to prevent remote JMX access 
-    * [KARAF-2143] - Remove Jetty JUL logger configuration
-    * [KARAF-2154] - Entering an empty command removes previous command in history
-    * [KARAF-2171] - Start Karaf as service shows 'Activator' error in wrapper.log
-    * [KARAF-2190] - Karaf itest fails on fast machine
-    * [KARAF-2192] - Karaf obr:listURl and obr:list tests fail on faster boxes
-    * [KARAF-2206] - The container fails to start correctly with IBM Java 6
-    * [KARAF-2209] - Allow overriding system properties
-    * [KARAF-2213] - Missing org.apache.karaf.jaas.authz-2.3.1.jar from the system repo prevents minimal distro startup
-
-** Dependency upgrade
-    * [KARAF-1801] - slf4j 1.7.0
-    * [KARAF-1884] - Upgrade exam to Pax Exam 2.6.0
-    * [KARAF-1930] - Upgrade to Pax Web 1.1.5
-    * [KARAF-1948] - Upgrade to Apache POM 11
-    * [KARAF-1955] - Upgrade to ServiceMix Specs 2.2.0
-    * [KARAF-1977] - Upgrade to OSGi 4.3.1
-    * [KARAF-1981] - Upgrade to Felix ConfigAdmin 1.6.0
-    * [KARAF-2002] - Upgrade to Pax Web 1.1.6
-    * [KARAF-2015] - Upgrade to Pax Web 1.1.7
-    * [KARAF-2036] - Upgrade to Pax Web 1.1.9
-    * [KARAF-2055] - Upgrade to Apache POM 12
-    * [KARAF-2061] - Upgrade to commons-codec 1.7
-    * [KARAF-2063] - Upgrade to Felix EventAdmin 1.3.2
-    * [KARAF-2064] - Upgrade to Felix Metatype 1.0.6
-    * [KARAF-2065] - Upgrade to Felix SCR 1.6.2
-    * [KARAF-2068] - Upgrade to ASM 4.1
-    * [KARAF-2079] - upgrade to pax web 1.1.10
-    * [KARAF-2080] - Upgrade to slf4j 1.7.2
-    * [KARAF-2088] - Upgrade to Jetty 7.6.8.v20121106
-    * [KARAF-2147] - Upgrade to Aries JMX 1.1.1
-    * [KARAF-2148] - Upgrade to Aries Proxy 1.0.1
-    * [KARAF-2149] - Upgrade to Aries Blueprint Core 1.1.0
-    * [KARAF-2150] - Upgrade to Aries Blueprint CM 1.0.1
-    * [KARAF-2157] - Upgrade to Aries Util 1.1.0
-    * [KARAF-2162] - Upgrade to Pax Web 1.1.12
-    * [KARAF-2184] - Upgrade to Spring 3.1.4.RELEASE
-    * [KARAF-2208] - Upgrade to Aries JPA Blueprint 1.0.1
-
-** Improvement
-    * [KARAF-1129] - Allow configuring rmi Registry host as well as port
-    * [KARAF-1924] - Fix the WARN logs from starting a vanilla Karaf 2.3.0
-    * [KARAF-1933] - Add id for Maven repository
-    * [KARAF-1935] - Paxexam-Karaf manual needs to be backported from 3.9
-    * [KARAF-1951] - Remove workaround for KARAF-1117
-    * [KARAF-1990] - Add Cellar feature URI in org.apache.karaf.features.repos.cfg
-    * [KARAF-2017] - Service wrapper should use and populate JAVA_HOME in conf file
-    * [KARAF-2024] - add @id for org.ops4j.pax.url.mvn.repositories urls
-    * [KARAF-2043] - Document caveats of Pax Url Wrap when used in Karaf Shell
-    * [KARAF-2049] - Instructions in welcome screen is a bit misleading with hit
-    * [KARAF-2072] - Spelling correction
-    * [KARAF-2094] - Include howto add additional jvm configurations (if using the wrapper) to the documentation
-    * [KARAF-2097] - endorse stax-api spec jar
-    * [KARAF-2105] - Karaf features for Spring should all be same name and use version ranges
-    * [KARAF-2108] - a feature depend itself will cause stackoverflow error
-    * [KARAF-2119] - upgrade pax.base to 1.4.0
-    * [KARAF-2163] - Add a jre-1.8 to jre.properties
-    * [KARAF-2175] - Add the sonatype standard snapshot repository to the karaf repositories
-
-** New Feature
-    * [KARAF-581] - Also make rmiRegistryHost configurable
-    * [KARAF-2050] - Ability to configure ssh session idle timeout - currently hardcode as 5 minutes
-    * [KARAF-2078] - Create the shell:date command
-
-** Task
-    * [KARAF-2083] - Remove icu4j dependency
-    * [KARAF-2129] - more svn:ignores setttings
-    * [KARAF-2156] - Upgrade aries utils
-    * [KARAF-2161] - Incorrect LGPL license info in Notices file
-
-** Test
-    * [KARAF-2082] - Jasypt unit tests fail
-    * [KARAF-2087] - add a testcase to cover the scenario that the AdminService can always load latest instance status which changed by external process
-
-
-
-                    Apache Karaf 2.3.0
-                    ==================
-
-  Overview
-  --------
-
-  This release of Apache Karaf sets the stage for the 3.0.x line, introducing OSGi rev 4.3 
-support, new commands, features, improvements, and a mulititude of dependency updates. At 
-Karaf's core you'll find Equinox 3.8.0.v20120529-1548 and Apache Felix framework 4.0.3. New 
-additions such as Karaf-pax-exam, commands back ported from Karaf 3.x, and command aliases 
-to help make migrating betwen 2.3.x and 3.x easier.
-  For more detail please see the change log below.
-
-  Changelog
-  ---------
-
-** Bug
-    * [KARAF-536] - Backspace no longer works in Putty after using 'connect' command to connect to other instance, and commands are printed in only 2 columns.
-    * [KARAF-643] - KarArtifactInstaller::init has incorrect warning logic
-    * [KARAF-1040] - Commands should not catch exceptions but should rethrow them
-    * [KARAF-1050] - "osgi:start xxx" doesn't print anything
-    * [KARAF-1066] - make features xml parser more forgiving
-    * [KARAF-1162] - A command that can not be loaded breaks the whole completion
-    * [KARAF-1202] - log:tail spins with debug on
-    * [KARAF-1226] - Karaf Client cannot run a script
-    * [KARAF-1293] - feature level start-level not completely finished....
-    * [KARAF-1305] - Error with Basic HTTP Authentication when using karaf realm
-    * [KARAF-1343] - Features repo points to the old pax-wicket app
-    * [KARAF-1354] - SSH Log-In failes with "Authentication failed" with valid credentials
-    * [KARAF-1360] - Configration update doesn't work
-    * [KARAF-1363] - Upgrade Jetty when bugfix for the Loggging to stderr bug is available
-    * [KARAF-1373] - features-maven-plugin, unexpected text in stderr
-    * [KARAF-1374] - Fileinstaller logging by default is not enabled.
-    * [KARAF-1376] - Demo deployer is not sync with Karaf version
-    * [KARAF-1387] - Warning to missing a feature repository name even when the name is defined
-    * [KARAF-1388] - SSHD authorized key provider should log in DEBUG
-    * [KARAF-1389] - SSH doesn't correctly use the karaf.base variable
-    * [KARAF-1392] - Removing a KAR should uninstall the shipped features
-    * [KARAF-1394] - Custom login modules not seen with Equinox
-    * [KARAF-1416] - Blueprint archetype instructions is missing
-    * [KARAF-1430] - Default child instance config is not the same as the root instance
-    * [KARAF-1491] - Admin service not able to start child instances when the JDK path contains a space on OS X
-    * [KARAF-1496] - Bad login when using sufficient modules but when the first fail
-    * [KARAF-1513] - SSH keystore incompatible if generated with IBM JDK
-    * [KARAF-1529] - command-watch messes the output when used with commands that take longer than the interval
-    * [KARAF-1538] - Exceptions when unregistering jmx means during a restart
-    * [KARAF-1541] - jaas:realm-manage raises a NullPointerException
-    * [KARAF-1547] - NullpointerException when running commands on jdk 6 update 33 or jdk 7 update 5
-    * [KARAF-1554] - Integration test failure on FeatureTest around osgi compareTo method
-    * [KARAF-1564] - karaf feature validate plugin should support to load the exports packages from dependency features
-    * [KARAF-1566] - instance:clone set the source instance in error
-    * [KARAF-1569] - aries.util.version is defined twice in pom.xml
-    * [KARAF-1573] - Potential ZipFile leak at KarArtifactInstaller.install()
-    * [KARAF-1585] - Installing using wrap protocol fails when specifying bundle version
-    * [KARAF-1587] - When executing a command through the client, no error is printed in the console in case of errors
-    * [KARAF-1591] - Upgrade to XBean 3.11.1
-    * [KARAF-1609] - command-watch info does not work
-    * [KARAF-1614] - upgrade to aries.proxy 0.3.1
-    * [KARAF-1617] - Blueprint deployer in combination with maven URL deployer creates wrong OSGi/blueprint/ file
-    * [KARAF-1624] - Rat checks fail
-    * [KARAF-1666] - Default configuration for jetty.xml could create problems
-    * [KARAF-1675] - Wrapper service requires a shell
-    * [KARAF-1680] - org.apache.karaf:apache-karaf:2.2.8:xml:features artifact is not available, for building custom Karaf
-    * [KARAF-1683] - "no matching cipher found" error connecting via SSH to wrapper Karaf service - on Ubuntu
-    * [KARAF-1695] - startup fails on Windows with only JRE installed
-    * [KARAF-1697] - Jenkins build fail
-    * [KARAF-1699] - MBeans should support the same flags as the commands
-    * [KARAF-1702] - Stopping the console bundle should not shutdown the osgi framework
-    * [KARAF-1706] - Features bundle versions are not consistent
-    * [KARAF-1736] - Feature spring-struts can't be installed
-    * [KARAF-1746] - karaf github contributions rules
-    * [KARAF-1751] - Spring feature dependencies specified too tightly
-    * [KARAF-1754] - updating features.xml in auto deploy folder results in duplication
-    * [KARAF-1756] - No SSH connection possible on Debian 6.0.5
-    * [KARAF-1759] - No Way To Start obr Dependencies By Default
-    * [KARAF-1763] - shutdown command doesn't work correctly
-    * [KARAF-1765] - The obr Shell Deploy And Start Commands Always Deploy Optional Dependencies
-    * [KARAF-1766] - Web Console Missing Metatype Import
-    * [KARAF-1791] - Add minimal distribution
-    * [KARAF-1796] - Feature Install Sequence Should Be Install/Install/Install...Start/Start/Start
-    * [KARAF-1797] - NPE thrown from OsgiConfiguration.unregister
-    * [KARAF-1809] - Feature spring-web-portlet can't be installed
-    * [KARAF-1814] - Cursor keys do not work when using bin/client on windows
-    * [KARAF-1815] - When ssh'ing from a windows box into a unix box, arrow keys are not correctly interpreted
-    * [KARAF-1821] - Some etc files are executable whereas it should not be
-    * [KARAF-1822] - BundlesMBean should use bundles attribute instead of list() operation
-    * [KARAF-1824] - tooling-exam contains reference to wrong commons-io artifact
-    * [KARAF-1825] - SystemMBean should provide startLevel attribute
-    * [KARAF-1826] - ConfigMBean should use configs attribute instead of list() operation
-    * [KARAF-1827] - Build the manual within specific profiles
-    * [KARAF-1830] - ObrMBean should use attribute for bundles and URLs instead of list operations
-    * [KARAF-1831] - PackagesMBean should use attributes for imported/exported packages instead of operations
-    * [KARAF-1832] - ServicesMBean should use attribute instead of list() operation
-    * [KARAF-1839] - system bundle also should export javax.xml.ws.spi.http package
-    * [KARAF-1840] - should also endorse saaj-api
-    * [KARAF-1845] - Minimal distribution doesn't start
-    * [KARAF-1852] - Osgi packages are exported with wrong versions
-    * [KARAF-1853] - Attached kar deploys to a different snapshot build number than the main artifact
-    * [KARAF-1858] - itests look stuck (use 100% CPU)
-    * [KARAF-1882] - Provide Level attribute in the LogMBean
-    * [KARAF-1888] - Remove aliases by default
-    * [KARAF-1905] - ASM4 causes the Proxy/Weaving of Xerces, but that then causes validation factories to fail.   
-    * [KARAF-1906] - Compile error using IBM JDK on JAAS module.
-    * [KARAF-1907] - Compile error: type ServiceReference does not take parameters on OSGi Shell ListBundleServices using JDK 7
-    * [KARAF-1909] - Compile error using IBM JDK on management mbeans SystemMBeanImpl
-    * [KARAF-1911] - Wrong version of camel-example-osgi in Getting Started/Quickstart Guide - 2.7.0 doesn't work
-
-** Dependency upgrade
-    * [KARAF-681] - Upgrade to Pax URL 1.3.4 (noted here for historical purposes)
-    * [KARAF-770] - Upgrade to Eclipse Equinox 3.7.1 (noted here for historical purposes)
-    * [KARAF-854] - Upgrade to Felix Framework 4.0.1 (noted here for historical purposes)
-    * [KARAF-855] - Add support for OSGi R4.3
-    * [KARAF-903] - Upgrade to Pax Web 1.1.2 (noted here for historical purposes)
-    * [KARAF-961] - Update Mina SSHD to version 0.6.0 (noted here for historical purposes)
-    * [KARAF-966] - Update xbean to 3.8
-    * [KARAF-1346] - Upgrade to Mina 2.0.4 (noted here for historical purposes)
-    * [KARAF-1378] - Upgrade to fileinstall 3.2.2
-    * [KARAF-1425] - Upgrade to pax-web 1.1.3
-    * [KARAF-1431] - Upgrade to Pax URL 1.3.5
-    * [KARAF-1458] - Upgrade to ServiceMix Specs 2.0
-    * [KARAF-1490] - upgrade to pax-logging 1.6.7 (noted here for historical purposes)
-    * [KARAF-1498] - Upgrade blueprint, jmx and util bundles to next minor release
-    * [KARAF-1517] - Upgrade to OSGi Compendium 4.3.0
-    * [KARAF-1520] - Upgrade to Jansi 1.9
-    * [KARAF-1531] - Upgrade to Felix ConfigAdmin 1.4.0
-    * [KARAF-1534] - Upgrade to JLine 2.7
-    * [KARAF-1535] - Upgrade to Felix Utils 1.2.0
-    * [KARAF-1536] - Upgrade to Felix FileInstall 3.2.4
-    * [KARAF-1568] - Upgrade to sshd 0.7.0 (noted here for historical purposes)
-    * [KARAF-1577] - Upgrade to slf4j 1.6.6
-    * [KARAF-1578] - Upgrade to pax-logging 1.6.9 (noted here for historical purposes)
-    * [KARAF-1579] - Upgrade to commons-compress 1.4.1
-    * [KARAF-1582] - Upgrade to Felix BundleRepository 1.6.6
-    * [KARAF-1601] - Upgrade to maven-antrun-plugin 1.7
-    * [KARAF-1603] - Upgrade to maven-surefire-plugin 2.12
-    * [KARAF-1604] - Upgrade to maven-assembly-plugin 2.3
-    * [KARAF-1606] - Upgrade to maven-compiler-plugin 2.5.1
-    * [KARAF-1608] - Upgrade to maven-dependency-plugin 2.4
-    * [KARAF-1610] - Upgrade to maven-eclipse-plugin 2.9
-    * [KARAF-1611] - Upgrade to maven-enforcer-plugin 1.1
-    * [KARAF-1612] - Upgrade to maven-enforcer-plugin 1.1
-    * [KARAF-1613] - Upgrade to maven-jar-plugin 2.4
-    * [KARAF-1615] - Upgrade to maven-javadoc-plugin 2.8.1
-    * [KARAF-1616] - Upgrade to maven-release-plugin 2.3.2
-    * [KARAF-1619] - Upgrade to maven-remote-resources-plugin 1.3
-    * [KARAF-1620] - Upgrade to maven-shade-plugin 1.7
-    * [KARAF-1621] - Upgrade to maven-site-plugin 3.1
-    * [KARAF-1622] - Upgrade to maven-war-plugin 2.2
-    * [KARAF-1623] - Upgrade to apache-rat-plugin 0.8
-    * [KARAF-1634] - Upgrade to Felix Framework 4.0.3
-    * [KARAF-1636] - Upgrade to Equinox 3.8
-    * [KARAF-1642] - Upgrade to exec-maven-plugin 1.2.1
-    * [KARAF-1670] - Uprade Aries Application Management to 1.0.0
-    * [KARAF-1672] - Upgrade Aries Application Deployment 1.0.0
-    * [KARAF-1703] - Upgrade to aries 1.0.x
-    * [KARAF-1719] - Upgrade to javax.mail 1.4.5
-    * [KARAF-1732] - Upgrade to ServiceMix Ant bundle 1.8.4_1
-    * [KARAF-1733] - Upgrade to ServiceMix aopalliance bundle  1.0_6
-    * [KARAF-1737] - Upgrade to ServiceMix cglib bundle 2.2.2_1
-    * [KARAF-1740] - Upgrade to Jetty 7.6.5.v20120716 (noted here for historical purposes)
-    * [KARAF-1745] - Upgrade to Felix WebConsole 4.0.0
-    * [KARAF-1747] - Update to jline 2.8 (noted here for historical purposes)
-    * [KARAF-1769] - Upgrade to pax-logging 1.6.10 (noted here for historical purposes)
-    * [KARAF-1773] - Upgrade to pax-logging 1.6.10 (duplicate) 
-    * [KARAF-1781] - Upgrade to Mina 2.0.5 (noted here for historical purposes)
-    * [KARAF-1787] - Upgrade to commons-fileupload 1.2.2
-    * [KARAF-1788] - Upgrade to commons-io 2.4
-    * [KARAF-1816] - Upgrade to jline 2.9
-    * [KARAF-1817] - Upgrade to sshd 0.8.0
-    * [KARAF-1819] - Upgrade to Mina 2.0.5 (duplicate) (noted here for historical purposes)
-    * [KARAF-1859] - Upgrade to ServiceMix Specs 2.1
-    * [KARAF-1862] - Upgrade to Felix FileInstall 3.2.6
-    * [KARAF-1863] - Upgrade to sshd 0.8.0 (duplicate)
-    * [KARAF-1865] - Upgrade to paxlogging 1.7.0
-    * [KARAF-1866] - Upgrade to felix config admin 1.4.0
-    * [KARAF-1867] - Upgrade to felix event admin 1.3.0
-    * [KARAF-1868] - Upgrade aries bundles to 1.0.1 (blueprint-core, jmx-core, transaction-manager, jpa-container-context)
-    * [KARAF-1883] - Upgrade to ASM 4.0
-    * [KARAF-1890] - Upgrade to Jetty 7.6.7.v20120910
-    * [KARAF-1904] - Upgrade to Mina 2.0.7
-    * [KARAF-1908] - Upgrade to XBean 3.12
-
-
-** Improvement
-    * [KARAF-447] - Add JDBC lock implementation for PostgreSQL
-    * [KARAF-1023] - Add karaf activators for jars in the lib folder
-    * [KARAF-1045] - Improved help system
-    * [KARAF-1048] - make pom.xml eclipse 3.7 m2e friendly
-    * [KARAF-1118] - Enable install of CXF into karaf with a simple command
-    * [KARAF-1181] - Add tab completer to the help command
-    * [KARAF-1368] - Make it easy to enable Karaf PropertiesLoginModule via an optional feature
-    * [KARAF-1383] - Fix warning messages during bundle build
-    * [KARAF-1396] - config:list command description should be enhanced
-    * [KARAF-1410] - Error in stop script if KARAF_DEBUG is enabled
-    * [KARAF-1499] - InfoAction shell command should sort the properties from InfoProvider instances
-    * [KARAF-1500] - Forgot a space between hours and minutes in InfoAction.java
-    * [KARAF-1521] - add-features-to-repo goal should define a correct default value for repository
-    * [KARAF-1558] - Instance clone should be able to clone the root instance
-    * [KARAF-1562] - Improve message displayed when the JAAS login module doesn't have a backing engine
-    * [KARAF-1574] - When two karaf containers are started locally, an exception is displayed at startup.  A nicer message would be better.
-    * [KARAF-1575] - Features provided by karaf do not have any description
-    * [KARAF-1586] - wrapper:install command should be usable outside OSGi too
-    * [KARAF-1600] - Avoid duplicate feature and bundle resolution when installing cascading features
-    * [KARAF-1640] - Make sure the local console is fully working before the user can type commands
-    * [KARAF-1657] - org.ops4j.pax.url.mvn.proxySupport=false
-    * [KARAF-1676] - OBR URL's in Karaf have no simple identifier
-    * [KARAF-1693] - Rename command-watch to watch
-    * [KARAF-1700] - update manual to reflect JDBC Lock updates
-    * [KARAF-1710] - Remove @version headers from source
-    * [KARAF-1749] - The command packages:imports should work on unresolved bundles
-    * [KARAF-1752] - hard coded features uri in features deployer feature discovery
-    * [KARAF-1753] - Port SCR Components Karaf 2.3
-    * [KARAF-1757] - Welcome message incorrect during ssh session or using bin/client.
-    * [KARAF-1798] - Use exam framework for our itests and increase tests coverage
-    * [KARAF-1810] - Provide alias for feature:repo-add in Karaf 2.x
-    * [KARAF-1811] - Remove section about console colors from manual
-    * [KARAF-1812] - Use Felix properties and remove org.apache.karaf.util.Properties
-    * [KARAF-1813] - Add osgi:name and name attribute in SystemMBean
-    * [KARAF-1828] - Build src distributions within specific profiles
-    * [KARAF-1829] - Upgrade to Spring 2.5.6.SEC03
-    * [KARAF-1833] - Reintroduce the -p option in the client
-    * [KARAF-1834] - Make KarafTestSupport available externally
-    * [KARAF-1844] - Add command aliases for migration purpose between 2.3.x and 3.x
-    * [KARAF-1850] - feature:list should use alphabetical order
-    * [KARAF-1878] - Feature bundle start up order by startLvl
-
-** New Feature
-    * [KARAF-866] - New dev:wait-for-service command to wait for a given osgi service
-    * [KARAF-908] - Provide a way to access system properties easily in the shell
-    * [KARAF-1334] - Use the new servicemix spec to allow the use of both the JRE implementations and implementations from bundles
-    * [KARAF-1475] - Support SSH agent forwarding and use the agent authentication when connecting to other instances
-    * [KARAF-1546] - Add -i/--install-all option to feature:add-url
-    * [KARAF-1557] - Merge instance clone command on 2.3.x branch
-    * [KARAF-1777] - backport the new command bundle:classes
-    * [KARAF-1778] - backport new command bundle:find-class
-    * [KARAF-1792] - Add karaf-pax-exam
-    * [KARAF-1806] - Add version attribute in the SystemMBean
-    * [KARAF-1856] - Merge bundle:diag command
-    * [KARAF-1857] - Merge bundle:services command
-    * [KARAF-1910] - Provide Spring 3.1.2.RELEASE features
-
-** Task
-    * [KARAF-1415] - Support Jetty 7.6
-    * [KARAF-1445] - more svn:ignore are needed
-
-** Test
-     * [KARAF-1876] - Improve StandardFeaturesTest, EnterpriseFeaturesTest and SpringFeaturesTest using feature service
-     * [KARAF-1912] - Test failures in itest.OsgiTest as aries proxy api is not bundle id 10 anymore
-
-
-                    Apache Karaf 2.2.6
-                    ==================
-
-  Overview
-  --------
-
-  This release of Apache Karaf is based off of the 2.2.x series branch, representing an
- update to Apache Karaf 2.2.5. It contains bug fixes identified in the prior release,
- and introduces improvements including; improved Windows, AIX, HP-UX, and Solaris support
- in the service wrapper, three new deployer demos showing how to make an OSGi bundle, a
- features file, and how to wrap a third party jar into a bundle, and support for ssh public
- key authentication and agent forwarding. A few new commands also appear in this release
- including; features:status to indicate feature loaded or not, feature:chooseurl to make
- it easy to install well known feature files, and a watch command to allow users to watch
- the output of a karaf command like when using the unix watch mechanism. Several dependencies
- were also updated, bringing Spring to 3.0.7-RELEASE, eventadmin to 1.2.14, Apache Pom
- to version 10, the maven bundle plugin to 2.3.7, and fileinstall to 3.2.0.
-  For more detail please see the change log below.
-
-  Changlog
-  --------
-
-** Bug
-    * [KARAF-610] - Can't input the path string completely via karaf shell
-    * [KARAF-669] - Dependency artifacts should be available on the Maven central repo
-    * [KARAF-675] - Longer shell commands affect the shell view when using up and down arrows
-    * [KARAF-811] - Combination of wrap+mvn and instructions doesnt work any more
-    * [KARAF-875] - Unable to define escape the event designator '!' using '\!'
-    * [KARAF-891] - Problem with $ charact in wrap:mvn URL
-    * [KARAF-913] - Omitted @Command on Gogo plugin is hard to debug because of NPE
-    * [KARAF-918] - pax-url prerequisites for a feature are not respected
-    * [KARAF-953] - features.xml dropped into deploy BEFORE karaf is started are not recognised
-    * [KARAF-1018] - using auto-complete (TAB key) on commands that don't take Arguments/Options throws IndexOutOfBoundsException. 
-    * [KARAF-1116] - Scripts fail at resolving java jdk. 
-    * [KARAF-1117] - Log messages appear on stdout when the feature http is installed
-    * [KARAF-1121] - Error when installing feature camel-cxf : jetty.xml is empty
-    * [KARAF-1122] - Feature <configfile/> creates an empty file if the file URL is not resolved
-    * [KARAF-1124] - karaf does not work properly with closing brace in the working directory path
-    * [KARAF-1126] - features-maven-plugin:validate goal raises a NPE if karafConfig configuration is not set
-    * [KARAF-1127] - Boot features failed to startup when karaf started from directory with closing brace; logs also unavailable
-    * [KARAF-1133] - Error executing command 'start' when starting a child instance
-    * [KARAF-1139] - Redeploy kar cause installing old feature
-    * [KARAF-1143] - Karaf (Config Mbean) can not recognize the features when Karaf installation path containing blank space
-    * [KARAF-1144] - When running a single remote command through SSH, the SCOPE variable isn't set
-    * [KARAF-1161] - The shell:new action does not support the creation of arrays
-    * [KARAF-1164] - Archetypes are not valid
-    * [KARAF-1174] - war feature cannot be installed after the cxf
-    * [KARAF-1175] - Duplicate key exception should be handle locally to avoid to affect the whole MBean
-    * [KARAF-1179] - "dev:watch *" doesn't notice new bundles added to the container
-    * [KARAF-1182] - Karaf features-maven-plugin always selects lowest version in range
-    * [KARAF-1199] - dev:watch command issues "[WATCH]" announcements only to the issuing shell
-    * [KARAF-1212] - NPE during update of the FeatureFinder
-    * [KARAF-1215] - Shell scripts are incompatible with /bin/sh on Solaris
-    * [KARAF-1216] - add-features-to-repo goal does not reclaim file handles fast enough
-    * [KARAF-1220] - o.p.karaf.management bundles must stop when its configured keystore is not available
-    * [KARAF-1241] - admin script does not pass on JAVA_OPTS to instance
-    * [KARAF-1243] - Karaf JMX Config MBean behaves in unpredictable ways
-    * [KARAF-1244] - Deployer Transformers Supports Manifest Element without A Supporting Schema
-    * [KARAF-1252] - Features core bundle should not depend to shell and management bundles
-    * [KARAF-1256] - Archetypes should use dynamic variables
-    * [KARAF-1257] - Configuration completers should avoid using getConfiguration method of config admin
-    * [KARAF-1260] - Karaf 2.2.x branch - Console doesn't like it when the console window is to small - no line wrapping for commands
-    * [KARAF-1264] - Dump demo in Karaf 2.2.x can not resolve package org.apache.karaf.diagnostic.demo package.
-    * [KARAF-1265] - Add AIX, HP-UX, Solaris, and "custom" support in the service wrapper
-    * [KARAF-1266] - Minimal distribution doesn't start due to missing management bundle
-    * [KARAF-1268] - Allow multiple commands in karaf script
-    * [KARAF-1279] - IOExceptions used in an incompatible way with Java 5.
-    * [KARAF-1284] - Karaf bundle archetype maven bundle plugin configuration is missing "instructions" tags.
-    * [KARAF-1298] - dev:watch does not work in some cases
-    * [KARAF-1304] - Quick help text for features:info command is erroneous
-    * [KARAF-1318] - User bundles are treated as system bundles
-    * [KARAF-1323] - Testfailures in source package
-
-** Dependency upgrade
-    * [KARAF-1151] - Upgrade to Spring 3.0.7.RELEASE
-    * [KARAF-1154] - Upgrade to eventadmin 1.2.14
-    * [KARAF-1155] - Upgrade to Apache POM 10
-    * [KARAF-1183] - Upgrade to slf4j 1.6.4
-    * [KARAF-1184] - Upgrade to JUnit 4.10
-    * [KARAF-1185] - Upgrade to Pax Logging 1.6.5
-    * [KARAF-1205] - Upgrade to maven-bundle-plugin 2.3.7
-    * [KARAF-1231] - Upgrade to EasyMock 3.1
-    * [KARAF-1232] - Upgrade to Jasypt 1.9.0
-    * [KARAF-1233] - Upgrade to asm 3.3.1
-    * [KARAF-1272] - Upgrade to fileinstall 3.2.0
-
-** Improvement
-    * [KARAF-693] - features:addurl raises "Premature end of file" when network is not available
-    * [KARAF-783] - Improve security docs wrt role policies
-    * [KARAF-916] - use org.apache.aries.jmx.core instead of org.apache.aries.jmx
-    * [KARAF-970] - feature <config/> tag doesn't create the cfg file
-    * [KARAF-999] - local-repo folder shouldn't be used
-    * [KARAF-1010] - Add 64Bit ServiceWrapper to karaf
-    * [KARAF-1072] - Provide man command as an alias to help
-    * [KARAF-1145] - Upgrade to pax-logging 1.6.4
-    * [KARAF-1153] - Jetty feature should also install the jetty-websocket bundle
-    * [KARAF-1191] - Switch back to millis per default on shell:sleep and introduce -s option
-    * [KARAF-1214] - Improvement in Karaf log4j appender docs
-    * [KARAF-1245] - blueprint deployer and spring deployer should get started before features.core bundle
-    * [KARAF-1261] - Jaas commands should allow you to distinguish between to realms that have the same name
-    * [KARAF-1271] - Feature service should log in DEBUG instead of INFO
-    * [KARAF-1280] - Add wrap third party jar example
-    * [KARAF-1283] - Add a simple OSGi bundle demo to deployer examples
-    * [KARAF-1292] - Add a feature demo
-    * [KARAF-1295] - serviceUrl in org.apache.karaf.management.cfg should use 0.0.0.0 but not localhost
-    * [KARAF-1299] - Make sure that all karaf archetype contain a description
-    * [KARAF-1300] - features managment should be more robust if customer features descriptor file has duplicated feature name
-
-** New Feature
-    * [KARAF-32] - Support ssh public key authentication and agent forwarding
-    * [KARAF-798] - Support for relocating karaf.history file
-    * [KARAF-1059] - Karaf command features:status to indicate feature loaded or not
-    * [KARAF-1132] - Introduce new command feature:chooseurl to make it easy to install well known feature files
-    * [KARAF-1196] - implement a 'watch' command so we can watch the output of a karaf command like the unix 'watch' mechanism
-
-** Question
-    * [KARAF-806] - ProxyLoginModule should actually be on the bootclasspath classpath right?
-
-** Task
-    * [KARAF-1274] - Please set svn:ignore to all eclipse's project files
-
-** Test
-    * [KARAF-1195] - FeaturesServiceImplTest intermittently fails on slower machines
-
-
-                    Apache Karaf 2.2.5
-                    ==================
-
-  Overview
-  --------
-  This release of Apache Karaf is based off of the 2.2.x series branch, representing an
- update to Apache Karaf 2.2.4. It contains bug fixes identified in the prior release,
- and introduces improvements including; multiple JAAS support improvements, better support 
- for Linux systems with certain versions of libc, SCP support, and demos for extending 
- Karaf's console commands and using Karaf Archives (KARs). Several dependencies were also 
- updated, bringing Pax Web to version 1.0.8, Jetty to 7.5.4.v20111024, and Jasypt to 1.8.
-  For more detail please see the change log below.
-
-  Changelog
-  ---------
-
-** Bug
-    * [KARAF-867] - Inconsistent deployment behavior between bundle installer and feature installer 
-    * [KARAF-926] - JAAS: Properties backing engine doesn't respect encryptor prefix and suffix
-    * [KARAF-939] - the realm set for JAASLoginService in jetty.xml should be karaf but not the default
-    * [KARAF-951] - dev:create-dump raises a NullPointerException
-    * [KARAF-952] - config:propdel doesn't delete the property in the cfg file
-    * [KARAF-954] - Double quotes missing in generated karaf-wrapper.conf
-    * [KARAF-959] - features:create-kar goal doesn't create a valid kar
-    * [KARAF-985] - LDAPLoginModule generates a large number of DirContext objects
-    * [KARAF-1003] - Karaf fails to start on a linux 32 bit system who's libc version is 2.3.4.
-    * [KARAF-1015] - ConfigMBean should use a different config pid than the config shell
-    * [KARAF-1020] - BundleWatcher should look for SNAPSHOT
-    * [KARAF-1030] - Grep command breaks existing line formating
-    * [KARAF-1064] - BootstrapLogManager does not reuse the instantiated Handler
-    * [KARAF-1065] - TextDumpProvider.createDump(DumpDestination) does not flush OutputStreamWriter
-    * [KARAF-1104] - Add plexus-utils dependency to features-maven-plugin to allow it to work with Maven 2.2.x to create KARs
-    * [KARAF-1105] - Fix url in Command Demo Readme file.
-    * [KARAF-1106] - Jetty feature should use ServiceMix Spec for activation
-    * [KARAF-1108] - Features should use correct start-level
-    * [KARAF-1110] - Archetypes don't work
-    * [KARAF-1111] - Add documentation about archetypes
-    * [KARAF-1114] - osgi shell blueprint bundle shouldn't use lazy default-activation
-
-** Dependency upgrade
-    * [KARAF-997] - Upgrade to Pax Web 1.0.8
-    * [KARAF-998] - upgrade to jetty 7.5.4.v20111024
-    * [KARAF-1092] - Upgrade to Jasypt 1.8
-    * [KARAF-1107] - Karaf should use directly commons-* bundles
-
-** Improvement
-    * [KARAF-606] - JAAS: Allow LDAPLoginModule to supply role "DN" from LDAP group search
-    * [KARAF-936] - Features info command should display the start level of a bundle if available.
-    * [KARAF-940] - Align various bat and sh scripts
-    * [KARAF-945] - Use singular for shell commands
-    * [KARAF-956] - jaas module should throw generic FailedLoginException 
-    * [KARAF-965] - Allow features-maven-plugin to handle multiple versions of the same feature
-    * [KARAF-968] - Features file should require name attribute on features element
-    * [KARAF-981] - Set kar as a boot feature
-    * [KARAF-1013] - Less verbose in log when mistyped commands at INFO level
-    * [KARAF-1014] - Make files specified by ${includes} optional
-    * [KARAF-1019] - Set java memory options only when required
-    * [KARAF-1022] - java.io.tmpdir system property should use $KARAF_DATA/tmp in place of $KARAF_BASE/tmp
-    * [KARAF-1032] - Text improvements to Features XSD
-    * [KARAF-1041] - create-kar goal should handle configfile
-    * [KARAF-1057] - Update the list of supported execution environments
-    * [KARAF-1087] - kar archetype
-    * [KARAF-1088] - assembly archetype
-    * [KARAF-1091] - Upgrade maven bundle plugin to 2.3.6
-    * [KARAF-1112] - shell:sleep should be in seconds
-    * [KARAF-1115] - Add a jre.properties.cxf with all changes required to run cxf
-
-** New Feature
-    * [KARAF-541] - Support JMX SSL via etc/org.apache.karaf.management.cfg 
-    * [KARAF-934] - Provide a way to select which features are to be installed when dropping a descriptor to the deploy folder.
-    * [KARAF-977] - config propset, propappend & propdel could use some autocompletion
-    * [KARAF-980] - Add demo for extending Karaf's console commands
-    * [KARAF-987] - Add scp support
-    * [KARAF-1029] - Add completer support on option values
-    * [KARAF-1085] - Add Kar deployer demo using features-maven-plugin
-    * [KARAF-1109] - Provide archetypes for bundle, bundle-blueprint, web-bundle, war
-
-** Task
-    * [KARAF-976] - Update Apache Karaf 2.2.x documentation for Child Instances
-
-
-                    Apache karaf 2.2.4
-                    ==================
-
-  Overview
-  --------
-  This release of Apache Karaf is based off of the 2.2.x series branch, representing an
- update to Apache Karaf 2.2.3. It contains bug fixes identified in the prior release,
- and introduces improvements including; significant improvements to KAR support, and new
- MBeans (such as Dev, HTTP, Log, OBR, Bundles, Services and System). Several dependencies
- were also updated, bringing Apache Felix Gogo to version 0.10.0, and Pax Web to 1.0.7.
-  For more detail please see the change log below.
-
-  Changelog
-  ---------
-
-** Bug
-    * [KARAF-771] - KAR Deployer doesn't work
-    * [KARAF-773] - KAR docu outdated
-    * [KARAF-816] - Wrapper feature doesn't load security libraries
-    * [KARAF-889] - dev:framework commands incorrect workflow
-    * [KARAF-892] - EventAdmin events from Gogo not being sent from Karaf's console bundle
-    * [KARAF-893] - Wrong URL in release notes [1]
-    * [KARAF-894] - Kar deployment failed
-    * [KARAF-895] - NPE during webconsole startup
-    * [KARAF-896] - Karaf webconsole exports wrong version of Felix webconsole package
-    * [KARAF-902] - Jaas: Properties backing engine doesn't remove users
-    * [KARAF-904] - add jetty.port=8181 to jetty.xml so that configuration for jetty connector could take effect
-    * [KARAF-905] - propdel() method in the ConfigMBean didn't work
-    * [KARAF-914] - Add ICU4J in Jasypt bundle
-    * [KARAF-915] - KAR deployment failed in the features XML is not the first entry of the KAR archive
-    * [KARAF-917] - warn instead of info when failing to install a feature
-    * [KARAF-919] - Kar redeployment failed
-    * [KARAF-920] - Feature autoinstall from kar failed
-    * [KARAF-921] - maven eclipse plugin 2.8 does not work correctly with karaf
-    * [KARAF-922] - features-maven-plugin ignores repository tags in feature files
-    * [KARAF-923] - features-maven-plugin#AddFeaturesToRepoMojo does not handle spaces in repository urls well
-    * [KARAF-929] - MBean bundles should be seen as system bundles
-    * [KARAF-932] - ConfigMBean raise a NPE when dictionnary is null
-
-** Dependency upgrade
-    * [KARAF-901] - Upgrade to Pax Web 1.0.7
-
-** Improvement
-    * [KARAF-756] - Add ability to have KeyStoreManager to wait for SSL keystore to be fully initialize by other bundle through timeout
-    * [KARAF-762] - dev:watch should support multiple bundle IDs
-    * [KARAF-786] - Add more MBeans
-    * [KARAF-847] - Provide Karaf features covering all Spring bundles
-    * [KARAF-851] - Upgrade Maven plugins in use
-    * [KARAF-864] - obr:deploy command should provide a start option
-    * [KARAF-881] - Make aliases to osgi:* commands to be more clear for the users
-    * [KARAF-885] - StartBundle doesn't deploy all bundles if one failed
-    * [KARAF-886] - Document security properties in the relevant configuration files
-    * [KARAF-897] - Fixing text in bundle.info files
-    * [KARAF-898] - Config delete operation should remove the pid.cfg file
-    * [KARAF-899] - Upgrade to Apache Felix Gogo version 0.10.0
-    * [KARAF-900] - Shutdown command should display the instance name
-    * [KARAF-907] - Include 64 bits wrapper library
-    * [KARAF-925] - Karaf config.properties doesn't define J2SE-1.6 and J2SE-1.7 execution environment
-    * [KARAF-930] - Bundles MBean should mimic the BundleSelector like osgi:* commands
-
-** New Feature
-    * [KARAF-541] - Support JMX SSL via etc/org.apache.karaf.management.cfg 
-    * [KARAF-657] - kar deployer should start the feature
-    * [KARAF-845] - Add a jasypt based property placeholder to support encrypted values
-    * [KARAF-912] - Add a goal to create a kar file
-
-** Task
-    * [KARAF-887] - Refer PrinceXML website in the manual
-
-
-                    Apache Karaf 2.2.3
-                    ==================
-
-  Overview
-  --------
-
-  This release of Apache Karaf is based off of the 2.2.x series branch, representing an
- update to Apache Karaf 2.2.2. It contains bug fixes identified in the prior release,
- and introduces improvements including; Optional JDK 7 support, a spring-jms feature, 
- and a macro allowing users to identify the contents of a specific config file. Several
- dependencies were also updated, bringing Jetty to version 7.4.5.v20110725, Eclispe
- Equinox to 4.6.2.R36x_v20110210, and Pax web to 1.0.6. 
-  For more detail please see the change log below.
-
-  Changelog
-  ---------
-
-** Bug
-    * [KARAF-281] - History using up arrow does not work on windows
-    * [KARAF-706] - variable substitution doesn't work for system.properties
-    * [KARAF-712] - Karaf's ls command does not represent URL objects correctly
-    * [KARAF-718] - Grep doesn't work when piped from features:listurl
-    * [KARAF-735] - java.util.NoSuchElementException if issue the first command as an empty command
-    * [KARAF-753] - commandlist --help points to help for jaas:pending
-    * [KARAF-760] - MInor time rendering bug
-    * [KARAF-766] - Wrong help for features:install
-    * [KARAF-769] - Update NOTICE file to mention JSW
-    * [KARAF-776] - jclouds features require OSS Sonatype repository
-    * [KARAF-796] - Editing Pax Web Configuration Via Karaf Console
-    * [KARAF-800] - karaf does not start when using java7
-    * [KARAF-809] - MainStartTest fails on WinXP
-    * [KARAF-815] - Generic the Karaf manual link
-    * [KARAF-820] - Karaf client.bat swallows commands to be passed to the Karaf instance
-    * [KARAF-824] - Web demo folder in 2.2.2 release is missing content and README.txt has bugs
-    * [KARAF-826] - KarArtifactInstaller should look for "features" classifier in place of "feature"
-    * [KARAF-827] - Karaf Web deployer (Pax-Web) always tries to deploy the deploy/README file
-
-** Dependency upgrade
-    * [KARAF-757] - upgrade to jetty 7.4.4.v20110707
-    * [KARAF-768] - Upgrade to Eclipse Equinox 3.6.2.R36x_v20110210
-    * [KARAF-775] - upgrade to pax web 1.0.5
-    * [KARAF-789] - Upgrade jetty to 7.4.5.v20110725
-    * [KARAF-790] - Upgrade paxurl to 1.2.8
-    * [KARAF-792] - Upgrade pax-runner to 1.6.2
-    * [KARAF-833] - Upgrade to Pax Web 1.0.6
-    * [KARAF-834] - Upgrade to Spring 3.0.6 - in std. features.xml
-
-** Improvement
-    * [KARAF-645] - Add a flag to suppress --help Option output on 
-    * [KARAF-667] - Improve error message when OBR resolution fails due to invalid URLs
-    * [KARAF-698] - Technical edits to User's Guide
-    * [KARAF-699] - Grammar fixes to source code files
-    * [KARAF-700] - Updates to developer's guide
-    * [KARAF-722] - throw more meaningful exception but not NPE when the BUNDLE_SYMBOLICNAME is null
-    * [KARAF-729] - Karaf Maven Plugin source code cleanup
-    * [KARAF-733] - Doc fixes to the quick start guide and overview page
-    * [KARAF-752] - Editorial fixes to the assemblies/ configuration files
-    * [KARAF-755] - Recommended improvements to help commands
-    * [KARAF-764] - Correct links to ops4j in documentation
-    * [KARAF-784] - Add date in the default Karaf log
-    * [KARAF-795] - Kar builder uses a different version for easymock then the rest of the project
-    * [KARAF-802] - Upgrade mail bundle version to 1.4.4.
-    * [KARAF-803] - Add JDK7 compile support to 2.2.x source build
-    * [KARAF-807] - Add a features name to the karaf-cellar features.xml
-    * [KARAF-808] - Remove author attribute tags from Karaf source code
-    * [KARAF-813] - Install Pax URL OBR with the OBR feature
-    * [KARAF-817] - Allow to set Karaf window name via parameter
-    * [KARAF-818] - Allow JAVA_MAX_MEM, JAVA_PERM_MEM, JAVA_MIN_MEM, JAVA_MAX_PERM_MEM the same way as for linux startup file
-    * [KARAF-829] - Support of Java 7
-    * [KARAF-840] - specify javax.annotation packages version to 1.1.0 for jre-1.6 as Annotation 1.1 Spec is used for Java 6
-
-** New Feature
-    * [KARAF-696] - Add a macro allowing users to identify the contents of a specific config file.
-    * [KARAF-835] - Provide a spring-jms feature
-
-** Task
-    * [KARAF-673] - Page failover.html contains invalid configuration properties
-
-
-                    Apache Karaf 2.2.2
-                    ==================
-
-  Overview
-  --------
-
-  This release of Apache Karaf is based off of the 2.2.x series branch, representing an
- update to Apache Karaf 2.2.1. It contains bug fixes identified in the prior release, 
- and introduces improvements including; improved behavior for the OracleDB locking 
- mechanism and http feature jetty port usage. Several improvements to the shell have 
- been incorporated, such as completion for shell aliases and a warning on osgi:shutdown
- to avoid inadvertently shutting down the container. There has also been a few small 
- dependency upgrades to felix event admin, Pax URL, and jetty.
-  For more detail please see the change log below.
-
-  Changelog
-  ---------
-
-** Bug
-    * [KARAF-496] - Karaf prompt displayed twice
-    * [KARAF-622] - Jaas Cancel command is not working
-    * [KARAF-633] - NOTICE distribution file still refers Apache Felix Karaf
-    * [KARAF-634] - README file refers an incorrect contribution URL
-    * [KARAF-637] - Update branding-console documentation to include the changes to custom.properties
-    * [KARAF-648] - maven-enforcer-plugin configuration not used
-    * [KARAF-653] - Karaf minimal is missing the feature files. 
-    * [KARAF-655] - Remove http://repository.ops4j.org/maven2 from org.apache.karaf.management.cfg
-    * [KARAF-656] - kar deployer service not exported
-    * [KARAF-670] - Missing ${karaf.base}/system cause NullPointerException
-    * [KARAF-686] - introduce an override flag to configfile element so that we get chance to not override the finalname if it already exist
-    * [KARAF-689] - Karaf instance can wrongly obtain a lock when the locking table is empty on a Oracle DB
-    * [KARAF-690] - install http feature will start both 8080 and 8181 jetty port
-
-** Dependency upgrade
-    * [KARAF-672] - Upgrade to felix event admin 1.2.12
-    * [KARAF-680] - Upgrade to Pax URL 1.2.7
-    * [KARAF-682] - upgrade to jetty 7.4.2.v20110526
-
-** Improvement
-    * [KARAF-445] - Add completion for shell aliases
-    * [KARAF-573] - Print out that karaf has to be restarted if using framework with new framework
-    * [KARAF-614] - Add warning to osgi:shutdown to avoid inadvertently shutting down the container
-    * [KARAF-618] - Align Cellar major version with the Karaf one
-    * [KARAF-651] - features-maven-plugin should "embed" the Karaf features descriptor
-    * [KARAF-654] - Merge jetty feature with jetty-jaas feature
-    * [KARAF-661] - Typing ^D should behave as on Unix
-    * [KARAF-662] - Clarify relationship of config.properties and custom.properties
-    * [KARAF-663] - features-maven-plugin add-features-to-repo should embed Karaf core features descriptor
-
-** Task
-    * [KARAF-543] - Add manual section around log custom appenders
-    * [KARAF-619] - Add Cellar manual
-    * [KARAF-620] - Cellar should use the parent Karaf POM
-    * [KARAF-646] - Upgrade to Jetty 7.4.1.v20110513
-    * [KARAF-694] - Upgrade to Pax-Logging 1.6.3
-    * [KARAF-695] - Upgrade to Pax-Web 1.0.4
-
-** Test
-    * [KARAF-683] - use filter ${karaf.version} instead of the hard code one to fix archetypes/itests failure
-
-                    Apache Karaf 2.2.1
-                    ==================
-
-  Overview
-  --------
-
-  This release of Apache Karaf is based off of the 2.2.x series branch, representing an
- update to Apache Karaf 2.2.0. It contains bug fixes identified in the prior release, 
- and introduces improvements including; updates to pax-logging, pax-runner, pax-web, 
- jetty, and felix versions. The config commands have has been updated, and kar features 
- are now in features-maven-plugin.
-  For more detail please see the change log below. 
-
-  Changelog
-  ---------
-
-** Bug
-    * [KARAF-456] - Artifact versions named in the documentation are not replaced with the version of the current project
-    * [KARAF-493] - Various site fixes
-    * [KARAF-494] - Include the .kar features in 2.2.1
-    * [KARAF-504] - Features Maven Plugin does not work with Maven 3
-    * [KARAF-506] - The config shell commands offer no way to delete a command
-    * [KARAF-507] - The config shell completer does not allow completion of factory based pids
-    * [KARAF-508] - The config:edit create does not allow the creation of factory configs
-    * [KARAF-509] - The config:update command does not save factory configurations to the correct file
-    * [KARAF-512] - WebConsole installation failed due to missing jetty-jaas feature
-    * [KARAF-518] - Unable to load features.xml with included schema attribute
-    * [KARAF-521] - Executing complex scripts is extremely difficult
-    * [KARAF-525] - Bundles listed in etc/startup.properties should only installed the first time
-    * [KARAF-527] - The console bundle should indicate it provides the gogo related services
-    * [KARAF-528] - Error while using correct feature descriptor in features-maven-plugin
-    * [KARAF-534] - Startlevel: Strange deployment behaviour 
-    * [KARAF-535] - Description for List command incorrectly claims Threshold default is -1
-    * [KARAF-537] - admin.bat prints stacktraces to standard out
-    * [KARAF-546] - Null point exception when executing log:display on an empty log
-    * [KARAF-547] - Missing features file in the system directory of the distribution
-    * [KARAF-557] - Feature: Failed to check to not install a bundle with the symbolic name contains attributes
-    * [KARAF-558] - Boot feature from configuration file, can contain some spaces; the name should be trimmed
-    * [KARAF-559] - AdminService loses root flag for instances
-    * [KARAF-562] - Config properties defined in <config> tag (features.xml) are loaded during each refresh
-    * [KARAF-568] - minimal assembly: zip and tar.gz do differ in content
-    * [KARAF-569] - Installing and uninstalling the jetty feature leaves Karaf in an ususable state
-    * [KARAF-577] - Cannot Run WAR From Root Context
-    * [KARAF-580] - Kar installer in 2.2 uses feature instead of features as classifier
-    * [KARAF-585] - When connected to a remote instance, Ctrl-C closes the connection instead of simply interrupting the command
-    * [KARAF-589] - Shell console ExampleSubclassMain unit test is broken
-    * [KARAF-599] - Archetypes CommandArchetypeTest unit test fails
-    * [KARAF-600] - "Extending the console" documentation still refers to org.osgi.service.command
-    * [KARAF-610] - Can't input the path string completely via karaf shell
-    * [KARAF-621] - features-maven-plugin:2.2.0:generate-features-xml fails with NullPointerException
-    * [KARAF-625] - Missing property 'log4j.appender.out.file' in the file org.ops4j.pax.logging.cfg caused a NPE
-    * [KARAF-626] - admin:connect always fails with "Authentication failed"
-    * [KARAF-629] - CommandArchetypeTest test case failure, expected START_TAG or END_TAG not TEXT.
-    * [KARAF-630] - SpringDeploymentListenerTest fails on IBM JDK builds with No Class Def Found Error
-    * [KARAF-632] - Itests failures
-
-** Dependency upgrade
-    * [KARAF-590] - Upgrade to pax-logging 1.6.2
-    * [KARAF-591] - Upgrade aopalliance ServiceMix bundle to 1.0_5
-    * [KARAF-592] - Upgrade asm ServiceMix bundle to 3.3_2
-    * [KARAF-593] - Upgrade cglib ServiceMix bundle to 2.1_3_7
-    * [KARAF-594] - Upgrade commons-codec ServiceMix bundle to 1.3_4
-    * [KARAF-595] - Upgrade commons-collections ServiceMix bundle to 3.2.1_2
-    * [KARAF-596] - Upgrade commons-lang ServiceMix bundle to 2.4_5
-    * [KARAF-597] - Upgrade jasypt ServiceMix bundle to 1.7_3
-    * [KARAF-598] - Upgrade junit ServiceMix bundle to 4.7_3
-    * [KARAF-613] - Upgrade to Blueprint 0.3.1
-
-** Improvement
-    * [KARAF-461] - dev:create-dump command should generate a cleaner zip file name
-    * [KARAF-476] - The admin-command should be extended to handle RMI-server-port settings
-    * [KARAF-483] - pax-web jetty.xml configfile should contain default security realm 
-    * [KARAF-484] - Upgrade to Felix Framework 3.0.9
-    * [KARAF-487] - Improve --help information for obr:list
-    * [KARAF-488] - obr:list should also include the bundle-symbolic-name of the packages it lists as this is used to execute other OBR commands
-    * [KARAF-495] - Add a Tutorials section to the website.
-    * [KARAF-497] - Resolve mvn: urls in <descriptor/> element for features-maven-plugin:add-features-to-repo
-    * [KARAF-513] - The ssh:ssh and admin:connect command do not allow passing a command to execute
-    * [KARAF-514] - When starting a child instance, there's no way to wait until it's started 
-    * [KARAF-517] - Upgrade to pax-runner 1.6.1
-    * [KARAF-533] - Improve depdencny handling to manual
-    * [KARAF-539] - Document configfile xml tag of features
-    * [KARAF-542] - Support of next line with '>' character
-    * [KARAF-551] - Implement the shell:source command
-    * [KARAF-554] - Add karaf version in system properties and display in shell:info command output
-    * [KARAF-563] - Adjustable PermSize and MaxPermSize in karaf script
-    * [KARAF-564] - Allow configuring features OBR resolver to resolve optional imports as well
-    * [KARAF-574] - Re-introduce export version in packages:exports command
-    * [KARAF-576] - introduce start-level attribute for feature element in features.xml
-    * [KARAF-588] - Some fixes to Karaf Site
-    * [KARAF-603] - Add 'karaf-framework' feature to describe core Karaf bundles
-    * [KARAF-606] - JAAS: Allow LDAPLoginModule to supply role "DN" from LDAP group search
-
-** New Feature
-    * [KARAF-463] - Add chapter for Pax Web and the OSGi HttpService
-    * [KARAF-605] - Add param to Gogo Argument and Option to override default value with specific value
-
-** Task
-    * [KARAF-489] - Upgrade pax-logging to 1.6.1
-    * [KARAF-492] - Upgrade Karaf to version 1.0.2 of pax-web
-    * [KARAF-500] - Upgrade to Jetty 7.3.1
-    * [KARAF-501] - Upgrade to PAX Exam 1.2.4
-    * [KARAF-516] - Upgrade to felix eventadmin 1.2.10
-    * [KARAF-552] - Upgrade to Pax URL 1.2.6
-    * [KARAF-566] - Build: Remove duplicate entries from build artefacts.
-    * [KARAF-567] - org.apache.karaf.jaas.config.impl accidentally exported?
-    * [KARAF-578] - Upgrade to PAX-WEB 1.0.3 
-
-
-                    Apache Karaf 2.2.0
-                    ==================
-
-  Overview
-  --------
-
-  This release of Apache Karaf contains a multitude of new features, improvements, and
-bug fixes.  Some highlights include many new or updated commands, a LDAP JAAS module
-with login support, an updated feature service, a feature for Aries transaction, JPA &
-JNDI modules, expanded documentation, and new versions of most dependencies.  The help
-system and manual have also undergone major updates. Please note that if you are using 
-pax-exam with scanFeatures that you also have to upgrade pax-exam to the latest version.
-  For more detail please see the change log below.
-
-  Changelog
-  ---------
-
-** Sub-task
-    * [KARAF-272] - Update Release Notes in kit and online. 
-    * [KARAF-392] - Ability to use features-maven-plugin:add-features-to-repo without specifying features
-    * [KARAF-393] - Ability to use features-maven-plugin:add-features-to-repo with explicitly specified remote maven repositories
-    * [KARAF-441] - Add Karaf-2.2.x to Hudson
-    * [KARAF-462] - Update SCM section in main pom.xml to reference branch 2.2.x instead of trunk.
-
-** Bug
-    * [KARAF-8] - Improve error reporting for features installer
-    * [KARAF-17] - ANSI support not properly initialized when creating an Karaf instances from WebConsole or JMX
-    * [KARAF-156] - command dev:dynamic-import does not work
-    * [KARAF-221] - When starting a bare karaf, a single bundle is displayed when using osgi:list, we should display none
-    * [KARAF-230] - 2.1.0 Wrapper doesn't work and if hacked no SSH
-    * [KARAF-232] - validate goal of features-maven-plugin should support wrap jar
-    * [KARAF-236] - Command Features:info with tree switch displays partial information
-    * [KARAF-238] - SLF4J Duplicate bindings warning when using Equinox
-    * [KARAF-239] - Equinox Framework Extensions
-    * [KARAF-241] - Shell commands are not registered in OSGi
-    * [KARAF-244] - features-maven-plugin does not work with maven 3
-    * [KARAF-254] - Web configmanager did not list all available configurations
-    * [KARAF-261] - Cannot run command admin on cygwin.
-    * [KARAF-262] - The command admin create new instance cannot create good script in bash language on cygwin
-    * [KARAF-265] - add-features-to-repo goal of features-maven-plugin should support wrap jar with additional instructions
-    * [KARAF-268] - When installing a bundle from a feature with blancks before  / after the bundle url, those bundles are not loaded on restart (on felix)
-    * [KARAF-270] - karaf-service scripts tries to create "data" directory in wrong location 
-    * [KARAF-273] - java.lang.NullPointerException: Inflater has been closed
-    * [KARAF-282] - The shell:exec does not always capture the whole output
-    * [KARAF-285] - The bin/shell script should not read the input stream when a command is passed
-    * [KARAF-286] - When running in the plain shell console (using bin/shell), tab completion prints lots of exceptions
-    * [KARAF-288] - Shell history doesn't work anymore (at leas on windows)
-    * [KARAF-292] - Maven filtering issue for Windows batch files in kit
-    * [KARAF-295] - Webconsole - Configuration Admin, shows multiple entries for FileInstall after restart
-    * [KARAF-299] - [patch] miscellaneous cleanups
-    * [KARAF-300] - Incorrect behavior of backspace/delete keys in web console Gogo plugin
-    * [KARAF-304] - Startup problems: javax.naming.NoInitialContextException: Unable to determine caller'sBundleContext
-    * [KARAF-311] - Deploying a sample application in the User's Guide is missing a command
-    * [KARAF-313] - feature.xml is not read correct if it contains linebreaks
-    * [KARAF-321] - karaf shell script does not work with mingw and whitespaces in path
-    * [KARAF-324] - Shell/Console tests fail in windows
-    * [KARAF-326] - eclipse:eclipse importing error
-    * [KARAF-327] - Graceful shutdown of Windows service, revisited
-    * [KARAF-330] - Removal of a JAAS realm service actually remove the wrong reference in the internal storage
-    * [KARAF-331] - Failure to execute script against Karaf sshd. 
-    * [KARAF-335] - The lib folder should be optional
-    * [KARAF-344] - Deploying a new JAAS config requires to restart the framework
-    * [KARAF-347] - org.ops4j.pax.url.mvn.cfg contains incorrect comment on last property
-    * [KARAF-357] - shell.bat won't start with NoClassDefFoundError and NPE
-    * [KARAF-358] - When the feature service calls refresh(), it should wait for the refresh to happen before returning
-    * [KARAF-360] - Empty comment in some config files
-    * [KARAF-384] - Cannot find some jar in ext directory
-    * [KARAF-389] - Remove transitive dependencies from features-maven-plugin
-    * [KARAF-398] - Features schema is not correct
-    * [KARAF-414] - The apache-karaf-2.1.99-SNAPSHOT-minimal.tar.gz generated contains unresolved dependencies
-    * [KARAF-415] - Config commands do not support the use of Managed Service Factories
-    * [KARAF-421] - StringCompleter extension cannot return own strings
-    * [KARAF-425] - Info command shows duplicated sections
-    * [KARAF-428] - obr:addurl/removeurl generate incorrect "obr.repository.url" property
-    * [KARAF-429] - Configuration not found warning in wrap deployer
-    * [KARAF-436] - Typo mistake in the FeaturesServiceMBean
-    * [KARAF-440] - features-maven-plugin throws NullPointerException maven 3.0.2
-    * [KARAF-442] - Wrong EventType called in FeaturesService.uninstallFeature
-    * [KARAF-453] - Manual war contains two web.xml files - cannot be served by pax-web
-    * [KARAF-458] - Fix the karaf shell to look nice within Eclipse console
-    * [KARAF-472] - features-maven-plugin: TAB-characters in feature-repository lead to resolution-errors in add-features-to-repo
-    * [KARAF-480] - Minor ansi issue with admin:rename command
-    * [KARAF-481] - Karaf 2.2.x manuals do not get signature files created
-    * [KARAF-485] - Karaf MBeans are not registered
-
-** Improvement
-    * [KARAF-5] - [karaf] admin:create should support a -r, --rmi-registry-port option to allow the RMI registry port to be configured 
-    * [KARAF-53] - Provide XML Schema for feature descriptors and support it's validation
-    * [KARAF-58] - Improve terminal height / width support
-    * [KARAF-60] -  Improve history support by using the !
-    * [KARAF-197] - The SSH layer should dynamically handle configuration changes
-    * [KARAF-202] - Create la alias in shell.init.script
-    * [KARAF-214] - Print a nice error when a command is not found
-    * [KARAF-215] - Upgrade to latest jline2 /  jansi
-    * [KARAF-224] - Improve log:display command to display colored log events
-    * [KARAF-227] - The shell/log commands should use a dynamic configuration
-    * [KARAF-228] - The jaas/modules should use a dynamic configuration
-    * [KARAF-229] - The management bundle should use a dynamic config
-    * [KARAF-234] - validate goal of features-maven-plugin should support spring/blueprint/feature protocol prefix
-    * [KARAF-237] - print importer bundle in packages:imports
-    * [KARAF-240] - Cleanup Karaf pom to use version and groupId from the parent pom
-    * [KARAF-243] - Provide InfoProvider that will collect information from bundle MANIFEST.MF 
-    * [KARAF-247] - Add J2SE-1.2 to org.osgi.framework.executionenvironment
-    * [KARAF-251] - Allow the use of version ranges on dependant features
-    * [KARAF-252] - Add a dependency boolean attribute on features' bundles and allow specifiying an optional resolver
-    * [KARAF-253] - changing the default JMX service uri to be more enterprise frendly
-    * [KARAF-255] - Move Karaf manual generation out of standard install to its own profile
-    * [KARAF-259] - Upgrade dependencies to their latest version
-    * [KARAF-266] - Upgrade Karaf encryption to use Jasypt 1.7
-    * [KARAF-267] - Use ServiceMix ASM 3.1.0 bundle in place of the springsource one
-    * [KARAF-274] - Upgrade to JLine 2.5
-    * [KARAF-283] - Make Vm options for child karaf server persistent and part of the configuration
-    * [KARAF-289] - Webconsole - Admin should look like the other webconsole plugins
-    * [KARAF-291] - Webconsole - Features should look like the other webconsole plugins
-    * [KARAF-297] - Spring Features should provide spring-web bundles
-    * [KARAF-302] - Features for Jetty-JAAS
-    * [KARAF-306] - Improve documentation on creating commands with completers
-    * [KARAF-309] - Provide jetty.xml with preconfigured JAAS Authentication.
-    * [KARAF-314] - feature-maven-plugin does not fail if component couldn't be found
-    * [KARAF-316] - Add head/tail commands
-    * [KARAF-318] - JdbcBackingEngine should acquire schema configuration from JdbcLoginModule
-    * [KARAF-320] - Missing svn:ignores
-    * [KARAF-329] - improve test-util methods
-    * [KARAF-332] - Add log tail command
-    * [KARAF-336] - Make sure users using console / shell / webconsole have a known role 
-    * [KARAF-338] - Upgrade Karaf to version 1.0.0 of pax-web
-    * [KARAF-340] - When the webconsole is invoked, the code should be run under the credentials of the authenticated user
-    * [KARAF-341] - When a ssh console is invoked, the code should be run under the credentials of the authenticated user
-    * [KARAF-343] - Upgrade to fileinstall 3.1.10
-    * [KARAF-346] - make features:install more verbose
-    * [KARAF-349] - Upgrade to SLF4j 1.5.8
-    * [KARAF-353] - features commands should allow more than 1 argument
-    * [KARAF-356] - The main console should run under the user's subject
-    * [KARAF-362] - Add documentation how to build a custom karaf distribution including branding
-    * [KARAF-375] - features-maven-plugin always uses transitive features
-    * [KARAF-385] - Upgrade to felix framework 3.0.8
-    * [KARAF-386] - Add a debug argument on the bin/karaf shell script to start karaf using remote debugging
-    * [KARAF-387] - Create an assembly mmaven module under feature to generate basic and enterprise features xml file
-    * [KARAF-388] - allow specifying a version for a boot feature in etc/org.apache.karaf.features.cfg
-    * [KARAF-394] - Add aries-application in features enterprise file + made small enhancements
-    * [KARAF-395] - Modify org.apache.karaf.features.cfg to use features files standard and enterprise
-    * [KARAF-396] - Upgrade to Pax-Logging 1.6.0 (providing slf4j 1.6.x support)
-    * [KARAF-403] - Improve Bundle-Description header display
-    * [KARAF-404] - Upgrade to felix maven-bundle-plugin 2.3.4
-    * [KARAF-405] - Force JDK 1.5 compiler
-    * [KARAF-409] - Use the new Karaf Logo on Webconsole
-    * [KARAF-412] - Documentation: Add notes on how to make multiple configuration files available to the bundle context.
-    * [KARAF-416] - All PaxAppenders should be automatically called instead of having to configure them explicitely
-    * [KARAF-417] - Move extractNameVersionType() method into Karaf utils
-    * [KARAF-420] - Automatically import paxlogging packages when deploying a war
-    * [KARAF-422] - If no version was found, features-maven-plugin try to create an artifact with a null version
-    * [KARAF-423] - KarafJaasPasswordAuthenticator should log reason for authentication failure.
-    * [KARAF-443] - Most of the blueprint bundles should be lazy by default
-    * [KARAF-446] - Upgrade to Felix webconsole 3.1.8
-    * [KARAF-455] - Improve the confluence output for commands
-
-** New Feature
-    * [KARAF-151] - Implement an assembly 'extract' deployment option, with automatic detection of feature repositories
-    * [KARAF-188] - Provide commands to manage users, passwords and roles
-    * [KARAF-209] - Allow the info command to display custom information such as Apache ServiceMix version number
-    * [KARAF-211] - osgi:list to other command to display context-path for web applications or a new war command for that
-    * [KARAF-213] - create an automatic completer if an @Argument is a File by using the current working directory and completing on files. I wonder if we could provide an optional filter method maybe to restrict available files?
-    * [KARAF-218] - Add a more pager command
-    * [KARAF-225] - FeaturesService should publish OSGi events
-    * [KARAF-233] - Add a log:clear command
-    * [KARAF-257] - Features - Add description attribute and have it listed in the features overview
-    * [KARAF-290] - Optional feature event-admin
-    * [KARAF-293] - Feature for Aries Transaction,JPA & JNDI modules.
-    * [KARAF-307] - Ldap jaas login module
-    * [KARAF-310] - Add LDAP JAAS module
-    * [KARAF-348] - Add admin:rename command
-    * [KARAF-350] - Add KARAF_OPTS param to startup scripts
-    * [KARAF-373] - Add option to features-maven-plugin to automatically include <descriptors> into <repository>
-    * [KARAF-380] - Add .jar deployer autowrapping non-bundle-jar files dropped to deploy folder
-    * [KARAF-391] - Ability to use features-maven-plugin:add-features-to-repo without specifying features
-    * [KARAF-426] - Manage Karaf shell.name by branding
-    * [KARAF-473] - Support version resolving in FeatureService#getFeatures(name/version)
-    * [KARAF-477] - Karaf console should gracefully handle errors due to the history file being read only
-    * [KARAF-478] - Subclasses of Console should be able to change the history file
-
-** Task
-    * [KARAF-42] - Use an svn based mechanism  for Karaf's manual
-    * [KARAF-43] - Use overriden properties instead of configuring the maven bundle plugin in each module
-    * [KARAF-219] - Upgrade to latest gogo
-    * [KARAF-235] - Upgrade to latest Aries JMX / Blueprint
-    * [KARAF-258] - Use the org.osgi groupId for core and compendium specs
-    * [KARAF-276] - upgrade to pax-url 1.2.1
-    * [KARAF-287] - Bump the jaas xsd / namespace handler as it has changed
-    * [KARAF-301] - Create integration tests for the distribution itself
-    * [KARAF-333] - Update karaf to use pax-url-mvn ver 1.2.4
-    * [KARAF-345] - upgrade to spring 3.0.5.RELEASE
-    * [KARAF-351] - Upgrade to pax-exam 1.2.3
-    * [KARAF-390] - Upgrade to event admin 1.2.8
-    * [KARAF-410] - Upgrade to spring-dm 1.2.1
-    * [KARAF-411] - Upgrade to jetty 7.2.2.v20101205
-    * [KARAF-427] - Use slf4j as default logger
-    * [KARAF-431] - Add documentation around remote management via JMX
-    * [KARAF-433] - Add documentation about KAR archive format and deployer
-    * [KARAF-434] - Add wrap deployer description in the deployer section of the Karaf user guide
-    * [KARAF-435] - Add diagnostic documentation (dev:create-dump, etc) in the Karaf User Guide
-    * [KARAF-437] - Document jre.properties tuning
-    * [KARAF-438] - Upgrade to Aries 0.3
-    * [KARAF-439] - Provide documentation about the Karaf wrapper
-    * [KARAF-444] - Upgrade to latest version of pax-url
-    * [KARAF-454] - Upgrade Karaf to version 1.0.1 of pax-web
-
-
-                    Apache Karaf 2.1.4
-                    ==================
-
-  Overview
-  --------
-
-  This release of Apache Karaf is based off of the 2.1.x series branch, representing an update to Apache Karaf 2.1.3. It contains several bug fixes identified in the prior release, and introduces several improvements including; better behavior of the features-maven-plugin, documentation for making multiple configuration files available to the bundle context, and a more efficient bundle description for header display. For more detail please see the change log below.
-
-  Changelog
-  ---------
-
-** Bug
-    * [KARAF-8] - Improve error reporting for features installer
-    * [KARAF-384] - Cannot find some jar in ext directory
-    * [KARAF-421] - StringCompleter extension cannot return own strings
-    * [KARAF-428] - obr:addurl/removeurl generate incorrect "obr.repository.url" property
-    * [KARAF-436] - Typo mistake in the FeaturesServiceMBean
-    * [KARAF-440] - features-maven-plugin throws NullPointerException maven 3.0.2
-    * [KARAF-442] - Wrong EventType called in FeaturesService.uninstallFeature
-
-** Improvement
-    * [KARAF-375] - features-maven-plugin always uses transitive features
-    * [KARAF-388] - allow specifying a version for a boot feature in etc/org.apache.karaf.features.cfg
-    * [KARAF-403] - Improve Bundle-Description header display
-    * [KARAF-412] - Documentation: Add notes on how to make multiple configuration files available to the bundle context.
-    * [KARAF-422] - If no version was found, features-maven-plugin try to create an artifact with a null version
-    * [KARAF-430] - don't force a karaf deploy to have a lib directory
-
-** New Feature
-    * [KARAF-373] - Add option to features-maven-plugin to automatically include <descriptors> into <repository>
-
-
-                    Apache Karaf 2.1.3
-                    ==================
-
-  Overview
-  --------
-
-  This release of Apache Karaf is based off of the 2.1.x series branch, representing an update to Apache Karaf 2.1.2. It contains several bug fixes identified in the prior release, and updates the versions of SLF4j, pax-url-mvn, spring, and pax-exam. For more detail please see the change log below.
-
-  Changelog
-  ---------
-
-** Bug
-    * [KARAF-244] - features-maven-plugin does not work with maven 3
-    * [KARAF-282] - The shell:exec does not always capture the whole output
-    * [KARAF-292] - Maven filtering issue for Windows batch files in kit
-    * [KARAF-299] - [patch] miscellaneous cleanups
-    * [KARAF-300] - Incorrect behavior of backspace/delete keys in web console Gogo plugin
-    * [KARAF-304] - Startup problems: javax.naming.NoInitialContextException: Unable to determine caller'sBundleContext
-    * [KARAF-313] - feature.xml is not read correct if it contains linebreaks
-    * [KARAF-319] - Pom hierarchy error
-    * [KARAF-321] - karaf shell script does not work with mingw and whitespaces in path
-    * [KARAF-326] - eclipse:eclipse importing error
-    * [KARAF-327] - Graceful shutdown of Windows service, revisited
-    * [KARAF-331] - Failure to execute script against Karaf sshd. 
-    * [KARAF-344] - Deploying a new JAAS config requires to restart the framework
-    * [KARAF-347] - org.ops4j.pax.url.mvn.cfg contains incorrect comment on last property
-    * [KARAF-357] - shell.bat won't start with NoClassDefFoundError and NPE
-    * [KARAF-358] - When the feature service calls refresh(), it should wait for the refresh to happen before returning
-    * [KARAF-360] - Empty comment in some config files
-
-** Improvement
-    * [KARAF-314] - feature-maven-plugin does not fail if component couldn't be found
-    * [KARAF-320] - Missing svn:ignores
-    * [KARAF-329] - improve test-util methods
-    * [KARAF-349] - Upgrade to SLF4j 1.5.8
-
-** Task
-    * [KARAF-333] - Update karaf to use pax-url-mvn ver 1.2.4
-    * [KARAF-345] - upgrade to spring 3.0.5.RELEASE
-    * [KARAF-351] - Upgrade to pax-exam 1.2.3
-
-
-                    Apache Karaf 2.1.2
-                    ==================
-
-  Overview
-  --------
-
-  This release of Apache Karaf is based off of the 2.1.x series branch, representing an update to Apache Karaf 2.1.1. It contains several bug fixes identified in the prior release, and updates the pax-url version. For more detail please see the change log below.
-
-  Changelog
-  ---------
-
-** Bug
-    * [KARAF-270] - karaf-service scripts tries to create "data" directory in wrong location 
-    * [KARAF-273] - java.lang.NullPointerException: Inflater has been closed
-    * [KARAF-277] - The bin/client script does not work anymore
-    * [KARAF-262] - The command admin create new instance cannot create good script in bash language on cygwin
-    * [KARAF-284] - Remove snapshot dependency on org.apache.karaf.shell.console in archetypes/command/src/main/resources/archetype-resources/pom.xml
-    * [KARAF-285] - The bin/shell script should not read the input stream when a command is passed
-    * [KARAF-286] - When running in the plain shell console (using bin/shell), tab completion prints lots of exceptions
-    * [KARAF-292] - Maven filtering issue for Windows batch file in kit.
-
-** Task
-    * [KARAF-276] - upgrade to pax-url 1.2.1
-
-
-                    Apache Karaf 2.1.1
-                    ==================
-
-  Overview
-  --------
-
-  This release of Apache Karaf is based off of the 2.1.x series branch, representing an update to Apache Karaf 2.1.0. It contains multiple bug fixes, while introducing a minimal number of changes to dependencies from our last release. For more detail please see the change log below.
-
-  Changelog
-  ---------
-
-** Sub-task
-    * KARAF-269 - Update jetty bundle version in main karaf 2.1.1 pom.
-
-** Bug
-    * KARAF-17 - ANSI support not properly initialized when creating an Karaf instances from WebConsole or JMX
-    * KARAF-156 - command dev:dynamic-import does not work
-    * KARAF-221 - When starting a bare karaf, a single bundle is displayed when using osgi:list, we should display none
-    * KARAF-232 - validate goal of features-maven-plugin should support wrap jar
-    * KARAF-238 - SLF4J Duplicate bindings warning when using Equinox
-    * KARAF-239 - Equinox Framework Extensions
-    * KARAF-261 - Cannot run command admin on cygwin.
-    * KARAF-265 - add-features-to-repo goal of features-maven-plugin should support wrap jar with additional instructions
-    * KARAF-268 - When installing a bundle from a feature with blancks before / after the bundle url, those bundles are not loaded on restart (on felix)
-
-** Improvement
-    * KARAF-234 - validate goal of features-maven-plugin should support spring/blueprint/feature protocol prefix
-    * KARAF-247 - Add J2SE-1.2 to org.osgi.framework.executionenvironment
-    * KARAF-263 - Upgrade to Spring 3.0.4.RELEASE
-    * KARAF-264 - Upgrade to Jetty 6.1.25
-
-** New Feature
-    * KARAF-225 - FeaturesService should publish OSGi events
-
-
-                    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
-  ---------
-
- The following list shows the bug fixes and enhancements included in this release:
-
-** Bug
-    * [KARAF-13] - javax.annotation not exported
-    * [KARAF-19] - Exception in pax-web when shutting down karaf
-    * [KARAF-125] - Webconsole can't concat strings?
-    * [KARAF-133] - NPE when installing a bundle with a MANIFEST.MF not in the first entry of the zip
-    * [KARAF-134] - The sort command does not work when trying to sort on the last field
-    * [KARAF-136] - should override equals method for FeaturesListener to handle the proxy compared to wrapped object case
-    * [KARAF-137] - IOException on web demo when trying to connect through SSH
-    * [KARAF-138] - WarDeploymentListener: checks for manifest osgi entries but fails if no manifest is found
-    * [KARAF-142] - NPE at org.apache.felix.webconsole.internal.servlet.OsgiManager.service - karaf started in server mode
-    * [KARAF-143] - Setting "karaf.instances" system property has no effect
-    * [KARAF-145] - Reading Properties like karaf.framework should be trimmed before reusage
-    * [KARAF-150] - Config admin contains 2 configurations for SSH port in Karaf
-    * [KARAF-162] - need exactly specify the import jline package version for webconsole.gogo
-    * [KARAF-167] - Creating a new config using the shell commands lead to a FileNotFoundException instead of the file being created
-    * [KARAF-169] - Do not use the ClassPath manifest header for the karaf client jar
-    * [KARAF-178] - When the karaf runtime is launched under JSW, the bin/client script fails to connect
-    * [KARAF-189] - Java endorsed dirs on AIX (IBM JVM)
-    * [KARAF-190] - karaf-wrapper.conf is incorrect
-    * [KARAF-199] - WarDeploymentListener: doesn't handle the default Webapp-Context correct on a Windows System
-    * [KARAF-204] - Ctrl+D needs to be followed by another character to be recognized (at least when using the karaf client)
-    * [KARAF-206] - The converter used for converting commands arguments and options can't convert objects to String
-
-** Improvement
-    * [KARAF-106] - Provide a more minimal / static disitrbution of karaf
-    * [KARAF-130] - Allow a repository URL to be added to feature repository URL list even though it is an invalid one
-    * [KARAF-135] - The package:export command should have more option to control the output
-    * [KARAF-139] - Add a Shell Console branding demo
-    * [KARAF-140] - Modifying properties and saving them via the Config Console removes comments in the original file
-    * [KARAF-141] - Tests should be able to be run without any internet connections
-    * [KARAF-146] - osgi:list should only print out 'system' bundles above a certain level, by default, this should be 50, but it should be configurable
-    * [KARAF-148] - features:listUrl should print the repository names as well as the Url. 
-    * [KARAF-152] - when using the @Argument annotation, if there is no name specified it would be nice to reuse the name of the field, rather than use VAL
-    * [KARAF-155] - optional @Argument values (and I guess @Option values) can have default values which could be displayed in the help screen by reflecting into the value and finding non-zero/null values
-    * [KARAF-157] - [PATH] minor patch to make it easier to reuse the Karaf command line console from outside Karaf specialising the user and application
-    * [KARAF-158] - better display of errors when running a non-osgi command line outside of the shell
-    * [KARAF-159] - when a bad command is typed (e.g. invalid command, argument, option) we should use some kind of syntax highlighting for the name of the command/argument/option in the error message
-    * [KARAF-161] - provide an easy implementation of "public static void main(String[] args)" for a single command (i.e. for non-shells)
-    * [KARAF-163] - Generate Features XML should handle artifact types
-    * [KARAF-164] - Allow sub classes of Main to override the META-INF path used to discover commands
-    * [KARAF-168] - Upgrade to latest Felix framework
-    * [KARAF-170] - Main --help should behave like Main someCommand --help and list all the possible sub commands when outside of OSGi
-    * [KARAF-171] - provide a default "help" sub command in shells used outside of OSGi
-    * [KARAF-173] - Make it easier to configure the Karaf Main shell by subclassing.
-    * [KARAF-174] - tab completion of sub commands not working in the non-osgi shell
-    * [KARAF-175] - Upgrade to Java Service Wrapper 3.2.3
-    * [KARAF-176] - Improve integration to provide a clean shutdown when running as a service
-    * [KARAF-177] - Support 64 bits platforms for Java Service Wrapper on OS X
-    * [KARAF-181] - Allow the cmdhelp maven plugin to generate output in confluence format
-    * [KARAF-182] - Upgrade to Aries 0.2-incubating
-    * [KARAF-184] - Enhance the dev:framework command to display or set the OSGi framework name
-    * [KARAF-185] - Have a 'clean' parameter on the main shell script to clean the working folder
-    * [KARAF-186] - Upgrade to pax-logging 1.5.3
-    * [KARAF-187] - The completers do not work when several commands are on the same line separated by a column or pipe
-    * [KARAF-191] - Create a Karaf Util module gathering all util classes
-    * [KARAF-192] - Completion does not work on options, or even on arguments if an option is specified
-    * [KARAF-193] - It should be possible to load a Command description from a text file
-    * [KARAF-196] - Improve the output of osgi:headers command
-    * [KARAF-198] - Remove dependency upon org.slf4j.helpers.MessageFormatter
-    * [KARAF-200] - Upgrade to latest pax-runner and pax-exam
-    * [KARAF-202] - Create la alias in shell.init.script
-    * [KARAF-207] - The webconsole feature should not depend on the admin bundles
-    * [KARAF-208] - when reusing the karaf shell outside of OSGi where there's only one shell scope, it would be nice to avoid prefixing the command names with the scope or with "*:" which is confusing
-    * [KARAF-210] - Allow to specific context-path when installing a war file using the war url handler
-
-** New Feature
-    * [KARAF-26] - have restart clean command/API
-    * [KARAF-144] - Allow using the console and commands outside of OSGi
-    * [KARAF-147] - We should have a features:listVersions command that lists all the known versions of a feature
-    * [KARAF-149] - Add a features:removeRepository command
-    * [KARAF-166] - Allow subclasses of org.apache.karaf.shell.console.Main to be used as sub shells
-    * [KARAF-172] - Implement a mechanism that would allow a karaf application to distingush between UserPrincipal & RolePrincipal without depending from Karaf JAAS Modules
-    * [KARAF-180] - JAAS Database Login Module
-    * [KARAF-212] - provide a simple annotation, say,@CompleterValues which can be used on methods on an action to provide a list of available values for an argument for tab completion
-
-** Task
-    * [KARAF-40] - Create a maven archetype for creating shell commands
-
-
-                    Apache Karaf 2.0.0
-                    ==================
-
-  Overview
-  --------
-
- The Apache Karaf 2.0.0 is the first release since the move of Apache Felix Karaf to Apache Karaf.
- This release brings new features, improvements and bug fixes. The changelog below contains the whole
- list of changes.
-
-  Changelog
-  ---------
-
- The following list shows the bug fixes and enhancements included in this release:
-
-** New Feature
-    * [KARAF-31] - Use OBR if available to compute the transitive closure of karaf features
-    * [KARAF-110] - Provide a placeholder for overriding the configuration properties
-    * [KARAF-111] - Allow includes of additional configuration files through a custom property when loading the main configuration files
-
-** Improvement
-    * [KARAF-45] - Improve war deployer in order to provide the WebApp-context
-    * [KARAF-54] - Minimum default properties
-    * [KARAF-59] - Introduce a ${karaf.data} system property to be able to easily move the data directory to a different location
-    * [KARAF-67] - Change the webconsole config in the features descriptor to specifiy the realm and not the username/password which aren't used anymore
-    * [KARAF-95] - Upgrade Spring to 3.x
-    * [KARAF-96] - Enhance the features to support the start level
-    * [KARAF-97] - Upgrade to Felix framework 3.x
-    * [KARAF-98] - Upgrade to equinox 3.6.0
-    * [KARAF-103] - add a spring-dm feature which use spring 2.5.6 inside
-    * [KARAF-105] - Remove dependencies on the preference service
-    * [KARAF-107] - Improve default log configuration with a rolling file appender
-    * [KARAF-108] - Change 'storage.location' system property to 'karaf.instances' for better homogeneity
-    * [KARAF-109] - Split the JVM packages from the main config.properties file for easier maintenance
-    * [KARAF-112] - Free the org.osgi.framework.system.packages.extra property for users
-    * [KARAF-117] - refactor tooling/testing/Helper to accomodate recent changes in config.properties
-    * [KARAF-118] - Update Pax Url Wrap to version 1.1.3
-    * [KARAF-120] - Some jars are not included in our system repository
-    * [KARAF-121] - Better exception handling in JaasSecurityProvider
-    * [KARAF-127] - Enahnce features mechanism to allow to stop/start bundle
-
-** Bug
-    * [KARAF-4] - [Karaf] If features:refreshUrl reads an incorrect <features> definition, it deletes the old version
-    * [KARAF-16] - The JRE provided ciphers are not used on ubuntu server
-    * [KARAF-65] - NPE in StandardEmitterMBean on JDK 6
-    * [KARAF-99] - new spring 3.0.3.RELEASE feature miss some bundles
-    * [KARAF-100] - The list of OBR repositories is not persisted
-    * [KARAF-101] - features:refreshUrl doesn't auto complete!
-    * [KARAF-102] - The client jar does not work when given a command to execute on the command line
-    * [KARAF-122] - Webconsole login doesn't work with karaf.framework set to equinox
-    * [KARAF-123] - File jre.properties is not copied and so it is not possible to start a second karaf instance
-    * [KARAF-124] - Karaf start script doesn't correctly include jre/lib/ext directory
-    * [KARAF-126] - Password: Error executing command: Failed to get the session.
-    * [KARAF-128] - java.lang.IndexOutOfBoundsException during generation of User Guide pdf blocking release build.
-
-** Task
-    * [KARAF-113] - Change the namespace of the two blueprint schemas
-
-** Sub-task
-    * [KARAF-115] - Document Karaf Release Guide
-    * [KARAF-119] - Establish KEYS file.
-
-
-                    Apache Felix Karaf 1.6.0
-                    ========================
-
-  Changelog
-  ---------
-
- The following list shows the bug fixes and enhancements included in this release:
-
-** Bug
-    * [FELIX-2129] - [Karaf] Possible hang with slave instances of Karaf when using Oracle JDBC lock.
-    * [FELIX-2130] - [Karaf] Failover Clustering Mechanism - Database shutdown / loss results in all Karaf instances becoming Active on restart of that DB
-    * [FELIX-2169] - Improve dev:show-tree performance and avoid NPE for installed bundle
-    * [FELIX-2191] - Drop-in deployment of feature descriptor with spring-dm bundles fails
-    * [FELIX-2196] - Karaf uses old version of Aries artifacts
-    * [FELIX-2270] - Don't install jaas.boot bundle, its in the startup classpath
-    * [FELIX-2295] - Referenced service throws UndeclaredThrowableException instead of real one
-    * [FELIX-2311] - Remove the Bootstrap class which is not needed anymore
-    * [FELIX-2319] - The order of the list of boot features is not used when installing the features
-    * [FELIX-2326] - NullPointerException thrown from PropertiesLoginModule if a user doesn't exist in the properties file
-    * [FELIX-2343] - Features maven plugin does not honor local and remote repository overrides
-    * [FELIX-2347] - Configurations on features should not override existing configurations
-
-** Improvement
-    * [FELIX-1921] - Provide a way to configure the host used for karaf ssh server
-    * [FELIX-2058] - The Oracle, MySql and default jdbc lock classes should inherit from a common base class
-    * [FELIX-2109] - OBR should support matching resources for a given requirement
-    * [FELIX-2110] - The resolver should be able to resolve for some requirements in addition to resources
-    * [FELIX-2113] - Add obr:find and obr:resolve to find matching resources and show the resolution output
-    * [FELIX-2193] - add-features-to-repo goal of features-maven-plugin should be able to download dependencies if necessary
-    * [FELIX-2237] - ^C should interrupt the thread
-    * [FELIX-2239] - features-maven-plugin validate goal should be able to use configurable config.properties
-    * [FELIX-2278] - refactor features-maven-plugin to use Parser/Clause/VersionRange from utils
-    * [FELIX-2280] - To much code duplication in DefaultJDBCLock, OracleJDBCLock and MySQLJDBCLock
-    * [FELIX-2293] - features-maven-plugin validate should support  specify the feature repositories from the maven plugin configure
-    * [FELIX-2297] - features-maven-plugin validate goal should be able to use configurable jre version
-    * [FELIX-2312] - Support for ext and endorsed directories
-    * [FELIX-2314] - Improve logging support
-    * [FELIX-2315] - Upgrade to felix web console 3.0.0
-    * [FELIX-2320] - Override default Karaf shell prompt
-    * [FELIX-2327] - Disable and delay Jline terminal initialization
-    * [FELIX-2329] - Improve the URL handling in features-maven-plugin regarding the add-features-to-repo goal
-    * [FELIX-2330] - Uninstall, refresh, and resolve osgi shell commands do not support multiple bundle ids
-
-** Task
-    * [FELIX-1990] - Use aries blueprint / jmx
-
-
-                    Apache Felix Karaf 1.4.0
-                    ========================
-
-  Changelog
-  ---------
-
- The following list shows the bug fixes and enhancements included in this release:
-
-
-** Bug
-    * [FELIX-1768] - should catch exception for FeaturesServiceImpl.internalAddRepository per uri
-    * [FELIX-1843] - Karaf shell doens't work properly under windows
-    * [FELIX-1932] - Possible NullPointerException when itest fails
-    * [FELIX-1939] - [karaf] Ssh client out put is poorly formatted.
-    * [FELIX-1964] - Unable to choose the framework using system properties
-    * [FELIX-1970] - The stop script should always work even if the default user / password / host has been changed
-    * [FELIX-1994] - Web Console admin,features and gogo plugins do not work with Equinox
-    * [FELIX-1995] - Spring status does not show properly after osgi:list command
-    * [FELIX-2012] - NullPointerException when some links clicked if karaf.framework=equinox
-    * [FELIX-2025] - grep -v doesn't filter linefeed on Windows
-    * [FELIX-2026] - Remove org.ops4j.pax.logging.DefaultServiceLog.level from system.properties
-    * [FELIX-2027] - The custom deployers leveraging url handlers must not be registered before the url handler is actually registered in the osgi framework
-    * [FELIX-2032] - file host.key is not correctly written for a new instance(s)
-    * [FELIX-2043] - When launching Karaf with equinox, the osgi framework state is not written until 30s after the boot
-    * [FELIX-2044] - System bundles are started out of order if the karaf.lock.level is > 1
-    * [FELIX-2045] - Restarting the framework from the web console (or using update on the system bundle) does not work
-    * [FELIX-2053] - Completion does not reprint previous characters in some circumstances
-    * [FELIX-2054] - Logo is garbled when connecting using putty
-    * [FELIX-2063] - [karaf] hardcoding org.ops4j.pax.exam.rbc.rmi.port property in raw pax runner --vmOptions is problematic when 1099 is not the next free port
-    * [FELIX-2065] - BootstrapLogManager doesn't load etc/org.ops4j.pax.logging.cfg file
-    * [FELIX-2072] - [Karaf]  OracleJDBCLock filling UNDO segment.
-    * [FELIX-2074] - Bring back the history command
-
-** Improvement
-    * [FELIX-1914] - Add a development subshell to ease troubleshooting classloading/resolution issues
-    * [FELIX-1947] - [Karaf] Remove import java.util.* from karaf.main.StringMap and replace with proper import list.
-    * [FELIX-2001] - Add more info to log and console when feature bundles fail to resolve
-    * [FELIX-2018] - features-maven-plugin add-features-to-repo should suport the bundle start with wrap: in features.xml
-    * [FELIX-2028] - Upgrade to preferences services 1.0.4
-    * [FELIX-2046] - Upgrade web bundles to their latest version (jetty, pax-web, felix console)
-    * [FELIX-2049] - extend org.apache.felix.karaf.testing.Helper to emit a karaf-specific execution environment file for pax-runner
-    * [FELIX-2055] - Use a nicer shutdown mechanism when stopping a managed instance
-    * [FELIX-2061] - [karaf] use waitForFrameworkStartup pax-exam option in the integration tests
-    * [FELIX-2070] - Upgrade to felix framework 2.0.3
-    * [FELIX-2075] - Add a "new" command to create java objects from the command line
-    * [FELIX-2084] - Make the display of exception stack traces available through a variable in the shell
-    * [FELIX-2182] - An improved "list" command implementation that correctly displays Spring column status
-
-** New Feature
-    * [FELIX-1815] - Introduce 'shell:logout' command to close the current shell
-    * [FELIX-1975] - [Karaf] Add oracle database support to Karaf jdbc locking feature.
-    * [FELIX-2033] - Provide an easy to use layer for writing pax-exam test for Karaf
-    * [FELIX-2047] - Support for WAR files
-
-** Task
-    * [FELIX-1902] - [karaf] sanitize web demo README of references to FUSE SNAPSHOT version
-    * [FELIX-1915] - [karaf] allow overridding of etc/system.properties via environment
-
-
-                    Apache Felix Karaf 1.2.0
-                    ========================
-
-  Overview
-  --------
-
- This release is mostly a bug fix release and contains a lot of bug fixes and improvements in the console,
- commands, features service, instance administration.  The binary distribution now also includes the user's
- manual in pdf and html formats.
-
-  Changelog
-  ---------
-
- The following list shows the bug fixes and enhancements included in this release:
-
-** Sub-task
-    * [FELIX-1701] - Aggregate all the Karaf related pages in one single Confluence page using the include macro
-
-** Bug
-    * [FELIX-1620] - Script for running the created Karaf instances with a console
-    * [FELIX-1626] - Configuration loaded from the etc/ directory are only available after a delay
-    * [FELIX-1638] - [karaf] The branding properties load can't find the external branding file
-    * [FELIX-1642] - osgi:shutdown just hang when use karaf-client.jar
-    * [FELIX-1660] - karaf should not hardcode the "system" location of its maven-like repository
-    * [FELIX-1681] - Bundles of webconsole feature are not assembled into distribution packages
-    * [FELIX-1705] - [Karaf] Hot undeploy does not work after a Karaf restart
-    * [FELIX-1715] - osgi:update on xml deployments will cause ZIPExceptions
-    * [FELIX-1717] - osgi:list column for spring is sometimes filled and sometimes not
-    * [FELIX-1723] - [Karaf] Slave instances on same host as Master instance does not properly lock.
-    * [FELIX-1728] - Karaf itest fail on IBM JDK due to Pax Exam annotations not found
-    * [FELIX-1730] - When displaying help for commands, arguments are not ordered correctly
-    * [FELIX-1745] - Unable to alter/unset a log level after it has been set from the console
-    * [FELIX-1751] - [karaf] admin:start silently fails to launch new instance
-    * [FELIX-1766] - Refactor and enable AdminServiceMBean
-    * [FELIX-1768] - should catch exception for FeaturesServiceImpl.internalAddRepository per uri
-    * [FELIX-1771] - Feature deployer is broken on windows
-    * [FELIX-1777] - Hitting backspace beyond last character causes LOUD BEEP
-    * [FELIX-1778] - instances/myinst/bin/karaf.bat leaks environment variables to shell
-    * [FELIX-1779] - The port for the jmx server needs to be configured at two locations
-    * [FELIX-1784] - install one feature failed in org.apache.felix.karaf.features.cfg featuresBoot list shouldn't block install other features in this list
-    * [FELIX-1786] - The features deployment listener tacks installed bundles and force their resolution
-    * [FELIX-1793] - ensure launch karaf java process from KARAF_BASE folder
-    * [FELIX-1799] - Hot-deployment does not work on admin:create'd instances
-    * [FELIX-1801] - Case insensitive grep outputs all uppercase in match results
-    * [FELIX-1802] - Grep command line prefix (-n) not working properly
-    * [FELIX-1803] - Unable to edit or backspace on multiline commands
-    * [FELIX-1805] - Upgrade equinox to 3.5.1
-    * [FELIX-1817] - Backspace does not work anymore when connecting from the karaf-client
-    * [FELIX-1818] - Ctrl-C kills the karaf-client, but it should be sent to the server
-    * [FELIX-1855] - exec command eats first keystroke of subsequent commands
-    * [FELIX-1857] - Backspace not working when using admin:connect
-    * [FELIX-1858] - Remote commands via ssh only work once per restart
-    * [FELIX-1869] - Need better UI feedback when features commands fail
-    * [FELIX-1877] - karaf.main.BootstrapLogManager possible resource leak and ignored exception in open method.
-    * [FELIX-1878] - karaf.main.Main possible resource leaks and ignored exceptions from mkdirs().
-    * [FELIX-1887] - The stop script can't be used if the user or password has been changed
-    * [FELIX-1888] - The karaf client hangs if the authentication fails
-    * [FELIX-1899] - Karaf itest (CoreTest) fails on slower CI machines
-
-** Improvement
-    * [FELIX-1064] - New goal for the features-maven-plugin: validate a features xml file
-    * [FELIX-1207] - [PATCH] Ignore files generated by mvn:eclipse
-    * [FELIX-1643] - Improvements / Fixes for Karaf commands and their helps
-    * [FELIX-1655] - Provide an additional argument to the Karaf admin:create command that specifies the featuresBoot
-    * [FELIX-1675] - karaf web demo README references old servicemix-client.jar
-    * [FELIX-1682] - The newly installed bundles for a feature should be uninstalled when feature install failed
-    * [FELIX-1689] - When deploying a feature, we need to refresh some bundles to cope with newly resolved optional dependencies
-    * [FELIX-1693] - [karaf][shell] Make "system bundles" start level configurable via properties
-    * [FELIX-1694] - [karaf][shell] Do not print stack traces on exceptions
-    * [FELIX-1700] - Create quality PDF manual for Karaf
-    * [FELIX-1706] - Highlight grep matches
-    * [FELIX-1707] - Add OSGi framework information to InfoAction
-    * [FELIX-1718] - karaf shell config:update command should persist / override configurations from the etc/ folder
-    * [FELIX-1729] - The if / each commands are not available in the console
-    * [FELIX-1737] - Upgrade to fileinstall 2.0.4
-    * [FELIX-1744] - Add a -C/--context option to shell:grep
-    * [FELIX-1748] - Make the command history persistent across restarts
-    * [FELIX-1749] - Improve log:set command - add auto-completion for log levels and support lower case level
-    * [FELIX-1752] - [Karaf] Extend DefaultJDBCLock to support MySQL out of the box.
-    * [FELIX-1755] - Provide a script file that would be loaded when starting a new shell (to create closures, etc...)
-    * [FELIX-1757] - Completer for session scopes
-    * [FELIX-1759] - Upgrade to latest webconsole
-    * [FELIX-1772] - Upgrade to felix framework 2.0.1
-    * [FELIX-1791] - Update to the karaf web demo readme.
-    * [FELIX-1810] - Improvements to Main startup class
-    * [FELIX-1882] - [karaf] karaf-client should have the option to retry connection establishment
-
-** New Feature
-    * [FELIX-1656] - new Shell command: shell:clear
-
-** Task
-    * [FELIX-1091] - Re-enable gshell integration tests on windows
-    * [FELIX-1761] - Include felix as a platform for the karaf integration tests
-    * [FELIX-1762] - Upgrade to pax-web 0.7.1
-    * [FELIX-1763] - Upgrade to latest pax-url
-    * [FELIX-1848] - Include instance name in the JMX ObjectName for AdminService and FeaturesService MBeans
-    * [FELIX-1849] - Provide Instance details for root instance via AdminServiceMBean.getInstances() attribute
-    * [FELIX-1850] - Expose additional isRoot attribute on AdminServiceMBean
-    * [FELIX-1892] - Upgrade to sshd-0.3.0, mina-2.0.0-RC1, gogo-0.2.2, jansi-1.1
-
-
-
-                    Apache Felix Karaf 1.0.0
-                    ========================
-
-  Overview
-  --------
-
- The Apache Felix Karaf 1.0.0 release is the first release since the move of ServiceMix Kernel to Apache Felix.
- This release brings a lot of new features:
-  * Switch from Spring-DM to Blueprint for the default Dependency Injection container (Spring-DM is still
-       fully supported and easy to install through the features service)
-  * Switch from Geronimo GShell to Felix Gogo
-      This changes is a bit disruptive for the command line syntax, but offers much more features such
-      as closures
-  * Integration with the Felix Web Console (easily installed using the features service).
-  * Built-in support for Equinox
-  * Upgrade to OSGi 4.2 frameworks (both Felix and Equinox)
- This release also contains a lot of small improvements and bug fixes.  The changelog below contains the whole
- list of changes.
-
-
-  Changelog
-  ---------
-
- The following list shows the bug fixes and enhancements included in this release:
-
- ** Bug
-     * [FELIX-1087] - Unable to log into ServiceMix Kernel using Windows putty SSH client
-     * [FELIX-1097] - ServiceMix -> Karaf in base directory notices
-     * [FELIX-1100] - Cat Command fails to display ?wsdl files
-     * [FELIX-1125] - "features/list -i" returns "ERROR CommandLineExecutionFailed: org.apache.geronimo.gshell.command.CommandException: java.lang.ArrayStoreException: org.apache.servicemix.kernel.gshell.features.internal.FeatureImpl"
-     * [FELIX-1128] - Features installed via the deploy directory aren't listed by the "features/list" command
-     * [FELIX-1152] - wrapper scripts fail to start Karaf
-     * [FELIX-1153] - change parent artifact id from kernel to karaf in some modules to make the build pass from clean local maven repo
-     * [FELIX-1161] - Stange classloading issues when using compendium services
-     * [FELIX-1192] - KARAF: Locking error in DefaultJDBCLock, also contains an eventual OutOfMemory error on locked processes.
-     * [FELIX-1199] - Karaf: closing IO stream, removal of minor file descriptor leak.
-     * [FELIX-1212] - Possible infinit loop when a remote ssh connection is closed
-     * [FELIX-1218] - Existing configurations are not retrieved when installing a feature
-     * [FELIX-1222] - [features-maven-plugin:add-features-to-repo] Incorrect parsing of pax mvn url string
-     * [FELIX-1243] - Change the default port for the OSGI HTTP Service from 8080 to 8181
-     * [FELIX-1253] - Cursor is blocked when the correct syntax is not displaed
-     * [FELIX-1265] - The command refreshUrl does not work if the features.xml file is embedded in a Jar. The JVM caches jar entries
-     * [FELIX-1274] - Spring deployer fails when bean class is from java.* packages
-     * [FELIX-1315] - Karaf console is garbled on Windows
-     * [FELIX-1320] - Authentication failed connecting via ssh on Windows
-     * [FELIX-1361] - Issue with import/export version of the package : org.osgi.util.tracker in Apache Felix Karaf
-     * [FELIX-1373] - featuresBoot in etc/org.apache.felix.karaf.featues no longer works
-     * [FELIX-1375] - [Karaf] There's no 'help' command
-     * [FELIX-1378] - Optional branding does not work in new gogo console
-     * [FELIX-1391] - Unable to create new ConfigAdmin PID through karaf console
-     * [FELIX-1423] - karaf fails to start in cygwin bash
-     * [FELIX-1431] - Add a web console plugin to have access to the gogo shell
-     * [FELIX-1449] - Tab completion doesn't work on Windows
-     * [FELIX-1454] - install --help throws exception
-     * [FELIX-1458] - 'servicemix server' and servicemix client' not working properly on windows
-     * [FELIX-1459] - bin/karaf may fail to start when CDPATH is set (on POSIX shells)
-     * [FELIX-1465] - Make symbolic names of Karaf webconsole bundles consistent with other bundles
-     * [FELIX-1466] - org.apache.felix.karaf.features.FeaturesServiceTest fails
-     * [FELIX-1468] - wrapper:install and admin:create prints old ansi output that need to be converted to real ansi
-     * [FELIX-1472] - Better handling of configurations from the deployer and feature service
-     * [FELIX-1515] - Entering an illegal command has an unusual effect
-     * [FELIX-1517] - Manually deleting an instance breaks admin:list
-     * [FELIX-1519] - Karaf Failover does not work with PostgreSQL and Oracle
-     * [FELIX-1529] - The console does not work anymore when connecting to another karaf instance
-     * [FELIX-1564] - Authentication failed when using admin:connect to connect to a newly created instance
-     * [FELIX-1566] - Possible NPE when uninstalling a feature
-     * [FELIX-1567] - When dropping an empty xml file (i.e. just an empty file with an xml extension) in the deploy folder, errors are printed to the console
-     * [FELIX-1575] - The JMX connector can not be registered because of a clash in the name in the RMI registry
-     * [FELIX-1576] - The features service should do a PackageAdmin.refresh() after uninstalling a feature
-     * [FELIX-1602] - Unable to configure boot features on admin:create-d instance
-     * [FELIX-1618] - in spring-dm feature, optional imports in spring-context won't get resolved
-
- ** Improvement
-     * [FELIX-1062] - Upgrade to latest Felix Runtime
-     * [FELIX-1063] - Upgrade to latest Felix Bundle Repository
-     * [FELIX-1092] - The client jar / ssh deamon should support direct commands
-     * [FELIX-1102] - Make gshell-core really independant of the MainService
-     * [FELIX-1104] - Allow osgi/stop command to specify more than one bundle per command entry.
-     * [FELIX-1107] - Make org.apache.servicemix.kernel.gshell.features dependency on org.apache.servicemix.kernel.filemonitor optional
-     * [FELIX-1110] - Refactor filemonitor / deployers inside a deployer sub module
-     * [FELIX-1112] - [PATCH] Allow osgi/start command to specify more than one bundle per command entry
-     * [FELIX-1115] - Use better version ranges for imports
-     * [FELIX-1121] - Add feature for installing Felix Web Console
-     * [FELIX-1126] - No errors are generated for a bad URL passed to the "features/addUrl", "features/refreshUrl", or "features/list" commands.
-     * [FELIX-1127] - Add a name for a repository
-     * [FELIX-1133] - Allow usage of fragments in Karaf features
-     * [FELIX-1149] - Describe ConfigAdmin configurations using metatype
-     * [FELIX-1150] - Upgrade to SpringDM and SpringFramework
-     * [FELIX-1172] - Rebrand Karaf locking mechanism.
-     * [FELIX-1180] - Improve Karaf DefaultJDBCLock to use proper logging mechanism instead of System err prints.
-     * [FELIX-1196] - Felix Web Console can't list Karaf features
-     * [FELIX-1204] - Fix the karaf client to allow direct execution of commands
-     * [FELIX-1220] - Remove unnecssary parts of a filter
-     * [FELIX-1276] - There is no way to get all the Feature information from the FeaturesService
-     * [FELIX-1303] - add an osgi/imports and osgi/exports to show a pretty-printed output of the imports/exports packages for a bundle
-     * [FELIX-1450] - Karaf branding and plugins for Felix webconsole
-     * [FELIX-1455] - OSGi Storage is hardcoded to be data/cache
-     * [FELIX-1457] - Externalize and refactory management layer for FeatureService to be more scalable and more consistent with the OSGi management (using open mbeans)
-     * [FELIX-1463] - Switch to Felix Fileinstall instead of our own file deployer
-     * [FELIX-1467] - Add Karaf to top-level build files
-     * [FELIX-1469] - Add svn:ignore property to a few Karaf projects
-     * [FELIX-1528] - [karaf] Use a defined location for storing the list of managed instances create by the admin service
-     * [FELIX-1555] - The osgi:list command should print spring-dm bundle state if spring-dm has been deployed
-     * [FELIX-1558] - use com.sun.* instead of com.sun.management* for boot delegation
-     * [FELIX-1594] - include blueprint bundle in karaf kit system folder
-
- ** New Feature
-     * [FELIX-1109] - Deployer for blueprint applications
-     * [FELIX-1111] - Ability to run Karaf on Equinox
-     * [FELIX-1206] - [PATCH] config/propappend
-     * [FELIX-1261] - Install/Uninstall Karaf Features from Felix WebConsole
-     * [FELIX-1485] - Admin commands support in Karaf webconsole
-     * [FELIX-1524] - Implement a better tac command
-     * [FELIX-1547] - OS shell level admin commands for Karaf
-
- ** Task
-     * [FELIX-1098] - Switch from spring-dm to blueprint
-     * [FELIX-1099] - Switch from spring-dm integration tests to pax-exam
-     * [FELIX-1116] - Rename to Apache Felix Karaf
-     * [FELIX-1200] - Move features-maven-plugin into Karaf
-     * [FELIX-1312] - Switch from gshell to gogo
-     * [FELIX-1523] - Fix Karaf version to 0.9.0-SNAPSHOT as next release will be 1.0.0
-
- ** Sub-task
-     * [FELIX-1117] - Update branding
-     * [FELIX-1118] - Update shell scripts
-     * [FELIX-1132] - Get rid of the JMX spring stuff in gshell-features
-
-
-
-
-                    Apache ServiceMix Kernel 1.1.0
-                    ==============================
-
-  Overview
-  --------
-
- The Apache ServiceMix Kernel 1.1.0 release brings a lot of new features enhancements and bug fixes:
-  * remote connection using SSH protocol
-  * provisioning enhancements: versioning / hot deployment of features
-  * new commands, including OSGi related commands for the Configuration Admin and Package Admin services
-  * improved spring integration: upgrade to spring 2.5.6 and spring-dm 1.2.0-m2, the osgi/list command
-       now displays spring applications status
-  * container level locking for master / slave deployments
-  * support for JAXP 1.4 on all platforms
-  * improved JMX support for managing the OSGi framework and features
- Note that the commands syntax has changed due to the upgrade to the latest gshell version.
-
-  Known issues
-  ============
-
-     * [SMX4KNL-141] - The config/edit command changes does not takes precedence over configuration files in the etc folder at restart
-     * [SMX4KNL-183] - features/uninstall behaves different in version selection than features/install
-     * [SMX4KNL-189] - Shell completion works only in the root shell
-     * [SMX4KNL-200] - The client jar / ssh daemon should support direct commands
-     * [SMX4KNL-227] - Full support of fragment bundles
-     * [SMX4KNL-228] - Warning messages when using OpenSSH 5.1 to connect to ServiceMix Kernel
-     * [SMX4KNL-231] - Unable to log into ServiceMix Kernel using OpenSolaris SSH client
-     * [SMX4KNL-232] - Unable to log into ServiceMix Kernel using Windows putty SSH client
-
-  Changelog
-  ---------
-
-  The following list shows the bug fixes and enhancements included in this release:
-
- ** Bug
-     * [SMX4KNL-72] - If there is no etc/startup.properties, the kernel hangs without displaying any error
-     * [SMX4KNL-79] - When starting the kernel, a log entry states "Can not install feature ''"
-     * [SMX4KNL-86] - When running integration tests, the container classpath contains all the test bundles which may cause problems
-     * [SMX4KNL-87] - Problems with batch files on windows
-     * [SMX4KNL-95] - kernel build failed in testing/itests
-     * [SMX4KNL-96] - package missing for felix.config.properties
-     * [SMX4KNL-97] - Dissociate the name and the location of ServiceMix Kernel instances managed by the admin shell
-     * [SMX4KNL-100] - The client does not close when running "osgi shutdown" command
-     * [SMX4KNL-102] - The file monitor should use ${servicemix.base} for default polling locations
-     * [SMX4KNL-104] - When using a remote connection, errors are not reported correctly
-     * [SMX4KNL-105] - Features are reinstalled on restart of servicemix
-     * [SMX4KNL-112] - gshell pom needs to include gshell-config and gshell-packages modules
-     * [SMX4KNL-115] - config.properties for SMX-Kernel needs to be updated
-     * [SMX4KNL-117] - The Smx testing platform should take into account the boot delegation packages specified in the configuration file
-     * [SMX4KNL-118] - The configuration file for felix comes from 3 different places in the svn tree, only one copy should be used
-     * [SMX4KNL-122] - When using the client and trying to connect to another instance using the "admin connect" command, the console hangs
-     * [SMX4KNL-123] - XML parsing does not work on non Sun JVMs and Sun's SAAJ bundle requires Sun's JAXP implementation
-     * [SMX4KNL-124] - Issuing command "log d" fails with NullPointerException on AIX.
-     * [SMX4KNL-126] - The user is no more authenticated with the new gshell integration
-     * [SMX4KNL-128] - Remove OBR support from default distribution
-     * [SMX4KNL-132] - osgi/list command should display the spring application state
-     * [SMX4KNL-133] - jaxp-ri bundle miss javax.xml.datatype.DatatypeFactory factoryId under META-INF/services
-     * [SMX4KNL-134] - XPathFactoryFinder in jaxp api should use factoryId to load the spi class in osgi enviroment
-     * [SMX4KNL-135] - Remote shell missing help resources
-     * [SMX4KNL-138] - No command history with Shell console
-     * [SMX4KNL-140] - Shell commands references not cleaned up when bundle uninstalled
-     * [SMX4KNL-142] - Starting a new instance that was created with admin on windows fails to start
-     * [SMX4KNL-145] - java.lang.IllegalStateException: Streams not registered for thread
-     * [SMX4KNL-148] - OPS4J maven repo missing form default search list
-     * [SMX4KNL-149] - Build failure due to new sshd snapshot
-     * [SMX4KNL-150] - Shell group name variable doesn't resolve
-     * [SMX4KNL-151] - Update displayed version in Shell to be 1.1.0-SNAPSHOT for trunk
-     * [SMX4KNL-153] - Stopping one of the "core" bundles of the servicemix engine block the server
-     * [SMX4KNL-155] - Error changing manifest while bundle is deployed
-     * [SMX4KNL-162] - The default jaas realm uses the config admin to store clear password
-     * [SMX4KNL-164] - features/removeUrl does not remove the repository
-     * [SMX4KNL-165] - Initial provisioning using features is very slow especially when using snapshots
-     * [SMX4KNL-170] - Unknown protoc
diff --git a/karaf-2.3.x/admin/command/NOTICE b/karaf-2.3.x/admin/command/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/admin/command/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/admin/command/pom.xml b/karaf-2.3.x/admin/command/pom.xml
deleted file mode 100644
index a2c3785..0000000
--- a/karaf-2.3.x/admin/command/pom.xml
+++ /dev/null
@@ -1,130 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.admin</groupId>
-        <artifactId>admin</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.admin.command</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Admin :: Command</name>
-    <description>Admin shell commands to manipulate Karaf child instances.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.admin</groupId>
-            <artifactId>org.apache.karaf.admin.core</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.features</groupId>
-            <artifactId>org.apache.karaf.features.command</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-jdk14</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymockclassextension</artifactId>
-            <version>${easymock.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-     </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            !${project.artifactId}*,
-                            !org.apache.karaf.admin.internal,
-                            javax.management,
-                            javax.management.loading,
-                            org.apache.felix.service.command,
-                            org.apache.felix.gogo.commands,
-                            org.apache.karaf.shell.console,
-                            *
-                        </Import-Package>
-                        <Private-Package>
-                            org.apache.karaf.admin.main
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/AdminCommandSupport.java b/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/AdminCommandSupport.java
deleted file mode 100644
index e830076..0000000
--- a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/AdminCommandSupport.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.command;
-
-import org.apache.karaf.admin.AdminService;
-import org.apache.karaf.admin.Instance;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-
-public abstract class AdminCommandSupport extends OsgiCommandSupport {
-
-    private AdminService adminService;
-
-    public AdminService getAdminService() {
-        return adminService;
-    }
-
-    public void setAdminService(AdminService adminService) {
-        this.adminService = adminService;
-    }
-
-    protected Instance getExistingInstance(String name) {
-        Instance i = adminService.getInstance(name);
-        if (i == null) {
-            throw new IllegalArgumentException("Instance '" + name + "' does not exist");
-        }
-        return i;
-    }
-}
diff --git a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/ChangeOptsCommand.java b/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/ChangeOptsCommand.java
deleted file mode 100644
index d5ebb1a..0000000
--- a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/ChangeOptsCommand.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.command;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-
-@Command(scope = "admin", name = "change-opts", description = "Changes the Java options of an existing container instance.")
-public class ChangeOptsCommand extends AdminCommandSupport {
-
-    @Argument(index = 0, name = "name", description="The name of the container instance", required = true, multiValued = false)
-    private String instance = null;
-
-    @Argument(index = 1, name = "javaOpts", description = "The new Java options to set", required = true, multiValued = false)
-    private String javaOpts;
-
-    protected Object doExecute() throws Exception {
-        getExistingInstance(instance).changeJavaOpts(javaOpts);
-        return null;
-    }
-}
diff --git a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/ChangeRmiRegistryPortCommand.java b/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/ChangeRmiRegistryPortCommand.java
deleted file mode 100644
index 46d3d21..0000000
--- a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/ChangeRmiRegistryPortCommand.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.command;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-
-@Command(scope = "admin", name = "change-rmi-registry-port", description = "Changes the RMI registry port (used by management layer) of an existing container instance.")
-public class ChangeRmiRegistryPortCommand extends AdminCommandSupport {
-
-    @Argument(index = 0, name = "name", description = "The name of the container instance", required = true, multiValued = false)
-    private String instance = null;
-
-    @Argument(index = 1, name = "port", description = "The new RMI registry port to set", required = true, multiValued = false)
-    private int port = 0;
-
-    protected Object doExecute() throws Exception {
-        getExistingInstance(instance).changeRmiRegistryPort(port);
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/ChangeRmiServerPortCommand.java b/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/ChangeRmiServerPortCommand.java
deleted file mode 100644
index d0cbcaa..0000000
--- a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/ChangeRmiServerPortCommand.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.command;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-
-@Command(scope = "admin", name = "change-rmi-server-port", description = "Changes the RMI server port (used by management layer) of an existing container instance.")
-public class ChangeRmiServerPortCommand extends AdminCommandSupport {
-
-    @Argument(index = 0, name = "name", description = "The name of the container instance", required = true, multiValued = false)
-    private String instance = null;
-
-    @Argument(index = 1, name = "port", description = "The new RMI server port to set", required = true, multiValued = false)
-    private int port = 0;
-
-    public Object doExecute() throws Exception {
-        getExistingInstance(instance).changeRmiServerPort(port);
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/ChangeSshPortCommand.java b/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/ChangeSshPortCommand.java
deleted file mode 100644
index a437765..0000000
--- a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/ChangeSshPortCommand.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.command;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-
-@Command(scope = "admin", name = "change-ssh-port", description = "Changes the secure shell port of an existing container instance.")
-public class ChangeSshPortCommand extends AdminCommandSupport {
-
-    @Argument(index = 0, name = "name", description="The name of the container instance", required = true, multiValued = false)
-    private String instance = null;
-
-    @Argument(index = 1, name = "port", description = "The new secure shell port to set", required = true, multiValued = false)
-    private int port = 0;
-
-    protected Object doExecute() throws Exception {
-        getExistingInstance(instance).changeSshPort(port);
-        return null;
-    }
-}
diff --git a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/CloneCommand.java b/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/CloneCommand.java
deleted file mode 100644
index 2ee26f8..0000000
--- a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/CloneCommand.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.command;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.admin.InstanceSettings;
-
-/**
- * Clone an existing instance.
- */
-@Command(scope = "instance", name = "clone", description = "Clones an existing container instance.")
-public class CloneCommand extends AdminCommandSupport {
-
-    @Option(name = "-s", aliases = {"--ssh-port"}, description = "Port number for remote secure shell connection", required = false, multiValued = false)
-    int sshPort = 0;
-
-    @Option(name = "-r", aliases = {"-rr", "--rmi-port", "--rmi-registry-port"}, description = "Port number for RMI registry connection", required = false, multiValued = false)
-    int rmiRegistryPort = 0;
-
-    @Option(name = "-rs", aliases = {"--rmi-server-port"}, description = "Port number for RMI server connection", required = false, multiValued = false)
-    int rmiServerPort = 0;
-
-    @Option(name = "-l", aliases = {"--location"}, description = "Location of the cloned container instance in the file system", required = false, multiValued = false)
-    String location;
-
-    @Option(name = "-o", aliases = {"--java-opts"}, description = "JVM options to use when launching the cloned instance", required = false, multiValued = false)
-    String javaOpts;
-
-    @Option(name = "-v", aliases = {"--verbose"}, description = "Display actions performed by the command (disabled by default)", required = false, multiValued = false)
-    boolean verbose = false;
-
-    @Argument(index = 0, name = "name", description = "The name of the source container instance", required = true, multiValued = false)
-    String name;
-
-    @Argument(index = 1, name = "cloneName", description = "The name of the cloned container instance", required = true, multiValued = false)
-    String cloneName;
-
-
-    protected Object doExecute() throws Exception {
-        InstanceSettings settings = new InstanceSettings(sshPort, rmiRegistryPort, rmiServerPort, location, javaOpts, null, null);
-        getAdminService().cloneInstance(name, cloneName, settings);
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/ConnectCommand.java b/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/ConnectCommand.java
deleted file mode 100644
index 1ffb0cc..0000000
--- a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/ConnectCommand.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.command;
-
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-
-@Command(scope = "admin", name = "connect", description = "Connects to an existing container instance.")
-public class ConnectCommand extends AdminCommandSupport {
-
-    @Option(name="-u", aliases={"--username"}, description="Remote user name", required = false, multiValued = false)
-    private String username;
-
-    @Argument(index = 0, name="name", description="The name of the container instance", required = true, multiValued = false)
-    private String instance = null;
-
-    @Argument(index = 1, name = "command", description = "Optional command to execute", required = false, multiValued = true)
-    private List<String> command;
-
-    protected Object doExecute() throws Exception {
-        String cmdStr = "";
-        if (command != null) {
-            StringBuilder sb = new StringBuilder();
-            for (String cmd : command) {
-                if (sb.length() > 0) {
-                    sb.append(' ');
-                }
-                sb.append(cmd);
-            }
-            cmdStr = "'" + sb.toString().replaceAll("'", "\\'") + "'";
-        }
-
-        int port = getExistingInstance(instance).getSshPort();
-        if (username != null) {
-            session.execute("ssh -l " + username + " -p " + port + " localhost " + cmdStr);
-        } else {
-            session.execute("ssh -p " + port + " localhost " + cmdStr);
-        }
-        return null;
-    }
-}
diff --git a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/CreateCommand.java b/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/CreateCommand.java
deleted file mode 100644
index 8c34554..0000000
--- a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/CreateCommand.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.command;
-
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.admin.InstanceSettings;
-import org.apache.karaf.features.command.completers.AllFeatureCompleter;
-import org.apache.karaf.features.command.completers.FeatureRepositoryCompleter;
-
-/**
- * Creates a new Karaf instance
- */
-@Command(scope = "admin", name = "create", description = "Creates a new container instance.")
-public class CreateCommand extends AdminCommandSupport
-{
-    @Option(name = "-s", aliases = {"--ssh-port"}, description = "Port number for remote secure shell connection", required = false, multiValued = false)
-    int sshPort = 0;
-
-    @Option(name = "-r", aliases = {"-rr", "--rmi-port", "--rmi-registry-port"}, description = "Port number for RMI registry connection", required = false, multiValued = false)
-    int rmiRegistryPort = 0;
-
-    @Option(name = "-rs", aliases = {"--rmi-server-port"}, description = "Port number for RMI server connection", required = false, multiValued = false)
-    int rmiServerPort = 0;
-
-    @Option(name = "-l", aliases = {"--location"}, description = "Location of the new container instance in the file system", required = false, multiValued = false)
-    String location;
-
-    @Option(name = "-o", aliases = {"--java-opts"}, description = "JVM options to use when launching the instance", required = false, multiValued = false)
-    String javaOpts;
-    
-    @Option(name = "-f", aliases = {"--feature"},
-            description = "Initial features. This option can be specified multiple times to enable multiple initial features", required = false, multiValued = true)
-    List<String> features;
-    
-    @Option(name = "-furl", aliases = {"--featureURL"}, 
-            description = "Additional feature descriptor URLs. This option can be specified multiple times to add multiple URLs", required = false, multiValued = true)
-    List<String> featureURLs;
-
-    @Argument(index = 0, name = "name", description="The name of the new container instance", required = true, multiValued = false)
-    String instance = null;
-
-    protected Object doExecute() throws Exception {
-        InstanceSettings settings = new InstanceSettings(sshPort, rmiRegistryPort, rmiServerPort, location, javaOpts, featureURLs, features);
-        getAdminService().createInstance(instance, settings);
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/DestroyCommand.java b/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/DestroyCommand.java
deleted file mode 100644
index 3192be30..0000000
--- a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/DestroyCommand.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.command;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-
-/**
- * Destroy an existing Karaf instance
- */
-@Command(scope = "admin", name = "destroy", description = "Destroys an existing container instance.")
-public class DestroyCommand extends AdminCommandSupport {
-    @Argument(index = 0, name = "name", description="The name of the container instance to destroy", required = true, multiValued = false)
-    private String instance = null;
-
-    protected Object doExecute() throws Exception {
-        getExistingInstance(instance).destroy();
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/ListCommand.java b/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/ListCommand.java
deleted file mode 100644
index 7d26c38..0000000
--- a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/ListCommand.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.command;
-
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.admin.Instance;
-
-/**
- * List available instances
- */
-@Command(scope = "admin", name = "list", description = "Lists all existing container instances.")
-public class ListCommand extends AdminCommandSupport {
-
-    @Option(name = "-l", aliases = { "--location" }, description = "Displays the location of the container instances", required = false, multiValued = false)
-    boolean location;
-
-    @Option(name = "-o", aliases = { "--java-opts" }, description = "Displays the Java options used to launch the JVM", required = false, multiValued = false)
-    boolean javaOpts;
-
-    protected Object doExecute() throws Exception {
-        getAdminService().refreshInstance();
-        Instance[] instances = getAdminService().getInstances();
-        if (javaOpts) {
-            System.out.println("  SSH Port   RMI Ports         State       Pid  JavaOpts");
-        } else if (location) {
-            System.out.println("  SSH Port   RMI Ports         State       Pid  Location");
-        } else {
-            System.out.println("  SSH Port   RMI Ports         State       Pid  Name");
-        }
-        for (Instance instance : instances) {
-            StringBuilder sb = new StringBuilder();
-            sb.append('[');
-            String s = Integer.toString(instance.getSshPort());
-            for (int i = s.length(); i < 8; i++) {
-                sb.append(' ');
-            }
-            sb.append(s);
-            sb.append("] [");
-            String rmiRegistryPort = Integer.toString(instance.getRmiRegistryPort());
-            String rmiServerPort = Integer.toString(instance.getRmiServerPort());
-            sb.append(rmiRegistryPort).append("/").append(rmiServerPort);
-            for (int i = rmiRegistryPort.length() + rmiServerPort.length() + 1; i < 15; i++) {
-                sb.append(' ');
-            }
-            sb.append("] [");
-            String state = instance.getState();
-            while (state.length() < "starting".length()) {
-                state += " ";
-            }
-            sb.append(state);
-            sb.append("] [");
-            s = Integer.toString(instance.getPid());
-            for (int i = s.length(); i < 5; i++) {
-                sb.append(' ');
-            }
-            sb.append(s);
-            sb.append("] ");
-            if (javaOpts) {
-                sb.append(instance.getJavaOpts());
-            } else if (location) {
-                sb.append(instance.getLocation());
-            } else {
-                sb.append(instance.getName());
-            }
-            System.out.println(sb.toString());
-        }
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/RenameCommand.java b/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/RenameCommand.java
deleted file mode 100644
index 3f9757a..0000000
--- a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/RenameCommand.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.command;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-
-/**
- * Rename an existing Karaf container instance.
- */
-@Command(scope = "admin", name = "rename", description = "Renames an existing container instance.")
-public class RenameCommand extends AdminCommandSupport {
-
-    @Argument(index = 0, name = "name", description = "The name of the container instance to rename", required = true, multiValued = false)
-    String instance = null;
-
-    @Argument(index = 1, name = "new-name", description = "The new name of the container instance", required = true, multiValued = false)
-    String newName = null;
-
-    protected Object doExecute() throws Exception {
-        getAdminService().renameInstance(instance, newName);
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/StartCommand.java b/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/StartCommand.java
deleted file mode 100644
index 1494466..0000000
--- a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/StartCommand.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.command;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.admin.Instance;
-
-@Command(scope = "admin", name = "start", description = "Starts an existing container instance.")
-public class StartCommand extends AdminCommandSupport {
-
-    @Option(name = "-o", aliases = { "--java-opts"}, description = "Java options when launching the instance", required = false, multiValued = false)
-    private String javaOpts;
-
-    @Option(name = "-w", aliases = { "--wait"}, description = "Wait for the instance to be fully started", required = false, multiValued = false)
-    private boolean wait;
-
-    @Argument(index = 0, name = "name", description = "The name of the container instance", required = true, multiValued = false)
-    private String instance = null;
-
-    protected Object doExecute() throws Exception {
-        Instance child = getExistingInstance(instance);
-        if (wait) {
-            String state = child.getState();
-            if (Instance.STOPPED.equals(state)) {
-                child.start(javaOpts);
-            }
-            if (!Instance.STARTED.equals(state)) {
-                do {
-                    Thread.sleep(500);
-                    state = child.getState();
-                } while (Instance.STARTING.equals(state));
-            }
-        } else {
-            child.start(javaOpts);
-        }
-        return null;
-    }
-}
diff --git a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/StopCommand.java b/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/StopCommand.java
deleted file mode 100644
index 73fe6b3..0000000
--- a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/StopCommand.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.command;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-
-@Command(scope = "admin", name = "stop", description = "Stops an existing container instance.")
-public class StopCommand extends AdminCommandSupport {
-
-    @Argument(index = 0, name = "name", description = "The name of the container instance", required = true, multiValued = false)
-    private String instance = null;
-
-    protected Object doExecute() throws Exception {
-        getExistingInstance(instance).stop();
-        return null;
-    }
-}
diff --git a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/completers/InstanceCompleter.java b/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/completers/InstanceCompleter.java
deleted file mode 100644
index c894da9..0000000
--- a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/command/completers/InstanceCompleter.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.command.completers;
-
-import java.util.List;
-
-import org.apache.karaf.admin.AdminService;
-import org.apache.karaf.admin.Instance;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.apache.karaf.shell.console.Completer;
-
-/**
- * {@link jline.Completor} for server instance names.
- *
- * Displays a list of configured server instances for the Admin commands.
- *
- */
-public class InstanceCompleter implements Completer {
-    private AdminService adminService;
-
-    public void setAdminService(AdminService adminService) {
-        this.adminService = adminService;
-    }
-
-    public int complete(String buffer, int cursor, List candidates) {
-        StringsCompleter delegate = new StringsCompleter();
-        for (Instance instance : adminService.getInstances()) {
-            delegate.getStrings().add(instance.getName());
-        }
-        return delegate.complete(buffer, cursor, candidates);
-    }
-}
diff --git a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/main/Execute.java b/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/main/Execute.java
deleted file mode 100644
index 1e52d06..0000000
--- a/karaf-2.3.x/admin/command/src/main/java/org/apache/karaf/admin/main/Execute.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.main;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-import org.apache.felix.gogo.commands.Action;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.basic.DefaultActionPreparator;
-import org.apache.karaf.admin.command.*;
-import org.apache.karaf.admin.command.ChangeSshPortCommand;
-import org.apache.karaf.admin.internal.AdminServiceImpl;
-import org.fusesource.jansi.AnsiConsole;
-
-public class Execute {
-    static Class<? extends Action> x = CreateCommand.class;
-    private static final Class<?> [] COMMAND_CLASSES = new Class[] {
-        CreateCommand.class,
-        StartCommand.class,
-        StopCommand.class,
-        DestroyCommand.class,
-        ListCommand.class,
-        ChangeSshPortCommand.class,
-        ChangeRmiRegistryPortCommand.class,
-        ChangeRmiServerPortCommand.class};
-    private static final Map<String, Class<?>> COMMANDS = new TreeMap<String, Class<?>>();
-    static {
-        for (Class<?> c : COMMAND_CLASSES) {
-            Command ann = c.getAnnotation(Command.class);
-            if (ann == null) {
-                continue;
-            }
-            COMMANDS.put(ann.name(), c);
-        }
-    }    
-    
-    // For testing
-    static boolean exitAllowed = true;
-    
-    /**
-     * Environment variable for specifying extra options to the Karaf admin 
-     * process kicked off from this Java process.
-     */
-    private static final String ENV_KARAF_OPTS = "KARAF_OPTS";
-    
-    /**
-     * System property for specifying extra options to the Karaf admin 
-     * process kicked off from this Java process.
-     */
-    private static final String PROP_KARAF_OPTS = "karaf.opts";    
-
-    public static void main(String[] args) throws Exception {
-        AnsiConsole.systemInstall();
-
-        if (args.length == 0) {
-            listCommands();
-            exit(0);
-        }
-        String commandName = args[0];
-        Class<?> cls = COMMANDS.get(commandName);
-        if (cls == null) {
-            System.err.println("Command not found: " + commandName);
-            exit(-1);
-        }
-
-        String storage = System.getProperty("karaf.instances");
-        if (storage == null) {
-            System.err.println("System property 'karaf.instances' is not set. \n" +
-        		"This property needs to be set to the full path of the instance.properties file.");
-            exit(-1);
-        }
-        File storageFile = new File(storage);
-        System.setProperty("user.dir", storageFile.getParentFile().getParentFile().getCanonicalPath());
-        
-        try {
-            String karafOpts = System.getenv(ENV_KARAF_OPTS);
-            if (karafOpts != null) {
-                System.setProperty(PROP_KARAF_OPTS, karafOpts);
-            }
-        } catch(Exception e) {
-            System.err.println("Could not read KARAF_OPTS environment variable: " + e.getMessage());
-            if (System.getProperty("karaf.showStackTrace") != null) {
-                throw e;
-            }
-        }        
-        
-        Object command = cls.newInstance();
-        if (command instanceof AdminCommandSupport) {
-            try {
-                execute((AdminCommandSupport) command, storageFile, args);
-            } catch (Exception e) {
-                System.err.println("Error execution command '" + commandName + "': " + e.getMessage());
-                if (System.getProperty("karaf.showStackTrace") != null) {
-                    throw e;
-                }
-            }
-        } else {
-            System.err.println("Not an admin command: " + commandName);
-            exit(-1);
-        }
-    }
-    
-    static void execute(AdminCommandSupport command, File storageFile, String[] args) throws Exception {
-        DefaultActionPreparator dap = new DefaultActionPreparator();
-        List<Object> params = new ArrayList<Object>(Arrays.asList(args));
-        params.remove(0); // this is the actual command name
-
-        if (!dap.prepare(command, null, params)) {
-            return;
-        }
-                
-        AdminServiceImpl admin = new AdminServiceImpl();
-        admin.setStorageLocation(storageFile);
-        admin.init();
-        command.setAdminService(admin);
-        command.execute(null);
-    }
-
-    private static void listCommands() {
-        System.out.println("Available commands:");
-        for (Map.Entry<String, Class<?>> entry : COMMANDS.entrySet()) {
-            Command ann = entry.getValue().getAnnotation(Command.class);
-            System.out.printf("  %s - %s\n", entry.getKey(), ann.description());
-        }
-        
-        System.out.println("Type 'command --help' for more help on the specified command.");
-    }
-
-    private static void exit(int rc) {
-        if (exitAllowed) {
-            System.exit(rc);
-        } else {
-            throw new RuntimeException("" + rc);
-        }
-    }
-}
diff --git a/karaf-2.3.x/admin/command/src/main/resources/OSGI-INF/blueprint/admin-command.xml b/karaf-2.3.x/admin/command/src/main/resources/OSGI-INF/blueprint/admin-command.xml
deleted file mode 100644
index d4f4966..0000000
--- a/karaf-2.3.x/admin/command/src/main/resources/OSGI-INF/blueprint/admin-command.xml
+++ /dev/null
@@ -1,145 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           default-activation="lazy">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
-        <command name="admin/create">
-            <action class="org.apache.karaf.admin.command.CreateCommand">
-                <property name="adminService" ref="adminService" />
-            </action>
-            <optional-completers>
-                   <entry key="-f" value-ref="allFeatureCompleter"/>
-                   <entry key="-furl" value-ref="featureUrlCompleter"/>
-            </optional-completers>
-        </command>
-        <command name="admin/connect">
-            <action class="org.apache.karaf.admin.command.ConnectCommand">
-                <property name="adminService" ref="adminService" />
-            </action>
-            <completers>
-                <ref component-id="instanceCompleter" />
-                <null/>
-            </completers>
-        </command>
-        <command name="admin/list">
-            <action class="org.apache.karaf.admin.command.ListCommand">
-                <property name="adminService" ref="adminService" />
-            </action>
-        </command>
-        <command name="admin/start">
-            <action class="org.apache.karaf.admin.command.StartCommand">
-                <property name="adminService" ref="adminService" />
-            </action>
-            <completers>
-                <ref component-id="instanceCompleter" />
-                <null/>
-            </completers>
-        </command>
-        <command name="admin/stop">
-            <action class="org.apache.karaf.admin.command.StopCommand">
-                <property name="adminService" ref="adminService" />
-            </action>
-            <completers>
-                <ref component-id="instanceCompleter" />
-                <null/>
-            </completers>
-        </command>
-        <command name="admin/destroy">
-            <action class="org.apache.karaf.admin.command.DestroyCommand">
-                <property name="adminService" ref="adminService" />
-            </action>
-            <completers>
-                <ref component-id="instanceCompleter" />
-                <null/>
-            </completers>
-        </command>
-        <command name="admin/rename">
-            <action class="org.apache.karaf.admin.command.RenameCommand">
-                <property name="adminService" ref="adminService" />
-            </action>
-            <completers>
-                <ref component-id="instanceCompleter" />
-                <null />
-            </completers>
-        </command>
-        <command name="admin/clone">
-            <action class="org.apache.karaf.admin.command.CloneCommand">
-                <property name="adminService" ref="adminService" />
-            </action>
-            <completers>
-                <ref component-id="instanceCompleter" />
-                <null />
-            </completers>
-        </command>
-        <command name="admin/change-ssh-port">
-            <action class="org.apache.karaf.admin.command.ChangeSshPortCommand">
-                <property name="adminService" ref="adminService" />
-            </action>
-            <completers>
-                <ref component-id="instanceCompleter" />
-                <null/>
-            </completers>
-        </command>
-        <command name="admin/change-rmi-registry-port">
-            <action class="org.apache.karaf.admin.command.ChangeRmiRegistryPortCommand">
-                <property name="adminService" ref="adminService" />
-            </action>
-            <completers>
-                <ref component-id="instanceCompleter" />
-                <null />
-            </completers>
-        </command>
-        <command name="admin/change-rmi-server-port">
-            <action class="org.apache.karaf.admin.command.ChangeRmiServerPortCommand">
-                <property name="adminService" ref="adminService" />
-            </action>
-            <completers>
-                <ref component-id="instanceCompleter" />
-                <null />
-            </completers>
-        </command>
-        <command name="admin/change-opts">
-            <action class="org.apache.karaf.admin.command.ChangeOptsCommand">
-                <property name="adminService" ref="adminService" />
-            </action>
-            <completers>
-                <ref component-id="instanceCompleter" />
-                <null/>
-            </completers>
-        </command>
-    </command-bundle>
-
-    <reference id="adminService" interface="org.apache.karaf.admin.AdminService" />
-    <reference id="featuresService" interface="org.apache.karaf.features.FeaturesService" />
-
-    <bean id="instanceCompleter" class="org.apache.karaf.admin.command.completers.InstanceCompleter">
-        <property name="adminService" ref="adminService" />
-    </bean>
-
-    <bean id="allFeatureCompleter" class="org.apache.karaf.features.command.completers.AllFeatureCompleter">
-        <property name="featuresService" ref="featuresService" />
-    </bean>
-
-    <bean id="featureUrlCompleter" class="org.apache.karaf.features.command.completers.FeatureRepositoryCompleter">
-        <property name="featuresService" ref="featuresService" />
-    </bean>
-
-</blueprint>
diff --git a/karaf-2.3.x/admin/command/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/admin/command/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index bedc2e0..0000000
--- a/karaf-2.3.x/admin/command/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,26 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle contains all Karaf shell commands related to the admin feature.
-
-    The following commands are available:
-    \u001B[36madmin:create\u001B[0m Creates a new container instance.
-    \u001B[36madmin:connect\u001B[0m Connects to an existing container instance.
-    \u001B[36madmin:list\u001B[0m Lists all existing container instances.
-    \u001B[36madmin:start\u001B[0m Starts an existing container instance.
-    \u001B[36madmin:stop\u001B[0m Stops an existing container instance.
-    \u001B[36madmin:destroy\u001B[0m Destroys an existing container instance.
-    \u001B[36madmin:rename\u001B[0m Renames an existing container instance.
-    \u001B[36madmin:change-ssh-port\u001B[0m Changes the secure shell port of an existing container instance.
-    \u001B[36madmin:change-rmi-registry-port\u001B[0m Changes the RMI registry port (used by management layer) of an existing container instance.
-    \u001B[36madmin:change-rmi-server-port\u001B[0m Changes the RMI server port (used by management layer) of an existing container instance.
-    \u001B[36madmin:change-opts\u001B[0m Changes the java options of an existing container instance.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[31mCommands\u001B[0m section of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/admin/command/src/test/java/org/apache/karaf/admin/command/CreateCommandTest.java b/karaf-2.3.x/admin/command/src/test/java/org/apache/karaf/admin/command/CreateCommandTest.java
deleted file mode 100644
index 23fa60a..0000000
--- a/karaf-2.3.x/admin/command/src/test/java/org/apache/karaf/admin/command/CreateCommandTest.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.command;
-
-import java.util.Arrays;
-import java.util.Collections;
-
-import junit.framework.TestCase;
-
-import org.apache.karaf.admin.AdminService;
-import org.apache.karaf.admin.InstanceSettings;
-import org.easymock.EasyMock;
-
-public class CreateCommandTest extends TestCase {
-    public void testCreateCommandExecute() throws Exception {
-        AdminService adminService = EasyMock.createMock(AdminService.class);
-        EasyMock.replay(adminService);
-        
-        CreateCommand cc = new CreateCommand();
-        cc.setAdminService(adminService);
-        cc.sshPort = 9941;
-        cc.rmiRegistryPort = 1122;
-        cc.rmiServerPort = 44444;
-        cc.location = "top";
-        cc.javaOpts = "foo";
-        cc.features = Arrays.asList("abc", "def");
-        cc.featureURLs = Collections.singletonList("http://something");
-        cc.instance = "myInstance";
-        
-        EasyMock.verify(adminService); // check precondition
-        EasyMock.reset(adminService);
-        InstanceSettings expectedIS =
-            new InstanceSettings(9941, 1122, 44444, "top", "foo", Collections.singletonList("http://something"), Arrays.asList("abc", "def"));
-        EasyMock.expect(adminService.createInstance("myInstance", expectedIS)).andReturn(null);
-        EasyMock.replay(adminService);
-        
-        cc.doExecute();
-        EasyMock.verify(adminService);
-    }
-}
diff --git a/karaf-2.3.x/admin/command/src/test/java/org/apache/karaf/admin/main/ExecuteTest.java b/karaf-2.3.x/admin/command/src/test/java/org/apache/karaf/admin/main/ExecuteTest.java
deleted file mode 100644
index 92cf9aa..0000000
--- a/karaf-2.3.x/admin/command/src/test/java/org/apache/karaf/admin/main/ExecuteTest.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.main;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.PrintStream;
-import java.io.IOException;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-
-import junit.framework.TestCase;
-
-import org.apache.karaf.admin.AdminService;
-import org.apache.karaf.admin.command.AdminCommandSupport;
-import org.apache.karaf.admin.internal.AdminServiceImpl;
-import org.easymock.IAnswer;
-import org.easymock.classextension.EasyMock;
-
-public class ExecuteTest extends TestCase {
-    private String userDir;
-    
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        Execute.exitAllowed = false;
-        userDir = System.getProperty("user.dir");
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        super.tearDown();
-        Execute.exitAllowed = true;
-        System.setProperty("user.dir", userDir);
-    }
-
-    public void testListCommands() throws Exception {
-        PrintStream oldOut = System.out;
-        
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        PrintStream capturedOut = new PrintStream(baos); 
-        System.setOut(capturedOut);
-
-        try {
-            Execute.main(new String [] {});            
-        } catch (RuntimeException re) {
-            assertEquals("0", re.getMessage());
-
-            String s = new String(baos.toByteArray());            
-            assertTrue(s.contains("list"));
-            assertTrue(s.contains("create"));
-            assertTrue(s.contains("destroy"));
-        } finally {
-            System.setOut(oldOut);
-        }
-    }
-    
-    public void testNonexistingCommand() throws Exception {
-        try {
-            Execute.main(new String [] {"bheuaark"});
-        } catch (RuntimeException re) {
-            assertEquals("-1", re.getMessage());
-        }
-    }
-    
-    public void testNoStorageFile() throws Exception {
-        PrintStream oldErr = System.err;
-        
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        PrintStream capturedErr = new PrintStream(baos); 
-        System.setErr(capturedErr);
-
-        try {
-            Execute.main(new String [] {"create"});            
-        } catch (RuntimeException re) {
-            assertEquals("-1", re.getMessage());
-            
-            String s = new String(baos.toByteArray());            
-            assertTrue(s.contains("karaf.instances"));
-            assertTrue(s.contains("instance.properties"));
-        } finally {
-            System.setErr(oldErr);
-        } 
-    }
-    
-    public void testSetDir() throws Exception {
-        Properties oldProps = (Properties) System.getProperties().clone();
-        final File tempFile = createTempDir(getName());
-        assertFalse("Precondition failed", 
-            tempFile.getParentFile().getParentFile().getCanonicalPath().equals(System.getProperty("user.dir")));
-
-        System.setProperty("karaf.instances", tempFile.getCanonicalPath());
-        try {
-            Execute.main(new String [] {"list"});            
-            assertTrue(tempFile.getParentFile().getParentFile().getCanonicalPath().equals(System.getProperty("user.dir")));
-        } finally {
-            System.setProperties(oldProps);
-            assertNull("Postcondition failed", System.getProperty("karaf.instances"));
-            delete(tempFile);
-        }        
-    }
-    
-    public void testExecute() throws Exception {
-        final File tempFile = createTempDir(getName());
-        Properties p = new Properties();
-        p.setProperty("ssh.port", "1302");
-        p.setProperty("rmi.registry.port", "1122");
-        p.setProperty("rmi.server.port", "44444");
-        FileOutputStream fos = new FileOutputStream(new File(tempFile, AdminServiceImpl.STORAGE_FILE));
-        p.store(fos, "");
-        fos.close();
-
-        final List<AdminServiceImpl> admins = new ArrayList<AdminServiceImpl>();
-        try {
-            AdminCommandSupport mockCommand = EasyMock.createStrictMock(AdminCommandSupport.class);
-            mockCommand.setAdminService((AdminService) EasyMock.anyObject());
-            EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
-                public Object answer() throws Throwable {
-                    AdminServiceImpl svc = (AdminServiceImpl) EasyMock.getCurrentArguments()[0];
-                    assertEquals(tempFile, svc.getStorageLocation());
-                    admins.add(svc);
-                    return null;
-                }
-            });
-            
-            EasyMock.expect(mockCommand.execute(null)).andAnswer(new IAnswer<Object>() {
-                public Object answer() throws Throwable {
-                    // The Admin Service should be initialized at this point.
-                    // One way to find this out is by reading out the port number
-                    AdminServiceImpl admin = admins.get(0);
-                    Field sshField = AdminServiceImpl.class.getDeclaredField("defaultSshPortStart");
-                    sshField.setAccessible(true);
-                    assertEquals(1302, sshField.get(admin));
-                    Field rmiRegistryField = AdminServiceImpl.class.getDeclaredField("defaultRmiRegistryPortStart");
-                    rmiRegistryField.setAccessible(true);
-                    assertEquals(1122, rmiRegistryField.get(admin));
-                    Field rmiServerField = AdminServiceImpl.class.getDeclaredField("defaultRmiServerPortStart");
-                    rmiServerField.setAccessible(true);
-                    assertEquals(44444, rmiServerField.get(admin));
-                    return null;
-                }
-            });
-            EasyMock.replay(mockCommand);            
-            
-            Execute.execute(mockCommand, tempFile, new String [] {"test"});
-            
-            EasyMock.verify(mockCommand);
-        } finally {
-            delete(tempFile);
-        }
-    }
-
-    private static File createTempDir(String name) throws IOException {
-        final File tempFile = File.createTempFile(name, null);
-        tempFile.delete();
-        tempFile.mkdirs();
-        return tempFile.getCanonicalFile();
-    }
-
-    private static void delete(File tmp) {
-        if (tmp.isDirectory()) {
-            for (File f : tmp.listFiles()) {
-                delete(f);
-            }
-        }
-        tmp.delete();
-    }
-}
diff --git a/karaf-2.3.x/admin/core/NOTICE b/karaf-2.3.x/admin/core/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/admin/core/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/admin/core/pom.xml b/karaf-2.3.x/admin/core/pom.xml
deleted file mode 100644
index 5b42f6a..0000000
--- a/karaf-2.3.x/admin/core/pom.xml
+++ /dev/null
@@ -1,200 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.admin</groupId>
-        <artifactId>admin</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.admin.core</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Admin :: Core</name>
-    <description>Core implementation of the admin feature to manipulate Karaf child instances.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.bundlerepository</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.obr</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.osgi</groupId>
-            <artifactId>spring-osgi-core</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicemix.bundles</groupId>
-            <artifactId>org.apache.servicemix.bundles.junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymock</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-jdk14</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>copy-config-properties</id>
-                        <!-- here the phase you need -->
-                        <phase>compile</phase>
-                        <goals>
-                            <goal>copy-resources</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>${basedir}/target/classes/org/apache/karaf/admin/etc</outputDirectory>
-                            <resources>
-                                <resource>
-                                    <directory>../../assemblies/apache-karaf/src/main/distribution/text/etc/</directory>
-                                    <includes>
-                                        <include>*.properties</include>
-                                        <include>*.cfg</include>
-                                        <include>authorized_keys</include>
-                                    </includes>
-                                    <excludes>
-                                        <exclude>org.apache.karaf.shell.cfg</exclude>
-                                        <exclude>org.apache.karaf.management.cfg</exclude>
-                                        <exclude>system.properties</exclude>
-                                    </excludes>
-                                </resource>
-                            </resources>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>copy-filtered</id>
-                        <!-- here the phase you need -->
-                        <phase>compile</phase>
-                        <goals>
-                            <goal>copy-resources</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>${basedir}/target/classes/org/apache/karaf/admin/etc</outputDirectory>
-                            <resources>
-                                <resource>
-                                    <directory>../../assemblies/apache-karaf/src/main/filtered-resources/etc</directory>
-                                    <filtering>true</filtering>
-                                    <includes>
-                                        <include>*.properties</include>
-                                        <include>*.cfg</include>
-                                    </includes>
-                                </resource>
-                            </resources>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                            org.apache.karaf.admin;version=${project.version},
-                            org.apache.karaf.jpm;version=${project.version}
-                        </Export-Package>
-                        <Import-Package>
-                            !org.apache.karaf.admin,
-                            javax.management,
-                            javax.management.loading,
-                            org.apache.felix.service.command,
-                            org.apache.felix.gogo.commands,
-                            org.apache.karaf.shell.console,
-                            *
-                        </Import-Package>
-                        <Private-Package>
-                            org.apache.karaf.admin.bin,
-                            org.apache.karaf.admin.etc,
-                            org.apache.karaf.admin.internal,
-                            org.apache.karaf.jpm.impl,
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <configuration>
-                  <excludes>
-                    <!-- this is not a unit test but an application used for testing -->
-                    <exclude>**/MainTest.java</exclude>
-                  </excludes>
-                </configuration>
-           </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/admin/AdminService.java b/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/admin/AdminService.java
deleted file mode 100644
index 6c756fa..0000000
--- a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/admin/AdminService.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin;
-
-public interface AdminService {
-
-    Instance createInstance(String name, InstanceSettings settings) throws Exception;
-
-    void renameInstance(String name, String newName) throws Exception;
-    
-    void refreshInstance() throws Exception;
-
-    Instance cloneInstance(String name, String cloneName, InstanceSettings settings) throws Exception;
-
-    Instance[] getInstances();
-
-    Instance getInstance(String name);    
-}
diff --git a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/admin/Instance.java b/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/admin/Instance.java
deleted file mode 100644
index ed2c00a..0000000
--- a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/admin/Instance.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin;
-
-public interface Instance {
-
-    String STOPPED = "Stopped";
-    String STARTING = "Starting";
-    String STARTED = "Started";
-    String ERROR = "Error";
-
-    String getName();
-
-    void setName(String name);
-    
-    boolean isRoot();
-
-    String getLocation();
-
-    void setLocation(String location);
-
-    int getPid();
-
-    int getSshPort();
-
-    void changeSshPort(int port) throws Exception;
-
-    int getRmiRegistryPort();
-
-    void changeRmiRegistryPort(int port) throws Exception;
-
-    int getRmiServerPort();
-
-    void changeRmiServerPort(int port) throws Exception;
-
-    String getJavaOpts();
-
-    void changeJavaOpts(String javaOpts) throws Exception;
-
-    void start(String javaOpts) throws Exception;
-
-    void stop() throws Exception;
-
-    void destroy() throws Exception;
-
-    String getState() throws Exception;
-    
-    boolean isAttached();
-
-}
diff --git a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/admin/InstanceSettings.java b/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/admin/InstanceSettings.java
deleted file mode 100644
index 9b068cf..0000000
--- a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/admin/InstanceSettings.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin;
-
-import java.util.List;
-
-public class InstanceSettings {
-    private final int sshPort;
-    private final int rmiRegistryPort;
-    private final int rmiServerPort;
-    private final String location;
-    private final String javaOpts;
-    private final List<String> featureURLs;
-    private final List<String> features;
-
-    public InstanceSettings(int sshPort, int rmiRegistryPort, int rmiServerPort, String location, String javaOpts, List<String> featureURLs, List<String> features) {
-        this.sshPort = sshPort;
-        this.rmiRegistryPort = rmiRegistryPort;
-        this.rmiServerPort = rmiServerPort;
-        this.location = location;
-        this.javaOpts = javaOpts;
-        this.featureURLs = featureURLs;
-        this.features = features;
-    }
-
-    public int getSshPort() {
-        return sshPort;
-    }
-
-    public int getRmiRegistryPort() {
-        return rmiRegistryPort;
-    }
-
-    public int getRmiServerPort() {
-        return rmiServerPort;
-    }
-
-    public String getLocation() {
-        return location;
-    }
-
-    public String getJavaOpts() {
-        return javaOpts;
-    }
-
-    public List<String> getFeatureURLs() {
-        return featureURLs;
-    }
-
-    public List<String> getFeatures() {
-        return features;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (o == this) {
-            return true;
-        }
-        if (!(o instanceof InstanceSettings)) {
-            return false;
-        }
-        InstanceSettings is = (InstanceSettings) o;
-        return is.sshPort == sshPort &&
-               is.rmiRegistryPort == rmiRegistryPort &&
-               is.rmiServerPort == rmiServerPort &&
-               (location == null ? is.location == null : location.equals(is.location)) &&
-               (javaOpts == null ? is.javaOpts == null : javaOpts.equals(is.javaOpts)) &&
-               (featureURLs == null ? is.featureURLs == null : featureURLs.equals(is.featureURLs)) &&
-               (features == null ? is.features == null : features.equals(is.features));
-    }
-
-    @Override
-    public int hashCode() {
-        int result = sshPort + rmiRegistryPort + rmiServerPort;
-        result = 31 * result + (location != null ? location.hashCode() : 0);
-        result = 31 * result + (javaOpts != null ? javaOpts.hashCode() : 0);
-        result = 31 * result + (featureURLs != null ? featureURLs.hashCode() : 0);
-        result = 31 * result + (features != null ? features.hashCode() : 0);
-        return result;
-    }
-}
diff --git a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/admin/internal/AdminServiceImpl.java b/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/admin/internal/AdminServiceImpl.java
deleted file mode 100644
index e4e10db..0000000
--- a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/admin/internal/AdminServiceImpl.java
+++ /dev/null
@@ -1,598 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.internal;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PrintStream;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Scanner;
-
-import org.apache.karaf.admin.AdminService;
-import org.apache.karaf.admin.Instance;
-import org.apache.karaf.admin.InstanceSettings;
-import org.fusesource.jansi.Ansi;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class AdminServiceImpl implements AdminService {
-
-    public static final String STORAGE_FILE = "instance.properties";
-    public static final String BACKUP_EXTENSION = ".bak";
-    private static final String FEATURES_CFG = "etc/org.apache.karaf.features.cfg";
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(AdminServiceImpl.class);
-
-    private Map<String, Instance> instances = new HashMap<String, Instance>();
-
-    private int defaultSshPortStart = 8101;
-
-    private int defaultRmiRegistryPortStart = 1099;
-
-    private int defaultRmiServerPortStart = 44444;
-
-    private File storageLocation;
-
-    private long stopTimeout = 30000;
-
-    public File getStorageLocation() {
-        return storageLocation;
-    }
-
-    public void setStorageLocation(File storage) {
-        this.storageLocation = storage;
-    }
-
-    public long getStopTimeout() {
-        return stopTimeout;
-    }
-
-    public void setStopTimeout(long stopTimeout) {
-        this.stopTimeout = stopTimeout;
-    }
-
-    private Properties loadStorage(File location) throws IOException {
-        InputStream is = null;
-        try {
-            is = new FileInputStream(location);
-            Properties props = new Properties();
-            props.load(is);
-            return props;
-        } finally {
-            if (is != null) {
-                is.close();
-            }
-        }
-    }
-
-    private void saveStorage(Properties props, File location, String comment) throws IOException {
-        OutputStream os = null;
-        try {
-            os = new FileOutputStream(location);
-            props.store(os, comment);
-        } finally {
-            if (os != null) {
-                os.close();
-            }
-        }
-    }
-
-    public synchronized void init() throws Exception {
-        try {
-            File storageFile = new File(storageLocation, STORAGE_FILE);
-            if (!storageFile.isFile()) {
-                if (storageFile.exists()) {
-                    LOGGER.error("Instances storage location should be a file: " + storageFile);
-                }
-                return;
-            }
-            Properties storage = loadStorage(storageFile);
-            int count = Integer.parseInt(storage.getProperty("count", "0"));
-            defaultSshPortStart = Integer.parseInt(storage.getProperty("ssh.port", Integer.toString(defaultSshPortStart)));
-            defaultRmiRegistryPortStart = Integer.parseInt(storage.getProperty("rmi.registry.port", Integer.toString(defaultRmiRegistryPortStart)));
-            defaultRmiServerPortStart = Integer.parseInt(storage.getProperty("rmi.server.port", Integer.toString(defaultRmiServerPortStart)));
-            Map<String, Instance> newInstances = new HashMap<String, Instance>();
-            for (int i = 0; i < count; i++) {
-                String name = storage.getProperty("item." + i + ".name", null);
-                String loc = storage.getProperty("item." + i + ".loc", null);
-                String opts = storage.getProperty("item." + i + ".opts", null);
-                int pid = Integer.parseInt(storage.getProperty("item." + i + ".pid", "0"));
-                boolean root = Boolean.parseBoolean(storage.getProperty("item." + i + ".root", "false"));
-                if (name != null) {
-                    InstanceImpl instance = new InstanceImpl(this, name, loc, opts, root);
-                    if (pid > 0) {
-                        try {
-                            instance.attach(pid);
-                        } catch (IOException e) {
-                            // Ignore
-                        }
-                    }
-                    newInstances.put(name, instance);
-                }
-            }
-            instances = newInstances;
-        } catch (Exception e) {
-            LOGGER.warn("Unable to reload Karaf instance list", e);
-        }
-    }
-    
-    
-    public synchronized void refreshInstance() throws Exception {
-        try {
-            init();
-            File storageFile = new File(storageLocation, STORAGE_FILE);
-            if (!storageFile.isFile()) {
-                if (storageFile.exists()) {
-                    LOGGER.error("Instances storage location should be a file: " + storageFile);
-                }
-                return;
-            }
-            Properties storage = loadStorage(storageFile);
-            int count = Integer.parseInt(storage.getProperty("count", "0"));
-            for (int i = 0; i < count; i++) {
-                String name = storage.getProperty("item." + i + ".name", null);
-                int pid = Integer.parseInt(storage.getProperty("item." + i + ".pid", "0"));
-                if (name != null) {
-                    InstanceImpl instance = (InstanceImpl)instances.get(name);
-                    if (pid > 0 && instance != null && !instance.isAttached()) {
-                        try {
-                            instance.attach(pid);
-                        } catch (IOException e) {
-                            // Ignore
-                        }
-                    }
-                }
-            }
-        } catch (Exception e) {
-            LOGGER.warn("Unable to reload Karaf instance list", e);
-        }
-    }
-
-    public synchronized Instance createInstance(String name, InstanceSettings settings) throws Exception {
-        try {
-            init();
-        } catch (Exception e) {
-            LOGGER.warn("Unable to reload Karaf instance list", e);
-        }
-        if (instances.get(name) != null) {
-            throw new IllegalArgumentException("Instance '" + name + "' already exists");
-        }
-        String loc = settings.getLocation() != null ? settings.getLocation() : name;
-        File karafBase = new File(loc);
-        if (!karafBase.isAbsolute()) {
-            karafBase = new File(storageLocation, loc);
-        }
-        int sshPort = settings.getSshPort();
-        if (sshPort <= 0) {
-            sshPort = ++defaultSshPortStart;
-        }
-        int rmiRegistryPort = settings.getRmiRegistryPort();
-        if (rmiRegistryPort <= 0) {
-            rmiRegistryPort = ++defaultRmiRegistryPortStart;
-        }
-        int rmiServerPort = settings.getRmiServerPort();
-        if (rmiServerPort <= 0) {
-            rmiServerPort = ++defaultRmiServerPortStart;
-        }
-        println(Ansi.ansi().a("Creating new instance on SSH port ").a(sshPort).a(" and RMI ports ").a(rmiRegistryPort).a("/").a(rmiServerPort).a(" at: ").a(Ansi.Attribute.INTENSITY_BOLD).a(karafBase).a(Ansi.Attribute.RESET).toString());
-
-        mkdir(karafBase, "bin");
-        mkdir(karafBase, "etc");
-        mkdir(karafBase, "system");
-        mkdir(karafBase, "deploy");
-        mkdir(karafBase, "data");
-
-        copyResourceToDir(karafBase, "etc/config.properties", true);
-        copyResourceToDir(karafBase, "etc/jre.properties", true);
-        copyResourceToDir(karafBase, "etc/custom.properties", true);
-        copyResourceToDir(karafBase, "etc/java.util.logging.properties", true);
-        copyResourceToDir(karafBase, "etc/org.apache.felix.fileinstall-deploy.cfg", true);
-        copyResourceToDir(karafBase, "etc/org.apache.karaf.log.cfg", true);
-        copyResourceToDir(karafBase, FEATURES_CFG, true);
-        copyResourceToDir(karafBase, "etc/org.ops4j.pax.logging.cfg", true);
-        copyResourceToDir(karafBase, "etc/org.ops4j.pax.url.mvn.cfg", true);
-        copyResourceToDir(karafBase, "etc/startup.properties", true);
-        copyResourceToDir(karafBase, "etc/users.properties", true);
-        copyResourceToDir(karafBase, "etc/keys.properties", true);
-
-        HashMap<String, String> props = new HashMap<String, String>();
-        props.put("${SUBST-KARAF-NAME}", name);
-        props.put("${SUBST-KARAF-HOME}", System.getProperty("karaf.home"));
-        props.put("${SUBST-KARAF-BASE}", karafBase.getPath());
-        props.put("${SUBST-SSH-PORT}", Integer.toString(sshPort));
-        props.put("${SUBST-RMI-REGISTRY-PORT}", Integer.toString(rmiRegistryPort));
-        props.put("${SUBST-RMI-SERVER-PORT}", Integer.toString(rmiServerPort));
-        copyFilteredResourceToDir(karafBase, "etc/system.properties", props);
-        copyFilteredResourceToDir(karafBase, "etc/org.apache.karaf.shell.cfg", props);
-        copyFilteredResourceToDir(karafBase, "etc/org.apache.karaf.management.cfg", props);
-        // If we use batch files, use batch files, else use bash scripts (even on cygwin)
-        boolean windows = System.getProperty("os.name").startsWith("Win");
-        boolean cygwin = windows && new File( System.getProperty("karaf.home"), "bin/admin" ).exists();
-        if( windows && !cygwin ) {
-            copyFilteredResourceToDir(karafBase, "bin/karaf.bat", props);
-            copyFilteredResourceToDir(karafBase, "bin/start.bat", props);
-            copyFilteredResourceToDir(karafBase, "bin/stop.bat", props);
-        } else {
-            copyFilteredResourceToDir(karafBase, "bin/karaf", props);
-            copyFilteredResourceToDir(karafBase, "bin/start", props);
-            copyFilteredResourceToDir(karafBase, "bin/stop", props);
-            if ( !cygwin ) {
-                chmod(new File(karafBase, "bin/karaf"), "a+x");
-                chmod(new File(karafBase, "bin/start"), "a+x");
-                chmod(new File(karafBase, "bin/stop"), "a+x");
-            }
-        }
-        
-        handleFeatures(new File(karafBase, FEATURES_CFG), settings);
-
-        String javaOpts = settings.getJavaOpts();
-        if (javaOpts == null || javaOpts.length() == 0) {
-            javaOpts = "-server -Xmx512M -Dcom.sun.management.jmxremote";
-        }
-        Instance instance = new InstanceImpl(this, name, karafBase.toString(), settings.getJavaOpts());
-        instances.put(name, instance);
-        saveState();
-        return instance;
-    }
-
-    void handleFeatures(File featuresCfg, InstanceSettings settings) throws IOException {
-        Properties p = loadStorage(featuresCfg);
-
-        appendToPropList(p, "featuresBoot", settings.getFeatures());
-        appendToPropList(p, "featuresRepositories", settings.getFeatureURLs());
-        saveStorage(p, featuresCfg, "Features Configuration");
-    }
-
-    private void appendToPropList(Properties p, String key, List<String> elements) {
-        if (elements == null) {
-            return;
-        }
-        StringBuilder sb = new StringBuilder(p.getProperty(key).trim());
-        for (String f : elements) {
-            if (sb.length() > 0) {
-                sb.append(',');
-            }
-            sb.append(f);
-        }
-        p.setProperty(key, sb.toString());
-    }
-    
-    public synchronized Instance[] getInstances() {
-        return instances.values().toArray(new Instance[0]);
-    }
-
-    public synchronized Instance getInstance(String name) {
-        try {
-            init();
-        } catch (Exception e) {
-            LOGGER.warn("Unable to reload Karaf instance list", e);
-        }
-        return instances.get(name);
-    }
-
-    synchronized void forget(String name) {
-        instances.remove(name);
-    }
-
-    public synchronized void renameInstance(String oldName, String newName) throws Exception {
-        try {
-            init();
-        } catch (Exception e) {
-            LOGGER.warn("Unable to reload Karaf instance list", e);
-        }
-        if (instances.get(newName) != null) {
-            throw new IllegalArgumentException("Instance " + newName + " already exists");
-        }
-        Instance instance = instances.get(oldName);
-        if (instance == null) {
-            throw new IllegalArgumentException("Instance " + oldName + " not found");
-        }
-        if (instance.isRoot()) {
-            throw new IllegalArgumentException("Root instance cannot be renamed");
-        }
-        if (instance.getPid() != 0) {
-            throw new IllegalStateException("Instance not stopped");
-        }
-
-        println(Ansi.ansi().a("Renaming instance ")
-                .a(Ansi.Attribute.INTENSITY_BOLD).a(oldName).a(Ansi.Attribute.RESET)
-                .a(" to ")
-                .a(Ansi.Attribute.INTENSITY_BOLD).a(newName).a(Ansi.Attribute.RESET).toString());
-        // remove the old instance
-        instances.remove(oldName);
-        // update instance
-        instance.setName(newName);
-        // rename directory
-        String oldLocationPath = instance.getLocation();
-        File oldLocation = new File(oldLocationPath);
-        String basedir = oldLocation.getParent();
-        File newLocation = new File(basedir, newName);
-        oldLocation.renameTo(newLocation);
-        // update the instance location
-        instance.setLocation(newLocation.getPath());
-        // create the properties map including the instance name and instance location
-        HashMap<String, String> props = new HashMap<String, String>();
-        props.put(oldName, newName);
-        props.put(oldLocationPath, newLocation.getPath());
-        // replace all references to the "old" name by the new one in etc/system.properties
-        // NB: it's replacement to avoid to override the user's changes
-        filterResource(newLocation, "etc/system.properties", props);
-        // replace all references to the "old" name by the new one in bin/karaf
-        filterResource(newLocation, "bin/karaf", props);
-        filterResource(newLocation, "bin/start", props);
-        filterResource(newLocation, "bin/stop", props);
-        filterResource(newLocation, "bin/karaf.bat", props);
-        filterResource(newLocation, "bin/start.bat", props);
-        filterResource(newLocation, "bin/stop.bat", props);
-        // add the renamed instances
-        instances.put(newName, instance);
-        // save instance definition in the instances.properties
-        saveState();
-    }
-
-    public synchronized Instance cloneInstance(String name, String cloneName, InstanceSettings settings) throws Exception {
-        try {
-            init();
-        } catch (Exception e) {
-            LOGGER.warn("Unable to reload Karaf instance list", e);
-        }
-        if (instances.get(cloneName) != null) {
-            throw new IllegalArgumentException("Instance " + cloneName + " already exists");
-        }
-        Instance instance = instances.get(name);
-        if (instance == null) {
-            throw new IllegalArgumentException("Instance " + name + " not found");
-        }
-
-        // define the clone instance location
-        String cloneLocationPath = settings.getLocation() != null ? settings.getLocation() : cloneName;
-        File cloneLocation = new File(cloneLocationPath);
-        if (!cloneLocation.isAbsolute()) {
-            cloneLocation = new File(storageLocation, cloneLocationPath);
-        }
-        // copy instance directory
-        String locationPath = instance.getLocation();
-        File location = new File(locationPath);
-        copy(location, cloneLocation);
-        // create the properties map including the instance name, location, ssh and rmi port numbers
-        HashMap<String, String> props = new HashMap<String, String>();
-        props.put(name, cloneName);
-        props.put(locationPath, cloneLocationPath);
-        if (settings.getSshPort() > 0)
-            props.put(new Integer(instance.getSshPort()).toString(), new Integer(settings.getSshPort()).toString());
-        if (settings.getRmiRegistryPort() > 0)
-            props.put(new Integer(instance.getRmiRegistryPort()).toString(), new Integer(settings.getRmiRegistryPort()).toString());
-        if (settings.getRmiServerPort() > 0)
-            props.put(new Integer(instance.getRmiServerPort()).toString(), new Integer(settings.getRmiServerPort()).toString());
-        // filtering clone files
-        filterResource(cloneLocation, "etc/custom.properties", props);
-        filterResource(cloneLocation, "etc/org.apache.karaf.management.cfg", props);
-        filterResource(cloneLocation, "etc/org.apache.karaf.shell.cfg", props);
-        filterResource(cloneLocation, "etc/org.ops4j.pax.logging.cfg", props);
-        filterResource(cloneLocation, "etc/system.properties", props);
-        filterResource(cloneLocation, "bin/karaf", props);
-        filterResource(cloneLocation, "bin/start", props);
-        filterResource(cloneLocation, "bin/stop", props);
-        filterResource(cloneLocation, "bin/karaf.bat", props);
-        filterResource(cloneLocation, "bin/start.bat", props);
-        filterResource(cloneLocation, "bin/stop.bat", props);
-        // create and add the clone instance in the registry
-        String javaOpts = settings.getJavaOpts();
-        if (javaOpts == null || javaOpts.length() == 0) {
-            javaOpts = "-server -Xmx512M -Dcom.sun.management.jmxremote";
-        }
-        Instance cloneInstance = new InstanceImpl(this, cloneName, cloneLocation.toString(), settings.getJavaOpts());
-        instances.put(cloneName, cloneInstance);
-        saveState();
-        return cloneInstance;
-    }
-
-    synchronized void saveState() throws IOException {
-        Properties storage = new Properties();
-        Instance[] data = getInstances();
-        storage.setProperty("ssh.port", Integer.toString(defaultSshPortStart));
-        storage.setProperty("rmi.registry.port", Integer.toString(defaultRmiRegistryPortStart));
-        storage.setProperty("rmi.server.port", Integer.toString(defaultRmiServerPortStart));
-        storage.setProperty("count", Integer.toString(data.length));
-        for (int i = 0; i < data.length; i++) {
-            storage.setProperty("item." + i + ".name", data[i].getName());
-            storage.setProperty("item." + i + ".root", data[i].isRoot() + "");
-            storage.setProperty("item." + i + ".loc", data[i].getLocation());
-            storage.setProperty("item." + i + ".pid", Integer.toString(data[i].getPid()));
-            storage.setProperty("item." + i + ".opts", data[i].getJavaOpts() != null ? data[i].getJavaOpts() : "");
-        }
-        saveStorage(storage, new File(storageLocation, STORAGE_FILE), "Admin Service storage");
-    }
-    
-    private void copyResourceToDir(File target, String resource, boolean text) throws Exception {
-        File outFile = new File(target, resource);
-        if( !outFile.exists() ) {
-            println(Ansi.ansi().a("Creating file: ").a(Ansi.Attribute.INTENSITY_BOLD).a(outFile.getPath()).a(Ansi.Attribute.RESET).toString());
-            InputStream is = getClass().getClassLoader().getResourceAsStream("org/apache/karaf/admin/" + resource);
-            try {
-                if( text ) {
-                    // Read it line at a time so that we can use the platform line ending when we write it out.
-                    PrintStream out = new PrintStream(new FileOutputStream(outFile));
-                    try {
-                        Scanner scanner = new Scanner(is);
-                        while (scanner.hasNextLine() ) {
-                            String line = scanner.nextLine();
-                            out.println(line);
-                        }
-                    } finally {
-                        safeClose(out);
-                    }
-                } else {
-                    // Binary so just write it out the way it came in.
-                    FileOutputStream out = new FileOutputStream(new File(target, resource));
-                    try {
-                        int c=0;
-                        while((c=is.read())>=0) {
-                            out.write(c);
-                        }
-                    } finally {
-                        safeClose(out);
-                    }
-                }
-            } finally {
-                safeClose(is);
-            }
-        }
-    }
-
-    private void println(String st) {
-        System.out.println(st);
-    }
-
-    private void filterResource(File basedir, String path, HashMap<String, String> props) throws Exception {
-        File file = new File(basedir, path);
-        File bak = new File(basedir, path + BACKUP_EXTENSION);
-        if (!file.exists()) {
-            return;
-        }
-        // rename the file to the backup one
-        file.renameTo(bak);
-        // copy and filter the bak file back to the original name
-        copyAndFilterResource(new FileInputStream(bak), new FileOutputStream(file), props);
-        // remove the bak file
-        bak.delete();
-    }
-
-    private void copyFilteredResourceToDir(File target, String resource, HashMap<String, String> props) throws Exception {
-        File outFile = new File(target, resource);
-        if( !outFile.exists() ) {
-            println(Ansi.ansi().a("Creating file: ").a(Ansi.Attribute.INTENSITY_BOLD).a(outFile.getPath()).a(Ansi.Attribute.RESET).toString());
-            InputStream is = getClass().getClassLoader().getResourceAsStream("org/apache/karaf/admin/" + resource);
-            copyAndFilterResource(is, new FileOutputStream(outFile), props);
-        }
-    }
-
-    private void copyAndFilterResource(InputStream source, OutputStream target, HashMap<String, String> props) throws Exception {
-        try {
-            // read it line at a time so that we can use the platform line ending when we write it out.
-            PrintStream out = new PrintStream(target);
-            try {
-                Scanner scanner = new Scanner(source);
-                while (scanner.hasNextLine()) {
-                    String line = scanner.nextLine();
-                    line = filter(line, props);
-                    out.println(line);
-                }
-            } finally {
-                safeClose(out);
-            }
-        } finally {
-            safeClose(source);
-        }
-    }
-
-    private void safeClose(InputStream is) throws IOException {
-        if (is == null) {
-            return;
-        }
-        try {
-            is.close();
-        } catch (Throwable ignore) {
-        }
-    }
-
-    private void safeClose(OutputStream is) throws IOException {
-        if (is == null) {
-            return;
-        }
-        try {
-            is.close();
-        } catch (Throwable ignore) {
-        }
-    }
-
-    private String filter(String line, HashMap<String, String> props) {
-        for (Map.Entry<String, String> i : props.entrySet()) {
-            int p1 = line.indexOf(i.getKey());
-            if( p1 >= 0 ) {
-                String l1 = line.substring(0, p1);
-                String l2 = line.substring(p1+i.getKey().length());
-                line = l1+i.getValue()+l2;
-            }
-        }
-        return line;
-    }
-
-    private void mkdir(File karafBase, String path) {
-        File file = new File(karafBase, path);
-        if( !file.exists() ) {
-            println(Ansi.ansi().a("Creating dir:  ").a(Ansi.Attribute.INTENSITY_BOLD).a(file.getPath()).a(Ansi.Attribute.RESET).toString());
-            file.mkdirs();
-        }
-    }
-
-    private int chmod(File serviceFile, String mode) throws Exception {
-        ProcessBuilder builder = new ProcessBuilder();
-        builder.command("chmod", mode, serviceFile.getCanonicalPath());
-        Process p = builder.start();
-
-        // gnodet: Fix SMX4KNL-46: cpu goes to 100% after running the 'admin create' command
-        // Not sure exactly what happens, but commenting the process io redirection seems
-        // to work around the problem.
-        //
-        //PumpStreamHandler handler = new PumpStreamHandler(io.inputStream, io.outputStream, io.errorStream);
-        //handler.attach(p);
-        //handler.start();
-        int status = p.waitFor();
-        //handler.stop();
-        return status;
-    }
-
-    private void copy(File source, File destination) throws Exception {
-        if (source.getName().equals("cache.lock")) {
-            // ignore cache.lock file
-            return;
-        }
-        if (source.getName().equals("lock")) {
-            // ignore lock file
-            return;
-        }
-        if (source.isDirectory()) {
-            if (!destination.exists()) {
-                destination.mkdirs();
-            }
-            String[] children = source.list();
-            for (String child : children) {
-                if (!child.contains("instances") && !child.contains("lib"))
-                    copy(new File(source, child), new File(destination, child));
-            }
-        } else {
-            InputStream in = new FileInputStream(source);
-            OutputStream out = new FileOutputStream(destination);
-            byte[] buffer = new byte[1024];
-            int length;
-            while ((length = in.read(buffer)) > 0) {
-                out.write(buffer, 0, length);
-            }
-            in.close();
-            out.close();
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/admin/internal/InstanceImpl.java b/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/admin/internal/InstanceImpl.java
deleted file mode 100644
index a8579a5..0000000
--- a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/admin/internal/InstanceImpl.java
+++ /dev/null
@@ -1,545 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.internal;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.net.Socket;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
-import org.apache.karaf.admin.Instance;
-import org.apache.karaf.jpm.Process;
-import org.apache.karaf.jpm.ProcessBuilderFactory;
-import org.apache.karaf.jpm.impl.ScriptUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class InstanceImpl implements Instance {
-
-    private static final Logger LOG = LoggerFactory.getLogger(InstanceImpl.class);
-
-    private static final String CONFIG_PROPERTIES_FILE_NAME = "config.properties";
-
-    private static final String KARAF_SHUTDOWN_PORT = "karaf.shutdown.port";
-
-    private static final String KARAF_SHUTDOWN_HOST = "karaf.shutdown.host";
-
-    private static final String KARAF_SHUTDOWN_PORT_FILE = "karaf.shutdown.port.file";
-
-    private static final String KARAF_SHUTDOWN_COMMAND = "karaf.shutdown.command";
-
-    private static final String KARAF_SHUTDOWN_PID_FILE = "karaf.shutdown.pid.file";
-
-    private static final String DEFAULT_SHUTDOWN_COMMAND = "SHUTDOWN";
-
-    private AdminServiceImpl service;
-    private String name;
-    private String location;
-    private String javaOpts;
-    private Process process;
-    private boolean root;
-
-    public InstanceImpl(AdminServiceImpl service, String name, String location, String javaOpts) {
-        this(service, name, location, javaOpts, false);
-    }
-    
-    public InstanceImpl(AdminServiceImpl service, String name, String location, String javaOpts, boolean root) {
-        this.service = service;
-        this.name = name;
-        this.location = location;
-        this.javaOpts = javaOpts;
-        this.root = root;
-    }
-
-    public void attach(int pid) throws IOException {
-        checkProcess();
-        if (this.process != null) {
-            throw new IllegalStateException("Instance already started");
-        }
-        this.process = ProcessBuilderFactory.newInstance().newBuilder().attach(pid);
-    }
-
-    public String getName() {
-        return this.name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-    
-    public boolean isRoot() {
-        return root;
-    }
-
-    public String getLocation() {
-        return location;
-    }
-
-    public void setLocation(String location) {
-        this.location = location;
-    }
-
-    public boolean exists() {
-        return new File(location).isDirectory();
-    }
-
-    public int getPid() {
-        checkProcess();
-        return this.process != null ? this.process.getPid() : 0;
-    }
-
-    public int getSshPort() {
-        InputStream is = null;
-        try {
-            File f = new File(location, "etc/org.apache.karaf.shell.cfg");
-            is = new FileInputStream(f);
-            Properties props = new Properties();
-            props.load(is);
-            String loc = props.getProperty("sshPort");
-            return Integer.parseInt(loc);
-        } catch (Exception e) {
-            return 0;
-        } finally {
-            if (is != null) {
-                try {
-                    is.close();
-                } catch (IOException e) {
-                    // Ignore
-                }
-            }
-        }
-    }
-
-    public void changeSshPort(int port) throws Exception {
-        checkProcess();
-        if (this.process != null) {
-            throw new IllegalStateException("Instance not stopped");
-        }
-        Properties props = new Properties();
-        File f = new File(location, "etc/org.apache.karaf.shell.cfg");
-        InputStream is = new FileInputStream(f);
-        try {
-            props.load(is);
-        } finally {
-            is.close();
-        }
-        props.setProperty("sshPort", Integer.toString(port));
-        OutputStream os = new FileOutputStream(f);
-        try {
-            props.store(os, null);
-        } finally {
-            os.close();
-        }
-    }
-
-    public int getRmiRegistryPort() {
-        InputStream is = null;
-        try {
-            File f = new File(location, "etc/org.apache.karaf.management.cfg");
-            is = new FileInputStream(f);
-            Properties props = new Properties();
-            props.load(is);
-            String loc = props.getProperty("rmiRegistryPort");
-            return Integer.parseInt(loc);
-        } catch (Exception e) {
-            return 0;
-        } finally {
-            if (is != null) {
-                try {
-                    is.close();
-                } catch (IOException e) {
-                    // Ignore
-                }
-            }
-        }
-    }
-
-    public void changeRmiRegistryPort(int port) throws Exception {
-        checkProcess();
-        if (this.process != null) {
-            throw new IllegalStateException("Instance not stopped");
-        }
-        Properties props = new Properties();
-        File f = new File(location, "etc/org.apache.karaf.management.cfg");
-        InputStream is = new FileInputStream(f);
-        try {
-            props.load(is);
-        } finally {
-            is.close();
-        }
-        props.setProperty("rmiRegistryPort", Integer.toString(port));
-        OutputStream os = new FileOutputStream(f);
-        try {
-            props.store(os, null);
-        } finally {
-            os.close();
-        }
-    }
-
-    public int getRmiServerPort() {
-        InputStream is = null;
-        try {
-            File f = new File(location, "etc/org.apache.karaf.management.cfg");
-            is = new FileInputStream(f);
-            Properties props = new Properties();
-            props.load(is);
-            String loc = props.getProperty("rmiServerPort");
-            return Integer.parseInt(loc);
-        } catch (Exception e) {
-            return 0;
-        } finally {
-            if (is != null) {
-                try {
-                    is.close();
-                } catch (IOException e) {
-                    // Ignore
-                }
-            }
-        }
-    }
-
-    public void changeRmiServerPort(int port) throws Exception {
-        checkProcess();
-        if (this.process != null) {
-            throw new IllegalStateException("Instance not stopped");
-        }
-        Properties props = new Properties();
-        File f = new File(location, "etc/org.apache.karaf.management.cfg");
-        InputStream is = new FileInputStream(f);
-        try {
-            props.load(is);
-        } finally {
-            is.close();
-        }
-        props.setProperty("rmiServerPort", Integer.toString(port));
-        OutputStream os = new FileOutputStream(f);
-        try {
-            props.store(os, null);
-        } finally {
-            os.close();
-        }
-    }
-
-    public String getJavaOpts() {
-        return javaOpts;
-    }
-
-    public void changeJavaOpts(String javaOpts) throws Exception {
-        this.javaOpts = javaOpts;
-        this.service.saveState();
-    }
-
-    public synchronized void start(String javaOpts) throws Exception {
-        checkProcess();
-        if (this.process != null) {
-            throw new IllegalStateException("Instance already started");
-        }
-        if (javaOpts == null || javaOpts.length() == 0) {
-            javaOpts = this.javaOpts;
-        }
-        if (javaOpts == null || javaOpts.length() == 0) {
-            javaOpts = "-server -Xmx512M -Dcom.sun.management.jmxremote";
-        }
-        String karafOpts = System.getProperty("karaf.opts", "");  
-        
-        File libDir = new File(System.getProperty("karaf.home"), "lib");
-        File[] jars = libDir.listFiles(new FilenameFilter() {
-            public boolean accept(File dir, String name) {
-                return name.endsWith(".jar");
-            }
-        });
-        StringBuilder classpath = new StringBuilder();
-        for (File jar : jars) {
-            if (classpath.length() > 0) {
-                classpath.append(System.getProperty("path.separator"));
-            }
-            classpath.append(jar.getCanonicalPath());
-        }
-        String command = "\""
-                + new File(System.getProperty("java.home"), ScriptUtils.isWindows() ? "bin\\java.exe" : "bin/java").getCanonicalPath()
-                + "\" " + javaOpts
-                + " " + karafOpts
-                + " -Djava.util.logging.config.file=\"" + new File(location, "etc/java.util.logging.properties").getCanonicalPath() + "\""
-                + " -Djava.endorsed.dirs=\"" + new File(new File(new File(System.getProperty("java.home"), "jre"), "lib"), "endorsed") + System.getProperty("path.separator") + new File(new File(System.getProperty("java.home"), "lib"), "endorsed") + System.getProperty("path.separator") + new File(libDir, "endorsed").getCanonicalPath() + "\""
-                + " -Djava.ext.dirs=\"" + new File(new File(new File(System.getProperty("java.home"), "jre"), "lib"), "ext") + System.getProperty("path.separator") + new File(new File(System.getProperty("java.home"), "lib"), "ext") + System.getProperty("path.separator") + new File(libDir, "ext").getCanonicalPath() + "\""
-                + " -Dkaraf.home=\"" + System.getProperty("karaf.home") + "\""
-                + " -Dkaraf.base=\"" + new File(location).getCanonicalPath() + "\""
-                + " -Dkaraf.startLocalConsole=false"
-                + " -Dkaraf.startRemoteShell=true"
-                + " -classpath " + classpath.toString()
-                + " org.apache.karaf.main.Main";
-        LOG.debug("Starting instance " + name + " with command: " + command);
-        this.process = ProcessBuilderFactory.newInstance().newBuilder()
-                        .directory(new File(location))
-                        .command(command)
-                        .start();
-        this.service.saveState();
-    }
-
-    public synchronized void stop() throws Exception {
-        checkProcess();
-        if (this.process == null) {
-            throw new IllegalStateException("Instance not started");
-        }
-        // Try a clean shutdown
-        cleanShutdown();
-        if (this.process != null) {
-            this.process.destroy();
-        }
-    }
-
-    public synchronized void destroy() throws Exception {
-        checkProcess();
-        if (this.process != null) {
-            throw new IllegalStateException("Instance not stopped");
-        }
-        deleteFile(new File(location));
-        this.service.forget(name);
-        this.service.saveState();
-    }
-
-    public synchronized String getState() {
-        int port = getSshPort();
-        if (!exists() || port <= 0) {
-            return ERROR;
-        }
-        checkProcess();
-        if (this.process == null) {
-            return STOPPED;
-        } else {
-            try {
-                Socket s = new Socket("localhost", port);
-                s.close();
-                return STARTED;
-            } catch (Exception e) {
-                // ignore
-            }
-            return STARTING;
-        }
-    }
-
-    protected void checkProcess() {
-        if (this.process != null) {
-            try {
-                if (!this.process.isRunning()) {
-                    this.process = null;
-                }
-            } catch (IOException e) {
-            }
-        }
-    }
-
-    protected void cleanShutdown() {
-        try {
-            File file = new File(new File(location, "etc"), CONFIG_PROPERTIES_FILE_NAME);
-            URL configPropURL = file.toURI().toURL();
-            Properties props = loadPropertiesFile(configPropURL);
-            props.put("karaf.base", new File(location).getCanonicalPath());
-            props.put("karaf.home", System.getProperty("karaf.home"));
-            props.put("karaf.data", new File(new File(location), "data").getCanonicalPath());
-            for (Enumeration e = props.propertyNames(); e.hasMoreElements();) {
-                String name = (String) e.nextElement();
-                props.setProperty(name,
-                        substVars(props.getProperty(name), name, null, props));
-            }
-            int port = Integer.parseInt(props.getProperty(KARAF_SHUTDOWN_PORT, "0"));
-            String host = props.getProperty(KARAF_SHUTDOWN_HOST, "localhost");
-            String portFile = props.getProperty(KARAF_SHUTDOWN_PORT_FILE);
-            String shutdown = props.getProperty(KARAF_SHUTDOWN_COMMAND, DEFAULT_SHUTDOWN_COMMAND);
-            if (port == 0 && portFile != null) {
-                BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(portFile)));
-                String portStr = r.readLine();
-                port = Integer.parseInt(portStr);
-                r.close();
-            }
-            // We found the port, try to send the command
-            if (port > 0) {
-                Socket s = new Socket(host, port);
-                s.getOutputStream().write(shutdown.getBytes());
-                s.close();
-                long t = System.currentTimeMillis() + service.getStopTimeout();
-                do {
-                    Thread.sleep(100);
-                    checkProcess();
-                } while (System.currentTimeMillis() < t && process != null);
-            }
-        } catch (Exception e) {
-            LOG.debug("Unable to cleanly shutdown instance", e);
-        }
-    }
-
-    protected static boolean deleteFile(File fileToDelete) {
-        if (fileToDelete == null || !fileToDelete.exists()) {
-            return true;
-        }
-        boolean result = true;
-        if (fileToDelete.isDirectory()) {
-            File[] files = fileToDelete.listFiles();
-            if (files == null) {
-                result = false;
-            } else {
-                for (int i = 0; i < files.length; i++) {
-                    File file = files[i];
-                    if (file.getName().equals(".") || file.getName().equals("..")) {
-                        continue;
-                    }
-                    if (file.isDirectory()) {
-                        result &= deleteFile(file);
-                    } else {
-                        result &= file.delete();
-                    }
-                }
-            }
-        }
-        result &= fileToDelete.delete();
-        return result;
-    }
-
-    protected static Properties loadPropertiesFile(URL configPropURL) throws Exception {
-        // Read the properties file.
-        Properties configProps = new Properties();
-        InputStream is = null;
-        try {
-            is = configPropURL.openConnection().getInputStream();
-            configProps.load(is);
-            is.close();
-        }
-        catch (Exception ex) {
-            System.err.println(
-                    "Error loading config properties from " + configPropURL);
-            System.err.println("Main: " + ex);
-            try {
-                if (is != null) is.close();
-            }
-            catch (IOException ex2) {
-                // Nothing we can do.
-            }
-            return null;
-        }
-        return configProps;
-    }
-
-    private static final String DELIM_START = "${";
-    private static final String DELIM_STOP = "}";
-
-    protected static String substVars(String val, String currentKey,
-                                      Map<String, String> cycleMap, Properties configProps)
-            throws IllegalArgumentException {
-        // If there is currently no cycle map, then create
-        // one for detecting cycles for this invocation.
-        if (cycleMap == null) {
-            cycleMap = new HashMap<String, String>();
-        }
-
-        // Put the current key in the cycle map.
-        cycleMap.put(currentKey, currentKey);
-
-        // Assume we have a value that is something like:
-        // "leading ${foo.${bar}} middle ${baz} trailing"
-
-        // Find the first ending '}' variable delimiter, which
-        // will correspond to the first deepest nested variable
-        // placeholder.
-        int stopDelim = val.indexOf(DELIM_STOP);
-
-        // Find the matching starting "${" variable delimiter
-        // by looping until we find a start delimiter that is
-        // greater than the stop delimiter we have found.
-        int startDelim = val.indexOf(DELIM_START);
-        while (stopDelim >= 0) {
-            int idx = val.indexOf(DELIM_START, startDelim + DELIM_START.length());
-            if ((idx < 0) || (idx > stopDelim)) {
-                break;
-            } else if (idx < stopDelim) {
-                startDelim = idx;
-            }
-        }
-
-        // If we do not have a start or stop delimiter, then just
-        // return the existing value.
-        if ((startDelim < 0) && (stopDelim < 0)) {
-            return val;
-        }
-        // At this point, we found a stop delimiter without a start,
-        // so throw an exception.
-        else if (((startDelim < 0) || (startDelim > stopDelim))
-                && (stopDelim >= 0)) {
-            throw new IllegalArgumentException(
-                    "stop delimiter with no start delimiter: "
-                            + val);
-        }
-
-        // At this point, we have found a variable placeholder so
-        // we must perform a variable substitution on it.
-        // Using the start and stop delimiter indices, extract
-        // the first, deepest nested variable placeholder.
-        String variable =
-                val.substring(startDelim + DELIM_START.length(), stopDelim);
-
-        // Verify that this is not a recursive variable reference.
-        if (cycleMap.get(variable) != null) {
-            throw new IllegalArgumentException(
-                    "recursive variable reference: " + variable);
-        }
-
-        // Get the value of the deepest nested variable placeholder.
-        // Try to configuration properties first.
-        String substValue = (configProps != null)
-                ? configProps.getProperty(variable, null)
-                : null;
-        if (substValue == null) {
-            // Ignore unknown property values.
-            substValue = System.getProperty(variable, "");
-        }
-
-        // Remove the found variable from the cycle map, since
-        // it may appear more than once in the value and we don't
-        // want such situations to appear as a recursive reference.
-        cycleMap.remove(variable);
-
-        // Append the leading characters, the substituted value of
-        // the variable, and the trailing characters to get the new
-        // value.
-        val = val.substring(0, startDelim)
-                + substValue
-                + val.substring(stopDelim + DELIM_STOP.length(), val.length());
-
-        // Now perform substitution again, since there could still
-        // be substitutions to make.
-        val = substVars(val, currentKey, cycleMap, configProps);
-
-        // Return the value.
-        return val;
-    }
-
-    public boolean isAttached() {
-        checkProcess();
-        return (process != null);
-    }
-
-}
diff --git a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/jpm/Process.java b/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/jpm/Process.java
deleted file mode 100644
index 2bd3b36..0000000
--- a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/jpm/Process.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jpm;
-
-import java.io.IOException;
-import java.io.Serializable;
-
-/**
- * Interface representing a process
- */
-public interface Process extends Serializable {
-
-    /**
-     * Retrieves the PID of the process
-     * @return the pid
-     */
-    int getPid();
-
-    /**
-     * Check if this process is still running
-     * @return <code>true</code> if the process is running
-     * @throws IOException if an error occurs
-     */
-    boolean isRunning() throws IOException;
-
-    /**
-     * Destroy the process.
-     *
-     * @throws IOException
-     */
-    void destroy() throws IOException;
-
-}
diff --git a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/jpm/ProcessBuilder.java b/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/jpm/ProcessBuilder.java
deleted file mode 100644
index afc4ff8..0000000
--- a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/jpm/ProcessBuilder.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jpm;
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.*;
-
-/**
- * Interface used to create new processes.
- */
-public interface ProcessBuilder {
-
-    /**
-     * Specified the current directory to run the command from
-     *
-     * @param dir the directory to run the command from
-     * @return the ProcessBuilder instance
-     */
-    ProcessBuilder directory(File dir);
-
-    /**
-     * Set the command to execute
-     *
-     * @param command the command to execute
-     * @return the ProcessBuilder instance
-     */
-    ProcessBuilder command(String command);
-
-    /**
-     * Create and start the process
-     *
-     * @return the process that has been started
-     * @throws IOException if the process can not be created
-     */
-    org.apache.karaf.jpm.Process start() throws IOException;
-
-    /**
-     * Attach to an existing process
-     *
-     * @return the process that has been attached
-     * @throws IOException if the process can not be attached to
-     */
-    org.apache.karaf.jpm.Process attach(int pid) throws IOException;
-
-}
diff --git a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/jpm/ProcessBuilderFactory.java b/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/jpm/ProcessBuilderFactory.java
deleted file mode 100644
index bf8b26f..0000000
--- a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/jpm/ProcessBuilderFactory.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jpm;
-
-import java.lang.*;
-
-import org.apache.karaf.jpm.impl.ProcessBuilderFactoryImpl;
-
-/**
- * Factory for process builders.
- */
-public abstract class ProcessBuilderFactory {
-
-    public static ProcessBuilderFactory newInstance() {
-        return new ProcessBuilderFactoryImpl();
-    }
-
-    public abstract ProcessBuilder newBuilder();
-
-}
diff --git a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/jpm/impl/ProcessBuilderFactoryImpl.java b/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/jpm/impl/ProcessBuilderFactoryImpl.java
deleted file mode 100644
index 041bd02..0000000
--- a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/jpm/impl/ProcessBuilderFactoryImpl.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jpm.impl;
-
-import org.apache.karaf.jpm.ProcessBuilder;
-import org.apache.karaf.jpm.ProcessBuilderFactory;
-
-public class ProcessBuilderFactoryImpl extends ProcessBuilderFactory {
-
-    public ProcessBuilder newBuilder() {
-        return new ProcessBuilderImpl();
-    }
-}
diff --git a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/jpm/impl/ProcessBuilderImpl.java b/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/jpm/impl/ProcessBuilderImpl.java
deleted file mode 100644
index 08f4407..0000000
--- a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/jpm/impl/ProcessBuilderImpl.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jpm.impl;
-
-import java.io.File;
-import java.io.IOException;
-
-import org.apache.karaf.jpm.Process;
-import org.apache.karaf.jpm.ProcessBuilder;
-
-
-public class ProcessBuilderImpl implements ProcessBuilder {
-
-    private File dir;
-    private String command;
-
-    public ProcessBuilder directory(File dir) {
-        this.dir = dir;
-        return this;
-    }
-
-    public ProcessBuilder command(String command) {
-        this.command = command;
-        return this;
-    }
-
-    public Process start() throws IOException {
-        return ProcessImpl.create(dir, command);
-    }
-
-    public Process attach(int pid) throws IOException {
-        return ProcessImpl.attach(pid);
-    }
-}
diff --git a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/jpm/impl/ProcessImpl.java b/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/jpm/impl/ProcessImpl.java
deleted file mode 100644
index 6102f27..0000000
--- a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/jpm/impl/ProcessImpl.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jpm.impl;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.InterruptedIOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.karaf.jpm.Process;
-
-public class ProcessImpl implements Process {
-
-    private int pid;
-    //private File input;
-    //private File output;
-    //private File error;
-
-    public ProcessImpl(int pid/*, File input, File output, File error*/) {
-        this.pid = pid;
-        //this.input = input;
-        //this.output = output;
-        //this.error = error;
-    }
-
-    public int getPid() {
-        return pid;
-    }
-
-    public boolean isRunning() throws IOException {
-        if (ScriptUtils.isWindows()) {
-            Map<String, String> props = new HashMap<String, String>();
-            props.put("${pid}", Integer.toString(pid));
-            int ret = ScriptUtils.execute("running", props);
-            return ret == 0;
-        } else {
-            try {
-                java.lang.Process process = new java.lang.ProcessBuilder("ps", "-p", Integer.toString(pid)).start();
-                BufferedReader r = new BufferedReader(new InputStreamReader(process.getInputStream()));
-                r.readLine(); // skip headers
-                String s = r.readLine();
-                boolean running = s != null && s.length() > 0;
-                int ret = process.waitFor();
-                return running;
-            } catch (InterruptedException e) {
-                throw new InterruptedIOException();
-            }
-        }
-    }
-
-    public void destroy() throws IOException {
-        int ret;
-        if (ScriptUtils.isWindows()) {
-            Map<String, String> props = new HashMap<String, String>();
-            props.put("${pid}", Integer.toString(pid));
-            ret = ScriptUtils.execute("destroy", props);
-        } else {
-            ret = ScriptUtils.executeProcess(new java.lang.ProcessBuilder("kill", "-9", Integer.toString(pid)));
-        }
-        if (ret != 0) {
-            throw new IOException("Unable to destroy process, it may be already terminated");
-        }
-    }
-
-    /*
-    public OutputStream getInputStream() throws FileNotFoundException {
-        return new FileOutputStream(input);
-    }
-
-    public InputStream getOutputStream() throws FileNotFoundException {
-        return new FileInputStream(output);
-    }
-
-    public InputStream getErrorStream() throws FileNotFoundException {
-        return new FileInputStream(error);
-    }
-    */
-
-    public int waitFor() throws InterruptedException {
-        return 0;
-    }
-
-    public int exitValue() {
-        return 0;
-    }
-
-    public static Process create(File dir, String command) throws IOException {
-        //File input = File.createTempFile("jpm.", ".input");
-        //File output = File.createTempFile("jpm.", ".output");
-        //File error = File.createTempFile("jpm.", ".error");
-        File pidFile = File.createTempFile("jpm.", ".pid");
-        try {
-            Map<String, String> props = new HashMap<String, String>();
-            //props.put("${in.file}", input.getCanonicalPath());
-            //props.put("${out.file}", output.getCanonicalPath());
-            //props.put("${err.file}", error.getCanonicalPath());
-            props.put("${pid.file}", pidFile.getCanonicalPath());
-            props.put("${dir}", dir != null ? dir.getCanonicalPath() : "");
-            if (ScriptUtils.isWindows()) {
-                command = command.replaceAll("\"", "\"\"");
-            }
-            props.put("${command}", command);
-            int ret = ScriptUtils.execute("start", props);
-            if (ret != 0) {
-                throw new IOException("Unable to create process (error code: " + ret + ")");
-            }
-            int pid = readPid(pidFile);
-            return new ProcessImpl(pid/*, input, output, error*/);
-        } finally {
-            pidFile.delete();
-        }
-    }
-
-    public static Process attach(int pid) throws IOException {
-        return new ProcessImpl(pid);
-    }
-
-    private static int readPid(File pidFile) throws IOException {
-        InputStream is = new FileInputStream(pidFile);
-        try {
-            BufferedReader r = new BufferedReader(new InputStreamReader(is));
-            String pidString = r.readLine();
-            return Integer.valueOf(pidString);
-        } finally {
-            try {
-                is.close();
-            } catch (IOException e) {}
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/jpm/impl/ScriptUtils.java b/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/jpm/impl/ScriptUtils.java
deleted file mode 100644
index a99261b..0000000
--- a/karaf-2.3.x/admin/core/src/main/java/org/apache/karaf/jpm/impl/ScriptUtils.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jpm.impl;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InterruptedIOException;
-import java.io.OutputStream;
-import java.io.PrintStream;
-import java.util.Map;
-import java.util.Scanner;
-
-public class ScriptUtils {
-
-    public static int execute(String name, Map<String, String> props) throws IOException {
-        File script = File.createTempFile("jpm.", ".script");
-        try {
-            if (isWindows()) {
-                String res = "windows/" + name + ".vbs";
-                ScriptUtils.copyFilteredResource(res, script, props);
-                return executeProcess(new java.lang.ProcessBuilder("cscript",
-                                                                   "/NOLOGO",
-                                                                   "//E:vbs",
-                                                                   script.getCanonicalPath()));
-            } else {
-                String res = "unix/" + name + ".sh";
-                ScriptUtils.copyFilteredResource(res, script, props);
-                return executeProcess(new java.lang.ProcessBuilder("/bin/sh",
-                                                                   script.getCanonicalPath()));
-            }
-        } finally {
-            script.delete();
-        }
-    }
-
-    public static int executeProcess(java.lang.ProcessBuilder builder) throws IOException {
-        try {
-            java.lang.Process process = builder.start();
-            return process.waitFor();
-        } catch (InterruptedException e) {
-            throw new InterruptedIOException();
-        }
-    }
-
-    public static void copyFilteredResource(String resource, File outFile, Map<String, String> props) throws IOException {
-        InputStream is = null;
-        try {
-            is = ScriptUtils.class.getResourceAsStream(resource);
-            // Read it line at a time so that we can use the platform line ending when we write it out.
-            PrintStream out = new PrintStream(new FileOutputStream(outFile));
-            try {
-                Scanner scanner = new Scanner(is);
-                while (scanner.hasNextLine() ) {
-                    String line = scanner.nextLine();
-                    line = filter(line, props);
-                    out.println(line);
-                }
-            } finally {
-                safeClose(out);
-            }
-        } finally {
-            safeClose(is);
-        }
-    }
-
-    private static void safeClose(InputStream is) throws IOException {
-        if (is == null) {
-            return;
-        }
-        try {
-            is.close();
-        } catch (Throwable ignore) {
-        }
-    }
-
-    private static void safeClose(OutputStream is) throws IOException {
-        if (is == null) {
-            return;
-        }
-        try {
-            is.close();
-        } catch (Throwable ignore) {
-        }
-    }
-
-    private static String filter(String line, Map<String, String> props) {
-        for (Map.Entry<String, String> i : props.entrySet()) {
-            int p1 = line.indexOf(i.getKey());
-            if( p1 >= 0 ) {
-                String l1 = line.substring(0, p1);
-                String l2 = line.substring(p1+i.getKey().length());
-                line = l1+i.getValue()+l2;
-            }
-        }
-        return line;
-    }
-
-    private static final boolean windows;
-
-    static {
-        windows = System.getProperty("os.name").toLowerCase().indexOf("windows") != -1;
-    }
-
-    public static boolean isWindows() {
-        return windows;
-    }
-
-}
diff --git a/karaf-2.3.x/admin/core/src/main/resources/OSGI-INF/blueprint/admin-core.xml b/karaf-2.3.x/admin/core/src/main/resources/OSGI-INF/blueprint/admin-core.xml
deleted file mode 100644
index 1fb869e..0000000
--- a/karaf-2.3.x/admin/core/src/main/resources/OSGI-INF/blueprint/admin-core.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"
-           default-activation="lazy">
-
-    <bean id="adminService" class="org.apache.karaf.admin.internal.AdminServiceImpl" init-method="init">
-        <property name="storageLocation" value="${karaf.instances}" />
-    </bean>
-
-    <service ref="adminService" interface="org.apache.karaf.admin.AdminService" />
-
-    <!-- Allow the use of system properties -->
-    <ext:property-placeholder />
-
-</blueprint>
diff --git a/karaf-2.3.x/admin/core/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/admin/core/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index fd820e8..0000000
--- a/karaf-2.3.x/admin/core/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,17 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle is the core implementation of the Karaf admin feature.
-
-    Karaf admin allows you to manage Karaf child instances.
-
-    You can create new Karaf instances, configure attributes, rename instances, stop instances, etc.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[31mManaging child instances\u001B[0m of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/bin/karaf b/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/bin/karaf
deleted file mode 100644
index 8967cea..0000000
--- a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/bin/karaf
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-KARAF_HOME=${SUBST-KARAF-HOME}
-KARAF_BASE=${SUBST-KARAF-BASE}
-
-export KARAF_BASE
-exec ${KARAF_HOME}/bin/karaf "$*"
diff --git a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/bin/karaf.bat b/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/bin/karaf.bat
deleted file mode 100644
index 312b66c..0000000
--- a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/bin/karaf.bat
+++ /dev/null
@@ -1,25 +0,0 @@
-@ECHO OFF
-REM =========================================================================
-REM
-REM Licensed to the Apache Software Foundation (ASF) under one or more
-REM contributor license agreements.  See the NOTICE file distributed with
-REM this work for additional information regarding copyright ownership.
-REM The ASF licenses this file to You under the Apache License, Version 2.0
-REM (the "License"); you may not use this file except in compliance with
-REM the License.  You may obtain a copy of the License at
-REM
-REM    http://www.apache.org/licenses/LICENSE-2.0
-REM
-REM Unless required by applicable law or agreed to in writing, software
-REM distributed under the License is distributed on an "AS IS" BASIS,
-REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-REM See the License for the specific language governing permissions and
-REM limitations under the License.
-REM
-REM =========================================================================
-
-SETLOCAL
-SET KARAF_HOME=${SUBST-KARAF-HOME}
-SET KARAF_BASE=${SUBST-KARAF-BASE}
-
-%KARAF_HOME%\bin\karaf.bat %*
diff --git a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/bin/start b/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/bin/start
deleted file mode 100644
index 333cba1..0000000
--- a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/bin/start
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-KARAF_HOME=${SUBST-KARAF-HOME}
-KARAF_NAME=${SUBST-KARAF-NAME}
-
-exec ${KARAF_HOME}/bin/admin start ${KARAF_NAME} "$@"
-
diff --git a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/bin/start.bat b/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/bin/start.bat
deleted file mode 100644
index 822ed42..0000000
--- a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/bin/start.bat
+++ /dev/null
@@ -1,24 +0,0 @@
-@ECHO OFF
-REM =========================================================================
-REM 
-REM Licensed to the Apache Software Foundation (ASF) under one or more
-REM contributor license agreements.  See the NOTICE file distributed with
-REM this work for additional information regarding copyright ownership.
-REM The ASF licenses this file to You under the Apache License, Version 2.0
-REM (the "License"); you may not use this file except in compliance with
-REM the License.  You may obtain a copy of the License at
-REM 
-REM    http://www.apache.org/licenses/LICENSE-2.0
-REM 
-REM Unless required by applicable law or agreed to in writing, software
-REM distributed under the License is distributed on an "AS IS" BASIS,
-REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-REM See the License for the specific language governing permissions and
-REM limitations under the License.
-REM 
-REM =========================================================================
-
-SET KARAF_HOME=${SUBST-KARAF-HOME}
-SET KARAF_NAME=${SUBST-KARAF-NAME}
-
-%KARAF_HOME%\bin\admin.bat start %KARAF_NAME%
diff --git a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/bin/stop b/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/bin/stop
deleted file mode 100644
index 459a488..0000000
--- a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/bin/stop
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-KARAF_HOME=${SUBST-KARAF-HOME}
-KARAF_NAME=${SUBST-KARAF-NAME}
-
-exec ${KARAF_HOME}/bin/admin stop ${KARAF_NAME} "$@"
-
diff --git a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/bin/stop.bat b/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/bin/stop.bat
deleted file mode 100644
index 31d92cb..0000000
--- a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/bin/stop.bat
+++ /dev/null
@@ -1,24 +0,0 @@
-@ECHO OFF
-REM =========================================================================
-REM 
-REM Licensed to the Apache Software Foundation (ASF) under one or more
-REM contributor license agreements.  See the NOTICE file distributed with
-REM this work for additional information regarding copyright ownership.
-REM The ASF licenses this file to You under the Apache License, Version 2.0
-REM (the "License"); you may not use this file except in compliance with
-REM the License.  You may obtain a copy of the License at
-REM 
-REM    http://www.apache.org/licenses/LICENSE-2.0
-REM 
-REM Unless required by applicable law or agreed to in writing, software
-REM distributed under the License is distributed on an "AS IS" BASIS,
-REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-REM See the License for the specific language governing permissions and
-REM limitations under the License.
-REM 
-REM =========================================================================
-
-SET KARAF_HOME=${SUBST-KARAF-HOME}
-SET KARAF_NAME=${SUBST-KARAF-NAME}
-
-%KARAF_HOME%\bin\admin.bat stop %KARAF_NAME%
diff --git a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/etc/org.apache.karaf.management.cfg b/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/etc/org.apache.karaf.management.cfg
deleted file mode 100644
index 57b2957..0000000
--- a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/etc/org.apache.karaf.management.cfg
+++ /dev/null
@@ -1,63 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-#
-# The properties in this file define the configuration of Apache Karaf's JMX Management
-#
-
-#
-# Port number for RMI registry connection
-#
-rmiRegistryPort = ${SUBST-RMI-REGISTRY-PORT}
-
-#
-# Port number for RMI server connection
-#
-rmiServerPort = ${SUBST-RMI-SERVER-PORT}
-
-#
-# Name of the JAAS realm used for authentication
-#
-jmxRealm = karaf
-
-#
-# The service URL for the JMXConnectorServer
-#
-serviceUrl = service:jmx:rmi://0.0.0.0:${rmiServerPort}/jndi/rmi://0.0.0.0:${rmiRegistryPort}/karaf-${karaf.name}
-
-#
-# Whether any threads started for the JMXConnectorServer should be started as daemon threads
-#
-daemon = true
-
-#
-# Whether the JMXConnectorServer should be started in a separate thread
-#
-threaded = true
-
-#
-# The ObjectName used to register the JMXConnectorServer
-#
-objectName = connector:name=rmi
-
-#
-# Role name used for JMX access authorization
-# If not set, this defaults to the ${karaf.admin.role} configured in etc/system.properties
-#
-# jmxRole=admin
diff --git a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/etc/org.apache.karaf.shell.cfg b/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/etc/org.apache.karaf.shell.cfg
deleted file mode 100644
index d94bbfd..0000000
--- a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/etc/org.apache.karaf.shell.cfg
+++ /dev/null
@@ -1,56 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-#
-# These properties are used to configure Karaf's ssh shell.
-#
-
-#
-# Via sshPort and sshHost you define the address you can login into Karaf.
-#
-sshPort=${SUBST-SSH-PORT}
-sshHost=0.0.0.0
-
-#
-# sshRealm defines which JAAS domain to use for password authentication.
-#
-sshRealm=karaf
-
-#
-# The location of the hostKey file defines where the private/public key of the server
-# is located. If no file is at the defined location it will be ignored.
-#
-hostKey=${karaf.base}/etc/host.key
-
-#
-# Role name used for SSH access authorization
-# If not set, this defaults to the ${karaf.admin.role} configured in etc/system.properties
-#
-# sshRole=admin
-
-#
-# Self defined key size in 1024, 2048, 3072, or 4096
-# If not set, this defaults to 1024.
-#
-# keySize=1024
-
-#
-# Specify host key algorithm, defaults to DSA
-#
-# algorithm=DSA
diff --git a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/etc/system.properties b/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/etc/system.properties
deleted file mode 100644
index b4c4893..0000000
--- a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/admin/etc/system.properties
+++ /dev/null
@@ -1,90 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-#
-# The properties defined in this file will be made available through system
-# properties at the very beginning of the Karaf's boot process.
-#
-
-
-# Log level when the pax-logging service is not available
-# This level will only be used while the pax-logging service bundle
-# is not fully available.
-# To change log levels, please refer to the org.ops4j.pax.logging.cfg file
-# instead.
-org.ops4j.pax.logging.DefaultServiceLog.level=ERROR
-
-#
-# Name of this Karaf instance.
-#
-karaf.name=${SUBST-KARAF-NAME}
-
-#
-# Default repository where bundles will be loaded from before using
-# other Maven repositories.  For the full Maven configuration, see
-# the org.ops4j.pax.url.mvn.cfg file.
-#
-karaf.default.repository=system
-
-#
-# Location of a shell script that will be run when starting a shell
-# session.  This script can be used to create aliases and define
-# additional commands.
-#
-karaf.shell.init.script=${karaf.home}/etc/shell.init.script
-
-#
-# Default role name used for console authorization (JMX, SSH and WEB)
-# The syntax is the following:
-#   [classname:]principal
-# where classname is the class name of the principal object
-# (defaults to org.apache.karaf.jaas.modules.RolePrincipal)
-# and principal is the name of the principal of that class
-# (defaults to admin).
-#
-# Note that this value can be overriden using the various ConfigAdmin
-# configurations for JMX, SSH or the WebConsole.
-#
-karaf.admin.role=admin
-
-#
-# Set this empty property to avoid errors when validating xml documents.
-#
-xml.catalog.files=
-
-#
-# Suppress the bell in the console when hitting backspace too many times
-# for example
-#
-jline.nobell=true
-
-#
-# ServiceMix specs options
-#
-org.apache.servicemix.specs.debug=false
-org.apache.servicemix.specs.timeout=0
-
-#
-# Settings for the OSGi 4.3 Weaving
-# By default, we will not weave any classes. Change this setting to include classes
-# that you application needs to have woven.
-#
-org.apache.aries.proxy.weaving.enabled=none
-# Classes not to weave - Aries default + Xerces which is known to have issues.
-org.apache.aries.proxy.weaving.disabled=org.objectweb.asm.*,org.slf4j.*,org.apache.log4j.*,javax.*,org.apache.xerces.*
diff --git a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/jpm/impl/unix/start.sh b/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/jpm/impl/unix/start.sh
deleted file mode 100644
index 1d1d720..0000000
--- a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/jpm/impl/unix/start.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-#exec 1>${out.file}
-#exec 2>${err.file}
-exec 1>/dev/null
-exec 2>/dev/null
-if [ "x${dir}" != "x" ]; then
-    cd ${dir}
-fi
-nohup ${command} &
-echo $! > ${pid.file}
diff --git a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/jpm/impl/windows/destroy.vbs b/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/jpm/impl/windows/destroy.vbs
deleted file mode 100644
index abd60eb..0000000
--- a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/jpm/impl/windows/destroy.vbs
+++ /dev/null
@@ -1,27 +0,0 @@
-'===============================================================================
-'
-'    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 objWMIService = GetObject("winmgmts:\\.\root\cimv2")
-Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where ProcessId = ${pid}")
-intRetVal = 1
-For Each objProcess in colProcessList
-    objProcess.Terminate()
-    intRetVal = 0
-Next
-WScript.Quit(intRetVal)
diff --git a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/jpm/impl/windows/running.vbs b/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/jpm/impl/windows/running.vbs
deleted file mode 100644
index 32c65c5..0000000
--- a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/jpm/impl/windows/running.vbs
+++ /dev/null
@@ -1,26 +0,0 @@
-'===============================================================================
-'
-'    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 objWMIService = GetObject("winmgmts:\\.\root\cimv2")
-Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where ProcessId = ${pid}")
-intRetVal = 1
-For Each objProcess in colProcessList
-    intRetVal = 0
-Next
-WScript.Quit(intRetVal)
diff --git a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/jpm/impl/windows/start.vbs b/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/jpm/impl/windows/start.vbs
deleted file mode 100644
index 6004c86..0000000
--- a/karaf-2.3.x/admin/core/src/main/resources/org/apache/karaf/jpm/impl/windows/start.vbs
+++ /dev/null
@@ -1,34 +0,0 @@
-'===============================================================================
-'
-'    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 objWMIService = GetObject("winmgmts:\\.\root\cimv2")
-Set objConfig = objWMIService.Get("Win32_ProcessStartup").SpawnInstance_
-objConfig.ShowWindow = SW_HIDE
-objConfig.CreateFlags = 8
-If Len("${dir}") > 0 Then
-    intReturn = objWMIService.Get("Win32_Process").Create("${command}", "${dir}", objConfig, intProcessID)
-Else
-    intReturn = objWMIService.Get("Win32_Process").Create("${command}", Null, objConfig, intProcessID)
-End If
-If intReturn = 0 Then
-    Set objOutputFile = CreateObject("Scripting.fileSystemObject").CreateTextFile("${pid.file}", TRUE)
-    objOutputFile.WriteLine(intProcessID)
-    objOutputFile.Close
-End If
-WScript.Quit(intReturn)
diff --git a/karaf-2.3.x/admin/core/src/test/java/org/apache/karaf/admin/InstanceSettingsTest.java b/karaf-2.3.x/admin/core/src/test/java/org/apache/karaf/admin/InstanceSettingsTest.java
deleted file mode 100644
index a36a6dc..0000000
--- a/karaf-2.3.x/admin/core/src/test/java/org/apache/karaf/admin/InstanceSettingsTest.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import junit.framework.TestCase;
-import org.apache.karaf.admin.InstanceSettings;
-import org.junit.Assert;
-
-public class InstanceSettingsTest extends TestCase {
-    public void testInstanceSettings() {
-        InstanceSettings is =
-            new InstanceSettings(1, 1, 1, null, null, Collections.<String>emptyList(), Arrays.asList("hi"));
-        assertEquals(1, is.getSshPort());
-        assertEquals(1, is.getRmiRegistryPort());
-        assertEquals(1, is.getRmiServerPort());
-        Assert.assertNull(is.getLocation());
-        assertEquals(Arrays.asList("hi"), is.getFeatures());
-        assertEquals(0, is.getFeatureURLs().size());
-    }
-    
-    public void testEqualsHashCode() {
-        testEqualsHashCode(1, 1, 1, "top", "foo", Collections.<String>emptyList(), Arrays.asList("hi"));
-        testEqualsHashCode(0, 0, 0, null, null, null, null);
-    }
-
-    private void testEqualsHashCode(int sshPort, int rmiRegistryPort, int rmiServerPort, String location, String javaOpts, List<String> featureURLs, List<String> features) {
-        InstanceSettings is = new InstanceSettings(sshPort, rmiRegistryPort, rmiServerPort, location, javaOpts, featureURLs, features);
-        InstanceSettings is2 = new InstanceSettings(sshPort, rmiRegistryPort, rmiServerPort, location, javaOpts, featureURLs, features);
-        assertEquals(is, is2);
-        assertEquals(is.hashCode(), is2.hashCode());
-    }
-    
-    public void testEqualsHashCode2() {
-        InstanceSettings is = new InstanceSettings(1, 1, 1,"top", "foo", Collections.<String>emptyList(), Arrays.asList("hi"));
-        Assert.assertFalse(is.equals(null));
-        Assert.assertFalse(is.equals(new Object()));
-        assertEquals(is, is);
-    }
-}
diff --git a/karaf-2.3.x/admin/core/src/test/java/org/apache/karaf/admin/internal/AdminServiceImplTest.java b/karaf-2.3.x/admin/core/src/test/java/org/apache/karaf/admin/internal/AdminServiceImplTest.java
deleted file mode 100644
index cb917d6..0000000
--- a/karaf-2.3.x/admin/core/src/test/java/org/apache/karaf/admin/internal/AdminServiceImplTest.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.internal;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Arrays;
-import java.util.Properties;
-
-import junit.framework.TestCase;
-import org.apache.karaf.admin.Instance;
-import org.apache.karaf.admin.InstanceSettings;
-
-public class AdminServiceImplTest extends TestCase {
-
-    public void testHandleFeatures() throws Exception {
-        AdminServiceImpl as = new AdminServiceImpl();
-        
-        File f = File.createTempFile(getName(), ".test");
-        try {
-            Properties p = new Properties();
-            p.put("featuresBoot", "abc,def ");
-            p.put("featuresRepositories", "somescheme://xyz");
-            OutputStream os = new FileOutputStream(f);
-            try {
-                p.store(os, "Test comment");
-            } finally {
-                os.close();
-            }
-            
-            InstanceSettings s = new InstanceSettings(8122, 1122, 44444, null, null, null, Arrays.asList("test"));
-            as.handleFeatures(f, s);
-            
-            Properties p2 = new Properties();
-            InputStream is = new FileInputStream(f);
-            try {
-                p2.load(is);
-            } finally {
-                is.close();
-            }
-            assertEquals(2, p2.size());
-            assertEquals("abc,def,test", p2.get("featuresBoot"));
-            assertEquals("somescheme://xyz", p2.get("featuresRepositories"));
-        } finally {
-            f.delete();
-        }
-    }
-
-    /**
-     * Ensure the admin:create generates all the required configuration files
-     * //TODO: fix this test so it can run in an IDE
-     */
-    public void testConfigurationFiles() throws Exception {
-        AdminServiceImpl service = new AdminServiceImpl();
-        service.setStorageLocation(new File("target/instances/" + System.currentTimeMillis()));
-
-        InstanceSettings settings = new InstanceSettings(8122, 1122, 44444, getName(), null, null, null);
-        Instance instance = service.createInstance(getName(), settings);
-
-        assertFileExists(instance.getLocation(), "etc/config.properties");
-        assertFileExists(instance.getLocation(), "etc/users.properties");
-        assertFileExists(instance.getLocation(), "etc/startup.properties");
-
-        assertFileExists(instance.getLocation(), "etc/java.util.logging.properties");
-        assertFileExists(instance.getLocation(), "etc/org.apache.karaf.features.cfg");
-        assertFileExists(instance.getLocation(), "etc/org.apache.felix.fileinstall-deploy.cfg");
-        assertFileExists(instance.getLocation(), "etc/org.apache.karaf.log.cfg");
-        assertFileExists(instance.getLocation(), "etc/org.apache.karaf.management.cfg");
-        assertFileExists(instance.getLocation(), "etc/org.ops4j.pax.logging.cfg");
-        assertFileExists(instance.getLocation(), "etc/org.ops4j.pax.url.mvn.cfg");
-    }
-
-    /**
-     * <p>
-     * Test the renaming of an existing instance.
-     * </p>
-     */
-    public void testRenameInstance() throws Exception {
-        AdminServiceImpl service = new AdminServiceImpl();
-        service.setStorageLocation(new File("target/instances/" + System.currentTimeMillis()));
-
-        InstanceSettings settings = new InstanceSettings(8122, 1122, 44444, getName(), null, null, null);
-        Instance instance = service.createInstance(getName(), settings);
-
-        service.renameInstance(getName(), getName() + "b");
-        assertNotNull(service.getInstance(getName() + "b"));
-    }
-    
-    /**
-     * <p>
-     * Test the renaming of an existing instance.
-     * </p>
-     */
-    public void testToSimulateRenameInstanceByExternalProcess() throws Exception {
-        AdminServiceImpl service = new AdminServiceImpl();
-        File storageLocation = new File("target/instances/" + System.currentTimeMillis());
-        service.setStorageLocation(storageLocation);
-
-        InstanceSettings settings = new InstanceSettings(8122, 1122, 44444, getName(), null, null, null);
-        service.createInstance(getName(), settings);
-        
-        //to simulate the scenario that the instance name get changed by 
-        //external process, likely the admin command CLI tool, which cause
-        //the instance storage file get updated, the AdminService should be 
-        //able to reload the storage file before check any status for the 
-        //instance
-        
-        File storageFile = new File(storageLocation, AdminServiceImpl.STORAGE_FILE);
-        assertTrue(storageFile.isFile());
-        Properties storage = loadStorage(storageFile);
-        storage.setProperty("item.0.name", getName() + "b");
-        saveStorage(storage, storageFile, "testToSimulateRenameInstanceByExternalProcess");
-        
-        assertNotNull(service.getInstance(getName() + "b"));
-    }
-
-    private void saveStorage(Properties props, File location, String comment) throws IOException {
-        OutputStream os = null;
-        try {
-            os = new FileOutputStream(location);
-            props.store(os, comment);
-        } finally {
-            if (os != null) {
-                os.close();
-            }
-        }
-    }
-    
-    private Properties loadStorage(File location) throws IOException {
-        InputStream is = null;
-        try {
-            is = new FileInputStream(location);
-            Properties props = new Properties();
-            props.load(is);
-            return props;
-        } finally {
-            if (is != null) {
-                is.close();
-            }
-        }
-    }
-
-    private void assertFileExists(String path, String name) throws IOException {
-        File file = new File(path, name);
-        assertTrue("Expected " + file.getCanonicalPath() + " to exist",
-                   file.exists());
-    }   
-}
diff --git a/karaf-2.3.x/admin/core/src/test/java/org/apache/karaf/jpm/MainTest.java b/karaf-2.3.x/admin/core/src/test/java/org/apache/karaf/jpm/MainTest.java
deleted file mode 100644
index e7f7c83..0000000
--- a/karaf-2.3.x/admin/core/src/test/java/org/apache/karaf/jpm/MainTest.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jpm;
-
-public class MainTest {
-
-    public static void main(String[] args) throws Exception {
-        Thread.sleep(Long.parseLong(args[0]));
-    }
-}
diff --git a/karaf-2.3.x/admin/core/src/test/java/org/apache/karaf/jpm/ProcessTest.java b/karaf-2.3.x/admin/core/src/test/java/org/apache/karaf/jpm/ProcessTest.java
deleted file mode 100644
index 61225f3..0000000
--- a/karaf-2.3.x/admin/core/src/test/java/org/apache/karaf/jpm/ProcessTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jpm;
-
-import java.io.File;
-import java.net.URI;
-
-import junit.framework.TestCase;
-
-import org.apache.karaf.jpm.impl.ScriptUtils;
-
-public class ProcessTest extends TestCase {
-
-    public void testCreate() throws Exception {
-        String javaPath =
-            new File(System.getProperty("java.home"), ScriptUtils.isWindows() ? "bin\\java.exe" : "bin/java")
-                .getCanonicalPath();
-        System.err.println(javaPath);
-        StringBuilder command = new StringBuilder();
-        command.append("\"").append(javaPath).append("\"");
-        command.append(" -Dprop=\"key\"");
-        command.append(" -classpath ");
-        String clRes = getClass().getName().replace('.', '/') + ".class";
-        String str = new URI(getClass().getClassLoader().getResource(clRes).toString()).getPath();
-        str = str.substring(0, str.indexOf(clRes));
-        command.append("\"" + str + "\"");
-        command.append(" ");
-        command.append(MainTest.class.getName());
-        command.append(" ");
-        command.append(60000);
-        System.err.println("Executing: " + command.toString());
-
-        ProcessBuilder builder = ProcessBuilderFactory.newInstance().newBuilder();
-        org.apache.karaf.jpm.Process p = builder.command(command.toString()).start();
-        assertNotNull(p);
-        System.err.println("Process: " + p.getPid());
-        assertNotNull(p.getPid());
-        Thread.currentThread().sleep(1000);
-        System.err.println("Running: " + p.isRunning());
-        assertTrue(p.isRunning());
-        System.err.println("Destroying");
-        p.destroy();
-        Thread.currentThread().sleep(1000);
-        System.err.println("Running: " + p.isRunning());
-        assertFalse(p.isRunning());
-    }
-
-    /*
-     * When the process creation fails, no error is reported by the script
-     * 
-    public void testFailure() throws Exception {
-        ProcessBuilder builder = ProcessBuilderFactory.newInstance().newBuilder();
-        Process p = builder.command("ec").start();
-        fail("An exception should have been thrown");
-    }
-    */
-}
diff --git a/karaf-2.3.x/admin/management/NOTICE b/karaf-2.3.x/admin/management/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/admin/management/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/admin/management/pom.xml b/karaf-2.3.x/admin/management/pom.xml
deleted file mode 100644
index fb152b2..0000000
--- a/karaf-2.3.x/admin/management/pom.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.admin</groupId>
-        <artifactId>admin</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.admin.management</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Admin :: Management</name>
-    <description>Provide JMX MBeans related to the Karaf admin feature.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.admin</groupId>
-            <artifactId>org.apache.karaf.admin.core</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.management</groupId>
-            <artifactId>org.apache.karaf.management.server</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymockclassextension</artifactId>
-            <version>${easymock.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            javax.management,
-                            javax.management.loading,
-                            org.apache.felix.service.command,
-                            org.apache.felix.gogo.commands,
-                            *
-                        </Import-Package>
-                        <Private-Package>org.apache.karaf.admin.management.internal</Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/admin/management/src/main/java/org/apache/karaf/admin/management/AdminServiceMBean.java b/karaf-2.3.x/admin/management/src/main/java/org/apache/karaf/admin/management/AdminServiceMBean.java
deleted file mode 100644
index f2e878e..0000000
--- a/karaf-2.3.x/admin/management/src/main/java/org/apache/karaf/admin/management/AdminServiceMBean.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.management;
-
-import javax.management.openmbean.TabularData;
-
-public interface AdminServiceMBean {
-
-    String INSTANCE_PID = "Pid";
-    String INSTANCE_NAME = "Name";
-    String INSTANCE_IS_ROOT = "Is Root";
-    String INSTANCE_SSH_PORT = "SSH Port";
-    String INSTANCE_RMI_REGISTRY_PORT = "RMI Registry Port";
-    String INSTANCE_RMI_SERVER_PORT = "RMI Server Port";
-    String INSTANCE_STATE = "State";
-    String INSTANCE_LOCATION = "Location";
-    String INSTANCE_JAVAOPTS = "JavaOpts";
-
-    String[] INSTANCE = {INSTANCE_PID, INSTANCE_NAME, INSTANCE_IS_ROOT, INSTANCE_SSH_PORT, INSTANCE_RMI_REGISTRY_PORT,
-            INSTANCE_RMI_SERVER_PORT, INSTANCE_STATE, INSTANCE_LOCATION, INSTANCE_JAVAOPTS };
-
-    // Operations
-    int createInstance(String name, int sshPort, int rmiRegistryPort, int rmiServerPort, String location, String javaOpts, String features, String featureURLs) throws Exception;
-    void changeSshPort(String name, int port) throws Exception;
-    void changeRmiRegistryPort(String name, int port) throws Exception;
-    void changeRmiServerPort(String name, int port) throws Exception;
-    void changeJavaOpts(String name, String javaopts) throws Exception;
-    void destroyInstance(String name) throws Exception;
-    void startInstance(String name) throws Exception;
-    void startInstance(String name, String opts) throws Exception;
-    void startInstance(String name, String opts, boolean wait) throws Exception;
-    void stopInstance(String name) throws Exception;
-    void renameInstance(String originalName, String newName) throws Exception;
-    void cloneInstance(String name, String cloneName, int sshPort, int rmiRegistryPort, int rmiServerPort, String location, String javaOpts) throws Exception;
-
-    // Attributes
-    TabularData getInstances() throws Exception;
-
-}
diff --git a/karaf-2.3.x/admin/management/src/main/java/org/apache/karaf/admin/management/codec/JmxInstance.java b/karaf-2.3.x/admin/management/src/main/java/org/apache/karaf/admin/management/codec/JmxInstance.java
deleted file mode 100644
index 1453399..0000000
--- a/karaf-2.3.x/admin/management/src/main/java/org/apache/karaf/admin/management/codec/JmxInstance.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.management.codec;
-
-import java.util.List;
-
-import javax.management.openmbean.CompositeData;
-import javax.management.openmbean.CompositeDataSupport;
-import javax.management.openmbean.CompositeType;
-import javax.management.openmbean.OpenDataException;
-import javax.management.openmbean.OpenType;
-import javax.management.openmbean.SimpleType;
-import javax.management.openmbean.TabularData;
-import javax.management.openmbean.TabularDataSupport;
-import javax.management.openmbean.TabularType;
-
-import org.apache.karaf.admin.management.AdminServiceMBean;
-import org.apache.karaf.admin.Instance;
-
-public class JmxInstance {
-    static final CompositeType INSTANCE;
-    static final TabularType INSTANCE_TABLE;
-
-    static {
-        INSTANCE = createInstanceType();
-        INSTANCE_TABLE = createInstanceTableType();
-    }
-
-    private final CompositeDataSupport data;
-
-    private CompositeData asCompositeData() {
-        return data;
-    }
-
-    public JmxInstance(Instance instance) {
-        try {
-            String[] itemNames = AdminServiceMBean.INSTANCE;
-            Object[] itemValues = new Object[itemNames.length];
-            itemValues[0] = instance.getPid();
-            itemValues[1] = instance.getName();
-            itemValues[2] = instance.isRoot();
-            itemValues[3] = instance.getSshPort();
-            itemValues[4] = instance.getRmiRegistryPort();
-            itemValues[5] = instance.getRmiServerPort();
-            try {
-                itemValues[6] = instance.getState();
-            } catch (Exception e) {
-                itemValues[6] = "Error";
-            }
-            itemValues[7] = instance.getLocation();
-            itemValues[8] = instance.getJavaOpts();
-
-            data = new CompositeDataSupport(INSTANCE, itemNames, itemValues);
-        } catch (OpenDataException e) {
-            throw new IllegalStateException("Cannot create instance open data", e);
-        }
-    }
-
-    private static CompositeType createInstanceType() {
-        try {
-            String desc = "This type describes Karaf instances";
-            String[] itemNames = AdminServiceMBean.INSTANCE;
-            OpenType[] itemTypes = new OpenType[itemNames.length];
-            String[] descriptions = new String[itemNames.length];
-
-            itemTypes[0] = SimpleType.INTEGER;
-            descriptions[0] = "The Process ID of the instance or 0 if not running.";
-
-            itemTypes[1] = SimpleType.STRING;
-            descriptions[1] = "The name of the instance.";
-            
-            itemTypes[2] = SimpleType.BOOLEAN;
-            descriptions[2] = "Whether the instance is root.";
-
-            itemTypes[3] = SimpleType.INTEGER;
-            descriptions[3] = "The SSH port that can be used to connect to the instance.";
-
-            itemTypes[4] = SimpleType.INTEGER;
-            descriptions[4] = "The RMI registry port that can be used to manage the instance.";
-
-            itemTypes[5] = SimpleType.INTEGER;
-            descriptions[5] = "The RMI server port that can be used to manage the instance.";
-
-            itemTypes[6] = SimpleType.STRING;
-            descriptions[6] = "The state of the instance.";
-
-            itemTypes[7] = SimpleType.STRING;
-            descriptions[7] = "The location of the instance.";
-
-            itemTypes[8] = SimpleType.STRING;
-            descriptions[8] = "The Java options of the instance.";
-
-            return new CompositeType("Instance", desc, itemNames, descriptions, itemTypes);
-        } catch (OpenDataException e) {
-            throw new IllegalStateException("Unable to build instance type", e);
-        }
-    }
-
-    private static TabularType createInstanceTableType() {
-        try {
-            return new TabularType("Instances", "Table of all Karaf instances", INSTANCE,
-                    new String[] {AdminServiceMBean.INSTANCE_NAME});
-        } catch (OpenDataException e) {
-            throw new IllegalStateException("Unable to build instance table type", e);
-        }
-    }
-
-    public static TabularData tableFrom(List<JmxInstance> instances) {
-        TabularDataSupport table = new TabularDataSupport(INSTANCE_TABLE);
-        for (JmxInstance instance : instances) {
-            table.put(instance.asCompositeData());
-        }
-        return table;
-    }
-
-}
diff --git a/karaf-2.3.x/admin/management/src/main/java/org/apache/karaf/admin/management/internal/AdminServiceMBeanImpl.java b/karaf-2.3.x/admin/management/src/main/java/org/apache/karaf/admin/management/internal/AdminServiceMBeanImpl.java
deleted file mode 100644
index 3eda345..0000000
--- a/karaf-2.3.x/admin/management/src/main/java/org/apache/karaf/admin/management/internal/AdminServiceMBeanImpl.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.management.internal;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import javax.management.NotCompliantMBeanException;
-import javax.management.StandardMBean;
-import javax.management.openmbean.TabularData;
-
-import org.apache.karaf.admin.management.AdminServiceMBean;
-import org.apache.karaf.admin.AdminService;
-import org.apache.karaf.admin.Instance;
-import org.apache.karaf.admin.InstanceSettings;
-import org.apache.karaf.admin.management.codec.JmxInstance;
-
-public class AdminServiceMBeanImpl extends StandardMBean implements AdminServiceMBean {
-
-    private AdminService adminService;
-
-    public AdminServiceMBeanImpl() throws NotCompliantMBeanException {
-        super(AdminServiceMBean.class);
-    }
-
-    public AdminService getAdminService() {
-        return adminService;
-    }
-
-    public void setAdminService(AdminService adminService) {
-        this.adminService = adminService;
-    }
-
-    public int createInstance(String name, int sshPort, int rmiRegistryPort, int rmiServerPort, String location, String javaOpts, String features, String featureURLs)
-            throws Exception {
-        if ("".equals(location)) {
-            location = null;
-        }
-        if ("".equals(javaOpts)) {
-            javaOpts = null;
-        }
-
-        InstanceSettings settings = new InstanceSettings(sshPort, rmiRegistryPort, rmiServerPort, location, javaOpts,
-                parseStringList(featureURLs), parseStringList(features));
-
-        Instance inst = adminService.createInstance(name, settings);
-        if (inst != null) {
-            return inst.getPid();
-        } else {
-            return -1;
-        }
-    }
-
-    public void changeSshPort(String name, int port) throws Exception {
-        getExistingInstance(name).changeSshPort(port);
-    }
-
-    public void changeRmiRegistryPort(String name, int port) throws Exception {
-        getExistingInstance(name).changeRmiRegistryPort(port);
-    }
-
-    public void changeRmiServerPort(String name, int port) throws Exception {
-        getExistingInstance(name).changeRmiServerPort(port);
-    }
-
-    public void changeJavaOpts(String name, String javaOpts) throws Exception {
-        getExistingInstance(name).changeJavaOpts(javaOpts);
-    }
-
-    public void destroyInstance(String name) throws Exception {
-        getExistingInstance(name).destroy();
-    }
-
-    public void startInstance(String name) throws Exception {
-        getExistingInstance(name).start(null);
-    }
-
-    public void startInstance(String name, String opts) throws Exception {
-        getExistingInstance(name).start(opts);
-    }
-
-    public void startInstance(String name, String opts, boolean wait) throws Exception {
-        Instance child = getExistingInstance(name);
-        if (wait) {
-            String state = child.getState();
-            if (Instance.STOPPED.equals(state)) {
-                child.start(opts);
-            }
-            if (!Instance.STARTED.equals(state)) {
-                do {
-                    Thread.sleep(500);
-                    state = child.getState();
-                } while (Instance.STARTING.equals(state));
-            }
-        } else {
-            child.start(opts);
-        }
-    }
-
-    public void stopInstance(String name) throws Exception {
-        getExistingInstance(name).stop();
-    }
-
-    public void renameInstance(String originalName, String newName) throws Exception {
-        adminService.renameInstance(originalName, newName);
-    }
-
-    public void cloneInstance(String name, String cloneName, int sshPort, int rmiRegistryPort, int rmiServerPort, String location, String javaOpts) throws Exception {
-        if ("".equals(location)) {
-            location = null;
-        }
-        if ("".equals(javaOpts)) {
-            javaOpts = null;
-        }
-
-        InstanceSettings settings = new InstanceSettings(sshPort, rmiRegistryPort, rmiServerPort, location, javaOpts, null, null);
-        adminService.cloneInstance(name, cloneName, settings);
-    }
-
-    public TabularData getInstances() throws Exception {
-        List<Instance> allInstances = Arrays.asList(adminService.getInstances());
-        List<JmxInstance> instances = new ArrayList<JmxInstance>();
-        for (Instance instance : allInstances) {
-            try {
-                instances.add(new JmxInstance(instance));
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-        TabularData table = JmxInstance.tableFrom(instances);
-        return table;
-    }
-
-    private Instance getExistingInstance(String name) {
-        Instance i = adminService.getInstance(name);
-        if (i == null) {
-            throw new IllegalArgumentException("Instance '" + name + "' does not exist");
-        }
-        return i;
-    }
-
-    private List<String> parseStringList(String value) {
-        List<String> list = new ArrayList<String>();
-        if (value != null) {
-            for (String el : value.split(",")) {
-                String trimmed = el.trim();
-                if (trimmed.length() == 0) {
-                    continue;
-                }
-                list.add(trimmed);
-            }
-        }
-        return list;
-    }
-}
diff --git a/karaf-2.3.x/admin/management/src/main/resources/OSGI-INF/blueprint/admin-management.xml b/karaf-2.3.x/admin/management/src/main/resources/OSGI-INF/blueprint/admin-management.xml
deleted file mode 100644
index 8d74b26..0000000
--- a/karaf-2.3.x/admin/management/src/main/resources/OSGI-INF/blueprint/admin-management.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="eager">
-
-    <reference id="adminService" interface="org.apache.karaf.admin.AdminService" />
-
-    <reference id="mbeanServer" interface="javax.management.MBeanServer">
-        <reference-listener ref="mbeanRegister" bind-method="registerMBeanServer" unbind-method="unregisterMBeanServer" />
-    </reference>
-
-    <bean id="mbeanImpl" class="org.apache.karaf.admin.management.internal.AdminServiceMBeanImpl">
-        <property name="adminService" ref="adminService" />
-    </bean>
-
-    <bean id="mbeanRegister" class="org.apache.karaf.management.MBeanRegistrer" init-method="init" destroy-method="destroy">
-        <property name="mbeans">
-            <map>
-                <entry value="org.apache.karaf:type=admin,name=${karaf.name}"
-                    key-ref="mbeanImpl" />
-            </map>
-        </property>
-    </bean>
-
-
-</blueprint>
diff --git a/karaf-2.3.x/admin/management/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/admin/management/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index c183bd4..0000000
--- a/karaf-2.3.x/admin/management/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,27 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides JMX MBeans related to the Karaf admin feature.
-
-    In particular, an AdminServiceMBean is provided that can be remotely administered using a JMX client (for instance
-    JConsole).
-
-    With this AdminServiceMBean, you have the following operations available:
-    \u001B[36mcreateInstance(name, sshPort, rmiPort, location, javaOpts, features, featureURLs)\u001B[0m Creates a new Karaf instance.
-    \u001B[36mchangeSshPort(name, port)\u001B[0m Changes the SSH port number of an existing Karaf instance.
-    \u001B[36mchangeRmiRegistryPort(name, port)\u001B[0m Changes the RMI registry port number of an existing Karaf instance.
-    \u001B[36mchangeRmiServerPort(name, port)\u001B[0m Changes the RMI server port number of an existing Karaf instance.
-    \u001B[36mchangeJavaOpts(name, javaopts)\u001B[0m Changes the Java options of an existing Karaf instance.
-    \u001B[36mdestroyInstance(name)\u001B[0m Destroys an existing Karaf instance.
-    \u001B[36mstartInstance(name)\u001B[0m Starts an existing Karaf instance.
-    \u001B[36mstopInstance(name)\u001B[0m Stops an existing Karaf instance.
-    \u001B[36mrenameInstance(originalName, newName)\u001B[0m Renames an existing Karaf instance.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[31mRemote Management via JMX\u001B[0m in the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/admin/management/src/test/java/org/apache/karaf/admin/management/codec/JmxInstanceTest.java b/karaf-2.3.x/admin/management/src/test/java/org/apache/karaf/admin/management/codec/JmxInstanceTest.java
deleted file mode 100644
index 02145ae..0000000
--- a/karaf-2.3.x/admin/management/src/test/java/org/apache/karaf/admin/management/codec/JmxInstanceTest.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.management.codec;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-
-import javax.management.openmbean.CompositeData;
-import javax.management.openmbean.CompositeType;
-import javax.management.openmbean.TabularData;
-import javax.management.openmbean.TabularType;
-
-import junit.framework.TestCase;
-import org.apache.karaf.admin.Instance;
-import org.apache.karaf.admin.management.AdminServiceMBean;
-import org.easymock.EasyMock;
-import org.junit.Assert;
-
-public class JmxInstanceTest extends TestCase {
-    public void testJMXInstanceStatics() {
-        CompositeType it = JmxInstance.INSTANCE;
-        Assert.assertEquals(
-            new HashSet<String>(Arrays.asList(AdminServiceMBean.INSTANCE)),
-            it.keySet());
-
-        TabularType tt = JmxInstance.INSTANCE_TABLE;
-        Assert.assertEquals("Instances", tt.getTypeName());
-    }
-
-    public void testJMXInstance() throws Exception {
-        Instance i = EasyMock.createMock(Instance.class);
-        EasyMock.expect(i.getPid()).andReturn(1712);
-        EasyMock.expect(i.getName()).andReturn("MyInstance");
-        EasyMock.expect(i.isRoot()).andReturn(false);
-        EasyMock.expect(i.getSshPort()).andReturn(0);
-        EasyMock.expect(i.getRmiRegistryPort()).andReturn(0);
-        EasyMock.expect(i.getRmiServerPort()).andReturn(0);
-        EasyMock.expect(i.getState()).andThrow(new Exception("gotcha"));
-        EasyMock.expect(i.getLocation()).andReturn("somewhere");
-        EasyMock.expect(i.getJavaOpts()).andReturn("someopts");
-        EasyMock.replay(i);
-        
-        JmxInstance ji = new JmxInstance(i);
-        TabularData td = JmxInstance.tableFrom(Collections.singletonList(ji));        
-        Collection<?> keys = (Collection<?>) td.keySet().iterator().next();
-        Assert.assertEquals("MyInstance", keys.iterator().next());
-        
-        CompositeData cd = td.get(keys.toArray());
-        Assert.assertEquals(1712, cd.get("Pid"));
-        Assert.assertEquals("MyInstance", cd.get("Name"));
-        Assert.assertEquals(false, cd.get("Is Root"));
-        Assert.assertEquals(0, cd.get("SSH Port"));
-        Assert.assertEquals(0, cd.get("RMI Registry Port"));
-        Assert.assertEquals(0, cd.get("RMI Server Port"));
-        Assert.assertEquals("Error", cd.get("State"));
-        Assert.assertEquals("somewhere", cd.get("Location"));
-        Assert.assertEquals("someopts", cd.get("JavaOpts"));
-    }
-
-    public void testJMXInstance2() throws Exception {
-        Instance i = EasyMock.createMock(Instance.class);
-        EasyMock.expect(i.getPid()).andReturn(1712);
-        EasyMock.expect(i.getName()).andReturn("MyInstance");
-        EasyMock.expect(i.isRoot()).andReturn(true);
-        EasyMock.expect(i.getSshPort()).andReturn(0);
-        EasyMock.expect(i.getRmiRegistryPort()).andReturn(0);
-        EasyMock.expect(i.getRmiServerPort()).andReturn(0);
-        EasyMock.expect(i.getState()).andReturn("Started");
-        EasyMock.expect(i.getLocation()).andReturn(null);
-        EasyMock.expect(i.getJavaOpts()).andReturn(null);
-        EasyMock.replay(i);
-        
-        JmxInstance ji = new JmxInstance(i);
-        TabularData td = JmxInstance.tableFrom(Collections.singletonList(ji));        
-        Collection<?> keys = (Collection<?>) td.keySet().iterator().next();
-        Assert.assertEquals("MyInstance", keys.iterator().next());
-        
-        CompositeData cd = td.get(keys.toArray());
-        Assert.assertEquals(1712, cd.get("Pid"));
-        Assert.assertEquals("MyInstance", cd.get("Name"));
-        Assert.assertEquals(true, cd.get("Is Root"));
-        Assert.assertEquals(0, cd.get("SSH Port"));
-        Assert.assertEquals(0, cd.get("RMI Registry Port"));
-        Assert.assertEquals(0, cd.get("RMI Server Port"));
-        Assert.assertEquals("Started", cd.get("State"));
-        Assert.assertNull(cd.get("Location"));
-        Assert.assertNull(cd.get("JavaOpts"));
-    }
-}
diff --git a/karaf-2.3.x/admin/management/src/test/java/org/apache/karaf/admin/management/internal/AdminServiceMBeanImplTest.java b/karaf-2.3.x/admin/management/src/test/java/org/apache/karaf/admin/management/internal/AdminServiceMBeanImplTest.java
deleted file mode 100644
index 1bc4bd2..0000000
--- a/karaf-2.3.x/admin/management/src/test/java/org/apache/karaf/admin/management/internal/AdminServiceMBeanImplTest.java
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.admin.management.internal;
-
-import java.util.Arrays;
-import java.util.Collections;
-
-import javax.management.openmbean.CompositeData;
-import javax.management.openmbean.TabularData;
-
-import junit.framework.TestCase;
-import org.apache.karaf.admin.AdminService;
-import org.apache.karaf.admin.Instance;
-import org.apache.karaf.admin.InstanceSettings;
-import org.easymock.EasyMock;
-import org.junit.Assert;
-
-public class AdminServiceMBeanImplTest extends TestCase {
-    public void testCreateInstance() throws Exception {
-        final InstanceSettings is = new InstanceSettings(123, 456, 789, "somewhere", "someopts",
-                Collections.<String>emptyList(), Arrays.asList("webconsole", "funfeat"));
-        
-        final Instance inst = EasyMock.createMock(Instance.class);
-        EasyMock.expect(inst.getPid()).andReturn(42);
-        EasyMock.replay(inst);
-
-        AdminService as = EasyMock.createMock(AdminService.class);
-        EasyMock.expect(as.createInstance("t1", is)).andReturn(inst);
-        EasyMock.replay(as);
-        
-        AdminServiceMBeanImpl ab = new AdminServiceMBeanImpl();
-        ab.setAdminService(as);
-        Assert.assertSame(as, ab.getAdminService());
-        
-        assertEquals(42, ab.createInstance("t1", 123, 456, 789, "somewhere", "someopts", " webconsole,  funfeat", ""));
-    }
-    
-    public void testCreateInstance2() throws Exception {
-        final InstanceSettings is = new InstanceSettings(0, 0, 0, null, null,
-                Collections.<String>emptyList(), Collections.<String>emptyList());
-        
-        AdminService as = EasyMock.createMock(AdminService.class);
-        EasyMock.expect(as.createInstance("t1", is)).andReturn(null);
-        EasyMock.replay(as);
-        
-        AdminServiceMBeanImpl ab = new AdminServiceMBeanImpl();
-        ab.setAdminService(as);
-        Assert.assertSame(as, ab.getAdminService());
-        
-        assertEquals(-1, ab.createInstance("t1", 0, 0, 0, "", "", "", ""));
-    }
-    
-    public void testGetInstances() throws Exception {       
-        Instance i1 = EasyMock.createMock(Instance.class);
-        EasyMock.expect(i1.getPid()).andReturn(1234);
-        EasyMock.expect(i1.getSshPort()).andReturn(8818);
-        EasyMock.expect(i1.getRmiRegistryPort()).andReturn(1122);
-        EasyMock.expect(i1.getRmiServerPort()).andReturn(44444);
-        EasyMock.expect(i1.getName()).andReturn("i1");
-        EasyMock.expect(i1.isRoot()).andReturn(true);
-        EasyMock.expect(i1.getLocation()).andReturn("somewhere");
-        EasyMock.expect(i1.getJavaOpts()).andReturn("someopts");
-        EasyMock.expect(i1.getState()).andReturn("Stopped");
-        EasyMock.replay(i1);
-        Instance i2 = EasyMock.createNiceMock(Instance.class);
-        EasyMock.expect(i2.getName()).andReturn("i2");
-        EasyMock.replay(i2);
-        
-        AdminService as = EasyMock.createMock(AdminService.class);
-        EasyMock.expect(as.getInstances()).andReturn(new Instance [] {i1, i2});
-        EasyMock.replay(as);
-
-        AdminServiceMBeanImpl ab = new AdminServiceMBeanImpl();
-        ab.setAdminService(as);
-        
-        TabularData td = ab.getInstances();
-        Assert.assertEquals(2, td.size());
-        CompositeData cd1 = td.get(new Object [] {"i1"});
-        Assert.assertTrue(cd1.containsValue("i1"));
-        Assert.assertTrue(cd1.containsValue(true));
-        Assert.assertTrue(cd1.containsValue(1234));
-        Assert.assertTrue(cd1.containsValue(8818));
-        Assert.assertTrue(cd1.containsValue(1122));
-        Assert.assertTrue(cd1.containsValue(44444));
-        Assert.assertTrue(cd1.containsValue("somewhere"));
-        Assert.assertTrue(cd1.containsValue("someopts"));
-        Assert.assertTrue(cd1.containsValue("Stopped"));
-
-        CompositeData cd2 = td.get(new Object [] {"i2"});
-        Assert.assertTrue(cd2.containsValue("i2"));
-    }
-    
-    public void testStartInstanceWithJavaOpts() throws Exception {
-        Instance inst = EasyMock.createMock(Instance.class);
-        inst.start("-x -y -z");
-        EasyMock.expectLastCall();
-        EasyMock.replay(inst);
-
-        AdminService as = EasyMock.createMock(AdminService.class);
-        EasyMock.expect(as.getInstance("test instance")).andReturn(inst);
-        EasyMock.replay(as);
-
-        AdminServiceMBeanImpl ab = new AdminServiceMBeanImpl();
-        ab.setAdminService(as);
-        Assert.assertSame(as, ab.getAdminService());
-
-        ab.startInstance("test instance", "-x -y -z");
-        EasyMock.verify(as);
-        EasyMock.verify(inst);
-    }
-
-    public void testStartInstanceWithNoJavaOpts() throws Exception {
-        Instance inst = EasyMock.createMock(Instance.class);
-        inst.start(null);
-        EasyMock.expectLastCall();
-        EasyMock.replay(inst);
-
-        AdminService as = EasyMock.createMock(AdminService.class);
-        EasyMock.expect(as.getInstance("test instance")).andReturn(inst);
-        EasyMock.replay(as);
-
-        AdminServiceMBeanImpl ab = new AdminServiceMBeanImpl();
-        ab.setAdminService(as);
-        Assert.assertSame(as, ab.getAdminService());
-
-        ab.startInstance("test instance", null);
-        EasyMock.verify(as);
-        EasyMock.verify(inst);
-    }
-
-    public void testStopInstance() throws Exception {
-        Instance inst = EasyMock.createMock(Instance.class);
-        inst.stop();
-        EasyMock.expectLastCall();
-        EasyMock.replay(inst);
-
-        AdminService as = EasyMock.createMock(AdminService.class);
-        EasyMock.expect(as.getInstance("test instance")).andReturn(inst);
-        EasyMock.replay(as);
-        
-        AdminServiceMBeanImpl ab = new AdminServiceMBeanImpl();
-        ab.setAdminService(as);
-        Assert.assertSame(as, ab.getAdminService());
-
-        ab.stopInstance("test instance");
-        EasyMock.verify(as);
-        EasyMock.verify(inst);
-    }
-
-    public void testDestroyInstance() throws Exception {
-        Instance inst = EasyMock.createMock(Instance.class);
-        inst.destroy();
-        EasyMock.expectLastCall();
-        EasyMock.replay(inst);
-
-        AdminService as = EasyMock.createMock(AdminService.class);
-        EasyMock.expect(as.getInstance("test instance")).andReturn(inst);
-        EasyMock.replay(as);
-        
-        AdminServiceMBeanImpl ab = new AdminServiceMBeanImpl();
-        ab.setAdminService(as);
-        Assert.assertSame(as, ab.getAdminService());
-
-        ab.destroyInstance("test instance");
-        EasyMock.verify(as);
-        EasyMock.verify(inst);
-    }
-
-    public void testSshChangePort() throws Exception {
-        Instance inst = EasyMock.createMock(Instance.class);
-        inst.changeSshPort(7788);
-        EasyMock.expectLastCall();
-        EasyMock.replay(inst);
-
-        AdminService as = EasyMock.createMock(AdminService.class);
-        EasyMock.expect(as.getInstance("test instance")).andReturn(inst);
-        EasyMock.replay(as);
-        
-        AdminServiceMBeanImpl ab = new AdminServiceMBeanImpl();
-        ab.setAdminService(as);
-        Assert.assertSame(as, ab.getAdminService());
-
-        ab.changeSshPort("test instance", 7788);
-        EasyMock.verify(as);
-        EasyMock.verify(inst);
-    }
-    
-    public void testRmiRegistryChangePort() throws Exception {
-        Instance inst = EasyMock.createMock(Instance.class);
-        inst.changeRmiRegistryPort(1123);
-        EasyMock.expectLastCall();
-        EasyMock.replay(inst);
-        
-        AdminService as = EasyMock.createMock(AdminService.class);
-        EasyMock.expect(as.getInstance("test instance")).andReturn(inst);
-        EasyMock.replay(as);
-        
-        AdminServiceMBeanImpl ab = new AdminServiceMBeanImpl();
-        ab.setAdminService(as);
-        Assert.assertSame(as, ab.getAdminService());
-        
-        ab.changeRmiRegistryPort("test instance", 1123);
-        EasyMock.verify(as);
-        EasyMock.verify(inst);
-    }
-
-    public void testRmiServerChangePort() throws Exception {
-        Instance inst = EasyMock.createMock(Instance.class);
-        inst.changeRmiServerPort(44444);
-        EasyMock.expectLastCall();
-        EasyMock.replay(inst);
-
-        AdminService as = EasyMock.createMock(AdminService.class);
-        EasyMock.expect(as.getInstance("test instance")).andReturn(inst);
-        EasyMock.replay(as);
-
-        AdminServiceMBeanImpl ab = new AdminServiceMBeanImpl();
-        ab.setAdminService(as);
-        Assert.assertSame(as, ab.getAdminService());
-
-        ab.changeRmiServerPort("test instance", 44444);
-        EasyMock.verify(as);
-        EasyMock.verify(inst);
-    }
-
-    public void testChangeOptions() throws Exception {
-        Instance inst = EasyMock.createMock(Instance.class);
-        inst.changeJavaOpts("new opts");
-        EasyMock.expectLastCall();
-        EasyMock.replay(inst);
-
-        AdminService as = EasyMock.createMock(AdminService.class);
-        EasyMock.expect(as.getInstance("test instance")).andReturn(inst);
-        EasyMock.replay(as);
-
-        AdminServiceMBeanImpl ab = new AdminServiceMBeanImpl();
-        ab.setAdminService(as);
-        Assert.assertSame(as, ab.getAdminService());
-
-        ab.changeJavaOpts("test instance", "new opts");
-        EasyMock.verify(as);
-        EasyMock.verify(inst);
-    }
-}
diff --git a/karaf-2.3.x/admin/pom.xml b/karaf-2.3.x/admin/pom.xml
deleted file mode 100644
index 8d58b0f..0000000
--- a/karaf-2.3.x/admin/pom.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>karaf</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.admin</groupId>
-    <artifactId>admin</artifactId>
-    <packaging>pom</packaging>
-    <name>Apache Karaf :: Admin</name>
-
-    <modules>
-        <module>core</module>
-        <module>command</module>
-        <module>management</module>
-    </modules>
-
-</project>
diff --git a/karaf-2.3.x/archetypes/assembly/NOTICE b/karaf-2.3.x/archetypes/assembly/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/archetypes/assembly/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/archetypes/assembly/pom.xml b/karaf-2.3.x/archetypes/assembly/pom.xml
deleted file mode 100644
index bf14340..0000000
--- a/karaf-2.3.x/archetypes/assembly/pom.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>archetypes</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.archetypes</groupId>
-    <artifactId>karaf-assembly-archetype</artifactId>
-    <packaging>maven-archetype</packaging>
-    <name>Apache Karaf :: Archetypes :: Assembly Archetype</name>
-    <description>An archetype for creating a Karaf assembly.</description>
-
-    <properties>
-        <archetype.version>2.2</archetype.version>
-    </properties>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-        </resources>
-        <extensions>
-            <extension>
-                <groupId>org.apache.maven.archetype</groupId>
-                <artifactId>archetype-packaging</artifactId>
-                <version>${archetype.version}</version>
-            </extension>
-        </extensions>
-
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-                <configuration>
-                    <delimiters>
-                        <delimiter>^*^</delimiter>
-                    </delimiters>
-                    <useDefaultDelimiters>false</useDefaultDelimiters>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-archetype-plugin</artifactId>
-            </plugin>
-        </plugins>
-
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-archetype-plugin</artifactId>
-                    <version>${archetype.version}</version>
-                    <extensions>true</extensions>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/assembly/src/main/resources/META-INF/maven/archetype-metadata.xml b/karaf-2.3.x/archetypes/assembly/src/main/resources/META-INF/maven/archetype-metadata.xml
deleted file mode 100644
index 9fae87c..0000000
--- a/karaf-2.3.x/archetypes/assembly/src/main/resources/META-INF/maven/archetype-metadata.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?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="karaf-assembly-archetype"
-        xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-
-    <fileSets>
-        <fileSet filtered="true" encoding="UTF-8">
-            <directory>src/main/descriptors</directory>
-            <includes>
-                <include>**/*.xml</include>
-            </includes>
-        </fileSet>
-        <fileSet filtered="true" encoding="UTF-8">
-            <directory>src/main/filtered-resources</directory>
-            <includes>
-                <include>**/*</include>
-            </includes>
-        </fileSet>
-    </fileSets>
-
-</archetype-descriptor>
diff --git a/karaf-2.3.x/archetypes/assembly/src/main/resources/archetype-resources/pom.xml b/karaf-2.3.x/archetypes/assembly/src/main/resources/archetype-resources/pom.xml
deleted file mode 100644
index 956631d..0000000
--- a/karaf-2.3.x/archetypes/assembly/src/main/resources/archetype-resources/pom.xml
+++ /dev/null
@@ -1,139 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>${groupId}</groupId>
-    <artifactId>${artifactId}</artifactId>
-    <version>${version}</version>
-    <packaging>pom</packaging>
-    <name>${artifactId} Karaf Assembly</name>
-    <description>This project creates a Karaf custom distribution that you can customize to fit your needs.</description>
-
-    <properties>
-        <karaf.version>^project.version^</karaf.version>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.karaf</groupId>
-            <artifactId>apache-karaf</artifactId>
-            <version>${karaf.version}</version>
-            <type>zip</type>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf</groupId>
-            <artifactId>apache-karaf</artifactId>
-            <version>${karaf.version}</version>
-            <type>tar.gz</type>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/filtered-resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-dependency-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>unpack-unix</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>unpack</goal>
-                        </goals>
-                        <configuration>
-                            <artifactItems>
-                                <artifactItem>
-                                    <groupId>org.apache.karaf</groupId>
-                                    <artifactId>apache-karaf</artifactId>
-                                    <type>tar.gz</type>
-                                    <outputDirectory>target/dependencies/unix</outputDirectory>
-                                </artifactItem>
-                            </artifactItems>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>unpack-windows</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>unpack</goal>
-                        </goals>
-                        <configuration>
-                            <artifactItems>
-                                <artifactItem>
-                                    <groupId>org.apache.karaf</groupId>
-                                    <artifactId>apache-karaf</artifactId>
-                                    <type>zip</type>
-                                    <outputDirectory>target/dependencies/windows</outputDirectory>
-                                </artifactItem>
-                            </artifactItems>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-assembly-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>unix-bin</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                        <configuration>
-                            <descriptors>
-                                <descriptor>src/main/descriptors/unix-bin.xml</descriptor>
-                            </descriptors>
-                            <finalName>${project.artifactId}-${project.version}</finalName>
-                            <tarLongFileMode>gnu</tarLongFileMode>
-                            <appendAssemblyId>false</appendAssemblyId>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>unix-windows</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                        <configuration>
-                            <descriptors>
-                                <descriptor>src/main/descriptors/windows-bin.xml</descriptor>
-                            </descriptors>
-                            <finalName>${project.artifactId}-${project.version}</finalName>
-                            <appendAssemblyId>false</appendAssemblyId>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/assembly/src/main/resources/archetype-resources/src/main/descriptors/unix-bin.xml b/karaf-2.3.x/archetypes/assembly/src/main/resources/archetype-resources/src/main/descriptors/unix-bin.xml
deleted file mode 100644
index 6a9b9b0..0000000
--- a/karaf-2.3.x/archetypes/assembly/src/main/resources/archetype-resources/src/main/descriptors/unix-bin.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?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.
--->
-<assembly>
-
-    <id>unix-bin</id>
-
-    <formats>
-        <format>tar.gz</format>
-    </formats>
-
-    <fileSets>
-
-        <!-- Karaf runtime -->
-        <fileSet>
-            <directory>target/dependencies/unix/apache-karaf-${karaf.version}</directory>
-            <outputDirectory>/</outputDirectory>
-            <excludes>
-                <exclude>**/demos/**</exclude>
-                <exclude>bin/**</exclude>
-                <exclude>karaf-manual*.*</exclude>
-            </excludes>
-        </fileSet>
-
-        <!-- Copy over bin/* separately to get the correct file mode -->
-        <fileSet>
-            <directory>target/dependencies/unix/apache-karaf-${karaf.version}</directory>
-            <outputDirectory>/</outputDirectory>
-            <includes>
-                <include>bin/admin</include>
-                <include>bin/karaf</include>
-                <include>bin/start</include>
-                <include>bin/stop</include>
-            </includes>
-            <fileMode>0755</fileMode>
-        </fileSet>
-
-    </fileSets>
-
-    <files>
-
-        <file>
-            <source>${project.basedir}/target/dependencies/unix/apache-karaf-${karaf.version}/bin/karaf</source>
-            <outputDirectory>/bin</outputDirectory>
-            <destName>custom</destName>
-            <fileMode>0755</fileMode>
-            <lineEnding>unix</lineEnding>
-        </file>
-
-    </files>
-
-</assembly>
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/assembly/src/main/resources/archetype-resources/src/main/descriptors/windows-bin.xml b/karaf-2.3.x/archetypes/assembly/src/main/resources/archetype-resources/src/main/descriptors/windows-bin.xml
deleted file mode 100644
index b788dbb..0000000
--- a/karaf-2.3.x/archetypes/assembly/src/main/resources/archetype-resources/src/main/descriptors/windows-bin.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?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.
--->
-<assembly>
-
-    <id>windows-bin</id>
-
-    <formats>
-        <format>zip</format>
-    </formats>
-
-    <fileSets>
-
-        <!-- Karaf runtime -->
-        <fileSet>
-            <directory>target/dependencies/windows/apache-karaf-${karaf.version}</directory>
-            <outputDirectory>/</outputDirectory>
-            <excludes>
-                <exclude>**/demos/**</exclude>
-                <exclude>bin/**</exclude>
-                <exclude>karaf-manual*.*</exclude>
-            </excludes>
-        </fileSet>
-
-        <!-- Copy over bin/* separately to get the correct file mode -->
-        <fileSet>
-            <directory>target/dependencies/windows/apache-karaf-${karaf.version}</directory>
-            <outputDirectory>/</outputDirectory>
-            <includes>
-                <include>bin/admin.bat</include>
-                <include>bin/karaf.bat</include>
-                <include>bin/start.bat</include>
-                <include>bin/stop.bat</include>
-            </includes>
-            <fileMode>0755</fileMode>
-        </fileSet>
-
-    </fileSets>
-
-    <files>
-
-        <file>
-            <source>${project.basedir}/target/dependencies/windows/apache-karaf-${karaf.version}/bin/karaf.bat</source>
-            <outputDirectory>/bin</outputDirectory>
-            <destName>custom.bat</destName>
-            <fileMode>0755</fileMode>
-            <lineEnding>unix</lineEnding>
-        </file>
-
-    </files>
-
-</assembly>
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/assembly/src/main/resources/archetype-resources/src/main/filtered-resources/etc/my.bundle.cfg b/karaf-2.3.x/archetypes/assembly/src/main/resources/archetype-resources/src/main/filtered-resources/etc/my.bundle.cfg
deleted file mode 100644
index ee0620e..0000000
--- a/karaf-2.3.x/archetypes/assembly/src/main/resources/archetype-resources/src/main/filtered-resources/etc/my.bundle.cfg
+++ /dev/null
@@ -1,21 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-# Custom configuration file
-key = value
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/assembly/src/test/resources/projects/assembly/archetype.properties b/karaf-2.3.x/archetypes/assembly/src/test/resources/projects/assembly/archetype.properties
deleted file mode 100644
index 3c053d3..0000000
--- a/karaf-2.3.x/archetypes/assembly/src/test/resources/projects/assembly/archetype.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-groupId=archetype.it
-artifactId=assembly
-version=1.0-SNAPSHOT
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/assembly/src/test/resources/projects/assembly/goal.txt b/karaf-2.3.x/archetypes/assembly/src/test/resources/projects/assembly/goal.txt
deleted file mode 100644
index deea798..0000000
--- a/karaf-2.3.x/archetypes/assembly/src/test/resources/projects/assembly/goal.txt
+++ /dev/null
@@ -1 +0,0 @@
-clean install verify
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/blueprint/NOTICE b/karaf-2.3.x/archetypes/blueprint/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/archetypes/blueprint/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/archetypes/blueprint/pom.xml b/karaf-2.3.x/archetypes/blueprint/pom.xml
deleted file mode 100644
index c0c2b70..0000000
--- a/karaf-2.3.x/archetypes/blueprint/pom.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>archetypes</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.archetypes</groupId>
-    <artifactId>karaf-blueprint-archetype</artifactId>
-    <packaging>maven-archetype</packaging>
-    <name>Apache Karaf :: Archetypes :: Blueprint Archetype</name>
-    <description>An archetype for creating a simple blueprint bundle.</description>
-
-    <properties>
-        <archetype.version>2.2</archetype.version>
-    </properties>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-        </resources>
-
-        <extensions>
-            <extension>
-                <groupId>org.apache.maven.archetype</groupId>
-                <artifactId>archetype-packaging</artifactId>
-                <version>${archetype.version}</version>
-            </extension>
-        </extensions>
-
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-                <configuration>
-                    <delimiters>
-                        <delimiter>^*^</delimiter>
-                    </delimiters>
-                    <useDefaultDelimiters>false</useDefaultDelimiters>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-archetype-plugin</artifactId>
-            </plugin>
-        </plugins>
-
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-archetype-plugin</artifactId>
-                    <version>${archetype.version}</version>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/blueprint/src/main/resources/META-INF/maven/archetype-metadata.xml b/karaf-2.3.x/archetypes/blueprint/src/main/resources/META-INF/maven/archetype-metadata.xml
deleted file mode 100644
index 636320e..0000000
--- a/karaf-2.3.x/archetypes/blueprint/src/main/resources/META-INF/maven/archetype-metadata.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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"
-                      xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
-                      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-                      name="karaf-blueprint-archetype">
-
-    <requiredProperties>
-        <requiredProperty key="package"/>
-    </requiredProperties>
-
-    <fileSets>
-        <fileSet filtered="true" packaged="true" encoding="UTF-8">
-            <directory>src/main/java</directory>
-            <includes>
-                <include>**/*.java</include>
-            </includes>
-        </fileSet>
-        <fileSet filtered="true" encoding="UTF-8">
-            <directory>src/main/resources</directory>
-            <includes>
-                <include>**/*.xml</include>
-            </includes>
-        </fileSet>
-    </fileSets>
-
-</archetype-descriptor>
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/blueprint/src/main/resources/archetype-resources/pom.xml b/karaf-2.3.x/archetypes/blueprint/src/main/resources/archetype-resources/pom.xml
deleted file mode 100644
index 207a8e8..0000000
--- a/karaf-2.3.x/archetypes/blueprint/src/main/resources/archetype-resources/pom.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>${groupId}</groupId>
-    <artifactId>${artifactId}</artifactId>
-    <version>${version}</version>
-    <packaging>bundle</packaging>
-
-    <name>${artifactId} Blueprint Bundle</name>
-    <description>${artifactId} OSGi blueprint bundle project.</description>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <version>^felix.plugin.version^</version>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
-                        <Bundle-Version>${project.version}</Bundle-Version>
-                        <Export-Package>
-                            ${package}*;version=${project.version}
-                        </Export-Package>
-                        <Import-Package>
-                            *
-                        </Import-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/blueprint/src/main/resources/archetype-resources/src/main/java/MyService.java b/karaf-2.3.x/archetypes/blueprint/src/main/resources/archetype-resources/src/main/java/MyService.java
deleted file mode 100644
index 29357b4..0000000
--- a/karaf-2.3.x/archetypes/blueprint/src/main/resources/archetype-resources/src/main/java/MyService.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * 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.
- */
-package ${package};
-
-public interface MyService {
-
-    public String echo(String message);
-
-}
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/blueprint/src/main/resources/archetype-resources/src/main/java/MyServiceImpl.java b/karaf-2.3.x/archetypes/blueprint/src/main/resources/archetype-resources/src/main/java/MyServiceImpl.java
deleted file mode 100644
index bc0ba43..0000000
--- a/karaf-2.3.x/archetypes/blueprint/src/main/resources/archetype-resources/src/main/java/MyServiceImpl.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * 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.
- */
-package ${package};
-
-public class MyServiceImpl implements MyService {
-
-    public String echo(String message) {
-        return "Echo processed: " + message;
-    }
-
-}
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/blueprint/src/main/resources/archetype-resources/src/main/resources/OSGI-INF/blueprint/my-service.xml b/karaf-2.3.x/archetypes/blueprint/src/main/resources/archetype-resources/src/main/resources/OSGI-INF/blueprint/my-service.xml
deleted file mode 100644
index 0acda83..0000000
--- a/karaf-2.3.x/archetypes/blueprint/src/main/resources/archetype-resources/src/main/resources/OSGI-INF/blueprint/my-service.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?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.
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
-
-    <bean id="serviceBean" class="${package}.MyServiceImpl"/>
-
-    <service ref="serviceBean" interface="${package}.MyService"/>
-
-</blueprint>
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/blueprint/src/test/resources/projects/blueprint/archetype.properties b/karaf-2.3.x/archetypes/blueprint/src/test/resources/projects/blueprint/archetype.properties
deleted file mode 100644
index 84b7147..0000000
--- a/karaf-2.3.x/archetypes/blueprint/src/test/resources/projects/blueprint/archetype.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-groupId=archetype.it
-artifactId=blueprint
-version=1.0-SNAPSHOT
-package=org.apache.karaf.archetype.it
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/blueprint/src/test/resources/projects/blueprint/goal.txt b/karaf-2.3.x/archetypes/blueprint/src/test/resources/projects/blueprint/goal.txt
deleted file mode 100644
index deea798..0000000
--- a/karaf-2.3.x/archetypes/blueprint/src/test/resources/projects/blueprint/goal.txt
+++ /dev/null
@@ -1 +0,0 @@
-clean install verify
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/bundle/NOTICE b/karaf-2.3.x/archetypes/bundle/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/archetypes/bundle/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/archetypes/bundle/pom.xml b/karaf-2.3.x/archetypes/bundle/pom.xml
deleted file mode 100644
index daa81fc..0000000
--- a/karaf-2.3.x/archetypes/bundle/pom.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>archetypes</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.archetypes</groupId>
-    <artifactId>karaf-bundle-archetype</artifactId>
-    <packaging>maven-archetype</packaging>
-    <name>Apache Karaf :: Archetypes :: Bundle Archetype</name>
-    <description>A simple bundle archetype.</description>
-
-    <properties>
-        <archetype.version>2.2</archetype.version>
-    </properties>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-        </resources>
-
-        <extensions>
-            <extension>
-                <groupId>org.apache.maven.archetype</groupId>
-                <artifactId>archetype-packaging</artifactId>
-                <version>${archetype.version}</version>
-            </extension>
-        </extensions>
-
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-                <configuration>
-                    <delimiters>
-                        <delimiter>^*^</delimiter>
-                    </delimiters>
-                    <useDefaultDelimiters>false</useDefaultDelimiters>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-archetype-plugin</artifactId>
-            </plugin>
-        </plugins>
-
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-archetype-plugin</artifactId>
-                    <version>${archetype.version}</version>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml b/karaf-2.3.x/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml
deleted file mode 100644
index 5cf9079..0000000
--- a/karaf-2.3.x/archetypes/bundle/src/main/resources/META-INF/maven/archetype-metadata.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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"
-                      xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
-                      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-                      name="karaf-bundle-archetype">
-
-    <requiredProperties>
-        <requiredProperty key="package"/>
-    </requiredProperties>
-
-    <fileSets>
-        <fileSet filtered="true" packaged="true" encoding="UTF-8">
-            <directory>src/main/java</directory>
-            <includes>
-                <include>**/*.java</include>
-            </includes>
-        </fileSet>
-    </fileSets>
-
-</archetype-descriptor>
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/bundle/src/main/resources/archetype-resources/pom.xml b/karaf-2.3.x/archetypes/bundle/src/main/resources/archetype-resources/pom.xml
deleted file mode 100644
index f61b83d..0000000
--- a/karaf-2.3.x/archetypes/bundle/src/main/resources/archetype-resources/pom.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>${groupId}</groupId>
-    <artifactId>${artifactId}</artifactId>
-    <version>${version}</version>
-    <packaging>bundle</packaging>
-
-    <name>${artifactId} Bundle</name>
-    <description>${artifactId} OSGi bundle project.</description>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <version>^osgi.version^</version>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <version>^felix.plugin.version^</version>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
-                        <Bundle-Version>${project.version}</Bundle-Version>
-                        <Bundle-Activator>${package}.Activator</Bundle-Activator>
-                        <Export-Package>
-                            ${package}*;version=${project.version}
-                        </Export-Package>
-                        <Import-Package>
-                            *
-                        </Import-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/archetypes/bundle/src/main/resources/archetype-resources/src/main/java/Activator.java b/karaf-2.3.x/archetypes/bundle/src/main/resources/archetype-resources/src/main/java/Activator.java
deleted file mode 100644
index 01edbbc..0000000
--- a/karaf-2.3.x/archetypes/bundle/src/main/resources/archetype-resources/src/main/java/Activator.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.
- */
-package ${package};
-
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-
-public class Activator implements BundleActivator {
-
-    public void start(BundleContext context) {
-        System.out.println("Starting the bundle");
-    }
-
-    public void stop(BundleContext context) {
-        System.out.println("Stopping the bundle");
-    }
-
-}
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/bundle/src/test/resources/projects/bundle/archetype.properties b/karaf-2.3.x/archetypes/bundle/src/test/resources/projects/bundle/archetype.properties
deleted file mode 100644
index 2129605..0000000
--- a/karaf-2.3.x/archetypes/bundle/src/test/resources/projects/bundle/archetype.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-groupId=archetype.it
-artifactId=bundle
-version=1.0-SNAPSHOT
-package=org.apache.karaf.archetype.it
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/bundle/src/test/resources/projects/bundle/goal.txt b/karaf-2.3.x/archetypes/bundle/src/test/resources/projects/bundle/goal.txt
deleted file mode 100644
index deea798..0000000
--- a/karaf-2.3.x/archetypes/bundle/src/test/resources/projects/bundle/goal.txt
+++ /dev/null
@@ -1 +0,0 @@
-clean install verify
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/command/NOTICE b/karaf-2.3.x/archetypes/command/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/archetypes/command/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/archetypes/command/pom.xml b/karaf-2.3.x/archetypes/command/pom.xml
deleted file mode 100644
index 785c280..0000000
--- a/karaf-2.3.x/archetypes/command/pom.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>archetypes</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.archetypes</groupId>
-    <artifactId>karaf-command-archetype</artifactId>
-    <packaging>maven-archetype</packaging>
-    <name>Apache Karaf :: Archetypes :: Command Archetype</name>
-    <description>A Karaf command archetype.</description>
-
-    <properties>
-        <archetype.version>2.2</archetype.version>
-    </properties>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-        </resources>
-
-        <extensions>
-            <extension>
-                <groupId>org.apache.maven.archetype</groupId>
-                <artifactId>archetype-packaging</artifactId>
-                <version>${archetype.version}</version>
-            </extension>
-        </extensions>
-
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-                <configuration>
-                    <delimiters>
-                        <delimiter>^*^</delimiter>
-                    </delimiters>
-                    <useDefaultDelimiters>false</useDefaultDelimiters>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-archetype-plugin</artifactId>
-            </plugin>
-        </plugins>
-
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-archetype-plugin</artifactId>
-                    <version>${archetype.version}</version>
-                    <extensions>true</extensions>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/archetypes/command/src/main/resources/META-INF/maven/archetype-metadata.xml b/karaf-2.3.x/archetypes/command/src/main/resources/META-INF/maven/archetype-metadata.xml
deleted file mode 100644
index c869b8a..0000000
--- a/karaf-2.3.x/archetypes/command/src/main/resources/META-INF/maven/archetype-metadata.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?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="karaf-command-archetype"
-        xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-
-    <requiredProperties>
-        <requiredProperty key="scope"/>
-        <requiredProperty key="command"/>
-        <requiredProperty key="description"/>
-        <requiredProperty key="package"/>
-    </requiredProperties>
-
-    <fileSets>
-        <fileSet filtered="true" packaged="true" encoding="UTF-8">
-            <directory>src/main/java</directory>
-            <includes>
-                <include>**/*.java</include>
-            </includes>
-        </fileSet>
-        <fileSet filtered="true" encoding="UTF-8">
-            <directory>src/main/resources</directory>
-            <includes>
-                <include>**/*.xml</include>
-                <include>**/*.properties</include>
-            </includes>
-        </fileSet>
-        <fileSet filtered="true" packaged="true" encoding="UTF-8">
-            <directory>src/test/java</directory>
-            <includes>
-                <include>**/*.java</include>
-            </includes>
-        </fileSet>
-    </fileSets>
-
-</archetype-descriptor>
diff --git a/karaf-2.3.x/archetypes/command/src/main/resources/archetype-resources/pom.xml b/karaf-2.3.x/archetypes/command/src/main/resources/archetype-resources/pom.xml
deleted file mode 100644
index ce0489c..0000000
--- a/karaf-2.3.x/archetypes/command/src/main/resources/archetype-resources/pom.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>${groupId}</groupId>
-    <artifactId>${artifactId}</artifactId>
-    <packaging>bundle</packaging>
-    <version>${version}</version>
-    <name>Apache Karaf :: Shell ${scope} Commands</name>
-    <description>Provides the OSGi ${scope} commands</description>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-            <version>^project.version^</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <version>^osgi.version^</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <version>^osgi.version^</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.servicemix.bundles</groupId>
-            <artifactId>org.apache.servicemix.bundles.junit</artifactId>
-            <version>^junit.bundle.version^</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>2.3.2</version>
-                <inherited>true</inherited>
-                <configuration>
-                    <source>1.5</source>
-                    <target>1.5</target>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <version>^felix.plugin.version^</version>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
-                        <Export-Package>${package}*;version=${project.version}</Export-Package>
-                        <Import-Package>!${project.artifactId}*,
-                            org.apache.felix.service.command,
-                            org.apache.felix.gogo.commands,
-                            org.apache.karaf.shell.console,
-                            *
-                        </Import-Package>
-                        <Private-Package>!*</Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/archetypes/command/src/main/resources/archetype-resources/src/main/java/__command__.java b/karaf-2.3.x/archetypes/command/src/main/resources/archetype-resources/src/main/java/__command__.java
deleted file mode 100644
index b118d09..0000000
--- a/karaf-2.3.x/archetypes/command/src/main/resources/archetype-resources/src/main/java/__command__.java
+++ /dev/null
@@ -1,37 +0,0 @@
-##---------------------------------------------------------------------------
-##  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 = '\' )
-#set( $cmd =  $command.toLowerCase())
-package ${package};
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-
-
-/**
- * Displays the last log entries
- */
-@Command(scope = "${scope}", name = "${cmd}", description = "${description}")
-public class ${command} extends OsgiCommandSupport {
-
-    protected Object doExecute() throws Exception {
-         System.out.println("Executing command ${cmd}");
-         return null;
-    }
-}
diff --git a/karaf-2.3.x/archetypes/command/src/main/resources/archetype-resources/src/main/resources/OSGI-INF/blueprint/shell-log.xml b/karaf-2.3.x/archetypes/command/src/main/resources/archetype-resources/src/main/resources/OSGI-INF/blueprint/shell-log.xml
deleted file mode 100644
index d705e86..0000000
--- a/karaf-2.3.x/archetypes/command/src/main/resources/archetype-resources/src/main/resources/OSGI-INF/blueprint/shell-log.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?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.
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.0.0">
-        <command name="${scope}/${cmd}">
-            <action class="${package}.${command}">
-            </action>
-        </command>
-    </command-bundle>
-</blueprint>
diff --git a/karaf-2.3.x/archetypes/command/src/main/resources/archetype-resources/src/test/java/__command__Test.java b/karaf-2.3.x/archetypes/command/src/main/resources/archetype-resources/src/test/java/__command__Test.java
deleted file mode 100644
index 07844ac..0000000
--- a/karaf-2.3.x/archetypes/command/src/main/resources/archetype-resources/src/test/java/__command__Test.java
+++ /dev/null
@@ -1,47 +0,0 @@
-##---------------------------------------------------------------------------
-##  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 = '\' )
-
-package ${package};
-
-
-import junit.framework.TestCase;
-
-/**
- * Test cases for {@link ${command}}
- */
-@SuppressWarnings("unchecked")
-public class ${command}Test extends TestCase {
-    
-    private ${command} command;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-    }
-    
-    @Override
-    protected void tearDown() throws Exception {
-        super.tearDown();
-    }
-    
-	public void testCommand() {
-
-	}
-}
diff --git a/karaf-2.3.x/archetypes/command/src/test/resources/projects/command/archetype.properties b/karaf-2.3.x/archetypes/command/src/test/resources/projects/command/archetype.properties
deleted file mode 100644
index 4768603..0000000
--- a/karaf-2.3.x/archetypes/command/src/test/resources/projects/command/archetype.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-################################################################################
-#
-#    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=cmd
-scope=test
-command=cmd
-description=Test Command
-package=org.apache.karaf.archetype.it
diff --git a/karaf-2.3.x/archetypes/command/src/test/resources/projects/command/goal.txt b/karaf-2.3.x/archetypes/command/src/test/resources/projects/command/goal.txt
deleted file mode 100644
index deea798..0000000
--- a/karaf-2.3.x/archetypes/command/src/test/resources/projects/command/goal.txt
+++ /dev/null
@@ -1 +0,0 @@
-clean install verify
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/feature/NOTICE b/karaf-2.3.x/archetypes/feature/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/archetypes/feature/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/archetypes/feature/pom.xml b/karaf-2.3.x/archetypes/feature/pom.xml
deleted file mode 100644
index c0b4d9b..0000000
--- a/karaf-2.3.x/archetypes/feature/pom.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>archetypes</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.archetypes</groupId>
-    <artifactId>karaf-feature-archetype</artifactId>
-    <packaging>maven-archetype</packaging>
-    <name>Apache Karaf :: Archetypes :: Feature Archetype</name>
-    <description>This archetype sets up an empty karaf features project.</description>
-
-    <properties>
-        <archetype.version>2.2</archetype.version>
-    </properties>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-        </resources>
-
-        <extensions>
-            <extension>
-                <groupId>org.apache.maven.archetype</groupId>
-                <artifactId>archetype-packaging</artifactId>
-                <version>${archetype.version}</version>
-            </extension>
-        </extensions>
-
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-                <configuration>
-                    <delimiters>
-                        <delimiter>^*^</delimiter>
-                    </delimiters>
-                    <useDefaultDelimiters>false</useDefaultDelimiters>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-archetype-plugin</artifactId>
-            </plugin>
-        </plugins>
-
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-archetype-plugin</artifactId>
-                    <version>${archetype.version}</version>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/archetypes/feature/src/main/resources/META-INF/maven/archetype-metadata.xml b/karaf-2.3.x/archetypes/feature/src/main/resources/META-INF/maven/archetype-metadata.xml
deleted file mode 100644
index cc2ab74..0000000
--- a/karaf-2.3.x/archetypes/feature/src/main/resources/META-INF/maven/archetype-metadata.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?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"
-                      xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
-                      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-                      name="karaf-feature-archetype">
-
-</archetype-descriptor>
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/feature/src/main/resources/archetype-resources/pom.xml b/karaf-2.3.x/archetypes/feature/src/main/resources/archetype-resources/pom.xml
deleted file mode 100644
index 1b086a0..0000000
--- a/karaf-2.3.x/archetypes/feature/src/main/resources/archetype-resources/pom.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>${groupId}</groupId>
-    <artifactId>${artifactId}</artifactId>
-    <version>${version}</version>
-    <packaging>pom</packaging>
-    <name>${artifactId} feature</name>
-    <description>Create a feature with the defined dependencies set.</description>
-
-    <dependencies>
-        <!-- Put here the artifacts which should be included in the feature -->
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.karaf.tooling</groupId>
-                <artifactId>features-maven-plugin</artifactId>
-                <version>^project.version^</version>
-                <executions>
-                    <execution>
-                        <id>generate-features-file</id>
-                        <goals>
-                            <goal>generate-features-file</goal>
-                        </goals>
-                        <configuration>
-                            <karafVersion>^project.version^</karafVersion>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/feature/src/test/resources/projects/feature/archetype.properties b/karaf-2.3.x/archetypes/feature/src/test/resources/projects/feature/archetype.properties
deleted file mode 100644
index b988b4a..0000000
--- a/karaf-2.3.x/archetypes/feature/src/test/resources/projects/feature/archetype.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-groupId=archetype.it
-artifactId=feature
-version=1.0-SNAPSHOT
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/feature/src/test/resources/projects/feature/goal.txt b/karaf-2.3.x/archetypes/feature/src/test/resources/projects/feature/goal.txt
deleted file mode 100644
index deea798..0000000
--- a/karaf-2.3.x/archetypes/feature/src/test/resources/projects/feature/goal.txt
+++ /dev/null
@@ -1 +0,0 @@
-clean install verify
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/kar/NOTICE b/karaf-2.3.x/archetypes/kar/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/archetypes/kar/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/archetypes/kar/pom.xml b/karaf-2.3.x/archetypes/kar/pom.xml
deleted file mode 100644
index b94cab7..0000000
--- a/karaf-2.3.x/archetypes/kar/pom.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>archetypes</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.archetypes</groupId>
-    <artifactId>karaf-kar-archetype</artifactId>
-    <packaging>maven-archetype</packaging>
-    <name>Apache Karaf :: Archetypes :: Kar Archetype</name>
-    <description>This archetype creates a KAR file from a provided features XML.</description>
-
-    <properties>
-        <archetype.version>2.2</archetype.version>
-    </properties>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-        </resources>
-        <extensions>
-            <extension>
-                <groupId>org.apache.maven.archetype</groupId>
-                <artifactId>archetype-packaging</artifactId>
-                <version>${archetype.version}</version>
-            </extension>
-        </extensions>
-
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-                <configuration>
-                    <delimiters>
-                        <delimiter>^*^</delimiter>
-                    </delimiters>
-                    <useDefaultDelimiters>false</useDefaultDelimiters>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-archetype-plugin</artifactId>
-            </plugin>
-        </plugins>
-
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-archetype-plugin</artifactId>
-                    <version>${archetype.version}</version>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/archetypes/kar/src/main/resources/META-INF/maven/archetype-metadata.xml b/karaf-2.3.x/archetypes/kar/src/main/resources/META-INF/maven/archetype-metadata.xml
deleted file mode 100644
index 8784fe9..0000000
--- a/karaf-2.3.x/archetypes/kar/src/main/resources/META-INF/maven/archetype-metadata.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?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"
-                      xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
-                      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-                      name="karaf-kar-archetype">
-
-    <fileSets>
-        <fileSet filtered="true" encoding="UTF-8">
-            <directory>src/main/feature</directory>
-            <includes>
-                <include>feature.xml</include>
-            </includes>
-        </fileSet>
-    </fileSets>
-
-</archetype-descriptor>
diff --git a/karaf-2.3.x/archetypes/kar/src/main/resources/archetype-resources/pom.xml b/karaf-2.3.x/archetypes/kar/src/main/resources/archetype-resources/pom.xml
deleted file mode 100644
index b18449d..0000000
--- a/karaf-2.3.x/archetypes/kar/src/main/resources/archetype-resources/pom.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>${groupId}</groupId>
-    <artifactId>${artifactId}</artifactId>
-    <version>${version}</version>
-    <packaging>pom</packaging>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.karaf.tooling</groupId>
-                <artifactId>features-maven-plugin</artifactId>
-                <version>^project.version^</version>
-                <executions>
-                    <execution>
-                        <id>create-kar</id>
-                        <goals>
-                            <goal>create-kar</goal>
-                        </goals>
-                        <configuration>
-                            <featuresFile>${project.basedir}/src/main/feature/feature.xml</featuresFile>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/kar/src/main/resources/archetype-resources/src/main/feature/feature.xml b/karaf-2.3.x/archetypes/kar/src/main/resources/archetype-resources/src/main/feature/feature.xml
deleted file mode 100644
index 42ac002..0000000
--- a/karaf-2.3.x/archetypes/kar/src/main/resources/archetype-resources/src/main/feature/feature.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?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.
--->
-<features name="${project.artifactId}-${project.version}">
-    <feature name="${project.artifactId}" description="${project.name}" version="${project.version}" resolver="(obr)">
-        <details>${project.description}</details>
-        <!-- Put here the bundles and configuration files -->
-        <!-- <bundle>mvn:commons-lang/commons-lang/2.6</bundle> -->
-    </feature>
-</features>
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/kar/src/test/resources/projects/kar/archetype.properties b/karaf-2.3.x/archetypes/kar/src/test/resources/projects/kar/archetype.properties
deleted file mode 100644
index 10c289f..0000000
--- a/karaf-2.3.x/archetypes/kar/src/test/resources/projects/kar/archetype.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-groupId=archetype.it
-artifactId=kar
-version=1.0-SNAPSHOT
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/kar/src/test/resources/projects/kar/goal.txt b/karaf-2.3.x/archetypes/kar/src/test/resources/projects/kar/goal.txt
deleted file mode 100644
index deea798..0000000
--- a/karaf-2.3.x/archetypes/kar/src/test/resources/projects/kar/goal.txt
+++ /dev/null
@@ -1 +0,0 @@
-clean install verify
\ No newline at end of file
diff --git a/karaf-2.3.x/archetypes/pom.xml b/karaf-2.3.x/archetypes/pom.xml
deleted file mode 100644
index efffb8b..0000000
--- a/karaf-2.3.x/archetypes/pom.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-    
-    <modelVersion>4.0.0</modelVersion>
-    
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>karaf</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>archetypes</artifactId>
-
-    <name>Apache Karaf :: Archetypes</name>
-    <packaging>pom</packaging>
-
-    <modules>
-        <module>assembly</module>
-        <module>blueprint</module>
-        <module>bundle</module>
-        <module>command</module>
-        <module>feature</module>
-        <module>kar</module>
-    </modules>
-
-</project>
diff --git a/karaf-2.3.x/assemblies/apache-karaf/.gitignore b/karaf-2.3.x/assemblies/apache-karaf/.gitignore
deleted file mode 100644
index 38afe6e..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-!bin
diff --git a/karaf-2.3.x/assemblies/apache-karaf/pom.xml b/karaf-2.3.x/assemblies/apache-karaf/pom.xml
deleted file mode 100644
index b30927c..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/pom.xml
+++ /dev/null
@@ -1,729 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-	    <groupId>org.apache.karaf.assemblies</groupId>
-	    <artifactId>assemblies</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf</groupId>
-    <artifactId>apache-karaf</artifactId>
-    <packaging>pom</packaging>
-    <name>Apache Karaf :: Assembly</name>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-         <dependency>
-            <groupId>org.apache.karaf</groupId>
-            <artifactId>org.apache.karaf.main</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf</groupId>
-            <artifactId>org.apache.karaf.exception</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf</groupId>
-            <artifactId>org.apache.karaf.client</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.deployer</groupId>
-            <artifactId>org.apache.karaf.deployer.spring</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.deployer</groupId>
-            <artifactId>org.apache.karaf.deployer.blueprint</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.deployer</groupId>
-            <artifactId>org.apache.karaf.deployer.features</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.deployer</groupId>
-            <artifactId>org.apache.karaf.deployer.kar</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.deployer</groupId>
-            <artifactId>org.apache.karaf.deployer.wrap</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.features</groupId>
-            <artifactId>org.apache.karaf.features.core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.features</groupId>
-            <artifactId>org.apache.karaf.features.command</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.features</groupId>
-            <artifactId>org.apache.karaf.features.management</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.features</groupId>
-            <artifactId>org.apache.karaf.features.obr</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.diagnostic</groupId>
-            <artifactId>org.apache.karaf.diagnostic.core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.diagnostic</groupId>
-            <artifactId>org.apache.karaf.diagnostic.common</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.diagnostic</groupId>
-            <artifactId>org.apache.karaf.diagnostic.command</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.diagnostic</groupId>
-            <artifactId>org.apache.karaf.diagnostic.management</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.admin</groupId>
-            <artifactId>org.apache.karaf.admin.core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.admin</groupId>
-            <artifactId>org.apache.karaf.admin.command</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.admin</groupId>
-            <artifactId>org.apache.karaf.admin.management</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.obr</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.osgi</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.log</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.config</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.packages</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.commands</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.ssh</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.dev</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.jaas</groupId>
-            <artifactId>org.apache.karaf.jaas.boot</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.jaas</groupId>
-            <artifactId>org.apache.karaf.jaas.config</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.jaas</groupId>
-            <artifactId>org.apache.karaf.jaas.modules</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.jaas</groupId>
-            <artifactId>org.apache.karaf.jaas.command</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.management</groupId>
-            <artifactId>org.apache.karaf.management.server</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.management.mbeans</groupId>
-            <artifactId>org.apache.karaf.management.mbeans.config</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.webconsole</groupId>
-            <artifactId>org.apache.karaf.webconsole.admin</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.webconsole</groupId>
-            <artifactId>org.apache.karaf.webconsole.branding</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.webconsole</groupId>
-            <artifactId>org.apache.karaf.webconsole.console</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.webconsole</groupId>
-            <artifactId>org.apache.karaf.webconsole.features</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.webconsole</groupId>
-            <artifactId>org.apache.karaf.webconsole.gogo</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.osgi</groupId>
-            <artifactId>spring-osgi-extender</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.osgi</groupId>
-            <artifactId>spring-osgi-core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.osgi</groupId>
-            <artifactId>spring-osgi-io</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.osgi</groupId>
-            <artifactId>spring-osgi-annotation</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-context</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-beans</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-aop</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.bundlerepository</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.fileinstall</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.mina</groupId>
-            <artifactId>mina-core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.configadmin</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.eventadmin</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.metatype</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.webconsole</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.logging</groupId>
-            <artifactId>pax-logging-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.logging</groupId>
-            <artifactId>pax-logging-service</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.url</groupId>
-            <artifactId>pax-url-mvn</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.url</groupId>
-            <artifactId>pax-url-wrap</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.sshd</groupId>
-            <artifactId>sshd-core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.eclipse</groupId>
-            <artifactId>osgi</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.framework</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.aries.blueprint</groupId>
-            <artifactId>org.apache.aries.blueprint.api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.aries.blueprint</groupId>
-            <artifactId>org.apache.aries.blueprint.core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.aries.blueprint</groupId>
-            <artifactId>org.apache.aries.blueprint.cm</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.aries.proxy</groupId>
-            <artifactId>org.apache.aries.proxy.api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.aries.proxy</groupId>
-            <artifactId>org.apache.aries.proxy.impl</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.aries</groupId>
-            <artifactId>org.apache.aries.util</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.aries.jmx</groupId>
-            <artifactId>org.apache.aries.jmx.api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.aries.jmx</groupId>
-            <artifactId>org.apache.aries.jmx.core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.aries.jmx</groupId>
-            <artifactId>org.apache.aries.jmx.blueprint.api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.aries.jmx</groupId>
-            <artifactId>org.apache.aries.jmx.blueprint.core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.geronimo.specs</groupId>
-            <artifactId>geronimo-servlet_2.5_spec</artifactId>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-util</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-io</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-http</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-continuation</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-server</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-security</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-servlet</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.eclipse.jetty</groupId>
-            <artifactId>jetty-xml</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.ow2.asm</groupId>
-            <artifactId>asm-all</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.web</groupId>
-            <artifactId>pax-web-api</artifactId>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.web</groupId>
-            <artifactId>pax-web-spi</artifactId>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.web</groupId>
-            <artifactId>pax-web-runtime</artifactId>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.web</groupId>
-            <artifactId>pax-web-jetty</artifactId>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.web</groupId>
-            <artifactId>pax-web-jsp</artifactId>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.web</groupId>
-            <artifactId>pax-web-extender-war</artifactId>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.web</groupId>
-            <artifactId>pax-web-extender-whiteboard</artifactId>
-            <optional>true</optional>
-        </dependency>
-         <dependency>
-            <groupId>org.ops4j.pax.web</groupId>
-            <artifactId>pax-web-deployer</artifactId>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicemix.specs</groupId>
-            <artifactId>org.apache.servicemix.specs.activator</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicemix.specs</groupId>
-            <artifactId>org.apache.servicemix.specs.locator</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicemix.specs</groupId>
-            <artifactId>org.apache.servicemix.specs.jaxp-api-1.4</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicemix.specs</groupId>
-            <artifactId>org.apache.servicemix.specs.jaxb-api-2.2</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicemix.specs</groupId>
-            <artifactId>org.apache.servicemix.specs.jaxws-api-2.2</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicemix.specs</groupId>
-            <artifactId>org.apache.servicemix.specs.saaj-api-1.3</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicemix.specs</groupId>
-            <artifactId>org.apache.servicemix.specs.stax-api-1.2</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/filtered-resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources/extra</directory>
-                <filtering>false</filtering>
-                <excludes>
-                    <exclude>**/*</exclude>
-                </excludes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-                <configuration>
-                    <useDefaultDelimiters>false</useDefaultDelimiters>
-                    <delimiters>
-                        <delimiter>${*}</delimiter>
-                    </delimiters>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>filter</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>resources</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-dependency-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>copy</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>copy</goal>
-                        </goals>
-                        <configuration>
-                            <artifactItems>
-                                <artifactItem>
-                                    <groupId>org.apache.karaf</groupId>
-                                    <artifactId>org.apache.karaf.main</artifactId>
-                                    <outputDirectory>target/dependencies/lib</outputDirectory>
-                                    <destFileName>karaf.jar</destFileName>
-                                </artifactItem>
-                                <artifactItem>
-                                    <groupId>org.apache.karaf</groupId>
-                                    <artifactId>org.apache.karaf.client</artifactId>
-                                    <outputDirectory>target/dependencies/lib/bin</outputDirectory>
-                                    <destFileName>karaf-client.jar</destFileName>
-                                </artifactItem>
-                                <artifactItem>
-                                    <groupId>org.apache.karaf.jaas</groupId>
-                                    <artifactId>org.apache.karaf.jaas.boot</artifactId>
-                                    <outputDirectory>target/dependencies/lib</outputDirectory>
-                                    <destFileName>karaf-jaas-boot.jar</destFileName>
-                                </artifactItem>
-                            </artifactItems>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>build-helper-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>attach-artifacts</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>attach-artifact</goal>
-                        </goals>
-                        <configuration>
-                            <artifacts>
-                                <artifact>
-                                  <file>src/main/resources/extra/jetty.xml</file>
-                                  <type>xml</type>
-                                  <classifier>jettyconfig</classifier>
-                                </artifact>
-                            </artifacts>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-assembly-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>make-assembly</id>
-                        <phase>none</phase>
-                    </execution>
-                    <execution>
-                        <id>unix-minimal-bin</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                        <configuration>
-                            <descriptors>
-                                <descriptor>src/main/descriptors/unix-minimal-bin.xml</descriptor>
-                            </descriptors>
-                            <finalName>${project.artifactId}-${project.version}</finalName>
-                            <tarLongFileMode>gnu</tarLongFileMode>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>unix-bin</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                        <configuration>
-                            <descriptors>
-                                <descriptor>src/main/descriptors/unix-bin.xml</descriptor>
-                            </descriptors>
-                            <finalName>${project.artifactId}-${project.version}</finalName>
-                            <appendAssemblyId>false</appendAssemblyId>
-                            <tarLongFileMode>gnu</tarLongFileMode>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>windows-minimal-bin</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                        <configuration>
-                            <descriptors>
-                                <descriptor>src/main/descriptors/windows-minimal-bin.xml</descriptor>
-                            </descriptors>
-                            <finalName>${project.artifactId}-${project.version}</finalName>
-                            <appendAssemblyId>true</appendAssemblyId>
-                            <assemblyId />
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>windows-bin</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                        <configuration>
-                            <descriptors>
-                                <descriptor>src/main/descriptors/windows-bin.xml</descriptor>
-                            </descriptors>
-                            <finalName>${project.artifactId}-${project.version}</finalName>
-                            <appendAssemblyId>false</appendAssemblyId>
-                            <duplicateBehaviour>skip</duplicateBehaviour>
-                            <assemblyId />
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.karaf.tooling</groupId>
-                <artifactId>features-maven-plugin</artifactId>
-                <version>${project.version}</version>
-                <executions>
-                    <execution>
-                        <id>add-features-to-repo</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>add-features-to-repo</goal>
-                        </goals>
-                        <configuration>
-                            <descriptors>
-                              <descriptor>mvn:org.apache.karaf.assemblies.features/standard/${project.version}/xml/features</descriptor>
-                              <descriptor>mvn:org.apache.karaf.assemblies.features/enterprise/${project.version}/xml/features</descriptor>
-                            </descriptors>
-                            <features>
-                                <feature>config</feature>
-                                <feature>ssh</feature>
-                                <feature>management</feature>
-				                <feature>wrapper</feature>
-                            </features>
-                            <includeMvnBasedDescriptors>true</includeMvnBasedDescriptors>
-                            <repository>target/features-repo</repository>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-
-        </plugins>
-    </build>
-
-    <profiles>
-        <profile>
-            <id>manual</id>
-
-            <dependencies>
-                <dependency>
-                    <groupId>org.apache.karaf</groupId>
-                    <artifactId>manual</artifactId>
-                    <type>pdf</type>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.karaf</groupId>
-                    <artifactId>manual</artifactId>
-                    <type>html</type>
-                </dependency>
-            </dependencies>
-
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-dependency-plugin</artifactId>
-                        <executions>
-                            <execution>
-                                <id>copy-manual</id>
-                                <phase>generate-resources</phase>
-                                <goals>
-                                    <goal>copy</goal>
-                                </goals>
-                                <configuration>
-                                    <artifactItems>
-                                        <artifactItem>
-                                            <groupId>org.apache.karaf</groupId>
-                                            <artifactId>manual</artifactId>
-                                            <type>pdf</type>
-                                            <outputDirectory>target/dependencies</outputDirectory>
-                                            <destFileName>karaf-manual-${project.version}.pdf</destFileName>
-                                        </artifactItem>
-                                        <artifactItem>
-                                            <groupId>org.apache.karaf</groupId>
-                                            <artifactId>manual</artifactId>
-                                            <type>html</type>
-                                            <outputDirectory>target/dependencies</outputDirectory>
-                                            <destFileName>karaf-manual-${project.version}.html</destFileName>
-                                        </artifactItem>
-                                    </artifactItems>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-
-        <profile>
-            <id>src</id>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-assembly-plugin</artifactId>
-                        <executions>
-                            <execution>
-                                <id>unix-src</id>
-                                <phase>package</phase>
-                                <goals>
-                                    <goal>attached</goal>
-                                </goals>
-                                <configuration>
-                                    <descriptors>
-                                        <descriptor>src/main/descriptors/unix-src.xml</descriptor>
-                                    </descriptors>
-                                </configuration>
-                            </execution>
-                            <execution>
-                                <id>windows-src</id>
-                                <phase>package</phase>
-                                <goals>
-                                    <goal>attached</goal>
-                                </goals>
-                                <configuration>
-                                    <descriptors>
-                                        <descriptor>src/main/descriptors/windows-src.xml</descriptor>
-                                    </descriptors>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
-
-</project>
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/descriptors/unix-bin.xml b/karaf-2.3.x/assemblies/apache-karaf/src/main/descriptors/unix-bin.xml
deleted file mode 100644
index 726ea7d..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/descriptors/unix-bin.xml
+++ /dev/null
@@ -1,328 +0,0 @@
-<?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.
--->
-<assembly>
-    <id>standard</id>
-    <!-- intentionally left blank -> http://jira.codehaus.org/browse/MASSEMBLY-301 -->
-    <formats>
-        <format>tar.gz</format>
-    </formats>
-    <fileSets>
-
-        <!-- Copy license and other files from root -->
-        <fileSet>
-            <directory>../..</directory>
-            <outputDirectory>/</outputDirectory>
-            <includes>
-                <include>README</include>
-                <include>RELEASE*</include>
-                <include>LICENSE</include>
-                <include>NOTICE</include>
-            </includes>
-            <lineEnding>unix</lineEnding>
-        </fileSet>
-
-        <!-- Copy over everything that needs to get unix line endings -->
-        <fileSet>
-            <directory>src/main/distribution/text</directory>
-            <outputDirectory>/</outputDirectory>
-            <lineEnding>unix</lineEnding>
-        </fileSet>
-        <fileSet>
-            <directory>src/main/distribution/unix-text</directory>
-            <outputDirectory>/</outputDirectory>
-            <lineEnding>unix</lineEnding>
-        </fileSet>
-        <fileSet>
-            <directory>target/classes/bin</directory>
-            <outputDirectory>/bin/</outputDirectory>
-            <lineEnding>unix</lineEnding>
-            <fileMode>0755</fileMode>
-            <includes>
-                <include>admin</include>
-                <include>shell</include>
-                <include>client</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>target/classes/etc</directory>
-            <outputDirectory>/etc/</outputDirectory>
-            <lineEnding>unix</lineEnding>
-            <fileMode>0644</fileMode>
-        </fileSet>
-        <!-- Copy over the examples -->
-        <fileSet>
-            <directory>target/classes/demos</directory>
-            <outputDirectory>/demos/</outputDirectory>
-            <lineEnding>unix</lineEnding>
-            <fileMode>0644</fileMode>
-        </fileSet>
-        <fileSet>
-            <directory>../../demos</directory>
-            <outputDirectory>/demos/</outputDirectory>
-            <lineEnding>unix</lineEnding>
-            <fileMode>0644</fileMode>
-            <excludes>
-                <exclude>**/target/**</exclude>
-                <exclude>**/*.iml</exclude>
-            </excludes>
-        </fileSet>
-
-        <!-- Copy over the files that need unix line endings and also chmod to 755 -->
-        <fileSet>
-            <directory>src/main/distribution/unix-shell</directory>
-            <outputDirectory>/</outputDirectory>
-            <lineEnding>unix</lineEnding>
-            <fileMode>0755</fileMode>
-        </fileSet>
-
-        <!-- Copy over jar files -->
-        <fileSet>
-            <directory>target/dependencies</directory>
-            <outputDirectory>/</outputDirectory>
-            <fileMode>0644</fileMode>
-        </fileSet>
-        <fileSet>
-            <directory>target/features-repo</directory>
-            <outputDirectory>system</outputDirectory>
-            <fileMode>0644</fileMode>
-        </fileSet>
-    </fileSets>
-
-    <dependencySets>
-        <dependencySet>
-            <outputDirectory>/lib</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0644</fileMode>
-            <includes>
-                <include>org.apache.servicemix.specs:org.apache.servicemix.specs.activator</include>
-                <include>org.apache.servicemix.specs:org.apache.servicemix.specs.locator</include>
-            </includes>
-        </dependencySet>
-
-        <dependencySet>
-            <outputDirectory>/lib/endorsed</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0644</fileMode>
-            <includes>
-                <include>org.apache.karaf:org.apache.karaf.exception</include>
-                <include>org.apache.servicemix.specs:org.apache.servicemix.specs.jaxp-api-1.4</include>
-                <include>org.apache.servicemix.specs:org.apache.servicemix.specs.jaxb-api-2.2</include>
-                <include>org.apache.servicemix.specs:org.apache.servicemix.specs.jaxws-api-2.2</include>
-                <include>org.apache.servicemix.specs:org.apache.servicemix.specs.saaj-api-1.3</include>
-                <include>org.apache.servicemix.specs:org.apache.servicemix.specs.stax-api-1.2</include>
-            </includes>
-        </dependencySet>
-
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0644</fileMode>
-            <outputFileNameMapping>
-                org/apache/felix/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.felix:org.apache.felix.configadmin</include>
-                <include>org.apache.felix:org.apache.felix.framework</include>
-                <include>org.apache.felix:org.apache.felix.fileinstall</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0644</fileMode>
-            <outputFileNameMapping>
-                org/ops4j/pax/logging/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.ops4j.pax.logging:pax-logging-api</include>
-                <include>org.ops4j.pax.logging:pax-logging-service</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0644</fileMode>
-            <outputFileNameMapping>
-                org/ops4j/pax/url/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.ops4j.pax.url:pax-url-mvn</include>
-                <include>org.ops4j.pax.url:pax-url-wrap</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0644</fileMode>
-            <outputFileNameMapping>
-                org/apache/karaf/features/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.karaf.features:org.apache.karaf.features.core</include>
-                <include>org.apache.karaf.features:org.apache.karaf.features.command</include>
-                <include>org.apache.karaf.features:org.apache.karaf.features.management</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0644</fileMode>
-            <outputFileNameMapping>
-                org/apache/karaf/diagnostic/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.karaf.diagnostic:org.apache.karaf.diagnostic.core</include>
-                <include>org.apache.karaf.diagnostic:org.apache.karaf.diagnostic.common</include>
-                <include>org.apache.karaf.diagnostic:org.apache.karaf.diagnostic.command</include>
-                <include>org.apache.karaf.diagnostic:org.apache.karaf.diagnostic.management</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0644</fileMode>
-            <outputFileNameMapping>
-                org/apache/karaf/admin/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.karaf.admin:org.apache.karaf.admin.core</include>
-                <include>org.apache.karaf.admin:org.apache.karaf.admin.command</include>
-                <include>org.apache.karaf.admin:org.apache.karaf.admin.management</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0644</fileMode>
-            <outputFileNameMapping>
-                org/apache/karaf/deployer/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.karaf.deployer:org.apache.karaf.deployer.spring</include>
-                <include>org.apache.karaf.deployer:org.apache.karaf.deployer.blueprint</include>
-                <include>org.apache.karaf.deployer:org.apache.karaf.deployer.features</include>
-                <include>org.apache.karaf.deployer:org.apache.karaf.deployer.kar</include>
-                <include>org.apache.karaf.deployer:org.apache.karaf.deployer.wrap</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0644</fileMode>
-            <outputFileNameMapping>
-                org/apache/karaf/shell/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.console</include>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.dev</include>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.osgi</include>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.log</include>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.packages</include>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.commands</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0644</fileMode>
-            <outputFileNameMapping>
-                org/apache/karaf/jaas/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.karaf.jaas:org.apache.karaf.jaas.config</include>
-                <include>org.apache.karaf.jaas:org.apache.karaf.jaas.modules</include>
-                <include>org.apache.karaf.jaas:org.apache.karaf.jaas.command</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0644</fileMode>
-            <outputFileNameMapping>
-                org/eclipse/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.eclipse:osgi</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0644</fileMode>
-            <outputFileNameMapping>
-                org/apache/aries/blueprint/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.aries.blueprint:org.apache.aries.blueprint.api</include>
-                <include>org.apache.aries.blueprint:org.apache.aries.blueprint.core</include>
-                <include>org.apache.aries.blueprint:org.apache.aries.blueprint.cm</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0644</fileMode>
-            <outputFileNameMapping>
-                org/apache/aries/proxy/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.aries.proxy:org.apache.aries.proxy.api</include>
-                <include>org.apache.aries.proxy:org.apache.aries.proxy.impl</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0644</fileMode>
-            <outputFileNameMapping>
-                org/apache/aries/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.aries:org.apache.aries.util</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0644</fileMode>
-            <outputFileNameMapping>
-                org/ow2/asm/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.ow2.asm:asm-all</include>
-            </includes>
-        </dependencySet>
-    </dependencySets>
-
-</assembly>
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/descriptors/unix-minimal-bin.xml b/karaf-2.3.x/assemblies/apache-karaf/src/main/descriptors/unix-minimal-bin.xml
deleted file mode 100644
index 6b3dcbe..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/descriptors/unix-minimal-bin.xml
+++ /dev/null
@@ -1,309 +0,0 @@
-<?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.
--->
-<assembly>
-    <id>minimal</id>
-    <!-- Used as artifact discriminator -->
-    <formats>
-        <format>tar.gz</format>
-    </formats>
-    <fileSets>
-
-        <!-- Copy license and other files from root -->
-        <fileSet>
-            <directory>../..</directory>
-            <outputDirectory>/</outputDirectory>
-            <includes>
-                <include>README</include>
-                <include>RELEASE*</include>
-                <include>LICENSE</include>
-                <include>NOTICE</include>
-            </includes>
-            <lineEnding>unix</lineEnding>
-        </fileSet>
-
-        <!-- Copy over everything that needs to get unix line endings -->
-        <fileSet>
-            <directory>src/main/distribution/text</directory>
-            <outputDirectory>/</outputDirectory>
-            <lineEnding>unix</lineEnding>
-        </fileSet>
-        <fileSet>
-            <directory>src/main/distribution/unix-text</directory>
-            <outputDirectory>/</outputDirectory>
-            <lineEnding>unix</lineEnding>
-        </fileSet>
-        <fileSet>
-            <directory>target/classes/bin</directory>
-            <outputDirectory>/bin/</outputDirectory>
-            <lineEnding>unix</lineEnding>
-            <fileMode>0755</fileMode>
-            <includes>
-                <include>admin</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>target/classes/etc</directory>
-            <excludes>
-                <exclude>org.apache.karaf.features.cfg</exclude>
-                <exclude>startup.properties</exclude>
-            </excludes>
-            <outputDirectory>/etc/</outputDirectory>
-            <lineEnding>unix</lineEnding>
-            <fileMode>0664</fileMode>
-        </fileSet>
-
-        <fileSet>
-            <directory>target/classes/minimal</directory>
-            <outputDirectory>/etc/</outputDirectory>
-            <lineEnding>unix</lineEnding>
-            <fileMode>0664</fileMode>
-        </fileSet>
-
-        <!-- Copy over the files that need unix line endings and also chmod to 755 -->
-        <fileSet>
-            <directory>src/main/distribution/unix-shell</directory>
-            <outputDirectory>/</outputDirectory>
-            <lineEnding>unix</lineEnding>
-            <fileMode>0755</fileMode>
-        </fileSet>
-
-        <!-- Copy over jar files -->
-        <fileSet>
-            <directory>target/dependencies</directory>
-            <excludes>
-                <exclude>*.html</exclude>
-                <exclude>*.pdf</exclude>
-            </excludes>
-            <outputDirectory>/</outputDirectory>
-            <fileMode>0664</fileMode>
-        </fileSet>
-        <fileSet>
-            <directory>target/features-repo</directory>
-            <includes>
-            	<include>**/*.xml</include>
-            </includes>
-            <outputDirectory>system</outputDirectory>
-            <fileMode>0664</fileMode>
-        </fileSet>
-
-    </fileSets>
-
-    <dependencySets>
-        <dependencySet>
-            <outputDirectory>/lib/endorsed</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0664</fileMode>
-            <includes>
-                <include>org.apache.karaf:org.apache.karaf.exception</include>
-            </includes>
-        </dependencySet>
-
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0664</fileMode>
-            <outputFileNameMapping>
-                org/apache/felix/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.felix:org.apache.felix.configadmin</include>
-                <include>org.apache.felix:org.apache.felix.framework</include>
-                <include>org.apache.felix:org.apache.felix.fileinstall</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0664</fileMode>
-            <outputFileNameMapping>
-                org/ops4j/pax/logging/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.ops4j.pax.logging:pax-logging-api</include>
-                <include>org.ops4j.pax.logging:pax-logging-service</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0664</fileMode>
-            <outputFileNameMapping>
-                org/ops4j/pax/url/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.ops4j.pax.url:pax-url-mvn</include>
-                <include>org.ops4j.pax.url:pax-url-wrap</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0664</fileMode>
-            <outputFileNameMapping>
-                org/apache/karaf/management/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.karaf.management:org.apache.karaf.management.server</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0664</fileMode>
-            <outputFileNameMapping>
-                org/apache/karaf/features/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.karaf.features:org.apache.karaf.features.core</include>
-                <include>org.apache.karaf.features:org.apache.karaf.features.command</include>
-                <include>org.apache.karaf.features:org.apache.karaf.features.management</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0664</fileMode>
-            <outputFileNameMapping>
-                org/apache/karaf/shell/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.console</include>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.dev</include>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.osgi</include>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.log</include>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.config</include>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.packages</include>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.commands</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0664</fileMode>
-            <outputFileNameMapping>
-                org/apache/karaf/diagnostic/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.karaf.diagnostic:org.apache.karaf.diagnostic.core</include>
-                <include>org.apache.karaf.diagnostic:org.apache.karaf.diagnostic.common</include>
-                <include>org.apache.karaf.diagnostic:org.apache.karaf.diagnostic.command</include>
-                <include>org.apache.karaf.diagnostic:org.apache.karaf.diagnostic.management</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0664</fileMode>
-            <outputFileNameMapping>
-                org/apache/karaf/jaas/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.karaf.jaas:org.apache.karaf.jaas.config</include>
-                <include>org.apache.karaf.jaas:org.apache.karaf.jaas.modules</include>
-                <include>org.apache.karaf.jaas:org.apache.karaf.jaas.command</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0664</fileMode>
-            <outputFileNameMapping>
-                org/eclipse/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.eclipse:osgi</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0664</fileMode>
-            <outputFileNameMapping>
-                org/apache/aries/blueprint/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.aries.blueprint:org.apache.aries.blueprint.api</include>
-                <include>org.apache.aries.blueprint:org.apache.aries.blueprint.core</include>
-                <include>org.apache.aries.blueprint:org.apache.aries.blueprint.cm</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0664</fileMode>
-            <outputFileNameMapping>
-                org/apache/aries/proxy/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.aries.proxy:org.apache.aries.proxy.api</include>
-                <include>org.apache.aries.proxy:org.apache.aries.proxy.impl</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0664</fileMode>
-            <outputFileNameMapping>
-                org/apache/aries/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.aries:org.apache.aries.util</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0664</fileMode>
-            <outputFileNameMapping>
-                org/ow2/asm/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.ow2.asm:asm-all</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <fileMode>0664</fileMode>
-            <outputFileNameMapping>
-                org/apache/aries/jmx/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.aries.jmx:org.apache.aries.jmx.api</include>
-                <include>org.apache.aries.jmx:org.apache.aries.jmx.core</include>
-                <include>org.apache.aries.jmx:org.apache.aries.jmx.blueprint.api</include>
-                <include>org.apache.aries.jmx:org.apache.aries.jmx.blueprint.core</include>
-            </includes>
-        </dependencySet>
-    </dependencySets>
-</assembly>
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/descriptors/unix-src.xml b/karaf-2.3.x/assemblies/apache-karaf/src/main/descriptors/unix-src.xml
deleted file mode 100644
index aeee285..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/descriptors/unix-src.xml
+++ /dev/null
@@ -1,121 +0,0 @@
-<?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.
--->
-<assembly>
-    <id>src</id>
-    <formats>
-        <format>tar.gz</format>
-    </formats>
-
-    <fileSets>
-        <!-- Copy BUILDING and other files from root -->
-        <fileSet>
-            <directory>../..</directory>
-            <outputDirectory>/</outputDirectory>
-            <includes>
-                <include>BUILDING</include>
-                <include>README</include>
-                <include>RELEASE*</include>
-            </includes>
-            <lineEnding>unix</lineEnding>
-        </fileSet>
-
-        <!-- Copy src LICENSE and NOTICE -->
-        <fileSet>
-            <directory>src/main/distribution/src</directory>
-            <outputDirectory>/</outputDirectory>
-            <includes>
-                <include>LICENSE</include>
-                <include>NOTICE</include>
-            </includes>
-            <lineEnding>unix</lineEnding>
-        </fileSet>
-
-        <!-- Binary Files -->
-        <fileSet>
-            <directory>../..</directory>
-            <outputDirectory>src</outputDirectory>
-            <includes>
-                <include>**/*.jpeg</include>
-                <include>**/*.jpg</include>
-                <include>**/*.gif</include>
-                <include>**/*.png</include>
-                <include>**/*.exe</include>
-                <include>**/*.dll</include>
-                <include>**/*.jar</include>
-                <include>**/*.so</include>
-                <include>**/*.ks</include>
-                <include>**/*.ts</include>
-                <include>**/*.keystore</include>
-                <include>**/*.bin</include>
-                <include>**/*.jnilib</include>
-                <include>**/*.cert</include>
-                <include>**/*.kar</include>
-                <include>**/*.zip</include>
-                <include>apache-karaf/src/main/release/bin/*/wrapper</include>
-            </includes>
-            <excludes>
-                <exclude>**/eclipse-classes/**</exclude>
-                <exclude>**/target/**</exclude>
-            </excludes>
-        </fileSet>
-
-        <!-- Text Files -->
-        <fileSet>
-            <directory>../..</directory>
-            <outputDirectory>src</outputDirectory>
-            <includes>
-                <include>**/*</include>
-            </includes>
-            <excludes>
-                <exclude>**/*.jpeg</exclude>
-                <exclude>**/*.jpg</exclude>
-                <exclude>**/*.gif</exclude>
-                <exclude>**/*.png</exclude>
-                <exclude>**/*.exe</exclude>
-                <exclude>**/*.dll</exclude>
-                <exclude>**/*.jar</exclude>
-                <exclude>**/*.so</exclude>
-                <exclude>**/*.ks</exclude>
-                <exclude>**/*.ts</exclude>
-                <exclude>**/*.keystore</exclude>
-                <exclude>**/*.bin</exclude>
-                <exclude>**/*.jnilib</exclude>
-                <exclude>**/*.cert</exclude>
-                <exclude>apache-karaf/src/main/release/bin/*/wrapper</exclude>
-                <exclude>**/target/**</exclude>
-                <exclude>**/build/**</exclude>
-                <exclude>activemq-data/**</exclude>
-                <exclude>*/activemq-data/**</exclude>
-                <exclude>**/eclipse-classes/**</exclude>
-                <exclude>**/.*</exclude>
-                <exclude>**/.*/**</exclude>
-
-                <exclude>**/surefire*</exclude>
-                <exclude>**/svn-commit*</exclude>
-
-                <exclude>**/*.iml</exclude>
-                <exclude>**/*.ipr</exclude>
-                <exclude>**/*.iws</exclude>
-
-                <exclude>**/cobertura.ser</exclude>
-
-            </excludes>
-            <lineEnding>unix</lineEnding>
-        </fileSet>
-    </fileSets>
-</assembly>
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/descriptors/windows-bin.xml b/karaf-2.3.x/assemblies/apache-karaf/src/main/descriptors/windows-bin.xml
deleted file mode 100644
index 82708be..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/descriptors/windows-bin.xml
+++ /dev/null
@@ -1,310 +0,0 @@
-<?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.
--->
-<assembly>
-    <id>standard</id>
-    <!-- intentionally left blank -> http://jira.codehaus.org/browse/MASSEMBLY-301 -->
-    <formats>
-        <format>zip</format>
-    </formats>
-    <fileSets>
-        <!-- Copy license and other files from root -->
-        <fileSet>
-            <directory>../..</directory>
-            <outputDirectory>/</outputDirectory>
-            <includes>
-                <include>README</include>
-                <include>RELEASE*</include>
-                <include>LICENSE</include>
-                <include>NOTICE</include>
-            </includes>
-            <lineEnding>dos</lineEnding>
-        </fileSet>
-
-        <!-- Copy over everything that needs to get dos line endings -->
-        <fileSet>
-            <directory>src/main/distribution/text</directory>
-            <outputDirectory>/</outputDirectory>
-            <lineEnding>dos</lineEnding>
-        </fileSet>
-        <fileSet>
-            <directory>src/main/distribution/windows-text</directory>
-            <outputDirectory>/</outputDirectory>
-            <lineEnding>dos</lineEnding>
-        </fileSet>
-        <fileSet>
-            <directory>target/classes/bin</directory>
-            <outputDirectory>/bin/</outputDirectory>
-            <lineEnding>dos</lineEnding>
-            <includes>
-                <include>admin.bat</include>
-                <include>shell.bat</include>
-                <include>client.bat</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>target/classes/etc</directory>
-            <outputDirectory>/etc/</outputDirectory>
-            <lineEnding>dos</lineEnding>
-        </fileSet>
-        <!-- Copy over the examples -->
-        <fileSet>
-            <directory>target/classes/demos</directory>
-            <outputDirectory>/demos/</outputDirectory>
-            <lineEnding>dos</lineEnding>
-        </fileSet>
-
-        <fileSet>
-            <directory>../../demos</directory>
-            <outputDirectory>/demos/</outputDirectory>
-            <lineEnding>dos</lineEnding>
-            <excludes>
-                <exclude>**/target/**</exclude>
-                <exclude>**/*.iml</exclude>
-            </excludes>
-        </fileSet>
-
-        <!-- Copy over files that should not get the line endings converted -->
-        <fileSet>
-            <directory>src/main/distribution/binary</directory>
-            <outputDirectory>/</outputDirectory>
-        </fileSet>
-
-        <!-- Copy over the files that should not get the line endings converted but need to be chmod to 755 -->
-        <fileSet>
-            <directory>src/main/distribution/windows-binary</directory>
-            <outputDirectory>/</outputDirectory>
-        </fileSet>
-
-        <!-- Copy over jar files -->
-        <fileSet>
-            <directory>target/dependencies</directory>
-            <outputDirectory>/</outputDirectory>
-        </fileSet>
-        <fileSet>
-            <directory>target/features-repo</directory>
-            <outputDirectory>system</outputDirectory>
-        </fileSet>
-    </fileSets>
-
-    <dependencySets>
-        <dependencySet>
-            <outputDirectory>/lib</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <includes>
-                <include>org.apache.servicemix.specs:org.apache.servicemix.specs.activator</include>
-                <include>org.apache.servicemix.specs:org.apache.servicemix.specs.locator</include>
-            </includes>
-        </dependencySet>
-
-        <dependencySet>
-            <outputDirectory>/lib/endorsed</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <includes>
-                <include>org.apache.karaf:org.apache.karaf.exception</include>
-                <include>org.apache.servicemix.specs:org.apache.servicemix.specs.jaxp-api-1.4</include>
-                <include>org.apache.servicemix.specs:org.apache.servicemix.specs.jaxb-api-2.2</include>
-                <include>org.apache.servicemix.specs:org.apache.servicemix.specs.jaxws-api-2.2</include>
-                <include>org.apache.servicemix.specs:org.apache.servicemix.specs.saaj-api-1.3</include>
-                <include>org.apache.servicemix.specs:org.apache.servicemix.specs.stax-api-1.2</include>
-            </includes>
-        </dependencySet>
-
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/apache/felix/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.felix:org.apache.felix.configadmin</include>
-                <include>org.apache.felix:org.apache.felix.framework</include>
-                <include>org.apache.felix:org.apache.felix.fileinstall</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/ops4j/pax/logging/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.ops4j.pax.logging:pax-logging-api</include>
-                <include>org.ops4j.pax.logging:pax-logging-service</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/ops4j/pax/url/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.ops4j.pax.url:pax-url-mvn</include>
-                <include>org.ops4j.pax.url:pax-url-wrap</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/apache/karaf/features/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.karaf.features:org.apache.karaf.features.core</include>
-                <include>org.apache.karaf.features:org.apache.karaf.features.command</include>
-                <include>org.apache.karaf.features:org.apache.karaf.features.management</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/apache/karaf/diagnostic/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.karaf.diagnostic:org.apache.karaf.diagnostic.core</include>
-                <include>org.apache.karaf.diagnostic:org.apache.karaf.diagnostic.common</include>
-                <include>org.apache.karaf.diagnostic:org.apache.karaf.diagnostic.command</include>
-                <include>org.apache.karaf.diagnostic:org.apache.karaf.diagnostic.management</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/apache/karaf/admin/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.karaf.admin:org.apache.karaf.admin.core</include>
-                <include>org.apache.karaf.admin:org.apache.karaf.admin.command</include>
-                <include>org.apache.karaf.admin:org.apache.karaf.admin.management</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/apache/karaf/deployer/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.karaf.deployer:org.apache.karaf.deployer.spring</include>
-                <include>org.apache.karaf.deployer:org.apache.karaf.deployer.blueprint</include>
-                <include>org.apache.karaf.deployer:org.apache.karaf.deployer.features</include>
-                <include>org.apache.karaf.deployer:org.apache.karaf.deployer.kar</include>
-                <include>org.apache.karaf.deployer:org.apache.karaf.deployer.wrap</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/apache/karaf/shell/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.console</include>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.dev</include>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.osgi</include>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.log</include>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.packages</include>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.commands</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/apache/karaf/jaas/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.karaf.jaas:org.apache.karaf.jaas.config</include>
-                <include>org.apache.karaf.jaas:org.apache.karaf.jaas.modules</include>
-                <include>org.apache.karaf.jaas:org.apache.karaf.jaas.command</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/eclipse/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.eclipse:osgi</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/apache/aries/blueprint/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.aries.blueprint:org.apache.aries.blueprint.api</include>
-                <include>org.apache.aries.blueprint:org.apache.aries.blueprint.core</include>
-                <include>org.apache.aries.blueprint:org.apache.aries.blueprint.cm</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/apache/aries/proxy/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.aries.proxy:org.apache.aries.proxy.api</include>
-                <include>org.apache.aries.proxy:org.apache.aries.proxy.impl</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/apache/aries/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.aries:org.apache.aries.util</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/ow2/asm/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.ow2.asm:asm-all</include>
-            </includes>
-        </dependencySet>
-    </dependencySets>
-
-</assembly>
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/descriptors/windows-minimal-bin.xml b/karaf-2.3.x/assemblies/apache-karaf/src/main/descriptors/windows-minimal-bin.xml
deleted file mode 100644
index 900fc7a..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/descriptors/windows-minimal-bin.xml
+++ /dev/null
@@ -1,295 +0,0 @@
-<?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.
--->
-<assembly>
-    <id>minimal</id>
-    <!-- Used as artifact discriminator -->
-    <formats>
-        <format>zip</format>
-    </formats>
-    <fileSets>
-
-        <!-- Copy license and other files from root -->
-        <fileSet>
-            <directory>../..</directory>
-            <outputDirectory>/</outputDirectory>
-            <includes>
-                <include>README</include>
-                <include>RELEASE*</include>
-                <include>LICENSE</include>
-                <include>NOTICE</include>
-            </includes>
-            <lineEnding>dos</lineEnding>
-        </fileSet>
-
-        <!-- Copy over everything that needs to get dos line endings -->
-        <fileSet>
-            <directory>src/main/distribution/text</directory>
-            <outputDirectory>/</outputDirectory>
-            <lineEnding>dos</lineEnding>
-        </fileSet>
-        <fileSet>
-            <directory>src/main/distribution/windows-text</directory>
-            <outputDirectory>/</outputDirectory>
-            <lineEnding>dos</lineEnding>
-        </fileSet>
-        <fileSet>
-            <directory>target/classes/bin</directory>
-            <outputDirectory>/bin/</outputDirectory>
-            <lineEnding>dos</lineEnding>
-            <includes>
-                <include>admin.bat</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>target/classes/etc</directory>
-            <excludes>
-                <exclude>org.apache.karaf.features.cfg</exclude>
-                <exclude>startup.properties</exclude>
-            </excludes>
-            <outputDirectory>/etc/</outputDirectory>
-            <lineEnding>dos</lineEnding>
-        </fileSet>
-        <fileSet>
-            <directory>target/classes/minimal</directory>
-            <outputDirectory>/etc/</outputDirectory>
-            <lineEnding>dos</lineEnding>
-        </fileSet>
-
-        <!-- Copy over files that should not get the line endings converted -->
-        <fileSet>
-            <directory>src/main/distribution/binary</directory>
-            <outputDirectory>/</outputDirectory>
-        </fileSet>
-
-        <!-- Copy over the files that should not get the line endings converted but need to be chmod to 755 -->
-        <fileSet>
-            <directory>src/main/distribution/windows-binary</directory>
-            <outputDirectory>/</outputDirectory>
-        </fileSet>
-
-        <!-- Copy over jar files -->
-        <fileSet>
-            <directory>target/dependencies</directory>
-            <excludes>
-                <exclude>*.html</exclude>
-                <exclude>*.pdf</exclude>
-            </excludes>
-            <outputDirectory>/</outputDirectory>
-        </fileSet>
-        <fileSet>
-            <directory>target/features-repo</directory>
-            <includes>
-            	<include>**/*.xml</include>
-            </includes>
-            <outputDirectory>system</outputDirectory>
-        </fileSet>
-
-    </fileSets>
-
-    <dependencySets>
-        <dependencySet>
-            <outputDirectory>/lib/endorsed</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <includes>
-                <include>org.apache.karaf:org.apache.karaf.exception</include>
-            </includes>
-        </dependencySet>
-
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/apache/felix/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.felix:org.apache.felix.configadmin</include>
-                <include>org.apache.felix:org.apache.felix.framework</include>
-                <include>org.apache.felix:org.apache.felix.fileinstall</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/ops4j/pax/logging/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.ops4j.pax.logging:pax-logging-api</include>
-                <include>org.ops4j.pax.logging:pax-logging-service</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/ops4j/pax/url/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.ops4j.pax.url:pax-url-mvn</include>
-                <include>org.ops4j.pax.url:pax-url-wrap</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/apache/karaf/management/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.karaf.management:org.apache.karaf.management.server</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/apache/karaf/features/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.karaf.features:org.apache.karaf.features.core</include>
-                <include>org.apache.karaf.features:org.apache.karaf.features.command</include>
-                <include>org.apache.karaf.features:org.apache.karaf.features.management</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/apache/karaf/diagnostic/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.karaf.diagnostic:org.apache.karaf.diagnostic.core</include>
-                <include>org.apache.karaf.diagnostic:org.apache.karaf.diagnostic.common</include>
-                <include>org.apache.karaf.diagnostic:org.apache.karaf.diagnostic.command</include>
-                <include>org.apache.karaf.diagnostic:org.apache.karaf.diagnostic.management</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/apache/karaf/shell/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.console</include>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.dev</include>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.osgi</include>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.log</include>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.config</include>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.packages</include>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.ssh</include>
-                <include>org.apache.karaf.shell:org.apache.karaf.shell.commands</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/apache/karaf/jaas/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.karaf.jaas:org.apache.karaf.jaas.config</include>
-                <include>org.apache.karaf.jaas:org.apache.karaf.jaas.modules</include>
-                <include>org.apache.karaf.jaas:org.apache.karaf.jaas.command</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/eclipse/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.eclipse:osgi</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/apache/aries/blueprint/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.aries.blueprint:org.apache.aries.blueprint.api</include>
-                <include>org.apache.aries.blueprint:org.apache.aries.blueprint.core</include>
-                <include>org.apache.aries.blueprint:org.apache.aries.blueprint.cm</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/apache/aries/proxy/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.aries.proxy:org.apache.aries.proxy.api</include>
-                <include>org.apache.aries.proxy:org.apache.aries.proxy.impl</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/apache/aries/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.aries:org.apache.aries.util</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/ow2/asm/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.ow2.asm:asm-all</include>
-            </includes>
-        </dependencySet>
-        <dependencySet>
-            <outputDirectory>/system</outputDirectory>
-            <unpack>false</unpack>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputFileNameMapping>
-                org/apache/aries/jmx/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}
-            </outputFileNameMapping>
-            <includes>
-                <include>org.apache.aries.jmx:org.apache.aries.jmx.api</include>
-                <include>org.apache.aries.jmx:org.apache.aries.jmx.core</include>
-                <include>org.apache.aries.jmx:org.apache.aries.jmx.blueprint.api</include>
-                <include>org.apache.aries.jmx:org.apache.aries.jmx.blueprint.core</include>
-            </includes>
-        </dependencySet>
-
-    </dependencySets>
-
-</assembly>
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/descriptors/windows-src.xml b/karaf-2.3.x/assemblies/apache-karaf/src/main/descriptors/windows-src.xml
deleted file mode 100644
index 9e5357a..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/descriptors/windows-src.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-<?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.
--->
-<assembly>
-    <id>src</id>
-    <formats>
-        <format>zip</format>
-    </formats>
-
-    <fileSets>
-        <!-- Copy BUILDING and other files from root -->
-        <fileSet>
-            <directory>../..</directory>
-            <outputDirectory>/</outputDirectory>
-            <includes>
-                <include>BUILDING</include>
-                <include>README</include>
-                <include>RELEASE*</include>
-            </includes>
-            <lineEnding>dos</lineEnding>
-        </fileSet>
-
-        <!-- Copy src LICENSE and NOTICE -->
-        <fileSet>
-            <directory>src/main/distribution/src</directory>
-            <outputDirectory>/</outputDirectory>
-            <includes>
-                <include>LICENSE</include>
-                <include>NOTICE</include>
-            </includes>
-            <lineEnding>dos</lineEnding>
-        </fileSet>
-
-        <!-- Binary Files -->
-        <fileSet>
-            <directory>../..</directory>
-            <outputDirectory>src</outputDirectory>
-            <includes>
-                <include>**/*.jpeg</include>
-                <include>**/*.jpg</include>
-                <include>**/*.gif</include>
-                <include>**/*.png</include>
-                <include>**/*.exe</include>
-                <include>**/*.dll</include>
-                <include>**/*.jar</include>
-                <include>**/*.so</include>
-                <include>**/*.ks</include>
-                <include>**/*.ts</include>
-                <include>**/*.keystore</include>
-                <include>**/*.bin</include>
-                <include>**/*.jnilib</include>
-                <include>**/*.cert</include>
-                <include>**/*.kar</include>
-                <include>**/*.zip</include>
-                <include>apache-karaf/src/main/release/bin/*/wrapper</include>
-            </includes>
-            <excludes>
-                <exclude>**/eclipse-classes/**</exclude>
-                <exclude>**/target/**</exclude>
-            </excludes>
-        </fileSet>
-
-        <!-- Text Files -->
-        <fileSet>
-            <directory>../..</directory>
-            <outputDirectory>src</outputDirectory>
-            <includes>
-                <include>**/*</include>
-            </includes>
-            <excludes>
-                <exclude>**/*.jpeg</exclude>
-                <exclude>**/*.jpg</exclude>
-                <exclude>**/*.gif</exclude>
-                <exclude>**/*.png</exclude>
-                <exclude>**/*.exe</exclude>
-                <exclude>**/*.dll</exclude>
-                <exclude>**/*.jar</exclude>
-                <exclude>**/*.so</exclude>
-                <exclude>**/*.ks</exclude>
-                <exclude>**/*.ts</exclude>
-                <exclude>**/*.keystore</exclude>
-                <exclude>**/*.bin</exclude>
-                <exclude>**/*.jnilib</exclude>
-                <exclude>**/*.cert</exclude>
-                <exclude>apache-karaf/src/main/release/bin/*/wrapper</exclude>
-
-                <exclude>**/target/**</exclude>
-                <exclude>**/build/**</exclude>
-                <exclude>activemq-data/**</exclude>
-                <exclude>*/activemq-data/**</exclude>
-                <exclude>**/eclipse-classes/**</exclude>
-                <exclude>**/.*</exclude>
-                <exclude>**/.*/**</exclude>
-
-                <exclude>**/surefire*</exclude>
-                <exclude>**/svn-commit*</exclude>
-
-                <exclude>**/*.iml</exclude>
-                <exclude>**/*.ipr</exclude>
-                <exclude>**/*.iws</exclude>
-
-                <exclude>**/cobertura.ser</exclude>
-
-            </excludes>
-            <lineEnding>dos</lineEnding>
-        </fileSet>
-    </fileSets>
-
-</assembly>
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/src/LICENSE b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/src/LICENSE
deleted file mode 100644
index 7a4a3ea..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/src/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed 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.
\ No newline at end of file
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/src/NOTICE b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/src/NOTICE
deleted file mode 100644
index 19fb4bc..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/src/NOTICE
+++ /dev/null
@@ -1,2 +0,0 @@
-Apache Karaf
-Copyright 2010-2012 The Apache Software Foundation
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/data/tmp/README b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/data/tmp/README
deleted file mode 100644
index 47d6dda..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/data/tmp/README
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * 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.
- */
-
-This folder is used for any temporary file
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/deploy/README b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/deploy/README
deleted file mode 100644
index 5904fe9..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/deploy/README
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * 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.
- */
-
-This folder can be used to deploy artifacts into the OSGi framework.
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/java.util.logging.properties b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/java.util.logging.properties
deleted file mode 100644
index b7b50c5..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/java.util.logging.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-# Empty java.util.logging.properties to prevent the log to stderr, so that
-# all logs will be delegated to pax logging JUL handler only
-
-
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/keys.properties b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/keys.properties
deleted file mode 100644
index 2eb3b01..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/keys.properties
+++ /dev/null
@@ -1,30 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-#
-# This file contains the valid users who can log into Karaf. Each line have to be of
-# the format:
-#
-# USER=KEY,ROLE1,ROLE2,...
-#
-# All users and roles entered in this file are available after Karaf startup
-# and modifiable via the JAAS command group. These users reside in a JAAS domain
-# with the name "karaf"..
-#
-karaf=AAAAB3NzaC1kc3MAAACBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAAAAFQCXYFCPFSMLzLKSuYKi64QL8Fgc9QAAAIEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoAAACBAKKSU2PFl/qOLxIwmBZPPIcJshVe7bVUpFvyl3BbJDow8rXfskl8wO63OzP/qLmcJM0+JbcRU/53JjTuyk31drV2qxhIOsLDC9dGCWj47Y7TyhPdXh/0dthTRBy6bqGtRPxGa7gJov1xm/UuYYXPIUR/3x9MAZvZ5xvE0kYXO+rx,admin
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.apache.felix.fileinstall-deploy.cfg b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.apache.felix.fileinstall-deploy.cfg
deleted file mode 100644
index 5262eb3..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.apache.felix.fileinstall-deploy.cfg
+++ /dev/null
@@ -1,22 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-felix.fileinstall.dir     = ${karaf.base}/deploy
-felix.fileinstall.tmpdir  = ${karaf.data}/generated-bundles
-felix.fileinstall.poll    = 1000
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.apache.karaf.features.obr.cfg b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.apache.karaf.features.obr.cfg
deleted file mode 100644
index 12ba4cd..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.apache.karaf.features.obr.cfg
+++ /dev/null
@@ -1,38 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-#
-# This configuration file is used to configure the default values for features OBR resolver
-#
-
-#
-# Defines whether or not the features OBR resolver has to resolve optional imports as well.  The default value is
-# false (do not attempt to resolve optional imports).
-#
-resolveOptionalImports = false
-
-#
-# Defines whether resolved bundles should be started by default. The default is true.
-#
-startByDefault = true
-
-#
-# Defines the start level for resolved bundles. The default is 80.
-#
-startLevel = 80
\ No newline at end of file
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.apache.karaf.jaas.cfg b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.apache.karaf.jaas.cfg
deleted file mode 100644
index 19f3fa0..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.apache.karaf.jaas.cfg
+++ /dev/null
@@ -1,61 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-#
-# Boolean enabling / disabling encrypted passwords
-#
-encryption.enabled = false
-
-#
-# Encryption Service name
-#   the default one is 'basic'
-#   a more powerful one named 'jasypt' is available
-#       when installing the encryption feature
-#
-encryption.name =
-
-#
-# Encryption prefix
-#
-encryption.prefix = {CRYPT}
-
-#
-# Encryption suffix
-#
-encryption.suffix = {CRYPT}
-
-#
-# Set the encryption algorithm to use in Karaf JAAS login module
-# Supported encryption algorithms follow:
-#   MD2
-#   MD5
-#   SHA-1
-#   SHA-256
-#   SHA-384
-#   SHA-512
-#
-encryption.algorithm = MD5
-
-#
-# Encoding of the encrypted password.
-# Can be:
-#   hexadecimal
-#   base64
-#
-encryption.encoding = hexadecimal
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.apache.karaf.log.cfg b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.apache.karaf.log.cfg
deleted file mode 100644
index e6bda65..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.apache.karaf.log.cfg
+++ /dev/null
@@ -1,36 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-#
-# This configuration file is used to configure the default values for the log:display
-# and log:display-exception commands.
-#
-
-#
-# The number of log statements to be displayed using log:display. It also defines the number
-# of lines searched for exceptions using log:display exception. You can override this value
-# at runtime using -n in log:display.
-#
-size = 500
-
-#
-# The pattern used to format the log statement when using log:display. This pattern is according
-# to the log4j layout. You can override this parameter at runtime using log:display with -p.
-#
-pattern = %d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %-32.32C %4L | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.apache.karaf.management.cfg b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.apache.karaf.management.cfg
deleted file mode 100644
index f100620..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.apache.karaf.management.cfg
+++ /dev/null
@@ -1,68 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-#
-# The properties in this file define the configuration of Apache Karaf's JMX Management
-#
-
-#
-# Port number for RMI registry connection
-#
-rmiRegistryPort = 1099
-
-#
-# Host for RMI registry
-#
-rmiRegistryHost = 0.0.0.0
-
-#
-# Port number for RMI server connection
-#
-rmiServerPort = 44444
-
-#
-# Name of the JAAS realm used for authentication
-#
-jmxRealm = karaf
-
-#
-# The service URL for the JMXConnectorServer
-#
-serviceUrl = service:jmx:rmi://0.0.0.0:${rmiServerPort}/jndi/rmi://${rmiRegistryHost}:${rmiRegistryPort}/karaf-${karaf.name}
-
-#
-# Whether any threads started for the JMXConnectorServer should be started as daemon threads
-#
-daemon = true
-
-#
-# Whether the JMXConnectorServer should be started in a separate thread
-#
-threaded = true
-
-#
-# The ObjectName used to register the JMXConnectorServer
-#
-objectName = connector:name=rmi
-
-#
-# Role name used for JMX access authorization
-# If not set, this defaults to the ${karaf.admin.role} configured in etc/system.properties
-#
-# jmxRole=admin
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.apache.karaf.shell.cfg b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.apache.karaf.shell.cfg
deleted file mode 100644
index 5798ad9..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.apache.karaf.shell.cfg
+++ /dev/null
@@ -1,62 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-#
-# These properties are used to configure Karaf's ssh shell.
-#
-
-#
-# Via sshPort and sshHost you define the address you can login into Karaf.
-#
-sshPort=8101
-sshHost=0.0.0.0
-
-#
-# The sshIdleTimeout defines the inactivity timeout to logout the SSH session.
-# The sshIdleTimeout is in milliseconds, and the default is set to 30 minutes.
-#
-sshIdleTimeout=1800000
-
-#
-# sshRealm defines which JAAS domain to use for password authentication.
-#
-sshRealm=karaf
-
-#
-# The location of the hostKey file defines where the private/public key of the server
-# is located. If no file is at the defined location it will be ignored.
-#
-hostKey=${karaf.base}/etc/host.key
-
-#
-# Role name used for SSH access authorization
-# If not set, this defaults to the ${karaf.admin.role} configured in etc/system.properties
-#
-# sshRole=admin
-
-#
-# Self defined key size in 1024, 2048, 3072, or 4096
-# If not set, this defaults to 1024.
-#
-# keySize=1024
-
-#
-# Specify host key algorithm, defaults to DSA
-#
-# algorithm=DSA
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.ops4j.pax.logging.cfg b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.ops4j.pax.logging.cfg
deleted file mode 100644
index f69d7eb..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.ops4j.pax.logging.cfg
+++ /dev/null
@@ -1,50 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-# Root logger
-log4j.rootLogger=INFO, out, osgi:*
-log4j.throwableRenderer=org.apache.log4j.OsgiThrowableRenderer
-
-# To avoid flooding the log when using DEBUG level on an ssh connection and doing log:tail
-log4j.logger.org.apache.sshd.server.channel.ChannelSession = INFO
-
-# CONSOLE appender not used by default
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %-32.32C %4L | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n
-
-# File appender
-log4j.appender.out=org.apache.log4j.RollingFileAppender
-log4j.appender.out.layout=org.apache.log4j.PatternLayout
-log4j.appender.out.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %-32.32C %4L | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n
-log4j.appender.out.file=${karaf.data}/log/karaf.log
-log4j.appender.out.append=true
-log4j.appender.out.maxFileSize=1MB
-log4j.appender.out.maxBackupIndex=10
-
-# Sift appender
-log4j.appender.sift=org.apache.log4j.sift.MDCSiftingAppender
-log4j.appender.sift.key=bundle.name
-log4j.appender.sift.default=karaf
-log4j.appender.sift.appender=org.apache.log4j.FileAppender
-log4j.appender.sift.appender.layout=org.apache.log4j.PatternLayout
-log4j.appender.sift.appender.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %-32.32C %4L | %m%n
-log4j.appender.sift.appender.file=${karaf.data}/log/$\\{bundle.name\\}.log
-log4j.appender.sift.appender.append=true
-
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.ops4j.pax.url.mvn.cfg b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.ops4j.pax.url.mvn.cfg
deleted file mode 100644
index db1361e..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/org.ops4j.pax.url.mvn.cfg
+++ /dev/null
@@ -1,103 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-#
-# If set to true, the following property will not allow any certificate to be used
-# when accessing Maven repositories through SSL
-#
-#org.ops4j.pax.url.mvn.certificateCheck=
-
-#
-# Path to the local Maven settings file.
-# The repositories defined in this file will be automatically added to the list
-# of default repositories if the 'org.ops4j.pax.url.mvn.repositories' property
-# below is not set.
-# The following locations are checked for the existence of the settings.xml file
-#   * 1. looks for the specified url
-#   * 2. if not found looks for ${user.home}/.m2/settings.xml
-#   * 3. if not found looks for ${maven.home}/conf/settings.xml
-#   * 4. if not found looks for ${M2_HOME}/conf/settings.xml
-#
-#org.ops4j.pax.url.mvn.settings=
-
-#
-# Path to the local Maven repository which is used to avoid downloading
-# artifacts when they already exist locally.
-# The value of this property will be extracted from the settings.xml file
-# above, or defaulted to:
-#     System.getProperty( "user.home" ) + "/.m2/repository"
-#
-#org.ops4j.pax.url.mvn.localRepository=
-
-#
-# Default this to false. It's just weird to use undocumented repos
-#
-org.ops4j.pax.url.mvn.useFallbackRepositories=false
-
-#
-# Uncomment if you don't wanna use the proxy settings
-# from the Maven conf/settings.xml file
-#
-# org.ops4j.pax.url.mvn.proxySupport=false
-
-#
-# Disable aether support by default.  This ensure that the defaultRepositories
-# below will be used
-#
-org.ops4j.pax.url.mvn.disableAether=true
-
-#
-# Comma separated list of repositories scanned when resolving an artifact.
-# Those repositories will be checked before iterating through the
-#    below list of repositories and even before the local repository
-# A repository url can be appended with zero or more of the following flags:
-#    @snapshots  : the repository contains snaphots
-#    @noreleases : the repository does not contain any released artifacts
-#    @id=reponid : the id for the repository, just like in the settings.xml this is optional but recomendet
-#
-# The following property value will add the system folder as a repo.
-#
-org.ops4j.pax.url.mvn.defaultRepositories=file:${karaf.home}/${karaf.default.repository}@snapshots@id=karaf.${karaf.default.repository}
-
-#
-# Comma separated list of repositories scanned when resolving an artifact.
-# The default list includes the following repositories:
-#    http://repo1.maven.org/maven2
-#    https://oss.sonatype.org/content/repositories/snapshots
-#    https://oss.sonatype.org/content/repositories/ops4j-snapshots
-#    http://repository.apache.org/content/groups/snapshots-group
-#    http://svn.apache.org/repos/asf/servicemix/m2-repo
-#    http://repository.springsource.com/maven/bundles/release
-#    http://repository.springsource.com/maven/bundles/external
-# To add repositories to the default ones, prepend '+' to the list of repositories
-# to add.
-# A repository url can be appended with zero or more of the following flags:
-#    @snapshots  : the repository contains snaphots
-#    @noreleases : the repository does not contain any released artifacts
-#
-org.ops4j.pax.url.mvn.repositories= \
-    http://repo1.maven.org/maven2@id=central, \
-    https://oss.sonatype.org/content/repositories/snapshots@snapshots@noreleases@id=sonatype-snapshot, \
-    https://oss.sonatype.org/content/repositories/ops4j-snapshots@snapshots@noreleases@id=ops4j-snapshot, \
-    http://repository.apache.org/content/groups/snapshots-group@snapshots@noreleases@id=apache, \
-    http://svn.apache.org/repos/asf/servicemix/m2-repo@id=servicemix, \
-    http://repository.springsource.com/maven/bundles/release@id=springsource, \
-    http://repository.springsource.com/maven/bundles/external@id=springsourceext, \
-    http://oss.sonatype.org/content/repositories/releases/@id=sonatype
-
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/shell.init.script b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/shell.init.script
deleted file mode 100644
index c1c90e6..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/shell.init.script
+++ /dev/null
@@ -1,126 +0,0 @@
-//
-// 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.
-//
-// This script is run each time a shell is created.
-// You can define here closures or variables that will be available
-// in each session.
-//
-ld = { log:display $args } ;
-lde = { log:display-exception $args } ;
-la = { osgi:list -t 0 $args } ;
-cl = { config:list "(service.pid=$args)" } ;
-help = { *:help $args | more } ;
-man = { help $args } ;
-
-enable-3x-aliases = {
-
-    // system:* aliases
-    system:framework = { dev:framework $args } ;
-    system:name = { osgi:name $args } ;
-    system:shutdown = { osgi:shutdown $args } ;
-    system:start-level = { osgi:start-level $args } ;
-    system:property = { dev:system-property $args } ;
-    system:version = { osgi:version $args } ;
-
-    // service:* aliases
-    service:list = { ls $args } ;
-    service:wait = { dev:wait-for-service $args } ;
-
-    // bundle:* aliases
-    bundle:dynamic-import = { dev:dynamic-import $args } ;
-    bundle:list = { osgi:list $args } ;
-    bundle:install = { osgi:install $args };
-    bundle:uninstall = { osgi:uninstall $args } ;
-    bundle:start = { osgi:start $args } ;
-    bundle:stop = { osgi:stop $args } ;
-    bundle:classes = { osgi:classes $args } ;
-    bundle:find-class = { osgi:find-class $args } ;
-    bundle:headers = { osgi:headers $args } ;
-    bundle:info = { osgi:info $args } ;
-    bundle:refresh = { osgi:refresh $args } ;
-    bundle:resolve = { osgi:resolve $args } ;
-    bundle:restart = { osgi:restart $args } ;
-    bundle:services = { osgi:bundle-services $args } ;
-    bundle:start-level = { osgi:start-level $args } ;
-    bundle:tree-show = { dev:show-tree $args } ;
-    bundle:update = { osgi:update $args } ;
-    bundle:watch = { dev:watch $args } ;
-
-    // config:* aliases
-    config:property-append = { config:propappend $args } ;
-    config:property-delete = { config:propdel $args } ;
-    config:property-list = { config:proplist $args } ;
-    config:property-set = { config:propset $args } ;
-
-    // dev:* aliases
-    dev:dump-create = { dev:create-dump $args } ;
-
-    // package:* aliases
-    package:exports = { packages:exports $args } ;
-    package:imports = { packages:imports $args } ;
-
-    // feature:* aliases
-    feature:add-url = { features:addurl $args } ;
-    feature:repo-add = { features:addurl $args } ;
-    feature:refresh-url = { features:refreshurl $args } ;
-    feature:info = { features:info $args } ;
-    feature:remove-repository = { features:removerepository $args } ;
-    feature:install = { features:install $args } ;
-    feature:repo-remove = { features:removeurl $args } ;
-    feature:list = { features:list $args } ;
-    feature:uninstall = { features:uninstall $args } ;
-    feature:repo-list = { features:listrepositories $args } ;
-    feature:url-list = { features:listurl $args } ;
-    feature:version-list = { features:listversions $args } ;
-
-    // system:* aliases
-    system:property = { dev:system-property $args } ;
-
-    // instance:* aliases
-    instance:opts-change = { admin:change-opts $args } ;
-    instance:rmi-registry-port-change = { admin:change-rmi-registry-port $args } ;
-    instance:rmi-server-port-change = { admin:change-rmi-server-port $args } ;
-    instance:ssh-port-change = { admin:change-ssh-port $args } ;
-    instance:clone = { admin:clone $args } ;
-    instance:connect = { admin:connect $args } ;
-    instance:create = { admin:create $args } ;
-    instance:destroy = { admin:destroy $args } ;
-    instance:list = { admin:list $args } ;
-    instance:rename = { admin:rename $args } ;
-    instance:start = { admin:start $args } ;
-    instance:stop = { admin:stop $args } ;
-
-    // jaas:* aliases
-    jaas:pending-list = { jaas:pending $args } ;
-    jaas:realm-list = { jaas:realms $args } ;
-    jaas:user-list = { jaas:users $args } ;
-    jaas:realm-manage = { jaas:manage $args } ;
-    jaas:role-add = { jaas:roleadd $args } ;
-    jaas:role-delete = { jaas:roledel $args } ;
-    jaas:user-add = { jaas:useradd $args } ;
-    jaas:user-delete = { jaas:userdel $args } ;
-
-    // obr:* aliases
-    obr:url-add = { obr:addUrl $args } ;
-    obr:url-list = { obr:listUrl $args } ;
-    obr:url-refresh = { obr:refreshUrl $args } ;
-    obr:url-remove = { obr:removeUrl $args } ;
-
-    echo "Karaf 3.x aliases enabled"
-
-}
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/system.properties b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/system.properties
deleted file mode 100644
index 25ea5ea..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/system.properties
+++ /dev/null
@@ -1,90 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-#
-# The properties defined in this file will be made available through system
-# properties at the very beginning of the Karaf's boot process.
-#
-
-
-# Log level when the pax-logging service is not available
-# This level will only be used while the pax-logging service bundle
-# is not fully available.
-# To change log levels, please refer to the org.ops4j.pax.logging.cfg file
-# instead.
-org.ops4j.pax.logging.DefaultServiceLog.level=ERROR
-
-#
-# Name of this Karaf instance.
-#
-karaf.name=root
-
-#
-# Default repository where bundles will be loaded from before using
-# other Maven repositories.  For the full Maven configuration, see
-# the org.ops4j.pax.url.mvn.cfg file.
-#
-karaf.default.repository=system
-
-#
-# Location of a shell script that will be run when starting a shell
-# session.  This script can be used to create aliases and define
-# additional commands.
-#
-karaf.shell.init.script=${karaf.home}/etc/shell.init.script
-
-#
-# Default role name used for console authorization (JMX, SSH and WEB)
-# The syntax is the following:
-#   [classname:]principal
-# where classname is the class name of the principal object
-# (defaults to org.apache.karaf.jaas.modules.RolePrincipal)
-# and principal is the name of the principal of that class
-# (defaults to admin).
-#
-# Note that this value can be overriden using the various ConfigAdmin
-# configurations for JMX, SSH or the WebConsole.
-#
-karaf.admin.role=admin
-
-#
-# Set this empty property to avoid errors when validating xml documents.
-#
-xml.catalog.files=
-
-#
-# Suppress the bell in the console when hitting backspace too many times
-# for example
-#
-jline.nobell=true
-
-#
-# ServiceMix specs options
-#
-org.apache.servicemix.specs.debug=false
-org.apache.servicemix.specs.timeout=0
-
-#
-# Settings for the OSGi 4.3 Weaving
-# By default, we will not weave any classes. Change this setting to include classes
-# that you application needs to have woven.
-#
-org.apache.aries.proxy.weaving.enabled=none
-# Classes not to weave - Aries default + Xerces which is known to have issues.
-org.apache.aries.proxy.weaving.disabled=org.objectweb.asm.*,org.slf4j.*,org.apache.log4j.*,javax.*,org.apache.xerces.*
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/users.properties b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/users.properties
deleted file mode 100644
index 25c63e6..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/etc/users.properties
+++ /dev/null
@@ -1,30 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-#
-# This file contains the valid users who can log into Karaf. Each line have to be of
-# the format:
-#
-# USER=PASSWORD,ROLE1,ROLE2,...
-#
-# All users and roles entered in this file are available after Karaf startup
-# and modifiable via the JAAS command group. These users reside in a JAAS domain
-# with the name "karaf"..
-#
-karaf=karaf,admin
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/lib/README b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/lib/README
deleted file mode 100644
index 9eca75a..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/lib/README
+++ /dev/null
@@ -1,27 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-This directory is the standard Java classpath directory.
-Any jar in this folder will be part of the main classloader used to load Karaf.
-However, in OSGi, classes defined in these jars won't be available to other
-bundles unless one of the org.osgi.framework.system.packages.extra or
-org.osgi.framework.bootdelegation properties in the etc/config.properties file
-is modified to export or delegate the packages.
-Please refer to the OSGi Core Specification for more information on these
-properties and the OSGi classloading mechanism.
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/lib/endorsed/README b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/lib/endorsed/README
deleted file mode 100644
index 0665a52..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/lib/endorsed/README
+++ /dev/null
@@ -1,23 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-This directory is the Java endorsed directory.
-Any jar in this folder will be used to override classes defined by the JVM.
-For more information, see:
-   http://download.oracle.com/javase/6/docs/technotes/guides/standards/
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/lib/ext/README b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/lib/ext/README
deleted file mode 100644
index 09ff822..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/text/lib/ext/README
+++ /dev/null
@@ -1,23 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-This directory is the Java extension directory.
-Any jar in this folder will be used as a JVM extension.
-For more information, see
-   http://download.oracle.com/javase/6/docs/technotes/guides/extensions/spec.html
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/unix-shell/bin/karaf b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/unix-shell/bin/karaf
deleted file mode 100755
index 2e16915..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/unix-shell/bin/karaf
+++ /dev/null
@@ -1,387 +0,0 @@
-#!/bin/sh
-#
-#    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.
-#
-
-DIRNAME=`dirname "$0"`
-PROGNAME=`basename "$0"`
-
-#
-# Sourcing environment settings for karaf similar to tomcats setenv
-#
-KARAF_SCRIPT="karaf"
-export KARAF_SCRIPT
-if [ -f "$DIRNAME/setenv" ]; then
-  . "$DIRNAME/setenv"
-fi
-
-#
-# Check/Set up some easily accessible MIN/MAX params for JVM mem usage
-#
-if [ "x$JAVA_MIN_MEM" = "x" ]; then
-    JAVA_MIN_MEM=128M
-    export JAVA_MIN_MEM
-fi
-if [ "x$JAVA_MAX_MEM" = "x" ]; then
-    JAVA_MAX_MEM=512M
-    export JAVA_MAX_MEM
-fi
-
-#
-# Check the mode that initiated the script
-#
-if [ "x$1" != "x" ]; then
-    MODE=$1
-fi
-
-warn() {
-    echo "${PROGNAME}: $*"
-}
-
-die() {
-    warn "$*"
-    exit 1
-}
-
-detectOS() {
-    # OS specific support (must be 'true' or 'false').
-    cygwin=false;
-    darwin=false;
-    aix=false;
-    os400=false;
-    case "`uname`" in
-        CYGWIN*)
-            cygwin=true
-            ;;
-        Darwin*)
-            darwin=true
-            ;;
-        AIX*)
-            aix=true
-            ;;
-        OS400*)
-            os400=true
-            ;;
-    esac
-    # For AIX, set an environment variable
-    if $aix; then
-         export LDR_CNTRL=MAXDATA=0xB0000000@DSA
-         export IBM_JAVA_HEAPDUMP_TEXT=true
-         echo $LDR_CNTRL
-    fi
-}
-
-unlimitFD() {
-    # Use the maximum available, or set MAX_FD != -1 to use that
-    if [ "x$MAX_FD" = "x" ]; then
-        MAX_FD="maximum"
-    fi
-
-    # Increase the maximum file descriptors if we can
-    if [ "$os400" = "false" ] && [ "$cygwin" = "false" ]; then
-        MAX_FD_LIMIT=`ulimit -H -n`
-        if [ "$MAX_FD_LIMIT" != 'unlimited' ]; then 
-            if [ $? -eq 0 ]; then
-                if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ]; then
-                    # use the system max
-                    MAX_FD="$MAX_FD_LIMIT"
-                fi
-
-                ulimit -n $MAX_FD > /dev/null
-                # echo "ulimit -n" `ulimit -n`
-                if [ $? -ne 0 ]; then
-                    warn "Could not set maximum file descriptor limit: $MAX_FD"
-                fi
-            else
-                warn "Could not query system maximum file descriptor limit: $MAX_FD_LIMIT"
-            fi
-        fi
-    fi
-}
-
-locateHome() {
-    if [ "x$KARAF_HOME" != "x" ]; then
-        warn "Ignoring predefined value for KARAF_HOME"
-    fi
-
-    # In POSIX shells, CDPATH may cause cd to write to stdout
-    (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-    KARAF_HOME=`cd "$DIRNAME/.."; pwd`
-    if [ ! -d "$KARAF_HOME" ]; then
-        die "KARAF_HOME is not valid: $KARAF_HOME"
-    fi
-}
-
-locateBase() {
-    if [ "x$KARAF_BASE" != "x" ]; then
-        if [ ! -d "$KARAF_BASE" ]; then
-            die "KARAF_BASE is not valid: $KARAF_BASE"
-        fi
-    else
-        KARAF_BASE=$KARAF_HOME
-    fi
-}
-
-locateData() {
-    if [ "x$KARAF_DATA" != "x" ]; then
-        if [ ! -d "$KARAF_DATA" ]; then
-            die "KARAF_DATA is not valid: $KARAF_DATA"
-        fi
-    else
-        KARAF_DATA=$KARAF_BASE/data
-    fi
-}
-
-setupNativePath() {
-    # Support for loading native libraries
-    LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:$KARAF_BASE/lib:$KARAF_HOME/lib"
-
-    # For Cygwin, set PATH from LD_LIBRARY_PATH
-    if $cygwin; then
-        LD_LIBRARY_PATH=`cygpath --path --windows "$LD_LIBRARY_PATH"`
-        PATH="$PATH;$LD_LIBRARY_PATH"
-        export PATH
-    fi
-    export LD_LIBRARY_PATH
-}
-
-pathCanonical() {
-    local dst="${1}"
-    while [ -h "${dst}" ] ; do
-        ls=`ls -ld "${dst}"`
-        link=`expr "$ls" : '.*-> \(.*\)$'`
-        if expr "$link" : '/.*' > /dev/null; then
-            dst="$link"
-        else
-            dst="`dirname "${dst}"`/$link"
-        fi
-    done
-    local bas=`basename "${dst}"`
-    local dir=`dirname "${dst}"`
-    if [ "$bas" != "$dir" ]; then
-      dst="`pathCanonical "$dir"`/$bas"
-    fi
-    echo "${dst}" | sed -e 's#//#/#g' -e 's#/./#/#g' -e 's#/[^/]*/../#/#g'
-}
-
-locateJava() {
-    # Setup the Java Virtual Machine
-    if $cygwin ; then
-        [ -n "$JAVA" ] && JAVA=`cygpath --unix "$JAVA"`
-        [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-    fi
-
-	if [ "x$JAVA_HOME" = "x" ] && [ "$darwin" = "true" ]; then
-		JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home
-	fi
-    if [ "x$JAVA" = "x" ] && [ -r /etc/gentoo-release ] ; then
-        JAVA_HOME=`java-config --jre-home`
-    fi
-    if [ "x$JAVA" = "x" ]; then
-        if [ "x$JAVA_HOME" != "x" ]; then
-            if [ ! -d "$JAVA_HOME" ]; then
-                die "JAVA_HOME is not valid: $JAVA_HOME"
-            fi
-            JAVA="$JAVA_HOME/bin/java"
-        else
-            warn "JAVA_HOME not set; results may vary"
-            JAVA=`type java`
-            JAVA=`expr "$JAVA" : '.*is \(.*\)$'`
-            if [ "x$JAVA" = "x" ]; then
-                die "java command not found"
-            fi
-        fi
-    fi
-    if [ "x$JAVA_HOME" = "x" ]; then
-        JAVA_HOME="$(dirname $(dirname $(pathCanonical "$JAVA")))"
-    fi
-}
-
-detectJVM() {
-   #echo "`$JAVA -version`"
-   # This service should call `java -version`,
-   # read stdout, and look for hints
-   if $JAVA -version 2>&1 | grep "^IBM" ; then
-       JVM_VENDOR="IBM"
-   # on OS/400, java -version does not contain IBM explicitly
-   elif $os400; then
-       JVM_VENDOR="IBM"
-   else
-       JVM_VENDOR="SUN"
-   fi
-   # echo "JVM vendor is $JVM_VENDOR"
-}
-
-setupDebugOptions() {
-    if [ "x$JAVA_OPTS" = "x" ]; then
-        JAVA_OPTS="$DEFAULT_JAVA_OPTS"
-    fi
-    export JAVA_OPTS
-
-    # Set Debug options if enabled
-    if [ "x$KARAF_DEBUG" != "x" ]; then
-        # Ignore DEBUG in case of stop or client mode
-        if [ "x$MODE" = "xstop" ]; then
-            return
-        fi
-        if [ "x$MODE" = "xclient" ]; then
-            return
-        fi
-        # Use the defaults if JAVA_DEBUG_OPTS was not set
-        if [ "x$JAVA_DEBUG_OPTS" = "x" ]; then
-            JAVA_DEBUG_OPTS="$DEFAULT_JAVA_DEBUG_OPTS"
-        fi
-
-        JAVA_OPTS="$JAVA_DEBUG_OPTS $JAVA_OPTS"
-        warn "Enabling Java debug options: $JAVA_DEBUG_OPTS"
-    fi
-}
-
-setupDefaults() {
-    DEFAULT_JAVA_OPTS="-Xms$JAVA_MIN_MEM -Xmx$JAVA_MAX_MEM "
-
-    #Set the JVM_VENDOR specific JVM flags
-    if [ "$JVM_VENDOR" = "SUN" ]; then
-        #
-        # Check some easily accessible MIN/MAX params for JVM mem usage
-        #
-        if [ "x$JAVA_PERM_MEM" != "x" ]; then
-            DEFAULT_JAVA_OPTS="$DEFAULT_JAVA_OPTS -XX:PermSize=$JAVA_PERM_MEM"
-        fi
-        if [ "x$JAVA_MAX_PERM_MEM" != "x" ]; then
-            DEFAULT_JAVA_OPTS="$DEFAULT_JAVA_OPTS -XX:MaxPermSize=$JAVA_MAX_PERM_MEM"
-        fi
-        DEFAULT_JAVA_OPTS="-server $DEFAULT_JAVA_OPTS -Dcom.sun.management.jmxremote"
-    elif [ "$JVM_VENDOR" = "IBM" ]; then
-        if $os400; then
-            DEFAULT_JAVA_OPTS="$DEFAULT_JAVA_OPTS"
-        elif $aix; then
-            DEFAULT_JAVA_OPTS="-Xverify:none -Xlp $DEFAULT_JAVA_OPTS"
-        else
-            DEFAULT_JAVA_OPTS="-Xverify:none $DEFAULT_JAVA_OPTS"
-        fi
-    fi
-
-    # Add the jars in the lib dir
-    for file in "$KARAF_HOME"/lib/karaf*.jar
-    do
-        if [ -z "$CLASSPATH" ]; then
-            CLASSPATH="$file"
-        else
-            CLASSPATH="$CLASSPATH:$file"
-        fi
-    done
-    DEFAULT_JAVA_DEBUG_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
-
-    ##
-    ## TODO: Move to conf/profiler/yourkit.{sh|cmd}
-    ##
-    # Uncomment to enable YourKit profiling
-    #DEFAULT_JAVA_DEBUG_OPTS="-Xrunyjpagent"
-}
-
-init() {
-    # Determine if there is special OS handling we must perform
-    detectOS
-
-    # Unlimit the number of file descriptors if possible
-    unlimitFD
-
-    # Locate the Karaf home directory
-    locateHome
-
-    # Locate the Karaf base directory
-    locateBase
-
-    # Locate the Karaf data directory
-    locateData
-
-    # Setup the native library path
-    setupNativePath
-
-    # Locate the Java VM to execute
-    locateJava
-
-    # Determine the JVM vendor
-    detectJVM
-
-    # Setup default options
-    setupDefaults
-
-    # Install debug options
-    setupDebugOptions
-
-}
-
-run() {
-    OPTS="-Dkaraf.startLocalConsole=true -Dkaraf.startRemoteShell=true"
-    MAIN=org.apache.karaf.main.Main
-    while [ "$1" != "" ]; do
-        case $1 in
-            'clean')
-                rm -Rf $KARAF_DATA
-                shift
-                ;;
-            'debug')
-                if [ "x$JAVA_DEBUG_OPTS" = "x" ]; then
-                    JAVA_DEBUG_OPTS="$DEFAULT_JAVA_DEBUG_OPTS"
-                fi
-                JAVA_OPTS="$JAVA_DEBUG_OPTS $JAVA_OPTS"
-                shift
-                ;;
-            'stop')
-                MAIN=org.apache.karaf.main.Stop
-                shift
-                ;;
-            'console')
-                shift
-                ;;
-            'server')
-                OPTS="-Dkaraf.startLocalConsole=false -Dkaraf.startRemoteShell=true"
-                shift
-                ;;
-            'client')
-                OPTS="-Dkaraf.startLocalConsole=true -Dkaraf.startRemoteShell=false"
-                shift
-                ;;
-            *)
-                break
-                ;;
-        esac
-    done
-
-    JAVA_ENDORSED_DIRS="${JAVA_HOME}/jre/lib/endorsed:${JAVA_HOME}/lib/endorsed:${KARAF_HOME}/lib/endorsed"
-    JAVA_EXT_DIRS="${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext:${KARAF_HOME}/lib/ext"
-    if $cygwin; then
-        KARAF_HOME=`cygpath --path --windows "$KARAF_HOME"`
-        KARAF_BASE=`cygpath --path --windows "$KARAF_BASE"`
-        KARAF_DATA=`cygpath --path --windows "$KARAF_DATA"`
-        CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
-        JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
-        JAVA_ENDORSED_DIRS=`cygpath --path --windows "$JAVA_ENDORSED_DIRS"`
-        JAVA_EXT_DIRS=`cygpath --path --windows "$JAVA_EXT_DIRS"`
-    fi
-    cd "$KARAF_BASE"
-    exec "$JAVA" $JAVA_OPTS -Djava.endorsed.dirs="${JAVA_ENDORSED_DIRS}" -Djava.ext.dirs="${JAVA_EXT_DIRS}" -Dkaraf.instances="${KARAF_HOME}/instances" -Dkaraf.home="$KARAF_HOME" -Dkaraf.base="$KARAF_BASE" -Dkaraf.data="$KARAF_DATA" -Djava.io.tmpdir="$KARAF_DATA/tmp" -Djava.util.logging.config.file="$KARAF_BASE/etc/java.util.logging.properties" $KARAF_OPTS $OPTS -classpath "$CLASSPATH" $MAIN "$@"
-}
-
-main() {
-    init
-    run "$@"
-}
-
-main "$@"
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/unix-shell/bin/setenv b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/unix-shell/bin/setenv
deleted file mode 100755
index 337d8c0..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/unix-shell/bin/setenv
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/bin/sh
-#
-#    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.
-#
-
-#
-# handle specific scripts; the SCRIPT_NAME is exactly the name of the Karaf
-# script; for example karaf, start, stop, admin, client, ...
-#
-# if [ "$KARAF_SCRIPT" == "SCRIPT_NAME" ]; then
-#   Actions go here...
-# fi
-
-#
-# general settings which should be applied for all scripts go here; please keep
-# in mind that it is possible that scripts might be executed more than once, e.g.
-# in example of the start script where the start script is executed first and the
-# karaf script afterwards.
-#
-
-#
-# The following section shows the possible configuration options for the default 
-# karaf scripts
-#
-# export JAVA_MIN_MEM # Minimum memory for the JVM
-# export JAVA_MAX_MEM # Maximum memory for the JVM
-# export JAVA_PERM_MEM # Minimum perm memory for the JVM
-# export JAVA_MAX_PERM_MEM # Maximum memory for the JVM
-# export KARAF_HOME # Karaf home folder
-# export KARAF_DATA # Karaf data folder
-# export KARAF_BASE # Karaf base folder
-# export KARAF_OPTS # Additional available Karaf options
-
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/unix-shell/bin/start b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/unix-shell/bin/start
deleted file mode 100755
index 12903e6..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/unix-shell/bin/start
+++ /dev/null
@@ -1,136 +0,0 @@
-#!/bin/sh
-#
-#    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.
-#
-
-DIRNAME=`dirname "$0"`
-PROGNAME=`basename "$0"`
-
-#
-# Sourcing environment settings for karaf similar to tomcats setenv 
-#
-KARAF_SCRIPT="start"
-export KARAF_SCRIPT
-if [ -f "$DIRNAME/setenv" ]; then
-  . "$DIRNAME/setenv"
-fi
-
-warn() {
-    echo "${PROGNAME}: $*"
-}
-
-die() {
-    warn "$*"
-    exit 1
-}
-
-detectOS() {
-    # OS specific support (must be 'true' or 'false').
-    cygwin=false;
-    darwin=false;
-    aix=false;
-    os400=false;
-    case "`uname`" in
-        CYGWIN*)
-            cygwin=true
-            ;;
-        Darwin*)
-            darwin=true
-            ;;
-        AIX*)
-            aix=true
-            ;;
-        OS400*)
-            os400=true
-            ;;
-    esac
-    # For AIX, set an environment variable
-    if $aix; then
-         export LDR_CNTRL=MAXDATA=0xB0000000@DSA
-         export IBM_JAVA_HEAPDUMP_TEXT=true
-         echo $LDR_CNTRL
-    fi
-}
-
-locateHome() {
-    if [ "x$KARAF_HOME" != "x" ]; then
-        warn "Ignoring predefined value for KARAF_HOME"
-    fi
-
-    # In POSIX shells, CDPATH may cause cd to write to stdout
-    (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-    KARAF_HOME=`cd "$DIRNAME/.."; pwd`
-    if [ ! -d "$KARAF_HOME" ]; then
-        die "KARAF_HOME is not valid: $KARAF_HOME"
-    fi
-}
-
-locateBase() {
-    if [ "x$KARAF_BASE" != "x" ]; then
-        if [ ! -d "$KARAF_BASE" ]; then
-            die "KARAF_BASE is not valid: $KARAF_BASE"
-        fi
-    else
-        KARAF_BASE=$KARAF_HOME
-    fi
-}
-
-locateData() {
-    if [ "x$KARAF_DATA" != "x" ]; then
-        if [ ! -d "$KARAF_DATA" ]; then
-            die "KARAF_DATA is not valid: $KARAF_DATA"
-        fi
-    else
-        KARAF_DATA=$KARAF_BASE/data
-    fi
-}
-
-init() {
-    # Determine if there is special OS handling we must perform
-    detectOS
-
-    # Locate the Karaf home directory
-    locateHome
-
-    # Locate the Karaf base directory
-    locateBase
-
-    # Locate the Karaf data directory
-    locateData
-}
-
-run() {
-    if $cygwin; then
-        KARAF_HOME=`cygpath --path --windows "$KARAF_HOME"`
-        KARAF_BASE=`cygpath --path --windows "$KARAF_BASE"`
-        KARAF_DATA=`cygpath --path --windows "$KARAF_DATA"`
-        CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
-    fi
-    # Ensure the log directory exists -- we need to have a place to redirect stdout/stderr
-    if [ ! -d "$KARAF_DATA/log" ]; then
-        mkdir -p "$KARAF_DATA/log"
-    fi
-    exec "$KARAF_HOME"/bin/karaf server "$@" >> "$KARAF_DATA/karaf.out" 2>&1 &
-}
-
-main() {
-    init
-    run "$@"
-}
-
-main "$@"
-
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/unix-shell/bin/stop b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/unix-shell/bin/stop
deleted file mode 100755
index 04fdea2..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/unix-shell/bin/stop
+++ /dev/null
@@ -1,136 +0,0 @@
-#!/bin/sh
-#
-#    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.
-#
-
-DIRNAME=`dirname "$0"`
-PROGNAME=`basename "$0"`
-
-#
-# Sourcing environment settings for karaf similar to tomcats setenv 
-#
-KARAF_SCRIPT="stop"
-export KARAF_SCRIPT
-if [ -f "$DIRNAME/setenv" ]; then
-  . "$DIRNAME/setenv"
-fi
-
-warn() {
-    echo "${PROGNAME}: $*"
-}
-
-die() {
-    warn "$*"
-    exit 1
-}
-
-detectOS() {
-    # OS specific support (must be 'true' or 'false').
-    cygwin=false;
-    darwin=false;
-    aix=false;
-    os400=false;
-    case "`uname`" in
-        CYGWIN*)
-            cygwin=true
-            ;;
-        Darwin*)
-            darwin=true
-            ;;
-        AIX*)
-            aix=true
-            ;;
-        OS400*)
-            os400=true
-            ;;
-    esac
-    # For AIX, set an environment variable
-    if $aix; then
-         export LDR_CNTRL=MAXDATA=0xB0000000@DSA
-         export IBM_JAVA_HEAPDUMP_TEXT=true
-         echo $LDR_CNTRL
-    fi
-}
-
-locateHome() {
-    if [ "x$KARAF_HOME" != "x" ]; then
-        warn "Ignoring predefined value for KARAF_HOME"
-    fi
-
-    # In POSIX shells, CDPATH may cause cd to write to stdout
-    (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-    KARAF_HOME=`cd "$DIRNAME/.."; pwd`
-    if [ ! -d "$KARAF_HOME" ]; then
-        die "KARAF_HOME is not valid: $KARAF_HOME"
-    fi
-}
-
-locateBase() {
-    if [ "x$KARAF_BASE" != "x" ]; then
-        if [ ! -d "$KARAF_BASE" ]; then
-            die "KARAF_BASE is not valid: $KARAF_BASE"
-        fi
-    else
-        KARAF_BASE=$KARAF_HOME
-    fi
-}
-
-locateData() {
-    if [ "x$KARAF_DATA" != "x" ]; then
-        if [ ! -d "$KARAF_DATA" ]; then
-            die "KARAF_DATA is not valid: $KARAF_DATA"
-        fi
-    else
-        KARAF_DATA=$KARAF_BASE/data
-    fi
-}
-
-init() {
-    # Determine if there is special OS handling we must perform
-    detectOS
-
-    # Locate the Karaf home directory
-    locateHome
-
-    # Locate the Karaf base directory
-    locateBase
-
-    # Locate the Karaf data directory
-    locateData
-}
-
-run() {
-    if $cygwin; then
-        KARAF_HOME=`cygpath --path --windows "$KARAF_HOME"`
-        KARAF_BASE=`cygpath --path --windows "$KARAF_BASE"`
-        KARAF_DATA=`cygpath --path --windows "$KARAF_DATA"`
-        CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
-    fi
-    # Ensure the log directory exists -- we need to have a place to redirect stdout/stderr
-    if [ ! -d "$KARAF_DATA/log" ]; then
-        mkdir -p "$KARAF_DATA/log"
-    fi
-    exec "$KARAF_HOME"/bin/karaf stop "$@"
-}
-
-main() {
-    init
-    run "$@"
-}
-
-main "$@"
-
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/windows-text/bin/karaf.bat b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/windows-text/bin/karaf.bat
deleted file mode 100755
index 34ebaf9..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/windows-text/bin/karaf.bat
+++ /dev/null
@@ -1,303 +0,0 @@
-@echo off
-rem
-rem
-rem    Licensed to the Apache Software Foundation (ASF) under one or more
-rem    contributor license agreements.  See the NOTICE file distributed with
-rem    this work for additional information regarding copyright ownership.
-rem    The ASF licenses this file to You under the Apache License, Version 2.0
-rem    (the "License"); you may not use this file except in compliance with
-rem    the License.  You may obtain a copy of the License at
-rem
-rem       http://www.apache.org/licenses/LICENSE-2.0
-rem
-rem    Unless required by applicable law or agreed to in writing, software
-rem    distributed under the License is distributed on an "AS IS" BASIS,
-rem    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-rem    See the License for the specific language governing permissions and
-rem    limitations under the License.
-rem
-
-if not "%ECHO%" == "" echo %ECHO%
-
-setlocal
-set DIRNAME=%~dp0%
-set PROGNAME=%~nx0%
-set ARGS=%*
-
-rem Sourcing environment settings for karaf similar to tomcats setenv
-SET KARAF_SCRIPT="karaf.bat"
-if exist "%DIRNAME%setenv.bat" (
-  call "%DIRNAME%setenv.bat"
-)
-
-rem Check console window title. Set to Karaf by default
-if not "%KARAF_TITLE%" == "" (
-    title %KARAF_TITLE%
-) else (
-    title Karaf
-)
-
-rem Check/Set up some easily accessible MIN/MAX params for JVM mem usage
-if "%JAVA_MIN_MEM%" == "" (
-    set JAVA_MIN_MEM=128M
-)
-if "%JAVA_MAX_MEM%" == "" (
-    set JAVA_MAX_MEM=512M
-)
-
-goto BEGIN
-
-:warn
-    echo %PROGNAME%: %*
-goto :EOF
-
-:BEGIN
-
-rem # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-
-if not "%KARAF_HOME%" == "" (
-    call :warn Ignoring predefined value for KARAF_HOME
-)
-set KARAF_HOME=%DIRNAME%..
-if not exist "%KARAF_HOME%" (
-    call :warn KARAF_HOME is not valid: "%KARAF_HOME%"
-    goto END
-)
-
-if not "%KARAF_BASE%" == "" (
-    if not exist "%KARAF_BASE%" (
-       call :warn KARAF_BASE is not valid: "%KARAF_BASE%"
-       goto END
-    )
-)
-if "%KARAF_BASE%" == "" (
-  set "KARAF_BASE=%KARAF_HOME%"
-)
-
-if not "%KARAF_DATA%" == "" (
-    if not exist "%KARAF_DATA%" (
-        call :warn KARAF_DATA is not valid: "%KARAF_DATA%"
-        goto END
-    )
-)
-if "%KARAF_DATA%" == "" (
-    set "KARAF_DATA=%KARAF_BASE%\data"
-)        
-
-set LOCAL_CLASSPATH=%CLASSPATH%
-
-set JAVA_MODE=-server
-if not exist "%JAVA_HOME%\bin\server\jvm.dll" (
-    if not exist "%JAVA_HOME%\jre\bin\server\jvm.dll" (
-        echo WARNING: Running karaf on a Java HotSpot Client VM because server-mode is not available.
-        echo Install Java Developer Kit to fix this.
-        echo For more details see http://java.sun.com/products/hotspot/whitepaper.html#client
-        set JAVA_MODE=-client
-    )
-)
-set DEFAULT_JAVA_OPTS=%JAVA_MODE% -Xms%JAVA_MIN_MEM% -Xmx%JAVA_MAX_MEM% -Dderby.system.home="%KARAF_DATA%\derby" -Dderby.storage.fileSyncTransactionLog=true -Dcom.sun.management.jmxremote
-
-rem Check some easily accessible MIN/MAX params for JVM mem usage
-if not "%JAVA_PERM_MEM%" == "" (
-    set DEFAULT_JAVA_OPTS=%DEFAULT_JAVA_OPTS% -XX:PermSize=%JAVA_PERM_MEM%
-)
-if not "%JAVA_MAX_PERM_MEM%" == "" (
-    set DEFAULT_JAVA_OPTS=%DEFAULT_JAVA_OPTS% -XX:MaxPermSize=%JAVA_MAX_PERM_MEM%
-)
-
-set CLASSPATH=%LOCAL_CLASSPATH%;%KARAF_BASE%\conf
-set DEFAULT_JAVA_DEBUG_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
-
-if "%LOCAL_CLASSPATH%" == "" goto :KARAF_CLASSPATH_EMPTY
-    set CLASSPATH=%LOCAL_CLASSPATH%;%KARAF_BASE%\conf
-    goto :KARAF_CLASSPATH_END
-:KARAF_CLASSPATH_EMPTY
-    set CLASSPATH=%KARAF_BASE%\conf
-:KARAF_CLASSPATH_END
-
-rem Setup Karaf Home
-if exist "%KARAF_HOME%\conf\karaf-rc.cmd" call %KARAF_HOME%\conf\karaf-rc.cmd
-if exist "%HOME%\karaf-rc.cmd" call %HOME%\karaf-rc.cmd
-
-rem Support for loading native libraries
-set PATH=%PATH%;%KARAF_BASE%\lib;%KARAF_HOME%\lib
-
-rem Setup the Java Virtual Machine
-if not "%JAVA%" == "" goto :Check_JAVA_END
-    if not "%JAVA_HOME%" == "" goto :TryJDKEnd
-        call :warn JAVA_HOME not set; results may vary
-:TryJRE
-    start /w regedit /e __reg1.txt "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment"
-    if not exist __reg1.txt goto :TryJDK
-    type __reg1.txt | find "CurrentVersion" > __reg2.txt
-    if errorlevel 1 goto :TryJDK
-    for /f "tokens=2 delims==" %%x in (__reg2.txt) do set JavaTemp=%%~x
-    if errorlevel 1 goto :TryJDK
-    set JavaTemp=%JavaTemp%##
-    set JavaTemp=%JavaTemp:                ##=##%
-    set JavaTemp=%JavaTemp:        ##=##%
-    set JavaTemp=%JavaTemp:    ##=##%
-    set JavaTemp=%JavaTemp:  ##=##%
-    set JavaTemp=%JavaTemp: ##=##%
-    set JavaTemp=%JavaTemp:##=%
-    del __reg1.txt
-    del __reg2.txt
-    start /w regedit /e __reg1.txt "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\%JavaTemp%"
-    if not exist __reg1.txt goto :TryJDK
-    type __reg1.txt | find "JavaHome" > __reg2.txt
-    if errorlevel 1 goto :TryJDK
-    for /f "tokens=2 delims==" %%x in (__reg2.txt) do set JAVA_HOME=%%~x
-    if errorlevel 1 goto :TryJDK
-    del __reg1.txt
-    del __reg2.txt
-    goto TryJDKEnd
-:TryJDK
-    start /w regedit /e __reg1.txt "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit"
-    if not exist __reg1.txt (
-        call :warn Unable to retrieve JAVA_HOME
-        goto END
-    )
-    type __reg1.txt | find "CurrentVersion" > __reg2.txt
-    if errorlevel 1 (
-        call :warn Unable to retrieve JAVA_HOME
-        goto END
-    )
-    for /f "tokens=2 delims==" %%x in (__reg2.txt) do set JavaTemp=%%~x
-    if errorlevel 1 (
-        call :warn Unable to retrieve JAVA_HOME
-        goto END
-    )
-    set JavaTemp=%JavaTemp%##
-    set JavaTemp=%JavaTemp:                ##=##%
-    set JavaTemp=%JavaTemp:        ##=##%
-    set JavaTemp=%JavaTemp:    ##=##%
-    set JavaTemp=%JavaTemp:  ##=##%
-    set JavaTemp=%JavaTemp: ##=##%
-    set JavaTemp=%JavaTemp:##=%
-    del __reg1.txt
-    del __reg2.txt
-    start /w regedit /e __reg1.txt "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\%JavaTemp%"
-    if not exist __reg1.txt (
-        call :warn Unable to retrieve JAVA_HOME from JDK
-        goto END
-    )
-    type __reg1.txt | find "JavaHome" > __reg2.txt
-    if errorlevel 1 (
-        call :warn Unable to retrieve JAVA_HOME
-        goto END
-    )
-    for /f "tokens=2 delims==" %%x in (__reg2.txt) do set JAVA_HOME=%%~x
-    if errorlevel 1 (
-        call :warn Unable to retrieve JAVA_HOME
-        goto END
-    )
-    del __reg1.txt
-    del __reg2.txt
-:TryJDKEnd
-    if not exist "%JAVA_HOME%" (
-        call :warn JAVA_HOME is not valid: "%JAVA_HOME%"
-        goto END
-    )
-    set JAVA=%JAVA_HOME%\bin\java
-:Check_JAVA_END
-
-if "%JAVA_OPTS%" == "" set JAVA_OPTS=%DEFAULT_JAVA_OPTS%
-
-if "%KARAF_DEBUG%" == "" goto :KARAF_DEBUG_END
-    if "%1" == "stop" goto :KARAF_DEBUG_END
-    if "%1" == "client" goto :KARAF_DEBUG_END
-    rem Use the defaults if JAVA_DEBUG_OPTS was not set
-    if "%JAVA_DEBUG_OPTS%" == "" set JAVA_DEBUG_OPTS=%DEFAULT_JAVA_DEBUG_OPTS%
-
-    set "JAVA_OPTS=%JAVA_DEBUG_OPTS% %JAVA_OPTS%"
-    call :warn Enabling Java debug options: %JAVA_DEBUG_OPTS%
-:KARAF_DEBUG_END
-
-if "%KARAF_PROFILER%" == "" goto :KARAF_PROFILER_END
-    set KARAF_PROFILER_SCRIPT=%KARAF_HOME%\conf\profiler\%KARAF_PROFILER%.cmd
-
-    if exist "%KARAF_PROFILER_SCRIPT%" goto :KARAF_PROFILER_END
-    call :warn Missing configuration for profiler '%KARAF_PROFILER%': %KARAF_PROFILER_SCRIPT%
-    goto END
-:KARAF_PROFILER_END
-
-rem Setup the classpath
-pushd "%KARAF_HOME%\lib"
-for %%G in (karaf*.jar) do call:APPEND_TO_CLASSPATH %%G
-popd
-goto CLASSPATH_END
-
-: APPEND_TO_CLASSPATH
-set filename=%~1
-set suffix=%filename:~-4%
-if %suffix% equ .jar set CLASSPATH=%CLASSPATH%;%KARAF_HOME%\lib\%filename%
-goto :EOF
-
-:CLASSPATH_END
-
-rem Execute the JVM or the load the profiler
-if "%KARAF_PROFILER%" == "" goto :RUN
-    rem Execute the profiler if it has been configured
-    call :warn Loading profiler script: %KARAF_PROFILER_SCRIPT%
-    call %KARAF_PROFILER_SCRIPT%
-
-:RUN
-    SET OPTS=-Dkaraf.startLocalConsole=true -Dkaraf.startRemoteShell=true
-    SET MAIN=org.apache.karaf.main.Main
-    SET SHIFT=false
-
-:RUN_LOOP
-    if "%1" == "stop" goto :EXECUTE_STOP
-    if "%1" == "console" goto :EXECUTE_CONSOLE
-    if "%1" == "server" goto :EXECUTE_SERVER
-    if "%1" == "client" goto :EXECUTE_CLIENT
-    if "%1" == "clean" goto :EXECUTE_CLEAN
-    if "%1" == "debug" goto :EXECUTE_DEBUG
-    goto :EXECUTE
-
-:EXECUTE_STOP
-    SET MAIN=org.apache.karaf.main.Stop
-    shift
-    goto :RUN_LOOP
-
-:EXECUTE_CONSOLE
-    shift
-    goto :RUN_LOOP
-
-:EXECUTE_SERVER
-    SET OPTS=-Dkaraf.startLocalConsole=false -Dkaraf.startRemoteShell=true
-    shift
-    goto :RUN_LOOP
-
-:EXECUTE_CLIENT
-    SET OPTS=-Dkaraf.startLocalConsole=true -Dkaraf.startRemoteShell=false
-    shift
-    goto :RUN_LOOP
-
-:EXECUTE_CLEAN
-    rmdir /S /Q %KARAF_DATA%
-    shift
-    goto :RUN_LOOP
-
-:EXECUTE_DEBUG
-    if "%JAVA_DEBUG_OPTS%" == "" set JAVA_DEBUG_OPTS=%DEFAULT_JAVA_DEBUG_OPTS%
-    set "JAVA_OPTS=%JAVA_DEBUG_OPTS% %JAVA_OPTS%"
-    shift
-    goto :RUN_LOOP
-
-:EXECUTE
-    SET ARGS=%1 %2 %3 %4 %5 %6 %7 %8
-    rem Execute the Java Virtual Machine
-    cd %KARAF_BASE%
-    "%JAVA%" %JAVA_OPTS% %OPTS% -classpath "%CLASSPATH%" -Djava.endorsed.dirs="%JAVA_HOME%\jre\lib\endorsed;%JAVA_HOME%\lib\endorsed;%KARAF_HOME%\lib\endorsed" -Djava.ext.dirs="%JAVA_HOME%\jre\lib\ext;%JAVA_HOME%\lib\ext;%KARAF_HOME%\lib\ext" -Dkaraf.instances="%KARAF_HOME%\instances" -Dkaraf.home="%KARAF_HOME%" -Dkaraf.base="%KARAF_BASE%" -Djava.io.tmpdir="%KARAF_DATA%\tmp" -Dkaraf.data="%KARAF_DATA%" -Djava.util.logging.config.file="%KARAF_BASE%\etc\java.util.logging.properties" %KARAF_OPTS% %MAIN% %ARGS%
-
-rem # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-
-:END
-
-endlocal
-
-if not "%PAUSE%" == "" pause
-
-:END_NO_PAUSE
-
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/windows-text/bin/setenv.bat b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/windows-text/bin/setenv.bat
deleted file mode 100644
index 98142cd..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/windows-text/bin/setenv.bat
+++ /dev/null
@@ -1,57 +0,0 @@
-@echo off
-rem
-rem
-rem    Licensed to the Apache Software Foundation (ASF) under one or more
-rem    contributor license agreements.  See the NOTICE file distributed with
-rem    this work for additional information regarding copyright ownership.
-rem    The ASF licenses this file to You under the Apache License, Version 2.0
-rem    (the "License"); you may not use this file except in compliance with
-rem    the License.  You may obtain a copy of the License at
-rem
-rem       http://www.apache.org/licenses/LICENSE-2.0
-rem
-rem    Unless required by applicable law or agreed to in writing, software
-rem    distributed under the License is distributed on an "AS IS" BASIS,
-rem    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-rem    See the License for the specific language governing permissions and
-rem    limitations under the License.
-rem
-
-rem
-rem handle specific scripts; the SCRIPT_NAME is exactly the name of the Karaf
-rem script; for example karaf.bat, start.bat, stop.bat, admin.bat, client.bat, ...
-rem
-rem if "%KARAF_SCRIPT%" == "SCRIPT_NAME" (
-rem   Actions go here...
-rem )
-
-rem
-rem general settings which should be applied for all scripts go here; please keep
-rem in mind that it is possible that scripts might be executed more than once, e.g.
-rem in example of the start script where the start script is executed first and the
-rem karaf script afterwards.
-rem
-
-rem
-rem The following section shows the possible configuration options for the default 
-rem karaf scripts
-rem
-rem Window name of the windows console
-rem SET KARAF_TITLE
-rem Minimum memory for the JVM
-rem SET JAVA_MIN_MEM
-rem Maximum memory for the JVM
-rem SET JAVA_MAX_MEM
-rem Minimum perm memory for the JVM
-rem SET JAVA_PERM_MEM
-rem Maximum memory for the JVM
-rem SET JAVA_MAX_PERM_MEM
-rem Karaf home folder
-rem SET KARAF_HOME
-rem Karaf data folder
-rem SET KARAF_DATA
-rem Karaf base folder
-rem SET KARAF_BASE
-rem Additional available Karaf options
-rem SET KARAF_OPTS
-
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/windows-text/bin/start.bat b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/windows-text/bin/start.bat
deleted file mode 100755
index c861a90..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/windows-text/bin/start.bat
+++ /dev/null
@@ -1,81 +0,0 @@
-@echo off
-rem
-rem
-rem    Licensed to the Apache Software Foundation (ASF) under one or more
-rem    contributor license agreements.  See the NOTICE file distributed with
-rem    this work for additional information regarding copyright ownership.
-rem    The ASF licenses this file to You under the Apache License, Version 2.0
-rem    (the "License"); you may not use this file except in compliance with
-rem    the License.  You may obtain a copy of the License at
-rem
-rem       http://www.apache.org/licenses/LICENSE-2.0
-rem
-rem    Unless required by applicable law or agreed to in writing, software
-rem    distributed under the License is distributed on an "AS IS" BASIS,
-rem    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-rem    See the License for the specific language governing permissions and
-rem    limitations under the License.
-rem
-
-if not "%ECHO%" == "" echo %ECHO%
-
-setlocal
-set DIRNAME=%~dp0%
-set PROGNAME=%~nx0%
-set ARGS=%*
-
-rem Sourcing environment settings for karaf similar to tomcats setenv
-SET KARAF_SCRIPT="start.bat"
-if exist "%DIRNAME%setenv.bat" (
-  call "%DIRNAME%setenv.bat"
-)
-
-rem Check console window title. Set to Karaf by default
-if not "%KARAF_TITLE%" == "" (
-    title %KARAF_TITLE%
-) else (
-    title Karaf
-)
-
-goto BEGIN
-
-:warn
-    echo %PROGNAME%: %*
-goto :EOF
-
-:BEGIN
-
-rem # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-
-if not "%KARAF_HOME%" == "" (
-    call :warn Ignoring predefined value for KARAF_HOME
-)
-set KARAF_HOME=%DIRNAME%..
-if not exist "%KARAF_HOME%" (
-    call :warn KARAF_HOME is not valid: "%KARAF_HOME%"
-    goto END
-)
-
-if not "%KARAF_BASE%" == "" (
-    if not exist "%KARAF_BASE%" (
-       call :warn KARAF_BASE is not valid: "%KARAF_BASE%"
-       goto END
-    )
-)
-if "%KARAF_BASE%" == "" (
-  set "KARAF_BASE=%KARAF_HOME%"
-)
-
-:EXECUTE
-    start "Karaf" /MIN "%KARAF_HOME%\bin\karaf.bat" server %*
-
-rem # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-
-:END
-
-endlocal
-
-if not "%PAUSE%" == "" pause
-
-:END_NO_PAUSE
-
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/windows-text/bin/stop.bat b/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/windows-text/bin/stop.bat
deleted file mode 100755
index 69fa4a6..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/distribution/windows-text/bin/stop.bat
+++ /dev/null
@@ -1,80 +0,0 @@
-@echo off
-rem
-rem
-rem    Licensed to the Apache Software Foundation (ASF) under one or more
-rem    contributor license agreements.  See the NOTICE file distributed with
-rem    this work for additional information regarding copyright ownership.
-rem    The ASF licenses this file to You under the Apache License, Version 2.0
-rem    (the "License"); you may not use this file except in compliance with
-rem    the License.  You may obtain a copy of the License at
-rem
-rem       http://www.apache.org/licenses/LICENSE-2.0
-rem
-rem    Unless required by applicable law or agreed to in writing, software
-rem    distributed under the License is distributed on an "AS IS" BASIS,
-rem    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-rem    See the License for the specific language governing permissions and
-rem    limitations under the License.
-rem
-
-if not "%ECHO%" == "" echo %ECHO%
-
-setlocal
-set DIRNAME=%~dp0%
-set PROGNAME=%~nx0%
-set ARGS=%*
-
-rem Sourcing environment settings for karaf similar to tomcats setenv
-SET KARAF_SCRIPT="stop.bat"
-if exist "%DIRNAME%setenv.bat" (
-  call "%DIRNAME%setenv.bat"
-)
-
-rem Check console window title. Set to Karaf by default
-if not "%KARAF_TITLE%" == "" (
-    title %KARAF_TITLE%
-) else (
-    title Karaf
-)
-
-goto BEGIN
-
-:warn
-    echo %PROGNAME%: %*
-goto :EOF
-
-:BEGIN
-
-rem # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-
-if not "%KARAF_HOME%" == "" (
-    call :warn Ignoring predefined value for KARAF_HOME
-)
-set KARAF_HOME=%DIRNAME%..
-if not exist "%KARAF_HOME%" (
-    call :warn KARAF_HOME is not valid: "%KARAF_HOME%"
-    goto END
-)
-
-if not "%KARAF_BASE%" == "" (
-    if not exist "%KARAF_BASE%" (
-       call :warn KARAF_BASE is not valid: "%KARAF_BASE%"
-       goto END
-    )
-)
-if "%KARAF_BASE%" == "" (
-  set "KARAF_BASE=%KARAF_HOME%"
-)
-
-:EXECUTE
-    "%KARAF_HOME%\bin\karaf.bat" stop
-
-rem # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-
-:END
-
-endlocal
-
-if not "%PAUSE%" == "" pause
-
-:END_NO_PAUSE
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/bin/admin b/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/bin/admin
deleted file mode 100644
index f24d67d..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/bin/admin
+++ /dev/null
@@ -1,335 +0,0 @@
-#!/bin/sh
-#
-#    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.
-#
-
-DIRNAME=`dirname "$0"`
-PROGNAME=`basename "$0"`
-
-#
-# Sourcing environment settings for karaf similar to tomcats setenv
-#
-KARAF_SCRIPT="admin"
-export KARAF_SCRIPT
-if [ -f "$DIRNAME/setenv" ]; then
-  . "$DIRNAME/setenv"
-fi
-
-#
-# Check/Set up some easily accessible MIN/MAX params for JVM mem usage
-#
-if [ "x$JAVA_MIN_MEM" = "x" ]; then
-    JAVA_MIN_MEM=128M
-    export JAVA_MIN_MEM
-fi
-if [ "x$JAVA_MAX_MEM" = "x" ]; then
-    JAVA_MAX_MEM=512M
-    export JAVA_MAX_MEM
-fi
-
-warn() {
-    echo "${PROGNAME}: $*"
-}
-
-die() {
-    warn "$*"
-    exit 1
-}
-
-detectOS() {
-    # OS specific support (must be 'true' or 'false').
-    cygwin=false;
-    darwin=false;
-    aix=false;
-    os400=false;
-    case "`uname`" in
-        CYGWIN*)
-            cygwin=true
-            ;;
-        Darwin*)
-            darwin=true
-            ;;
-        AIX*)
-            aix=true
-            ;;
-        OS400*)
-            os400=true
-            ;;
-    esac
-    # For AIX, set an environment variable
-    if $aix; then
-         export LDR_CNTRL=MAXDATA=0xB0000000@DSA
-         export IBM_JAVA_HEAPDUMP_TEXT=true
-         echo $LDR_CNTRL
-    fi
-}
-
-unlimitFD() {
-    # Use the maximum available, or set MAX_FD != -1 to use that
-    if [ "x$MAX_FD" = "x" ]; then
-        MAX_FD="maximum"
-    fi
-
-    # Increase the maximum file descriptors if we can
-    if [ "$os400" = "false" ] && [ "$cygwin" = "false" ]; then
-        MAX_FD_LIMIT=`ulimit -H -n`
-        if [ "$MAX_FD_LIMIT" != 'unlimited' ]; then 
-            if [ $? -eq 0 ]; then
-                if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ]; then
-                    # use the system max
-                    MAX_FD="$MAX_FD_LIMIT"
-                fi
-
-                ulimit -n $MAX_FD > /dev/null
-                # echo "ulimit -n" `ulimit -n`
-                if [ $? -ne 0 ]; then
-                    warn "Could not set maximum file descriptor limit: $MAX_FD"
-                fi
-            else
-                warn "Could not query system maximum file descriptor limit: $MAX_FD_LIMIT"
-            fi
-        fi
-    fi
-}
-
-locateHome() {
-    if [ "x$KARAF_HOME" != "x" ]; then
-        warn "Ignoring predefined value for KARAF_HOME"
-    fi
-
-    # In POSIX shells, CDPATH may cause cd to write to stdout
-    (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-    KARAF_HOME=`cd $DIRNAME/..; pwd`
-    if [ ! -d "$KARAF_HOME" ]; then
-        die "KARAF_HOME is not valid: $KARAF_HOME"
-    fi
-}
-
-locateBase() {
-    if [ "x$KARAF_BASE" != "x" ]; then
-        if [ ! -d "$KARAF_BASE" ]; then
-            die "KARAF_BASE is not valid: $KARAF_BASE"
-        fi
-    else
-        KARAF_BASE=$KARAF_HOME
-    fi
-}
-
-locateData() {
-    if [ "x$KARAF_DATA" != "x" ]; then
-        if [ ! -d "$KARAF_DATA" ]; then
-            die "KARAF_DATA is not valid: $KARAF_DATA"
-        fi
-    else
-        KARAF_DATA=$KARAF_BASE/data
-    fi
-}
-
-setupNativePath() {
-    # Support for loading native libraries
-    LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:$KARAF_BASE/lib:$KARAF_HOME/lib"
-
-    # For Cygwin, set PATH from LD_LIBRARY_PATH
-    if $cygwin; then
-        LD_LIBRARY_PATH=`cygpath --path --windows "$LD_LIBRARY_PATH"`
-        PATH="$PATH;$LD_LIBRARY_PATH"
-        export PATH
-    fi
-    export LD_LIBRARY_PATH
-}
-
-pathCanonical() {
-    local dst="${1}"
-    while [ -h "${dst}" ] ; do
-        ls=`ls -ld "${dst}"`
-        link=`expr "$ls" : '.*-> \(.*\)$'`
-        if expr "$link" : '/.*' > /dev/null; then
-            dst="$link"
-        else
-            dst="`dirname "${dst}"`/$link"
-        fi
-    done
-    local bas=`basename "${dst}"`
-    local dir=`dirname "${dst}"`
-    if [ "$bas" != "$dir" ]; then
-        dst="`pathCanonical "$dir"`/$bas"
-    fi
-    echo "${dst}" | sed -e 's#//#/#g' -e 's#/./#/#g' -e 's#/[^/]*/../#/#g'
-}
-
-locateJava() {
-    # Setup the Java Virtual Machine
-    if $cygwin ; then
-        [ -n "$JAVA" ] && JAVA=`cygpath --unix "$JAVA"`
-        [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-    fi
-
-    if [ "x$JAVA_HOME" = "x" ] && [ "$darwin" = "true" ]; then
-        JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home
-    fi
-    if [ "x$JAVA" = "x" ] && [ -r /etc/gentoo-release ] ; then
-        JAVA_HOME=`java-config --jre-home`
-    fi
-    if [ "x$JAVA" = "x" ]; then
-        if [ "x$JAVA_HOME" != "x" ]; then
-            if [ ! -d "$JAVA_HOME" ]; then
-                die "JAVA_HOME is not valid: $JAVA_HOME"
-            fi
-            JAVA="$JAVA_HOME/bin/java"
-        else
-            warn "JAVA_HOME not set; results may vary"
-            JAVA=`type java`
-            JAVA=`expr "$JAVA" : '.*is \(.*\)$'`
-            if [ "x$JAVA" = "x" ]; then
-                die "java command not found"
-            fi
-        fi
-    fi
-    if [ "x$JAVA_HOME" = "x" ]; then
-        JAVA_HOME="$(dirname $(dirname $(pathCanonical "$JAVA")))"
-    fi
-}
-
-detectJVM() {
-   #echo "`$JAVA -version`"
-   # This service should call `java -version`,
-   # read stdout, and look for hints
-   if $JAVA -version 2>&1 | grep "^IBM" ; then
-       JVM_VENDOR="IBM"
-   # on OS/400, java -version does not contain IBM explicitly
-   elif $os400; then
-       JVM_VENDOR="IBM"
-   else
-       JVM_VENDOR="SUN"
-   fi
-   # echo "JVM vendor is $JVM_VENDOR"
-}
-
-setupDebugOptions() {
-    if [ "x$JAVA_OPTS" = "x" ]; then
-        JAVA_OPTS="$DEFAULT_JAVA_OPTS"
-    fi
-    export JAVA_OPTS
-
-    # Set Debug options if enabled
-    if [ "x$KARAF_DEBUG" != "x" ]; then
-        # Use the defaults if JAVA_DEBUG_OPTS was not set
-        if [ "x$JAVA_DEBUG_OPTS" = "x" ]; then
-            JAVA_DEBUG_OPTS="$DEFAULT_JAVA_DEBUG_OPTS"
-        fi
-
-        JAVA_OPTS="$JAVA_DEBUG_OPTS $JAVA_OPTS"
-        warn "Enabling Java debug options: $JAVA_DEBUG_OPTS"
-    fi
-}
-
-setupDefaults() {
-    DEFAULT_JAVA_OPTS="-Xms$JAVA_MIN_MEM -Xmx$JAVA_MAX_MEM "
-
-    #Set the JVM_VENDOR specific JVM flags
-    if [ "$JVM_VENDOR" = "SUN" ]; then
-        #
-        # Check some easily accessible MIN/MAX params for JVM mem usage
-        #
-        if [ "x$JAVA_PERM_MEM" != "x" ]; then
-            DEFAULT_JAVA_OPTS="$DEFAULT_JAVA_OPTS -XX:PermSize=$JAVA_PERM_MEM"
-        fi
-        if [ "x$JAVA_MAX_PERM_MEM" != "x" ]; then
-            DEFAULT_JAVA_OPTS="$DEFAULT_JAVA_OPTS -XX:MaxPermSize=$JAVA_MAX_PERM_MEM"
-        fi
-        DEFAULT_JAVA_OPTS="-server $DEFAULT_JAVA_OPTS -Dcom.sun.management.jmxremote"
-    elif [ "$JVM_VENDOR" = "IBM" ]; then
-        if $os400; then
-            DEFAULT_JAVA_OPTS="$DEFAULT_JAVA_OPTS"
-        elif $aix; then
-            DEFAULT_JAVA_OPTS="-Xverify:none -Xlp $DEFAULT_JAVA_OPTS"
-        else
-            DEFAULT_JAVA_OPTS="-Xverify:none $DEFAULT_JAVA_OPTS"
-        fi
-    fi
-
-    # Add the jars in the lib dir
-    for file in $KARAF_HOME/lib/*.jar
-    do
-        if [ -z "$CLASSPATH" ]; then
-            CLASSPATH="$file"
-        else
-            CLASSPATH="$CLASSPATH:$file"
-        fi
-    done
-    DEFAULT_JAVA_DEBUG_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
-
-    ##
-    ## TODO: Move to conf/profiler/yourkit.{sh|cmd}
-    ##
-    # Uncomment to enable YourKit profiling
-    #DEFAULT_JAVA_DEBUG_OPTS="-Xrunyjpagent"
-}
-
-init() {
-    # Determine if there is special OS handling we must perform
-    detectOS
-
-    # Unlimit the number of file descriptors if possible
-    unlimitFD
-
-    # Locate the Karaf home directory
-    locateHome
-
-    # Locate the Karaf base directory
-    locateBase
-
-    # Locate the Karaf data directory
-    locateData
-
-    # Setup the native library path
-    setupNativePath
-
-    # Locate the Java VM to execute
-    locateJava
-
-    # Determine the JVM vendor
-    detectJVM
-
-    # Setup default options
-    setupDefaults
-
-    # Install debug options
-    setupDebugOptions
-
-}
-
-run() {
-
-    CLASSPATH=${KARAF_HOME}/system/org/apache/karaf/admin/org.apache.karaf.admin.command/${project.version}/org.apache.karaf.admin.command-${project.version}.jar:${KARAF_HOME}/system/org/apache/karaf/admin/org.apache.karaf.admin.core/${project.version}/org.apache.karaf.admin.core-${project.version}.jar:${KARAF_HOME}/system/org/apache/karaf/shell/org.apache.karaf.shell.console/${project.version}/org.apache.karaf.shell.console-${project.version}.jar:${KARAF_HOME}/system/org/apache/aries/blueprint/org.apache.aries.blueprint.api/${aries.blueprint.api.version}/org.apache.aries.blueprint.api-${aries.blueprint.api.version}.jar:${KARAF_HOME}/system/org/apache/aries/blueprint/org.apache.aries.blueprint.core/${aries.blueprint.core.version}/org.apache.aries.blueprint.core-${aries.blueprint.core.version}.jar:${KARAF_HOME}/system/org/apache/aries/blueprint/org.apache.aries.blueprint.cm/${aries.blueprint.cm.version}/org.apache.aries.blueprint.cm-${aries.blueprint.cm.version}.jar:${KARAF_HOME}/system/org/ops4j/pax/logging/pax-logging-api/${pax.logging.version}/pax-logging-api-${pax.logging.version}.jar:${KARAF_HOME}/system/org/apache/felix/org.apache.felix.framework/${felix.framework.version}/org.apache.felix.framework-${felix.framework.version}.jar
-
-    if $cygwin; then
-        KARAF_HOME=`cygpath --path --windows "$KARAF_HOME"`
-        KARAF_BASE=`cygpath --path --windows "$KARAF_BASE"`
-        CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
-    fi
-
-    exec $JAVA $JAVA_OPTS -Dkaraf.instances="${KARAF_HOME}/instances" -Dkaraf.home="$KARAF_HOME" -Dkaraf.base="$KARAF_BASE" -Djava.io.tmpdir="$KARAF_DATA/tmp" -Djava.util.logging.config.file=$KARAF_BASE/etc/java.util.logging.properties $KARAF_OPTS $OPTS -classpath "$CLASSPATH" org.apache.karaf.admin.main.Execute "$@"
-}
-
-main() {
-    init
-    run "$@"
-}
-
-main "$@"
-
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/bin/admin.bat b/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/bin/admin.bat
deleted file mode 100644
index 1932f07..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/bin/admin.bat
+++ /dev/null
@@ -1,127 +0,0 @@
-@echo off
-rem
-rem
-rem    Licensed to the Apache Software Foundation (ASF) under one or more
-rem    contributor license agreements.  See the NOTICE file distributed with
-rem    this work for additional information regarding copyright ownership.
-rem    The ASF licenses this file to You under the Apache License, Version 2.0
-rem    (the "License"); you may not use this file except in compliance with
-rem    the License.  You may obtain a copy of the License at
-rem
-rem       http://www.apache.org/licenses/LICENSE-2.0
-rem
-rem    Unless required by applicable law or agreed to in writing, software
-rem    distributed under the License is distributed on an "AS IS" BASIS,
-rem    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-rem    See the License for the specific language governing permissions and
-rem    limitations under the License.
-rem
-
-if not "%ECHO%" == "" echo %ECHO%
-
-setlocal
-set DIRNAME=%~dp0%
-set PROGNAME=%~nx0%
-set ARGS=%*
-
-rem Sourcing environment settings for karaf similar to tomcats setenv
-SET KARAF_SCRIPT="admin.bat"
-if exist "%DIRNAME%setenv.bat" (
-  call "%DIRNAME%setenv.bat"
-)
-
-rem Check console window title. Set to Karaf by default
-if not "%KARAF_TITLE%" == "" (
-    title %KARAF_TITLE%
-) else (
-    title Karaf
-)
-
-rem Check/Set up some easily accessible MIN/MAX params for JVM mem usage
-if "%JAVA_MIN_MEM%" == "" (
-    set JAVA_MIN_MEM=128M
-)
-if "%JAVA_MAX_MEM%" == "" (
-    set JAVA_MAX_MEM=512M
-)
-
-goto BEGIN
-
-:warn
-    echo %PROGNAME%: %*
-goto :EOF
-
-:BEGIN
-
-rem # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-
-if not "%KARAF_HOME%" == "" (
-    call :warn Ignoring predefined value for KARAF_HOME
-)
-set KARAF_HOME=%DIRNAME%..
-if not exist "%KARAF_HOME%" (
-    call :warn KARAF_HOME is not valid: "%KARAF_HOME%"
-    goto END
-)
-
-if not "%KARAF_BASE%" == "" (
-    if not exist "%KARAF_BASE%" (
-       call :warn KARAF_BASE is not valid: "%KARAF_BASE%"
-       goto END
-    )
-)
-if "%KARAF_BASE%" == "" (
-  set "KARAF_BASE=%KARAF_HOME%"
-)
-
-if not "%KARAF_DATA%" == "" (
-    if not exist "%KARAF_DATA%" (
-        call :warn KARAF_DATA is not valid: "%KARAF_DATA%"
-        goto END
-    )
-)
-if "%KARAF_DATA%" == "" (
-    set "KARAF_DATA=%KARAF_BASE%\data"
-)
-
-set DEFAULT_JAVA_OPTS=
-set DEFAULT_JAVA_DEBUG_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
-
-rem Support for loading native libraries
-set PATH=%PATH%;%KARAF_BASE%\lib;%KARAF_HOME%\lib
-
-rem Setup the Java Virtual Machine
-if not "%JAVA%" == "" goto :Check_JAVA_END
-    set JAVA=java
-    if "%JAVA_HOME%" == "" call :warn JAVA_HOME not set; results may vary
-    if not "%JAVA_HOME%" == "" set JAVA=%JAVA_HOME%\bin\java
-    if not exist "%JAVA_HOME%" (
-        call :warn JAVA_HOME is not valid: "%JAVA_HOME%"
-        goto END
-    )
-:Check_JAVA_END
-
-if "%JAVA_OPTS%" == "" set JAVA_OPTS=%DEFAULT_JAVA_OPTS%
-
-if "%KARAF_DEBUG%" == "" goto :KARAF_DEBUG_END
-    rem Use the defaults if JAVA_DEBUG_OPTS was not set
-    if "%JAVA_DEBUG_OPTS%" == "" set JAVA_DEBUG_OPTS=%DEFAULT_JAVA_DEBUG_OPTS%
-    
-    set "JAVA_OPTS=%JAVA_DEBUG_OPTS% %JAVA_OPTS%"
-    call :warn Enabling Java debug options: %JAVA_DEBUG_OPTS%
-:KARAF_DEBUG_END
-
-set CLASSPATH=%KARAF_HOME%\system\org\apache\karaf\admin\org.apache.karaf.admin.command\${project.version}\org.apache.karaf.admin.command-${project.version}.jar;%KARAF_HOME%\system\org\apache\karaf\admin\org.apache.karaf.admin.core\${project.version}\org.apache.karaf.admin.core-${project.version}.jar;%KARAF_HOME%\system\org\apache\karaf\shell\org.apache.karaf.shell.console\${project.version}\org.apache.karaf.shell.console-${project.version}.jar;%KARAF_HOME%\system\org\apache\aries\blueprint\org.apache.aries.blueprint.api\${aries.blueprint.api.version}\org.apache.aries.blueprint.api-${aries.blueprint.api.version}.jar;%KARAF_HOME%\system\org\apache\aries\blueprint\org.apache.aries.blueprint.core\${aries.blueprint.core.version}\org.apache.aries.blueprint.core-${aries.blueprint.core.version}.jar;%KARAF_HOME%\system\org\apache\aries\blueprint\org.apache.aries.blueprint.cm\${aries.blueprint.cm.version}\org.apache.aries.blueprint.cm-${aries.blueprint.cm.version}.jar;%KARAF_HOME%\system\org\ops4j\pax\logging\pax-logging-api\${pax.logging.version}\pax-logging-api-${pax.logging.version}.jar;%KARAF_HOME%\system\org\apache\felix\org.apache.felix.framework\${felix.framework.version}\org.apache.felix.framework-${felix.framework.version}.jar
-
-:EXECUTE
-    if "%SHIFT%" == "true" SET ARGS=%2 %3 %4 %5 %6 %7 %8
-    if not "%SHIFT%" == "true" SET ARGS=%1 %2 %3 %4 %5 %6 %7 %8    
-    rem Execute the Java Virtual Machine
-    "%JAVA%" %JAVA_OPTS% %OPTS% -classpath "%CLASSPATH%" -Dkaraf.instances="%KARAF_HOME%\instances" -Dkaraf.home="%KARAF_HOME%" -Dkaraf.base="%KARAF_BASE%" -Djava.io.tmpdir="%KARAF_DATA%\tmp" -Djava.util.logging.config.file="%KARAF_BASE%\etc\java.util.logging.properties" %KARAF_OPTS% org.apache.karaf.admin.main.Execute %ARGS%
-
-rem # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-
-:END
-
-endlocal
-
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/bin/client b/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/bin/client
deleted file mode 100644
index 6d8454b..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/bin/client
+++ /dev/null
@@ -1,301 +0,0 @@
-#!/bin/sh
-#
-#    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.
-#
-
-DIRNAME=`dirname "$0"`
-PROGNAME=`basename "$0"`
-
-#
-# Sourcing environment settings for karaf similar to tomcats setenv
-#
-KARAF_SCRIPT="client"
-export KARAF_SCRIPT
-if [ -f "$DIRNAME/setenv" ]; then
-  . "$DIRNAME/setenv"
-fi
-
-#
-# Check/Set up some easily accessible MIN/MAX params for JVM mem usage
-#
-if [ "x$JAVA_MIN_MEM" = "x" ]; then
-    JAVA_MIN_MEM=128M
-    export JAVA_MIN_MEM
-fi
-if [ "x$JAVA_MAX_MEM" = "x" ]; then
-    JAVA_MAX_MEM=512M
-    export JAVA_MAX_MEM
-fi
-
-warn() {
-    echo "${PROGNAME}: $*"
-}
-
-die() {
-    warn "$*"
-    exit 1
-}
-
-detectOS() {
-    # OS specific support (must be 'true' or 'false').
-    cygwin=false;
-    darwin=false;
-    aix=false;
-    os400=false;
-    case "`uname`" in
-        CYGWIN*)
-            cygwin=true
-            ;;
-        Darwin*)
-            darwin=true
-            ;;
-        AIX*)
-            aix=true
-            ;;
-        OS400*)
-            os400=true
-            ;;
-    esac
-    # For AIX, set an environment variable
-    if $aix; then
-         export LDR_CNTRL=MAXDATA=0xB0000000@DSA
-         export IBM_JAVA_HEAPDUMP_TEXT=true
-         echo $LDR_CNTRL
-    fi
-}
-
-unlimitFD() {
-    # Use the maximum available, or set MAX_FD != -1 to use that
-    if [ "x$MAX_FD" = "x" ]; then
-        MAX_FD="maximum"
-    fi
-
-    # Increase the maximum file descriptors if we can
-    if [ "$os400" = "false" ] && [ "$cygwin" = "false" ]; then
-        MAX_FD_LIMIT=`ulimit -H -n`
-        if [ "$MAX_FD_LIMIT" != 'unlimited' ]; then 
-            if [ $? -eq 0 ]; then
-                if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ]; then
-                    # use the system max
-                    MAX_FD="$MAX_FD_LIMIT"
-                fi
-
-                ulimit -n $MAX_FD > /dev/null
-                # echo "ulimit -n" `ulimit -n`
-                if [ $? -ne 0 ]; then
-                    warn "Could not set maximum file descriptor limit: $MAX_FD"
-                fi
-            else
-                warn "Could not query system maximum file descriptor limit: $MAX_FD_LIMIT"
-            fi
-        fi
-    fi
-}
-
-locateHome() {
-    if [ "x$KARAF_HOME" != "x" ]; then
-        warn "Ignoring predefined value for KARAF_HOME"
-    fi
-    
-    # In POSIX shells, CDPATH may cause cd to write to stdout
-    (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-    KARAF_HOME=`cd $DIRNAME/..; pwd`
-    if [ ! -d "$KARAF_HOME" ]; then
-        die "KARAF_HOME is not valid: $KARAF_HOME"
-    fi
-}
-
-locateBase() {
-    if [ "x$KARAF_BASE" != "x" ]; then
-        if [ ! -d "$KARAF_BASE" ]; then
-            die "KARAF_BASE is not valid: $KARAF_BASE"
-        fi
-    else
-        KARAF_BASE=$KARAF_HOME
-    fi
-}
-
-locateData() {
-    if [ "x$KARAF_DATA" != "x" ]; then
-        if [ ! -d "$KARAF_DATA" ]; then
-            die "KARAF_DATA is not valid: $KARAF_DATA"
-        fi
-    else
-        KARAF_DATA=$KARAF_BASE/data
-    fi
-}
-
-setupNativePath() {
-    # Support for loading native libraries
-    LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:$KARAF_BASE/lib:$KARAF_HOME/lib"
-
-    # For Cygwin, set PATH from LD_LIBRARY_PATH
-    if $cygwin; then
-        LD_LIBRARY_PATH=`cygpath --path --windows "$LD_LIBRARY_PATH"`
-        PATH="$PATH;$LD_LIBRARY_PATH"
-        export PATH
-    fi
-    export LD_LIBRARY_PATH
-}
-
-pathCanonical() {
-    local dst="${1}"
-    while [ -h "${dst}" ] ; do
-        ls=`ls -ld "${dst}"`
-        link=`expr "$ls" : '.*-> \(.*\)$'`
-        if expr "$link" : '/.*' > /dev/null; then
-            dst="$link"
-        else
-            dst="`dirname "${dst}"`/$link"
-        fi
-    done
-    local bas=`basename "${dst}"`
-    local dir=`dirname "${dst}"`
-    if [ "$bas" != "$dir" ]; then
-        dst="`pathCanonical "$dir"`/$bas"
-    fi
-    echo "${dst}" | sed -e 's#//#/#g' -e 's#/./#/#g' -e 's#/[^/]*/../#/#g'
-}
-
-locateJava() {
-    # Setup the Java Virtual Machine
-    if $cygwin ; then
-        [ -n "$JAVA" ] && JAVA=`cygpath --unix "$JAVA"`
-        [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-    fi
-
-    if [ "x$JAVA_HOME" = "x" ] && [ "$darwin" = "true" ]; then
-        JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home
-    fi
-    if [ "x$JAVA" = "x" ] && [ -r /etc/gentoo-release ] ; then
-        JAVA_HOME=`java-config --jre-home`
-    fi
-    if [ "x$JAVA" = "x" ]; then
-        if [ "x$JAVA_HOME" != "x" ]; then
-            if [ ! -d "$JAVA_HOME" ]; then
-                die "JAVA_HOME is not valid: $JAVA_HOME"
-            fi
-            JAVA="$JAVA_HOME/bin/java"
-        else
-            warn "JAVA_HOME not set; results may vary"
-            JAVA=`type java`
-            JAVA=`expr "$JAVA" : '.*is \(.*\)$'`
-            if [ "x$JAVA" = "x" ]; then
-                die "java command not found"
-            fi
-        fi
-    fi
-    if [ "x$JAVA_HOME" = "x" ]; then
-        JAVA_HOME="$(dirname $(dirname $(pathCanonical "$JAVA")))"
-    fi
-}
-
-detectJVM() {
-   #echo "`$JAVA -version`"
-   # This service should call `java -version`,
-   # read stdout, and look for hints
-   if $JAVA -version 2>&1 | grep "^IBM" ; then
-       JVM_VENDOR="IBM"
-   # on OS/400, java -version does not contain IBM explicitly
-   elif $os400; then
-       JVM_VENDOR="IBM"
-   else
-       JVM_VENDOR="SUN"
-   fi
-   # echo "JVM vendor is $JVM_VENDOR"
-}
-
-setupDefaults() {
-    DEFAULT_JAVA_OPTS="-Xms$JAVA_MIN_MEM -Xmx$JAVA_MAX_MEM "
-
-    #Set the JVM_VENDOR specific JVM flags
-    if [ "$JVM_VENDOR" = "SUN" ]; then
-        #
-        # Check some easily accessible MIN/MAX params for JVM mem usage
-        #
-        if [ "x$JAVA_PERM_MEM" != "x" ]; then
-            DEFAULT_JAVA_OPTS="$DEFAULT_JAVA_OPTS -XX:PermSize=$JAVA_PERM_MEM"
-        fi
-        if [ "x$JAVA_MAX_PERM_MEM" != "x" ]; then
-            DEFAULT_JAVA_OPTS="$DEFAULT_JAVA_OPTS -XX:MaxPermSize=$JAVA_MAX_PERM_MEM"
-        fi
-        DEFAULT_JAVA_OPTS="-server $DEFAULT_JAVA_OPTS -Dcom.sun.management.jmxremote"
-    elif [ "$JVM_VENDOR" = "IBM" ]; then
-        if $os400; then
-            DEFAULT_JAVA_OPTS="$DEFAULT_JAVA_OPTS"
-        elif $aix; then
-            DEFAULT_JAVA_OPTS="-Xverify:none -Xlp $DEFAULT_JAVA_OPTS"
-        else
-            DEFAULT_JAVA_OPTS="-Xverify:none $DEFAULT_JAVA_OPTS"
-        fi
-    fi
-
-    # Add the jars in the lib dir
-    CLASSPATH="$KARAF_HOME/lib/bin/karaf-client.jar"
-    CLASSPATH="$CLASSPATH:$KARAF_HOME/system/org/apache/sshd/sshd-core/${sshd.version}/sshd-core-${sshd.version}.jar"
-    CLASSPATH="$CLASSPATH:$KARAF_HOME/system/org/apache/mina/mina-core/${mina.version}/mina-core-${mina.version}.jar"
-    CLASSPATH="$CLASSPATH:$KARAF_HOME/system/org/apache/karaf/shell/org.apache.karaf.shell.console/${project.version}/org.apache.karaf.shell.console-${project.version}.jar"
-
-}
-
-init() {
-    # Determine if there is special OS handling we must perform
-    detectOS
-
-    # Unlimit the number of file descriptors if possible
-    unlimitFD
-
-    # Locate the Karaf home directory
-    locateHome
-
-    # Locate the Karaf base directory
-    locateBase
-
-    # Locate the Karaf data directory
-    locateData
-
-    # Setup the native library path
-    setupNativePath
-
-    # Locate the Java VM to execute
-    locateJava
-
-    # Determine the JVM vendor
-    detectJVM
-
-    # Setup default options
-    setupDefaults
-
-}
-
-run() {
-
-    if $cygwin; then
-        KARAF_HOME=`cygpath --path --windows "$KARAF_HOME"`
-        KARAF_BASE=`cygpath --path --windows "$KARAF_BASE"`
-        CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
-    fi
-
-    exec $JAVA $JAVA_OPTS -Dkaraf.instances="${KARAF_HOME}/instances" -Dkaraf.home="$KARAF_HOME" -Dkaraf.base="$KARAF_BASE" -Djava.io.tmpdir="$KARAF_DATA/tmp" -Djava.util.logging.config.file=$KARAF_BASE/etc/java.util.logging.properties $KARAF_OPTS $OPTS -classpath "$CLASSPATH" org.apache.karaf.client.Main "$@"
-}
-
-main() {
-    init
-    run "$@"
-}
-
-main "$@"
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/bin/client.bat b/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/bin/client.bat
deleted file mode 100644
index deddd7e..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/bin/client.bat
+++ /dev/null
@@ -1,121 +0,0 @@
-@echo off
-rem
-rem
-rem    Licensed to the Apache Software Foundation (ASF) under one or more
-rem    contributor license agreements.  See the NOTICE file distributed with
-rem    this work for additional information regarding copyright ownership.
-rem    The ASF licenses this file to You under the Apache License, Version 2.0
-rem    (the "License"); you may not use this file except in compliance with
-rem    the License.  You may obtain a copy of the License at
-rem
-rem       http://www.apache.org/licenses/LICENSE-2.0
-rem
-rem    Unless required by applicable law or agreed to in writing, software
-rem    distributed under the License is distributed on an "AS IS" BASIS,
-rem    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-rem    See the License for the specific language governing permissions and
-rem    limitations under the License.
-rem
-
-if not "%ECHO%" == "" echo %ECHO%
-
-setlocal
-set DIRNAME=%~dp0%
-set PROGNAME=%~nx0%
-set ARGS=%*
-
-rem Sourcing environment settings for karaf similar to tomcats setenv
-SET KARAF_SCRIPT="client.bat"
-if exist "%DIRNAME%setenv.bat" (
-  call "%DIRNAME%setenv.bat"
-)
-
-rem Check console window title. Set to Karaf by default
-if not "%KARAF_TITLE%" == "" (
-    title %KARAF_TITLE%
-) else (
-    title Karaf
-)
-
-rem Check/Set up some easily accessible MIN/MAX params for JVM mem usage
-if "%JAVA_MIN_MEM%" == "" (
-    set JAVA_MIN_MEM=128M
-)
-if "%JAVA_MAX_MEM%" == "" (
-    set JAVA_MAX_MEM=512M
-)
-
-goto BEGIN
-
-:warn
-    echo %PROGNAME%: %*
-goto :EOF
-
-:BEGIN
-
-rem # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-
-if not "%KARAF_HOME%" == "" (
-    call :warn Ignoring predefined value for KARAF_HOME
-)
-set KARAF_HOME=%DIRNAME%..
-if not exist "%KARAF_HOME%" (
-    call :warn KARAF_HOME is not valid: "%KARAF_HOME%"
-    goto END
-)
-
-if not "%KARAF_BASE%" == "" (
-    if not exist "%KARAF_BASE%" (
-       call :warn KARAF_BASE is not valid: "%KARAF_BASE%"
-       goto END
-    )
-)
-if "%KARAF_BASE%" == "" (
-  set "KARAF_BASE=%KARAF_HOME%"
-)
-
-if not "%KARAF_DATA%" == "" (
-    if not exist "%KARAF_DATA%" (
-        call :warn KARAF_DATA is not valid: "%KARAF_DATA%"
-        goto END
-    )
-)
-if "%KARAF_DATA%" == "" (
-    set "KARAF_DATA=%KARAF_BASE%\data"
-)
-
-set DEFAULT_JAVA_OPTS=
-
-rem Support for loading native libraries
-set PATH=%PATH%;%KARAF_BASE%\lib;%KARAF_HOME%\lib
-
-rem Setup the Java Virtual Machine
-if not "%JAVA%" == "" goto :Check_JAVA_END
-    set JAVA=java
-    if "%JAVA_HOME%" == "" call :warn JAVA_HOME not set; results may vary
-    if not "%JAVA_HOME%" == "" set JAVA=%JAVA_HOME%\bin\java
-    if not exist "%JAVA_HOME%" (
-        call :warn JAVA_HOME is not valid: "%JAVA_HOME%"
-        goto END
-    )
-:Check_JAVA_END
-
-if "%JAVA_OPTS%" == "" set JAVA_OPTS=%DEFAULT_JAVA_OPTS%
-
-set CLASSPATH=%KARAF_HOME%\lib\bin\karaf-client.jar
-set CLASSPATH=%CLASSPATH%;%KARAF_HOME%\system\org\apache\sshd\sshd-core\${sshd.version}\sshd-core-${sshd.version}.jar
-set CLASSPATH=%CLASSPATH%;%KARAF_HOME%\system\org\apache\mina\mina-core\${mina.version}\mina-core-${mina.version}.jar
-set CLASSPATH=%CLASSPATH%;%KARAF_HOME%\system\org\apache\karaf\shell\org.apache.karaf.shell.console\${project.version}\org.apache.karaf.shell.console-${project.version}.jar
-
-:EXECUTE
-    if "%SHIFT%" == "true" SET ARGS=%2 %3 %4 %5 %6 %7 %8 %9
-    if not "%SHIFT%" == "true" SET ARGS=%1 %2 %3 %4 %5 %6 %7 %8 %9
-    rem Execute the Java Virtual Machine
-    "%JAVA%" %JAVA_OPTS% %OPTS% -classpath "%CLASSPATH%" -Dkaraf.instances="%KARAF_HOME%\instances" -Dkaraf.home="%KARAF_HOME%" -Dkaraf.base="%KARAF_BASE%" -Djava.io.tmpdir="%KARAF_DATA%\tmp" -Djava.util.logging.config.file="%KARAF_BASE%\etc\java.util.logging.properties" %KARAF_OPTS% org.apache.karaf.client.Main %ARGS%
-
-rem # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-
-:END
-
-endlocal
-
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/bin/shell b/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/bin/shell
deleted file mode 100644
index 4285d9d..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/bin/shell
+++ /dev/null
@@ -1,327 +0,0 @@
-#!/bin/sh
-#
-#    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.
-#
-
-DIRNAME=`dirname "$0"`
-PROGNAME=`basename "$0"`
-
-#
-# Sourcing environment settings for karaf similar to tomcats setenv
-#
-export KARAF_SCRIPT="shell"
-if [ -e "$DIRNAME/setenv" ]; then
-  . "$DIRNAME/setenv"
-fi
-
-#
-# Check/Set up some easily accessible MIN/MAX params for JVM mem usage
-#
-if [ "x$JAVA_MIN_MEM" = "x" ]; then
-    JAVA_MIN_MEM=128M
-    export JAVA_MIN_MEM
-fi
-if [ "x$JAVA_MAX_MEM" = "x" ]; then
-    JAVA_MAX_MEM=512M
-    export JAVA_MAX_MEM
-fi
-
-warn() {
-    echo "${PROGNAME}: $*"
-}
-
-die() {
-    warn "$*"
-    exit 1
-}
-
-detectOS() {
-    # OS specific support (must be 'true' or 'false').
-    cygwin=false;
-    darwin=false;
-    aix=false;
-    os400=false;
-    case "`uname`" in
-        CYGWIN*)
-            cygwin=true
-            ;;
-        Darwin*)
-            darwin=true
-            ;;
-        AIX*)
-            aix=true
-            ;;
-        OS400*)
-            os400=true
-            ;;
-    esac
-    # For AIX, set an environment variable
-    if $aix; then
-         export LDR_CNTRL=MAXDATA=0xB0000000@DSA
-         export IBM_JAVA_HEAPDUMP_TEXT=true
-         echo $LDR_CNTRL
-    fi
-}
-
-unlimitFD() {
-    # Use the maximum available, or set MAX_FD != -1 to use that
-    if [ "x$MAX_FD" = "x" ]; then
-        MAX_FD="maximum"
-    fi
-
-    # Increase the maximum file descriptors if we can
-    if [ "$os400" = "false" ] && [ "$cygwin" = "false" ]; then
-        MAX_FD_LIMIT=`ulimit -H -n`
-        if [ "$MAX_FD_LIMIT" != 'unlimited' ]; then 
-            if [ $? -eq 0 ]; then
-                if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ]; then
-                    # use the system max
-                    MAX_FD="$MAX_FD_LIMIT"
-                fi
-
-                ulimit -n $MAX_FD > /dev/null
-                # echo "ulimit -n" `ulimit -n`
-                if [ $? -ne 0 ]; then
-                    warn "Could not set maximum file descriptor limit: $MAX_FD"
-                fi
-            else
-                warn "Could not query system maximum file descriptor limit: $MAX_FD_LIMIT"
-            fi
-        fi
-    fi
-}
-
-locateHome() {
-    if [ "x$KARAF_HOME" != "x" ]; then
-        warn "Ignoring predefined value for KARAF_HOME"
-    fi
-
-    # In POSIX shells, CDPATH may cause cd to write to stdout
-    (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-    KARAF_HOME=`cd $DIRNAME/..; pwd`
-    if [ ! -d "$KARAF_HOME" ]; then
-        die "KARAF_HOME is not valid: $KARAF_HOME"
-    fi
-}
-
-locateBase() {
-    if [ "x$KARAF_BASE" != "x" ]; then
-        if [ ! -d "$KARAF_BASE" ]; then
-            die "KARAF_BASE is not valid: $KARAF_BASE"
-        fi
-    else
-        KARAF_BASE=$KARAF_HOME
-    fi
-}
-
-locateData() {
-    if [ "x$KARAF_DATA" != "x" ]; then
-        if [ ! -d "$KARAF_DATA" ]; then
-            die "KARAF_DATA is not valid: $KARAF_DATA"
-        fi
-    else
-        KARAF_DATA=$KARAF_BASE/data
-    fi
-}
-
-setupNativePath() {
-    # Support for loading native libraries
-    LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:$KARAF_BASE/lib:$KARAF_HOME/lib"
-
-    # For Cygwin, set PATH from LD_LIBRARY_PATH
-    if $cygwin; then
-        LD_LIBRARY_PATH=`cygpath --path --windows "$LD_LIBRARY_PATH"`
-        PATH="$PATH;$LD_LIBRARY_PATH"
-        export PATH
-    fi
-    export LD_LIBRARY_PATH
-}
-
-pathCanonical() {
-    local dst="${1}"
-    while [ -h "${dst}" ] ; do
-        ls=`ls -ld "${dst}"`
-        link=`expr "$ls" : '.*-> \(.*\)$'`
-        if expr "$link" : '/.*' > /dev/null; then
-            dst="$link"
-        else
-            dst="`dirname "${dst}"`/$link"
-        fi
-    done
-    local bas=`basename "${dst}"`
-    local dir=`dirname "${dst}"`
-    if [ "$bas" != "$dir" ]; then
-        dst="`pathCanonical "$dir"`/$bas"
-    fi
-    echo "${dst}" | sed -e 's#//#/#g' -e 's#/./#/#g' -e 's#/[^/]*/../#/#g'
-}
-
-locateJava() {
-    # Setup the Java Virtual Machine
-    if $cygwin ; then
-        [ -n "$JAVA" ] && JAVA=`cygpath --unix "$JAVA"`
-        [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-    fi
-
-    if [ "x$JAVA_HOME" = "x" ] && [ "$darwin" = "true" ]; then
-        JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home
-    fi
-    if [ "x$JAVA" = "x" ] && [ -r /etc/gentoo-release ] ; then
-        JAVA_HOME=`java-config --jre-home`
-    fi
-    if [ "x$JAVA" = "x" ]; then
-        if [ "x$JAVA_HOME" != "x" ]; then
-            if [ ! -d "$JAVA_HOME" ]; then
-                die "JAVA_HOME is not valid: $JAVA_HOME"
-            fi
-            JAVA="$JAVA_HOME/bin/java"
-        else
-            warn "JAVA_HOME not set; results may vary"
-            JAVA=`type java`
-            JAVA=`expr "$JAVA" : '.*is \(.*\)$'`
-            if [ "x$JAVA" = "x" ]; then
-                die "java command not found"
-            fi
-        fi
-    fi
-    if [ "x$JAVA_HOME" = "x" ]; then
-        JAVA_HOME="$(dirname $(dirname $(pathCanonical "$JAVA")))"
-    fi
-}
-
-detectJVM() {
-   #echo "`$JAVA -version`"
-   # This service should call `java -version`,
-   # read stdout, and look for hints
-   if $JAVA -version 2>&1 | grep "^IBM" ; then
-       JVM_VENDOR="IBM"
-   # on OS/400, java -version does not contain IBM explicitly
-   elif $os400; then
-       JVM_VENDOR="IBM"
-   else
-       JVM_VENDOR="SUN"
-   fi
-   # echo "JVM vendor is $JVM_VENDOR"
-}
-
-setupDebugOptions() {
-    if [ "x$JAVA_OPTS" = "x" ]; then
-        JAVA_OPTS="$DEFAULT_JAVA_OPTS"
-    fi
-    export JAVA_OPTS
-
-    # Set Debug options if enabled
-    if [ "x$KARAF_DEBUG" != "x" ]; then
-        # Use the defaults if JAVA_DEBUG_OPTS was not set
-        if [ "x$JAVA_DEBUG_OPTS" = "x" ]; then
-            JAVA_DEBUG_OPTS="$DEFAULT_JAVA_DEBUG_OPTS"
-        fi
-
-        JAVA_OPTS="$JAVA_DEBUG_OPTS $JAVA_OPTS"
-        warn "Enabling Java debug options: $JAVA_DEBUG_OPTS"
-    fi
-}
-
-setupDefaults() {
-    DEFAULT_JAVA_OPTS="-Xms$JAVA_MIN_MEM -Xmx$JAVA_MAX_MEM "
-
-    #Set the JVM_VENDOR specific JVM flags
-    if [ "$JVM_VENDOR" = "SUN" ]; then
-        #
-        # Check some easily accessible MIN/MAX params for JVM mem usage
-        #
-        if [ "x$JAVA_PERM_MEM" != "x" ]; then
-            DEFAULT_JAVA_OPTS="$DEFAULT_JAVA_OPTS -XX:PermSize=$JAVA_PERM_MEM"
-        fi
-        if [ "x$JAVA_MAX_PERM_MEM" != "x" ]; then
-            DEFAULT_JAVA_OPTS="$DEFAULT_JAVA_OPTS -XX:MaxPermSize=$JAVA_MAX_PERM_MEM"
-        fi
-        DEFAULT_JAVA_OPTS="-server $DEFAULT_JAVA_OPTS -Dcom.sun.management.jmxremote"
-    elif [ "$JVM_VENDOR" = "IBM" ]; then
-        if $os400; then
-            DEFAULT_JAVA_OPTS="$DEFAULT_JAVA_OPTS"
-        elif $aix; then
-            DEFAULT_JAVA_OPTS="-Xverify:none -Xlp $DEFAULT_JAVA_OPTS"
-        else
-            DEFAULT_JAVA_OPTS="-Xverify:none $DEFAULT_JAVA_OPTS"
-        fi
-    fi
-
-    # Setup classpath
-    CLASSPATH="$KARAF_HOME/system/org/apache/karaf/shell/org.apache.karaf.shell.console/${project.version}/org.apache.karaf.shell.console-${project.version}.jar"
-    CLASSPATH="$CLASSPATH:$KARAF_HOME/system/org/ops4j/pax/logging/pax-logging-api/${pax.logging.version}/pax-logging-api-${pax.logging.version}.jar"
-
-    DEFAULT_JAVA_DEBUG_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
-
-    ##
-    ## TODO: Move to conf/profiler/yourkit.{sh|cmd}
-    ##
-    # Uncomment to enable YourKit profiling
-    #DEFAULT_JAVA_DEBUG_OPTS="-Xrunyjpagent"
-}
-
-init() {
-    # Determine if there is special OS handling we must perform
-    detectOS
-
-    # Unlimit the number of file descriptors if possible
-    unlimitFD
-
-    # Locate the Karaf home directory
-    locateHome
-
-    # Locate the Karaf base directory
-    locateBase
-
-    # Locate the Karaf data directory
-    locateData
-
-    # Setup the native library path
-    setupNativePath
-
-    # Locate the Java VM to execute
-    locateJava
-
-    # Determine the JVM vendor
-    detectJVM
-
-    # Setup default options
-    setupDefaults
-
-    # Install debug options
-    setupDebugOptions
-
-}
-
-run() {
-
-    if $cygwin; then
-        KARAF_HOME=`cygpath --path --windows "$KARAF_HOME"`
-        KARAF_BASE=`cygpath --path --windows "$KARAF_BASE"`
-        CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
-    fi
-
-    exec $JAVA $JAVA_OPTS -Dkaraf.instances="${KARAF_HOME}/instances" -Dkaraf.home="$KARAF_HOME" -Dkaraf.base="$KARAF_BASE" -Djava.io.tmpdir="$KARAF_DATA/tmp" -Djava.util.logging.config.file=$KARAF_BASE/etc/java.util.logging.properties $KARAF_OPTS $OPTS -classpath "$CLASSPATH" org.apache.karaf.shell.console.Main --classpath="$KARAF_HOME/system" "$@"
-}
-
-main() {
-    init
-    run "$@"
-}
-
-main "$@"
-
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/bin/shell.bat b/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/bin/shell.bat
deleted file mode 100644
index a7a32c5..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/bin/shell.bat
+++ /dev/null
@@ -1,128 +0,0 @@
-@echo off
-rem
-rem
-rem    Licensed to the Apache Software Foundation (ASF) under one or more
-rem    contributor license agreements.  See the NOTICE file distributed with
-rem    this work for additional information regarding copyright ownership.
-rem    The ASF licenses this file to You under the Apache License, Version 2.0
-rem    (the "License"); you may not use this file except in compliance with
-rem    the License.  You may obtain a copy of the License at
-rem
-rem       http://www.apache.org/licenses/LICENSE-2.0
-rem
-rem    Unless required by applicable law or agreed to in writing, software
-rem    distributed under the License is distributed on an "AS IS" BASIS,
-rem    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-rem    See the License for the specific language governing permissions and
-rem    limitations under the License.
-rem
-
-if not "%ECHO%" == "" echo %ECHO%
-
-setlocal
-set DIRNAME=%~dp0%
-set PROGNAME=%~nx0%
-set ARGS=%*
-
-rem Sourcing environment settings for karaf similar to tomcats setenv
-SET KARAF_SCRIPT="shell.bat"
-if exist "%DIRNAME%setenv.bat" (
-  call "%DIRNAME%setenv.bat"
-)
-
-rem Check console window title. Set to Karaf by default
-if not "%KARAF_TITLE%" == "" (
-    title %KARAF_TITLE%
-) else (
-    title Karaf
-)
-
-rem Check/Set up some easily accessible MIN/MAX params for JVM mem usage
-if "%JAVA_MIN_MEM%" == "" (
-    set JAVA_MIN_MEM=128M
-)
-if "%JAVA_MAX_MEM%" == "" (
-    set JAVA_MAX_MEM=512M
-)
-
-goto BEGIN
-
-:warn
-    echo %PROGNAME%: %*
-goto :EOF
-
-:BEGIN
-
-rem # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-
-if not "%KARAF_HOME%" == "" (
-    call :warn Ignoring predefined value for KARAF_HOME
-)
-set KARAF_HOME=%DIRNAME%..
-if not exist "%KARAF_HOME%" (
-    call :warn KARAF_HOME is not valid: "%KARAF_HOME%"
-    goto END
-)
-
-if not "%KARAF_BASE%" == "" (
-    if not exist "%KARAF_BASE%" (
-       call :warn KARAF_BASE is not valid: "%KARAF_BASE%"
-       goto END
-    )
-)
-if "%KARAF_BASE%" == "" (
-  set "KARAF_BASE=%KARAF_HOME%"
-)
-
-if not "%KARAF_DATA%" == "" (
-    if not exist "%KARAF_DATA%" (
-        call :warn KARAF_DATA is not valid: "%KARAF_DATA%"
-        goto END
-    )
-)
-if "%KARAF_DATA%" == "" (
-    set "KARAF_DATA=%KARAF_BASE%\data"
-)
-
-set DEFAULT_JAVA_OPTS=
-set DEFAULT_JAVA_DEBUG_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
-
-rem Support for loading native libraries
-set PATH=%PATH%;%KARAF_BASE%\lib;%KARAF_HOME%\lib
-
-rem Setup the Java Virtual Machine
-if not "%JAVA%" == "" goto :Check_JAVA_END
-    set JAVA=java
-    if "%JAVA_HOME%" == "" call :warn JAVA_HOME not set; results may vary
-    if not "%JAVA_HOME%" == "" set JAVA=%JAVA_HOME%\bin\java
-    if not exist "%JAVA_HOME%" (
-        call :warn JAVA_HOME is not valid: "%JAVA_HOME%"
-        goto END
-    )
-:Check_JAVA_END
-
-if "%JAVA_OPTS%" == "" set JAVA_OPTS=%DEFAULT_JAVA_OPTS%
-
-if "%KARAF_DEBUG%" == "" goto :KARAF_DEBUG_END
-    rem Use the defaults if JAVA_DEBUG_OPTS was not set
-    if "%JAVA_DEBUG_OPTS%" == "" set JAVA_DEBUG_OPTS=%DEFAULT_JAVA_DEBUG_OPTS%
-    
-    set "JAVA_OPTS=%JAVA_DEBUG_OPTS% %JAVA_OPTS%"
-    call :warn Enabling Java debug options: %JAVA_DEBUG_OPTS%
-:KARAF_DEBUG_END
-
-set CLASSPATH=%KARAF_HOME%\system\org\apache\karaf\shell\org.apache.karaf.shell.console\${project.version}\org.apache.karaf.shell.console-${project.version}.jar
-set CLASSPATH=%CLASSPATH%;%KARAF_HOME%\system\org\ops4j\pax\logging\pax-logging-api\${pax.logging.version}\pax-logging-api-${pax.logging.version}.jar
-
-:EXECUTE
-    if "%SHIFT%" == "true" SET ARGS=%2 %3 %4 %5 %6 %7 %8
-    if not "%SHIFT%" == "true" SET ARGS=%1 %2 %3 %4 %5 %6 %7 %8
-    rem Execute the Java Virtual Machine
-    "%JAVA%" %JAVA_OPTS% %OPTS% -classpath "%CLASSPATH%" -Dkaraf.instances="%KARAF_HOME%\instances" -Dkaraf.home="%KARAF_HOME%" -Dkaraf.base="%KARAF_BASE%" -Djava.io.tmpdir="%KARAF_DATA%\tmp" -Djava.util.logging.config.file="%KARAF_BASE%\etc\java.util.logging.properties" %KARAF_OPTS% org.apache.karaf.shell.console.Main --classpath="%KARAF_HOME%\system" %ARGS%
-
-rem # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-
-:END
-
-endlocal
-
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/demos/command/README.txt b/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/demos/command/README.txt
deleted file mode 100644
index af21424..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/demos/command/README.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-/* 
- * 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.
- */
-
-EXTEND CONSOLE COMMAND EXAMPLE
-==============================
-
-Purpose
--------
-Demonstrate how to extend a console command. 
-
-
-Prerequisites for Running this Example
---------------------------------------
-You must have the following installed on your machine:
-
-   - JDK 1.5 or higher.
-
-   - Apache Maven 2.2.1 or higher.
-
-
-Building and Deploying
-----------------------
-This example will produce a bundle, containing a custom command
-and its command completer.
-
-To build the demo console command invoke the following command:
-
-  mvn install
-
-To deploy the console command invoke the following command on the Karaf
-console: 
-
-  karaf@root> osgi:install -s mvn:org.apache.karaf.demos/org.apache.karaf.demos.command/${pom.version}
-
-Upon successful installation the bundle ID will be presented.
-
-To test the custom command type the following on the Karaf console:
-
-  karaf@root> mycommand:hello 
-  Executing My Command Demo
-  karaf@root>
-
-To test the command completer press tab after typing the first few
-characters of 'mycommand'.
-
-For more information on Extending Karaf Console Commands please visit:
-http://karaf.apache.org/manual/latest-2.2.x/developers-guide/extending-console.html
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/demos/deployer/bundle/README.TXT b/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/demos/deployer/bundle/README.TXT
deleted file mode 100644
index 9789247..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/demos/deployer/bundle/README.TXT
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * 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.
- */
-
-Karaf Bundle EXAMPLE
-====================
-
-Purpose
--------
-Demonstrate how to build an OSGi Bundle.
-
-
-Prerequisites for Running this Example
---------------------------------------
-You must have the following installed on your machine:
-
-   - JDK 1.6 or higher.
-
-   - Apache Maven 2.2.1 or higher.
-
-
-Building and Deploying
-----------------------
-This example will produce an OSGi bundle (a special type
-of Java Archive (jar).
-
-To build the demo bundle invoke the following command:
-
-  mvn install
-
-To deploy the newly created bundle you may either directly
-copy the generated my-bundle-1.0.0-SNAPSHOT.jar to the deploy
-directory, or issue the following command on the Karaf
-console:
-
-  karaf@root> osgi:install -s mvn:org.apache.karaf.demos.deployer.bundle/my-bundle/1.0.0-SNAPSHOT
-  Starting the Apache Karaf demo bundle
-  Bundle ID: 51 
-
-Upon installation the bundle was immediately started, printing
-the message in its activator's start method. To further verify
-its successful deployment invoke the following:
-
-  karaf@root> list
-  START LEVEL 100 , List Threshold: 50
-     ID   State         Blueprint      Level  Name
-  [  51] [Active     ] [            ] [   60] Apache Karaf :: Demos :: Deployer :: Bundle (1.0.0.SNAPSHOT)
-
-The bundle may be started or stopped via the start and stop
-commands. A message will be printed to the console each time
-this occurs. 
-
-Note: Using Karaf archetype to generate a bundle project:
----------------------------------------------------------
-
-The karaf-bundle-archetype creates a Maven skeleton project
-to build an OSGi bundle with Activator (a special callback
-class for bundle start/stop).
-
-On the command line issue the following command to create
-a bundle project:
-
-  mvn archetype:generate \
-      -DarchetypeGroupId=org.apache.karaf.archetypes \ 
-      -DarchetypeArtifactId=karaf-bundle-archetype \ 
-      -DarchetypeVersion=${version} \ 
-      -DgroupId=org.myorg \
-      -DartifactId=my-bundle \ 
-      -Dversion=1.0-SNAPSHOT \ 
-      -Dpackage=org.myorg.package
-
-For more information on using the karaf-bundle-archetype
-please visit: http://karaf.apache.org/manual/latest-2.2.x/developers-guide/archetypes.html
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/demos/deployer/feature/README.TXT b/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/demos/deployer/feature/README.TXT
deleted file mode 100644
index 19afc58..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/demos/deployer/feature/README.TXT
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * 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.
- */
-
-Karaf Feature EXAMPLE
-=====================
-
-Purpose
--------
-Demonstrate how to build a Feature.
-
-A feature is a useful tool for OSGi developers to 
-specify multiple bundles (and possibly other features)
-into a larger deployment group. In this way a feature
-can be thought of as configuring together components
-into an application. 
-
-Please note that a feature file only specifies resources
-to be deployed together, for a deployable artifact that
-contains all resources please see Apache Karaf Archives. 
-
-Prerequisites for Running this Example
---------------------------------------
-You must have the following installed on your machine:
-
-   - JDK 1.6 or higher.
-
-   - Apache Maven 2.2.1 or higher.
-
-
-Building and Deploying
-----------------------
-This example will produce a feature xml file. This feature
-picks up one bundle, commons-collections, for deployment. 
-
-To build the demo feature invoke the following command:
-
-  mvn install
-
-To deploy the feature you may copy the feature xml file
-generated in target/classes folder to the Karaf deploy
-folder OR, you may invoke the following commands from 
-the Karaf console:
-
-  karaf@root> features:addurl file:/Path/To/Karaf/demos/deployer/feature/target/classess/feature.xml
-  karaf@root> features:list | grep commons-collections
-  [uninstalled] [0.0.0          ] commons-collections           repo-0   
-  karaf@root> features:install commons-collection
-
-To verify the feature has been succesfully installed issue
-the following command:
-
-  karaf@root> features:list | grep commons-collections
-  [installed  ] [0.0.0          ] commons-collections           repo-0 
-
-To verify the commons-cllections bundle is active invoke:
-
-  karaf@root> list
-  START LEVEL 100 , List Threshold: 50
-     ID   State         Blueprint      Level  Name
-  [  50] [Active     ] [            ] [   60] Commons Collections (3.2.1)
-
-
-Note: Using Karaf archetype to generate a feature project:
----------------------------------------------------------
-
-The karaf-feature-archetype creates a Maven skeleton project
-that will generate a feature xml file.
-
-On the command line issue the following command to create
-a feature project:
-
-  mvn archetype:generate \
-      -DarchetypeGroupId=org.apache.karaf.archetypes \ 
-      -DarchetypeArtifactId=karaf-feature-archetype \ 
-      -DarchetypeVersion=${version} \ 
-      -DgroupId=org.myorg \
-      -DartifactId=my-feature \ 
-      -Dversion=1.0.0-SNAPSHOT \ 
-      -Dpackage=org.myorg.package
-
-For more information on using the karaf-bundle-archetype
-please visit: http://karaf.apache.org/manual/latest-2.2.x/developers-guide/archetypes.html
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/demos/deployer/kar/README.txt b/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/demos/deployer/kar/README.txt
deleted file mode 100644
index 8255acb..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/demos/deployer/kar/README.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-/* 
- * 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.
- */
-
-Karaf Archive (kar)  EXAMPLE
-==============================
-
-Purpose
--------
-Demonstrate how to create Karaf Archives.
-
-
-Prerequisites for Running this Example
---------------------------------------
-You must have the following installed on your machine:
-
-   - JDK 1.6 or higher.
-
-   - Apache Maven 2.2.1 or higher.
-
-
-Building and Deploying
-----------------------
-This example will produce a kar, containing a bundle. 
-
-To build the demo kar invoke the following command:
-
-  mvn install
-
-Karaf provides a KAR deployer:
-
-  karaf@root> la | grep -i archive
-  [  15] [Active     ] [Created     ] [   30] Apache Karaf :: Deployer :: Karaf Archive (.kar) (${pom.version})
-
-It's a core deployer (you don't need to install additional features).
-
-To deploy a kar, simply drop the kar into the deploy directory. 
-The KAR Deployer will deploy all the kar content starting from
-the features descriptor.
-
-The KAR Deployer uncompress the KAR archive in the system
-repository and register the features descriptor.
-You can now see your feature available for installation:
-
-  karaf@root> feature:list | grep -i my-kar
-  [installed] [${pom.version}             ] my-kar                        repo-0
-
-Now you can use any commands available on features:
-
-  karaf@root> feature:info my-kar
-  Feature my-kar ${pom.version}
-  Feature has no configuration
-  Feature has no configuration files
-  Feature has no dependencies.
-  Feature contains followed bundles:
-    mvn:commons-collections/commons-collections/3.2.1
-
-For more information on Karaf Archives please visit:
-http://karaf.apache.org/manual/latest-2.2.x/users-guide/kar.html
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/demos/deployer/wrap/README.txt b/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/demos/deployer/wrap/README.txt
deleted file mode 100644
index 9b86fe5..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/demos/deployer/wrap/README.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-/* 
- * 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.
- */
-
-Creating Bundles for Third Party Dependencies EXAMPLE
-=====================================================
-
-Purpose
--------
-Demonstrate how to create a wrap bundle for a third
-party dependency.
-
-
-Prerequisites for Running this Example
---------------------------------------
-You must have the following installed on your machine:
-
-   - JDK 1.6 or higher.
-
-   - Apache Maven 2.2.1 or higher.
-
-
-Building and Deploying
-----------------------
-This example will produce a bundle. 
-
-To build the wrap demo invoke the following command:
-
-  mvn install
-
-In the Maven POM file a shade plugin has been configured
-to take an existing jar and package it as a jar bundle. In
-this case the bundle produced exports the commons lang
-packages.
-
-The generated bundle deploys as per usual syntax:
-
-  karaf@root> osgi:install -s mvn:osgi.commons-lang/osgi.commons-lang/2.4
-
-Once installed you may confirm its operation by invoking
-the following command:
-
-  karaf@root> list | grep -i osgi.commons-lang 
-  [  50] [Active     ] [            ] [   60] Apache Karaf :: Demos :: Deployer :: Wrap Bundle osgi.commons-lang (2.4.0)
-
-For more information on creating bundles for third party 
-dependencies please visit:
-http://karaf.apache.org/manual/latest-2.2.x/developers-guide/creating-bundles.html
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/demos/dump/README.txt b/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/demos/dump/README.txt
deleted file mode 100644
index 32e9e21..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/demos/dump/README.txt
+++ /dev/null
@@ -1,68 +0,0 @@
-/* 
- * 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.
- */
-
-DUMP PROVIDER EXAMPLE
-======================
-
-Purpose
--------
-This demo provider creates images in dump destination which contains 
-screenshots from all attached displays.
-
-
-Prerequisites for Running this Example
---------------------------------------
-You must have the following installed on your machine:
-
-   - JDK 1.5 or higher.
-
-   - Apache Maven 2.2.1 or higher.
-
-
-Building and Deploying
-----------------------
-
-To build the dump provider demo type the following command:
-
-  mvn install
-
-This will create in the target folder dump-${pom.version}.jar.
-
-To install, copy dump-${pom.version}.jar into Karaf's deploy folder.
-
-To execute the demo issue the create-dump command as follows:
-
-  karaf@root> create-dump
-  Diagnostic dump created.
-  karaf@root> 
-
-This will create a time stamped zip folder which contains the
-Karaf log, a list of bundles, threads, features, and a subfolder
-containing screenshots of attached displays.
-
-Unzipping a sample dump file produces:
-
-  unzip 2012-02-06_185732.zip 
-  Archive:  2012-02-06_185732.zip
-  inflating: log/karaf.log           
-  inflating: bundles.txt             
-  inflating: screenshot/display_0.png  
-  inflating: screenshot/display_1.png  
-  inflating: threads.txt             
-  inflating: features.txt
-
-Note: The above system had two displays.
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/demos/web/README.txt b/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/demos/web/README.txt
deleted file mode 100644
index ca139f0..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/demos/web/README.txt
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * 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.
- */
-
-EMBEDDING KARAF IN A WEB APPLICATION
-====================================
-
-Purpose
--------
-To embed Karaf in a web application.
-
-
-Prerequisites for Running the Example
--------------------------------------
-You must have the following installed on your machine:
-
-  - JDK 1.5 or higher
-
-  - Maven 2.0.9 or higher
-
-
-Building and Deploying
-----------------------
-You can build and deploy this example in two ways:
-
-- A. Using Jetty: Quick and Easy
-  This option is useful if you want to see the example up and
-  running quickly.
-   
-- B. Using Your Favorite Web Container
-  This option is useful if you want to see Karaf running
-  as a web application inside your favorite web container.
-
-
-A. Using Jetty: Quick and Easy
-------------------------------
-To build the example and deploy to Jetty, complete the
-following steps:
-
-1. In a command prompt/shell, change to the directory
-   that contains this README.txt file.
-
-2. Enter the following Maven command:
-
-     mvn package jetty:run
-
-This Maven command builds the example web application, starts
-Jetty and deploys the web application to Jetty. Once complete,
-you should see the following printed to the console:
-
-[INFO] Started Jetty Server
-[INFO] Starting scanner at interval of 10 seconds.
-
-Running a Client
-----------------
-To test the example, you can use the Apache Karaf client
-to connect to the server and issue a Karaf command. For example,
-try executing the "features:list" command as follows:
-
-1. In a command prompt/shell, change to your product
-   installation directory.
-
-2. Run the following commands:
-
-    Unix:
-        ${KARAF_HOME}/bin/client features:list
-
-    Windows:
-        %KARAF_HOME%\bin\client.bat features:list
-
-    Using JDK:
-        java -jar lib/bin/karaf-client.jar features:list
-
-In this case, you should see output similar to the following:
-
-State         Version       Name       Repository
-[uninstalled] [2.5.6.SEC01] spring     karaf-${project.version}
-[uninstalled] [1.2.0      ] spring-dm  karaf-${project.version}
-[uninstalled] [${pom.version}] wrapper    karaf-${pom.version}
-[uninstalled] [${pom.version}] obr        karaf-${pom.version}
-[uninstalled] [${pom.version}] http       karaf-${pom.version}
-[uninstalled] [${pom.version}] webconsole karaf-${pom.version}
-[installed  ] [${pom.version}] ssh        karaf-${pom.version}
-[installed  ] [${pom.version}] management karaf-${pom.version}
-
-
-B. Using Your Favorite Web Container
-------------------------------------
-You can deploy the web application to your favorite web
-container, by completing the following steps:
-
-1. In a command prompt/shell, change to the directory
-   that contains this README.txt file.
-   
-2. Enter the following command:
-
-     mvn package
-     
-Maven builds the web application, web-${project.version}.war, and
-saves it in the target directory of this example. Deploy this
-WAR file to your favorite web container. Once the application
-is running, you can test it using the Apache Karaf client
-as described in the "Running a Client" section above.
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/etc/config.properties b/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/etc/config.properties
deleted file mode 100644
index 189a936..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/etc/config.properties
+++ /dev/null
@@ -1,122 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-#
-# This file lists Karaf default settings for this particular version of Karaf.
-# For easier maintenance when upgrading Karaf and to better document which
-# default values have changed, it is recommended to place any changes to
-# these values in a custom.properties file in the same folder as this file.
-# Each value specified in custom.properties will override the default value
-# here.
-#
-
-#
-# Properties file inclusions (as a space separated list of relative paths)
-# Included files will override the values specified in this file
-# NB: ${includes} properties files are mandatory, it means that Karaf will not start
-# if the include file is not found
-#
-${includes} = jre.properties custom.properties
-
-#
-# Properties file inclusions (as a space separated list of relative paths)
-# Included files will override the values specified in this file
-# NB: ${optionals} properties files are optionals, it means that Karaf will just
-# display a warning message but the bootstrap will be performed
-#
-# ${optionals} = my.properties
-
-
-#
-# Framework selection properties
-#
-karaf.framework=felix
-
-#
-# Location of the OSGi frameworks
-#
-karaf.framework.equinox=${karaf.default.repository}/org/eclipse/osgi/${equinox.version}/osgi-${equinox.version}.jar
-karaf.framework.felix=${karaf.default.repository}/org/apache/felix/org.apache.felix.framework/${felix.framework.version}/org.apache.felix.framework-${felix.framework.version}.jar
-
-#
-# Framework config properties.
-#
-org.osgi.framework.system.packages= \
- org.osgi.framework.startlevel;uses:="org.osgi.framework";version="1.0", \
- org.osgi.framework.wiring;uses:="org.osgi.resource,org.osgi.framework";version="1.1", \
- org.osgi.framework.hooks.bundle;uses:="org.osgi.framework";version="1.1", \
- org.osgi.framework.hooks.service;uses:="org.osgi.framework";version="1.1", \
- org.osgi.framework.hooks.resolver;uses:="org.osgi.framework.wiring";version="1.0", \
- org.osgi.framework.launch;uses:="org.osgi.framework";version="1.1", \
- org.osgi.framework.namespace;uses:="org.osgi.resource";version="1.0", \
- org.osgi.framework;version="1.7",\
- org.osgi.framework.hooks.weaving;uses:="org.osgi.framework.wiring";version="1.0",\
- org.osgi.resource;version="1.0",org.osgi.service.url;version="1.0",\
- org.osgi.service.startlevel;uses:="org.osgi.framework";version="1.1",\
- org.osgi.service.packageadmin;uses:="org.osgi.framework";version="1.2",\
- org.osgi.service.url;version="1.0", \
- org.osgi.util.tracker;uses:="org.osgi.framework";version="1.5.1", \
- org.apache.karaf.jaas.boot;version="${karaf.osgi.version}", \
- org.apache.karaf.jaas.boot.principal;version="${karaf.osgi.version}", \
- org.apache.karaf.version;version="${karaf.osgi.version}", \
- ${jre-${java.specification.version}}
-
-# Extra packages appended after standard packages
-# org.osgi.framework.system.packages.extra=
-
-# javax.transaction is needed to avoid class loader constraint violation when using javax.sql  
-org.osgi.framework.bootdelegation=org.apache.karaf.jaas.boot,sun.*,com.sun.*,javax.transaction,javax.transaction.*
-
-# OSGi Execution Environment
-org.osgi.framework.executionenvironment=J2SE-1.7,JavaSE-1.7,J2SE-1.6,JavaSE-1.6,J2SE-1.5,JavaSE-1.5,J2SE-1.4,JavaSE-1.4,J2SE-1.3,JavaSE-1.3,J2SE-1.2,,JavaSE-1.2,CDC-1.1/Foundation-1.1,CDC-1.0/Foundation-1.0,J2ME,OSGi/Minimum-1.1,OSGi/Minimum-1.0
-
-# Set the parent classloader for the bundle to the classloader that loads the Framework (i.e. everything in lib/*.jar)
-org.osgi.framework.bundle.parent=framework
-
-# To enable the use of the startup.properties file to control the start level:
-karaf.auto.start=startup.properties
-
-org.osgi.framework.startlevel.beginning=100
-karaf.startlevel.bundle=80
-
-karaf.shutdown.port.file=${karaf.data}/port
-
-#
-# FileMonitor properties
-#
-felix.fileinstall.dir    = ${karaf.base}/etc
-felix.fileinstall.filter = .*\\.cfg
-felix.fileinstall.poll   = 1000
-felix.fileinstall.noInitialDelay = true
-felix.fileinstall.log.level = 3
-
-#
-# Delay for writing the framework state to disk in equinox
-# must be  >= 1000 and <= 1800000
-#
-eclipse.stateSaveDelayInterval = 1000
-
-#
-# OBR Repository list
-# This property will be modified by the obr:addUrl and obr:removeUrl commands. 
-#
-obr.repository.url = 
-
-karaf.delay.console=false
-
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/etc/custom.properties b/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/etc/custom.properties
deleted file mode 100644
index fbdb62a..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/etc/custom.properties
+++ /dev/null
@@ -1,30 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-#
-# All the values specified here will override the default values given
-# in config.properties.
-#
-
-karaf.systemBundlesStartLevel=50
-
-#
-# You can place any customized configuration here.
-#
-
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/etc/jre.properties b/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/etc/jre.properties
deleted file mode 100644
index ec0a344..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/etc/jre.properties
+++ /dev/null
@@ -1,509 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-#
-# Java platform package export properties.
-#
-
-# Standard package set.  Note that:
-#   - javax.transaction* is exported with a mandatory attribute
-jre-1.6= \
- javax.accessibility, \
- javax.activation;version="1.1", \
- javax.activity, \
- javax.annotation;version="1.1", \
- javax.annotation.processing;version="1.1", \
- javax.crypto, \
- javax.crypto.interfaces, \
- javax.crypto.spec, \
- javax.imageio, \
- javax.imageio.event, \
- javax.imageio.metadata, \
- javax.imageio.plugins.bmp, \
- javax.imageio.plugins.jpeg, \
- javax.imageio.spi, \
- javax.imageio.stream, \
- javax.jws, \
- javax.jws.soap, \
- javax.lang.model, \
- javax.lang.model.element, \
- javax.lang.model.type, \
- javax.lang.model.util, \
- javax.management, \
- javax.management.loading, \
- javax.management.modelmbean, \
- javax.management.monitor, \
- javax.management.openmbean, \
- javax.management.relation, \
- javax.management.remote, \
- javax.management.remote.rmi, \
- javax.management.timer, \
- javax.naming, \
- javax.naming.directory, \
- javax.naming.event, \
- javax.naming.ldap, \
- javax.naming.spi, \
- javax.net, \
- javax.net.ssl, \
- javax.print, \
- javax.print.attribute, \
- javax.print.attribute.standard, \
- javax.print.event, \
- javax.rmi, \
- javax.rmi.CORBA, \
- javax.rmi.ssl, \
- javax.script, \
- javax.security.auth, \
- javax.security.auth.callback, \
- javax.security.auth.kerberos, \
- javax.security.auth.login, \
- javax.security.auth.spi, \
- javax.security.auth.x500, \
- javax.security.cert, \
- javax.security.sasl, \
- javax.sound.midi, \
- javax.sound.midi.spi, \
- javax.sound.sampled, \
- javax.sound.sampled.spi, \
- javax.sql, \
- javax.sql.rowset, \
- javax.sql.rowset.serial, \
- javax.sql.rowset.spi, \
- javax.swing, \
- javax.swing.border, \
- javax.swing.colorchooser, \
- javax.swing.event, \
- javax.swing.filechooser, \
- javax.swing.plaf, \
- javax.swing.plaf.basic, \
- javax.swing.plaf.metal, \
- javax.swing.plaf.multi, \
- javax.swing.plaf.synth, \
- javax.swing.table, \
- javax.swing.text, \
- javax.swing.text.html, \
- javax.swing.text.html.parser, \
- javax.swing.text.rtf, \
- javax.swing.tree, \
- javax.swing.undo, \
- javax.tools, \
- javax.transaction; javax.transaction.xa; partial=true; mandatory:=partial, \
- javax.xml, \
- javax.xml.bind;version="2.2.1", \
- javax.xml.bind.annotation;version="2.2.1", \
- javax.xml.bind.annotation.adapters;version="2.2.1", \
- javax.xml.bind.attachment;version="2.2.1", \
- javax.xml.bind.helpers;version="2.2.1", \
- javax.xml.bind.util;version="2.2.1", \
- javax.xml.crypto, \
- javax.xml.crypto.dom, \
- javax.xml.crypto.dsig, \
- javax.xml.crypto.dsig.dom, \
- javax.xml.crypto.dsig.keyinfo, \
- javax.xml.crypto.dsig.spec, \
- javax.xml.datatype, \
- javax.xml.namespace, \
- javax.xml.parsers, \
- javax.xml.soap;version="1.3", \
- javax.xml.stream;version="1.2", \
- javax.xml.stream.events;version="1.2", \
- javax.xml.stream.util;version="1.2", \
- javax.xml.transform, \
- javax.xml.transform.dom, \
- javax.xml.transform.sax, \
- javax.xml.transform.stax, \
- javax.xml.transform.stream, \
- javax.xml.validation, \
- javax.xml.ws;version="2.2", \
- javax.xml.ws.handler;version="2.2", \
- javax.xml.ws.handler.soap;version="2.2", \
- javax.xml.ws.http;version="2.2", \
- javax.xml.ws.soap;version="2.2", \
- javax.xml.ws.spi;version="2.2", \
- javax.xml.ws.wsaddressing;version="2.2", \
- javax.xml.ws.spi.http;version="2.2", \
- javax.xml.xpath, \
- org.ietf.jgss, \
- org.omg.CORBA, \
- org.omg.CORBA_2_3, \
- org.omg.CORBA_2_3.portable, \
- org.omg.CORBA.DynAnyPackage, \
- org.omg.CORBA.ORBPackage, \
- org.omg.CORBA.portable, \
- org.omg.CORBA.TypeCodePackage, \
- org.omg.CosNaming, \
- org.omg.CosNaming.NamingContextExtPackage, \
- org.omg.CosNaming.NamingContextPackage, \
- org.omg.Dynamic, \
- org.omg.DynamicAny, \
- org.omg.DynamicAny.DynAnyFactoryPackage, \
- org.omg.DynamicAny.DynAnyPackage, \
- org.omg.IOP, \
- org.omg.IOP.CodecFactoryPackage, \
- org.omg.IOP.CodecPackage, \
- org.omg.Messaging, \
- org.omg.PortableInterceptor, \
- org.omg.PortableInterceptor.ORBInitInfoPackage, \
- org.omg.PortableServer, \
- org.omg.PortableServer.CurrentPackage, \
- org.omg.PortableServer.POAManagerPackage, \
- org.omg.PortableServer.POAPackage, \
- org.omg.PortableServer.portable, \
- org.omg.PortableServer.ServantLocatorPackage, \
- org.omg.SendingContext, \
- org.omg.stub.java.rmi, \
- org.omg.stub.javax.management.remote.rmi, \
- org.w3c.dom, \
- org.w3c.dom.bootstrap, \
- org.w3c.dom.css, \
- org.w3c.dom.events, \
- org.w3c.dom.html, \
- org.w3c.dom.ls, \
- org.w3c.dom.ranges, \
- org.w3c.dom.stylesheets, \
- org.w3c.dom.traversal, \
- org.w3c.dom.views, \
- org.w3c.dom.xpath, \
- org.xml.sax, \
- org.xml.sax.ext, \
- org.xml.sax.helpers
-
-# Standard package set.  Note that:
-#   - javax.transaction* is exported with a mandatory attribute
-jre-1.7= \
- javax.accessibility, \
- javax.activation;version="1.1", \
- javax.activity, \
- javax.annotation;version="1.1", \
- javax.annotation.processing;version="1.1", \
- javax.crypto, \
- javax.crypto.interfaces, \
- javax.crypto.spec, \
- javax.imageio, \
- javax.imageio.event, \
- javax.imageio.metadata, \
- javax.imageio.plugins.bmp, \
- javax.imageio.plugins.jpeg, \
- javax.imageio.spi, \
- javax.imageio.stream, \
- javax.jws, \
- javax.jws.soap, \
- javax.lang.model, \
- javax.lang.model.element, \
- javax.lang.model.type, \
- javax.lang.model.util, \
- javax.management, \
- javax.management.loading, \
- javax.management.modelmbean, \
- javax.management.monitor, \
- javax.management.openmbean, \
- javax.management.relation, \
- javax.management.remote, \
- javax.management.remote.rmi, \
- javax.management.timer, \
- javax.naming, \
- javax.naming.directory, \
- javax.naming.event, \
- javax.naming.ldap, \
- javax.naming.spi, \
- javax.net, \
- javax.net.ssl, \
- javax.print, \
- javax.print.attribute, \
- javax.print.attribute.standard, \
- javax.print.event, \
- javax.rmi, \
- javax.rmi.CORBA, \
- javax.rmi.ssl, \
- javax.script, \
- javax.security.auth, \
- javax.security.auth.callback, \
- javax.security.auth.kerberos, \
- javax.security.auth.login, \
- javax.security.auth.spi, \
- javax.security.auth.x500, \
- javax.security.cert, \
- javax.security.sasl, \
- javax.sound.midi, \
- javax.sound.midi.spi, \
- javax.sound.sampled, \
- javax.sound.sampled.spi, \
- javax.sql, \
- javax.sql.rowset, \
- javax.sql.rowset.serial, \
- javax.sql.rowset.spi, \
- javax.swing, \
- javax.swing.border, \
- javax.swing.colorchooser, \
- javax.swing.event, \
- javax.swing.filechooser, \
- javax.swing.plaf, \
- javax.swing.plaf.basic, \
- javax.swing.plaf.metal, \
- javax.swing.plaf.multi, \
- javax.swing.plaf.synth, \
- javax.swing.table, \
- javax.swing.text, \
- javax.swing.text.html, \
- javax.swing.text.html.parser, \
- javax.swing.text.rtf, \
- javax.swing.tree, \
- javax.swing.undo, \
- javax.tools, \
- javax.transaction; javax.transaction.xa; partial=true; mandatory:=partial, \
- javax.xml, \
- javax.xml.bind;version="2.2.1", \
- javax.xml.bind.annotation;version="2.2.1", \
- javax.xml.bind.annotation.adapters;version="2.2.1", \
- javax.xml.bind.attachment;version="2.2.1", \
- javax.xml.bind.helpers;version="2.2.1", \
- javax.xml.bind.util;version="2.2.1", \
- javax.xml.crypto, \
- javax.xml.crypto.dom, \
- javax.xml.crypto.dsig, \
- javax.xml.crypto.dsig.dom, \
- javax.xml.crypto.dsig.keyinfo, \
- javax.xml.crypto.dsig.spec, \
- javax.xml.datatype, \
- javax.xml.namespace, \
- javax.xml.parsers, \
- javax.xml.soap;version="1.3", \
- javax.xml.stream;version="1.2", \
- javax.xml.stream.events;version="1.2", \
- javax.xml.stream.util;version="1.2", \
- javax.xml.transform, \
- javax.xml.transform.dom, \
- javax.xml.transform.sax, \
- javax.xml.transform.stax, \
- javax.xml.transform.stream, \
- javax.xml.validation, \
- javax.xml.ws;version="2.2", \
- javax.xml.ws.handler;version="2.2", \
- javax.xml.ws.handler.soap;version="2.2", \
- javax.xml.ws.http;version="2.2", \
- javax.xml.ws.soap;version="2.2", \
- javax.xml.ws.spi;version="2.2", \
- javax.xml.ws.wsaddressing;version="2.2", \
- javax.xml.ws.spi.http;version="2.2", \
- javax.xml.xpath, \
- org.ietf.jgss, \
- org.omg.CORBA, \
- org.omg.CORBA_2_3, \
- org.omg.CORBA_2_3.portable, \
- org.omg.CORBA.DynAnyPackage, \
- org.omg.CORBA.ORBPackage, \
- org.omg.CORBA.portable, \
- org.omg.CORBA.TypeCodePackage, \
- org.omg.CosNaming, \
- org.omg.CosNaming.NamingContextExtPackage, \
- org.omg.CosNaming.NamingContextPackage, \
- org.omg.Dynamic, \
- org.omg.DynamicAny, \
- org.omg.DynamicAny.DynAnyFactoryPackage, \
- org.omg.DynamicAny.DynAnyPackage, \
- org.omg.IOP, \
- org.omg.IOP.CodecFactoryPackage, \
- org.omg.IOP.CodecPackage, \
- org.omg.Messaging, \
- org.omg.PortableInterceptor, \
- org.omg.PortableInterceptor.ORBInitInfoPackage, \
- org.omg.PortableServer, \
- org.omg.PortableServer.CurrentPackage, \
- org.omg.PortableServer.POAManagerPackage, \
- org.omg.PortableServer.POAPackage, \
- org.omg.PortableServer.portable, \
- org.omg.PortableServer.ServantLocatorPackage, \
- org.omg.SendingContext, \
- org.omg.stub.java.rmi, \
- org.omg.stub.javax.management.remote.rmi, \
- org.w3c.dom, \
- org.w3c.dom.bootstrap, \
- org.w3c.dom.css, \
- org.w3c.dom.events, \
- org.w3c.dom.html, \
- org.w3c.dom.ls, \
- org.w3c.dom.ranges, \
- org.w3c.dom.stylesheets, \
- org.w3c.dom.traversal, \
- org.w3c.dom.views, \
- org.w3c.dom.xpath, \
- org.xml.sax, \
- org.xml.sax.ext, \
- org.xml.sax.helpers
-
-jre-1.8= \
- javax.accessibility, \
- javax.activation;version="1.1", \
- javax.activity, \
- javax.annotation;version="1.1", \
- javax.annotation.processing;version="1.1", \
- javax.crypto, \
- javax.crypto.interfaces, \
- javax.crypto.spec, \
- javax.imageio, \
- javax.imageio.event, \
- javax.imageio.metadata, \
- javax.imageio.plugins.bmp, \
- javax.imageio.plugins.jpeg, \
- javax.imageio.spi, \
- javax.imageio.stream, \
- javax.jws, \
- javax.jws.soap, \
- javax.lang.model, \
- javax.lang.model.element, \
- javax.lang.model.type, \
- javax.lang.model.util, \
- javax.management, \
- javax.management.loading, \
- javax.management.modelmbean, \
- javax.management.monitor, \
- javax.management.openmbean, \
- javax.management.relation, \
- javax.management.remote, \
- javax.management.remote.rmi, \
- javax.management.timer, \
- javax.naming, \
- javax.naming.directory, \
- javax.naming.event, \
- javax.naming.ldap, \
- javax.naming.spi, \
- javax.net, \
- javax.net.ssl, \
- javax.print, \
- javax.print.attribute, \
- javax.print.attribute.standard, \
- javax.print.event, \
- javax.rmi, \
- javax.rmi.CORBA, \
- javax.rmi.ssl, \
- javax.script, \
- javax.security.auth, \
- javax.security.auth.callback, \
- javax.security.auth.kerberos, \
- javax.security.auth.login, \
- javax.security.auth.spi, \
- javax.security.auth.x500, \
- javax.security.cert, \
- javax.security.sasl, \
- javax.sound.midi, \
- javax.sound.midi.spi, \
- javax.sound.sampled, \
- javax.sound.sampled.spi, \
- javax.sql, \
- javax.sql.rowset, \
- javax.sql.rowset.serial, \
- javax.sql.rowset.spi, \
- javax.swing, \
- javax.swing.border, \
- javax.swing.colorchooser, \
- javax.swing.event, \
- javax.swing.filechooser, \
- javax.swing.plaf, \
- javax.swing.plaf.basic, \
- javax.swing.plaf.metal, \
- javax.swing.plaf.multi, \
- javax.swing.plaf.synth, \
- javax.swing.table, \
- javax.swing.text, \
- javax.swing.text.html, \
- javax.swing.text.html.parser, \
- javax.swing.text.rtf, \
- javax.swing.tree, \
- javax.swing.undo, \
- javax.tools, \
- javax.transaction; javax.transaction.xa; partial=true; mandatory:=partial, \
- javax.xml, \
- javax.xml.bind;version="2.2.1", \
- javax.xml.bind.annotation;version="2.2.1", \
- javax.xml.bind.annotation.adapters;version="2.2.1", \
- javax.xml.bind.attachment;version="2.2.1", \
- javax.xml.bind.helpers;version="2.2.1", \
- javax.xml.bind.util;version="2.2.1", \
- javax.xml.crypto, \
- javax.xml.crypto.dom, \
- javax.xml.crypto.dsig, \
- javax.xml.crypto.dsig.dom, \
- javax.xml.crypto.dsig.keyinfo, \
- javax.xml.crypto.dsig.spec, \
- javax.xml.datatype, \
- javax.xml.namespace, \
- javax.xml.parsers, \
- javax.xml.soap;version="1.3", \
- javax.xml.stream;version="1.2", \
- javax.xml.stream.events;version="1.2", \
- javax.xml.stream.util;version="1.2", \
- javax.xml.transform, \
- javax.xml.transform.dom, \
- javax.xml.transform.sax, \
- javax.xml.transform.stax, \
- javax.xml.transform.stream, \
- javax.xml.validation, \
- javax.xml.ws;version="2.2", \
- javax.xml.ws.handler;version="2.2", \
- javax.xml.ws.handler.soap;version="2.2", \
- javax.xml.ws.http;version="2.2", \
- javax.xml.ws.soap;version="2.2", \
- javax.xml.ws.spi;version="2.2", \
- javax.xml.ws.wsaddressing;version="2.2", \
- javax.xml.ws.spi.http;version="2.2", \
- javax.xml.xpath, \
- org.ietf.jgss, \
- org.omg.CORBA, \
- org.omg.CORBA_2_3, \
- org.omg.CORBA_2_3.portable, \
- org.omg.CORBA.DynAnyPackage, \
- org.omg.CORBA.ORBPackage, \
- org.omg.CORBA.portable, \
- org.omg.CORBA.TypeCodePackage, \
- org.omg.CosNaming, \
- org.omg.CosNaming.NamingContextExtPackage, \
- org.omg.CosNaming.NamingContextPackage, \
- org.omg.Dynamic, \
- org.omg.DynamicAny, \
- org.omg.DynamicAny.DynAnyFactoryPackage, \
- org.omg.DynamicAny.DynAnyPackage, \
- org.omg.IOP, \
- org.omg.IOP.CodecFactoryPackage, \
- org.omg.IOP.CodecPackage, \
- org.omg.Messaging, \
- org.omg.PortableInterceptor, \
- org.omg.PortableInterceptor.ORBInitInfoPackage, \
- org.omg.PortableServer, \
- org.omg.PortableServer.CurrentPackage, \
- org.omg.PortableServer.POAManagerPackage, \
- org.omg.PortableServer.POAPackage, \
- org.omg.PortableServer.portable, \
- org.omg.PortableServer.ServantLocatorPackage, \
- org.omg.SendingContext, \
- org.omg.stub.java.rmi, \
- org.omg.stub.javax.management.remote.rmi, \
- org.w3c.dom, \
- org.w3c.dom.bootstrap, \
- org.w3c.dom.css, \
- org.w3c.dom.events, \
- org.w3c.dom.html, \
- org.w3c.dom.ls, \
- org.w3c.dom.ranges, \
- org.w3c.dom.stylesheets, \
- org.w3c.dom.traversal, \
- org.w3c.dom.views, \
- org.w3c.dom.xpath, \
- org.xml.sax, \
- org.xml.sax.ext, \
- org.xml.sax.helpers
\ No newline at end of file
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/etc/org.apache.karaf.features.cfg b/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/etc/org.apache.karaf.features.cfg
deleted file mode 100644
index c9cf408..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/etc/org.apache.karaf.features.cfg
+++ /dev/null
@@ -1,30 +0,0 @@
-################################################################################

-#

-#    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.

-#

-################################################################################

-

-respectStartLvlDuringFeatureStartup=false

-

-#

-# Comma separated list of features repositories to register by default

-#

-featuresRepositories=mvn:org.apache.karaf.assemblies.features/standard/${project.version}/xml/features,mvn:org.apache.karaf.assemblies.features/enterprise/${project.version}/xml/features

-

-#

-# Comma separated list of features to install at startup

-#

-featuresBoot=config,ssh,management,kar

diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/etc/org.apache.karaf.features.repos.cfg b/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/etc/org.apache.karaf.features.repos.cfg
deleted file mode 100644
index ce184c6..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/etc/org.apache.karaf.features.repos.cfg
+++ /dev/null
@@ -1,30 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-#
-# This file describes the features repository URL for some projects
-#
-cellar=org.apache.karaf.cellar:apache-karaf-cellar:xml:features:(0,]
-camel=org.apache.camel.karaf:apache-camel:xml:features:(0,]
-cxf=org.apache.cxf.karaf:apache-cxf:xml:features:(0,]
-cxf-dosgi=org.apache.cxf.dosgi:cxf-dosgi:xml:features:(0,]
-activemq=org.apache.activemq:activemq-karaf:xml:features:(0,]
-jclouds=org.jclouds.karaf:jclouds-karaf:xml:features:(0,]
-openejb=org.apache.openejb:openejb-feature:xml:features:(0,]
-wicket=org.ops4j.pax.wicket:features:xml:features:(0,]
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/etc/startup.properties b/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/etc/startup.properties
deleted file mode 100644
index b40ec23..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/etc/startup.properties
+++ /dev/null
@@ -1,81 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-# This file allows you to control the start level of each bundle.
-#
-
-#
-# Startup core services like logging
-#
-org/ops4j/pax/url/pax-url-mvn/${pax.url.version}/pax-url-mvn-${pax.url.version}.jar=5
-org/ops4j/pax/url/pax-url-wrap/${pax.url.version}/pax-url-wrap-${pax.url.version}.jar=5
-org/ops4j/pax/logging/pax-logging-api/${pax.logging.version}/pax-logging-api-${pax.logging.version}.jar=8
-org/ops4j/pax/logging/pax-logging-service/${pax.logging.version}/pax-logging-service-${pax.logging.version}.jar=8
-org/apache/felix/org.apache.felix.configadmin/${felix.configadmin.version}/org.apache.felix.configadmin-${felix.configadmin.version}.jar=10
-org/apache/felix/org.apache.felix.fileinstall/${felix.fileinstall.version}/org.apache.felix.fileinstall-${felix.fileinstall.version}.jar=11
-
-#
-# The rest of the services..
-#
-org/ow2/asm/asm-all/${asm.version}/asm-all-${asm.version}.jar=20
-org/apache/aries/org.apache.aries.util/${aries.util.version}/org.apache.aries.util-${aries.util.version}.jar=20
-org/apache/aries/proxy/org.apache.aries.proxy.api/${aries.proxy.api.version}/org.apache.aries.proxy.api-${aries.proxy.api.version}.jar=20
-org/apache/aries/proxy/org.apache.aries.proxy.impl/${aries.proxy.version}/org.apache.aries.proxy.impl-${aries.proxy.version}.jar=20
-org/apache/aries/blueprint/org.apache.aries.blueprint.api/${aries.blueprint.api.version}/org.apache.aries.blueprint.api-${aries.blueprint.api.version}.jar=20
-org/apache/aries/blueprint/org.apache.aries.blueprint.core/${aries.blueprint.core.version}/org.apache.aries.blueprint.core-${aries.blueprint.core.version}.jar=20
-org/apache/aries/blueprint/org.apache.aries.blueprint.cm/${aries.blueprint.cm.version}/org.apache.aries.blueprint.cm-${aries.blueprint.cm.version}.jar=20
-
-org/apache/karaf/shell/org.apache.karaf.shell.console/${project.version}/org.apache.karaf.shell.console-${project.version}.jar=25
-
-org/apache/karaf/shell/org.apache.karaf.shell.osgi/${project.version}/org.apache.karaf.shell.osgi-${project.version}.jar=30
-org/apache/karaf/shell/org.apache.karaf.shell.log/${project.version}/org.apache.karaf.shell.log-${project.version}.jar=30
-org/apache/karaf/shell/org.apache.karaf.shell.packages/${project.version}/org.apache.karaf.shell.packages-${project.version}.jar=30
-org/apache/karaf/shell/org.apache.karaf.shell.commands/${project.version}/org.apache.karaf.shell.commands-${project.version}.jar=30
-org/apache/karaf/shell/org.apache.karaf.shell.dev/${project.version}/org.apache.karaf.shell.dev-${project.version}.jar=30
-org/apache/karaf/jaas/org.apache.karaf.jaas.config/${project.version}/org.apache.karaf.jaas.config-${project.version}.jar=30
-org/apache/karaf/jaas/org.apache.karaf.jaas.modules/${project.version}/org.apache.karaf.jaas.modules-${project.version}.jar=30
-org/apache/karaf/jaas/org.apache.karaf.jaas.command/${project.version}/org.apache.karaf.jaas.command-${project.version}.jar=30
-org/apache/karaf/features/org.apache.karaf.features.core/${project.version}/org.apache.karaf.features.core-${project.version}.jar=30
-org/apache/karaf/features/org.apache.karaf.features.command/${project.version}/org.apache.karaf.features.command-${project.version}.jar=30
-org/apache/karaf/features/org.apache.karaf.features.management/${project.version}/org.apache.karaf.features.management-${project.version}.jar=30
-
-org/apache/karaf/diagnostic/org.apache.karaf.diagnostic.core/${project.version}/org.apache.karaf.diagnostic.core-${project.version}.jar=30
-org/apache/karaf/diagnostic/org.apache.karaf.diagnostic.common/${project.version}/org.apache.karaf.diagnostic.common-${project.version}.jar=30
-org/apache/karaf/diagnostic/org.apache.karaf.diagnostic.command/${project.version}/org.apache.karaf.diagnostic.command-${project.version}.jar=30
-org/apache/karaf/diagnostic/org.apache.karaf.diagnostic.management/${project.version}/org.apache.karaf.diagnostic.management-${project.version}.jar=30
-
-org/apache/karaf/management/org.apache.karaf.management.server/${project.version}/org.apache.karaf.management.server-${project.version}.jar=30
-org/apache/aries/jmx/org.apache.aries.jmx.api/${aries.jmx.api.version}/org.apache.aries.jmx.api-${aries.jmx.api.version}.jar=30
-org/apache/aries/jmx/org.apache.aries.jmx.core/${aries.jmx.core.version}/org.apache.aries.jmx.core-${aries.jmx.core.version}.jar=30
-org/apache/aries/jmx/org.apache.aries.jmx.blueprint.api/${aries.jmx.blueprint.api.version}/org.apache.aries.jmx.blueprint.api-${aries.jmx.blueprint.api.version}.jar=30
-org/apache/aries/jmx/org.apache.aries.jmx.blueprint.core/${aries.jmx.blueprint.core.version}/org.apache.aries.jmx.blueprint.core-${aries.jmx.blueprint.core.version}.jar=30
-
-org/apache/karaf/admin/org.apache.karaf.admin.core/${project.version}/org.apache.karaf.admin.core-${project.version}.jar=30
-org/apache/karaf/admin/org.apache.karaf.admin.command/${project.version}/org.apache.karaf.admin.command-${project.version}.jar=30
-org/apache/karaf/admin/org.apache.karaf.admin.management/${project.version}/org.apache.karaf.admin.management-${project.version}.jar=30
-
-org/apache/mina/mina-core/${mina.version}/mina-core-${mina.version}.jar=30
-org/apache/sshd/sshd-core/${sshd.version}/sshd-core-${sshd.version}.jar=30
-org/apache/karaf/shell/org.apache.karaf.shell.ssh/${project.version}/org.apache.karaf.shell.ssh-${project.version}.jar=30
-
-org/apache/karaf/deployer/org.apache.karaf.deployer.spring/${project.version}/org.apache.karaf.deployer.spring-${project.version}.jar=28
-org/apache/karaf/deployer/org.apache.karaf.deployer.blueprint/${project.version}/org.apache.karaf.deployer.blueprint-${project.version}.jar=28
-org/apache/karaf/deployer/org.apache.karaf.deployer.features/${project.version}/org.apache.karaf.deployer.features-${project.version}.jar=30
-org/apache/karaf/deployer/org.apache.karaf.deployer.kar/${project.version}/org.apache.karaf.deployer.kar-${project.version}.jar=30
-org/apache/karaf/deployer/org.apache.karaf.deployer.wrap/${project.version}/org.apache.karaf.deployer.wrap-${project.version}.jar=30
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/minimal/org.apache.karaf.features.cfg b/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/minimal/org.apache.karaf.features.cfg
deleted file mode 100644
index 1357ce0..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/minimal/org.apache.karaf.features.cfg
+++ /dev/null
@@ -1,35 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-#
-# Defines if the startlvl should be respected during feature startup. The default value is for 3.x is true. 
-# The default behavior for 2.x is false (!) for this property
-#
-#respectStartLvlDuringFeatureStartup=false
-
-#
-# Comma separated list of features repositories to register by default
-#
-#
-featuresRepositories=mvn:org.apache.karaf.assemblies.features/standard/${project.version}/xml/features,mvn:org.apache.karaf.assemblies.features/enterprise/${project.version}/xml/features
-
-#
-# Comma separated list of features to install at startup
-#
-featuresBoot=management
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/minimal/startup.properties b/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/minimal/startup.properties
deleted file mode 100644
index 6a69fc1..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/filtered-resources/minimal/startup.properties
+++ /dev/null
@@ -1,62 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-# This file allows you to control the start level of each bundle.
-#
-
-#
-# Startup core services like logging
-#
-org/ops4j/pax/url/pax-url-mvn/${pax.url.version}/pax-url-mvn-${pax.url.version}.jar=5
-org/ops4j/pax/url/pax-url-wrap/${pax.url.version}/pax-url-wrap-${pax.url.version}.jar=5
-org/ops4j/pax/logging/pax-logging-api/${pax.logging.version}/pax-logging-api-${pax.logging.version}.jar=8
-org/ops4j/pax/logging/pax-logging-service/${pax.logging.version}/pax-logging-service-${pax.logging.version}.jar=8
-org/apache/felix/org.apache.felix.configadmin/${felix.configadmin.version}/org.apache.felix.configadmin-${felix.configadmin.version}.jar=10
-org/apache/felix/org.apache.felix.fileinstall/${felix.fileinstall.version}/org.apache.felix.fileinstall-${felix.fileinstall.version}.jar=11
-
-#
-# The rest of the services..
-#
-org/ow2/asm/asm-all/${asm.version}/asm-all-${asm.version}.jar=20
-org/apache/aries/org.apache.aries.util/${aries.util.version}/org.apache.aries.util-${aries.util.version}.jar=20
-org/apache/aries/proxy/org.apache.aries.proxy.api/${aries.proxy.api.version}/org.apache.aries.proxy.api-${aries.proxy.api.version}.jar=20
-org/apache/aries/proxy/org.apache.aries.proxy.impl/${aries.proxy.version}/org.apache.aries.proxy.impl-${aries.proxy.version}.jar=20
-org/apache/aries/blueprint/org.apache.aries.blueprint.api/${aries.blueprint.api.version}/org.apache.aries.blueprint.api-${aries.blueprint.api.version}.jar=20
-org/apache/aries/blueprint/org.apache.aries.blueprint.core/${aries.blueprint.core.version}/org.apache.aries.blueprint.core-${aries.blueprint.core.version}.jar=20
-org/apache/aries/blueprint/org.apache.aries.blueprint.cm/${aries.blueprint.cm.version}/org.apache.aries.blueprint.cm-${aries.blueprint.cm.version}.jar=20
-
-org/apache/karaf/shell/org.apache.karaf.shell.console/${project.version}/org.apache.karaf.shell.console-${project.version}.jar=25
-
-org/apache/karaf/shell/org.apache.karaf.shell.osgi/${project.version}/org.apache.karaf.shell.osgi-${project.version}.jar=30
-org/apache/karaf/shell/org.apache.karaf.shell.log/${project.version}/org.apache.karaf.shell.log-${project.version}.jar=30
-org/apache/karaf/shell/org.apache.karaf.shell.packages/${project.version}/org.apache.karaf.shell.packages-${project.version}.jar=30
-org/apache/karaf/shell/org.apache.karaf.shell.commands/${project.version}/org.apache.karaf.shell.commands-${project.version}.jar=30
-org/apache/karaf/shell/org.apache.karaf.shell.dev/${project.version}/org.apache.karaf.shell.dev-${project.version}.jar=30
-org/apache/karaf/jaas/org.apache.karaf.jaas.config/${project.version}/org.apache.karaf.jaas.config-${project.version}.jar=30
-org/apache/karaf/jaas/org.apache.karaf.jaas.modules/${project.version}/org.apache.karaf.jaas.modules-${project.version}.jar=30
-org/apache/karaf/jaas/org.apache.karaf.jaas.command/${project.version}/org.apache.karaf.jaas.command-${project.version}.jar=30
-org/apache/karaf/features/org.apache.karaf.features.core/${project.version}/org.apache.karaf.features.core-${project.version}.jar=30
-org/apache/karaf/features/org.apache.karaf.features.command/${project.version}/org.apache.karaf.features.command-${project.version}.jar=30
-org/apache/karaf/features/org.apache.karaf.features.management/${project.version}/org.apache.karaf.features.management-${project.version}.jar=30
-
-org/apache/karaf/management/org.apache.karaf.management.server/${project.version}/org.apache.karaf.management.server-${project.version}.jar=30
-org/apache/aries/jmx/org.apache.aries.jmx.api/${aries.jmx.api.version}/org.apache.aries.jmx.api-${aries.jmx.api.version}.jar=30
-org/apache/aries/jmx/org.apache.aries.jmx.core/${aries.jmx.core.version}/org.apache.aries.jmx.core-${aries.jmx.core.version}.jar=30
-org/apache/aries/jmx/org.apache.aries.jmx.blueprint.api/${aries.jmx.blueprint.api.version}/org.apache.aries.jmx.blueprint.api-${aries.jmx.blueprint.api.version}.jar=30
-org/apache/aries/jmx/org.apache.aries.jmx.blueprint.core/${aries.jmx.blueprint.core.version}/org.apache.aries.jmx.blueprint.core-${aries.jmx.blueprint.core.version}.jar=30
diff --git a/karaf-2.3.x/assemblies/apache-karaf/src/main/resources/extra/jetty.xml b/karaf-2.3.x/assemblies/apache-karaf/src/main/resources/extra/jetty.xml
deleted file mode 100644
index dfdc00e..0000000
--- a/karaf-2.3.x/assemblies/apache-karaf/src/main/resources/extra/jetty.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    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.
--->
-<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//
-DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
-
-<Configure class="org.eclipse.jetty.server.Server">
-
-    <!-- =========================================================== -->
-    <!-- Set connectors                                              -->
-    <!-- =========================================================== -->
-    <!-- One of each type!                                           -->
-    <!-- =========================================================== -->
-
-    <!-- 
-         !!WARNING!! We use a blocking instead of a selector connector here to 
-         make the default configuration avoid the jetty issue 357318. If you're 
-         sure that the JDK/JRE you're usign does not face that issue feel free 
-         to change that back but please make sure that you've read the Jetty
-         bug and make sure that it does not affect you first! !! WARNING!!
-    -->
-    <Call name="addConnector">
-        <Arg>
-            <New class="org.eclipse.jetty.server.nio.BlockingChannelConnector">
-                <Set name="host">
-                    <Property name="jetty.host" />
-                </Set>
-                <Set name="port">
-                    <Property name="jetty.port" default="8181"/>
-                </Set>
-                <Set name="maxIdleTime">300000</Set>
-                <Set name="Acceptors">1</Set>
-                <Set name="statsOn">false</Set>
-                <Set name="confidentialPort">8443</Set>
-            </New>
-        </Arg>
-    </Call>
-
-	<!-- =========================================================== -->
-    <!-- Configure Authentication Realms                             -->
-    <!-- Realms may be configured for the entire server here, or     -->
-    <!-- they can be configured for a specific web app in a context  -->
-    <!-- configuration (see $(jetty.home)/contexts/test.xml for an   -->
-    <!-- example).                                                   -->
-    <!-- =========================================================== -->
-    <Call name="addBean">
-      <Arg>
-        <New class="org.eclipse.jetty.plus.jaas.JAASLoginService">
-		  <Set name="name">karaf</Set>
-          <Set name="loginModuleName">karaf</Set>
-		  <Set name="roleClassNames">
-			<Array type="java.lang.String">
-			  <Item>org.apache.karaf.jaas.modules.RolePrincipal</Item>
-			</Array>
-		  </Set>
-        </New>
-      </Arg>
-    </Call>
-    <Call name="addBean">
-      <Arg>
-        <New class="org.eclipse.jetty.plus.jaas.JAASLoginService">
-                  <Set name="name">default</Set>
-          <Set name="loginModuleName">karaf</Set>
-                  <Set name="roleClassNames">
-                        <Array type="java.lang.String">
-                          <Item>org.apache.karaf.jaas.modules.RolePrincipal</Item>
-                        </Array>
-                  </Set>
-        </New>
-      </Arg>
-    </Call>
-
-</Configure>
diff --git a/karaf-2.3.x/assemblies/features/enterprise/pom.xml b/karaf-2.3.x/assemblies/features/enterprise/pom.xml
deleted file mode 100644
index 8ba1130..0000000
--- a/karaf-2.3.x/assemblies/features/enterprise/pom.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.assemblies.features</groupId>
-        <artifactId>features</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>enterprise</artifactId>
-    <name>Apache Karaf :: Assemblies :: Features :: Enterprise</name>
-
-    <properties>
-      <appendedResourcesDirectory>${basedir}/../../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.aries.jndi</groupId>
-            <artifactId>org.apache.aries.jndi.api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.aries.jndi</groupId>
-            <artifactId>org.apache.aries.jndi.core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.aries.jndi</groupId>
-            <artifactId>org.apache.aries.jndi.url</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>  
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-resources-plugin</artifactId>
-            <configuration>
-              <useDefaultDelimiters>false</useDefaultDelimiters>
-              <delimiters>
-                <delimiter>${*}</delimiter>
-              </delimiters>
-            </configuration>
-            <executions>
-              <execution>
-                <id>filter</id>
-                <phase>generate-resources</phase>
-                <goals>
-                  <goal>resources</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>build-helper-maven-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>attach-artifacts</id>
-                <phase>package</phase>
-                <goals>
-                  <goal>attach-artifact</goal>
-                </goals>
-                <configuration>
-                  <artifacts>
-                    <artifact>
-                      <file>target/classes/features.xml</file>
-                      <type>xml</type>
-                      <classifier>features</classifier>
-                    </artifact>
-                  </artifacts>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-    </build>
-
-</project>
-
diff --git a/karaf-2.3.x/assemblies/features/enterprise/src/main/resources/features.xml b/karaf-2.3.x/assemblies/features/enterprise/src/main/resources/features.xml
deleted file mode 100644
index b5ee3e8..0000000
--- a/karaf-2.3.x/assemblies/features/enterprise/src/main/resources/features.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?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.
--->
-
-<features name="karaf-enterprise-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.0.0">
-
-    <feature name="transaction" description="OSGi Transaction Manager" version="${aries.transaction.version}" resolver="(obr)">
-        <details>JTA implementation provided by Apache Aries Transaction ${aries.transaction.version}</details>
-        <config name="org.apache.aries.transaction">
-            aries.transaction.recoverable = true
-            aries.transaction.timeout = 600
-            aries.transaction.howl.logFileDir = ${karaf.data}/txlog
-            aries.transaction.howl.maxLogFiles = 2
-            aries.transaction.howl.maxBlocksPerFile = 512
-            aries.transaction.howl.bufferSizeKBytes = 4
-        </config>
-        <bundle dependency="true" start-level="30">mvn:org.apache.geronimo.specs/geronimo-jta_1.1_spec/${geronimo.jta-spec.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.transaction/org.apache.aries.transaction.blueprint/${aries.transaction.blueprint.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.transaction/org.apache.aries.transaction.manager/${aries.transaction.manager.version}</bundle>
-    </feature>
-
-    <feature name="jpa" description="OSGi Persistence Container" version="${aries.jpa.version}" resolver="(obr)">
-        <details>JPA implementation provided by Apache Aries JPA ${aries.jpa.version}. NB: this feature doesn't provide the JPA engine, you have to install one by yourself (OpenJPA for instance)</details>
-        <bundle dependency="true" start-level="30">mvn:org.apache.geronimo.specs/geronimo-jta_1.1_spec/${geronimo.jta-spec.version}</bundle>
-        <bundle dependency="true" start-level="30">mvn:org.apache.geronimo.specs/geronimo-jpa_2.0_spec/${geronimo.jpa-spec.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.jpa/org.apache.aries.jpa.api/${aries.jpa.api.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.jpa/org.apache.aries.jpa.blueprint.aries/${aries.jpa.blueprint.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.jpa/org.apache.aries.jpa.container/${aries.jpa.container.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.jpa/org.apache.aries.jpa.container.context/${aries.jpa.container.context.version}</bundle>
-    </feature>
-
-    <feature name="jndi" description="OSGi Service Registry JNDI access" version="${aries.jndi.version}" resolver="(obr)">
-        <details>JNDI support provided by Apache Aries JNDI ${aries.jndi.version}</details>
-        <bundle start-level="30">mvn:org.apache.aries.jndi/org.apache.aries.jndi.api/${aries.jndi.api.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.jndi/org.apache.aries.jndi.core/${aries.jndi.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.jndi/org.apache.aries.jndi.rmi/${aries.jndi.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.jndi/org.apache.aries.jndi.url/${aries.jndi.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.jndi/org.apache.aries.jndi.legacy.support/${aries.jndi.version}</bundle>
-    </feature>
-
-    <feature name="application-without-isolation" description="Provide EBA archive support" version="${aries.application.version}">
-        <details>Support of the Aries EBA archives</details>
-        <feature version="${project.version}">obr</feature>
-        <!-- commom -->
-        <bundle start-level="30">mvn:org.apache.aries.application/org.apache.aries.application.resolver.obr/${aries.application.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.application/org.apache.aries.application.install/${aries.application.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.application/org.apache.aries.application.api/${aries.application.api.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.application/org.apache.aries.application.management/${aries.application.management.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.application/org.apache.aries.application.utils/${aries.application.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.application/org.apache.aries.application.modeller/${aries.application.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.application/org.apache.aries.application.default.local.platform/${aries.application.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.application/org.apache.aries.application.resolver.noop/${aries.application.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.application/org.apache.aries.application.deployment.management/${aries.application.version}</bundle>
-        <!-- without isolation -->
-        <bundle start-level="30">mvn:org.apache.aries.application/org.apache.aries.application.runtime/${aries.application.version}</bundle>
-    </feature>
-
-</features>
diff --git a/karaf-2.3.x/assemblies/features/framework/src/main/filtered-resources/resources/etc/jre.properties.cxf b/karaf-2.3.x/assemblies/features/framework/src/main/filtered-resources/resources/etc/jre.properties.cxf
deleted file mode 100644
index 271b71a..0000000
--- a/karaf-2.3.x/assemblies/features/framework/src/main/filtered-resources/resources/etc/jre.properties.cxf
+++ /dev/null
@@ -1,632 +0,0 @@
-################################################################################

-#

-#    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.

-#

-################################################################################

-

-#

-# Java platform package export properties.

-#

-

-# Standard package set.  Note that:

-#   - javax.transaction* is exported with a mandatory attribute

-jre-1.5= \

- javax.accessibility, \

- javax.activity, \

- javax.crypto, \

- javax.crypto.interfaces, \

- javax.crypto.spec, \

- javax.imageio, \

- javax.imageio.event, \

- javax.imageio.metadata, \

- javax.imageio.plugins.bmp, \

- javax.imageio.plugins.jpeg, \

- javax.imageio.spi, \

- javax.imageio.stream, \

- javax.management, \

- javax.management.loading, \

- javax.management.modelmbean, \

- javax.management.monitor, \

- javax.management.openmbean, \

- javax.management.relation, \

- javax.management.remote, \

- javax.management.remote.rmi, \

- javax.management.timer, \

- javax.naming, \

- javax.naming.directory, \

- javax.naming.event, \

- javax.naming.ldap, \

- javax.naming.spi, \

- javax.net, \

- javax.net.ssl, \

- javax.print, \

- javax.print.attribute, \

- javax.print.attribute.standard, \

- javax.print.event, \

- javax.rmi, \

- javax.rmi.CORBA, \

- javax.rmi.ssl, \

- javax.security.auth, \

- javax.security.auth.callback, \

- javax.security.auth.kerberos, \

- javax.security.auth.login, \

- javax.security.auth.spi, \

- javax.security.auth.x500, \

- javax.security.cert, \

- javax.security.sasl, \

- javax.sound.midi, \

- javax.sound.midi.spi, \

- javax.sound.sampled, \

- javax.sound.sampled.spi, \

- javax.sql, \

- javax.sql.rowset, \

- javax.sql.rowset.serial, \

- javax.sql.rowset.spi, \

- javax.swing, \

- javax.swing.border, \

- javax.swing.colorchooser, \

- javax.swing.event, \

- javax.swing.filechooser, \

- javax.swing.plaf, \

- javax.swing.plaf.basic, \

- javax.swing.plaf.metal, \

- javax.swing.plaf.multi, \

- javax.swing.plaf.synth, \

- javax.swing.table, \

- javax.swing.text, \

- javax.swing.text.html, \

- javax.swing.text.html.parser, \

- javax.swing.text.rtf, \

- javax.swing.tree, \

- javax.swing.undo, \

- javax.transaction; javax.transaction.xa; partial=true; mandatory:=partial, \

- javax.xml, \

- javax.xml.datatype, \

- javax.xml.namespace, \

- javax.xml.parsers, \

- javax.xml.transform, \

- javax.xml.transform.dom, \

- javax.xml.transform.sax, \

- javax.xml.transform.stream, \

- javax.xml.validation, \

- javax.xml.xpath, \

- org.ietf.jgss, \

- org.omg.CORBA, \

- org.omg.CORBA_2_3, \

- org.omg.CORBA_2_3.portable, \

- org.omg.CORBA.DynAnyPackage, \

- org.omg.CORBA.ORBPackage, \

- org.omg.CORBA.portable, \

- org.omg.CORBA.TypeCodePackage, \

- org.omg.CosNaming, \

- org.omg.CosNaming.NamingContextExtPackage, \

- org.omg.CosNaming.NamingContextPackage, \

- org.omg.Dynamic, \

- org.omg.DynamicAny, \

- org.omg.DynamicAny.DynAnyFactoryPackage, \

- org.omg.DynamicAny.DynAnyPackage, \

- org.omg.IOP, \

- org.omg.IOP.CodecFactoryPackage, \

- org.omg.IOP.CodecPackage, \

- org.omg.Messaging, \

- org.omg.PortableInterceptor, \

- org.omg.PortableInterceptor.ORBInitInfoPackage, \

- org.omg.PortableServer, \

- org.omg.PortableServer.CurrentPackage, \

- org.omg.PortableServer.POAManagerPackage, \

- org.omg.PortableServer.POAPackage, \

- org.omg.PortableServer.portable, \

- org.omg.PortableServer.ServantLocatorPackage, \

- org.omg.SendingContext, \

- org.omg.stub.java.rmi, \

- org.omg.stub.javax.management.remote.rmi, \

- org.w3c.dom, \

- org.w3c.dom.bootstrap, \

- org.w3c.dom.css, \

- org.w3c.dom.events, \

- org.w3c.dom.html, \

- org.w3c.dom.ls, \

- org.w3c.dom.ranges, \

- org.w3c.dom.stylesheets, \

- org.w3c.dom.traversal, \

- org.w3c.dom.views, \

- org.xml.sax, \

- org.xml.sax.ext, \

- org.xml.sax.helpers

-

-# Standard package set.  Note that:

-#   - javax.transaction* is exported with a mandatory attribute

-jre-1.6= \

- javax.accessibility, \

-# javax.activation, \

- javax.activity, \

-# javax.annotation;version="1.1", \

- javax.annotation.processing;version="1.1", \

- javax.crypto, \

- javax.crypto.interfaces, \

- javax.crypto.spec, \

- javax.imageio, \

- javax.imageio.event, \

- javax.imageio.metadata, \

- javax.imageio.plugins.bmp, \

- javax.imageio.plugins.jpeg, \

- javax.imageio.spi, \

- javax.imageio.stream, \

-# javax.jws, \

-# javax.jws.soap, \

- javax.lang.model, \

- javax.lang.model.element, \

- javax.lang.model.type, \

- javax.lang.model.util, \

- javax.management, \

- javax.management.loading, \

- javax.management.modelmbean, \

- javax.management.monitor, \

- javax.management.openmbean, \

- javax.management.relation, \

- javax.management.remote, \

- javax.management.remote.rmi, \

- javax.management.timer, \

- javax.naming, \

- javax.naming.directory, \

- javax.naming.event, \

- javax.naming.ldap, \

- javax.naming.spi, \

- javax.net, \

- javax.net.ssl, \

- javax.print, \

- javax.print.attribute, \

- javax.print.attribute.standard, \

- javax.print.event, \

- javax.rmi, \

- javax.rmi.CORBA, \

- javax.rmi.ssl, \

- javax.script, \

- javax.security.auth, \

- javax.security.auth.callback, \

- javax.security.auth.kerberos, \

- javax.security.auth.login, \

- javax.security.auth.spi, \

- javax.security.auth.x500, \

- javax.security.cert, \

- javax.security.sasl, \

- javax.sound.midi, \

- javax.sound.midi.spi, \

- javax.sound.sampled, \

- javax.sound.sampled.spi, \

- javax.sql, \

- javax.sql.rowset, \

- javax.sql.rowset.serial, \

- javax.sql.rowset.spi, \

- javax.swing, \

- javax.swing.border, \

- javax.swing.colorchooser, \

- javax.swing.event, \

- javax.swing.filechooser, \

- javax.swing.plaf, \

- javax.swing.plaf.basic, \

- javax.swing.plaf.metal, \

- javax.swing.plaf.multi, \

- javax.swing.plaf.synth, \

- javax.swing.table, \

- javax.swing.text, \

- javax.swing.text.html, \

- javax.swing.text.html.parser, \

- javax.swing.text.rtf, \

- javax.swing.tree, \

- javax.swing.undo, \

- javax.tools, \

- javax.transaction; javax.transaction.xa; partial=true; mandatory:=partial, \

- javax.xml, \

-# javax.xml.bind, \

-# javax.xml.bind.annotation, \

-# javax.xml.bind.annotation.adapters, \

-# javax.xml.bind.attachment, \

-# javax.xml.bind.helpers, \

-# javax.xml.bind.util, \

- javax.xml.crypto, \

- javax.xml.crypto.dom, \

- javax.xml.crypto.dsig, \

- javax.xml.crypto.dsig.dom, \

- javax.xml.crypto.dsig.keyinfo, \

- javax.xml.crypto.dsig.spec, \

- javax.xml.datatype, \

- javax.xml.namespace, \

- javax.xml.parsers, \

-# javax.xml.soap, \

-# javax.xml.stream, \

-# javax.xml.stream.events, \

-# javax.xml.stream.util, \

- javax.xml.transform, \

- javax.xml.transform.dom, \

- javax.xml.transform.sax, \

- javax.xml.transform.stax, \

- javax.xml.transform.stream, \

- javax.xml.validation, \

-# javax.xml.ws, \

-# javax.xml.ws.handler, \

-# javax.xml.ws.handler.soap, \

-# javax.xml.ws.http, \

-# javax.xml.ws.soap, \

-# javax.xml.ws.spi, \

- javax.xml.ws.wsaddressing, \

- javax.xml.xpath, \

- org.ietf.jgss, \

- org.omg.CORBA, \

- org.omg.CORBA_2_3, \

- org.omg.CORBA_2_3.portable, \

- org.omg.CORBA.DynAnyPackage, \

- org.omg.CORBA.ORBPackage, \

- org.omg.CORBA.portable, \

- org.omg.CORBA.TypeCodePackage, \

- org.omg.CosNaming, \

- org.omg.CosNaming.NamingContextExtPackage, \

- org.omg.CosNaming.NamingContextPackage, \

- org.omg.Dynamic, \

- org.omg.DynamicAny, \

- org.omg.DynamicAny.DynAnyFactoryPackage, \

- org.omg.DynamicAny.DynAnyPackage, \

- org.omg.IOP, \

- org.omg.IOP.CodecFactoryPackage, \

- org.omg.IOP.CodecPackage, \

- org.omg.Messaging, \

- org.omg.PortableInterceptor, \

- org.omg.PortableInterceptor.ORBInitInfoPackage, \

- org.omg.PortableServer, \

- org.omg.PortableServer.CurrentPackage, \

- org.omg.PortableServer.POAManagerPackage, \

- org.omg.PortableServer.POAPackage, \

- org.omg.PortableServer.portable, \

- org.omg.PortableServer.ServantLocatorPackage, \

- org.omg.SendingContext, \

- org.omg.stub.java.rmi, \

- org.omg.stub.javax.management.remote.rmi, \

- org.w3c.dom, \

- org.w3c.dom.bootstrap, \

- org.w3c.dom.css, \

- org.w3c.dom.events, \

- org.w3c.dom.html, \

- org.w3c.dom.ls, \

- org.w3c.dom.ranges, \

- org.w3c.dom.stylesheets, \

- org.w3c.dom.traversal, \

- org.w3c.dom.views, \

- org.w3c.dom.xpath, \

- org.xml.sax, \

- org.xml.sax.ext, \

- org.xml.sax.helpers

-

-# Standard package set.  Note that:

-#   - javax.transaction* is exported with a mandatory attribute

-jre-1.7= \

- javax.accessibility, \

-# javax.activation, \

- javax.activity, \

-# javax.annotation;version="1.1", \

- javax.annotation.processing;version="1.1", \

- javax.crypto, \

- javax.crypto.interfaces, \

- javax.crypto.spec, \

- javax.imageio, \

- javax.imageio.event, \

- javax.imageio.metadata, \

- javax.imageio.plugins.bmp, \

- javax.imageio.plugins.jpeg, \

- javax.imageio.spi, \

- javax.imageio.stream, \

-# javax.jws, \

-# javax.jws.soap, \

- javax.lang.model, \

- javax.lang.model.element, \

- javax.lang.model.type, \

- javax.lang.model.util, \

- javax.management, \

- javax.management.loading, \

- javax.management.modelmbean, \

- javax.management.monitor, \

- javax.management.openmbean, \

- javax.management.relation, \

- javax.management.remote, \

- javax.management.remote.rmi, \

- javax.management.timer, \

- javax.naming, \

- javax.naming.directory, \

- javax.naming.event, \

- javax.naming.ldap, \

- javax.naming.spi, \

- javax.net, \

- javax.net.ssl, \

- javax.print, \

- javax.print.attribute, \

- javax.print.attribute.standard, \

- javax.print.event, \

- javax.rmi, \

- javax.rmi.CORBA, \

- javax.rmi.ssl, \

- javax.script, \

- javax.security.auth, \

- javax.security.auth.callback, \

- javax.security.auth.kerberos, \

- javax.security.auth.login, \

- javax.security.auth.spi, \

- javax.security.auth.x500, \

- javax.security.cert, \

- javax.security.sasl, \

- javax.sound.midi, \

- javax.sound.midi.spi, \

- javax.sound.sampled, \

- javax.sound.sampled.spi, \

- javax.sql, \

- javax.sql.rowset, \

- javax.sql.rowset.serial, \

- javax.sql.rowset.spi, \

- javax.swing, \

- javax.swing.border, \

- javax.swing.colorchooser, \

- javax.swing.event, \

- javax.swing.filechooser, \

- javax.swing.plaf, \

- javax.swing.plaf.basic, \

- javax.swing.plaf.metal, \

- javax.swing.plaf.multi, \

- javax.swing.plaf.synth, \

- javax.swing.table, \

- javax.swing.text, \

- javax.swing.text.html, \

- javax.swing.text.html.parser, \

- javax.swing.text.rtf, \

- javax.swing.tree, \

- javax.swing.undo, \

- javax.tools, \

- javax.transaction; javax.transaction.xa; partial=true; mandatory:=partial, \

- javax.xml, \

-# javax.xml.bind, \

-# javax.xml.bind.annotation, \

-# javax.xml.bind.annotation.adapters, \

-# javax.xml.bind.attachment, \

-# javax.xml.bind.helpers, \

-# javax.xml.bind.util, \

- javax.xml.crypto, \

- javax.xml.crypto.dom, \

- javax.xml.crypto.dsig, \

- javax.xml.crypto.dsig.dom, \

- javax.xml.crypto.dsig.keyinfo, \

- javax.xml.crypto.dsig.spec, \

- javax.xml.datatype, \

- javax.xml.namespace, \

- javax.xml.parsers, \

-# javax.xml.soap, \

-# javax.xml.stream, \

-# javax.xml.stream.events, \

-# javax.xml.stream.util, \

- javax.xml.transform, \

- javax.xml.transform.dom, \

- javax.xml.transform.sax, \

- javax.xml.transform.stax, \

- javax.xml.transform.stream, \

- javax.xml.validation, \

-# javax.xml.ws, \

-# javax.xml.ws.handler, \

-# javax.xml.ws.handler.soap, \

-# javax.xml.ws.http, \

-# javax.xml.ws.soap, \

-# javax.xml.ws.spi, \

- javax.xml.ws.wsaddressing, \

- javax.xml.xpath, \

- org.ietf.jgss, \

- org.omg.CORBA, \

- org.omg.CORBA_2_3, \

- org.omg.CORBA_2_3.portable, \

- org.omg.CORBA.DynAnyPackage, \

- org.omg.CORBA.ORBPackage, \

- org.omg.CORBA.portable, \

- org.omg.CORBA.TypeCodePackage, \

- org.omg.CosNaming, \

- org.omg.CosNaming.NamingContextExtPackage, \

- org.omg.CosNaming.NamingContextPackage, \

- org.omg.Dynamic, \

- org.omg.DynamicAny, \

- org.omg.DynamicAny.DynAnyFactoryPackage, \

- org.omg.DynamicAny.DynAnyPackage, \

- org.omg.IOP, \

- org.omg.IOP.CodecFactoryPackage, \

- org.omg.IOP.CodecPackage, \

- org.omg.Messaging, \

- org.omg.PortableInterceptor, \

- org.omg.PortableInterceptor.ORBInitInfoPackage, \

- org.omg.PortableServer, \

- org.omg.PortableServer.CurrentPackage, \

- org.omg.PortableServer.POAManagerPackage, \

- org.omg.PortableServer.POAPackage, \

- org.omg.PortableServer.portable, \

- org.omg.PortableServer.ServantLocatorPackage, \

- org.omg.SendingContext, \

- org.omg.stub.java.rmi, \

- org.omg.stub.javax.management.remote.rmi, \

- org.w3c.dom, \

- org.w3c.dom.bootstrap, \

- org.w3c.dom.css, \

- org.w3c.dom.events, \

- org.w3c.dom.html, \

- org.w3c.dom.ls, \

- org.w3c.dom.ranges, \

- org.w3c.dom.stylesheets, \

- org.w3c.dom.traversal, \

- org.w3c.dom.views, \

- org.w3c.dom.xpath, \

- org.xml.sax, \

- org.xml.sax.ext, \

- org.xml.sax.helpers

-

-jre-1.8= \

- javax.accessibility, \

-# javax.activation, \

- javax.activity, \

-# javax.annotation;version="1.1", \

- javax.annotation.processing;version="1.1", \

- javax.crypto, \

- javax.crypto.interfaces, \

- javax.crypto.spec, \

- javax.imageio, \

- javax.imageio.event, \

- javax.imageio.metadata, \

- javax.imageio.plugins.bmp, \

- javax.imageio.plugins.jpeg, \

- javax.imageio.spi, \

- javax.imageio.stream, \

-# javax.jws, \

-# javax.jws.soap, \

- javax.lang.model, \

- javax.lang.model.element, \

- javax.lang.model.type, \

- javax.lang.model.util, \

- javax.management, \

- javax.management.loading, \

- javax.management.modelmbean, \

- javax.management.monitor, \

- javax.management.openmbean, \

- javax.management.relation, \

- javax.management.remote, \

- javax.management.remote.rmi, \

- javax.management.timer, \

- javax.naming, \

- javax.naming.directory, \

- javax.naming.event, \

- javax.naming.ldap, \

- javax.naming.spi, \

- javax.net, \

- javax.net.ssl, \

- javax.print, \

- javax.print.attribute, \

- javax.print.attribute.standard, \

- javax.print.event, \

- javax.rmi, \

- javax.rmi.CORBA, \

- javax.rmi.ssl, \

- javax.script, \

- javax.security.auth, \

- javax.security.auth.callback, \

- javax.security.auth.kerberos, \

- javax.security.auth.login, \

- javax.security.auth.spi, \

- javax.security.auth.x500, \

- javax.security.cert, \

- javax.security.sasl, \

- javax.sound.midi, \

- javax.sound.midi.spi, \

- javax.sound.sampled, \

- javax.sound.sampled.spi, \

- javax.sql, \

- javax.sql.rowset, \

- javax.sql.rowset.serial, \

- javax.sql.rowset.spi, \

- javax.swing, \

- javax.swing.border, \

- javax.swing.colorchooser, \

- javax.swing.event, \

- javax.swing.filechooser, \

- javax.swing.plaf, \

- javax.swing.plaf.basic, \

- javax.swing.plaf.metal, \

- javax.swing.plaf.multi, \

- javax.swing.plaf.synth, \

- javax.swing.table, \

- javax.swing.text, \

- javax.swing.text.html, \

- javax.swing.text.html.parser, \

- javax.swing.text.rtf, \

- javax.swing.tree, \

- javax.swing.undo, \

- javax.tools, \

- javax.transaction; javax.transaction.xa; partial=true; mandatory:=partial, \

- javax.xml, \

-# javax.xml.bind, \

-# javax.xml.bind.annotation, \

-# javax.xml.bind.annotation.adapters, \

-# javax.xml.bind.attachment, \

-# javax.xml.bind.helpers, \

-# javax.xml.bind.util, \

- javax.xml.crypto, \

- javax.xml.crypto.dom, \

- javax.xml.crypto.dsig, \

- javax.xml.crypto.dsig.dom, \

- javax.xml.crypto.dsig.keyinfo, \

- javax.xml.crypto.dsig.spec, \

- javax.xml.datatype, \

- javax.xml.namespace, \

- javax.xml.parsers, \

-# javax.xml.soap, \

-# javax.xml.stream, \

-# javax.xml.stream.events, \

-# javax.xml.stream.util, \

- javax.xml.transform, \

- javax.xml.transform.dom, \

- javax.xml.transform.sax, \

- javax.xml.transform.stax, \

- javax.xml.transform.stream, \

- javax.xml.validation, \

-# javax.xml.ws, \

-# javax.xml.ws.handler, \

-# javax.xml.ws.handler.soap, \

-# javax.xml.ws.http, \

-# javax.xml.ws.soap, \

-# javax.xml.ws.spi, \

- javax.xml.ws.wsaddressing, \

- javax.xml.xpath, \

- org.ietf.jgss, \

- org.omg.CORBA, \

- org.omg.CORBA_2_3, \

- org.omg.CORBA_2_3.portable, \

- org.omg.CORBA.DynAnyPackage, \

- org.omg.CORBA.ORBPackage, \

- org.omg.CORBA.portable, \

- org.omg.CORBA.TypeCodePackage, \

- org.omg.CosNaming, \

- org.omg.CosNaming.NamingContextExtPackage, \

- org.omg.CosNaming.NamingContextPackage, \

- org.omg.Dynamic, \

- org.omg.DynamicAny, \

- org.omg.DynamicAny.DynAnyFactoryPackage, \

- org.omg.DynamicAny.DynAnyPackage, \

- org.omg.IOP, \

- org.omg.IOP.CodecFactoryPackage, \

- org.omg.IOP.CodecPackage, \

- org.omg.Messaging, \

- org.omg.PortableInterceptor, \

- org.omg.PortableInterceptor.ORBInitInfoPackage, \

- org.omg.PortableServer, \

- org.omg.PortableServer.CurrentPackage, \

- org.omg.PortableServer.POAManagerPackage, \

- org.omg.PortableServer.POAPackage, \

- org.omg.PortableServer.portable, \

- org.omg.PortableServer.ServantLocatorPackage, \

- org.omg.SendingContext, \

- org.omg.stub.java.rmi, \

- org.omg.stub.javax.management.remote.rmi, \

- org.w3c.dom, \

- org.w3c.dom.bootstrap, \

- org.w3c.dom.css, \

- org.w3c.dom.events, \

- org.w3c.dom.html, \

- org.w3c.dom.ls, \

- org.w3c.dom.ranges, \

- org.w3c.dom.stylesheets, \

- org.w3c.dom.traversal, \

- org.w3c.dom.views, \

- org.w3c.dom.xpath, \

- org.xml.sax, \

- org.xml.sax.ext, \

- org.xml.sax.helpers
\ No newline at end of file
diff --git a/karaf-2.3.x/assemblies/features/pom.xml b/karaf-2.3.x/assemblies/features/pom.xml
deleted file mode 100644
index 2124d03..0000000
--- a/karaf-2.3.x/assemblies/features/pom.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.assemblies</groupId>
-        <artifactId>assemblies</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.assemblies.features</groupId>
-    <artifactId>features</artifactId>
-    <packaging>pom</packaging>
-    <name>Apache Karaf :: Assemblies :: Features</name>
-
-    <modules>
-        <module>standard</module>
-        <module>enterprise</module>
-    </modules>
-
-</project>
diff --git a/karaf-2.3.x/assemblies/features/standard/pom.xml b/karaf-2.3.x/assemblies/features/standard/pom.xml
deleted file mode 100644
index 3617aa6..0000000
--- a/karaf-2.3.x/assemblies/features/standard/pom.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.assemblies.features</groupId>
-        <artifactId>features</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>standard</artifactId>
-    <name>Apache Karaf :: Assemblies :: Features :: Standard</name>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>  
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-resources-plugin</artifactId>
-            <configuration>
-              <useDefaultDelimiters>false</useDefaultDelimiters>
-              <delimiters>
-                <delimiter>${*}</delimiter>
-              </delimiters>
-            </configuration>
-            <executions>
-              <execution>
-                <id>filter</id>
-                <phase>generate-resources</phase>
-                <goals>
-                  <goal>resources</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>build-helper-maven-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>attach-artifacts</id>
-                <phase>package</phase>
-                <goals>
-                  <goal>attach-artifact</goal>
-                </goals>
-                <configuration>
-                  <artifacts>
-                    <artifact>
-                      <file>target/classes/features.xml</file>
-                      <type>xml</type>
-                      <classifier>features</classifier>
-                    </artifact>
-                  </artifacts>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-    </build>
-
-</project>
-
diff --git a/karaf-2.3.x/assemblies/features/standard/src/main/resources/features.xml b/karaf-2.3.x/assemblies/features/standard/src/main/resources/features.xml
deleted file mode 100644
index 73fbd99..0000000
--- a/karaf-2.3.x/assemblies/features/standard/src/main/resources/features.xml
+++ /dev/null
@@ -1,383 +0,0 @@
-<?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.
--->
-<features name="karaf-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.0.0">
-
-    <feature name="karaf-framework" description="Karaf core feature" version="${project.version}" resolver="(obr)">
-        <bundle start-level="5">mvn:org.ops4j.pax.url/pax-url-mvn/${pax.url.version}</bundle>
-        <bundle start-level="5">mvn:org.ops4j.pax.url/pax-url-wrap/${pax.url.version}</bundle>
-        <bundle start-level="8">mvn:org.ops4j.pax.logging/pax-logging-api/${pax.logging.version}</bundle>
-        <bundle start-level="8">mvn:org.ops4j.pax.logging/pax-logging-service/${pax.logging.version}</bundle>
-        <bundle start-level="10">mvn:org.apache.felix/org.apache.felix.configadmin/${felix.configadmin.version}</bundle>
-        <bundle start-level="11">mvn:org.apache.felix/org.apache.felix.fileinstall/${felix.fileinstall.version}</bundle>
-        <bundle start-level="20">mvn:org.ow2.asm/asm-all/${asm.version}</bundle>
-        <bundle start-level="20">mvn:org.apache.aries/org.apache.aries.util/${aries.util.version}</bundle>
-        <bundle start-level="20">mvn:org.apache.aries.proxy/org.apache.aries.proxy.api/${aries.proxy.api.version}</bundle>
-        <bundle start-level="20">mvn:org.apache.aries.proxy/org.apache.aries.proxy.impl/${aries.proxy.version}</bundle>
-        <bundle start-level="20">mvn:org.apache.aries.blueprint/org.apache.aries.blueprint.api/${aries.blueprint.api.version}</bundle>
-        <bundle start-level="20">mvn:org.apache.aries.blueprint/org.apache.aries.blueprint.core/${aries.blueprint.core.version}</bundle>
-        <bundle start-level="20">mvn:org.apache.aries.blueprint/org.apache.aries.blueprint.cm/${aries.blueprint.cm.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.shell/org.apache.karaf.shell.console/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.shell/org.apache.karaf.shell.osgi/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.shell/org.apache.karaf.shell.log/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.shell/org.apache.karaf.shell.packages/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.shell/org.apache.karaf.shell.commands/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.shell/org.apache.karaf.shell.dev/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.jaas/org.apache.karaf.jaas.config/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.jaas/org.apache.karaf.jaas.modules/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.jaas/org.apache.karaf.jaas.command/${project.version}</bundle>
-        <bundle start-level="25">mvn:org.apache.karaf.features/org.apache.karaf.features.core/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.features/org.apache.karaf.features.command/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.features/org.apache.karaf.features.management/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.management/org.apache.karaf.management.server/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.jmx/org.apache.aries.jmx.api/${aries.jmx.api.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.jmx/org.apache.aries.jmx.core/${aries.jmx.core.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.jmx/org.apache.aries.jmx.blueprint.api/${aries.jmx.blueprint.api.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.jmx/org.apache.aries.jmx.blueprint.core/${aries.jmx.blueprint.core.version}</bundle>
-    </feature>
-
-    <!-- Spring 2 support -->
-    <feature name="spring" description="Spring support" version="${spring2.version}" resolver="(obr)">
-        <bundle dependency="true" start-level="30">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.aopalliance/${aopalliance.bundle.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-core/${spring2.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-beans/${spring2.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-aop/${spring2.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-context/${spring2.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-context-support/${spring2.version}</bundle>
-    </feature>
-
-    <feature name="spring-web" description="Spring 2 Web support" version="${spring2.version}" resolver="(obr)">
-    	<feature version="${spring2.version}">spring</feature>
-    	<feature version="${http.feature.version}">http</feature>
-    	<bundle start-level="30">mvn:org.springframework/spring-web/${spring2.version}</bundle>
-		<bundle start-level="30">mvn:org.springframework/spring-webmvc/${spring2.version}</bundle>
-    </feature>
-
-    <!-- Spring 3.0 support -->
-
-    <feature name="spring" description="Spring 3.0.x support" version="${spring30.version}" resolver="(obr)">
-        <bundle dependency="true" start-level="30">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.aopalliance/${aopalliance.bundle.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-core/${spring30.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-asm/${spring30.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-expression/${spring30.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-beans/${spring30.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-aop/${spring30.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-context/${spring30.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-context-support/${spring30.version}</bundle>
-    </feature>
-
-    <feature name="spring-aspects" description="Spring AOP support" version="${spring30.version}" resolver="(obr)">
-        <feature version="${spring30.version}">spring</feature>
-        <bundle start-level="30">mvn:org.springframework/spring-aspects/${spring30.version}</bundle>
-    </feature>
-
-    <feature name="spring-dm" description="Spring DM support" version="${spring.osgi.version}" resolver="(obr)">
-        <feature version="[2.5.6,4)">spring</feature>
-        <bundle dependency="true" start-level="30">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.cglib/${cglib.bundle.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework.osgi/spring-osgi-io/${spring.osgi.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework.osgi/spring-osgi-core/${spring.osgi.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework.osgi/spring-osgi-extender/${spring.osgi.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework.osgi/spring-osgi-annotation/${spring.osgi.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.deployer/org.apache.karaf.deployer.spring/${project.version}</bundle>
-    </feature>
-
-    <feature name="spring-dm-web" description="Spring DM Web Support" version="${spring.osgi.version}" resolver="(obr)">
-    	<feature version="${spring.osgi.version}">spring-dm</feature>
-    	<feature version="[2.5.6,4)">spring-web</feature>
-    	<feature version="${http.feature.version}">http</feature>
-		<bundle start-level="30">mvn:org.springframework.osgi/spring-osgi-web/${spring.osgi.version}</bundle>
-    </feature>
-
-    <feature name="spring-instrument" description="Spring Instrument support" version="${spring30.version}" resolver="(obr)">
-        <feature version="${spring30.version}">spring</feature>
-        <bundle start-level="30">mvn:org.springframework/spring-instrument/${spring30.version}</bundle>
-    </feature>
-
-    <feature name="spring-jdbc" description="Spring JDBC support" version="${spring30.version}" resolver="(obr)">
-        <feature version="${spring30.version}">spring-tx</feature>
-        <bundle start-level="30">mvn:org.springframework/spring-jdbc/${spring30.version}</bundle>
-    </feature>
-
-    <feature name="spring-jms" description="Spring JMS support" version="${spring30.version}" resolver="(obr)">
-        <feature version="${spring30.version}">spring-web</feature>
-        <bundle start-level="10">mvn:org.apache.geronimo.specs/geronimo-jta_1.1_spec/${geronimo.jta-spec.version}</bundle>
-        <bundle start-level="10">mvn:org.apache.geronimo.specs/geronimo-jms_1.1_spec/${geronimo.jms-spec.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-jms/${spring30.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-tx/${spring30.version}</bundle>
-    </feature>
-
-    <feature name="spring-struts" description="Spring Struts support" version="${spring30.version}" resolver="(obr)">
-        <feature version="${spring30.version}">spring-web</feature>
-        <feature>war</feature>
-        <bundle dependency="true" start-level="30">mvn:commons-collections/commons-collections/${commons-collections.version}</bundle>
-        <bundle dependency="true" start-level="30">mvn:commons-beanutils/commons-beanutils/${commons-beanutils.version}</bundle>
-        <bundle dependency="true" start-level="30">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.struts/${struts.bundle.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-struts/${spring30.version}</bundle>
-    </feature>
-
-    <feature name="spring-test" description="Spring Test support" version="${spring30.version}" resolver="(obr)">
-        <feature version="${spring30.version}">spring</feature>
-        <bundle start-level="30">mvn:org.springframework/spring-test/${spring30.version}</bundle>
-    </feature>
-
-    <feature name="spring-orm" description="Spring ORM support" version="${spring30.version}" resolver="(obr)">
-        <feature version="${spring30.version}">spring-jdbc</feature>
-        <bundle start-level="30">mvn:org.springframework/spring-orm/${spring30.version}</bundle>
-    </feature>
-
-    <feature name="spring-oxm" description="Spring OXM support" version="${spring30.version}" resolver="(obr)">
-        <feature version="${spring30.version}">spring</feature>
-        <bundle start-level="30">mvn:org.springframework/spring-oxm/${spring30.version}</bundle>
-    </feature>
-
-    <feature name="spring-tx" description="Spring Transaction (TX) support" version="${spring30.version}" resolver="(obr)">
-        <feature version="${spring30.version}">spring</feature>
-        <bundle start-level="30">mvn:org.springframework/spring-tx/${spring30.version}</bundle>
-    </feature>
-
-    <feature name="spring-web" description="Spring Web support" version="${spring30.version}" resolver="(obr)">
-    	<feature version="${spring30.version}">spring</feature>
-    	<feature version="${http.feature.version}">http</feature>
-    	<bundle start-level="30">mvn:org.springframework/spring-web/${spring30.version}</bundle>
-		<bundle start-level="30">mvn:org.springframework/spring-webmvc/${spring30.version}</bundle>
-    </feature>
-
-    <feature name="spring-web-portlet" description="Spring Web Portlet support" version="${spring30.version}" resolver="(obr)">
-        <feature version="${spring30.version}">spring-web</feature>
-        <bundle dependency="true" start-level="30">mvn:javax.portlet/portlet-api/${portlet-api.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-webmvc-portlet/${spring30.version}</bundle>
-    </feature>
-
-    <!-- Spring 3.1 support -->
-
-    <feature name="spring" description="Spring 3.1.x support" version="${spring31.version}" resolver="(obr)">
-        <bundle dependency="true" start-level="30">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.aopalliance/${aopalliance.bundle.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-core/${spring31.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-asm/${spring31.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-expression/${spring31.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-beans/${spring31.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-aop/${spring31.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-context/${spring31.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-context-support/${spring31.version}</bundle>
-    </feature>
-
-    <feature name="spring-aspects" description="Spring 3.1 AOP support" version="${spring31.version}" resolver="(obr)">
-        <feature version="${spring31.version}">spring</feature>
-        <bundle start-level="30">mvn:org.springframework/spring-aspects/${spring31.version}</bundle>
-    </feature>
-
-    <feature name="spring-instrument" description="Spring 3.1 Instrument support" version="${spring31.version}" resolver="(obr)">
-        <feature version="${spring31.version}">spring</feature>
-        <bundle start-level="30">mvn:org.springframework/spring-instrument/${spring31.version}</bundle>
-    </feature>
-
-    <feature name="spring-jdbc" description="Spring 3.1 JDBC support" version="${spring31.version}" resolver="(obr)">
-        <feature version="${spring31.version}">spring-tx</feature>
-        <bundle start-level="30">mvn:org.springframework/spring-jdbc/${spring31.version}</bundle>
-    </feature>
-
-    <feature name="spring-jms" description="Spring 3.1 JMS support" version="${spring31.version}" resolver="(obr)">
-        <feature version="${spring31.version}">spring-web</feature>
-        <bundle start-level="10">mvn:org.apache.geronimo.specs/geronimo-jta_1.1_spec/${geronimo.jta-spec.version}</bundle>
-        <bundle start-level="10">mvn:org.apache.geronimo.specs/geronimo-jms_1.1_spec/${geronimo.jms-spec.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-jms/${spring31.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-tx/${spring31.version}</bundle>
-    </feature>
-
-    <feature name="spring-struts" description="Spring 3.1 Struts support" version="${spring31.version}" resolver="(obr)">
-        <feature version="${spring31.version}">spring-web</feature>
-        <feature>war</feature>
-        <bundle dependency="true" start-level="30">mvn:commons-collections/commons-collections/${commons-collections.version}</bundle>
-        <bundle dependency="true" start-level="30">mvn:commons-beanutils/commons-beanutils/${commons-beanutils.version}</bundle>
-        <bundle dependency="true" start-level="30">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.struts/${struts.bundle.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-struts/${spring31.version}</bundle>
-    </feature>
-
-    <feature name="spring-test" description="Spring 3.1 Test support" version="${spring31.version}" resolver="(obr)">
-        <feature version="${spring31.version}">spring</feature>
-        <bundle start-level="30">mvn:org.springframework/spring-test/${spring31.version}</bundle>
-    </feature>
-
-    <feature name="spring-orm" description="Spring 3.1 ORM support" version="${spring31.version}" resolver="(obr)">
-        <feature version="${spring31.version}">spring-jdbc</feature>
-        <bundle start-level="30">mvn:org.springframework/spring-orm/${spring31.version}</bundle>
-    </feature>
-
-    <feature name="spring-oxm" description="Spring 3.1 OXM support" version="${spring31.version}" resolver="(obr)">
-        <feature version="${spring31.version}">spring</feature>
-        <bundle start-level="30">mvn:org.springframework/spring-oxm/${spring31.version}</bundle>
-    </feature>
-
-    <feature name="spring-tx" description="Spring 3.1 Transaction (TX) support" version="${spring31.version}" resolver="(obr)">
-        <feature version="${spring31.version}">spring</feature>
-        <bundle start-level="30">mvn:org.springframework/spring-tx/${spring31.version}</bundle>
-    </feature>
-
-    <feature name="spring-web" description="Spring 3.1 Web support" version="${spring31.version}" resolver="(obr)">
-        <feature version="${spring31.version}">spring</feature>
-        <feature version="${http.feature.version}">http</feature>
-        <bundle start-level="30">mvn:org.springframework/spring-web/${spring31.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-webmvc/${spring31.version}</bundle>
-    </feature>
-
-    <feature name="spring-web-portlet" description="Spring 3.1 Web Portlet support" version="${spring31.version}" resolver="(obr)">
-        <feature version="${spring31.version}">spring-web</feature>
-        <bundle dependency="true" start-level="30">mvn:javax.portlet/portlet-api/${portlet-api.version}</bundle>
-        <bundle start-level="30">mvn:org.springframework/spring-webmvc-portlet/${spring31.version}</bundle>
-    </feature>
-
-    <feature name="wrapper" description="Provide OS integration" version="${project.version}">
-        <bundle>mvn:org.apache.karaf.shell/org.apache.karaf.shell.wrapper/${project.version}</bundle>
-    </feature>
-
-    <feature name="obr" description="Provide OSGi Bundle Repository (OBR) support" version="${project.version}">
-        <bundle start-level="30">mvn:org.apache.felix/org.osgi.service.obr/${felix.obr.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.felix/org.apache.felix.bundlerepository/${felix.bundlerepository.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.shell/org.apache.karaf.shell.obr/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.features/org.apache.karaf.features.obr/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.management.mbeans/org.apache.karaf.management.mbeans.obr/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.ops4j.pax.url/pax-url-obr/${pax.url.version}</bundle>
-    </feature>
-
-    <feature name="config" description="Provide OSGi ConfigAdmin support" version="${project.version}">
-        <bundle start-level="30">mvn:org.apache.karaf.shell/org.apache.karaf.shell.config/${project.version}</bundle>
-    </feature>
-
-    <feature name="jetty" description="Provide Jetty engine support" version="${jetty.version}" resolver="(obr)">
-        <bundle dependency="true" start-level="30">mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.activation-api-1.1/${servicemix.specs.version}</bundle>
-        <bundle dependency="true" start-level="30">mvn:org.apache.geronimo.specs/geronimo-servlet_2.5_spec/${geronimo.servlet.version}</bundle>
-        <bundle dependency="true" start-level="30">mvn:javax.mail/mail/${javax.mail.version}</bundle>
-        <bundle dependency="true" start-level="30">mvn:org.apache.geronimo.specs/geronimo-jta_1.1_spec/${geronimo.jta-spec.version}</bundle>
-        <bundle start-level="30">mvn:org.eclipse.jetty/jetty-util/${jetty.version}</bundle>
-        <bundle start-level="30">mvn:org.eclipse.jetty/jetty-io/${jetty.version}</bundle>
-        <bundle start-level="30">mvn:org.eclipse.jetty/jetty-http/${jetty.version}</bundle>
-        <bundle start-level="30">mvn:org.eclipse.jetty/jetty-client/${jetty.version}</bundle>
-        <bundle start-level="30">mvn:org.eclipse.jetty/jetty-continuation/${jetty.version}</bundle>
-        <bundle start-level="30">mvn:org.eclipse.jetty/jetty-jmx/${jetty.version}</bundle>
-        <bundle start-level="30">mvn:org.eclipse.jetty/jetty-server/${jetty.version}</bundle>
-        <bundle start-level="30">mvn:org.eclipse.jetty/jetty-security/${jetty.version}</bundle>
-        <bundle start-level="30">mvn:org.eclipse.jetty/jetty-servlet/${jetty.version}</bundle>
-        <bundle start-level="30">mvn:org.eclipse.jetty/jetty-servlets/${jetty.version}</bundle>
-        <bundle start-level="30">mvn:org.eclipse.jetty/jetty-xml/${jetty.version}</bundle>
-        <bundle start-level="30">mvn:org.eclipse.jetty/jetty-webapp/${jetty.version}</bundle>
-        <bundle start-level="30">mvn:org.eclipse.jetty/jetty-jndi/${jetty.version}</bundle>
-        <bundle start-level="30">mvn:org.eclipse.jetty/jetty-plus/${jetty.version}</bundle>
-        <bundle start-level="30">mvn:org.eclipse.jetty/jetty-websocket/${jetty.version}</bundle>
-    </feature>
-
-    <feature name="http" description="Implementation of the OSGi HTTP service" version="${project.version}" resolver="(obr)">
-        <configfile finalname="/etc/jetty.xml">mvn:org.apache.karaf/apache-karaf/${project.version}/xml/jettyconfig</configfile>
-        <config name="org.ops4j.pax.web">
-            org.osgi.service.http.port=8181
-            javax.servlet.context.tempdir=${karaf.data}/pax-web-jsp
-            org.ops4j.pax.web.config.file=${karaf.base}/etc/jetty.xml
-        </config>
-        <feature version="[7.0,8.0)">jetty</feature>
-    	<bundle start-level="30">mvn:org.ops4j.pax.web/pax-web-api/${pax.web.version}</bundle>
-        <bundle start-level="30">mvn:org.ops4j.pax.web/pax-web-spi/${pax.web.version}</bundle>
-        <bundle start-level="30">mvn:org.ops4j.pax.web/pax-web-runtime/${pax.web.version}</bundle>
-        <bundle start-level="30">mvn:org.ops4j.pax.web/pax-web-jetty/${pax.web.version}</bundle>
-    </feature>
-
-    <feature name="http-whiteboard" description="Provide HTTP Whiteboard pattern support" version="${project.version}" resolver="(obr)">
-        <feature version="${http.feature.version}">http</feature>
-        <bundle start-level="30">mvn:org.ops4j.pax.web/pax-web-extender-whiteboard/${pax.web.version}</bundle>
-    </feature>
-
-    <feature name="war" description="Turn Karaf as a full WebContainer" version="${project.version}" resolver="(obr)">
-        <config name="org.ops4j.pax.url.war">
-            org.ops4j.pax.url.war.importPaxLoggingPackages=true
-        </config>
-        <feature>http-whiteboard</feature>
-        <bundle start-level='30'>mvn:org.apache.karaf.shell/org.apache.karaf.shell.web/${project.version}</bundle>
-        <bundle start-level='30'>mvn:org.apache.karaf.management.mbeans/org.apache.karaf.management.mbeans.web/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.ops4j.pax.web/pax-web-jsp/${pax.web.version}</bundle>
-        <bundle start-level="30">mvn:org.ops4j.pax.web/pax-web-extender-war/${pax.web.version}</bundle>
-        <bundle start-level="30">mvn:org.ops4j.pax.web/pax-web-deployer/${pax.web.version}</bundle>
-        <bundle start-level="30">mvn:org.ops4j.pax.url/pax-url-war/${pax.url.version}</bundle>
-    </feature>
-
-    <feature name="kar" description="Provide KAR (KARaf archive) support" version="${project.version}">
-        <bundle start-level="30">mvn:org.apache.karaf.deployer/org.apache.karaf.deployer.kar/${project.version}</bundle>
-    </feature>
-
-    <feature name="webconsole-base" description="Base support of the Karaf WebConsole" version="${project.version}">
-        <config name="org.apache.karaf.webconsole">
-            realm=karaf
-            role=${karaf.admin.role}
-        </config>
-        <feature version="${http.feature.version}">http</feature>
-        <bundle start-level="30">mvn:org.apache.felix/org.apache.felix.metatype/${felix.metatype.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.webconsole/org.apache.karaf.webconsole.branding/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.webconsole/org.apache.karaf.webconsole.console/${project.version}</bundle>
-    </feature>
-
-    <feature name="webconsole" description="Karaf WebConsole for administration and monitoring" version="${project.version}">
-        <feature version="${project.version}">webconsole-base</feature>
-        <bundle start-level="30">mvn:org.apache.karaf.webconsole/org.apache.karaf.webconsole.admin/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.webconsole/org.apache.karaf.webconsole.features/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.webconsole/org.apache.karaf.webconsole.gogo/${project.version}</bundle>
-		<bundle start-level="30">mvn:org.apache.felix/org.apache.felix.webconsole.plugins.event/${felix.eventadmin-plugin.version}</bundle>
-    </feature>
-
-    <feature name="ssh" description="Provide a SSHd server on Karaf" version="${project.version}">
-        <config name="org.apache.karaf.shell">
-            sshPort=8101
-            sshHost=0.0.0.0
-            sshRealm=karaf
-            hostKey=${karaf.base}/etc/host.key
-        </config>
-        <bundle start-level="30" dependency='true'>mvn:org.apache.mina/mina-core/${mina.version}</bundle>
-        <bundle start-level="30" dependency='true'>mvn:org.apache.sshd/sshd-core/${sshd.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.shell/org.apache.karaf.shell.ssh/${project.version}</bundle>
-    </feature>
-
-    <feature name="management" description="Provide a JMX MBeanServer and a set of MBeans in Karaf" version="${project.version}">
-        <bundle start-level="30">mvn:org.apache.karaf.management/org.apache.karaf.management.server/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.jmx/org.apache.aries.jmx.api/${aries.jmx.api.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.jmx/org.apache.aries.jmx.core/${aries.jmx.core.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.jmx/org.apache.aries.jmx.blueprint.api/${aries.jmx.blueprint.api.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.aries.jmx/org.apache.aries.jmx.blueprint.core/${aries.jmx.blueprint.core.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.management.mbeans/org.apache.karaf.management.mbeans.system/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.management.mbeans/org.apache.karaf.management.mbeans.bundles/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.management.mbeans/org.apache.karaf.management.mbeans.services/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.management.mbeans/org.apache.karaf.management.mbeans.config/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.management.mbeans/org.apache.karaf.management.mbeans.log/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.management.mbeans/org.apache.karaf.management.mbeans.packages/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.management.mbeans/org.apache.karaf.management.mbeans.dev/${project.version}</bundle>
-    </feature>
-
-    <feature name="eventadmin" description="OSGi Event Admin service specification for event-based communication" version="${project.version}">
-		<bundle start-level='30'>mvn:org.apache.felix/org.apache.felix.eventadmin/${felix.eventadmin.version}</bundle>
-    </feature>
-
-    <feature name="jasypt-encryption" description="Advanced encryption support for Karaf security" version="${project.version}" resolver="(obr)">
-        <bundle dependency="true" start-level="30">mvn:commons-codec/commons-codec/${commons-codec.version}</bundle>
-        <bundle dependency='true' start-level="30">mvn:commons-lang/commons-lang/${commons-lang.version}</bundle>
-        <bundle dependency='true' start-level="30">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jasypt/${jasypt.bundle.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.jaas/org.apache.karaf.jaas.jasypt/${project.version}</bundle>
-    </feature>
-
-    <feature name="scr" description="Declarative Service support" version="${project.version}" resolver="(obr)">
-        <feature>eventadmin</feature>
-        <bundle dependency="true" start-level="30">mvn:org.apache.felix/org.apache.felix.metatype/${felix.metatype.version}</bundle>
-        <bundle dependency="true" start-level="30">mvn:org.apache.felix/org.apache.felix.scr/${felix.scr.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.shell/org.apache.karaf.shell.scr/${project.version}</bundle>
-        <bundle start-level="30">mvn:org.apache.karaf.management.mbeans/org.apache.karaf.management.mbeans.scr/${project.version}</bundle>
-    </feature>
-</features>
diff --git a/karaf-2.3.x/assemblies/pom.xml b/karaf-2.3.x/assemblies/pom.xml
deleted file mode 100644
index 3c8a428..0000000
--- a/karaf-2.3.x/assemblies/pom.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>karaf</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.assemblies</groupId>
-    <artifactId>assemblies</artifactId>
-    <packaging>pom</packaging>
-    <name>Apache Karaf :: Assemblies</name>
-
-    <modules>
-        <module>features</module>
-        <module>apache-karaf</module>
-    </modules>
-
-</project>
diff --git a/karaf-2.3.x/client/NOTICE b/karaf-2.3.x/client/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/client/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/client/pom.xml b/karaf-2.3.x/client/pom.xml
deleted file mode 100644
index 1053929..0000000
--- a/karaf-2.3.x/client/pom.xml
+++ /dev/null
@@ -1,134 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>karaf</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.client</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Client</name>
-    <description>Karaf client to connect remotely to a running Karaf instance.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.sshd</groupId>
-            <artifactId>sshd-core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-simple</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <_donotcopy>(CVS|.svn|config.properties)</_donotcopy>
-                        <Main-Class>org.apache.karaf.client.Main</Main-Class>
-                        <Bundle-Name>Apache Karaf Shell Client</Bundle-Name>
-                        <Bundle-Description>Shell client bundle for Apache Karaf.</Bundle-Description>
-                        <Private-Package>
-                            org.apache.karaf.client;-split-package:=merge-first,
-                            org.slf4j;-split-package:=merge-first,
-                            org.slf4j.spi;-split-package:=merge-first,
-                            org.slf4j.helpers;-split-package:=merge-first,
-                            org.slf4j.impl;-split-package:=merge-first,
-                            META-INF;-split-package:=merge-first
-                        </Private-Package>
-                        <Include-Resource>
-                            ../shell/console/src/main/resources/karaf.key,
-                            {maven-resources}
-                        </Include-Resource>
-                        <Import-Package>!*</Import-Package>
-                    </instructions>
-                    <unpackBundle>true</unpackBundle>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-shade-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>shade</goal>
-                        </goals>
-                        <configuration>
-                            <artifactSet>
-                                <includes>
-                                    <include>${project.groupId}:${project.artifactId}</include>
-                                    <include>org.slf4j:slf4j-api</include>
-                                    <include>org.slf4j:slf4j-nop</include>
-                                </includes>
-                            </artifactSet>
-                            <filters>
-                                <filter>
-                                    <artifact>org.slf4j:slf4j-api</artifact>
-                                    <excludes>
-                                        <exclude>org/slf4j/**</exclude>
-                                    </excludes>
-                                </filter>
-                                <filter>
-                                    <artifact>org.slf4j:slf4j-nop</artifact>
-                                    <excludes>
-                                        <exclude>org/slf4j/**</exclude>
-                                    </excludes>
-                                </filter>
-                            </filters>
-                            <createSourcesJar>${createSourcesJar}</createSourcesJar>
-                            <promoteTransitiveDependencies>true</promoteTransitiveDependencies>
-                            <createDependencyReducedPom>true</createDependencyReducedPom>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/client/src/main/java/org/apache/karaf/client/Main.java b/karaf-2.3.x/client/src/main/java/org/apache/karaf/client/Main.java
deleted file mode 100644
index 5fe8574..0000000
--- a/karaf-2.3.x/client/src/main/java/org/apache/karaf/client/Main.java
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.client;
-
-import java.io.*;
-import java.net.URL;
-import java.nio.charset.Charset;
-import java.security.KeyPair;
-import java.util.Locale;
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.BlockingQueue;
-
-import jline.Terminal;
-import org.apache.karaf.shell.console.jline.TerminalFactory;
-import org.apache.sshd.ClientChannel;
-import org.apache.sshd.ClientSession;
-import org.apache.sshd.SshClient;
-import org.apache.sshd.agent.SshAgent;
-import org.apache.sshd.agent.local.AgentImpl;
-import org.apache.sshd.agent.local.LocalAgentFactory;
-import org.apache.sshd.client.channel.ChannelShell;
-import org.apache.sshd.client.future.ConnectFuture;
-import org.apache.sshd.common.RuntimeSshException;
-import org.fusesource.jansi.AnsiConsole;
-import org.slf4j.impl.SimpleLogger;
-
-/**
- * A very simple
- */
-public class Main {
-
-    public static void main(String[] args) throws Exception {
-        String host = "localhost";
-        int port = 8101;
-        String user = "karaf";
-        String password = null;
-        StringBuilder sb = new StringBuilder();
-        int level = 1;
-        int retryAttempts = 0;
-        int retryDelay = 2;
-        boolean batch = false;
-        String file = null;
-
-        for (int i = 0; i < args.length; i++) {
-            if (args[i].charAt(0) == '-') {
-                if (args[i].equals("-a")) {
-                    port = Integer.parseInt(args[++i]);
-                } else if (args[i].equals("-h")) {
-                    host = args[++i];
-                } else if (args[i].equals("-u")) {
-                    user = args[++i];
-                } else if (args[i].equals("-v")) {
-                    level++;
-                } else if (args[i].equals("-r")) {
-                    retryAttempts = Integer.parseInt(args[++i]);
-                } else if (args[i].equals("-p")) {
-                    password = args[++i];
-                } else if (args[i].equals("-d")) {
-                    retryDelay = Integer.parseInt(args[++i]);
-                } else if (args[i].equals("-b")) {
-                    batch = true;
-                } else if (args[i].equals("-f")) {
-                    file = args[++i];
-                } else if (args[i].equals("--help")) {
-                    System.out.println("Apache Karaf client");
-                    System.out.println("  -a [port]     specify the port to connect to");
-                    System.out.println("  -h [host]     specify the host to connect to");
-                    System.out.println("  -u [user]     specify the user name");
-                    System.out.println("  -p [password] specify the password (optional, if not provided, the password is prompted)");
-                    System.out.println("                NB: this option is deprecated and will be removed in next Karaf version");
-                    System.out.println("  --help        shows this help message");
-                    System.out.println("  -v            raise verbosity");
-                    System.out.println("  -r [attempts] retry connection establishment (up to attempts times)");
-                    System.out.println("  -d [delay]    intra-retry delay (defaults to 2 seconds)");
-                    System.out.println("  -b            batch mode, specify multiple commands via standard input");
-                    System.out.println("  -f [file]    read commands from the specified file");
-                    System.out.println("  [commands]    commands to run");
-                    System.out.println("If no commands are specified, the client will be put in an interactive mode");
-                    System.exit(0);
-                } else {
-                    System.err.println("Unknown option: " + args[i]);
-                    System.err.println("Run with --help for usage");
-                    System.exit(1);
-                }
-            } else {
-                sb.append(args[i]);
-                sb.append(' ');
-            }
-        }
-        SimpleLogger.setLevel(level);
-
-        if (file != null) {
-            Reader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
-            try {
-                sb.setLength(0);
-                for (int c = reader.read(); c >= 0; c = reader.read()) {
-                    sb.append((char) c);
-                }
-            } finally {
-                reader.close();
-            }
-        } else if (batch) {
-            // read all stdin
-            Reader reader = new BufferedReader(new InputStreamReader(System.in));
-            sb.setLength(0);
-            for (int c = reader.read(); c >= 0; c = reader.read()) {
-                sb.append((char) c);
-            }
-        }
-
-        SshClient client = null;
-        Terminal terminal = null;
-        SshAgent agent = null;
-        try {
-            agent = startAgent(user);
-            client = SshClient.setUpDefaultClient();
-            client.setAgentFactory(new LocalAgentFactory(agent));
-            client.getProperties().put(SshAgent.SSH_AUTHSOCKET_ENV_NAME, "local");
-            client.start();
-            int retries = 0;
-            ClientSession session = null;
-            do {
-                ConnectFuture future = client.connect(host, port);
-                future.await();
-                try { 
-                    session = future.getSession();
-                } catch (RuntimeSshException ex) {
-                    if (retries++ < retryAttempts) {
-                        Thread.sleep(retryDelay * 1000);
-                        System.out.println("retrying (attempt " + retries + ") ...");
-                    } else {
-                        throw ex;
-                    }
-                }
-            } while (session == null);
-            if (!session.authAgent(user).await().isSuccess()) {
-                if (password == null) {
-                    Console console = System.console();
-                    if (console != null) {
-                        char[] readPassword = console.readPassword("Password: ");
-                        if (readPassword != null) {
-                            password = new String(readPassword);
-                        }
-                    } else {
-                        throw new Exception("Unable to prompt password: could not get system console");
-                    }
-                }
-                if (!session.authPassword(user, password).await().isSuccess()) {
-                    throw new Exception("Authentication failure");
-                }
-            }
-            ClientChannel channel;
-			if (sb.length() > 0) {
-                channel = session.createChannel("exec", sb.append("\n").toString());
-                channel.setIn(new ByteArrayInputStream(new byte[0]));
-			} else {
-                terminal = new TerminalFactory().getTerminal();
- 				channel = session.createChannel("shell");
-                ConsoleInputStream in = new ConsoleInputStream(terminal.wrapInIfNeeded(System.in));
-                new Thread(in).start();
-                channel.setIn(in);
-                ((ChannelShell) channel).setupSensibleDefaultPty();
-                ((ChannelShell) channel).setAgentForwarding(true);
-                String ctype = System.getenv("LC_CTYPE");
-                if (ctype == null) {
-                    ctype = Locale.getDefault().toString() + "."
-                                + System.getProperty("input.encoding", Charset.defaultCharset().name());
-                }
-                ((ChannelShell) channel).setEnv("LC_CTYPE", ctype);
-            }
-            channel.setOut(AnsiConsole.wrapOutputStream(System.out));
-            channel.setErr(AnsiConsole.wrapOutputStream(System.err));
-            channel.open();
-            channel.waitFor(ClientChannel.CLOSED, 0);
-        } catch (Throwable t) {
-            if (level > 1) {
-                t.printStackTrace();
-            } else {
-                System.err.println(t.getMessage());
-            }
-            System.exit(1);
-        } finally {
-            try {
-                client.stop();
-            } catch (Throwable t) { }
-            try {
-                if (terminal != null) {
-                    terminal.restore();
-                }
-            } catch (Throwable t) { }
-        }
-        System.exit(0);
-    }
-
-    protected static SshAgent startAgent(String user) {
-        try {
-            SshAgent local = new AgentImpl();
-            URL url = Main.class.getClassLoader().getResource("karaf.key");
-            InputStream is = url.openStream();
-            ObjectInputStream r = new ObjectInputStream(is);
-            KeyPair keyPair = (KeyPair) r.readObject();
-            local.addIdentity(keyPair, "karaf");
-            return local;
-        } catch (Throwable e) {
-            System.err.println("Error starting ssh agent for: " + e.getMessage());
-            return null;
-        }
-    }
-
-    public static String readLine(String msg) throws IOException {
-        StringBuffer sb = new StringBuffer();
-        System.err.print(msg);
-        System.err.flush();
-        for (;;) {
-            int c = System.in.read();
-            if (c < 0) {
-                return null;
-            }
-            System.err.print((char) c);
-            if (c == '\r' || c == '\n') {
-                break;
-            }
-            sb.append((char) c);
-        }
-        return sb.toString();
-    }
-
-    private static class ConsoleInputStream extends InputStream implements Runnable {
-
-        private InputStream in;
-        private boolean eof = false;
-        private final BlockingQueue<Integer> queue = new ArrayBlockingQueue<Integer>(1024);
-
-        public ConsoleInputStream(InputStream in) {
-            this.in = in;
-        }
-
-        private int read(boolean wait) throws IOException
-        {
-            if (eof && queue.isEmpty()) {
-                return -1;
-            }
-            Integer i;
-            if (wait) {
-                try {
-                    i = queue.take();
-                } catch (InterruptedException e) {
-                    throw new InterruptedIOException();
-                }
-            } else {
-                i = queue.poll();
-            }
-            if (i == null) {
-                return -1;
-            }
-            return i;
-        }
-
-        @Override
-        public int read() throws IOException
-        {
-            return read(true);
-        }
-
-        @Override
-        public int read(byte b[], int off, int len) throws IOException
-        {
-            if (b == null) {
-                throw new NullPointerException();
-            } else if (off < 0 || len < 0 || len > b.length - off) {
-                throw new IndexOutOfBoundsException();
-            } else if (len == 0) {
-                return 0;
-            }
-
-            int nb = 1;
-            int i = read(true);
-            if (i < 0) {
-                return -1;
-            }
-            b[off++] = (byte) i;
-            while (nb < len) {
-                i = read(false);
-                if (i < 0) {
-                    return nb;
-                }
-                b[off++] = (byte) i;
-                nb++;
-            }
-            return nb;
-        }
-
-        @Override
-        public int available() throws IOException {
-            return queue.size();
-        }
-
-        public void run() {
-            try {
-                while (true) {
-                    try {
-                        int c = in.read();
-                        if (c == -1) {
-                            return;
-                        }
-                        queue.put(c);
-                    } catch (Throwable t) {
-                        return;
-                    }
-                }
-            } finally {
-                eof = true;
-                try {
-                    queue.put(-1);
-                } catch (InterruptedException e) {
-                }
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/client/src/main/java/org/slf4j/impl/SimpleLogger.java b/karaf-2.3.x/client/src/main/java/org/slf4j/impl/SimpleLogger.java
deleted file mode 100644
index c8126c4..0000000
--- a/karaf-2.3.x/client/src/main/java/org/slf4j/impl/SimpleLogger.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * 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.
- */
-package org.slf4j.impl;
-
-import org.slf4j.helpers.MarkerIgnoringBase;
-import org.slf4j.helpers.MessageFormatter;
-
-/**
- * A simple logger that can be controlled from the ssh client
- */
-public class SimpleLogger extends MarkerIgnoringBase {
-
-    public static final int ERROR = 0;
-    public static final int WARN = 1;
-    public static final int INFO = 2;
-    public static final int DEBUG = 3;
-    public static final int TRACE = 4;
-
-    private static int level = 0;
-    private static long startTime = System.currentTimeMillis();
-    public static final String LINE_SEPARATOR = System.getProperty("line.separator");
-
-    public static int getLevel() {
-        return level;
-    }
-
-    public static void setLevel(int level) {
-        SimpleLogger.level = level;
-    }
-
-    private String name;
-
-    SimpleLogger(String name) {
-        this.name = name;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public boolean isTraceEnabled() {
-        return isLogEnabled(TRACE);
-    }
-
-    public void trace(String msg) {
-        log(TRACE, msg);
-    }
-
-    public void trace(String format, Object arg) {
-        log(TRACE, format, arg);
-    }
-
-    public void trace(String format, Object arg1, Object arg2) {
-        log(TRACE, format, arg1, arg2);
-    }
-
-    public void trace(String format, Object[] argArray) {
-        log(TRACE, format, argArray);
-    }
-
-    public void trace(String msg, Throwable t) {
-        log(TRACE, msg, t);
-    }
-
-    public boolean isDebugEnabled() {
-        return isLogEnabled(DEBUG);
-    }
-
-    public void debug(String msg) {
-        log(DEBUG, msg);
-    }
-
-    public void debug(String format, Object arg) {
-		log(DEBUG, format, arg);
-    }
-
-    public void debug(String format, Object arg1, Object arg2) {
-        log(DEBUG, format, arg1, arg2);
-    }
-
-    public void debug(String format, Object[] argArray) {
-		log(DEBUG, format, argArray, null);
-    }
-
-    public void debug(String msg, Throwable t) {
-        log(DEBUG, msg, t);
-    }
-
-    public boolean isInfoEnabled() {
-        return isLogEnabled(INFO);
-    }
-
-    public void info(String msg) {
-		log(INFO, msg);
-    }
-
-    public void info(String format, Object arg) {
-		log(INFO, format, arg);
-    }
-
-    public void info(String format, Object arg1, Object arg2) {
-		log(INFO, format, arg1, arg2);
-    }
-
-    public void info(String format, Object[] argArray) {
-		log(INFO, format, argArray);
-    }
-
-    public void info(String msg, Throwable t) {
-		log(INFO, msg, t);
-    }
-
-    public boolean isWarnEnabled() {
-        return isLogEnabled(WARN);
-    }
-
-    public void warn(String msg) {
-		log(WARN, msg);
-    }
-
-    public void warn(String format, Object arg) {
-        log(WARN, format, arg);
-    }
-
-    public void warn(String format, Object arg1, Object arg2) {
-        log(WARN, format, arg1, arg2);
-    }
-
-    public void warn(String format, Object[] argArray) {
- 		log(WARN, format, argArray);
-    }
-
-    public void warn(String msg, Throwable t) {
- 		log(WARN, msg, t);
-    }
-
-    public boolean isErrorEnabled() {
-        return isLogEnabled(ERROR);
-    }
-
-    public void error(String msg) {
-        log(ERROR, msg);
-    }
-
-    public void error(String format, Object arg) {
-		log(ERROR, format, arg);
-    }
-
-    public void error(String format, Object arg1, Object arg2) {
-        log(ERROR, format, arg1, arg2);
-    }
-
-    public void error(String format, Object[] argArray) {
-		log(ERROR, format, argArray);
-    }
-
-    public void error(String msg, Throwable t) {
-		log(ERROR, msg, t);
-    }
-
-	protected boolean isLogEnabled(int level) {
-		return SimpleLogger.level >= level;
-	}
-
-    protected void log(int level, String msg) {
-        if (isLogEnabled(level)) {
-            doLog(level, msg, null);
-        }
-    }
-
-    protected void log(int level, String format, Object arg) {
-        if (isLogEnabled(level)) {
-            String msg = MessageFormatter.format(format, arg).getMessage();
-            doLog(level, msg, null);
-        }
-    }
-
-    protected void log(int level, String format, Object arg1, Object arg2) {
-        if (isLogEnabled(level)) {
-            String msg = MessageFormatter.format(format, arg1, arg2).getMessage();
-            doLog(level, msg, null);
-        }
-    }
-
-    protected void log(int level, String format, Object[] args) {
-        if (isLogEnabled(level)) {
-            String msg = MessageFormatter.format(format, args).getMessage();
-            doLog(level, msg, null);
-        }
-    }
-
-	protected void log(int level, String msg, Throwable t) {
-        if (isLogEnabled(level)) {
-            doLog(level, msg, t);
-        }
-	}
-
-    protected void doLog(int level, String msg, Throwable t) {
-        StringBuffer buf = new StringBuffer();
-        long millis = System.currentTimeMillis();
-        buf.append(millis - startTime);
-        buf.append(" [");
-        buf.append(Thread.currentThread().getName());
-        buf.append("] ");
-        switch (level) {
-            case TRACE:
-                buf.append("TRACE"); break;
-            case DEBUG:
-                buf.append("DEBUG"); break;
-            case INFO:
-                buf.append("INFO"); break;
-            case WARN:
-                buf.append("WARN"); break;
-            case ERROR:
-                buf.append("ERROR"); break;
-        }
-        buf.append(" ");
-        buf.append(name);
-        buf.append(" - ");
-        buf.append(msg);
-        buf.append(LINE_SEPARATOR);
-        System.err.print(buf.toString());
-        if (t != null) {
-            t.printStackTrace(System.err);
-        }
-        System.err.flush();
-    }
-}
diff --git a/karaf-2.3.x/client/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/client/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 17b5cb4..0000000
--- a/karaf-2.3.x/client/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,27 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    The Karaf client allows for connecting remotely to a running Karaf instance.
-
-    It acts as a SSH client and sends commands to the running Karaf instance. If no commands are provided, the Karaf
-    client displays the Karaf instance shell on which you can interact.
-
-    To start the Karaf client, you can use the following arguments:
-        \u001B[36m-a [port]     specify the port to connect to\u001B[0m
-        \u001B[36m-h [host]     specify the host to connect to\u001B[0m
-        \u001B[36m-u [user]     specify the user name\u001B[0m
-        \u001B[36m-p [password] specify the password\u001B[0m
-        \u001B[36m--help        show help\u001B[0m
-        \u001B[36m-v            raise verbosity\u001B[0m
-        \u001B[36m-r [attempts] retry connection establishment (up to attempts time)\u001B[0m
-        \u001B[36m-d [delay]    intra-retry delay (default is 2 secondes)\u001B[0m
-        \u001B[36m[commands]    commands to run\u001B[0m
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[31mUsing remote instances\u001B[0m section of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/client/src/main/resources/client.login.conf b/karaf-2.3.x/client/src/main/resources/client.login.conf
deleted file mode 100644
index 1e190f1..0000000
--- a/karaf-2.3.x/client/src/main/resources/client.login.conf
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * 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.
- */
-
-//
-// $Rev: 580717 $ $Date: 2007-09-30 14:47:55 +0200 (Sun, 30 Sep 2007) $
-//
-
-RshClient {
-    org.apache.geronimo.shell.remote.client.auth.RemoteLoginModule required;
-};
diff --git a/karaf-2.3.x/demos/branding/pom.xml b/karaf-2.3.x/demos/branding/pom.xml
deleted file mode 100644
index 163c9ec..0000000
--- a/karaf-2.3.x/demos/branding/pom.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.demos</groupId>
-        <artifactId>demos</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.demos.branding</artifactId>
-    <packaging>pom</packaging>
-    <name>Apache Karaf :: Demos :: Branding</name>
-
-    <modules>
-        <module>shell</module>
-    </modules>
-
-</project>
diff --git a/karaf-2.3.x/demos/branding/shell/NOTICE b/karaf-2.3.x/demos/branding/shell/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/demos/branding/shell/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/demos/branding/shell/README.txt b/karaf-2.3.x/demos/branding/shell/README.txt
deleted file mode 100644
index 0fb69ea..0000000
--- a/karaf-2.3.x/demos/branding/shell/README.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-/* 
- * 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.
- */
-
-BRANDING SHELL EXAMPLE
-======================
-
-Purpose
--------
-Demonstrate how to change the shell console branding.
-
-
-Prerequisites for Running this Example
---------------------------------------
-You must have the following installed on your machine:
-
-   - JDK 1.5 or higher.
-
-   - Apache Maven 2.0.9 or higher.
-
-
-Building and Deploying
-----------------------
-This example will produce a branding jar, containing a branding properties
-file which is used to generate the shell console branding.
-
-To build the demo branding type the following command:
-
-  mvn install
-
-To deploy the branding copy the resulting jar file to karaf/lib folder.
-
-  cp target/org.apache.karaf.demos.branding.shell-${version}.jar $KARAF_HOME/lib
-
-In order for Karaf to pick up the branding jar please edit the
-$KARAF_HOME/etc/custom.properties file to include the following:
-
-  org.osgi.framework.system.packages.extra = \
-    org.apache.karaf.branding; \
-    com.sun.org.apache.xalan.internal.xsltc.trax; \
-    com.sun.org.apache.xerces.internal.dom; \
-    com.sun.org.apache.xerces.internal.jaxp; \
-    com.sun.org.apache.xerces.internal.xni
-
-To see the new branding please restart Karaf:
-
-  cd $KARAF_HOME/bin
-  ./karaf
-
-The shell console should now display the content of the branding
-properties file.
-
-NOTES
-=====
-Most projects automate this process. One such project is Apache Servicemix
-NMR, see its branding and assembly poms for a guide line.
diff --git a/karaf-2.3.x/demos/branding/shell/pom.xml b/karaf-2.3.x/demos/branding/shell/pom.xml
deleted file mode 100644
index 3090f4d..0000000
--- a/karaf-2.3.x/demos/branding/shell/pom.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.demos</groupId>
-        <artifactId>org.apache.karaf.demos.branding</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.demos.branding.shell</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Demos :: Branding :: Shell</name>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
-                        <Import-Package>*</Import-Package>
-                        <Private-Package>!*</Private-Package>
-                        <Export-Package>
-                            org.apache.karaf.branding
-                        </Export-Package>
-                    </instructions> 
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project> 
diff --git a/karaf-2.3.x/demos/branding/shell/src/main/resources/org/apache/karaf/branding/branding.properties b/karaf-2.3.x/demos/branding/shell/src/main/resources/org/apache/karaf/branding/branding.properties
deleted file mode 100644
index 2f772ae..0000000
--- a/karaf-2.3.x/demos/branding/shell/src/main/resources/org/apache/karaf/branding/branding.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-welcome = \
-\n\
-\u001B[1m  Apache Karaf Re-Branding Demo\u001B[0m (${pom.version})\n\
-\n\
-Hit '\u001B[1m<tab>\u001B[0m' for a list of available commands\n\
-   and '\u001B[1m[cmd] --help\u001B[0m' for help on a specific command.\n
-
diff --git a/karaf-2.3.x/demos/command/NOTICE b/karaf-2.3.x/demos/command/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/demos/command/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/demos/command/pom.xml b/karaf-2.3.x/demos/command/pom.xml
deleted file mode 100644
index 4c6c33d..0000000
--- a/karaf-2.3.x/demos/command/pom.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.demos</groupId>
-        <artifactId>demos</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.demos.command</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Demos :: Extend Console Command</name>
-
-    <dependencies>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>3.8.1</version>
-            <scope>test</scope>
-        </dependency>
-
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <version>2.3.4</version>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            org.apache.felix.service.command,
-                            org.apache.felix.gogo.commands,
-                            org.apache.karaf.shell.console,
-                            *
-                        </Import-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/demos/command/src/main/java/org/apache/karaf/demos/command/MyCommand.java b/karaf-2.3.x/demos/command/src/main/java/org/apache/karaf/demos/command/MyCommand.java
deleted file mode 100644
index a5227db..0000000
--- a/karaf-2.3.x/demos/command/src/main/java/org/apache/karaf/demos/command/MyCommand.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.karaf.demos.command;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-
-@Command(scope = "mycommand", name = "hello", description="Says hello")
-public class MyCommand extends OsgiCommandSupport {
-
-    @Argument(index = 0, name = "arg", description = "The command argument", required = false, multiValued = false)
-    String arg = null;
-
-    @Override
-    protected Object doExecute() throws Exception {
-        System.out.println("Executing My Command Demo");
-        return null;
-    }
-}
diff --git a/karaf-2.3.x/demos/command/src/main/java/org/apache/karaf/demos/command/MyCompleter.java b/karaf-2.3.x/demos/command/src/main/java/org/apache/karaf/demos/command/MyCompleter.java
deleted file mode 100644
index 2596cb9..0000000
--- a/karaf-2.3.x/demos/command/src/main/java/org/apache/karaf/demos/command/MyCompleter.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.karaf.demos.command;
-
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.apache.karaf.shell.console.Completer;
-
-import java.util.List;
-
-/**
-* <p>
-* My completer.
-* </p>
-*/
-
-public class MyCompleter implements Completer {
-
-    /**
-     * @param buffer it's the beginning string typed by the user
-     * @param cursor it's the position of the cursor
-     * @param candidates the list of completions proposed to the user
-     */
-    public int complete(String buffer, int cursor, List candidates) {
-
-        StringsCompleter delegate = new StringsCompleter();
-        delegate.getStrings().add("one");
-        delegate.getStrings().add("two");
-        delegate.getStrings().add("three");
-        return delegate.complete(buffer, cursor, candidates);
-    }
-}
diff --git a/karaf-2.3.x/demos/command/src/main/resources/OSGI-INF/blueprint/mycommand.xml b/karaf-2.3.x/demos/command/src/main/resources/OSGI-INF/blueprint/mycommand.xml
deleted file mode 100644
index 3589797..0000000
--- a/karaf-2.3.x/demos/command/src/main/resources/OSGI-INF/blueprint/mycommand.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?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.
-
--->
-
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.0.0">
-        <command name="mycommand/hello">
-            <action class="org.apache.karaf.demos.command.MyCommand"/>
-            <completers>
-                <ref component-id="myCompleter"/>
-                <null/>
-            </completers>
-        </command>
-    </command-bundle>
-
-    <bean id="myCompleter" class="org.apache.karaf.demos.command.MyCompleter"/>
-
-</blueprint>
diff --git a/karaf-2.3.x/demos/deployer/bundle/NOTICE b/karaf-2.3.x/demos/deployer/bundle/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/demos/deployer/bundle/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/demos/deployer/bundle/pom.xml b/karaf-2.3.x/demos/deployer/bundle/pom.xml
deleted file mode 100644
index 46900e5..0000000
--- a/karaf-2.3.x/demos/deployer/bundle/pom.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.demos</groupId>
-        <artifactId>org.apache.karaf.demos.deployer</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.demos.deployer.bundle</groupId>
-    <artifactId>my-bundle</artifactId>
-    <version>2.3.1</version>
-    <packaging>bundle</packaging>
-
-    <name>Apache Karaf :: Demos :: Deployer :: Bundle</name>
-    <description>Apache Karaf bundle demo.</description>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <version>4.2.0</version>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <version>2.3.7</version>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
-                        <Bundle-Version>${project.version}</Bundle-Version>
-                        <Bundle-Activator>org.apache.karaf.demos.deployer.bundle.Activator</Bundle-Activator>
-                        <Export-Package>
-                            org.apache.karaf.demos.deployer.bundle*;version=${project.version}
-                        </Export-Package>
-                        <Import-Package>
-                            *
-                        </Import-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/demos/deployer/bundle/src/main/java/org/apache/karaf/demos/deployer/bundle/Activator.java b/karaf-2.3.x/demos/deployer/bundle/src/main/java/org/apache/karaf/demos/deployer/bundle/Activator.java
deleted file mode 100644
index d2847b2..0000000
--- a/karaf-2.3.x/demos/deployer/bundle/src/main/java/org/apache/karaf/demos/deployer/bundle/Activator.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.karaf.demos.deployer.bundle;
-
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-
-public class Activator implements BundleActivator {
-
-    public void start(BundleContext context) {
-        System.out.println("Starting the Apache Karaf demo bundle");
-    }
-
-    public void stop(BundleContext context) {
-        System.out.println("Stopping the Apache Karaf demo bundle");
-    }
-
-}
diff --git a/karaf-2.3.x/demos/deployer/feature/NOTICE b/karaf-2.3.x/demos/deployer/feature/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/demos/deployer/feature/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/demos/deployer/feature/pom.xml b/karaf-2.3.x/demos/deployer/feature/pom.xml
deleted file mode 100644
index 8fb71ec..0000000
--- a/karaf-2.3.x/demos/deployer/feature/pom.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-    
-    <parent>
-        <groupId>org.apache.karaf.demos</groupId>
-        <artifactId>org.apache.karaf.demos.deployer</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.demos.deployer.feature</groupId>
-    <artifactId>my-feature</artifactId>
-    <version>2.3.1</version>
-    <packaging>pom</packaging>
-    
-    <name>Apache Karaf :: Demos :: Deployer :: Feature</name>
-    <description>Create a feature with the defined dependencies set.</description>
-
-    <dependencies>
-        <!-- Put here the artifacts which should be included in the feature -->
-        <dependency>
-            <groupId>commons-collections</groupId>
-            <artifactId>commons-collections</artifactId>
-            <version>3.2.1</version>
-            <scope>runtime</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.karaf.tooling</groupId>
-                <artifactId>features-maven-plugin</artifactId>
-                <version>2.3.1</version>
-                <executions>
-                    <execution>
-                        <id>generate-features-file</id>
-                        <goals>
-                            <goal>generate-features-file</goal>
-                        </goals>
-                        <configuration>
-                            <karafVersion>${project.version}</karafVersion>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/demos/deployer/kar/NOTICE b/karaf-2.3.x/demos/deployer/kar/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/demos/deployer/kar/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/demos/deployer/kar/pom.xml b/karaf-2.3.x/demos/deployer/kar/pom.xml
deleted file mode 100644
index 9a2e08d..0000000
--- a/karaf-2.3.x/demos/deployer/kar/pom.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.demos</groupId>
-        <artifactId>org.apache.karaf.demos.deployer</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.demos.deployer.kar</groupId>
-    <artifactId>my-kar</artifactId>
-    <packaging>pom</packaging>
-    <name>Apache Karaf :: Demos :: Deployer :: Kar</name>
-
-    <dependencies>
-        <dependency>
-            <groupId>commons-collections</groupId>
-            <artifactId>commons-collections</artifactId>
-            <version>3.2.1</version>
-            <scope>runtime</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.karaf.tooling</groupId>
-                <artifactId>features-maven-plugin</artifactId>
-                <version>2.3.1</version>
-                <executions>
-                    <execution>
-                        <id>create-kar</id>
-                        <goals>
-                            <goal>create-kar</goal>
-                        </goals>
-                        <configuration>
-                            <featuresFile>src/main/resources/features.xml</featuresFile>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-</project>
diff --git a/karaf-2.3.x/demos/deployer/kar/src/main/resources/features.xml b/karaf-2.3.x/demos/deployer/kar/src/main/resources/features.xml
deleted file mode 100644
index 6ee1f39..0000000
--- a/karaf-2.3.x/demos/deployer/kar/src/main/resources/features.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?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.
--->
-<features>
-
-    <feature name="my-kar" version="1.0">
-        <bundle>mvn:commons-collections/commons-collections/3.2.1</bundle>
-    </feature>
-
-</features>
diff --git a/karaf-2.3.x/demos/deployer/pom.xml b/karaf-2.3.x/demos/deployer/pom.xml
deleted file mode 100644
index 706e4c0..0000000
--- a/karaf-2.3.x/demos/deployer/pom.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.demos</groupId>
-        <artifactId>demos</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.demos.deployer</artifactId>
-    <packaging>pom</packaging>
-    <name>Apache Karaf :: Demos :: Deployer</name>
-
-    <modules>
-        <module>kar</module>
-        <module>wrap</module>
-        <module>bundle</module>
-        <module>feature</module>
-    </modules>
-
-</project>
diff --git a/karaf-2.3.x/demos/deployer/wrap/NOTICE b/karaf-2.3.x/demos/deployer/wrap/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/demos/deployer/wrap/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/demos/deployer/wrap/pom.xml b/karaf-2.3.x/demos/deployer/wrap/pom.xml
deleted file mode 100644
index 59d812c..0000000
--- a/karaf-2.3.x/demos/deployer/wrap/pom.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.demos</groupId>
-        <artifactId>org.apache.karaf.demos.deployer</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.demos.deployer.wrap</groupId>
-    <artifactId>osgi.commons-lang</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Demos :: Deployer :: Wrap Bundle osgi.commons-lang</name>
-    <description>This OSGi bundle simply wraps commons-lang-2.4.jar artifact.</description>
-
-    <dependencies>
-        <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
-            <version>2.4</version>
-            <optional>true</optional>
-            <scope>runtime</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-shade-plugin</artifactId>
-                <version>1.1</version>
-                <executions>
-                    <execution>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>shade</goal>
-                        </goals>
-                        <configuration>
-                            <artifactSet>
-                                <excludes>
-                                    <exclude>**</exclude>
-                                </excludes>
-                            </artifactSet>
-                            <filters>
-                                <filter>
-                                    <artifact>commons-lang:commons-lang</artifact>
-                                    <excludes>
-                                        <exclude>**</exclude>
-                                    </excludes>
-                                </filter>
-                            </filters>
-                            <promoteTransitiveDependencies>true</promoteTransitiveDependencies>
-                            <createDependencyReducedPom>true</createDependencyReducedPom>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <version>2.3.7</version>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Bundle-SymbolicName>manual</Bundle-SymbolicName>
-                        <Export-Package>*;-split-package:=merge-first</Export-Package>
-                        <Import-Package />
-                        <_versionpolicy>[$(version;==;$(@)),$(version;+;$(@)))</_versionpolicy>
-                        <_removeheaders>Ignore-Package,Include-Resource,Private-Package,Embed-Dependency</_removeheaders>
-                    </instructions>
-                    <unpackBundle>true</unpackBundle>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-</project>
diff --git a/karaf-2.3.x/demos/dump/NOTICE b/karaf-2.3.x/demos/dump/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/demos/dump/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/demos/dump/pom.xml b/karaf-2.3.x/demos/dump/pom.xml
deleted file mode 100644
index c1c92c1..0000000
--- a/karaf-2.3.x/demos/dump/pom.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.demos</groupId>
-        <artifactId>demos</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>dump</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Demos :: Demo Dump provider</name>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.karaf.diagnostic</groupId>
-            <artifactId>org.apache.karaf.diagnostic.core</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            org.apache.karaf.diagnostic.core,
-                            *
-                        </Import-Package>
-                        <Private-Package>!*</Private-Package>
-                        <Export-Package>
-                            org.apache.karaf.diagnostic.demo
-                        </Export-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/demos/dump/src/main/java/org/apache/karaf/diagnostic/demo/ScreenshotDumpProvider.java b/karaf-2.3.x/demos/dump/src/main/java/org/apache/karaf/diagnostic/demo/ScreenshotDumpProvider.java
deleted file mode 100644
index b8bb7d1..0000000
--- a/karaf-2.3.x/demos/dump/src/main/java/org/apache/karaf/diagnostic/demo/ScreenshotDumpProvider.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*

- * 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.

- */

-package org.apache.karaf.diagnostic.demo;

-

-import java.awt.DisplayMode;

-import java.awt.GraphicsDevice;

-import java.awt.GraphicsEnvironment;

-import java.awt.Rectangle;

-import java.awt.Robot;

-import java.awt.image.BufferedImage;

-import java.io.OutputStream;

-

-import javax.imageio.ImageIO;

-

-import org.apache.karaf.diagnostic.core.DumpDestination;

-import org.apache.karaf.diagnostic.core.DumpProvider;

-

-/**

- * This demo provider creates images in dump destination which

- * contains screenshots from all attached displays.

- */

-public class ScreenshotDumpProvider implements DumpProvider {

-

-	/**

-	 * {@inheritDoc}

-	 */

-    public void createDump(DumpDestination destination) throws Exception {

-        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();

-        // get all graphic devices attached to computer

-        GraphicsDevice[] gs = ge.getScreenDevices();

-

-        // create dump entry for each device  

-        for (int i=0; i < gs.length; i++) {

-            DisplayMode mode = gs[i].getDisplayMode();

-            Rectangle bounds = new Rectangle(0, 0, mode.getWidth(), mode.getHeight());

-            BufferedImage screenshot = new Robot(gs[i]).createScreenCapture(bounds);

-

-            // to attach your entry to destination you have to execute this line

-            OutputStream outputStream = destination.add("screenshot/display_" + i + ".png");

-            ImageIO.write(screenshot, "PNG", outputStream);

-

-            outputStream.close();

-        }

-

-    }

-

-}

diff --git a/karaf-2.3.x/demos/dump/src/main/resources/OSGI-INF/blueprint/screenshot.xml b/karaf-2.3.x/demos/dump/src/main/resources/OSGI-INF/blueprint/screenshot.xml
deleted file mode 100644
index 62068d1..0000000
--- a/karaf-2.3.x/demos/dump/src/main/resources/OSGI-INF/blueprint/screenshot.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?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.

-

--->

-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">

-

-    <bean id="screenshotDump" class="org.apache.karaf.diagnostic.demo.ScreenshotDumpProvider" />

-

-    <service ref="screenshotDump" auto-export="interfaces" />

-

-</blueprint>
\ No newline at end of file
diff --git a/karaf-2.3.x/demos/pom.xml b/karaf-2.3.x/demos/pom.xml
deleted file mode 100644
index 4ec0c85..0000000
--- a/karaf-2.3.x/demos/pom.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>karaf</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.demos</groupId>
-    <artifactId>demos</artifactId>
-    <packaging>pom</packaging>
-    <name>Apache Karaf :: Demos</name>
-
-    <modules>
-        <module>web</module>
-        <module>branding</module>
-        <module>dump</module>
-        <module>command</module>
-        <module>deployer</module>
-  </modules>
-
-</project>
diff --git a/karaf-2.3.x/demos/web/NOTICE b/karaf-2.3.x/demos/web/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/demos/web/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/demos/web/pom.xml b/karaf-2.3.x/demos/web/pom.xml
deleted file mode 100644
index 7cd4fef..0000000
--- a/karaf-2.3.x/demos/web/pom.xml
+++ /dev/null
@@ -1,157 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.demos</groupId>
-        <artifactId>demos</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>web</artifactId>
-    <packaging>war</packaging>
-    <name>Apache Karaf :: Demos :: Web</name>
-
-    <properties>
-        <jetty.port>8080</jetty.port>
-        <maven-jetty-plugin.version>6.1.26</maven-jetty-plugin.version>
-        <geronimo.servlet.version>1.1.2</geronimo.servlet.version>
-
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.karaf</groupId>
-            <artifactId>org.apache.karaf.main</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.jaas</groupId>
-            <artifactId>org.apache.karaf.jaas.boot</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf</groupId>
-            <artifactId>apache-karaf</artifactId>
-            <type>zip</type>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.geronimo.specs</groupId>
-            <artifactId>geronimo-servlet_2.5_spec</artifactId>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>1.5</source>
-                    <target>1.5</target>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <configuration>
-                    <warSourceDirectory>src/main/webapp/</warSourceDirectory>
-                    <webResources>
-                        <resource>
-                            <directory>target/karaf</directory>
-                        </resource>
-                    </webResources>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.mortbay.jetty</groupId>
-                <artifactId>maven-jetty-plugin</artifactId>
-                <version>${maven-jetty-plugin.version}</version>
-                <configuration>
-                    <connectors>
-                        <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
-                            <port>${jetty.port}</port>
-                            <maxIdleTime>60000</maxIdleTime>
-                        </connector>
-                    </connectors>
-                    <systemProperties>
-                        <!-- enable easy connection to JConsole -->
-                        <systemProperty>
-                            <name>com.sun.management.jmxremote</name>
-                            <value />
-                        </systemProperty>
-                    </systemProperties>
-                    <scanIntervalSeconds>10</scanIntervalSeconds>
-                    <webAppSourceDirectory>${project.build.directory}/${project.build.finalName}</webAppSourceDirectory>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-dependency-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>unpack-unix</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>unpack</goal>
-                        </goals>
-                        <configuration>
-                            <artifactItems>
-                                <artifactItem>
-                                    <groupId>org.apache.karaf</groupId>
-                                    <artifactId>apache-karaf</artifactId>
-                                    <type>zip</type>
-                                    <overWrite>true</overWrite>
-                                    <outputDirectory>${project.build.directory}/karaf/WEB-INF</outputDirectory>
-                                    <excludes>**/lib/*,**/*.txt,**/bin/*,**/demos/**,**/lib,**/bin,**/demos</excludes>
-                                </artifactItem>
-                            </artifactItems>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>copy-karaf</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>run</goal>
-                        </goals>
-                        <configuration>
-                            <target>
-                                <move todir="${project.build.directory}/karaf/WEB-INF/karaf">
-                                    <fileset dir="${project.build.directory}/karaf/WEB-INF/apache-karaf-${project.version}" />
-                                </move>
-                            </target>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/demos/web/src/main/java/org/apache/karaf/web/WebAppListener.java b/karaf-2.3.x/demos/web/src/main/java/org/apache/karaf/web/WebAppListener.java
deleted file mode 100644
index 50441e4..0000000
--- a/karaf-2.3.x/demos/web/src/main/java/org/apache/karaf/web/WebAppListener.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.web;
-
-import java.io.File;
-
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-
-import org.apache.karaf.main.Main;
-
-public class WebAppListener implements ServletContextListener {
-
-	private Main main;
-
-	public void contextInitialized(ServletContextEvent sce) {
-		try {
-			System.err.println("contextInitialized");
-			String root = new File(sce.getServletContext().getRealPath("/") + "/WEB-INF/karaf").getAbsolutePath();
-			System.err.println("Root: " + root);
-			System.setProperty("karaf.home", root);
-            System.setProperty("karaf.base", root);
-            System.setProperty("karaf.data", root + "/data");
-            System.setProperty("karaf.history", root + "/data/history.txt");
-            System.setProperty("karaf.instances", root + "/instances");
-			System.setProperty("karaf.startLocalConsole", "false");
-			System.setProperty("karaf.startRemoteShell", "true");
-            System.setProperty("karaf.lock", "false");
-			main = new Main(new String[0]);
-            main.launch();
-		} catch (Exception e) {
-			main = null;
-			e.printStackTrace();
-		}
-	}
-
-	public void contextDestroyed(ServletContextEvent sce) {
-		try {
-			System.err.println("contextDestroyed");
-			if (main != null) {
-                main.destroy();
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-	}
-
-}
diff --git a/karaf-2.3.x/demos/web/src/main/webapp/WEB-INF/web.xml b/karaf-2.3.x/demos/web/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index b78af46..0000000
--- a/karaf-2.3.x/demos/web/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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.
--->
-
-<web-app version="2.4"
-         xmlns="http://java.sun.com/xml/ns/j2ee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
-                             http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-
-  <description>Karaf Embedded Example</description>
-  <display-name>Karaf Embedded Example</display-name>
-
-  <listener>
-    <listener-class>org.apache.karaf.web.WebAppListener</listener-class>
-  </listener>
-
-  <welcome-file-list>
-    <welcome-file>index.jsp</welcome-file>
-  </welcome-file-list>
-		
-</web-app>
diff --git a/karaf-2.3.x/demos/web/src/main/webapp/index.jsp b/karaf-2.3.x/demos/web/src/main/webapp/index.jsp
deleted file mode 100644
index 812d187..0000000
--- a/karaf-2.3.x/demos/web/src/main/webapp/index.jsp
+++ /dev/null
@@ -1,34 +0,0 @@
-<%--
-    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.
---%>
-<html>
-<head>
-<title>Apache Karaf</title>
-</head>
-<body>
-
-<h2>Welcome!</h2>
-
-<p>
-Welcome to Apache Karaf web application demo
-</p>
-
-<p>
-You can find more information about Karaf on the <a href="http://karaf.apache.org/">Apache Karaf Site</a>
-</p>
-</body>
-</html>
-	
diff --git a/karaf-2.3.x/deployer/blueprint/NOTICE b/karaf-2.3.x/deployer/blueprint/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/deployer/blueprint/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/deployer/blueprint/pom.xml b/karaf-2.3.x/deployer/blueprint/pom.xml
deleted file mode 100644
index d433f65..0000000
--- a/karaf-2.3.x/deployer/blueprint/pom.xml
+++ /dev/null
@@ -1,114 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.deployer</groupId>
-        <artifactId>deployer</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.deployer.blueprint</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Deployer :: Blueprint</name>
-    <description>This deployer transforms a plain blueprint xml file to a deployable bundle</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.karaf</groupId>
-            <artifactId>org.apache.karaf.util</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-simple</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.osgi</groupId>
-            <artifactId>spring-osgi-core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.fileinstall</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicemix.bundles</groupId>
-            <artifactId>org.apache.servicemix.bundles.junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <!-- Set the blueprint.graceperiod flag to false to allow the bundle to start
-                             See the blueprint config file -->
-                        <Bundle-SymbolicName>${project.artifactId};blueprint.graceperiod:=false</Bundle-SymbolicName>
-                        <Export-Package>${project.artifactId}*;version=${project.version}</Export-Package>
-                        <Import-Package>*</Import-Package>
-                        <Private-Package>
-                            org.apache.karaf.deployer.blueprint,
-                            org.apache.karaf.util
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/deployer/blueprint/src/main/java/org/apache/karaf/deployer/blueprint/BlueprintDeploymentListener.java b/karaf-2.3.x/deployer/blueprint/src/main/java/org/apache/karaf/deployer/blueprint/BlueprintDeploymentListener.java
deleted file mode 100644
index 5a9c6ec..0000000
--- a/karaf-2.3.x/deployer/blueprint/src/main/java/org/apache/karaf/deployer/blueprint/BlueprintDeploymentListener.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.deployer.blueprint;
-
-import java.io.File;
-import java.net.URL;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Document;
-
-import org.apache.felix.fileinstall.ArtifactUrlTransformer;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.SAXException;
-
-/**
- * A deployment listener that listens for spring xml applications
- * and creates bundles for these.
- */
-public class BlueprintDeploymentListener implements ArtifactUrlTransformer {
-
-    private final Logger logger = LoggerFactory.getLogger(BlueprintDeploymentListener.class);
-
-    private DocumentBuilderFactory dbf;
-
-    public boolean canHandle(File artifact) {
-        try {
-            if (artifact.isFile() && artifact.getName().endsWith(".xml")) {
-                Document doc = parse(artifact);
-                String name = doc.getDocumentElement().getLocalName();
-                String uri  = doc.getDocumentElement().getNamespaceURI();
-                if ("blueprint".equals(name) && "http://www.osgi.org/xmlns/blueprint/v1.0.0".equals(uri)) {
-                    return true;
-                }
-            }
-        } catch (Exception e) {
-            logger.error("Unable to parse deployed file " + artifact.getAbsolutePath(), e);
-        }
-        return false;
-    }
-
-    public URL transform(URL artifact) {
-        try {
-            return new URL("blueprint", null, artifact.toString());
-        } catch (Exception e) {
-            logger.error("Unable to build blueprint application bundle", e);
-            return null;
-        }
-    }
-
-    protected Document parse(File artifact) throws Exception {
-        if (dbf == null) {
-            dbf = DocumentBuilderFactory.newInstance();
-            dbf.setNamespaceAware(true);
-        }
-        DocumentBuilder db = dbf.newDocumentBuilder();
-        db.setErrorHandler(new ErrorHandler() {
-            public void warning(SAXParseException exception) throws SAXException {
-            }
-            public void error(SAXParseException exception) throws SAXException {
-            }
-            public void fatalError(SAXParseException exception) throws SAXException {
-                throw exception;
-            }
-        });
-        return db.parse(artifact);
-    }
-
-}
diff --git a/karaf-2.3.x/deployer/blueprint/src/main/java/org/apache/karaf/deployer/blueprint/BlueprintTransformer.java b/karaf-2.3.x/deployer/blueprint/src/main/java/org/apache/karaf/deployer/blueprint/BlueprintTransformer.java
deleted file mode 100644
index a8f31aa..0000000
--- a/karaf-2.3.x/deployer/blueprint/src/main/java/org/apache/karaf/deployer/blueprint/BlueprintTransformer.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.deployer.blueprint;
-
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.Properties;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.jar.JarFile;
-import java.util.jar.JarOutputStream;
-import java.util.jar.Manifest;
-import java.util.zip.ZipEntry;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-
-import org.apache.karaf.util.DeployerUtils;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-
-import org.osgi.framework.Constants;
-
-import static org.apache.karaf.util.MvnUtils.getMvnPath;
-
-public class BlueprintTransformer {
-
-    static Transformer transformer;
-    static DocumentBuilderFactory dbf;
-    static TransformerFactory tf;
-
-
-    public static void transform(URL url, OutputStream os) throws Exception {
-        // Build dom document
-        Document doc = parse(url);
-        // Heuristicly retrieve name and version
-        String name = getMvnPath(url);
-        int idx = name.lastIndexOf('/');
-        if (idx >= 0) {
-            name = name.substring(idx + 1);
-        }
-        String[] str = DeployerUtils.extractNameVersionType(name);
-        // Create manifest
-        Manifest m = new Manifest();
-        m.getMainAttributes().putValue("Manifest-Version", "2");
-        m.getMainAttributes().putValue(Constants.BUNDLE_MANIFESTVERSION, "2");
-        m.getMainAttributes().putValue(Constants.BUNDLE_SYMBOLICNAME, str[0]);
-        m.getMainAttributes().putValue(Constants.BUNDLE_VERSION, str[1]);
-        String importPkgs = getImportPackages(analyze(new DOMSource(doc)));
-        if (importPkgs != null && importPkgs.length() > 0) {
-            m.getMainAttributes().putValue(Constants.IMPORT_PACKAGE, importPkgs);
-        }
-        m.getMainAttributes().putValue(Constants.DYNAMICIMPORT_PACKAGE, "*");
-        // Extract manifest entries from the DOM
-        NodeList l = doc.getElementsByTagName("manifest");
-        if (l != null) {
-            for (int i = 0; i < l.getLength(); i++) {
-                Element e = (Element) l.item(i);
-                String text = e.getTextContent();
-                Properties props = new Properties();
-                props.load(new ByteArrayInputStream(text.trim().getBytes()));
-                Enumeration en = props.propertyNames();
-                while (en.hasMoreElements()) {
-                    String k = (String) en.nextElement();
-                    String v = props.getProperty(k);
-                    m.getMainAttributes().putValue(k, v);
-                }
-                e.getParentNode().removeChild(e);
-            }
-        }
-
-        JarOutputStream out = new JarOutputStream(os);
-        ZipEntry e = new ZipEntry(JarFile.MANIFEST_NAME);
-        out.putNextEntry(e);
-        m.write(out);
-        out.closeEntry();
-        e = new ZipEntry("OSGI-INF/");
-        out.putNextEntry(e);
-        e = new ZipEntry("OSGI-INF/blueprint/");
-        out.putNextEntry(e);
-        out.closeEntry();
-        // check .xml file extension
-        if( !name.endsWith(".xml")) {
-            name +=".xml";
-        }
-        e = new ZipEntry("OSGI-INF/blueprint/" + name);
-        out.putNextEntry(e);
-        // Copy the new DOM
-        if (tf == null) {
-            tf = TransformerFactory.newInstance();
-        }
-        tf.newTransformer().transform(new DOMSource(doc), new StreamResult(out));
-        out.closeEntry();
-        out.close();
-    }
-
-    public static Set<String> analyze(Source source) throws Exception {
-        if (transformer == null) {
-            if (tf == null) {
-                tf = TransformerFactory.newInstance();
-            }
-            Source s = new StreamSource(BlueprintTransformer.class.getResourceAsStream("extract.xsl"));
-            transformer = tf.newTransformer(s);
-        }
-
-        Set<String> refers = new TreeSet<String>();
-
-        ByteArrayOutputStream bout = new ByteArrayOutputStream();
-        Result r = new StreamResult(bout);
-        transformer.transform(source, r);
-
-        ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
-        bout.close();
-
-        BufferedReader br = new BufferedReader(new InputStreamReader(bin));
-
-        String line = br.readLine();
-        while (line != null) {
-            line = line.trim();
-            if (line.length() > 0) {
-                String parts[] = line.split("\\s*,\\s*");
-                for (int i = 0; i < parts.length; i++) {
-                    int n = parts[i].lastIndexOf('.');
-                    if (n > 0) {
-                        String pkg = parts[i].substring(0, n);
-                        if (!pkg.startsWith("java.")) {
-                            refers.add(pkg);
-                        }
-                    }
-                }
-            }
-            line = br.readLine();
-        }
-        br.close();
-        return refers;
-    }
-
-    protected static String getImportPackages(Set<String> packages) {
-        StringBuilder sb = new StringBuilder();
-        for (String pkg : packages) {
-            if (sb.length() > 0) {
-                sb.append(",");
-            }
-            sb.append(pkg);
-        }
-        return sb.toString();
-    }
-
-    protected static Document parse(URL url) throws Exception {
-        if (dbf == null) {
-            dbf = DocumentBuilderFactory.newInstance();
-            dbf.setNamespaceAware(true);
-        }
-        DocumentBuilder db = dbf.newDocumentBuilder();
-        return db.parse(url.toString());
-    }
-
-}
diff --git a/karaf-2.3.x/deployer/blueprint/src/main/java/org/apache/karaf/deployer/blueprint/BlueprintURLHandler.java b/karaf-2.3.x/deployer/blueprint/src/main/java/org/apache/karaf/deployer/blueprint/BlueprintURLHandler.java
deleted file mode 100644
index 452f4cb..0000000
--- a/karaf-2.3.x/deployer/blueprint/src/main/java/org/apache/karaf/deployer/blueprint/BlueprintURLHandler.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.deployer.blueprint;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-
-import org.osgi.service.url.AbstractURLStreamHandlerService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * A URL handler that will transform a JBI artifact to an OSGi bundle
- * on the fly.  Needs to be registered in the OSGi registry.
- */
-public class BlueprintURLHandler extends AbstractURLStreamHandlerService {
-
-	private final Logger logger = LoggerFactory.getLogger(BlueprintURLHandler.class);
-
-	private static String SYNTAX = "blueprint: bp-xml-uri";
-
-	private URL blueprintXmlURL;
-
-    /**
-     * Open the connection for the given URL.
-     *
-     * @param url the url from which to open a connection.
-     * @return a connection on the specified URL.
-     * @throws IOException if an error occurs or if the URL is malformed.
-     */
-    @Override
-	public URLConnection openConnection(URL url) throws IOException {
-		if (url.getPath() == null || url.getPath().trim().length() == 0) {
-			throw new MalformedURLException ("Path cannot be null or empty. Syntax: " + SYNTAX );
-		}
-		blueprintXmlURL = new URL(url.getPath());
-
-		logger.debug("Blueprint xml URL is: [" + blueprintXmlURL + "]");
-		return new Connection(url);
-	}
-	
-	public URL getBlueprintXmlURL() {
-		return blueprintXmlURL;
-	}
-
-    public class Connection extends URLConnection {
-
-        public Connection(URL url) {
-            super(url);
-        }
-
-        @Override
-        public void connect() throws IOException {
-        }
-
-        @Override
-        public InputStream getInputStream() throws IOException {
-            try {
-                ByteArrayOutputStream os = new ByteArrayOutputStream();
-                BlueprintTransformer.transform(blueprintXmlURL, os);
-                os.close();
-                return new ByteArrayInputStream(os.toByteArray());
-            } catch (Exception e) {
-                logger.error("Error opening blueprint xml url", e);
-                throw (IOException) new IOException("Error opening blueprint xml url").initCause(e);
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/deployer/blueprint/src/main/resources/OSGI-INF/blueprint/blueprint-deployer.xml b/karaf-2.3.x/deployer/blueprint/src/main/resources/OSGI-INF/blueprint/blueprint-deployer.xml
deleted file mode 100644
index 172548e..0000000
--- a/karaf-2.3.x/deployer/blueprint/src/main/resources/OSGI-INF/blueprint/blueprint-deployer.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
-
-    <service id="blueprintUrlHandler" interface="org.osgi.service.url.URLStreamHandlerService">
-        <service-properties>
-            <entry key="url.handler.protocol" value="blueprint"/>
-        </service-properties>
-        <bean class="org.apache.karaf.deployer.blueprint.BlueprintURLHandler"/>
-    </service>
-
-    <bean id="blueprintDeploymentListener" class="org.apache.karaf.deployer.blueprint.BlueprintDeploymentListener"/>
-
-    <!-- Force a reference to the url handler above from the osgi registry to (try to) make sure
-         the url handler is registered inside the framework.  Else we can run into timing issues
-         where fileinstall will use the featureDeploymentListener before the url can be actually
-         used.  In order to not block the bundle, the blueprint.graceperiod=false flag must be
-         set on the SymbolicName osgi header -->
-    <reference id="blueprintUrlHandlerRef" interface="org.osgi.service.url.URLStreamHandlerService" filter="url.handler.protocol=blueprint" />
-
-    <service ref="blueprintDeploymentListener" auto-export="interfaces" depends-on="blueprintDeploymentListener" />
-
-</blueprint>
diff --git a/karaf-2.3.x/deployer/blueprint/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/deployer/blueprint/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 6b8c192..0000000
--- a/karaf-2.3.x/deployer/blueprint/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,15 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    The blueprint deployer allows you to drop Blueprint XML files directly in the deploy directory.
-
-    Karaf will load the Blueprint descriptor and transform it into a deployable bundle.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[31mDeployer\u001B[0m section of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/deployer/blueprint/src/main/resources/org/apache/karaf/deployer/blueprint/blueprint-deployer-1.0.0.xsd b/karaf-2.3.x/deployer/blueprint/src/main/resources/org/apache/karaf/deployer/blueprint/blueprint-deployer-1.0.0.xsd
deleted file mode 100644
index 81adc3c..0000000
--- a/karaf-2.3.x/deployer/blueprint/src/main/resources/org/apache/karaf/deployer/blueprint/blueprint-deployer-1.0.0.xsd
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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.
-
--->
-<xs:schema elementFormDefault='qualified'
-           targetNamespace='http://karaf.apache.org/xmlns/deployer/blueprint/v1.0.0'
-           xmlns:xs='http://www.w3.org/2001/XMLSchema'>
-
-    <xs:element name="manifest">
-        <xs:complexType mixed="true">
-            <xs:annotation>
-                <xs:documentation><![CDATA[
-The content of this element will be read using the syntax of the java util Properties
-class (http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html) and will
-override any generated manifest entry.
-                ]]></xs:documentation>
-            </xs:annotation>
-        </xs:complexType>
-    </xs:element>
-
-</xs:schema>
diff --git a/karaf-2.3.x/deployer/blueprint/src/main/resources/org/apache/karaf/deployer/blueprint/extract.xsl b/karaf-2.3.x/deployer/blueprint/src/main/resources/org/apache/karaf/deployer/blueprint/extract.xsl
deleted file mode 100644
index eb44e25..0000000
--- a/karaf-2.3.x/deployer/blueprint/src/main/resources/org/apache/karaf/deployer/blueprint/extract.xsl
+++ /dev/null
@@ -1,60 +0,0 @@
-<?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.
-
--->
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:bp="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-	<xsl:output method="text" />
-
-	<xsl:template match="/">
-
-		<!-- Match all attributes that holds a class or a comma delimited 
-		     list of classes and print them -->
-
-		<xsl:for-each select="
-				//bp:bean/@class 
-			|	//bp:service/@interface 
-			|   //bp:service/bp:interfaces/bp:value/text()
- 			|	//bp:reference/@interface
-			|	//bp:reference-list/@interface
-		">
-			<xsl:value-of select="." />
-			<xsl:text>
-			</xsl:text>
-		</xsl:for-each>
-
-		<xsl:for-each select="
-				//bp:bean/bp:argument/@type
-		    |	//bp:list/@value-type 
-    		|	//bp:set/@value-type 
-    		|	//bp:array/@value-type 
-			|   //bp:map/@key-type
-			|   //bp:map/@value-type
-		">
-		    <xsl:choose>
-		        <xsl:when test="contains(., '[')"><xsl:value-of select="substring-before(., '[')"/></xsl:when>
-		        <xsl:otherwise><xsl:value-of select="."/></xsl:otherwise>
-			</xsl:choose>
-			<xsl:text>
-			</xsl:text>
-		</xsl:for-each>
-
-	</xsl:template>
-
-
-</xsl:stylesheet>
-
diff --git a/karaf-2.3.x/deployer/blueprint/src/test/java/org/apache/karaf/deployer/blueprint/BlueprintDeploymentListenerTest.java b/karaf-2.3.x/deployer/blueprint/src/test/java/org/apache/karaf/deployer/blueprint/BlueprintDeploymentListenerTest.java
deleted file mode 100644
index d705c23..0000000
--- a/karaf-2.3.x/deployer/blueprint/src/test/java/org/apache/karaf/deployer/blueprint/BlueprintDeploymentListenerTest.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.deployer.blueprint;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.jar.JarInputStream;
-import java.util.zip.ZipEntry;
-
-import javax.xml.transform.dom.DOMSource;
-
-import junit.framework.TestCase;
-
-public class BlueprintDeploymentListenerTest extends TestCase {
-	
-	private static final String BLUEPRINT_ENTRY = "OSGI-INF/blueprint/";
-
-    public void testPackagesExtraction() throws Exception {
-        BlueprintDeploymentListener l = new BlueprintDeploymentListener();
-        File f = new File(getClass().getClassLoader().getResource("test.xml").toURI());
-        Set<String> pkgs = BlueprintTransformer.analyze(new DOMSource(BlueprintTransformer.parse(f.toURL())));
-        assertNotNull(pkgs);
-        assertEquals(1, pkgs.size());
-        Iterator<String> it = pkgs.iterator();
-        assertEquals("org.apache.aries.blueprint.sample", it.next());
-    }
-
-    public void testCustomManifest() throws Exception {
-        File f = File.createTempFile("smx", ".jar");
-        try {
-            OutputStream os = new FileOutputStream(f);
-            BlueprintTransformer.transform(getClass().getClassLoader().getResource("test.xml"), os);
-            os.close();
-            InputStream is = new FileInputStream(f);
-            JarInputStream jar = new JarInputStream(is);
-            jar.getManifest().write(System.err);
-            is.close();
-        } finally {
-            f.delete();
-        }
-    }
-
-    // KARAF-1617
-    public void testAppendDescriptorFileExtension() throws Exception {
-    	final String expectedFileName = "test-fileextension";
-        File f = File.createTempFile("smx", ".jar");
-        try {
-        	ZipEntry zipEntry = null;
-            OutputStream os = new FileOutputStream(f);
-			BlueprintTransformer.transform(getClass().getClassLoader().getResource(expectedFileName), os);
-            os.close();
-            InputStream is = new FileInputStream(f);
-            JarInputStream jar = new JarInputStream(is);
-            while(true) {
-                zipEntry = jar.getNextEntry();
-                if( null == zipEntry) {
-                    break;
-                }
-                if ( zipEntry.getName() != null && zipEntry.getName().contains(expectedFileName)) {
-                	break;
-                }
-            }
-            is.close();
-            assertNotNull("blueprint service descriptor JAR file entry",zipEntry);
-        	assertEquals(BLUEPRINT_ENTRY+expectedFileName+".xml",zipEntry.getName());
-        } finally {
-            f.delete();
-        }
-        
-    }
-
-    public void testAppendNotTwiceDescriptorFileExtension() throws Exception {
-    	final String expectedFileName = "test.xml";
-        File f = File.createTempFile("smx", ".jar");
-        try {
-        	ZipEntry zipEntry = null;
-            OutputStream os = new FileOutputStream(f);
-			BlueprintTransformer.transform(getClass().getClassLoader().getResource(expectedFileName), os);
-            os.close();
-            InputStream is = new FileInputStream(f);
-            JarInputStream jar = new JarInputStream(is);
-            while(true) {
-                zipEntry = jar.getNextEntry();
-                if( null == zipEntry) {
-                    break;
-                }
-                if ( zipEntry.getName() != null && zipEntry.getName().contains(expectedFileName)) {
-                	break;
-                }
-            }
-            is.close();
-            assertNotNull("blueprint service descriptor JAR file entry",zipEntry);
-        	assertEquals(BLUEPRINT_ENTRY+expectedFileName,zipEntry.getName());
-        } finally {
-            f.delete();
-        }
-        
-    }
-}
diff --git a/karaf-2.3.x/deployer/blueprint/src/test/resources/test-fileextension b/karaf-2.3.x/deployer/blueprint/src/test/resources/test-fileextension
deleted file mode 100644
index 158e125..0000000
--- a/karaf-2.3.x/deployer/blueprint/src/test/resources/test-fileextension
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
-
-    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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
-           default-availability="optional">
-
-    <type-converters>
-        <bean id="converter1" class="org.apache.aries.blueprint.sample.DateTypeConverter">
-            <property name="format" value="yyyy.MM.dd"/>
-        </bean>
-        <bean id="converter2" class="org.apache.aries.blueprint.sample.CurrencyTypeConverter"/>
-
-        <cm:property-placeholder id="property-placeholder" persistent-id="blueprint-sample">
-            <cm:default-properties>
-                <cm:property name="key.b" value="-1"/>
-            </cm:default-properties>
-        </cm:property-placeholder>
-    </type-converters>
-
-    <bean id="foo" class="org.apache.aries.blueprint.sample.Foo" init-method="init" destroy-method="destroy">
-        <property name="a" value="5" />
-        <property name="b" value="${key.b}" />
-        <property name="bar" ref="bar" />
-        <property name="currency">
-              <value>PLN</value>
-        </property>
-        <property name="date">
-              <value>2009.04.17</value>
-        </property>
-    </bean>
-
-    <bean id="bar" class="org.apache.aries.blueprint.sample.Bar">
-        <property name="value"><value>Hello FooBar</value></property>
-        <property name="context" ref="bundleContext"/>
-        <property name="list">
-            <list>
-                <value>a list element</value>
-                <value type = "java.lang.Integer">5</value>
-            </list>
-        </property>
-    </bean>
-
-    <service ref="foo" auto-export="all-classes">
-        <service-properties>
-            <entry key="key" value="value"/>
-        </service-properties>
-        <registration-listener ref="fooRegistrationListener"
-                               registration-method="serviceRegistered"
-                               unregistration-method="serviceUnregistered"/>
-    </service>
-
-    <bean id="fooRegistrationListener" class="org.apache.aries.blueprint.sample.FooRegistrationListener"/>
-
-    <reference id="ref" interface="org.apache.aries.blueprint.sample.Foo">
-    </reference>
-
-    <reference id="ref2" interface="org.apache.aries.blueprint.sample.InterfaceA" timeout="100">
-        <reference-listener bind-method="bind" unbind-method="unbind" ref="bindingListener" />
-    </reference>
-
-    <bean id="bindingListener" class="org.apache.aries.blueprint.sample.BindingListener"/>
-
-    <reference-list id="ref-list" interface="org.apache.aries.blueprint.sample.InterfaceA">
-        <reference-listener bind-method="bind" unbind-method="unbind" ref="listBindingListener" />
-    </reference-list>
-
-    <bean id="listBindingListener" class="org.apache.aries.blueprint.sample.BindingListener"/>
-
-</blueprint>
-
diff --git a/karaf-2.3.x/deployer/blueprint/src/test/resources/test.xml b/karaf-2.3.x/deployer/blueprint/src/test/resources/test.xml
deleted file mode 100644
index 158e125..0000000
--- a/karaf-2.3.x/deployer/blueprint/src/test/resources/test.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
-
-    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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
-           default-availability="optional">
-
-    <type-converters>
-        <bean id="converter1" class="org.apache.aries.blueprint.sample.DateTypeConverter">
-            <property name="format" value="yyyy.MM.dd"/>
-        </bean>
-        <bean id="converter2" class="org.apache.aries.blueprint.sample.CurrencyTypeConverter"/>
-
-        <cm:property-placeholder id="property-placeholder" persistent-id="blueprint-sample">
-            <cm:default-properties>
-                <cm:property name="key.b" value="-1"/>
-            </cm:default-properties>
-        </cm:property-placeholder>
-    </type-converters>
-
-    <bean id="foo" class="org.apache.aries.blueprint.sample.Foo" init-method="init" destroy-method="destroy">
-        <property name="a" value="5" />
-        <property name="b" value="${key.b}" />
-        <property name="bar" ref="bar" />
-        <property name="currency">
-              <value>PLN</value>
-        </property>
-        <property name="date">
-              <value>2009.04.17</value>
-        </property>
-    </bean>
-
-    <bean id="bar" class="org.apache.aries.blueprint.sample.Bar">
-        <property name="value"><value>Hello FooBar</value></property>
-        <property name="context" ref="bundleContext"/>
-        <property name="list">
-            <list>
-                <value>a list element</value>
-                <value type = "java.lang.Integer">5</value>
-            </list>
-        </property>
-    </bean>
-
-    <service ref="foo" auto-export="all-classes">
-        <service-properties>
-            <entry key="key" value="value"/>
-        </service-properties>
-        <registration-listener ref="fooRegistrationListener"
-                               registration-method="serviceRegistered"
-                               unregistration-method="serviceUnregistered"/>
-    </service>
-
-    <bean id="fooRegistrationListener" class="org.apache.aries.blueprint.sample.FooRegistrationListener"/>
-
-    <reference id="ref" interface="org.apache.aries.blueprint.sample.Foo">
-    </reference>
-
-    <reference id="ref2" interface="org.apache.aries.blueprint.sample.InterfaceA" timeout="100">
-        <reference-listener bind-method="bind" unbind-method="unbind" ref="bindingListener" />
-    </reference>
-
-    <bean id="bindingListener" class="org.apache.aries.blueprint.sample.BindingListener"/>
-
-    <reference-list id="ref-list" interface="org.apache.aries.blueprint.sample.InterfaceA">
-        <reference-listener bind-method="bind" unbind-method="unbind" ref="listBindingListener" />
-    </reference-list>
-
-    <bean id="listBindingListener" class="org.apache.aries.blueprint.sample.BindingListener"/>
-
-</blueprint>
-
diff --git a/karaf-2.3.x/deployer/features/NOTICE b/karaf-2.3.x/deployer/features/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/deployer/features/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/deployer/features/pom.xml b/karaf-2.3.x/deployer/features/pom.xml
deleted file mode 100644
index 69c73e8..0000000
--- a/karaf-2.3.x/deployer/features/pom.xml
+++ /dev/null
@@ -1,114 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.deployer</groupId>
-        <artifactId>deployer</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.deployer.features</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Deployer :: Features</name>
-    <description>This deployer can deploy features descriptor on the fly</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.karaf</groupId>
-            <artifactId>org.apache.karaf.util</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.osgi</groupId>
-            <artifactId>spring-osgi-core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.features</groupId>
-            <artifactId>org.apache.karaf.features.core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.fileinstall</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicemix.bundles</groupId>
-            <artifactId>org.apache.servicemix.bundles.junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <!-- Set the blueprint.graceperiod flag to false to allow the bundle to start
-                             See the blueprint config file -->
-                        <Bundle-SymbolicName>${project.artifactId};blueprint.graceperiod:=false</Bundle-SymbolicName>
-                        <Import-Package>
-                            *
-                        </Import-Package>
-                        <Private-Package>
-                            org.apache.karaf.deployer.features,
-                            org.apache.karaf.util;-split-package:=merge-first
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/deployer/features/src/main/java/org/apache/karaf/deployer/features/FeatureDeploymentListener.java b/karaf-2.3.x/deployer/features/src/main/java/org/apache/karaf/deployer/features/FeatureDeploymentListener.java
deleted file mode 100644
index b598749..0000000
--- a/karaf-2.3.x/deployer/features/src/main/java/org/apache/karaf/deployer/features/FeatureDeploymentListener.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.deployer.features;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.*;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import org.apache.karaf.features.internal.FeatureImpl;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Document;
-
-import org.apache.felix.fileinstall.ArtifactUrlTransformer;
-import org.apache.karaf.features.Feature;
-import org.apache.karaf.features.FeaturesNamespaces;
-import org.apache.karaf.features.FeaturesService;
-import org.apache.karaf.features.Repository;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleEvent;
-import org.osgi.framework.BundleListener;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
-/**
- * A deployment listener able to hot deploy a feature descriptor
- */
-public class FeatureDeploymentListener implements ArtifactUrlTransformer, BundleListener {
-
-    public static final String FEATURE_PATH = "org.apache.karaf.shell.features";
-
-    private final Logger logger = LoggerFactory.getLogger(FeatureDeploymentListener.class);
-
-    private DocumentBuilderFactory dbf;
-    private FeaturesService featuresService;
-    private BundleContext bundleContext;
-
-    public void setFeaturesService(FeaturesService featuresService) {
-        this.featuresService = featuresService;
-    }
-
-    public FeaturesService getFeaturesService() {
-        return featuresService;
-    }
-
-    public BundleContext getBundleContext() {
-        return bundleContext;
-    }
-
-    public void setBundleContext(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-
-    public void init() throws Exception {
-        bundleContext.addBundleListener(this);
-        for (Bundle bundle : bundleContext.getBundles()) {
-            if (bundle.getState() == Bundle.RESOLVED || bundle.getState() == Bundle.STARTING
-                    || bundle.getState() == Bundle.ACTIVE)
-            bundleChanged(new BundleEvent(BundleEvent.RESOLVED, bundle));
-        }
-    }
-
-    public void destroy() throws Exception {
-        bundleContext.removeBundleListener(this);
-    }
-
-    private boolean isKnownFeaturesURI(String uri){
-    	if(uri == null){
-    		return true;
-    	}
-    	if(FeaturesNamespaces.URI_0_0_0.equalsIgnoreCase(uri)){
-    		return true;
-    	}
-    	if(FeaturesNamespaces.URI_1_0_0.equalsIgnoreCase(uri)){
-    		return true;
-    	}
-    	if(FeaturesNamespaces.URI_1_1_0.equalsIgnoreCase(uri)){
-    		return true;
-    	}
-    	if(FeaturesNamespaces.URI_CURRENT.equalsIgnoreCase(uri)){
-    		return true;
-    	}
-    	return false;
-    }
-
-    public boolean canHandle(File artifact) {
-        try {
-            if (artifact.isFile() && artifact.getName().endsWith(".xml")) {
-                Document doc = parse(artifact);
-                String name = doc.getDocumentElement().getLocalName();
-                String uri  = doc.getDocumentElement().getNamespaceURI();
-                if ("features".equals(name) ) {
-                	if(isKnownFeaturesURI(uri)){
-                        return true;
-                	} else {
-                		logger.error("unknown features uri", new Exception("" + uri));
-                	}
-                }
-            }
-        } catch (Exception e) {
-            logger.error("Unable to parse deployed file " + artifact.getAbsolutePath(), e);
-        }
-        return false;
-    }
-
-    public URL transform(URL artifact) {
-        // We can't really install the feature right now and just return nothing.
-        // We would not be aware of the fact that the bundle has been uninstalled
-        // and therefore require the feature to be uninstalled.
-        // So instead, create a fake bundle with the file inside, which will be listened by
-        // this deployer: installation / uninstallation of the feature will be done
-        // while the bundle is installed / uninstalled.
-        try {
-            return new URL("feature", null, artifact.toString());
-        } catch (Exception e) {
-            logger.error("Unable to build feature bundle", e);
-            return null;
-        }
-    }
-
-    public void bundleChanged(BundleEvent bundleEvent) {
-            Bundle bundle = bundleEvent.getBundle();
-            if (bundleEvent.getType() == BundleEvent.RESOLVED) {
-                try {
-                    List<URL> urls = new ArrayList<URL>();
-                    Enumeration featuresUrlEnumeration = bundle.findEntries("/META-INF/" + FEATURE_PATH + "/", "*.xml", false);
-                    while (featuresUrlEnumeration != null && featuresUrlEnumeration.hasMoreElements()) {
-                        URL url = (URL) featuresUrlEnumeration.nextElement();
-                        try {
-                            featuresService.addRepository(url.toURI());
-                            URI needRemovedRepo = null;
-                            for (Repository repo : featuresService.listRepositories()) {
-                                if (repo.getURI().equals(url.toURI())) {
-                                    Set<Feature> features = new HashSet<Feature>(Arrays.asList(repo.getFeatures()));
-                                    Set<Feature> autoInstallFeatures = new HashSet<Feature>();
-                                    for(Feature feature:features) {
-                                        if(feature.getInstall().equals(Feature.DEFAULT_INSTALL_MODE)){
-                                            autoInstallFeatures.add(feature);
-                                        }
-                                    }
-                                    featuresService.installFeatures(autoInstallFeatures, EnumSet.noneOf(FeaturesService.Option.class));
-                                } else {
-                                    //remove older out-of-data feature repo
-                                    if (repo.getURI().toString().contains(FEATURE_PATH)) {
-                                        String featureFileName = repo.getURI().toString();
-                                        featureFileName = featureFileName.substring(featureFileName.lastIndexOf('/') + 1);
-                                        String newFeatureFileName = url.toURI().toString();
-                                        newFeatureFileName = newFeatureFileName.substring(newFeatureFileName.lastIndexOf('/') + 1);
-                                        if (featureFileName.equals(newFeatureFileName)) {
-                                            needRemovedRepo = repo.getURI();
-                                        }
-                                    }
-                                }
-                            }
-                            urls.add(url);
-                            if (needRemovedRepo != null) {
-                                featuresService.removeRepository(needRemovedRepo);
-                            }
-                        } catch (Exception e) {
-                            logger.error("Unable to install features", e);
-                        }
-                    }
-                    synchronized (this) {
-                        File file = bundleContext.getDataFile("FeatureDeploymentListener.cfg");
-                        if (file != null) {
-                            Properties props = new Properties();
-                            if (file.exists()) {
-                                InputStream input = new FileInputStream(file);
-                                try {
-                                    props.load(input);
-                                } finally {
-                                    input.close();
-                                }
-                            }
-                            String prefix = bundle.getSymbolicName() + "-" + bundle.getVersion();
-                            props.put(prefix + ".count", Integer.toString(urls.size()));
-                            for (int i = 0; i < urls.size(); i++) {
-                                props.put(prefix + ".url." + i, urls.get(i).toExternalForm());
-                            }
-                            OutputStream output = new FileOutputStream(file);
-                            try {
-                                props.store(output, null);
-                            } finally {
-                                output.close();
-                            }
-                        }
-                    }
-                } catch (Exception e) {
-                    logger.error("Unable to install deployed features for bundle: " + bundle.getSymbolicName() + " - " + bundle.getVersion(), e);
-                }
-            } else if (bundleEvent.getType() == BundleEvent.UNINSTALLED) {
-                try {
-                    synchronized (this) {
-                        File file = bundleContext.getDataFile("FeatureDeploymentListener.cfg");
-                        if (file != null) {
-                            Properties props = new Properties();
-                            if (file.exists()) {
-                                InputStream input = new FileInputStream(file);
-                                try {
-                                    props.load(input);
-                                } finally {
-                                    input.close();
-                                }
-                            }
-                            String prefix = bundle.getSymbolicName() + "-" + bundle.getVersion();
-                            String countStr = (String) props.get(prefix + ".count");
-                            if (countStr != null) {
-                                int count = Integer.parseInt(countStr);
-                                for (int i = 0; i < count; i++) {
-                                    URL url = new URL((String) props.get(prefix + ".url." + i));
-                                    for (Repository repo : featuresService.listRepositories()) {
-                                        try {
-                                            if (repo.getURI().equals(url.toURI())) {
-                                                for (Feature f : repo.getFeatures()) {
-                                                    try {
-                                                        featuresService.uninstallFeature(f.getName(), f.getVersion());
-                                                    } catch (Exception e) {
-                                                        logger.error("Unable to uninstall feature: " + f.getName(), e);
-                                                    }
-                                                }
-                                            }
-                                        } catch (Exception e) {
-                                            logger.error("Unable to uninstall features: " + url, e);
-                                        }
-                                    }
-                                    try {
-                                        featuresService.removeRepository(url.toURI());
-                                    } catch (URISyntaxException e) {
-                                        logger.error("Unable to remove repository: " + url, e);
-                                    }
-                                }
-                            }
-                            for (Iterator<Object> it = props.keySet().iterator(); it.hasNext();) {
-                                if (it.next().toString().startsWith(prefix + ".")) {
-                                    it.remove();
-                                }
-                            }
-                            OutputStream output = new FileOutputStream(file);
-                            try {
-                                props.store(output, null);
-                            } finally {
-                                output.close();
-                            }
-                        }
-                    }
-                } catch (Exception e) {
-                    logger.error("Unable to uninstall deployed features for bundle: " + bundle.getSymbolicName() + " - " + bundle.getVersion(), e);
-                }
-            }
-    }
-
-    protected Document parse(File artifact) throws Exception {
-        if (dbf == null) {
-            dbf = DocumentBuilderFactory.newInstance();
-            dbf.setNamespaceAware(true);
-        }
-        DocumentBuilder db = dbf.newDocumentBuilder();
-        db.setErrorHandler(new ErrorHandler() {
-            public void warning(SAXParseException exception) throws SAXException {
-            }
-            public void error(SAXParseException exception) throws SAXException {
-            }
-            public void fatalError(SAXParseException exception) throws SAXException {
-                throw exception;
-            }
-        });
-        return db.parse(artifact);
-    }
-
-}
diff --git a/karaf-2.3.x/deployer/features/src/main/java/org/apache/karaf/deployer/features/FeatureTransformer.java b/karaf-2.3.x/deployer/features/src/main/java/org/apache/karaf/deployer/features/FeatureTransformer.java
deleted file mode 100644
index 50c4c75..0000000
--- a/karaf-2.3.x/deployer/features/src/main/java/org/apache/karaf/deployer/features/FeatureTransformer.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.deployer.features;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URL;
-import java.util.jar.JarFile;
-import java.util.jar.JarOutputStream;
-import java.util.jar.Manifest;
-import java.util.zip.ZipEntry;
-
-import org.apache.karaf.util.DeployerUtils;
-import org.apache.karaf.util.MvnUtils;
-import org.osgi.framework.Constants;
-
-/**
- * Transform a feature descriptor into an osgi bundle
- */
-public class FeatureTransformer {
-
-    public static void transform(URL url, OutputStream os) throws Exception {
-        // Heuristicly retrieve name and version
-        String name = MvnUtils.getMvnPath(url);
-        int idx = name.lastIndexOf('/');
-        if (idx >= 0) {
-            name = name.substring(idx + 1);
-        }
-        String[] str = DeployerUtils.extractNameVersionType(name);
-        // Create manifest
-        Manifest m = new Manifest();
-        m.getMainAttributes().putValue("Manifest-Version", "2");
-        m.getMainAttributes().putValue(Constants.BUNDLE_MANIFESTVERSION, "2");
-        m.getMainAttributes().putValue(Constants.BUNDLE_SYMBOLICNAME, str[0]);
-        m.getMainAttributes().putValue(Constants.BUNDLE_VERSION, str[1]);
-        // Put content
-        JarOutputStream out = new JarOutputStream(os);
-        ZipEntry e = new ZipEntry(JarFile.MANIFEST_NAME);
-        out.putNextEntry(e);
-        m.write(out);
-        out.closeEntry();
-        e = new ZipEntry("META-INF/");
-        out.putNextEntry(e);
-        e = new ZipEntry("META-INF/" + FeatureDeploymentListener.FEATURE_PATH + "/");
-        out.putNextEntry(e);
-        out.closeEntry();
-        e = new ZipEntry("META-INF/" + FeatureDeploymentListener.FEATURE_PATH + "/" + name);
-        out.putNextEntry(e);
-        InputStream fis = url.openStream();
-        try {
-            copyInputStream(fis, out);
-        } finally {
-            fis.close();
-        }
-        out.closeEntry();
-        out.close();
-        os.close();
-    }
-
-    private static void copyInputStream(InputStream in, OutputStream out) throws IOException {
-        byte[] buffer = new byte[8192];
-        int len = in.read(buffer);
-        while (len >= 0) {
-            out.write(buffer, 0, len);
-            len = in.read(buffer);
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/deployer/features/src/main/java/org/apache/karaf/deployer/features/FeatureURLHandler.java b/karaf-2.3.x/deployer/features/src/main/java/org/apache/karaf/deployer/features/FeatureURLHandler.java
deleted file mode 100644
index 20608b3..0000000
--- a/karaf-2.3.x/deployer/features/src/main/java/org/apache/karaf/deployer/features/FeatureURLHandler.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.deployer.features;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-
-import org.osgi.service.url.AbstractURLStreamHandlerService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * URL handler for features
- */
-public class FeatureURLHandler extends AbstractURLStreamHandlerService {
-
-    private final Logger logger = LoggerFactory.getLogger(FeatureURLHandler.class);
-
-    private static String SYNTAX = "feature: xml-uri";
-
-    private URL featureXmlURL;
-
-    /**
-     * Open the connection for the given URL.
-     *
-     * @param url the url from which to open a connection.
-     * @return a connection on the specified URL.
-     * @throws java.io.IOException if an error occurs or if the URL is malformed.
-     */
-    @Override
-    public URLConnection openConnection(URL url) throws IOException {
-        if (url.getPath() == null || url.getPath().trim().length() == 0) {
-            throw new MalformedURLException("Path cannot be null or empty. Syntax: " + SYNTAX );
-        }
-        featureXmlURL = new URL(url.getPath());
-
-        logger.debug("Features xml URL is: [" + featureXmlURL + "]");
-        return new Connection(url);
-    }
-
-    public URL getFeatureXmlURL() {
-        return featureXmlURL;
-    }
-
-    public class Connection extends URLConnection {
-
-        public Connection(URL url) {
-            super(url);
-        }
-
-        @Override
-        public void connect() throws IOException {
-        }
-
-        @Override
-        public InputStream getInputStream() throws IOException {
-            try {
-                ByteArrayOutputStream os = new ByteArrayOutputStream();
-                FeatureTransformer.transform(featureXmlURL, os);
-                os.close();
-                return new ByteArrayInputStream(os.toByteArray());
-            } catch (Exception e) {
-                logger.error("Error opening features xml url", e);
-                throw (IOException) new IOException("Error opening features xml url").initCause(e);
-            }
-        }
-    }
-
-
-}
diff --git a/karaf-2.3.x/deployer/features/src/main/resources/OSGI-INF/blueprint/features-deployer.xml b/karaf-2.3.x/deployer/features/src/main/resources/OSGI-INF/blueprint/features-deployer.xml
deleted file mode 100644
index 2ecc8ae..0000000
--- a/karaf-2.3.x/deployer/features/src/main/resources/OSGI-INF/blueprint/features-deployer.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           default-activation="lazy">
-
-    <service id="featureUrlHandler" interface="org.osgi.service.url.URLStreamHandlerService">
-    	<service-properties>
-            <entry key="url.handler.protocol" value="feature"/>
-        </service-properties>
-        <bean class="org.apache.karaf.deployer.features.FeatureURLHandler"/>
-    </service>
-
-    <bean id="featureDeploymentListener" class="org.apache.karaf.deployer.features.FeatureDeploymentListener"
-          init-method="init" destroy-method="destroy" activation="lazy">
-        <property name="bundleContext" ref="blueprintBundleContext"/>
-        <property name="featuresService">
-            <reference interface="org.apache.karaf.features.FeaturesService"/>
-        </property>
-    </bean>
-
-    <!-- Force a reference to the url handler above from the osgi registry to (try to) make sure
-         the url handler is registered inside the framework.  Else we can run into timing issues
-         where fileinstall will use the featureDeploymentListener before the url can be actually
-         used.  In order to not block the bundle, the blueprint.graceperiod=false flag must be
-         set on the SymbolicName osgi header -->
-    <reference id="featureUrlHandlerRef" interface="org.osgi.service.url.URLStreamHandlerService" filter="url.handler.protocol=feature" />
-
-    <service ref="featureDeploymentListener" auto-export="interfaces" depends-on="featureUrlHandlerRef"/>
-
-</blueprint>
diff --git a/karaf-2.3.x/deployer/features/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/deployer/features/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index d23030b..0000000
--- a/karaf-2.3.x/deployer/features/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,15 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    The features deployer allow you to drop directly a XML features descriptor in the Karaf deploy directory.
-
-    Karaf will resolve and deploy all features and bundles contained in this features descriptor.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[31mDeployer\u001B[0m section of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/deployer/kar/NOTICE b/karaf-2.3.x/deployer/kar/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/deployer/kar/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/deployer/kar/pom.xml b/karaf-2.3.x/deployer/kar/pom.xml
deleted file mode 100644
index d75b29c..0000000
--- a/karaf-2.3.x/deployer/kar/pom.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.deployer</groupId>
-        <artifactId>deployer</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.deployer.kar</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Deployer :: Karaf Archive (.kar)</name>
-    <description>This deployer can deploy .kar archives on the fly</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-simple</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.osgi</groupId>
-            <artifactId>spring-osgi-core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.features</groupId>
-            <artifactId>org.apache.karaf.features.core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.fileinstall</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicemix.bundles</groupId>
-            <artifactId>org.apache.servicemix.bundles.junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <!-- Set the blueprint.graceperiod flag to false to allow the bundle to start
-                             See the blueprint config file -->
-                        <Bundle-SymbolicName>${project.artifactId};blueprint.graceperiod:=false</Bundle-SymbolicName>
-                        <Import-Package>
-                            *
-                        </Import-Package>
-                        <Private-Package>org.apache.karaf.deployer.kar</Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/deployer/kar/src/main/java/org/apache/karaf/deployer/kar/KarArtifactInstaller.java b/karaf-2.3.x/deployer/kar/src/main/java/org/apache/karaf/deployer/kar/KarArtifactInstaller.java
deleted file mode 100644
index bb7fa5a..0000000
--- a/karaf-2.3.x/deployer/kar/src/main/java/org/apache/karaf/deployer/kar/KarArtifactInstaller.java
+++ /dev/null
@@ -1,490 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.deployer.kar;
-
-import org.apache.felix.fileinstall.ArtifactInstaller;
-import org.apache.karaf.features.Feature;
-import org.apache.karaf.features.FeaturesService;
-import org.apache.karaf.features.Repository;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Document;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-
-public class KarArtifactInstaller implements ArtifactInstaller {
-
-    public static final String FEATURES_CLASSIFIER = "features";
-    private final Logger logger = LoggerFactory.getLogger(KarArtifactInstaller.class);
-
-    private static final String KAR_SUFFIX = ".kar";
-    private static final String ZIP_SUFFIX = ".zip";
-
-    private String base = "./";
-    private String localRepoPath = "./target/system";
-
-    private String timestampPath;
-
-    private DocumentBuilderFactory dbf;
-
-    private FeaturesService featuresService;
-
-    public void init() {
-        dbf = DocumentBuilderFactory.newInstance();
-        dbf.setNamespaceAware(true);
-
-        timestampPath = localRepoPath + File.separator + ".timestamps";
-        File timestampFile = new File(timestampPath);
-        if (!timestampFile.exists() && !timestampFile.mkdirs()) {
-            logger.warn("Unable to create directory for Karaf Archive timestamps. Results may vary...");
-        }
-
-        logger.info("Karaf archives will be extracted to {}", localRepoPath);
-        logger.info("Timestamps for Karaf archives will be extracted to {}", timestampPath);
-    }
-
-    public void destroy() {
-        logger.info("Karaf archive installer destroyed.");
-    }
-
-
-    public void install(File file) throws Exception {
-        // Check to see if this file has already been extracted. For example, on restart of Karaf,
-        // we don't necessarily want to re-extract all the Karaf Archives!
-        if (alreadyExtracted(file)) {
-            logger.info("Ignoring '{}'; timestamp indicates it's already been deployed.", file);
-            return;
-        }
-
-        logger.info("Installing KAR file {}", file);
-
-        File karFile = new File(localRepoPath, file.getName());
-        copy(file.toURI(), karFile);
-
-        ZipFile zipFile = null;
-
-        List<URI> featuresRepositoriesInKar = new ArrayList<URI>();
-
-        try {
-            zipFile = new ZipFile(karFile);
-
-            Enumeration<ZipEntry> entries = (Enumeration<ZipEntry>) zipFile.entries();
-            while (entries.hasMoreElements()) {
-                ZipEntry entry = entries.nextElement();
-
-                String repoEntryName = getRepoEntryName(entry);
-
-                if (repoEntryName != null) {
-                    File extract = extract(zipFile, entry, repoEntryName, localRepoPath);
-                    if (isFeaturesRepository(extract)) {
-                        addToFeaturesRepositories(extract.toURI());
-                        featuresRepositoriesInKar.add(extract.toURI());
-                    }
-                }
-                if (entry.getName().startsWith("resource")) {
-                    String resourceEntryName = entry.getName().substring("resource/".length());
-                    extract(zipFile, entry, resourceEntryName, base);
-                }
-            }
-        } catch (Exception e) {
-            throw e;
-        } finally {
-            if (zipFile != null) {
-                try {
-                    zipFile.close();
-                } catch (Exception e) {
-                    // nothing to do
-                }
-            }
-        }
-
-        installFeatures(featuresRepositoriesInKar);
-
-        updateTimestamp(file);
-    }
-
-
-    /**
-     * Create a destination file using a source URL.
-     *
-     * @param url  the source URL.
-     * @param file the destination file
-     * @throws Exception in case of copy failure
-     */
-    private void copy(URI url, File file) throws Exception {
-        InputStream is = null;
-        FileOutputStream fos = null;
-        try {
-            is = url.toURL().openStream();
-            fos = new FileOutputStream(file);
-            byte[] buffer = new byte[8192];
-            int count = is.read(buffer);
-            while (count >= 0) {
-                fos.write(buffer, 0, count);
-                count = is.read(buffer);
-            }
-        } finally {
-            if (is != null) {
-                try {
-                    is.close();
-                } catch (Exception e) {
-                    // nothing to do
-                }
-            }
-            if (fos != null) {
-                try {
-                    fos.flush();
-                    fos.close();
-                } catch (Exception e) {
-                    // nothing to do
-                }
-            }
-        }
-    }
-
-    private void installFeatures(List<URI> featuresRepositories) {
-        for (Repository repository : featuresService.listRepositories()) {
-            for (URI karFeatureRepoUri : featuresRepositories) {
-                if (repository.getURI().equals(karFeatureRepoUri)) {
-                    try {
-                        for (Feature feature : repository.getFeatures()) {
-                            try {
-                                featuresService.installFeature(feature, EnumSet.noneOf(FeaturesService.Option.class));
-                            } catch (Exception e) {
-                                logger.warn("Unable to install Kar feature {}", feature.getName() + "/" + feature.getVersion(), e);
-                            }
-                        }
-                    } catch (Exception e) {
-                        logger.warn("Can't get features for KAR {}", karFeatureRepoUri, e);
-                    }
-                }
-            }
-        }
-    }
-
-    private void uninstallFeatures(List<URI> featuresRepositories) {
-        for (Repository repository : featuresService.listRepositories()) {
-            for (URI karFeatureRepoUri : featuresRepositories) {
-                if (repository.getURI().equals(karFeatureRepoUri)) {
-                    try {
-                        for (Feature feature : repository.getFeatures()) {
-                            try {
-                                featuresService.uninstallFeature(feature.getName(), feature.getVersion());
-                            } catch (Exception e) {
-                                logger.warn("Unable to uninstall Kar feature {}", feature.getName() + "/" + feature.getVersion(), e);
-                            }
-                        }
-                    } catch (Exception e) {
-                        logger.warn("Can't get features for KAR {}", karFeatureRepoUri, e);
-                    }
-                }
-            }
-        }
-    }
-
-    private File extract(ZipFile zipFile, ZipEntry entry, String repoEntryName, String base) throws IOException {
-        File extract;
-        if (entry.isDirectory()) {
-            extract = new File(base + File.separator + repoEntryName);
-            logger.debug("Creating directory '{}'", extract.getName());
-            extract.mkdirs();
-        } else {
-            extract = new File(base + File.separator + repoEntryName);
-            extract.getParentFile().mkdirs();
-
-            InputStream in = null;
-            FileOutputStream out = null;
-
-            try {
-            in = zipFile.getInputStream(entry);
-            out = new FileOutputStream(extract);
-
-            byte[] buffer = new byte[8192];
-            int count = in.read(buffer);
-            int totalBytes = 0;
-            while (count >= 0) {
-                out.write(buffer, 0, count);
-                totalBytes += count;
-                count = in.read(buffer);
-            }
-
-            logger.debug("Extracted {} bytes to {}", totalBytes, extract);
-            } catch (IOException ioException) {
-                throw ioException;
-            } finally {
-                if (in != null)
-                    try {
-                        in.close();
-                    } catch (Exception e) {
-                        // nothing to do
-                    }
-                if (out != null) {
-                    try {
-                        out.flush();
-                        out.close();
-                    } catch (Exception e) {
-                        // nothing to do
-                    }
-                }
-            }
-        }
-        return extract;
-    }
-
-    private String getRepoEntryName(ZipEntry entry) {
-        String entryName = entry.getName();
-        if (entryName.startsWith("repository")) {
-            return entryName.substring("repository/".length());
-        }
-        if (entryName.startsWith("META-INF") || entryName.startsWith("resources")) {
-            return null;
-
-        }
-        return entryName;
-    }
-
-    public void uninstall(File file) throws Exception {
-        logger.debug("Looking for KAR entries to purge the local repository");
-        File karFile = new File(localRepoPath, file.getName());
-        List<URI> featuresRepositories = new ArrayList<URI>();
-
-        ZipFile zipFile = null;
-
-        try {
-        zipFile = new ZipFile(karFile);
-        Enumeration<ZipEntry> entries = (Enumeration<ZipEntry>) zipFile.entries();
-        while (entries.hasMoreElements()) {
-            ZipEntry entry = entries.nextElement();
-            String repoEntryName = getRepoEntryName(entry);
-            if (repoEntryName != null) {
-                File toDelete = new File(localRepoPath + File.separator + repoEntryName);
-                if (isFeaturesRepository(toDelete)) {
-                    featuresRepositories.add(toDelete.toURI());
-                } else {
-                    if (toDelete.isFile() && toDelete.exists()) {
-                        toDelete.delete();
-                    }
-                }
-            }
-            if (entry.getName().startsWith("resource")) {
-                String resourceEntryName = entry.getName().substring("resource/".length());
-                File toDelete = new File(base + File.separator + resourceEntryName);
-                if (toDelete.isFile() && toDelete.exists()) {
-                    toDelete.delete();
-                }
-            }
-        }
-        } catch (Exception e) {
-            throw e;
-        } finally {
-            if (zipFile != null) {
-                try {
-                    zipFile.close();
-                } catch (Exception e) {
-                    // nothing to do
-                }
-            }
-        }
-
-        uninstallFeatures(featuresRepositories);
-        for (URI featuresRepository : featuresRepositories) {
-            featuresService.removeRepository(featuresRepository);
-            File toDelete = new File(featuresRepository);
-            if (toDelete.exists() && toDelete.isFile()) {
-                toDelete.delete();
-            }
-        }
-
-        karFile.delete();
-
-        File timestamp = getArchiveTimestampFile(file);
-        if (timestamp.exists()) {
-            logger.debug("Removing the timestamp file");
-            timestamp.delete();
-        }
-    }
-
-    public void update(File file) throws Exception {
-        logger.warn("Karaf archive '{}' has been updated; redeploying.", file);
-        uninstall(file);
-        install(file);
-    }
-
-    protected void updateTimestamp(File karafArchive) throws Exception {
-        File timestamp = getArchiveTimestampFile(karafArchive);
-
-        if (timestamp.exists()) {
-            logger.debug("Deleting old timestamp file '{}'", timestamp);
-
-            if (!timestamp.delete()) {
-                throw new Exception("Unable to delete archive timestamp '" + timestamp + "'");
-            }
-        }
-
-        logger.debug("Creating timestamp file '{}'", timestamp);
-        timestamp.createNewFile();
-    }
-
-    protected boolean alreadyExtracted(File karafArchive) {
-        File timestamp = getArchiveTimestampFile(karafArchive);
-        if (timestamp.exists()) {
-            return timestamp.lastModified() >= karafArchive.lastModified();
-        }
-        return false;
-    }
-
-    protected File getArchiveTimestampFile(File karafArchive) {
-        File timestampDir = new File(new File(localRepoPath), ".timestamps");
-        if (!timestampDir.exists()) {
-            timestampDir.mkdirs();
-        }
-        return new File(timestampDir, karafArchive.getName());
-    }
-
-    protected boolean isFeaturesRepository(File artifact) {
-        try {
-            if (artifact.isFile() && artifact.getName().endsWith(".xml")) {
-                Document doc = parse(artifact);
-                String name = doc.getDocumentElement().getLocalName();
-                String uri = doc.getDocumentElement().getNamespaceURI();
-                if ("features".equals(name) && (uri == null || "".equals(uri) || uri.startsWith("http://karaf.apache.org/xmlns/features/v"))) {
-                    return true;
-                }
-            }
-        } catch (Exception e) {
-            logger.debug("File '{}' is not a features file.", artifact.getName(), e);
-        }
-        return false;
-    }
-
-    protected Document parse(File artifact) throws Exception {
-        DocumentBuilder db = dbf.newDocumentBuilder();
-        db.setErrorHandler(new ErrorHandler() {
-            public void warning(SAXParseException exception) throws SAXException {
-            }
-
-            public void error(SAXParseException exception) throws SAXException {
-            }
-
-            public void fatalError(SAXParseException exception) throws SAXException {
-                throw exception;
-            }
-        });
-        return db.parse(artifact);
-    }
-
-    private void addToFeaturesRepositories(URI uri) {
-        // URI mvnUri = pathToMvnUri(path);
-        try {
-            featuresService.removeRepository(uri);
-            featuresService.addRepository(uri);
-            logger.info("Added feature repository '{}'.", uri);
-        } catch (Exception e) {
-            logger.warn("Unable to add repository '{}'", uri, e);
-        }
-    }
-
-    static URI pathToMvnUri(String path) {
-        String[] bits = path.split("/");
-        String classifier = FEATURES_CLASSIFIER;
-        String artifactType = "xml";
-        String version = bits[bits.length - 2];
-        String artifactId = bits[bits.length - 3];
-        StringBuilder buf = new StringBuilder("mvn:");
-        for (int i = 0; i < bits.length - 3; i++) {
-            buf.append(bits[i]);
-            if (i < bits.length - 4) {
-                buf.append(".");
-            }
-        }
-        buf.append("/").append(artifactId).append("/").append(version).append("/").append(artifactType).append("/").append(classifier);
-        URI mvnUri = URI.create(buf.toString());
-        return mvnUri;
-    }
-
-    public boolean canHandle(File file) {
-        // If the file ends with .kar, then we can handle it!
-        //
-        if (file.isFile() && file.getName().endsWith(KAR_SUFFIX)) {
-            logger.info("Found a .kar file to deploy.");
-            return true;
-        }
-        // Otherwise, check to see if it's a zip file containing a META-INF/KARAF.MF manifest.
-        //
-        else if (file.isFile() && file.getName().endsWith(ZIP_SUFFIX)) {
-            logger.debug("Found a .zip file to deploy; checking contents to see if it's a Karaf archive.");
-            try {
-                if (new ZipFile(file).getEntry("META-INF/KARAF.MF") != null) {
-                    logger.info("Found a Karaf archive with .zip prefix; will deploy.");
-                    return true;
-                }
-            } catch (Exception e) {
-                logger.warn("Problem extracting zip file '{}'; ignoring.", file.getName(), e);
-            }
-        }
-
-        return false;
-    }
-
-    public boolean deleteLocalRepository() {
-        return deleteDirectory(new File(localRepoPath));
-    }
-
-    private boolean deleteDirectory(File path) {
-        if (path.exists()) {
-            File[] files = path.listFiles();
-            for (int i = 0; i < files.length; i++) {
-                if (files[i].isDirectory()) {
-                    deleteDirectory(files[i]);
-                } else {
-                    files[i].delete();
-                }
-            }
-        }
-        return (path.delete());
-    }
-
-    public void setBasePath(String base) {
-        this.base = base;
-    }
-
-    public void setLocalRepoPath(String localRepoPath) {
-        this.localRepoPath = localRepoPath;
-    }
-
-    public void setFeaturesService(FeaturesService featuresService) {
-        this.featuresService = featuresService;
-    }
-
-}
diff --git a/karaf-2.3.x/deployer/kar/src/main/resources/OSGI-INF/blueprint/kar-deployer.xml b/karaf-2.3.x/deployer/kar/src/main/resources/OSGI-INF/blueprint/kar-deployer.xml
deleted file mode 100644
index ca94ec3..0000000
--- a/karaf-2.3.x/deployer/kar/src/main/resources/OSGI-INF/blueprint/kar-deployer.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?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.
-	-->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-	xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"
-	default-activation="lazy">
-
-	<ext:property-placeholder placeholder-prefix="$[" placeholder-suffix="]" />
-	
-	<bean id="karArtifactInstaller" class="org.apache.karaf.deployer.kar.KarArtifactInstaller"
-		init-method="init" destroy-method="destroy" activation="lazy">
-			<property name="basePath" value="$[karaf.base]"/>
-            <property name="localRepoPath" value="$[karaf.base]/system"/>
-	        <property name="featuresService">
-	            <reference interface="org.apache.karaf.features.FeaturesService"/>
-	        </property>
-	</bean>
-			
-	<service id="karArtifactInstallerService" 
-		ref="karArtifactInstaller"
-		auto-export="interfaces"/>
-
-</blueprint>
diff --git a/karaf-2.3.x/deployer/kar/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/deployer/kar/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index f6f9a72..0000000
--- a/karaf-2.3.x/deployer/kar/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,16 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    The Karaf KAR is an archive (similar to JAR) containing a set of bundles jar files and features descriptors.
-
-    Karaf deployer explodes the KAR archive and deploy the features descriptors and bundles.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mDeployer\u001B[0m section of the Karaf User Guide.
-    \u001B[36mKAR\u001B[0m section of the Karaf Developer Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/deployer/kar/src/test/java/org/apache/karaf/deployer/kar/KarArtifactInstallerTest.java b/karaf-2.3.x/deployer/kar/src/test/java/org/apache/karaf/deployer/kar/KarArtifactInstallerTest.java
deleted file mode 100644
index bbd31e9..0000000
--- a/karaf-2.3.x/deployer/kar/src/test/java/org/apache/karaf/deployer/kar/KarArtifactInstallerTest.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.deployer.kar;
-
-import org.apache.karaf.features.FeaturesService;
-import org.apache.karaf.features.Repository;
-import org.easymock.EasyMock;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.File;
-import java.net.URI;
-
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.expect;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class KarArtifactInstallerTest {
-    private KarArtifactInstaller karArtifactInstaller;
-    private FeaturesService featuresService;
-
-    private URI goodKarFile;
-    private URI zipFileWithKarafManifest;
-    private URI zipFileWithoutKarafManifest;
-    private URI badZipFile;
-
-    @Before
-    public void setUp() throws Exception {
-        featuresService = createMock(FeaturesService.class);
-
-        karArtifactInstaller = new KarArtifactInstaller();
-
-        karArtifactInstaller.setFeaturesService(featuresService);
-        karArtifactInstaller.setBasePath("./target");
-        karArtifactInstaller.setLocalRepoPath("./target/system");
-
-        karArtifactInstaller.init();
-
-        goodKarFile = getClass().getClassLoader().getResource("goodKarFile.kar").toURI();
-        zipFileWithKarafManifest = getClass().getClassLoader().getResource("karFileAsZip.zip").toURI();
-        zipFileWithoutKarafManifest = getClass().getClassLoader().getResource("karFileAsZipNoManifest.zip").toURI();
-        badZipFile = getClass().getClassLoader().getResource("badZipFile.zip").toURI();
-    }
-
-    @After
-    public void destroy() throws Exception {
-        karArtifactInstaller.destroy();
-        karArtifactInstaller.deleteLocalRepository();
-    }
-
-
-    @Test
-    public void shouldHandleKarFile() throws Exception {
-        assertTrue(karArtifactInstaller.canHandle(new File(goodKarFile)));
-    }
-
-    @Test
-    public void shouldHandleZipFileWithKarafManifest() throws Exception {
-        assertTrue(karArtifactInstaller.canHandle(new File(zipFileWithKarafManifest)));
-    }
-
-    @Test
-    public void shouldIgnoreZipFileWithoutKarafManifest() throws Exception {
-        assertFalse(karArtifactInstaller.canHandle(new File(zipFileWithoutKarafManifest)));
-    }
-
-    @Test
-    public void shouldIgnoreBadZipFile() throws Exception {
-        assertFalse(karArtifactInstaller.canHandle(new File(badZipFile)));
-    }
-
-    @Test
-    public void shouldRecognizeGoodFeaturesFile() throws Exception {
-        File goodFeaturesXml = new File(new URI(getClass().getClassLoader().getResource("goodKarFile/org/foo/goodFeaturesXml.xml").getFile()).getPath());
-        Assert.assertTrue(karArtifactInstaller.isFeaturesRepository(goodFeaturesXml));
-    }
-
-    @Test
-    public void shouldRejectNonFeaturesXMLFile() throws Exception {
-        File goodFeaturesXml = new File(getClass().getClassLoader().getResource("badFeaturesXml.xml").toURI());
-        Assert.assertFalse(karArtifactInstaller.isFeaturesRepository(goodFeaturesXml));
-    }
-
-
-    @Test
-    public void shouldRejectMalformedXMLFile() throws Exception {
-        File malformedXml = new File(getClass().getClassLoader().getResource("malformedXml.xml").toURI());
-        Assert.assertFalse(karArtifactInstaller.isFeaturesRepository(malformedXml));
-    }
-
-    @Test
-    public void shouldExtractAndRegisterFeaturesFromKar() throws Exception {
-        // Setup expectations on the features service
-        featuresService.removeRepository((URI) EasyMock.anyObject());
-        expect(featuresService.listRepositories()).andReturn(new Repository[0]);
-        featuresService.addRepository((URI) EasyMock.anyObject());
-        EasyMock.replay(featuresService);
-
-        // Test
-        //
-        File goodKarFile = new File(new URI(getClass().getClassLoader().getResource("goodKarFile.kar").getFile()).getPath());
-        karArtifactInstaller.install(goodKarFile);
-
-        // Verify expectations.
-        //
-        EasyMock.verify(featuresService);
-    }
-
-    @Test
-    public void shouldLogAndNotThrowExceptionIfCannotAddToFeaturesRepository() throws Exception {
-        // Setup expectations on the features service
-        featuresService.removeRepository((URI) EasyMock.anyObject());
-        expect(featuresService.listRepositories()).andReturn(new Repository[0]);
-        featuresService.addRepository((URI) EasyMock.anyObject());
-        EasyMock.expectLastCall().andThrow(new Exception("Unable to add to repository."));
-        EasyMock.replay(featuresService);
-
-        // Test
-        //
-        File goodKarFile = new File(new URI(getClass().getClassLoader().getResource("goodKarFile.kar").getFile()).getPath());
-        karArtifactInstaller.install(goodKarFile);
-
-        // Verify expectations.
-        //
-        EasyMock.verify(featuresService);
-    }
-
-    @Test
-    public void shouldExtractAndRegisterFeaturesFromZip() throws Exception {
-        // Setup expectations on the features service
-        featuresService.removeRepository((URI) EasyMock.anyObject());
-        expect(featuresService.listRepositories()).andReturn(new Repository[0]);
-        featuresService.addRepository((URI) EasyMock.anyObject());
-        EasyMock.replay(featuresService);
-
-        // Test
-        //
-        File karFileAsZip = new File(new URI(getClass().getClassLoader().getResource("karFileAsZip.zip").getFile()).getPath());
-        karArtifactInstaller.install(karFileAsZip);
-
-        // Verify expectations.
-        //
-        EasyMock.verify(featuresService);
-    }
-
-    @Test(expected = java.io.IOException.class)
-    public void shouldThrowExceptionIfFileDoesNotExist() throws Exception {
-        File nonExistantFile = new File("DoesNotExist");
-        karArtifactInstaller.install(nonExistantFile);
-    }
-
-    @Test
-    public void testPathToMvnUri() throws Exception {
-        URI uri = KarArtifactInstaller.pathToMvnUri("org/apache/geronimo/features/org.apache.geronimo.transaction.kar/3.1.1-SNAPSHOT/org.apache.geronimo.transaction.kar-3.1.1-SNAPSHOT-features.xml");
-        assert "mvn:org.apache.geronimo.features/org.apache.geronimo.transaction.kar/3.1.1-SNAPSHOT/xml/features".equals(uri.toString());
-    }
-
-}
diff --git a/karaf-2.3.x/deployer/kar/src/test/resources/badFeaturesXml.xml b/karaf-2.3.x/deployer/kar/src/test/resources/badFeaturesXml.xml
deleted file mode 100644
index 065b834..0000000
--- a/karaf-2.3.x/deployer/kar/src/test/resources/badFeaturesXml.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
-
-    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.
--->
-<message>This is not a features file!</message>
\ No newline at end of file
diff --git a/karaf-2.3.x/deployer/kar/src/test/resources/badZipFile.zip b/karaf-2.3.x/deployer/kar/src/test/resources/badZipFile.zip
deleted file mode 100644
index b158994..0000000
--- a/karaf-2.3.x/deployer/kar/src/test/resources/badZipFile.zip
+++ /dev/null
@@ -1 +0,0 @@
-This is *not* a well formed .kar file :(
\ No newline at end of file
diff --git a/karaf-2.3.x/deployer/kar/src/test/resources/goodKarFile.kar b/karaf-2.3.x/deployer/kar/src/test/resources/goodKarFile.kar
deleted file mode 100644
index 18abf7d..0000000
--- a/karaf-2.3.x/deployer/kar/src/test/resources/goodKarFile.kar
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/deployer/kar/src/test/resources/goodKarFile/org/foo/goodFeaturesXml.xml b/karaf-2.3.x/deployer/kar/src/test/resources/goodKarFile/org/foo/goodFeaturesXml.xml
deleted file mode 100644
index 70af79f..0000000
--- a/karaf-2.3.x/deployer/kar/src/test/resources/goodKarFile/org/foo/goodFeaturesXml.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?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.
--->
-<features name="goodFeaturesRepo">
-  <feature name='goodFeature' version='1.0.0'>
-  </feature>
- </features>
\ No newline at end of file
diff --git a/karaf-2.3.x/deployer/kar/src/test/resources/karFileAsZip.zip b/karaf-2.3.x/deployer/kar/src/test/resources/karFileAsZip.zip
deleted file mode 100644
index af29c3b..0000000
--- a/karaf-2.3.x/deployer/kar/src/test/resources/karFileAsZip.zip
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/deployer/kar/src/test/resources/karFileAsZip/org/foo/goodFeaturesXml.xml b/karaf-2.3.x/deployer/kar/src/test/resources/karFileAsZip/org/foo/goodFeaturesXml.xml
deleted file mode 100644
index e7b79bf..0000000
--- a/karaf-2.3.x/deployer/kar/src/test/resources/karFileAsZip/org/foo/goodFeaturesXml.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?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.
--->
-<features>
-  <feature name='goodFeature' version='1.0.0'>
-  </feature>
- </features>
\ No newline at end of file
diff --git a/karaf-2.3.x/deployer/kar/src/test/resources/karFileAsZipNoManifest.zip b/karaf-2.3.x/deployer/kar/src/test/resources/karFileAsZipNoManifest.zip
deleted file mode 100644
index d4ced05..0000000
--- a/karaf-2.3.x/deployer/kar/src/test/resources/karFileAsZipNoManifest.zip
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/deployer/kar/src/test/resources/karFileAsZipNoManifest/org/foo/goodFeaturesXml.xml b/karaf-2.3.x/deployer/kar/src/test/resources/karFileAsZipNoManifest/org/foo/goodFeaturesXml.xml
deleted file mode 100644
index e7b79bf..0000000
--- a/karaf-2.3.x/deployer/kar/src/test/resources/karFileAsZipNoManifest/org/foo/goodFeaturesXml.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?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.
--->
-<features>
-  <feature name='goodFeature' version='1.0.0'>
-  </feature>
- </features>
\ No newline at end of file
diff --git a/karaf-2.3.x/deployer/kar/src/test/resources/log4j.properties b/karaf-2.3.x/deployer/kar/src/test/resources/log4j.properties
deleted file mode 100644
index e1a6590..0000000
--- a/karaf-2.3.x/deployer/kar/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-log4j.rootLogger=DEBUG, stdout
-
-#The logging properties used during tests..
-# CONSOLE appender not used by default
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%-5p %-30.30c{1} - %m%n
-log4j.appender.stdout.threshold=DEBUG
diff --git a/karaf-2.3.x/deployer/kar/src/test/resources/malformedXml.xml b/karaf-2.3.x/deployer/kar/src/test/resources/malformedXml.xml
deleted file mode 100644
index 0508c8d..0000000
--- a/karaf-2.3.x/deployer/kar/src/test/resources/malformedXml.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
-
-    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.
--->
-<This is malformed XML.
\ No newline at end of file
diff --git a/karaf-2.3.x/deployer/pom.xml b/karaf-2.3.x/deployer/pom.xml
deleted file mode 100644
index 952b2eb..0000000
--- a/karaf-2.3.x/deployer/pom.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>karaf</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.deployer</groupId>
-    <artifactId>deployer</artifactId>
-    <packaging>pom</packaging>
-    <name>Apache Karaf :: Deployer</name>
-
-    <modules>
-        <module>spring</module>
-        <module>blueprint</module>
-        <module>features</module>
-        <module>kar</module>
-        <module>wrap</module>
-    </modules>
-
-</project>
diff --git a/karaf-2.3.x/deployer/spring/NOTICE b/karaf-2.3.x/deployer/spring/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/deployer/spring/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/deployer/spring/pom.xml b/karaf-2.3.x/deployer/spring/pom.xml
deleted file mode 100644
index 441d649..0000000
--- a/karaf-2.3.x/deployer/spring/pom.xml
+++ /dev/null
@@ -1,113 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.deployer</groupId>
-        <artifactId>deployer</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.deployer.spring</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Deployer :: Spring</name>
-    <description>This deployer transforms a plain spring xml file to a deployable bundle</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.karaf</groupId>
-            <artifactId>org.apache.karaf.util</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-simple</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.osgi</groupId>
-            <artifactId>spring-osgi-core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.fileinstall</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicemix.bundles</groupId>
-            <artifactId>org.apache.servicemix.bundles.junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <!-- Set the blueprint.graceperiod flag to false to allow the bundle to start
-                             See the blueprint config file -->
-                        <Bundle-SymbolicName>${project.artifactId};blueprint.graceperiod:=false</Bundle-SymbolicName>
-                        <Import-Package>*</Import-Package>
-                        <Private-Package>
-                            org.apache.karaf.deployer.spring,
-                            org.apache.karaf.util
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/deployer/spring/src/main/java/org/apache/karaf/deployer/spring/SpringDeploymentListener.java b/karaf-2.3.x/deployer/spring/src/main/java/org/apache/karaf/deployer/spring/SpringDeploymentListener.java
deleted file mode 100644
index a332029..0000000
--- a/karaf-2.3.x/deployer/spring/src/main/java/org/apache/karaf/deployer/spring/SpringDeploymentListener.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.deployer.spring;
-
-import java.io.File;
-import java.net.URL;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Document;
-
-import org.apache.felix.fileinstall.ArtifactUrlTransformer;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.SAXException;
-
-/**
- * A deployment listener that listens for spring xml applications
- * and creates bundles for these.
- */
-public class SpringDeploymentListener implements ArtifactUrlTransformer {
-
-    private final Logger logger = LoggerFactory.getLogger(SpringDeploymentListener.class);
-
-    private DocumentBuilderFactory dbf;
-
-    public boolean canHandle(File artifact) {
-        try {
-            if (artifact.isFile() && artifact.getName().endsWith(".xml")) {
-                Document doc = parse(artifact);
-                String name = doc.getDocumentElement().getLocalName();
-                String uri  = doc.getDocumentElement().getNamespaceURI();
-                if ("beans".equals(name) && "http://www.springframework.org/schema/beans".equals(uri)) {
-                    return true;
-                }
-            }
-        } catch (Exception e) {
-            logger.error("Unable to parse deployed file " + artifact.getAbsolutePath(), e);
-        }
-        return false;
-    }
-
-    public URL transform(URL artifact) {
-        try {
-            return new URL("spring", null, artifact.toString());
-        } catch (Exception e) {
-            logger.error("Unable to build spring application bundle", e);
-            return null;
-        }
-    }
-
-    protected Document parse(File artifact) throws Exception {
-        if (dbf == null) {
-            dbf = DocumentBuilderFactory.newInstance();
-            dbf.setNamespaceAware(true);
-        }
-        DocumentBuilder db = dbf.newDocumentBuilder();
-        db.setErrorHandler(new ErrorHandler() {
-            public void warning(SAXParseException exception) throws SAXException {
-            }
-            public void error(SAXParseException exception) throws SAXException {
-            }
-            public void fatalError(SAXParseException exception) throws SAXException {
-                throw exception;
-            }
-        });
-        return db.parse(artifact);
-    }
-
-}
diff --git a/karaf-2.3.x/deployer/spring/src/main/java/org/apache/karaf/deployer/spring/SpringTransformer.java b/karaf-2.3.x/deployer/spring/src/main/java/org/apache/karaf/deployer/spring/SpringTransformer.java
deleted file mode 100644
index 8d3650e..0000000
--- a/karaf-2.3.x/deployer/spring/src/main/java/org/apache/karaf/deployer/spring/SpringTransformer.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.deployer.spring;
-
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.Properties;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.jar.JarFile;
-import java.util.jar.JarOutputStream;
-import java.util.jar.Manifest;
-import java.util.zip.ZipEntry;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-
-import org.apache.karaf.util.DeployerUtils;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-
-import org.osgi.framework.Constants;
-
-import static org.apache.karaf.util.MvnUtils.getMvnPath;
-
-public class SpringTransformer {
-
-    static Transformer transformer;
-    static DocumentBuilderFactory dbf;
-    static TransformerFactory tf;
-
-
-    public static void transform(URL url, OutputStream os) throws Exception {
-        // Build dom document
-        Document doc = parse(url);
-        // Heuristicly retrieve name and version
-        String name = getMvnPath(url);
-        int idx = name.lastIndexOf('/');
-        if (idx >= 0) {
-            name = name.substring(idx + 1);
-        }
-        String[] str = DeployerUtils.extractNameVersionType(name);
-        // Create manifest
-        Manifest m = new Manifest();
-        m.getMainAttributes().putValue("Manifest-Version", "2");
-        m.getMainAttributes().putValue(Constants.BUNDLE_MANIFESTVERSION, "2");
-        m.getMainAttributes().putValue(Constants.BUNDLE_SYMBOLICNAME, str[0]);
-        m.getMainAttributes().putValue(Constants.BUNDLE_VERSION, str[1]);
-        m.getMainAttributes().putValue("Spring-Context", "*;publish-context:=false;create-asynchronously:=true");
-        String importPkgs = getImportPackages(analyze(new DOMSource(doc)));
-        if (importPkgs != null && importPkgs.length() > 0) {
-            m.getMainAttributes().putValue(Constants.IMPORT_PACKAGE, importPkgs);
-        }
-        m.getMainAttributes().putValue(Constants.DYNAMICIMPORT_PACKAGE, "*");
-        // Extract manifest entries from the DOM
-        NodeList l = doc.getElementsByTagName("manifest");
-        if (l != null) {
-            for (int i = 0; i < l.getLength(); i++) {
-                Element e = (Element) l.item(i);
-                String text = e.getTextContent();
-                Properties props = new Properties();
-                props.load(new ByteArrayInputStream(text.trim().getBytes()));
-                Enumeration en = props.propertyNames();
-                while (en.hasMoreElements()) {
-                    String k = (String) en.nextElement();
-                    String v = props.getProperty(k);
-                    m.getMainAttributes().putValue(k, v);
-                }
-                e.getParentNode().removeChild(e);
-            }
-        }
-
-        JarOutputStream out = new JarOutputStream(os);
-        ZipEntry e = new ZipEntry(JarFile.MANIFEST_NAME);
-        out.putNextEntry(e);
-        m.write(out);
-        out.closeEntry();
-        e = new ZipEntry("META-INF/");
-        out.putNextEntry(e);
-        e = new ZipEntry("META-INF/spring/");
-        out.putNextEntry(e);
-        out.closeEntry();
-        e = new ZipEntry("META-INF/spring/" + name);
-        out.putNextEntry(e);
-        // Copy the new DOM
-        if (tf == null) {
-            tf = TransformerFactory.newInstance();
-        }
-        tf.newTransformer().transform(new DOMSource(doc), new StreamResult(out));
-        out.closeEntry();
-        out.close();
-    }
-
-    public static Set<String> analyze(Source source) throws Exception {
-        if (transformer == null) {
-            if (tf == null) {
-                tf = TransformerFactory.newInstance();
-            }
-            Source s = new StreamSource(SpringTransformer.class.getResourceAsStream("extract.xsl"));
-            transformer = tf.newTransformer(s);
-        }
-
-        Set<String> refers = new TreeSet<String>();
-
-        ByteArrayOutputStream bout = new ByteArrayOutputStream();
-        Result r = new StreamResult(bout);
-        transformer.transform(source, r);
-
-        ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
-        bout.close();
-
-        BufferedReader br = new BufferedReader(new InputStreamReader(bin));
-
-        String line = br.readLine();
-        while (line != null) {
-            line = line.trim();
-            if (line.length() > 0) {
-                String parts[] = line.split("\\s*,\\s*");
-                for (int i = 0; i < parts.length; i++) {
-                    int n = parts[i].lastIndexOf('.');
-                    if (n > 0) {
-                        String pkg = parts[i].substring(0, n);
-                        if (!pkg.startsWith("java.")) {
-                            refers.add(parts[i].substring(0, n));
-                        }
-                    }
-                }
-            }
-            line = br.readLine();
-        }
-        br.close();
-        return refers;
-    }
-
-    protected static String getImportPackages(Set<String> packages) {
-        StringBuilder sb = new StringBuilder();
-        for (String pkg : packages) {
-            if (sb.length() > 0) {
-                sb.append(",");
-            }
-            sb.append(pkg);
-        }
-        return sb.toString();
-    }
-
-    protected static Document parse(URL url) throws Exception {
-        if (dbf == null) {
-            dbf = DocumentBuilderFactory.newInstance();
-            dbf.setNamespaceAware(true);
-        }
-        DocumentBuilder db = dbf.newDocumentBuilder();
-        return db.parse(url.toString());
-    }
-
-}
diff --git a/karaf-2.3.x/deployer/spring/src/main/java/org/apache/karaf/deployer/spring/SpringURLHandler.java b/karaf-2.3.x/deployer/spring/src/main/java/org/apache/karaf/deployer/spring/SpringURLHandler.java
deleted file mode 100644
index d471123..0000000
--- a/karaf-2.3.x/deployer/spring/src/main/java/org/apache/karaf/deployer/spring/SpringURLHandler.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.deployer.spring;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-
-import org.osgi.service.url.AbstractURLStreamHandlerService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * A URL handler that will transform a JBI artifact to an OSGi bundle
- * on the fly.  Needs to be registered in the OSGi registry.
- */
-public class SpringURLHandler extends AbstractURLStreamHandlerService {
-
-	private final Logger logger = LoggerFactory.getLogger(SpringURLHandler.class);
-
-	private static String SYNTAX = "spring: spring-xml-uri";
-
-	private URL springXmlURL;
-
-    /**
-     * Open the connection for the given URL.
-     *
-     * @param url the url from which to open a connection.
-     * @return a connection on the specified URL.
-     * @throws IOException if an error occurs or if the URL is malformed.
-     */
-    @Override
-	public URLConnection openConnection(URL url) throws IOException {
-		if (url.getPath() == null || url.getPath().trim().length() == 0) {
-			throw new MalformedURLException ("Path cannot be null or empty. Syntax: " + SYNTAX );
-		}
-		springXmlURL = new URL(url.getPath());
-
-		logger.debug("Spring xml URL is: [" + springXmlURL + "]");
-		return new Connection(url);
-	}
-	
-	public URL getSpringXmlURL() {
-		return springXmlURL;
-	}
-
-    public class Connection extends URLConnection {
-
-        public Connection(URL url) {
-            super(url);
-        }
-
-        @Override
-        public void connect() throws IOException {
-        }
-
-        @Override
-        public InputStream getInputStream() throws IOException {
-            try {
-                ByteArrayOutputStream os = new ByteArrayOutputStream();
-                SpringTransformer.transform(springXmlURL, os);
-                os.close();
-                return new ByteArrayInputStream(os.toByteArray());
-            } catch (Exception e) {
-                logger.error("Error opening Spring xml url", e);
-                throw (IOException) new IOException("Error opening Spring xml url").initCause(e);
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/deployer/spring/src/main/resources/OSGI-INF/blueprint/spring-deployer.xml b/karaf-2.3.x/deployer/spring/src/main/resources/OSGI-INF/blueprint/spring-deployer.xml
deleted file mode 100644
index b061629..0000000
--- a/karaf-2.3.x/deployer/spring/src/main/resources/OSGI-INF/blueprint/spring-deployer.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
-
-    <service id="springUrlHandler" interface="org.osgi.service.url.URLStreamHandlerService">
-    	<service-properties>
-            <entry key="url.handler.protocol" value="spring"/>
-        </service-properties>
-        <bean class="org.apache.karaf.deployer.spring.SpringURLHandler"/>
-    </service>
-
-    <bean id="springDeploymentListener" class="org.apache.karaf.deployer.spring.SpringDeploymentListener"/>
-
-    <!-- Force a reference to the url handler above from the osgi registry to (try to) make sure
-         the url handler is registered inside the framework.  Else we can run into timing issues
-         where fileinstall will use the featureDeploymentListener before the url can be actually
-         used.  In order to not block the bundle, the blueprint.graceperiod=false flag must be
-         set on the SymbolicName osgi header -->
-    <reference id="springUrlHandlerRef" interface="org.osgi.service.url.URLStreamHandlerService" filter="url.handler.protocol=spring" />
-
-    <service ref="springDeploymentListener" auto-export="interfaces" depends-on="springDeploymentListener" />
-
-</blueprint>
diff --git a/karaf-2.3.x/deployer/spring/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/deployer/spring/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 278f120..0000000
--- a/karaf-2.3.x/deployer/spring/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,15 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    The spring deployer allows you to drop Spring file directly in the Karaf deploy directory.
-
-    Karaf supports "classic" Spring or spring-dm configuration files.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mDeployer\u001B[0m section of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/deployer/spring/src/main/resources/org/apache/karaf/deployer/spring/extract.xsl b/karaf-2.3.x/deployer/spring/src/main/resources/org/apache/karaf/deployer/spring/extract.xsl
deleted file mode 100644
index 4b06b69..0000000
--- a/karaf-2.3.x/deployer/spring/src/main/resources/org/apache/karaf/deployer/spring/extract.xsl
+++ /dev/null
@@ -1,79 +0,0 @@
-<?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.
-
--->
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                xmlns:beans="http://www.springframework.org/schema/beans"
-                xmlns:aop="http://www.springframework.org/schema/aop"
-                xmlns:context="http://www.springframework.org/schema/context"
-                xmlns:jee="http://www.springframework.org/schema/jee"
-                xmlns:jms="http://www.springframework.org/schema/jms"
-                xmlns:lang="http://www.springframework.org/schema/lang"
-                xmlns:osgi-compendium="http://www.springframework.org/schema/osgi-compendium"
-                xmlns:osgi="http://www.springframework.org/schema/osgi"
-                xmlns:tool="http://www.springframework.org/schema/tool"
-                xmlns:tx="http://www.springframework.org/schema/tx"
-                xmlns:util="http://www.springframework.org/schema/util"
-                xmlns:webflow-config="http://www.springframework.org/schema/webflow-config">
-    
-    <xsl:output method="text" />
-
-	<xsl:template match="/">
-
-		<!-- Match all attributes that holds a class or a comma delimited
-		     list of classes and print them -->
-
-		<xsl:for-each select="
-				//beans:bean/@class
-			|	//beans:*/@value-type
- 			|	//aop:*/@implement-interface
-			|	//aop:*/@default-impl
-			|	//context:load-time-weaver/@weaver-class
-			|	//jee:jndi-lookup/@expected-type
-			|	//jee:jndi-lookup/@proxy-interface
-			| 	//jee:remote-slsb/@ejbType
-			|	//jee:*/@business-interface
-			|	//lang:*/@script-interfaces
-			|	//osgi:*/@interface
-			|	//util:list/@list-class
-			|	//util:set/@set-class
-			|	//util:map/@map-class
-			|	//webflow-config:*/@class
-		">
-			<xsl:value-of select="." />
-			<xsl:text>
-			</xsl:text>
-		</xsl:for-each>
-
-		<!-- This seems some magic to get extra imports? -->
-
-		<xsl:for-each select="//beans:bean[@class='org.springframework.osgi.service.exporter.support.OsgiServiceFactoryBean'
-				or @class='org.springframework.osgi.service.importer.support.OsgiServiceProxyFactoryBean']">
-			<xsl:for-each select="beans:property[@name='interfaces']">
-				<xsl:value-of select="@value" />
-				<xsl:text>
-				</xsl:text>
-			</xsl:for-each>
-		</xsl:for-each>
-
-	</xsl:template>
-
-
-</xsl:stylesheet>
-
diff --git a/karaf-2.3.x/deployer/spring/src/main/resources/org/apache/karaf/deployer/spring/spring-deployer-1.0.0.xsd b/karaf-2.3.x/deployer/spring/src/main/resources/org/apache/karaf/deployer/spring/spring-deployer-1.0.0.xsd
deleted file mode 100644
index 1e800a5..0000000
--- a/karaf-2.3.x/deployer/spring/src/main/resources/org/apache/karaf/deployer/spring/spring-deployer-1.0.0.xsd
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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.
-
--->
-<xs:schema elementFormDefault='qualified'
-           targetNamespace='http://karaf.apache.org/xmlns/deployer/spring/v1.0.0'
-           xmlns:xs='http://www.w3.org/2001/XMLSchema'>
-
-    <xs:element name="manifest">
-        <xs:complexType mixed="true">
-            <xs:annotation>
-                <xs:documentation><![CDATA[
-The content of this element will be read using the syntax of the java util Properties
-class (http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html) and will
-override any generated manifest entry.
-                ]]></xs:documentation>
-            </xs:annotation>
-        </xs:complexType>
-    </xs:element>
-
-</xs:schema>
diff --git a/karaf-2.3.x/deployer/spring/src/test/java/org/apache/karaf/deployer/spring/SpringDeploymentListenerTest.java b/karaf-2.3.x/deployer/spring/src/test/java/org/apache/karaf/deployer/spring/SpringDeploymentListenerTest.java
deleted file mode 100644
index 3b567e1..0000000
--- a/karaf-2.3.x/deployer/spring/src/test/java/org/apache/karaf/deployer/spring/SpringDeploymentListenerTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.deployer.spring;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.jar.JarInputStream;
-import javax.xml.transform.dom.DOMSource;
-
-import junit.framework.TestCase;
-
-public class SpringDeploymentListenerTest extends TestCase {
-
-    public void testPackagesExtraction() throws Exception {
-        SpringDeploymentListener l = new SpringDeploymentListener();
-        File f = new File(getClass().getClassLoader().getResource("test.xml").toURI());
-        Set<String> pkgs = SpringTransformer.analyze(new DOMSource(SpringTransformer.parse(f.toURL())));
-        assertNotNull(pkgs);
-        assertEquals(2, pkgs.size());
-        Iterator<String> it = pkgs.iterator();
-        assertEquals("org.apache.karaf.deployer.spring", it.next());
-        assertEquals("org.osgi.service.url", it.next());
-    }
-
-    public void testCustomManifest() throws Exception {
-        File f = File.createTempFile("smx", ".jar");
-        try {
-            OutputStream os = new FileOutputStream(f);
-            SpringTransformer.transform(getClass().getClassLoader().getResource("test.xml"), os);
-            os.close();
-            InputStream is = new FileInputStream(f);
-            JarInputStream jar = new JarInputStream(is);
-            jar.getManifest().write(System.err);
-            is.close();
-        } finally {
-            f.delete();
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/deployer/spring/src/test/resources/test.xml b/karaf-2.3.x/deployer/spring/src/test/resources/test.xml
deleted file mode 100644
index 03d0abc..0000000
--- a/karaf-2.3.x/deployer/spring/src/test/resources/test.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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.
-
--->
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xmlns:osgi="http://www.springframework.org/schema/osgi"
-       xmlns:util="http://www.springframework.org/schema/util"
-       xsi:schemaLocation="
-  http://www.springframework.org/schema/beans
-  http://www.springframework.org/schema/beans/spring-beans.xsd
-  http://www.springframework.org/schema/util
-  http://www.springframework.org/schema/util/spring-util.xsd
-  http://www.springframework.org/schema/osgi
-  http://www.springframework.org/schema/osgi/spring-osgi.xsd">
-
-    <manifest xmlns="http://karaf.apache.org/xmlns/deployer/spring/v1.0.0">
-        RequireBundle=org.osgi
-        Header=value
-    </manifest>
-
-    <bean id="springDeploymentListener" class="org.apache.karaf.deployer.spring.SpringDeploymentListener">
-
-    </bean>
-
-    <osgi:service ref="springDeploymentListener">
-        <osgi:interfaces>
-            <value>org.apache.karaf.deployer.filemonitor.DeploymentListener</value>
-        </osgi:interfaces>
-    </osgi:service>
-
-    <bean id="springHandler" class="org.apache.karaf.deployer.spring.SpringURLHandler" />
-
-    <osgi:service ref="springHandler" interface="org.osgi.service.url.URLStreamHandlerService">
-    	<osgi:service-properties>
-            <entry key="url.handler.protocol" value="spring"/>
-        </osgi:service-properties>
-    </osgi:service>
-
-    <bean id="uri" class="java.net.URI">
-        <constructor-arg value="urn:resource"/>
-    </bean>
-
-</beans>
diff --git a/karaf-2.3.x/deployer/wrap/NOTICE b/karaf-2.3.x/deployer/wrap/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/deployer/wrap/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/deployer/wrap/pom.xml b/karaf-2.3.x/deployer/wrap/pom.xml
deleted file mode 100644
index 88ccb57..0000000
--- a/karaf-2.3.x/deployer/wrap/pom.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.deployer</groupId>
-        <artifactId>deployer</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.deployer.wrap</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Deployer :: Wrap Non OSGi Jar</name>
-    <description>This deployer transforms non OSGi jar files to a deployable bundle.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.karaf</groupId>
-            <artifactId>org.apache.karaf.util</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.fileinstall</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicemix.bundles</groupId>
-            <artifactId>org.apache.servicemix.bundles.junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
-                        <Export-Package>${project.artifactId}*;version=${project.version}</Export-Package>
-                        <Import-Package>*</Import-Package>
-                        <Private-Package>
-                            org.apache.karaf.deployer.wrap,
-                            org.apache.karaf.util
-                        </Private-Package>
-                        <_versionpolicy>${bnd.version.policy}</_versionpolicy>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/karaf-2.3.x/deployer/wrap/src/main/java/org/apache/karaf/deployer/wrap/WrapDeploymentListener.java b/karaf-2.3.x/deployer/wrap/src/main/java/org/apache/karaf/deployer/wrap/WrapDeploymentListener.java
deleted file mode 100644
index 7e0840f..0000000
--- a/karaf-2.3.x/deployer/wrap/src/main/java/org/apache/karaf/deployer/wrap/WrapDeploymentListener.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.deployer.wrap;
-
-import java.io.File;
-import java.net.URL;
-import java.util.jar.Attributes;
-import java.util.jar.JarFile;
-import java.util.jar.Manifest;
-
-import org.apache.felix.fileinstall.ArtifactUrlTransformer;
-import org.apache.karaf.util.DeployerUtils;
-
-/**
- * A deployment listener that listens for non OSGi jar deployements.
- */
-public class WrapDeploymentListener implements ArtifactUrlTransformer {
-
-    public boolean canHandle(File artifact) {
-        try {
-            // only handle .jar files
-            if (!artifact.getPath().endsWith(".jar")) {
-                return false;
-            }
-            JarFile jar = new JarFile(artifact);
-            try {
-                // only handle non OSGi jar
-                Manifest manifest = jar.getManifest();
-                if (manifest != null &&
-                    manifest.getMainAttributes().getValue(new Attributes.Name("Bundle-SymbolicName")) != null &&
-                    manifest.getMainAttributes().getValue(new Attributes.Name("Bundle-Version")) != null) {
-                    return false;
-                }
-                return true;
-            } finally {
-                jar.close();
-            }
-        } catch (Exception e) {
-            return false;
-        }
-    }
-
-    public URL transform(URL artifact) throws Exception {
-        try
-        {
-            String path = artifact.getPath();
-            String name = path.substring( path.lastIndexOf('/') + 1);
-            String[] nv = DeployerUtils.extractNameVersionType( name );
-            return new URL("wrap", null, artifact.toExternalForm() + "$Bundle-SymbolicName=" + nv[0] + "&Bundle-Version=" + nv[1]);
-        } catch (Exception e) {
-            return new URL("wrap", null, artifact.toExternalForm());
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/deployer/wrap/src/main/resources/OSGI-INF/blueprint/wrap-deployer.xml b/karaf-2.3.x/deployer/wrap/src/main/resources/OSGI-INF/blueprint/wrap-deployer.xml
deleted file mode 100644
index c5295a5..0000000
--- a/karaf-2.3.x/deployer/wrap/src/main/resources/OSGI-INF/blueprint/wrap-deployer.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           default-activation="lazy">
-
-    <bean id="wrapDeploymentListener" class="org.apache.karaf.deployer.wrap.WrapDeploymentListener"/>
-
-    <reference id="wrapUrlHandlerRef" interface="org.osgi.service.url.URLStreamHandlerService" filter="url.handler.protocol=wrap"/>
-
-    <service ref="wrapDeploymentListener" auto-export="interfaces" depends-on="wrapDeploymentListener" ranking="-1"/>
-
-
-</blueprint>
\ No newline at end of file
diff --git a/karaf-2.3.x/deployer/wrap/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/deployer/wrap/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index c19e194..0000000
--- a/karaf-2.3.x/deployer/wrap/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,16 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    The wrap deployer allows you to drop non-OSGi jar files into the Karaf deploy directory.
-
-    Karaf will transform the jar files into a deployable OSGi bundle, including creation of the Export-Package and
-    Import-Package statement.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mDeployer\u001B[0m section of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/diagnostic/command/NOTICE b/karaf-2.3.x/diagnostic/command/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/diagnostic/command/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/diagnostic/command/pom.xml b/karaf-2.3.x/diagnostic/command/pom.xml
deleted file mode 100644
index ec6d893..0000000
--- a/karaf-2.3.x/diagnostic/command/pom.xml
+++ /dev/null
@@ -1,101 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.diagnostic</groupId>
-        <artifactId>diagnostic</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.diagnostic.command</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Diagnostic :: Command</name>
-    <description>This bundle provides Karaf diagnostic shell commands.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.diagnostic</groupId>
-            <artifactId>org.apache.karaf.diagnostic.core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            *
-                        </Import-Package>
-                        <Private-Package>!*</Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/diagnostic/command/src/main/java/org/apache/karaf/diagnostic/command/DumpCommand.java b/karaf-2.3.x/diagnostic/command/src/main/java/org/apache/karaf/diagnostic/command/DumpCommand.java
deleted file mode 100644
index 88ec298..0000000
--- a/karaf-2.3.x/diagnostic/command/src/main/java/org/apache/karaf/diagnostic/command/DumpCommand.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*

- * 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.

- */

-package org.apache.karaf.diagnostic.command;

-

-import java.io.File;

-import java.text.SimpleDateFormat;

-import java.util.Date;

-import java.util.LinkedList;

-import java.util.List;

-

-import org.apache.felix.gogo.commands.Argument;

-import org.apache.felix.gogo.commands.Command;

-import org.apache.felix.gogo.commands.Option;

-import org.apache.karaf.diagnostic.core.DumpDestination;

-import org.apache.karaf.diagnostic.core.DumpProvider;

-import org.apache.karaf.diagnostic.core.common.DirectoryDumpDestination;

-import org.apache.karaf.diagnostic.core.common.ZipDumpDestination;

-import org.apache.karaf.shell.console.OsgiCommandSupport;

-

-/**

- * Command to create dump from shell.

- */

-@Command(scope = "dev", name = "create-dump", description = "Creates zip archive with diagnostic info.")

-public class DumpCommand extends OsgiCommandSupport {

-

-    /**

-     * Registered dump providers.

-     */

-    private List<DumpProvider> providers = new LinkedList<DumpProvider>();

-

-    /**

-     * Output format of the filename if not defined otherwise

-     */

-    private SimpleDateFormat dumpFormat = new SimpleDateFormat("yyyy-MM-dd_HHmmss");

-

-    /**

-     * Directory switch.

-     */

-    @Option(name = "-d", aliases = "--directory", description = "Creates dump in directory in place of a ZIP archive")

-    boolean directory;

-

-    /**

-     * Name of created directory or archive.

-     */

-    @Argument(name = "name", description = "Name of created zip or directory", required = false)

-    String fileName;

-

-    @Override

-    protected Object doExecute() throws Exception {

-        DumpDestination destination;

-

-        if (providers.isEmpty()) {

-            session.getConsole().println("Unable to create dump. No providers were found");

-            return null;

-        }

-

-        // create default file name if none provided

-        if (fileName == null || fileName.trim().length() == 0) {

-            fileName = dumpFormat.format(new Date());

-            if (!directory) {

-                fileName += ".zip";

-            }

-        }

-        File target = new File(fileName);

-

-        // if directory switch is on, create dump in directory

-        if (directory) {

-            destination = new DirectoryDumpDestination(target);

-        } else {

-            destination = new ZipDumpDestination(target);

-        }

-

-        for (DumpProvider provider : providers) {

-            provider.createDump(destination);

-        }

-        destination.save();

-        session.getConsole().println("Diagnostic dump created.");

-

-        return null;

-    }

-

-    /**

-     * Sets dump providers to use.

-     * 

-     * @param providers Providers.

-     */

-    public void setProviders(List<DumpProvider> providers) {

-        this.providers = providers;

-    }

-}

diff --git a/karaf-2.3.x/diagnostic/command/src/main/resources/OSGI-INF/blueprint/shell-diagnostic.xml b/karaf-2.3.x/diagnostic/command/src/main/resources/OSGI-INF/blueprint/shell-diagnostic.xml
deleted file mode 100644
index b14434f..0000000
--- a/karaf-2.3.x/diagnostic/command/src/main/resources/OSGI-INF/blueprint/shell-diagnostic.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.0.0">
-        <command name="dev/create-dump">
-            <action class="org.apache.karaf.diagnostic.command.DumpCommand">
-                <property name="providers" ref="providers"/>
-            </action>
-        </command>
-    </command-bundle>
-
-
-    <reference-list id="providers" interface="org.apache.karaf.diagnostic.core.DumpProvider"
-        availability="optional">
-    </reference-list>
-
-</blueprint>
diff --git a/karaf-2.3.x/diagnostic/command/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/diagnostic/command/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 615e359..0000000
--- a/karaf-2.3.x/diagnostic/command/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,16 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides the Karaf shell commands for the Karaf diagnostic.
-
-    The current provided command is:
-    - \u001B[36mdev:create-dump\u001B[0m
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mDiagnostic\u001B[0m section of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/diagnostic/common/NOTICE b/karaf-2.3.x/diagnostic/common/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/diagnostic/common/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/diagnostic/common/pom.xml b/karaf-2.3.x/diagnostic/common/pom.xml
deleted file mode 100644
index a14165c..0000000
--- a/karaf-2.3.x/diagnostic/common/pom.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.diagnostic</groupId>
-        <artifactId>diagnostic</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.diagnostic.common</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Diagnostic :: Common</name>
-    <description>Common provider for the Karaf diagnostic.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.diagnostic</groupId>
-            <artifactId>org.apache.karaf.diagnostic.core</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.features</groupId>
-            <artifactId>org.apache.karaf.features.core</artifactId>
-        </dependency>
-
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            *
-                        </Import-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/diagnostic/common/src/main/java/org/apache/karaf/diagnostic/common/BundleDumpProvider.java b/karaf-2.3.x/diagnostic/common/src/main/java/org/apache/karaf/diagnostic/common/BundleDumpProvider.java
deleted file mode 100644
index 6f72aeb..0000000
--- a/karaf-2.3.x/diagnostic/common/src/main/java/org/apache/karaf/diagnostic/common/BundleDumpProvider.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*

- * 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.

- */

-package org.apache.karaf.diagnostic.common;

-

-import java.io.IOException;

-import java.io.OutputStreamWriter;

-import java.util.HashMap;

-import java.util.Map;

-

-import org.apache.karaf.diagnostic.core.common.TextDumpProvider;

-import org.osgi.framework.Bundle;

-import org.osgi.framework.BundleContext;

-

-/**

- * Dump provider which produces file named bundles.txt with list of

- * installed bundles and it's state.

- */

-public class BundleDumpProvider extends TextDumpProvider {

-

-    /**

-     * Static map with state mask to string representation.

-     */

-    private static Map<Integer, String> stateMap = new HashMap<Integer, String>();

-

-    /**

-     * Map bundle states to string representation.

-     */

-    static {

-        stateMap.put(0x00000001, "UNINSTALLED");

-        stateMap.put(0x00000002, "INSTALLED");

-        stateMap.put(0x00000004, "RESOLVED");

-        stateMap.put(0x00000008, "STARTING");

-        stateMap.put(0x00000010, "STOPPING");

-        stateMap.put(0x00000020, "ACTIVE");

-    }

-

-    /**

-     * Bundle context.

-     */

-    private BundleContext bundleContext;

-

-    /**

-     * Creates new bundle information file.

-     *  

-     * @param context Bundle context to access framework state.

-     */

-    public BundleDumpProvider(BundleContext context) {

-        super("bundles.txt");

-        this.bundleContext = context;

-    }

-

-    /**

-     * {@inheritDoc}

-     */

-    protected void writeDump(OutputStreamWriter writer) throws IOException {

-        // get bundle states

-        Bundle[] bundles = bundleContext.getBundles();

-

-        writer.write("Number of installed bundles " + bundles.length + "\n");

-

-        // create file header

-        writer.write("Id\tSymbolic name\tState\n");

-        for (Bundle bundle : bundles) {

-            // write row :)

-            writer.write(bundle.getBundleId() + "\t" + bundle.getSymbolicName()

-                + "\t" + stateMap.get(bundle.getState()) + "\n");

-        }

-

-        writer.flush();

-    }

-

-}

diff --git a/karaf-2.3.x/diagnostic/common/src/main/java/org/apache/karaf/diagnostic/common/FeaturesDumpProvider.java b/karaf-2.3.x/diagnostic/common/src/main/java/org/apache/karaf/diagnostic/common/FeaturesDumpProvider.java
deleted file mode 100644
index 408057c..0000000
--- a/karaf-2.3.x/diagnostic/common/src/main/java/org/apache/karaf/diagnostic/common/FeaturesDumpProvider.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*

- * 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.

- */

-package org.apache.karaf.diagnostic.common;

-

-import java.io.OutputStreamWriter;

-

-import org.apache.karaf.diagnostic.core.common.TextDumpProvider;

-import org.apache.karaf.features.BundleInfo;

-import org.apache.karaf.features.Feature;

-import org.apache.karaf.features.FeaturesService;

-import org.apache.karaf.features.Repository;

-

-/**

- * Dump provider which add file named features.txt with informations

- * about installed features and repositories.

- */

-public class FeaturesDumpProvider extends TextDumpProvider {

-

-    /**

-     * Feature service.

-     */

-    private final FeaturesService features;

-

-    /**

-     * Creates new dump entry witch contains information about

-     * karaf features.

-     * 

-     * @param features Feature service.

-     */

-    public FeaturesDumpProvider(FeaturesService features) {

-        super("features.txt");

-        this.features = features;

-    }

-

-    /**

-     * {@inheritDoc}

-     */

-    protected void writeDump(OutputStreamWriter outputStreamWriter) throws Exception {

-        // creates header

-        outputStreamWriter.write("Repositories:\n");

-

-        // list repositories

-        for (Repository repo : features.listRepositories()) {

-            outputStreamWriter.write(repo.getURI() + " (" + repo.getName() + ")\n");

-        }

-

-        // list features

-        outputStreamWriter.write("\nfeatures:\n");

-        for (Feature feature : features.listFeatures()) {

-            outputStreamWriter.write(feature.getName() + " " + feature.getVersion());

-            outputStreamWriter.write(" installed: " + features.isInstalled(feature));

-            outputStreamWriter.write("\nBundles:\n");

-            for (BundleInfo bundle : feature.getBundles()) {

-                outputStreamWriter.write("\t" + bundle.getLocation());

-                if (bundle.getStartLevel() != 0) {

-                    outputStreamWriter.write(" start level " + bundle.getStartLevel());

-                }

-                outputStreamWriter.write("\n\n");

-            }

-        }

-

-        // flush & close stream

-        outputStreamWriter.close();

-    }

-

-}

diff --git a/karaf-2.3.x/diagnostic/common/src/main/java/org/apache/karaf/diagnostic/common/LogDumpProvider.java b/karaf-2.3.x/diagnostic/common/src/main/java/org/apache/karaf/diagnostic/common/LogDumpProvider.java
deleted file mode 100644
index 3ce7abe..0000000
--- a/karaf-2.3.x/diagnostic/common/src/main/java/org/apache/karaf/diagnostic/common/LogDumpProvider.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*

- * 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.

- */

-package org.apache.karaf.diagnostic.common;

-

-import java.io.File;

-import java.io.FileInputStream;

-import java.io.IOException;

-import java.io.InputStream;

-import java.io.OutputStream;

-import java.util.Dictionary;

-import java.util.Enumeration;

-

-import org.apache.karaf.diagnostic.core.DumpDestination;

-import org.apache.karaf.diagnostic.core.DumpProvider;

-import org.osgi.framework.BundleContext;

-import org.osgi.framework.ServiceReference;

-import org.osgi.service.cm.Configuration;

-import org.osgi.service.cm.ConfigurationAdmin;

-

-/**

- * Dump provider which copies log files from data/log directory to

- * destination.

- */

-public class LogDumpProvider implements DumpProvider {

-

-    private BundleContext bundleContext;

-

-    public void setBundleContext(BundleContext bundleContext) {

-        this.bundleContext = bundleContext;

-    }

-

-    /**

-     * Attach log entries from directory.

-     */

-    public void createDump(DumpDestination destination) throws Exception {

-        // get the ConfigAdmin service

-        ServiceReference ref = bundleContext.getServiceReference(ConfigurationAdmin.class.getName());

-        if (ref == null) {

-            return;

-        }

-

-        // get the PAX Logging configuration

-        ConfigurationAdmin configurationAdmin = (ConfigurationAdmin) bundleContext.getService(ref);

-        try {

-            Configuration configuration = configurationAdmin.getConfiguration("org.ops4j.pax.logging");

-

-            // get the ".file" Pax Logging Properties

-            Dictionary dictionary = configuration.getProperties();

-            for (Enumeration e = dictionary.keys(); e.hasMoreElements(); ) {

-                String property = (String) e.nextElement();

-                if (property.endsWith(".file")) {

-                    // it's a file appender, get the log file location

-                    String location = (String) dictionary.get(property);

-                    File file = new File(location);

-                    if (file.exists()) {

-                        FileInputStream inputStream = new FileInputStream(file);

-                        OutputStream outputStream = destination.add("log/" + file.getName());

-                        copy(inputStream, outputStream);

-                    }

-                }

-            }

-        } catch (Exception e) {

-            throw e;

-        } finally {

-            bundleContext.ungetService(ref);

-        }

-    }

-

-    /**

-     * Rewrites data from input stream to output stream. This code is very common

-     * but we would avoid additional dependencies in diagnostic stuff.

-     *

-     * @param inputStream  Source stream.

-     * @param outputStream Destination stream.

-     * @throws IOException When IO operation fails.

-     */

-    private void copy(InputStream inputStream, OutputStream outputStream) throws IOException {

-        byte[] buffer = new byte[4096];

-        int n = 0;

-        while (-1 != (n = inputStream.read(buffer))) {

-            outputStream.write(buffer, 0, n);

-        }

-    }

-

-}
\ No newline at end of file
diff --git a/karaf-2.3.x/diagnostic/common/src/main/java/org/apache/karaf/diagnostic/common/ThreadDumpProvider.java b/karaf-2.3.x/diagnostic/common/src/main/java/org/apache/karaf/diagnostic/common/ThreadDumpProvider.java
deleted file mode 100644
index bc1c8c0..0000000
--- a/karaf-2.3.x/diagnostic/common/src/main/java/org/apache/karaf/diagnostic/common/ThreadDumpProvider.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*

- * 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.

- */

-package org.apache.karaf.diagnostic.common;

-

-import java.io.OutputStreamWriter;

-import java.lang.management.ManagementFactory;

-import java.lang.management.ThreadInfo;

-import java.lang.management.ThreadMXBean;

-

-import org.apache.karaf.diagnostic.core.common.TextDumpProvider;

-

-/**

- * Provider which dumps thread info to file named threads.txt.

- */

-public class ThreadDumpProvider extends TextDumpProvider {

-

-    /**

-     * Creates new dump entry which contains information about threads.

-     */

-    public ThreadDumpProvider() {

-        super("threads.txt");

-    }

-

-    @Override

-    protected void writeDump(OutputStreamWriter outputStream) throws Exception {

-        ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();

-

-        outputStream.write("Number of threads: " + threadMXBean.getThreadCount() + "\n");

-

-        for (ThreadInfo threadInfo : threadMXBean.getThreadInfo(threadMXBean.getAllThreadIds(), Integer.MAX_VALUE)) {

-            outputStream.write(threadInfo.toString() + "\n\n");

-        }

-

-    }

-

-}

diff --git a/karaf-2.3.x/diagnostic/common/src/main/resources/OSGI-INF/blueprint/diagnostic-services.xml b/karaf-2.3.x/diagnostic/common/src/main/resources/OSGI-INF/blueprint/diagnostic-services.xml
deleted file mode 100644
index 809c1bb..0000000
--- a/karaf-2.3.x/diagnostic/common/src/main/resources/OSGI-INF/blueprint/diagnostic-services.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
-
-    <bean id="features" class="org.apache.karaf.diagnostic.common.FeaturesDumpProvider">
-        <argument>
-            <reference interface="org.apache.karaf.features.FeaturesService"
-                availability="optional" />
-        </argument>
-    </bean>
-    <service ref="features" auto-export="interfaces" />
-
-    <bean id="logs" class="org.apache.karaf.diagnostic.common.LogDumpProvider">
-        <property name="bundleContext" ref="blueprintBundleContext"/>
-    </bean>
-    <service ref="logs" auto-export="interfaces" />
-
-    <bean id="bundles" class="org.apache.karaf.diagnostic.common.BundleDumpProvider">
-        <argument ref="blueprintBundleContext" />
-    </bean>
-    <service ref="bundles" auto-export="interfaces" />
-
-    <bean id="threads" class="org.apache.karaf.diagnostic.common.ThreadDumpProvider" />
-    <service ref="threads" auto-export="interfaces" />
-
-</blueprint>
diff --git a/karaf-2.3.x/diagnostic/common/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/diagnostic/common/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 697f53d..0000000
--- a/karaf-2.3.x/diagnostic/common/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,19 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    The diagnostic common bundle provides diagnostic services.
-
-    The diagnostic services cover dump on:
-    - features
-    - logs
-    - bundles
-    - threads
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mDiagnostic\u001B[0m section of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/diagnostic/core/NOTICE b/karaf-2.3.x/diagnostic/core/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/diagnostic/core/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/diagnostic/core/pom.xml b/karaf-2.3.x/diagnostic/core/pom.xml
deleted file mode 100644
index 5263e8c..0000000
--- a/karaf-2.3.x/diagnostic/core/pom.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.diagnostic</groupId>
-        <artifactId>diagnostic</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.diagnostic.core</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Diagnostic :: Core</name>
-    <description>Core implementation using Karaf diagnostic using the diagnostic common services</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                        	${project.artifactId};version=${project.version},
-                        	${project.artifactId}.common;version=${project.version};-noimport:=true,
-                       	</Export-Package>
-                        <Import-Package>
-                            *
-                        </Import-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/core/DumpDestination.java b/karaf-2.3.x/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/core/DumpDestination.java
deleted file mode 100644
index 39c4edc..0000000
--- a/karaf-2.3.x/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/core/DumpDestination.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*

- * 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.

- */

-package org.apache.karaf.diagnostic.core;

-

-import java.io.OutputStream;

-

-/**

- * Destination for created dumps.

- */

-public interface DumpDestination {

-

-    /**

-     * Creates new entry in dump destination.

-     * 

-     * Destination does not close returned output stream by default, dump

-     * provider should do this after completing write operation.

-     * 

-     * @param name Name of file in destination.

-     * @return Output stream ready to write.

-     * @throws Exception When entry cannot be added.

-     */

-    OutputStream add(String name) throws Exception;

-

-    /**

-     * Complete creation of the dump.

-     */

-    void save() throws Exception;

-

-}

diff --git a/karaf-2.3.x/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/core/DumpProvider.java b/karaf-2.3.x/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/core/DumpProvider.java
deleted file mode 100644
index ec7724c..0000000
--- a/karaf-2.3.x/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/core/DumpProvider.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*

- * 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.

- */

-package org.apache.karaf.diagnostic.core;

-

-/**

- * Interface which represents instance of tool which can provide dump

- * information.

- */

-public interface DumpProvider {

-

-    /**

-     * Creates dump in given entry.

-     */

-    void createDump(DumpDestination destination) throws Exception;

-

-}

diff --git a/karaf-2.3.x/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/core/common/ClosingEntryOutputStreamWrapper.java b/karaf-2.3.x/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/core/common/ClosingEntryOutputStreamWrapper.java
deleted file mode 100644
index 0c4f9db..0000000
--- a/karaf-2.3.x/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/core/common/ClosingEntryOutputStreamWrapper.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*

- * 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.

- */

-package org.apache.karaf.diagnostic.core.common;

-

-import java.io.IOException;

-import java.io.OutputStream;

-import java.util.zip.ZipOutputStream;

-

-/**

- * Output stream which closes entry instead closing whole stream.

- */

-public class ClosingEntryOutputStreamWrapper extends OutputStream {

-

-    /**

-     * Wrapped ZIP output stream. 

-     */

-    private ZipOutputStream outputStream;

-

-    /**

-     * Creates new OutputStream.

-     * 

-     * @param outputStream Wrapped output stream.

-     */

-    public ClosingEntryOutputStreamWrapper(ZipOutputStream outputStream) {

-        this.outputStream = outputStream;

-    }

-

-    /**

-     * {@inheritDoc}

-     */

-    @Override

-    public void write(int b) throws IOException {

-        outputStream.write(b);

-    }

-

-    /**

-     * {@inheritDoc}

-     */

-    @Override

-    public void write(byte[] b) throws IOException {

-        outputStream.write(b);

-    }

-

-    /**

-     * {@inheritDoc}

-     */

-    @Override

-    public void write(byte[] b, int off, int len)

-        throws IOException {

-        outputStream.write(b, off, len);

-    }

-

-    /**

-     * {@inheritDoc}

-     */

-    @Override

-    public void close() throws IOException {

-        // close entry instead of closing zip stream.

-        outputStream.closeEntry();

-    }

-

-}

diff --git a/karaf-2.3.x/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/core/common/DirectoryDumpDestination.java b/karaf-2.3.x/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/core/common/DirectoryDumpDestination.java
deleted file mode 100644
index 37ae72e..0000000
--- a/karaf-2.3.x/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/core/common/DirectoryDumpDestination.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*

- * 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.

- */

-package org.apache.karaf.diagnostic.core.common;

-

-import java.io.File;

-import java.io.FileOutputStream;

-import java.io.OutputStream;

-

-import org.apache.karaf.diagnostic.core.DumpDestination;

-

-/**

- * Class which packages dumps to given directory.

- */

-public class DirectoryDumpDestination implements DumpDestination {

-

-	/**

-	 * Directory where dump files will be created.

-	 */

-	private File directory;

-

-	public DirectoryDumpDestination(File file) {

-		this.directory = file;

-

-		if (!file.exists()) {

-			file.mkdirs();

-		} 

-	}

-

-	public OutputStream add(String name) throws Exception {

-		File destination = new File(directory, name);

-		if (name.contains("/") || name.contains("\\")) {

-			// if name contains slashes we need to create sub directory

-			destination.getParentFile().mkdirs();

-		}

-		return new FileOutputStream(destination);

-	}

-

-	public void save() throws Exception {

-		// do nothing, all should be written to output streams

-	}

-	

-}

diff --git a/karaf-2.3.x/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/core/common/TextDumpProvider.java b/karaf-2.3.x/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/core/common/TextDumpProvider.java
deleted file mode 100644
index 2faafdc..0000000
--- a/karaf-2.3.x/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/core/common/TextDumpProvider.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*

- * 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.

- */

-package org.apache.karaf.diagnostic.core.common;

-

-import java.io.OutputStream;

-import java.io.OutputStreamWriter;

-

-import org.apache.karaf.diagnostic.core.DumpDestination;

-import org.apache.karaf.diagnostic.core.DumpProvider;

-

-/**

- * Base class for dump providers which writes text to destination.

- */

-public abstract class TextDumpProvider implements DumpProvider {

-

-    /**

-     * Name of the file.

-     */

-    private final String name;

-

-    /**

-     * Creates new dump provider.

-     * 

-     * @param name Name of the file.

-     */

-    protected TextDumpProvider(String name) {

-        this.name = name;

-    }

-

-    /**

-     * {@inheritDoc}

-     */

-    public final void createDump(DumpDestination destination) throws Exception {

-        OutputStream outputStream = destination.add(name);

-        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);

-        try {

-            writeDump(outputStreamWriter);

-        } finally {

-            outputStreamWriter.close();

-            outputStream.close();

-        }

-    }

-

-    /**

-     * This method should create output.

-     * 

-     * @param outputStreamWriter Stream which points to file specified in constructor.

-     * @throws Exception If any problem occur.

-     */

-    protected abstract void writeDump(OutputStreamWriter outputStreamWriter) throws Exception;

-

-}

diff --git a/karaf-2.3.x/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/core/common/ZipDumpDestination.java b/karaf-2.3.x/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/core/common/ZipDumpDestination.java
deleted file mode 100644
index bafd38d..0000000
--- a/karaf-2.3.x/diagnostic/core/src/main/java/org/apache/karaf/diagnostic/core/common/ZipDumpDestination.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*

- * 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.

- */

-package org.apache.karaf.diagnostic.core.common;

-

-import java.io.File;

-import java.io.FileNotFoundException;

-import java.io.FileOutputStream;

-import java.io.OutputStream;

-import java.util.zip.ZipEntry;

-import java.util.zip.ZipOutputStream;

-

-import org.apache.karaf.diagnostic.core.DumpDestination;

-

-/**

- * Class which packages dumps to ZIP archive.

- */

-public class ZipDumpDestination implements DumpDestination {

-

-    /**

-     * Destination streem.

-     */

-    private ZipOutputStream outputStream;

-

-    /**

-     * Creates new dump in given directory.

-     * 

-     * @param directory Target directory.

-     * @param name Name of the archive.

-     */

-    public ZipDumpDestination(File directory, String name) {

-        this(new File(directory, name));

-    }

-

-    /**

-     * Creates new dump in given file (zip archive). 

-     * 

-     * @param file Destination file.

-     */

-    public ZipDumpDestination(File file) {

-        try {

-            outputStream = new ZipOutputStream(new FileOutputStream(

-                file));

-        } catch (FileNotFoundException e) {

-            // sometimes this can occur, but we simply re throw and let 

-            // caller handle exception

-            throw new RuntimeException("Unable to create dump destination", e);

-        }

-    }

-

-    /**

-     * {@inheritDoc}

-     */

-    public OutputStream add(String name) throws Exception {

-        ZipEntry zipEntry = new ZipEntry(name);

-        outputStream.putNextEntry(zipEntry);

-        return new ClosingEntryOutputStreamWrapper(outputStream);

-    }

-

-    /**

-     * Closes archive handle.

-     */

-    public void save() throws Exception {

-        outputStream.close();

-    }

-

-}

diff --git a/karaf-2.3.x/diagnostic/core/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/diagnostic/core/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index d8a62f2..0000000
--- a/karaf-2.3.x/diagnostic/core/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,15 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    The diagnostic core bundle is the diagnostic core implementation.
-
-    It's used by the diagnostic commands bundle and is responsible of the dump generation (features, logs, bundles, threads).
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mDiagnostic\u001B[0m section of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/diagnostic/management/NOTICE b/karaf-2.3.x/diagnostic/management/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/diagnostic/management/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/diagnostic/management/pom.xml b/karaf-2.3.x/diagnostic/management/pom.xml
deleted file mode 100644
index 7f57fe0..0000000
--- a/karaf-2.3.x/diagnostic/management/pom.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.diagnostic</groupId>
-        <artifactId>diagnostic</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.diagnostic.management</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Diagnostic :: Management</name>
-    <description>Expose diagnostic MBeans via JMX.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.diagnostic</groupId>
-            <artifactId>org.apache.karaf.diagnostic.core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.management</groupId>
-            <artifactId>org.apache.karaf.management.server</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
-                        <Export-Package>
-                            ${project.artifactId}*;version=${project.version}
-                        </Export-Package>
-                        <Import-Package>
-                            javax.management,
-                            javax.management.loading,
-                            *
-                        </Import-Package>
-                        <Private-Package>org.apache.karaf.diagnostic.management.internal</Private-Package>
-                        <_versionpolicy>${bnd.version.policy}</_versionpolicy>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/diagnostic/management/src/main/java/org/apache/karaf/diagnostic/management/DiagnosticDumpMBean.java b/karaf-2.3.x/diagnostic/management/src/main/java/org/apache/karaf/diagnostic/management/DiagnosticDumpMBean.java
deleted file mode 100644
index 46384b7..0000000
--- a/karaf-2.3.x/diagnostic/management/src/main/java/org/apache/karaf/diagnostic/management/DiagnosticDumpMBean.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.diagnostic.management;
-
-/**
- * Diagnostic MBean which allows to create dumps over JMX.
- */
-public interface DiagnosticDumpMBean {
-
-    /**
-     * Creates dump over JMX.
-     * 
-     * @param name Name of the dump.
-     * @throws Exception In case of any problems.
-     */
-    void createDump(String name) throws Exception;
-
-    /**
-     * Create dump with directory switch and name.
-     * 
-     * @param directory Should dump be created in directory.
-     * @param name Name of the dump.
-     * @throws Exception In case of any problems.
-     */
-    void createDump(boolean directory, String name) throws Exception;
-
-}
diff --git a/karaf-2.3.x/diagnostic/management/src/main/java/org/apache/karaf/diagnostic/management/internal/DiagnosticDumpMBeanImpl.java b/karaf-2.3.x/diagnostic/management/src/main/java/org/apache/karaf/diagnostic/management/internal/DiagnosticDumpMBeanImpl.java
deleted file mode 100644
index aa850b1..0000000
--- a/karaf-2.3.x/diagnostic/management/src/main/java/org/apache/karaf/diagnostic/management/internal/DiagnosticDumpMBeanImpl.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*

- * Licensed 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.

- */

-package org.apache.karaf.diagnostic.management.internal;

-

-import java.io.File;

-import java.util.List;

-

-import javax.management.NotCompliantMBeanException;

-import javax.management.StandardMBean;

-

-import org.apache.karaf.diagnostic.core.DumpDestination;

-import org.apache.karaf.diagnostic.core.DumpProvider;

-import org.apache.karaf.diagnostic.core.common.DirectoryDumpDestination;

-import org.apache.karaf.diagnostic.core.common.ZipDumpDestination;

-import org.apache.karaf.diagnostic.management.DiagnosticDumpMBean;

-

-/**

- * Implementation of diagnostic mbean.

- */

-public class DiagnosticDumpMBeanImpl extends StandardMBean implements 

-    DiagnosticDumpMBean {

-

-    /**

-     * Dump providers.

-     */

-    private List<DumpProvider> providers;

-

-    /**

-     * Creates new diagnostic mbean.

-     * 

-     * @throws NotCompliantMBeanException

-     */

-    public DiagnosticDumpMBeanImpl() throws NotCompliantMBeanException {

-        super(DiagnosticDumpMBean.class);

-    }

-

-    /**

-     * Creates dump witch given name

-     * 

-     * @param name Name of the dump.

-     */

-    public void createDump(String name) throws Exception {

-        createDump(false, name);

-    }

-

-    /**

-     * {@inheritDoc}

-     */

-    public void createDump(boolean directory, String name) throws Exception {

-        File target = new File(name);

-

-        DumpDestination destination;

-        if (directory) {

-            destination = new DirectoryDumpDestination(target);

-        } else {

-            destination = new ZipDumpDestination(target);

-        }

-

-        for (DumpProvider provider : providers) {

-            provider.createDump(destination);

-        }

-

-        destination.save();

-    }

-

-    /**

-     * Sets dump providers.

-     * 

-     * @param providers Dump providers. 

-     */

-    public void setProviders(List<DumpProvider> providers) {

-        this.providers = providers;

-    }

-

-}

diff --git a/karaf-2.3.x/diagnostic/management/src/main/resources/OSGI-INF/blueprint/diagnostic-management.xml b/karaf-2.3.x/diagnostic/management/src/main/resources/OSGI-INF/blueprint/diagnostic-management.xml
deleted file mode 100644
index 1ff894b..0000000
--- a/karaf-2.3.x/diagnostic/management/src/main/resources/OSGI-INF/blueprint/diagnostic-management.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="eager">
-
-    <reference-list id="providers" availability="optional"
-        interface="org.apache.karaf.diagnostic.core.DumpProvider" />
-
-    <reference id="mbeanServer" interface="javax.management.MBeanServer">
-        <reference-listener ref="mbeanRegister" bind-method="registerMBeanServer" unbind-method="unregisterMBeanServer" />
-    </reference>
-
-    <bean id="mbeanImpl" class="org.apache.karaf.diagnostic.management.internal.DiagnosticDumpMBeanImpl">
-        <property name="providers" ref="providers" />
-    </bean>
-
-    <bean id="mbeanRegister" class="org.apache.karaf.management.MBeanRegistrer" init-method="init" destroy-method="destroy">
-        <property name="mbeans">
-            <map>
-                <entry value="org.apache.karaf:type=diagnostic,name=${karaf.name}"
-                    key-ref="mbeanImpl" />
-            </map>
-        </property>
-    </bean>
-
-</blueprint>
diff --git a/karaf-2.3.x/diagnostic/management/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/diagnostic/management/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index b17e412..0000000
--- a/karaf-2.3.x/diagnostic/management/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,16 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    The diagnostic management bundle exposes Diagnostic MBeans that you can use with any JMX client (for instance JConsole).
-
-    The provided DiagnosticDumpMBean exposes the following operation:
-    \u001B[36mcreateDump()\u001B[0m
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mDiagnostic\u001B[0m and \u001B[36mRemote Management via JMX\u001B[0m for the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/diagnostic/pom.xml b/karaf-2.3.x/diagnostic/pom.xml
deleted file mode 100644
index 7b11b77..0000000
--- a/karaf-2.3.x/diagnostic/pom.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>karaf</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.diagnostic</groupId>
-    <artifactId>diagnostic</artifactId>
-    <packaging>pom</packaging>
-    <name>Apache Karaf :: Diagnostic</name>
-
-    <modules>
-        <module>core</module>
-        <module>command</module>
-        <module>management</module>
-        <module>common</module>
-    </modules>
-
-</project>
diff --git a/karaf-2.3.x/etc/appended-resources/supplemental-models.xml b/karaf-2.3.x/etc/appended-resources/supplemental-models.xml
deleted file mode 100644
index 383f61d..0000000
--- a/karaf-2.3.x/etc/appended-resources/supplemental-models.xml
+++ /dev/null
@@ -1,1349 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<supplementalDataModels>
-  <supplement>
-    <project>
-      <groupId>com.sun.xml.bind</groupId>
-      <artifactId>jaxb-impl</artifactId>
-      <name>Sun JAXB Reference Implementation Runtime</name>
-      <organization>
-        <name>Sun Microsystems</name>
-        <url>http://www.sun.com/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0</name>
-          <url>http://www.sun.com/cddl/cddl.html</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>com.sun.xml.bind</groupId>
-      <artifactId>jaxb-xjc</artifactId>
-      <name>Sun JAXB Reference Implementation Tools</name>
-      <organization>
-        <name>Sun Microsystems</name>
-        <url>http://www.sun.com/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0</name>
-          <url>http://www.sun.com/cddl/cddl.html</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>com.sun.xml.messaging.saaj</groupId>
-      <artifactId>saaj-impl</artifactId>
-      <name>Sun SAAJ Reference Implementation</name>
-      <organization>
-        <name>Sun Microsystems</name>
-        <url>http://www.sun.com/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0</name>
-          <url>http://www.sun.com/cddl/cddl.html</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>javax.xml.soap</groupId>
-      <artifactId>saaj-api</artifactId>
-      <name>Sun SAAJ API</name>
-      <organization>
-        <name>Sun Microsystems</name>
-        <url>http://www.sun.com/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0</name>
-          <url>http://www.sun.com/cddl/cddl.html</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.apache.neethi</groupId>
-      <artifactId>neethi</artifactId>
-      <name>Neethi</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>javax.xml.ws</groupId>
-      <artifactId>jaxws-api</artifactId>
-      <name>Java API for XML-Based Web Services (JAX-WS API)</name>
-      <organization>
-        <name>Sun Microsystems</name>
-        <url>http://www.sun.com/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0</name>
-          <url>http://www.sun.com/cddl/cddl.html</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>javax.xml.bind</groupId>
-      <artifactId>jaxb-api</artifactId>
-      <name>Java Architecture for XML Binding (JAXB API)</name>
-      <organization>
-        <name>Sun Microsystems</name>
-        <url>http://www.sun.com/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0</name>
-          <url>http://www.sun.com/cddl/cddl.html</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>javax.xml</groupId>
-      <artifactId>jaxb-api</artifactId>
-      <name>Java Architecture for XML Binding (JAXB API)</name>
-      <organization>
-        <name>Sun Microsystems</name>
-        <url>http://www.sun.com/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0</name>
-          <url>http://www.sun.com/cddl/cddl.html</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>xalan</groupId>
-      <artifactId>xalan</artifactId>
-      <name>Apache Xalan-Java</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>net.java.dev.stax-utils</groupId>
-      <artifactId>stax-utils</artifactId>
-      <name>StAX Utilities</name>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>wss4j</groupId>
-      <artifactId>wss4j</artifactId>
-      <name>Apache WSS4J</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>jdom</groupId>
-      <artifactId>jdom</artifactId>
-      <name>JDOM</name>
-      <organization>
-        <name>jdom.org</name>
-        <url>http://www.jdom.org</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>Modified Apache Software License</name>
-          <url>licenses/jdom.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>xml-security</groupId>
-      <artifactId>xmlsec</artifactId>
-      <name>XML Security</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>xml-apis</groupId>
-      <artifactId>xml-apis</artifactId>
-      <name>XML APIs</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>bouncycastle</groupId>
-      <artifactId>bcprov-jdk14</artifactId>
-      <name>Bouncy Castle Crypto APIs for Java</name>
-      <organization>
-        <name>The Legion of the Bouncy Castle</name>
-        <url>http://www.bouncycastle.org</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>Bouncy Castle License</name>
-          <url>http://www.bouncycastle.org/licence.html</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>ant</groupId>
-      <artifactId>ant</artifactId>
-      <name>Apache Ant</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>ant</groupId>
-      <artifactId>ant-nodeps</artifactId>
-      <name>Apache Ant (nodeps)</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.codehaus.jettison</groupId>
-      <artifactId>jettison</artifactId>
-      <name>Jettison</name>
-      <organization>
-        <name>Envoi Solutions LLC</name>
-        <url>http://www.envoisolutions.com</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://jettison.codehaus.org/License</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.apache.mina</groupId>
-      <artifactId>mina-core</artifactId>
-      <name>Apache MINA Core API</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.apache.mina</groupId>
-      <artifactId>mina-filter-ssl</artifactId>
-      <name>Apache MINA SSL Filter</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
-      <name>Apache Commons Codec</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>commons-collections</groupId>
-      <artifactId>commons-collections</artifactId>
-      <name>Apache Commons Collections</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>commons-dbcp</groupId>
-      <artifactId>commons-dbcp</artifactId>
-      <name>Apache Commons DBCP</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>commons-jexl</groupId>
-      <artifactId>commons-jexl</artifactId>
-      <name>Apache Commons JEXL</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>commons-logging</groupId>
-      <artifactId>commons-logging</artifactId>
-      <name>Apache Commons Logging</name>
-      <url>http://commons.apache.org/logging</url>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>commons-logging</groupId>
-      <artifactId>commons-logging-api</artifactId>
-      <name>Apache Commons Logging Api</name>
-      <url>http://commons.apache.org/logging</url>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>commons-pool</groupId>
-      <artifactId>commons-pool</artifactId>
-      <name>Apache Commons Pool</name>
-      <url>http://commons.apache.org/pool</url>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>commons-vfs</groupId>
-      <artifactId>commons-vfs</artifactId>
-      <name>Apache Commons VFS</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
-      <name>Apache Commons Codec</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.apache.aries.blueprint</groupId>
-      <artifactId>org.apache.aries.blueprint</artifactId>
-      <name>Apache Aries Blueprint</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.apache.activemq</groupId>
-      <artifactId>activemq-core</artifactId>
-      <name>ActiveMQ :: Core</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.apache.camel</groupId>
-      <artifactId>camel-core</artifactId>
-      <name>Camel :: Core</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.apache.xbean</groupId>
-      <artifactId>xbean-classloader</artifactId>
-      <name>XBean :: Classloader</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.apache.xbean</groupId>
-      <artifactId>xbean-finder</artifactId>
-      <name>XBean :: Classpath Resource Finder</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.apache.xbean</groupId>
-      <artifactId>xbean-naming</artifactId>
-      <name>XBean :: Naming</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.apache.xbean</groupId>
-      <artifactId>xbean-reflect</artifactId>
-      <name>XBean :: Reflect</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.apache.xbean</groupId>
-      <artifactId>xbean-spring</artifactId>
-      <name>XBean :: Spring</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-      <name>SLF4J API Module</name>
-      <organization>
-        <name>QOS.ch</name>
-        <url>http://www.qos.ch</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>MIT style</name>
-          <url>http://www.slf4j.org/license.html</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-jdk14</artifactId>
-      <name>SLF4J JDK14 Binding</name>
-      <organization>
-        <name>QOS.ch</name>
-        <url>http://www.qos.ch</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>MIT style</name>
-          <url>http://www.slf4j.org/license.html</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>log4j</groupId>
-      <artifactId>log4j</artifactId>
-      <name>Log4j</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.apache.geronimo.components</groupId>
-      <artifactId>geronimo-connector</artifactId>
-      <name>Apache Geronimo TxManager :: Connector</name> 
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.apache.geronimo.components</groupId>
-      <artifactId>geronimo-transaction</artifactId>
-      <name>Apache Geronimo TxManager :: Transaction</name> 
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.springframework.osgi</groupId>
-      <artifactId>spring-osgi-core</artifactId>
-      <name>Spring OSGi Core</name>
-      <url>http://www.springframework.org/osgi/</url>
-      <organization>
-        <name>Spring Framework</name>
-        <url>http://www.springframework.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.springframework.osgi</groupId>
-      <artifactId>spring-osgi-extender</artifactId>
-      <name>Spring OSGi Extender</name>
-      <url>http://www.springframework.org/osgi/</url>
-      <organization>
-        <name>Spring Framework</name>
-        <url>http://www.springframework.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.springframework.osgi</groupId>
-      <artifactId>spring-osgi-io</artifactId>
-      <name>Spring OSGi IO</name>
-      <url>http://www.springframework.org/osgi/</url>
-      <organization>
-        <name>Spring Framework</name>
-        <url>http://www.springframework.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.springframework.osgi</groupId>
-      <artifactId>spring-osgi-annotation</artifactId>
-      <name>Spring OSGi Annotations</name>
-      <url>http://www.springframework.org/osgi/</url>
-      <organization>
-        <name>Spring Framework</name>
-        <url>http://www.springframework.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.objectweb.howl</groupId>
-      <artifactId>howl</artifactId>
-      <name>Howl Logger</name>
-      <url>http://howl.objectweb.org/</url>
-      <organization>
-        <name>ObjectWeb</name>
-        <url>http://www.objectweb.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The BSD License</name>
-          <url>http://howl.objectweb.org/license.html</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-classworlds</artifactId>
-      <name>Plexus Classworlds</name>
-      <url>http://plexus.codehaus.org/plexus-classworlds/</url>
-      <organization>
-        <name>Codehaus</name>
-        <url>http://www.codehaus.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>com.thoughtworks.xstream</groupId>
-      <artifactId>xstream</artifactId>
-      <name>XStream Core</name>
-      <url>http://xstream.codehaus.org/</url>
-      <organization>
-        <name>Codehaus</name>
-        <url>http://www.codehaus.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The BSD License</name>
-          <url>http://xstream.codehaus.com/license.html</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.apache.servicemix.specs</groupId>
-      <artifactId>org.apache.servicemix.specs.activation-api-1.1</artifactId>
-      <name>Apache ServiceMix Specs :: Activation 1.1</name>
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-j2ee-connector_1.5_spec</artifactId>
-      <name>Apache Geronimo Specs :: J2EE Connector 1.5</name> 
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-j2ee-management_1.1_spec</artifactId>
-      <name>Apache Geronimo Specs :: J2EE Management 1.1</name> 
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-javamail_1.4_spec</artifactId>
-      <name>Apache Geronimo Specs :: JavaMail 1.4</name> 
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-jms_1.1_spec</artifactId>
-      <name>Apache Geronimo Specs :: JMS 1.1</name> 
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-jta_1.1_spec</artifactId>
-      <name>Apache Geronimo Specs :: JTA 1.1</name> 
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-saaj_1.3_spec</artifactId>
-      <name>Apache Geronimo Specs :: SAAJ 1.3</name> 
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-servlet_2.5_spec</artifactId>
-      <name>Apache Geronimo Specs :: Servlet 2.5</name> 
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-    </project>
-  </supplement>
- <supplement>
-    <project>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-stax-api_1.0_spec</artifactId>
-      <name>Apache Geronimo Specs :: Stax API 1.0</name> 
-      <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://www.apache.org/</url>
-      </organization>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>jline</groupId>
-      <artifactId>jline</artifactId>
-      <name>JLine</name>
-      <url>http://jline.sourceforge.net</url>
-      <organization>
-        <name>JLine</name>
-        <url>http://jline.sourceforge.net</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The BSD License</name>
-          <url>http://jline.sourceforge.net/license.html</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.mortbay.jetty</groupId>
-      <artifactId>jetty</artifactId>
-      <name>Jetty Server</name>
-      <url>http://jetty.mortbay.org/</url>
-      <organization>
-	    <name>Mort Bay Consulting</name>
-	    <url>http://www.mortbay.com</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.mortbay.jetty</groupId>
-      <artifactId>jetty-util</artifactId>
-      <name>Jetty Utilities</name>
-      <url>http://jetty.mortbay.org/</url>
-      <organization>
-	    <name>Mort Bay Consulting</name>
-	    <url>http://www.mortbay.com</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.ops4j.base</groupId>
-      <artifactId>ops4j-base-lang</artifactId>
-      <name>OPS4J Base - Lang</name>
-      <url>http://www.ops4j.org/projects/base/ops4j-base-lang</url>
-	  <organization>
-	    <name>OPS4J - Open Participation Software for Java</name>
-	    <url>http://www.ops4j.org/</url>
-	  </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.ops4j.base</groupId>
-      <artifactId>ops4j-base-util-collections</artifactId>
-      <name>OPS4J Base - Util - Collections</name>
-      <url>http://www.ops4j.org/projects/base/ops4j-base-util-collections</url>
-	  <organization>
-	    <name>OPS4J - Open Participation Software for Java</name>
-	    <url>http://www.ops4j.org/</url>
-	  </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.ops4j.base</groupId>
-      <artifactId>ops4j-base-util-xml</artifactId>
-      <name>OPS4J Base - Util - XML</name>
-      <url>http://www.ops4j.org/projects/base/ops4j-base-util-xml</url>
-	  <organization>
-	    <name>OPS4J - Open Participation Software for Java</name>
-	    <url>http://www.ops4j.org/</url>
-	  </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.ops4j.pax.logging</groupId>
-      <artifactId>pax-logging-api</artifactId>
-      <name>OPS4J - Pax Logging API</name>
-      <url>http://www.ops4j.org/projects/pax/logging/pax-logging-api</url>
-	  <organization>
-	    <name>OPS4J - Open Participation Software for Java</name>
-	    <url>http://www.ops4j.org/</url>
-	  </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.ops4j.pax.logging</groupId>
-      <artifactId>pax-logging-service</artifactId>
-      <name>OPS4J - Pax Logging Service</name>
-      <url>http://www.ops4j.org/projects/pax/logging/pax-logging-service</url>
-	  <organization>
-	    <name>OPS4J - Open Participation Software for Java</name>
-	    <url>http://www.ops4j.org/</url>
-	  </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.ops4j.pax.swissbox</groupId>
-      <artifactId>pax-swissbox-core</artifactId>
-      <name>OPS4J Pax Swissbox - OSGi Core</name>
-      <url>http://www.ops4j.org/projects/pax/swissbox/pax-swissbox-core</url>
-	  <organization>
-	    <name>OPS4J - Open Participation Software for Java</name>
-	    <url>http://www.ops4j.org/</url>
-	  </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.ops4j.pax.swissbox</groupId>
-      <artifactId>pax-swissbox-extender</artifactId>
-      <name>OPS4J Pax Swissbox - Extender</name>
-      <url>http://www.ops4j.org/projects/pax/swissbox/pax-swissbox-extender</url>
-	  <organization>
-	    <name>OPS4J - Open Participation Software for Java</name>
-	    <url>http://www.ops4j.org/</url>
-	  </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.ops4j.pax.swissbox</groupId>
-      <artifactId>pax-swissbox-lifecycle</artifactId>
-      <name>OPS4J Pax Swissbox - Lifecycle</name>
-      <url>http://www.ops4j.org/projects/pax/swissbox/pax-swissbox-lifecycle</url>
-	  <organization>
-	    <name>OPS4J - Open Participation Software for Java</name>
-	    <url>http://www.ops4j.org/</url>
-	  </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.ops4j.pax.swissbox</groupId>
-      <artifactId>pax-swissbox-optional-jcl</artifactId>
-      <name>OPS4J Pax Swissbox - Optional JCL</name>
-      <url>http://www.ops4j.org/projects/pax/swissbox/pax-swissbox-optional-jcl</url>
-	  <organization>
-	    <name>OPS4J - Open Participation Software for Java</name>
-	    <url>http://www.ops4j.org/</url>
-	  </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.ops4j.pax.swissbox</groupId>
-      <artifactId>pax-swissbox-tracker</artifactId>
-      <name>OPS4J Pax Swissbox - Tracker</name>
-      <url>http://www.ops4j.org/projects/pax/swissbox/pax-swissbox-tracker</url>
-	  <organization>
-	    <name>OPS4J - Open Participation Software for Java</name>
-	    <url>http://www.ops4j.org/</url>
-	  </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.ops4j.pax.url</groupId>
-      <artifactId>pax-url-mvn</artifactId>
-      <name>OPS4J Pax Url - mvn:</name>
-      <url>http://www.ops4j.org/projects/pax/url/pax-url-mvn</url>
-	  <organization>
-	    <name>OPS4J - Open Participation Software for Java</name>
-	    <url>http://www.ops4j.org/</url>
-	  </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.ops4j.pax.url</groupId>
-      <artifactId>pax-url-war</artifactId>
-      <name>OPS4J Pax Url - war:</name>
-      <url>http://www.ops4j.org/projects/pax/url/pax-url-war</url>
-	  <organization>
-	    <name>OPS4J - Open Participation Software for Java</name>
-	    <url>http://www.ops4j.org/</url>
-	  </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.ops4j.pax.web</groupId>
-      <artifactId>pax-web-bundle</artifactId>
-      <name>OPS4J Pax Web - Web Container</name>
-      <url>http://www.ops4j.org/projects/pax/web/pax-web-bundle</url>
-	  <organization>
-	    <name>OPS4J - Open Participation Software for Java</name>
-	    <url>http://www.ops4j.org/</url>
-	  </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.ops4j.pax.web</groupId>
-      <artifactId>pax-web-jsp</artifactId>
-      <name>OPS4J Pax Web - JSP</name>
-      <url>http://www.ops4j.org/projects/pax/web/pax-web-jsp</url>
-	  <organization>
-	    <name>OPS4J - Open Participation Software for Java</name>
-	    <url>http://www.ops4j.org/</url>
-	  </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.ops4j.pax.web-extender</groupId>
-      <artifactId>pax-web-ex-war</artifactId>
-      <name>OPS4J Pax Web Extender - WAR</name>
-      <url>http://www.ops4j.org/projects/pax/web-extender/pax-web-ex-war</url>
-	  <organization>
-	    <name>OPS4J - Open Participation Software for Java</name>
-	    <url>http://www.ops4j.org/</url>
-	  </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.ops4j.pax.web-extender</groupId>
-      <artifactId>pax-web-ex-whiteboard</artifactId>
-      <name>OPS4J Pax Web Extender - Whiteboard</name>
-      <url>http://www.ops4j.org/projects/pax/web-extender/pax-web-ex-whiteboard</url>
-	  <organization>
-	    <name>OPS4J - Open Participation Software for Java</name>
-	    <url>http://www.ops4j.org/</url>
-	  </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.osgi</groupId>
-      <artifactId>org.osgi.impl.bundle.jmx</artifactId>
-      <name>JMX management for OSGi (RI snapshot)</name>
-      <organization>
-        <name>OSGi Alliance</name>
-        <url>http://www.osgi.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.fusesource.jansi</groupId>
-      <artifactId>jansi</artifactId>
-      <name>jansi</name>
-      <organization>
-        <name>FUSE Source</name>
-        <url>http://www.fusesource.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>The Apache Software License, Version 2.0</name>
-          <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>org.eclipse</groupId>
-      <artifactId>osgi</artifactId>
-      <name>Equinox Framework</name>
-      <organization>
-        <name>Eclipse Foundation</name>
-        <url>http://www.eclipse.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>Eclipse Public License, Version 1.0</name>
-          <url>http://www.eclipse.org/legal/epl-v10.html</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>xmlpull</groupId>
-      <artifactId>xmlpull</artifactId>
-      <name>XML Pull Parsing API</name>
-      <organization>
-        <name>Eclipse Foundation</name>
-        <url>http://www.eclipse.org/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>Public Domain</name>
-          <url>http://www.xmlpull.org/v1/download/unpacked/LICENSE.txt</url>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-  <supplement>
-    <project>
-      <groupId>aopalliance</groupId>
-      <artifactId>aopalliance</artifactId>
-      <name>XML Pull Parsing API</name>
-      <organization>
-        <name>AOP Alliance</name>
-        <url>http://aopalliance.sourceforge.net/</url>
-      </organization>
-      <licenses>
-        <license>
-          <name>Public Domain</name>
-        </license>
-      </licenses>
-    </project>
-  </supplement>
-</supplementalDataModels>
diff --git a/karaf-2.3.x/exception/NOTICE b/karaf-2.3.x/exception/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/exception/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/exception/pom.xml b/karaf-2.3.x/exception/pom.xml
deleted file mode 100644
index b7c18f4..0000000
--- a/karaf-2.3.x/exception/pom.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>karaf</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.exception</artifactId>
-    <name>Apache Karaf :: Exception</name>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-</project>
diff --git a/karaf-2.3.x/exception/src/main/java/java/lang/Exception.java b/karaf-2.3.x/exception/src/main/java/java/lang/Exception.java
deleted file mode 100644
index 2be5593..0000000
--- a/karaf-2.3.x/exception/src/main/java/java/lang/Exception.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- *  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.
- */
-
-package java.lang;
-
-
-/**
- * {@code Exception} is the superclass of all classes that represent recoverable
- * exceptions. When exceptions are thrown, they may be caught by application
- * code.
- *
- * @see Throwable
- * @see Error
- * @see RuntimeException
- */
-public class Exception extends Throwable {
-    private static final long serialVersionUID = -3387516993124229948L;
-
-    private transient Class[] classContext = SecurityManagerEx.getInstance().getThrowableContext(this);
-
-    /**
-     * Constructs a new {@code Exception} that includes the current stack trace.
-     */
-    public Exception() {
-        super();
-    }
-
-    /**
-     * Constructs a new {@code Exception} with the current stack trace and the
-     * specified detail message.
-     *
-     * @param detailMessage
-     *            the detail message for this exception.
-     */
-    public Exception(String detailMessage) {
-        super(detailMessage);
-    }
-
-    /**
-     * Constructs a new {@code Exception} with the current stack trace, the
-     * specified detail message and the specified cause.
-     *
-     * @param detailMessage
-     *            the detail message for this exception.
-     * @param throwable
-     *            the cause of this exception.
-     */
-    public Exception(String detailMessage, Throwable throwable) {
-        super(detailMessage, throwable);
-    }
-
-    /**
-     * Constructs a new {@code Exception} with the current stack trace and the
-     * specified cause.
-     *
-     * @param throwable
-     *            the cause of this exception.
-     */
-    public Exception(Throwable throwable) {
-        super(throwable);
-    }
-
-    public Class[] getClassContext() {
-        return classContext;
-    }
-
-    private static class SecurityManagerEx extends SecurityManager
-    {
-
-        private static SecurityManagerEx sm;
-
-        public static SecurityManagerEx getInstance() {
-            // No synchronized block because we don't really care
-            // if multiple instances are created at some point
-            if (sm == null) {
-                sm = new SecurityManagerEx();
-            }
-            return sm;
-        }
-
-        public Class[] getThrowableContext(Throwable t) {
-            try {
-                Class[] context = getClassContext();
-                int nb = 0;
-                for (;;) {
-                    if (context[context.length - 1 - nb] == t.getClass()) {
-                        break;
-                    }
-                    nb++;
-                }
-                Class[] nc = new Class[nb];
-                System.arraycopy(context, context.length - nb, nc, 0, nb);
-                return nc;
-            } catch (Exception e) {
-                return null;
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/features/command/NOTICE b/karaf-2.3.x/features/command/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/features/command/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/features/command/pom.xml b/karaf-2.3.x/features/command/pom.xml
deleted file mode 100644
index e4a9fed..0000000
--- a/karaf-2.3.x/features/command/pom.xml
+++ /dev/null
@@ -1,140 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.features</groupId>
-        <artifactId>features</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.features.command</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Features :: Command</name>
-    <description>This bundle provides the Karaf shell commands to manipulate features.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.features</groupId>
-            <artifactId>org.apache.karaf.features.core</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.bundlerepository</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.obr</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.osgi</groupId>
-            <artifactId>spring-osgi-core</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicemix.bundles</groupId>
-            <artifactId>org.apache.servicemix.bundles.junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymock</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-jdk14</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            javax.management,
-                            javax.management.loading,
-                            org.apache.felix.service.command,
-                            org.apache.felix.gogo.commands,
-                            org.apache.karaf.shell.console,
-                            *
-                        </Import-Package>
-                        <Private-Package>
-                            !*
-						</Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/AddUrlCommand.java b/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/AddUrlCommand.java
deleted file mode 100644
index ecd6609..0000000
--- a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/AddUrlCommand.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.command;
-
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.features.FeaturesService;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.shell.console.MultiException;
-
-@Command(scope = "features", name = "addUrl", description = "Adds a list of repository URLs to the features service")
-public class AddUrlCommand extends FeaturesCommandSupport {
-
-    @Argument(index = 0, name = "urls", description = "One or more repository URLs separated by whitespaces", required = true, multiValued = true)
-    List<String> urls;
-
-    @Option(name = "-i", aliases = { "--install-all" }, description = "Install all features contained in the repository URLs", required = false, multiValued = false)
-    boolean install;
-
-    protected void doExecute(FeaturesService admin) throws Exception {
-        List<Exception> exceptions = new ArrayList<Exception>();
-        for (String url : urls) {
-            try {
-                admin.addRepository(new URI(url), install);
-            } catch (Exception e) {
-                exceptions.add(e);
-            }
-        }
-        MultiException.throwIf("Unable to add repositories", exceptions);
-    }
-}
diff --git a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/Artifact.java b/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/Artifact.java
deleted file mode 100644
index da7d6aa..0000000
--- a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/Artifact.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.command;
-
-import java.net.URI;
-
-/**
- * Simple abstraction of a maven artifact to avoid external deps
- */
-public class Artifact {
-    String groupId;
-    String artifactId;
-    String version;
-    String extension;
-    String classifier;
-    
-    public Artifact(String coords) {
-        String[] coordsAr = coords.split(":");
-        this.groupId = coordsAr[0];
-        this.artifactId = coordsAr[1];
-        this.version = coordsAr[4];
-        this.extension = coordsAr[2];
-        this.classifier = coordsAr[3];
-    }
-    
-    public Artifact(String coords, String version) {
-        this(coords);
-        this.version = version;
-    }
-    
-    public URI getPaxUrlForArtifact(String version) {
-        String uriSt = "mvn:" + this.groupId + "/" + this.artifactId + "/" + version + "/" + this.extension + "/" + this.classifier;
-        try {
-            return new URI(uriSt);
-        } catch (Exception e) {
-            return null;
-        }
-    }
-}
diff --git a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/ChooseUrlCommand.java b/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/ChooseUrlCommand.java
deleted file mode 100644
index 43de93d..0000000
--- a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/ChooseUrlCommand.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.command;
-
-import java.net.URI;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.features.FeaturesService;
-import org.apache.karaf.shell.console.AbstractAction;
-
-/**
- * Concatenate and print files and/or URLs.
- */
-@Command(scope = "feature", name = "chooseurl", description = "Add a repository url for well known features")
-public class ChooseUrlCommand extends AbstractAction {
-
-    @Argument(index = 0, name = "", description = "", required = true, multiValued = false)
-    private String name;
-    
-    @Argument(index = 1, name = "", description = "", required = false, multiValued = false)
-    private String version;
-    
-    private FeatureFinder featureFinder;
-    private FeaturesService featuresService;
-    
-    public void setFeatureFinder(FeatureFinder featureFinder) {
-        this.featureFinder = featureFinder;
-    }
-
-    public void setFeaturesService(FeaturesService featuresService) {
-        this.featuresService = featuresService;
-    }
-
-    protected Object doExecute() throws Exception {
-        String effectiveVersion = (version == null) ? "LATEST" : version;
-        URI uri = featureFinder.getUriFor(name, effectiveVersion);
-        if (uri == null) {
-            throw new RuntimeException("No feature found for name " + name + " and version " + version);
-        }
-        System.out.println("adding feature url " + uri);
-        featuresService.addRepository(uri);
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/FeatureFinder.java b/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/FeatureFinder.java
deleted file mode 100644
index 9cd3647..0000000
--- a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/FeatureFinder.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.command;
-
-import java.net.URI;
-import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.osgi.service.cm.ConfigurationException;
-import org.osgi.service.cm.ManagedService;
-
-public class FeatureFinder implements ManagedService {
-    Map<String, String> nameToArtifactMap = new HashMap<String, String>();
-    public String[] getNames() {
-        return nameToArtifactMap.keySet().toArray(new String[] {});
-    }
-
-    public URI getUriFor(String name, String version) {
-        String coords = nameToArtifactMap.get(name);
-        if (coords == null) {
-            return null;
-        }
-        Artifact artifact = new Artifact(coords);
-        return artifact.getPaxUrlForArtifact(version);
-    }
-
-    @SuppressWarnings("rawtypes")
-    public void updated(Dictionary properties) throws ConfigurationException {
-        if (properties != null) {
-            nameToArtifactMap.clear();
-            Enumeration keys = properties.keys();
-            while (keys.hasMoreElements()) {
-                String key = (String)keys.nextElement();
-                if (!"felix.fileinstall.filename".equals(key) && !"service.pid".equals(key)) {
-                    nameToArtifactMap.put(key, (String)properties.get(key));
-                }
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/FeaturesCommandSupport.java b/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/FeaturesCommandSupport.java
deleted file mode 100644
index b7a039b..0000000
--- a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/FeaturesCommandSupport.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.command;
-
-import java.net.URI;
-
-import org.apache.karaf.features.FeaturesService;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.osgi.framework.ServiceReference;
-
-public abstract class FeaturesCommandSupport extends OsgiCommandSupport {
-
-    protected Object doExecute() throws Exception {
-        // Get repository admin service.
-        ServiceReference ref = getBundleContext().getServiceReference(FeaturesService.class.getName());
-        if (ref == null) {
-            System.out.println("FeaturesService service is unavailable.");
-            return null;
-        }
-        try {
-            FeaturesService admin = (FeaturesService) getBundleContext().getService(ref);
-            if (admin == null) {
-                System.out.println("FeaturesService service is unavailable.");
-                return null;
-            }
-
-            doExecute(admin);
-        }
-        finally {
-            getBundleContext().ungetService(ref);
-        }
-        return null;
-    }
-
-    protected abstract void doExecute(FeaturesService admin) throws Exception;
-
-}
diff --git a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/InfoFeatureCommand.java b/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/InfoFeatureCommand.java
deleted file mode 100644
index e1210aa..0000000
--- a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/InfoFeatureCommand.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.command;
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.features.BundleInfo;
-import org.apache.karaf.features.ConfigFileInfo;
-import org.apache.karaf.features.Feature;
-import org.apache.karaf.features.FeaturesService;
-
-/**
- * Utility command to display info about features.
- */
-@Command(scope = "features", name = "info", description = "Shows information about selected feature.")
-public class InfoFeatureCommand extends FeaturesCommandSupport {
-
-    @Argument(index = 0, name = "name", description = "The name of the feature", required = true, multiValued = false)
-    private String name;
-
-    @Argument(index = 1, name = "version", description = "The version of the feature", required = false, multiValued = false)
-    private String version;
-
-    @Option(name = "-c", aliases={"--configuration"}, description="Display configuration info", required = false, multiValued = false)
-    private boolean config;
-
-    @Option(name = "-d", aliases={"--dependency"}, description="Display dependencies info", required = false, multiValued = false)
-    private boolean dependency;
-
-    @Option(name = "-b", aliases={"--bundle"}, description="Display bundles info", required = false, multiValued = false)
-    private boolean bundle;
-
-    @Option(name = "-t", aliases={"--tree"}, description="Display feature tree", required = false, multiValued = false)
-    private boolean tree;
-
-    protected void doExecute(FeaturesService admin) throws Exception {
-        Feature feature = null;
-
-        if (version != null && version.length() > 0) {
-            feature = admin.getFeature(name, version);
-        } else {
-            feature = admin.getFeature(name);
-        }
-
-        if (feature == null) {
-            System.out.println("Feature not found");
-            return;
-        }
-
-        // default behavior
-        if (!config && !dependency && !bundle) {
-            config = true;
-            dependency = true;
-            bundle = true;
-        }
-
-        System.out.println("Description of " + feature.getName() + " " + feature.getVersion() + " feature");
-        System.out.println("----------------------------------------------------------------");
-        if(feature.getDetails() != null && feature.getDetails().length() >0) {
-           System.out.print(feature.getDetails());
-           System.out.println("----------------------------------------------------------------");
-        }
-        if (config) {
-            displayConfigInformation(feature);
-            displayConfigFileInformation(feature);
-        }
-
-        if (dependency) {
-            displayDependencyInformation(feature);
-        }
-
-        if (bundle) {
-            displayBundleInformation(feature);
-        }
-
-        if (tree) {
-            if (config || dependency || bundle) {
-                System.out.println("\nFeature tree");
-            }
-
-            int unresolved = displayFeatureTree(admin, feature, 0, false);
-            if (unresolved > 0) {
-                System.out.println("Tree contains " + unresolved + " unresolved dependencies");
-                System.out.println(" * means that node declares dependency but the dependant feature is not available.");
-            }
-        }
-    }
-
-    private void displayBundleInformation(Feature feature) {
-        List<BundleInfo> bundleInfos = feature.getBundles();
-        if (bundleInfos.isEmpty()) {
-            System.out.println("Feature has no bundles.");
-        } else {
-            System.out.println("Feature contains followed bundles:");
-            for (BundleInfo featureBundle : bundleInfos) {
-                int startLevel = featureBundle.getStartLevel();
-                StringBuilder sb = new StringBuilder();
-                sb.append(" ").append(featureBundle.getLocation());
-                if(startLevel > 0) {
-                    sb.append(" start-level=").append(startLevel);
-                }
-                System.out.println(sb.toString());
-            }
-        }
-    }
-
-    private void displayDependencyInformation(Feature feature) {
-        List<Feature> dependencies = feature.getDependencies();
-        if (dependencies.isEmpty()) {
-            System.out.println("Feature has no dependencies.");
-        } else {
-            System.out.println("Feature depends on:");
-            for (Feature featureDependency : dependencies) {
-                System.out.println("  " + featureDependency.getName() + " " + featureDependency.getVersion());
-            }
-        }
-    }
-
-    private void displayConfigInformation(Feature feature) {
-        Map<String, Map<String, String>> configurations = feature.getConfigurations();
-        if (configurations.isEmpty()) {
-            System.out.println("Feature has no configuration");
-        } else {
-            System.out.println("Feature configuration:");
-            for (String name : configurations.keySet()) {
-                System.out.println("  " + name);
-            }
-        }
-    }
-    
-    private void displayConfigFileInformation(Feature feature) {
-    	List<ConfigFileInfo> configurationFiles = feature.getConfigurationFiles();
-    	if (configurationFiles.isEmpty()) {
-    		System.out.println("Feature has no configuration files");
-    	} else {
-    		System.out.println("Feature configuration files: ");
-    		for (ConfigFileInfo configFileInfo : configurationFiles) {
-				System.out.println("  " + configFileInfo.getFinalname());
-			}
-    	}    	
-    }
-
-
-    private int displayFeatureTree(FeaturesService admin, Feature feature, int level, boolean last) throws Exception {
-        int unresolved = 0;
-        String prefix = repeat("   ", level);
-
-        Feature resolved = resolveFeature(admin, feature);
-        if (resolved != null) {
-            System.out.println(prefix + " " + resolved.getName() + " " + resolved.getVersion());
-        } else {
-            System.out.println(prefix + " " + feature.getName() + " " + feature.getVersion() + " *");
-            unresolved++;
-        }
-
-        if (bundle) {
-            List<BundleInfo> bundles = resolved != null ? resolved.getBundles() : feature.getBundles();
-            for (int i = 0, j = bundles.size(); i < j; i++) {
-                System.out.println(prefix + " " + (i+1 == j ? "\\" : "+") + " " + bundles.get(i).getLocation());
-            }
-        }
-        List<Feature> dependencies = resolved != null ? resolved.getDependencies() : feature.getDependencies();
-        for (int i = 0, j = dependencies.size(); i < j; i++) {
-            Feature toDisplay = resolveFeature(admin, dependencies.get(i));
-            if (toDisplay == null) {
-                toDisplay = dependencies.get(i);
-            }
-            unresolved += displayFeatureTree(admin, toDisplay, level+1, i + 1 == j);
-        }
-
-        return unresolved;
-    }
-
-    private Feature resolveFeature(FeaturesService admin, Feature feature) throws Exception {
-        return admin.getFeature(feature.getName(), feature.getVersion());
-    }
-
-    private static String repeat(String string, int times) {
-        if (times <= 0) {
-            return "";
-        }
-        else if (times % 2 == 0) {
-            return repeat(string+string, times/2);
-        }
-        else {
-           return string + repeat(string+string, times/2);
-        }
-    }
-}
diff --git a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/InstallFeatureCommand.java b/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/InstallFeatureCommand.java
deleted file mode 100644
index 6120071..0000000
--- a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/InstallFeatureCommand.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.command;
-
-import java.util.EnumSet;
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.features.FeaturesService;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-
-@Command(scope = "features", name = "install", description = "Installs a feature with the specified name and version.")
-public class InstallFeatureCommand extends FeaturesCommandSupport {
-
-    private static String DEFAULT_VERSION = "0.0.0";
-
-    @Argument(index = 0, name = "feature", description = "The name and version of the features to install. A feature id looks like name/version. The version is optional.", required = true, multiValued = true)
-    List<String> features;
-    @Option(name = "-c", aliases = "--no-clean", description = "Do not uninstall bundles on failure", required = false, multiValued = false)
-    boolean noClean;
-    @Option(name = "-r", aliases = "--no-auto-refresh", description = "Do not automatically refresh bundles", required = false, multiValued = false)
-    boolean noRefresh;
-    @Option(name = "-v", aliases = "--verbose", description = "Explain what is being done", required = false, multiValued = false)
-    boolean verbose;
-
-    protected void doExecute(FeaturesService admin) throws Exception {
-        for (String feature : features) {
-            String[] split = feature.split("/");
-            String name = split[0];
-            String version = null;
-            if (split.length == 2) {
-                version = split[1];
-            }
-    	    if (version == null || version.length() == 0) {
-                version = DEFAULT_VERSION;
-    	    }
-            EnumSet<FeaturesService.Option> options = EnumSet.of(FeaturesService.Option.PrintBundlesToRefresh);
-            if (noRefresh) {
-                options.add(FeaturesService.Option.NoAutoRefreshBundles);
-            }
-            if (noClean) {
-                options.add(FeaturesService.Option.NoCleanIfFailure);
-            }
-            if (verbose) {
-                options.add(FeaturesService.Option.Verbose);
-            }
-            admin.installFeature(name, version, options);
-        }
-    }
-}
diff --git a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/ListFeatureVersionsCommand.java b/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/ListFeatureVersionsCommand.java
deleted file mode 100644
index 47440f4..0000000
--- a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/ListFeatureVersionsCommand.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*

- * 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.

- */

-package org.apache.karaf.features.command;

-

-import java.util.ArrayList;

-import java.util.Arrays;

-import java.util.List;

-

-import org.apache.felix.gogo.commands.Argument;

-import org.apache.felix.gogo.commands.Command;

-import org.apache.karaf.features.Feature;

-import org.apache.karaf.features.FeaturesService;

-import org.apache.karaf.features.Repository;

-

-@Command(scope = "features", name = "listVersions", description = "Lists all versions of a feature available from the currently available repositories.")

-public class ListFeatureVersionsCommand extends FeaturesCommandSupport {

-

-	@Argument(index = 0, name = "feature", description = "Name of feature.", required = true, multiValued = false)

-	String feature;

-

-    private static final String VERSION = "Version";

-    private static final String REPOSITORY = "Repository";

-    private static final String REPOSITORY_URL = "Repository URL";

-

-    private class VersionInRepository { 

-    	public String version;

-    	public Repository repository;

-    }

-    

-    protected void doExecute(FeaturesService admin) throws Exception {

-

-        List<VersionInRepository> versionsInRepositories = new ArrayList<VersionInRepository>();

-        

-        for (Repository r : Arrays.asList(admin.listRepositories())) {

-            for (Feature f : r.getFeatures()) {

-

-                if (f.getName().equals(feature)) { 

-                	VersionInRepository versionInRepository = new VersionInRepository();

-                	versionInRepository.repository = r;

-                	versionInRepository.version = f.getVersion();

-                	versionsInRepositories.add(versionInRepository);

-                }

-            }

-        }

-

-    	

-        if (versionsInRepositories.size() == 0) {

-            System.out.println("No versions available for features '" + feature + "'");

-            return;

-        }

-

-        // Print column headers.

-        int maxVersionSize = VERSION.length();

-        for (VersionInRepository vir : versionsInRepositories) {

-            maxVersionSize = Math.max(maxVersionSize, vir.version.length());

-        }

-        int maxRepositorySize = REPOSITORY.length();

-        for (VersionInRepository vir : versionsInRepositories) {

-        	maxRepositorySize = Math.max(maxRepositorySize, vir.repository.getName().length());

-        }

-        

-        StringBuilder sb = new StringBuilder();

-        sb.append(VERSION).append("   ");

-        for (int i = VERSION.length(); i < maxVersionSize; i++) {

-            sb.append(" ");

-        }

-        sb.append(REPOSITORY).append(" ");

-        for (int i = REPOSITORY.length(); i < maxRepositorySize; i++) {

-            sb.append(" ");

-        }

-        sb.append(" ");

-        sb.append(REPOSITORY_URL);

-        System.out.println(sb.toString());

-

-        // Print the version data.

-        for (VersionInRepository vir : versionsInRepositories) {

-

-            sb.setLength(0);

-

-

-            sb.append("[");

-            String str = vir.version;

-            sb.append(str);

-            for (int i = str.length(); i < maxVersionSize; i++) {

-                sb.append(" ");

-            }

-            sb.append("] ");

-

-            str = vir.repository.getName();

-            sb.append(str);

-            for (int i = str.length(); i < maxRepositorySize; i++) {

-                sb.append(" ");

-            }

-

-            sb.append(" ");

-            sb.append(vir.repository.getURI());

-            System.out.println(sb.toString());

-        }

-

-    }

-

-}

diff --git a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/ListFeaturesCommand.java b/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/ListFeaturesCommand.java
deleted file mode 100644
index f627f96..0000000
--- a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/ListFeaturesCommand.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.command;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.features.Feature;
-import org.apache.karaf.features.FeaturesService;
-import org.apache.karaf.features.Repository;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-@Command(scope = "features", name = "list", description = "Lists all existing features available from the defined repositories.")
-public class ListFeaturesCommand extends FeaturesCommandSupport {
-
-    @Option(name = "-i", aliases = {"--installed"}, description = "Display a list of all installed features only", required = false, multiValued = false)
-    boolean installed;
-
-    @Option(name = "-o", aliases = {"--ordered"}, description = "Display a list using alphabetical order ", required = false, multiValued = false)
-    boolean ordered;
-    private static final String STATE = "State";
-    private static final String INSTALLED = "installed  ";
-    private static final String UNINSTALLED = "uninstalled";
-
-    private static final String VERSION = "Version";
-    private static final String NAME = "Name";
-    private static final String REPOSITORY = "Repository";
-    private static final String DESCRIPTION = "Description";
-
-    protected void doExecute(FeaturesService admin) throws Exception {
-
-        // Get the feature data to print.
-        List<Feature> features = new ArrayList<Feature>();
-        List<Repository> repositories = new ArrayList<Repository>();
-        for (Repository r : Arrays.asList(admin.listRepositories())) {
-            for (Feature f : r.getFeatures()) {
-                if (installed && !admin.isInstalled(f)) {
-                    continue;
-                }
-                features.add(f);
-                repositories.add(r);
-            }
-        }
-        if (features.size() == 0) {
-            if (installed) {
-                System.out.println("No features installed.");
-            } else {
-                System.out.println("No features available.");
-            }
-            return;
-        }
-
-        // Print column headers.
-        int maxVersionSize = VERSION.length();
-        for (Feature f : features) {
-            maxVersionSize = Math.max(maxVersionSize, f.getVersion().length());
-        }
-        int maxNameSize = NAME.length();
-        for (Feature f : features) {
-            maxNameSize = Math.max(maxNameSize, f.getName().length());
-        }
-        int maxRepositorySize = REPOSITORY.length();
-        for (Repository repository:repositories) {
-                maxRepositorySize = Math.max(maxRepositorySize,  repository.getName().length());
-        }
-
-        StringBuilder sb = new StringBuilder();
-        sb.append(STATE).append("         ").append(VERSION).append("   ");
-        for (int i = VERSION.length(); i < maxVersionSize; i++) {
-            sb.append(" ");
-        }
-        sb.append(NAME).append(" ");
-        for (int i = NAME.length(); i < maxNameSize; i++) {
-            sb.append(" ");
-        }
-        sb.append(REPOSITORY).append(" ");
-
-        for (int i = REPOSITORY.length(); i < maxRepositorySize; i++) {
-            sb.append(" ");
-        }
-        sb.append(DESCRIPTION);
-        System.out.println(sb.toString());
-
-        // Print the feature data.
-        boolean needsLegend = false;
-        if (ordered) {
-            Collections.sort(features, new FeatureComparator());
-        }
-        for (Feature f : features) {
-
-            sb.setLength(0);
-            sb.append("[");
-            if (admin.isInstalled(f)) {
-                sb.append(INSTALLED);
-            } else {
-                sb.append(UNINSTALLED);
-            }
-
-            sb.append("] [");
-            String str = f.getVersion();
-            sb.append(str);
-            for (int i = str.length(); i < maxVersionSize; i++) {
-                sb.append(" ");
-            }
-            sb.append("] ");
-
-            str = f.getName();
-            sb.append(str);
-            for (int i = str.length(); i < maxNameSize; i++) {
-                sb.append(" ");
-            }
-
-            sb.append(" ");
-            String name = repositories.get(0).getName();
-            sb.append(name);
-            repositories.remove(0);
-            
-            if (name.charAt(name.length() - 1) == '*') {
-                needsLegend = true;
-            }
-
-            for (int i = name.length(); i < maxRepositorySize; i++) {
-                sb.append(" ");
-            }
-
-            sb.append(" ");
-            String description = "";
-            if(f.getDescription() != null) {
-            description = f.getDescription();
-            }
-            sb.append(description);
-
-            System.out.println(sb.toString());            
-        }
-
-        if (needsLegend) {
-            System.out.println("* Installed via deploy directory");
-        }
-
-    }
-    
-    class FeatureComparator implements Comparator<Feature>
-    {
-        public int compare(Feature o1, Feature o2)
-        {
-            return o1.getName().toLowerCase().compareTo( o2.getName().toLowerCase() );
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/ListRepositoriesCommand.java b/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/ListRepositoriesCommand.java
deleted file mode 100644
index 022473b..0000000
--- a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/ListRepositoriesCommand.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.command;
-
-import org.apache.karaf.features.FeaturesService;
-import org.apache.karaf.features.Repository;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-
-@Command(scope = "features", name = "listRepositories", description = "Displays a list of all defined repositories.")
-public class ListRepositoriesCommand extends FeaturesCommandSupport {
-
-	private static final String REPOSITORY = "Repository";
-	private static final String REPOSITORY_URL = "Repository URL";
-
-	@Option(name = "-u", description = "Display repository URLs.", required = false, multiValued = false)
-    boolean showUrl;
-
-    
-	
-    protected void doExecute(FeaturesService admin) throws Exception {
-    	
-        StringBuffer sb = null;      
-
-        Repository[] repos = admin.listRepositories();
-          
-    	int maxRepositorySize = REPOSITORY.length();    	
-        int maxRepositoryUrlSize = REPOSITORY_URL.length();
-        for (Repository r : repos) { 
-        	maxRepositorySize = Math.max(maxRepositorySize, r.getName().length());
-        	maxRepositoryUrlSize = Math.max(maxRepositoryUrlSize, r.getURI().toString().length());
-        }
-        
-        if ((repos != null) && (repos.length > 0)) {
-            // Prepare the header
-            sb = new StringBuffer();        
-            append(sb, REPOSITORY, maxRepositorySize + 2);
-            if (showUrl) { 
-            	append(sb, REPOSITORY_URL, maxRepositoryUrlSize + 2);   
-            }
-            System.out.println(sb.toString());
-            
-
-        	for (int i = 0; i < repos.length; i++) {
-            	sb = new StringBuffer();        
-                append(sb, repos[i].getName(), maxRepositorySize + 2);
-                if (showUrl) { 
-                	append(sb, repos[i].getURI().toString(), maxRepositoryUrlSize + 2); 
-                }
-            	System.out.println(sb.toString());
-            }
-        } else {
-            System.out.println("No repositories available.");
-        }
-    }
-    
-    private void append(StringBuffer sb, String s, int width) { 
-    	sb.append(s);
-    	for (int i = s.length(); i < width; i++) { 
-    		sb.append(" ");
-    	}
-    }
-}
diff --git a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/ListUrlCommand.java b/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/ListUrlCommand.java
deleted file mode 100644
index 63c16e2..0000000
--- a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/ListUrlCommand.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.command;
-
-import java.net.URI;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.features.FeaturesService;
-import org.apache.karaf.features.Repository;
-
-/**
- * Command which lists feature URLs.
- * 
- */
-@Command(scope = "features", name = "listUrl", description = "Displays a list of all defined repository URLs.")
-public class ListUrlCommand extends FeaturesCommandSupport {
-
-    @Option(name = "-v", aliases = "-validate", description = "Validate current version of descriptors", required = false, multiValued = false)
-    boolean validation = false;
-
-    @Option(name = "-vo", aliases = "-verbose", description = "Shows validation output", required = false, multiValued = false)
-    boolean verbose = false;
-
-    protected void doExecute(FeaturesService admin) throws Exception {
-        Repository[] repos = admin.listRepositories();
-
-        String header;
-        if (validation) {
-            header = " Loaded   Now valid   URI ";
-        } else {
-            header = " Loaded   URI ";
-        }
-
-        System.out.println(header);
-
-        String verboseOutput = "";
-
-        if ((repos != null) && (repos.length > 0)) {
-            for (int i = 0; i < repos.length; i++) {
-                URI uri = repos[i].getURI();
-
-                String line = "";
-                line += repos[i].isValid() ? "  true " : "  false";
-
-                try {
-                    admin.validateRepository(uri);
-                    // append valid flag if validation mode is tuned on
-                    line += !validation ? "" : "     true   ";
-                } catch (Exception e) {
-                    line += !validation ? "" : "     false  ";
-                    verboseOutput += uri + ":" + e.getMessage() + "\n";
-                }
-
-                System.out.println(line + "   " + uri);
-            }
-
-            if (verbose) {
-                System.out.println("Validation output:\n" + verboseOutput);
-            }
-        } else {
-            System.out.println("No repository URLs are set.");
-        }
-    }
-}
diff --git a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/RefreshUrlCommand.java b/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/RefreshUrlCommand.java
deleted file mode 100644
index 3bbc99f..0000000
--- a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/RefreshUrlCommand.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.command;
-
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.features.FeaturesService;
-import org.apache.karaf.features.Repository;
-import org.apache.karaf.shell.console.MultiException;
-
-@Command(scope = "features", name = "refreshUrl", description = "Reloads the list of available features from the repositories.")
-public class RefreshUrlCommand extends FeaturesCommandSupport {
-
-    @Argument(index = 0, name = "urls", description = "Repository URLs to reload (leave empty for all)", required = false, multiValued = true)
-    List<String> urls;
-
-    protected void doExecute(FeaturesService admin) throws Exception {
-        if (urls == null || urls.isEmpty()) {
-            urls = new ArrayList<String>();
-            for (Repository repo : admin.listRepositories()) {
-                urls.add(repo.getURI().toString());
-            }
-        }
-        List<Exception> exceptions = new ArrayList<Exception>();
-        for (String strUri : urls) {
-            try {
-                URI uri = new URI(strUri);
-                admin.removeRepository(uri);
-                admin.addRepository(uri);
-            } catch (Exception e) {
-                exceptions.add(e);
-                //get chance to restore previous, fix for KARAF-4
-                admin.restoreRepository(new URI(strUri));
-            }
-        }
-        MultiException.throwIf("Unable to add repositories", exceptions);
-    }
-}
diff --git a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/RemoveRepositoryCommand.java b/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/RemoveRepositoryCommand.java
deleted file mode 100644
index efb6c71..0000000
--- a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/RemoveRepositoryCommand.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.command;
-
-import java.net.URI;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.features.FeaturesService;
-import org.apache.karaf.features.Repository;
-
-@Command(scope = "features", name = "removeRepository", description = "Removes the specified repository features service.")
-public class RemoveRepositoryCommand extends FeaturesCommandSupport {
-
-    @Argument(index = 0, name = "repository", description = "Name of the repository to remove.", required = true, multiValued = false)
-    private String repository;
-
-    protected void doExecute(FeaturesService admin) throws Exception {
-    	URI uri = null;
-    	for (Repository r :admin.listRepositories()) {
-    		if (r.getName().equals(repository)) {
-    			uri = r.getURI();
-    			break;
-    		}
-    	}
-
-    	if (uri == null) {
-    		System.out.println("Repository '" + repository + "' not found.") ;
-    	} else {
-    		admin.removeRepository(uri);
-    	}
-    }
-}
diff --git a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/RemoveUrlCommand.java b/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/RemoveUrlCommand.java
deleted file mode 100644
index e592aad..0000000
--- a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/RemoveUrlCommand.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.command;
-
-import java.net.URI;
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.features.FeaturesService;
-
-@Command(scope = "features", name = "removeUrl", description = "Removes the given list of repository URLs from the features service")
-public class RemoveUrlCommand extends FeaturesCommandSupport {
-
-    @Argument(index = 0, name = "urls", description = "One or more repository URLs separated by whitespaces", required = true, multiValued = true)
-    List<String> urls;
-
-    @Option(name = "-u", aliases = { "--uninstall-all"}, description = "Uninstall all features contained in the repository URLs", required = false, multiValued = false)
-    boolean uninstall;
-
-    protected void doExecute(FeaturesService admin) throws Exception {
-        for (String url : urls) {
-            admin.removeRepository(new URI(url), uninstall);
-        }
-    }
-}
diff --git a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/UninstallFeatureCommand.java b/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/UninstallFeatureCommand.java
deleted file mode 100644
index 0399046..0000000
--- a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/UninstallFeatureCommand.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.command;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.features.FeaturesService;
-
-import java.util.List;
-
-@Command(scope = "features", name = "uninstall", description = "Uninstalls a feature with the specified name and version.")
-public class UninstallFeatureCommand extends FeaturesCommandSupport {
-
-    @Argument(index = 0, name = "features", description = "The name and version of the features to uninstall. A feature id looks like name/version. The version is optional.", required = true, multiValued = true)
-    List<String> features;
-
-    protected void doExecute(FeaturesService admin) throws Exception {
-        // iterate in the provided feature
-        for (String feature : features) {
-            String[] split = feature.split("/");
-            String name = split[0];
-            String version = null;
-            if (split.length == 2) {
-                version = split[1];
-            }
-    	    if (version != null && version.length() > 0) {
-    		    admin.uninstallFeature(name, version);
-    	    } else {
-    		    admin.uninstallFeature(name );
-    	    }
-        }
-    }
-}
diff --git a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/completers/AllFeatureCompleter.java b/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/completers/AllFeatureCompleter.java
deleted file mode 100644
index cbb2cbd..0000000
--- a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/completers/AllFeatureCompleter.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.command.completers;
-
-import org.apache.karaf.features.Feature;
-
-/**
- * {@link jline.Completor} for available features.
- */
-public class AllFeatureCompleter extends FeatureCompleterSupport {
-
-    @Override
-    protected boolean acceptsFeature(Feature feature) {
-        return true;
-    }
-
-}
diff --git a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/completers/AvailableFeatureCompleter.java b/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/completers/AvailableFeatureCompleter.java
deleted file mode 100644
index 7345799..0000000
--- a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/completers/AvailableFeatureCompleter.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.command.completers;
-
-import org.apache.karaf.features.Feature;
-
-/**
- * {@link jline.Completor} for features not installed yet.
- */
-public class AvailableFeatureCompleter extends FeatureCompleterSupport {
-
-    @Override
-    protected boolean acceptsFeature(Feature feature) {
-        return !featuresService.isInstalled(feature);
-    }
-
-}
diff --git a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/completers/FeatureCompleterSupport.java b/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/completers/FeatureCompleterSupport.java
deleted file mode 100644
index 891779e..0000000
--- a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/completers/FeatureCompleterSupport.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.command.completers;
-
-import java.util.List;
-
-import org.apache.karaf.features.Feature;
-import org.apache.karaf.features.FeaturesService;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-
-/**
- * Base completer for feature commands.
- */
-public abstract class FeatureCompleterSupport implements Completer {
-
-    /**
-     * Feature service.
-     */
-    protected FeaturesService featuresService;
-
-    public void setFeaturesService(FeaturesService featuresService) {
-        this.featuresService = featuresService;
-    }
-
-    public int complete(final String buffer, final int cursor, final List candidates) {
-        StringsCompleter delegate = new StringsCompleter();
-        try {
-            for (Feature feature : featuresService.listFeatures()) {
-                if (acceptsFeature(feature)) {
-                    delegate.getStrings().add(feature.getName());
-                }
-            }
-        } catch (Exception e) {
-            // Ignore
-        }
-        return delegate.complete(buffer, cursor, candidates);
-    }
-
-    /**
-     * Method for filtering features.
-     *
-     * @param feature The feature.
-     * @return True if feature should be available in completer.
-     */
-    protected abstract boolean acceptsFeature(Feature feature);
-}
diff --git a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/completers/FeatureRepoNameCompleter.java b/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/completers/FeatureRepoNameCompleter.java
deleted file mode 100644
index 0c12ec7..0000000
--- a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/completers/FeatureRepoNameCompleter.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.command.completers;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.karaf.features.command.FeatureFinder;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-
-public class FeatureRepoNameCompleter implements Completer {
-
-    FeatureFinder featureFinder;
-
-    public void setFeatureFinder(FeatureFinder featureFinder) {
-        this.featureFinder = featureFinder;
-    }
-
-    public int complete(final String buffer, final int cursor, @SuppressWarnings("rawtypes") final List candidates) {
-        StringsCompleter delegate = new StringsCompleter(Arrays.asList(featureFinder.getNames()));
-        return delegate.complete(buffer, cursor, candidates);
-    }
-
-}
diff --git a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/completers/FeatureRepositoryCompleter.java b/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/completers/FeatureRepositoryCompleter.java
deleted file mode 100644
index f734e75..0000000
--- a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/completers/FeatureRepositoryCompleter.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.command.completers;
-
-import java.util.List;
-
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.features.FeaturesService;
-import org.apache.karaf.features.Repository;
-
-/**
- * {@link jline.Completor} for Feature Repository URLs.
- *
- * Displays a list of currently installed Feature repositories.
- *
- */
-
-public class FeatureRepositoryCompleter implements Completer {
-
-    private FeaturesService featuresService;
-
-    public void setFeaturesService(FeaturesService featuresService) {
-        this.featuresService = featuresService;
-    }
-
-    public int complete(final String buffer, final int cursor, final List candidates) {
-        StringsCompleter delegate = new StringsCompleter();
-        try {
-            for (Repository repository : featuresService.listRepositories()) {
-                delegate.getStrings().add(repository.getURI().toString());
-            }
-        } catch (Exception e) {
-            // Ignore
-        }
-        return delegate.complete(buffer, cursor, candidates);
-    }
-
-}
diff --git a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/completers/FeatureRepositoryNameCompleter.java b/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/completers/FeatureRepositoryNameCompleter.java
deleted file mode 100644
index 43fe803..0000000
--- a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/completers/FeatureRepositoryNameCompleter.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.command.completers;
-
-import java.util.List;
-
-import org.apache.karaf.features.FeaturesService;
-import org.apache.karaf.features.Repository;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-
-/**
- * {@link jline.Completor} for Feature Repository URLs.
- *
- * Displays a list of currently installed Feature repositories.
- *
- */
-
-public class FeatureRepositoryNameCompleter implements Completer {
-
-    private FeaturesService featuresService;
-
-    public void setFeaturesService(FeaturesService featuresService) {
-        this.featuresService = featuresService;
-    }
-
-    public int complete(final String buffer, final int cursor, final List candidates) {
-        StringsCompleter delegate = new StringsCompleter();
-        try {
-            for (Repository repository : featuresService.listRepositories()) {
-                delegate.getStrings().add(repository.getName());
-            }
-        } catch (Exception e) {
-            // Ignore
-        }
-        return delegate.complete(buffer, cursor, candidates);
-    }
-
-}
diff --git a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/completers/InstalledFeatureCompleter.java b/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/completers/InstalledFeatureCompleter.java
deleted file mode 100644
index 6f900d3..0000000
--- a/karaf-2.3.x/features/command/src/main/java/org/apache/karaf/features/command/completers/InstalledFeatureCompleter.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.command.completers;
-
-import org.apache.karaf.features.Feature;
-
-/**
- * {@link jline.Completor} for installed features.
- */
-public class InstalledFeatureCompleter extends FeatureCompleterSupport {
-
-    @Override
-    protected boolean acceptsFeature(Feature feature) {
-        return featuresService.isInstalled(feature);
-    }
-
-}
diff --git a/karaf-2.3.x/features/command/src/main/resources/OSGI-INF/blueprint/features-command.xml b/karaf-2.3.x/features/command/src/main/resources/OSGI-INF/blueprint/features-command.xml
deleted file mode 100644
index 603bde0..0000000
--- a/karaf-2.3.x/features/command/src/main/resources/OSGI-INF/blueprint/features-command.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.0.0">
-        <command name="features/addUrl">
-            <action class="org.apache.karaf.features.command.AddUrlCommand"/>
-        </command>
-        <command name="features/listUrl">
-            <action class="org.apache.karaf.features.command.ListUrlCommand"/>
-        </command>
-        <command name="features/listRepositories">
-            <action class="org.apache.karaf.features.command.ListRepositoriesCommand"/>
-        </command>
-        <command name="features/removeUrl">
-            <action class="org.apache.karaf.features.command.RemoveUrlCommand"/>
-            <completers>
-                <ref component-id="featureUrlCompleter" />
-            </completers>
-        </command>
-        <command name="features/removeRepository">
-             <action class="org.apache.karaf.features.command.RemoveRepositoryCommand"/>
-             <completers>
-                 <ref component-id="featureRepositoryNameCompleter" />
-             </completers>
-         </command>
-        <command name="features/refreshUrl">
-            <action class="org.apache.karaf.features.command.RefreshUrlCommand"/>
-            <completers>
-                <ref component-id="featureUrlCompleter" />
-            </completers>
-        </command>
-        <command name="features/install">
-            <action class="org.apache.karaf.features.command.InstallFeatureCommand"/>
-            <completers>
-                <ref component-id="uninstalledFeatureCompleter" />
-            </completers>
-        </command>
-        <command name="features/uninstall">
-            <action class="org.apache.karaf.features.command.UninstallFeatureCommand"/>
-            <completers>
-                <ref component-id="installedFeatureCompleter" />
-            </completers>
-        </command>
-        <command name="features/list">
-            <action class="org.apache.karaf.features.command.ListFeaturesCommand"/>
-        </command>
-        <command name="features/listVersions">
-            <action class="org.apache.karaf.features.command.ListFeatureVersionsCommand"/>
-            <completers>
-                <ref component-id="allFeatureCompleter" />
-            </completers>
-        </command>
-        <command name="features/info">
-            <action class="org.apache.karaf.features.command.InfoFeatureCommand"/>
-            <completers>
-                <ref component-id="allFeatureCompleter" />
-            </completers>
-        </command>
-        <command name="features/chooseurl">
-            <action class="org.apache.karaf.features.command.ChooseUrlCommand">
-                <property name="featureFinder" ref="featureFinder" />
-                <property name="featuresService" ref="featuresService" />
-            </action>
-            <completers>
-                <ref component-id="featureRepoCompleter" />
-            </completers>
-        </command>
-    </command-bundle>
-
-    <bean id="featureRepoCompleter" class="org.apache.karaf.features.command.completers.FeatureRepoNameCompleter">
-        <property name="featureFinder" ref="featureFinder" />
-    </bean>
-
-    <bean id="featureFinder" class="org.apache.karaf.features.command.FeatureFinder">
-    </bean> 
-
-    <service ref="featureFinder" interface="org.osgi.service.cm.ManagedService" >
-        <service-properties>
-            <entry key="service.pid" value="org.apache.karaf.features.repos" />
-        </service-properties>
-    </service>
-
-    <reference id="featuresService" interface="org.apache.karaf.features.FeaturesService" />
-
-    <bean id="uninstalledFeatureCompleter" class="org.apache.karaf.features.command.completers.AvailableFeatureCompleter">
-        <property name="featuresService" ref="featuresService" />
-    </bean>
-
-    <bean id="installedFeatureCompleter" class="org.apache.karaf.features.command.completers.InstalledFeatureCompleter">
-        <property name="featuresService" ref="featuresService" />
-    </bean>
-
-    <bean id="allFeatureCompleter" class="org.apache.karaf.features.command.completers.AllFeatureCompleter">
-        <property name="featuresService" ref="featuresService" />
-    </bean>
-
-    <bean id="featureUrlCompleter" class="org.apache.karaf.features.command.completers.FeatureRepositoryCompleter">
-        <property name="featuresService" ref="featuresService" />
-    </bean>
-    
-    <bean id="featureRepositoryNameCompleter" class="org.apache.karaf.features.command.completers.FeatureRepositoryNameCompleter">
-        <property name="featuresService" ref="featuresService"/>
-    </bean>
-
-</blueprint>
diff --git a/karaf-2.3.x/features/command/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/features/command/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 671f894..0000000
--- a/karaf-2.3.x/features/command/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,26 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides the Karaf shell commands to manipulate features.
-
-    The following commands are available:
-    \u001B[36mfeatures:addUrl\u001B[0m Adds a list of repository URLs to the features service.
-    \u001B[36mfeatures:info\u001B[0m Shows information about selected information.
-    \u001B[36mfeatures:install\u001B[0m Installs a feature with the specified name and version.
-    \u001B[36mfeatures:list\u001B[0m Lists all existing features available from the defined repositories.
-    \u001B[36mfeatures:listVersions\u001B[0m Lists all versions of a feature available from the currently available repositories.
-    \u001B[36mfeatures:listRepositories\u001B[0m Displays a list of all defined repositories.
-    \u001B[36mfeatures:listUrl\u001B[0m Displays a list of all defined repository URLs.
-    \u001B[36mfeatures:refreshUrl\u001B[0m Reloads the list of available features from the repositories.
-    \u001B[36mfeatures:removeRepository\u001B[0m Removes the specified repository features service.
-    \u001B[36mfeatures:removeUrl\u001B[0m Removes the given list of repository URLs from the features service.
-    \u001B[36mfeatures:uninstall\u001B[0m Uninstalls a feature with the specified name and version.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mCommands\u001B[0m and \u001B[36mProvisioning\u001B[0m sections of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/features/core/NOTICE b/karaf-2.3.x/features/core/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/features/core/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/features/core/pom.xml b/karaf-2.3.x/features/core/pom.xml
deleted file mode 100644
index aec63ff..0000000
--- a/karaf-2.3.x/features/core/pom.xml
+++ /dev/null
@@ -1,140 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.features</groupId>
-        <artifactId>features</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.features.core</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Features :: Core</name>
-    <description>This bundle is the core implementation of the Karaf features support.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.utils</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf</groupId>
-            <artifactId>org.apache.karaf.util</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.bundlerepository</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.obr</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.osgi</groupId>
-            <artifactId>spring-osgi-core</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicemix.bundles</groupId>
-            <artifactId>org.apache.servicemix.bundles.junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymock</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-jdk14</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Export-Package>org.apache.karaf.features;version=${project.version}</Export-Package>
-                        <Import-Package>
-                            !org.apache.karaf.features,
-                            org.osgi.service.event*;resolution:=optional,
-                            *
-                        </Import-Package>
-                        <Private-Package>
-                            org.apache.karaf.features.internal,
-                            org.apache.felix.utils.version;-split-package:=merge-first,
-                            org.apache.felix.utils.manifest;-split-package:=merge-first,
-                            org.apache.karaf.util.collections;-split-package:=merge-first
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/BundleInfo.java b/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/BundleInfo.java
deleted file mode 100644
index 97a541f..0000000
--- a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/BundleInfo.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*

- * 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.

- */

-package org.apache.karaf.features;

-

-/**

- * A bundle info holds info about a Bundle.

- */

-public interface BundleInfo {

-

-	String getLocation();

-	

-    int getStartLevel();

-    

-    boolean isStart();

-

-    boolean isDependency();

-

-}

diff --git a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/ConfigFileInfo.java b/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/ConfigFileInfo.java
deleted file mode 100644
index 960fb31..0000000
--- a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/ConfigFileInfo.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*

- * 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.

- */

-package org.apache.karaf.features;

-

-public interface ConfigFileInfo {

-	

-	String getLocation();

-	

-	String getFinalname();

-	

-	boolean isOverride();

-

-}

diff --git a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/EventConstants.java b/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/EventConstants.java
deleted file mode 100644
index f83f185..0000000
--- a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/EventConstants.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features;
-
-/**
- * Constants for EventAdmin events
- */
-public final class EventConstants {
-
-    public static final String TYPE = "type";
-    public static final String EVENT = "event";
-    public static final String TIMESTAMP = "timestamp";
-
-    public static final String FEATURE_NAME = "name";
-    public static final String FEATURE_VERSION = "version";
-
-    public static final String REPOSITORY_NAME = "name";
-    public static final String REPOSITORY_URI = "uri";
-
-    public static final String TOPIC_EVENTS = "org/apache/karaf/features";
-    public static final String TOPIC_FEATURES_INSTALLED = TOPIC_EVENTS + "/features/INSTALLED";
-    public static final String TOPIC_FEATURES_UNINSTALLED = TOPIC_EVENTS + "/features/UNINSTALLED";
-    public static final String TOPIC_REPOSITORY_ADDED = TOPIC_EVENTS + "/repositories/ADDED";
-    public static final String TOPIC_REPOSITORY_REMOVED = TOPIC_EVENTS + "/repositories/REMOVED";
-
-    private EventConstants() {
-        // non-instantiable class
-    }
-
-
-
-}
diff --git a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/Feature.java b/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/Feature.java
deleted file mode 100644
index b87bc97..0000000
--- a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/Feature.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * A feature is a list of bundles associated identified by its name.
- */
-public interface Feature {
-
-    public static String DEFAULT_INSTALL_MODE = "auto";
-
-    String getId();
-
-    String getName();
-
-    String getDescription();
-
-    String getDetails();
-
-    String getVersion();
-
-    String getResolver();
-
-    String getInstall();
-
-    List<Feature> getDependencies();
-
-    List<BundleInfo> getBundles();
-
-    Map<String, Map<String, String>> getConfigurations();
-
-    List<ConfigFileInfo> getConfigurationFiles();
-}
diff --git a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/FeatureEvent.java b/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/FeatureEvent.java
deleted file mode 100644
index 516c988..0000000
--- a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/FeatureEvent.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features;
-
-import java.util.EventObject;
-
-public class FeatureEvent extends EventObject {
-
-    public static enum EventType {
-        FeatureInstalled,
-        FeatureUninstalled
-    }
-
-    private final EventType type;
-    private final Feature feature;
-    private final boolean replay;
-
-    public FeatureEvent(Feature feature, EventType type, boolean replay) {
-        super(feature);
-        this.type = type;
-        this.feature = feature;
-        this.replay = replay;
-    }
-
-    public EventType getType() {
-        return type;
-    }
-
-    public Feature getFeature() {
-        return feature;
-    }
-
-    public boolean isReplay() {
-        return replay;
-    }
-}
diff --git a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/FeaturesListener.java b/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/FeaturesListener.java
deleted file mode 100644
index 69f68c6..0000000
--- a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/FeaturesListener.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features;
-
-public interface FeaturesListener {
-
-    void featureEvent(FeatureEvent event);
-
-    void repositoryEvent(RepositoryEvent event);
-
-}
diff --git a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/FeaturesNamespaces.java b/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/FeaturesNamespaces.java
deleted file mode 100644
index 1a1bae2..0000000
--- a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/FeaturesNamespaces.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features;
-
-import javax.xml.namespace.QName;
-
-/**
- * Provides features XML/XSD constants.
- */
-public interface FeaturesNamespaces {
-
-    String URI_0_0_0 = "";
-    String URI_1_0_0 = "http://karaf.apache.org/xmlns/features/v1.0.0";
-    String URI_1_1_0 = "http://karaf.apache.org/xmlns/features/v1.1.0";
-
-    String URI_CURRENT = URI_1_1_0;
-
-    QName FEATURES_0_0_0 = new QName("features");
-    QName FEATURES_1_0_0 = new QName(URI_1_0_0, "features");
-    QName FEATURES_1_1_0 = new QName(URI_1_1_0, "features");
-
-    QName FEATURES_CURRENT = FEATURES_1_1_0;
-
-}
diff --git a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/FeaturesService.java b/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/FeaturesService.java
deleted file mode 100644
index c3a2795..0000000
--- a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/FeaturesService.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features;
-
-import java.net.URI;
-import java.util.EnumSet;
-import java.util.Set;
-
-/**
- * The service managing features repositories.
- */
-public interface FeaturesService {
-
-    enum Option {
-        NoCleanIfFailure,
-        PrintBundlesToRefresh,
-        NoAutoRefreshBundles,
-        ContinueBatchOnFailure,
-        Verbose
-    }
-
-    /**
-     * Validate repository contents.
-     * 
-     * @param uri Repository uri.
-     * @throws Exception When validation fails.
-     */
-    void validateRepository(URI uri) throws Exception;
-
-    void addRepository(URI url) throws Exception;
-
-    void addRepository(URI url, boolean install) throws Exception;
-
-    void removeRepository(URI url) throws Exception;
-
-    void removeRepository(URI url, boolean uninstall) throws Exception;
-    
-    void restoreRepository(URI url) throws Exception;
-
-    Repository[] listRepositories();
-
-    void installFeature(String name) throws Exception;
-
-    void installFeature(String name, EnumSet<Option> options) throws Exception;
-    
-    void installFeature(String name, String version) throws Exception;
-
-    void installFeature(String name, String version, EnumSet<Option> options) throws Exception;
-
-    void installFeature(Feature f, EnumSet<Option> options) throws Exception;
-
-    void installFeatures(Set<Feature> features, EnumSet<Option> options) throws Exception;
-
-    void uninstallFeature(String name) throws Exception;
-    
-    void uninstallFeature(String name, String version) throws Exception;
-
-    Feature[] listFeatures() throws Exception;
-
-    Feature[] listInstalledFeatures();
-
-    boolean isInstalled(Feature f);
-
-    Feature getFeature(String name, String version) throws Exception;
-
-    Feature getFeature(String name) throws Exception;
-}
diff --git a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/Repository.java b/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/Repository.java
deleted file mode 100644
index 6ee96da..0000000
--- a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/Repository.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features;
-
-import java.net.URI;
-
-/**
- * A repository of features.
- */
-public interface Repository {
-
-    String getName();
-
-    URI getURI();
-
-    URI[] getRepositories() throws Exception;
-
-    Feature[] getFeatures() throws Exception;
-    
-    boolean isValid();
-
-}
diff --git a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/RepositoryEvent.java b/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/RepositoryEvent.java
deleted file mode 100644
index 68f287b..0000000
--- a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/RepositoryEvent.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features;
-
-import java.util.EventObject;
-
-public class RepositoryEvent extends EventObject {
-
-    public static enum EventType {
-        RepositoryAdded,
-        RepositoryRemoved,
-    }
-
-    private final EventType type;
-    private final Repository repository;
-    private final boolean replay;
-
-    public RepositoryEvent(Repository repository, EventType type, boolean replay) {
-        super(repository);
-        this.type = type;
-        this.repository = repository;
-        this.replay = replay;
-    }
-
-    public EventType getType() {
-        return type;
-    }
-
-    public Repository getRepository() {
-        return repository;
-    }
-
-    public boolean isReplay() {
-        return replay;
-    }
-}
diff --git a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/Resolver.java b/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/Resolver.java
deleted file mode 100644
index d2fa941..0000000
--- a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/Resolver.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features;
-
-import java.util.List;
-
-public interface Resolver {
-
-    List<BundleInfo> resolve(Feature feature) throws Exception;
-
-}
diff --git a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/internal/BundleInfoImpl.java b/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/internal/BundleInfoImpl.java
deleted file mode 100644
index 0486e14..0000000
--- a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/internal/BundleInfoImpl.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*

- * 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.

- */

-package org.apache.karaf.features.internal;

-

-import org.apache.karaf.features.BundleInfo;

-

-/**

- * A holder of bundle info

- */

-public class BundleInfoImpl implements BundleInfo {

-

-    private int startLevel;

-    private String location;

-    private boolean start;

-    private boolean dependency;

-

-

-    public BundleInfoImpl() {

-    }

-

-    public BundleInfoImpl(String location) {

-    	this.location = location;

-    }

-

-

-    public BundleInfoImpl(String location, boolean start) {

-    	this.location = location;

-        this.start = start;

-    }

-

-    public BundleInfoImpl(String location, int startLevel) {

-    	this.location = location;

-        this.startLevel = startLevel;

-    }

-

-    public BundleInfoImpl(String location, int startLevel, boolean start) {

-    	this.location = location;

-        this.startLevel = startLevel;

-        this.start = start;

-    }

-

-    public BundleInfoImpl(String location, int startLevel, boolean start, boolean dependency) {

-        this.location = location;

-        this.startLevel = startLevel;

-        this.start = start;

-        this.dependency = dependency;

-    }

-

-    public void setStartLevel(Integer startLevel) {

-    	this.startLevel = startLevel;

-    }

-

-    public int getStartLevel() {

-		return this.startLevel;

-	}

-

-	public void setName(String location) {

-		this.location = location;

-	}

-

-	public String getLocation() {

-		return this.location;

-	}

-

-	public void setStart(boolean start) {

-		this.start = start;

-	}

-

-	public boolean isStart() {

-		return start;

-	}

-

-    public void setDependency(boolean dependency) {

-        this.dependency = dependency;

-    }

-

-    public boolean isDependency() {

-        return dependency;

-    }

-

-}

diff --git a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/internal/ConfigFileInfoImpl.java b/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/internal/ConfigFileInfoImpl.java
deleted file mode 100644
index fc5b8f5..0000000
--- a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/internal/ConfigFileInfoImpl.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*

- * 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.

- */

-package org.apache.karaf.features.internal;

-

-import org.apache.karaf.features.ConfigFileInfo;

-

-public class ConfigFileInfoImpl implements ConfigFileInfo {

-

-	private String location;

-	private String finalname;

-	private boolean override;

-

-	public ConfigFileInfoImpl(String location, String finalname, boolean override) {

-		this.location = location;

-		this.finalname = finalname;

-		this.override = override;

-	}

-

-	public String getLocation() {

-		return location;

-	}

-

-	public String getFinalname() {

-		return finalname;

-	}

-	

-	public boolean isOverride() {

-		return override;

-	}

-

-}

diff --git a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/internal/EventAdminListener.java b/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/internal/EventAdminListener.java
deleted file mode 100644
index de2eb4c..0000000
--- a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/internal/EventAdminListener.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.internal;
-
-import java.util.Dictionary;
-import java.util.Hashtable;
-
-import org.apache.karaf.features.EventConstants;
-import org.apache.karaf.features.FeatureEvent;
-import org.apache.karaf.features.FeaturesListener;
-import org.apache.karaf.features.RepositoryEvent;
-import org.osgi.framework.BundleContext;
-import org.osgi.service.event.Event;
-import org.osgi.service.event.EventAdmin;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * A listener to publish events to EventAdmin
- */
-public class EventAdminListener implements FeaturesListener {
-
-    private final ServiceTracker tracker;
-
-    public EventAdminListener(BundleContext context) {
-        tracker = new ServiceTracker(context, EventAdmin.class.getName(), null);
-        tracker.open();
-    }
-
-    public void featureEvent(FeatureEvent event) {
-        EventAdmin eventAdmin = (EventAdmin) tracker.getService();
-        if (eventAdmin == null) {
-            return;
-        }
-        Dictionary<String, Object> props = new Hashtable<String, Object>();
-        props.put(EventConstants.TYPE, event.getType());
-        props.put(EventConstants.EVENT, event);
-        props.put(EventConstants.TIMESTAMP, System.currentTimeMillis());
-        props.put(EventConstants.FEATURE_NAME, event.getFeature().getName());
-        props.put(EventConstants.FEATURE_VERSION, event.getFeature().getVersion());
-        String topic;
-        switch (event.getType()) {
-            case FeatureInstalled:
-                topic = EventConstants.TOPIC_FEATURES_INSTALLED;
-                break;
-            case FeatureUninstalled:
-                topic = EventConstants.TOPIC_FEATURES_UNINSTALLED;
-                break;
-            default:
-                throw new IllegalStateException("Unknown features event type: " + event.getType());
-        }
-        eventAdmin.postEvent(new Event(topic, props));
-    }
-
-    public void repositoryEvent(RepositoryEvent event) {
-        EventAdmin eventAdmin = (EventAdmin) tracker.getService();
-        if (eventAdmin == null) {
-            return;
-        }
-        Dictionary<String, Object> props = new Hashtable<String, Object>();
-        props.put(EventConstants.TYPE, event.getType());
-        props.put(EventConstants.EVENT, event);
-        props.put(EventConstants.TIMESTAMP, System.currentTimeMillis());
-        props.put(EventConstants.REPOSITORY_NAME, event.getRepository().getName());
-        props.put(EventConstants.REPOSITORY_URI, event.getRepository().getURI().toString());
-        String topic;
-        switch (event.getType()) {
-            case RepositoryAdded:
-                topic = EventConstants.TOPIC_REPOSITORY_ADDED;
-                break;
-            case RepositoryRemoved:
-                topic = EventConstants.TOPIC_REPOSITORY_REMOVED;
-                break;
-            default:
-                throw new IllegalStateException("Unknown repository event type: " + event.getType());
-        }
-        eventAdmin.postEvent(new Event(topic, props));
-    }
-}
diff --git a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/internal/FeatureImpl.java b/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/internal/FeatureImpl.java
deleted file mode 100644
index a4b4259..0000000
--- a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/internal/FeatureImpl.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.internal;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.karaf.features.BundleInfo;
-import org.apache.karaf.features.ConfigFileInfo;
-import org.apache.karaf.features.Feature;
-
-/**
- * A feature
- */
-public class FeatureImpl implements Feature {
-
-    private String id;
-    private String name;
-    private String description;
-    private String details;
-    private String version;
-    private String resolver;
-    private String install = DEFAULT_INSTALL_MODE;
-    private List<Feature> dependencies = new ArrayList<Feature>();
-    private List<BundleInfo> bundles = new ArrayList<BundleInfo>();
-    private Map<String, Map<String,String>> configs = new HashMap<String, Map<String,String>>();
-    private List<ConfigFileInfo> configurationFiles = new ArrayList<ConfigFileInfo>();
-    public static String SPLIT_FOR_NAME_AND_VERSION = "_split_for_name_and_version_";
-    public static String DEFAULT_VERSION = "0.0.0";
-    public static String VERSION_PREFIX = "version=";
-
-    public FeatureImpl() {
-    }
-
-    public FeatureImpl(String name) {
-        this(name, DEFAULT_VERSION);
-    }
-    
-    public FeatureImpl(String name, String version) {
-    	this.name = name;
-    	this.version = version;
-        this.id = name + "-" + version;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getDetails() {
-        return details;
-    }
-
-    public void setDetails(String details) {
-        this.details = details;
-    }
-
-    public String getVersion() {
-		return version;
-	}
-    
-	public void setVersion(String version) {
-		this.version = version;
-	}
-
-    public String getResolver() {
-        return resolver;
-    }
-
-    public void setResolver(String resolver) {
-        this.resolver = resolver;
-    }
-
-    public String getInstall() {
-        return install;
-    }
-
-    public void setInstall(String install) {
-        this.install = install;
-    }
-
-    public List<Feature> getDependencies() {
-        return dependencies;
-    }
-
-    public List<BundleInfo> getBundles() {
-        return bundles;
-    }
-
-    public Map<String, Map<String, String>> getConfigurations() {
-        return configs;
-    }
-    
-	public List<ConfigFileInfo> getConfigurationFiles() {
-		return configurationFiles;
-	}
-    public void addDependency(Feature dependency) {
-        dependencies.add(dependency);
-    }
-
-    public void addBundle(BundleInfo bundle) {
-        bundles.add(bundle);
-    }
-
-    public void addConfig(String name, Map<String,String> properties) {
-        configs.put(name, properties);
-    }
-    
-    public void addConfigurationFile(ConfigFileInfo configurationFileInfo) {
-    	configurationFiles.add(configurationFileInfo);
-    }
-
-    public String toString() {
-    	String ret = getName() + SPLIT_FOR_NAME_AND_VERSION + getVersion();
-    	return ret;
-    }
-    
-    public static Feature valueOf(String str) {
-    	if (str.indexOf(SPLIT_FOR_NAME_AND_VERSION) >= 0) {
-    		String strName = str.substring(0, str.indexOf(SPLIT_FOR_NAME_AND_VERSION));
-        	String strVersion = str.substring(str.indexOf(SPLIT_FOR_NAME_AND_VERSION) 
-        			+ SPLIT_FOR_NAME_AND_VERSION.length(), str.length());
-        	return new FeatureImpl(strName, strVersion);
-    	} else {
-    		return new FeatureImpl(str);
-    	}
-    			
-    	
-    }
-
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        FeatureImpl feature = (FeatureImpl) o;
-
-        if (!name.equals(feature.name)) return false;
-        if (!version.equals(feature.version)) return false;
-
-        return true;
-    }
-
-    public int hashCode() {
-        int result = name.hashCode();
-        result = 31 * result + version.hashCode();
-        return result;
-    }
-}
diff --git a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/internal/FeatureValidationUtil.java b/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/internal/FeatureValidationUtil.java
deleted file mode 100644
index 7e21690..0000000
--- a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/internal/FeatureValidationUtil.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.internal;
-
-import java.io.InputStream;
-import java.net.URI;
-import java.net.URLConnection;
-
-import javax.xml.XMLConstants;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamSource;
-import javax.xml.validation.Schema;
-import javax.xml.validation.SchemaFactory;
-import javax.xml.validation.Validator;
-
-import org.w3c.dom.Document;
-
-/**
- * Utility class which fires XML Schema validation.
- */
-public class FeatureValidationUtil {
-
-    /**
-     * Runs schema validation.
-     * 
-     * @param uri Uri to validate.
-     * @throws Exception When validation fails.
-     */
-    public static void validate(URI uri) throws Exception {
-        URLConnection conn = uri.toURL().openConnection();
-        conn.setDefaultUseCaches(false);
-
-        InputStream stream = conn.getInputStream();
-
-        // load document and check the root element for namespace declaration
-        DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
-        dFactory.setNamespaceAware(true);
-        Document doc = dFactory.newDocumentBuilder().parse(stream);
-
-        if (doc.getDocumentElement().getNamespaceURI() == null) {
-            return;
-        }
-
-        SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
-        
-        /** FIXME should move to 1.1.0 ? */
-        // root element has namespace - we can use schema validation
-        Schema schema = factory.newSchema(new StreamSource(FeatureValidationUtil.class
-            .getResourceAsStream("/org/apache/karaf/features/karaf-features-1.0.0.xsd")));
-
-        // create schema by reading it from an XSD file:
-        Validator validator = schema.newValidator();
-
-        try {
-            validator.validate(new DOMSource(doc));
-        } catch (Exception e) {
-            throw new IllegalArgumentException("Unable to validate " + uri, e);
-        }        
-    }
-
-}
diff --git a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java b/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
deleted file mode 100644
index fb93d88..0000000
--- a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
+++ /dev/null
@@ -1,1443 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.internal;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Dictionary;
-import java.util.EnumSet;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.jar.JarInputStream;
-import java.util.jar.Manifest;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.felix.utils.manifest.Clause;
-import org.apache.felix.utils.manifest.Parser;
-import org.apache.felix.utils.version.VersionRange;
-import org.apache.felix.utils.version.VersionTable;
-import org.apache.karaf.features.BundleInfo;
-import org.apache.karaf.features.ConfigFileInfo;
-import org.apache.karaf.features.Feature;
-import org.apache.karaf.features.FeatureEvent;
-import org.apache.karaf.features.FeaturesListener;
-import org.apache.karaf.features.FeaturesService;
-import org.apache.karaf.features.Repository;
-import org.apache.karaf.features.RepositoryEvent;
-import org.apache.karaf.features.Resolver;
-import org.apache.karaf.util.collections.CopyOnWriteArrayIdentityList;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleException;
-import org.osgi.framework.Constants;
-import org.osgi.framework.FrameworkEvent;
-import org.osgi.framework.FrameworkListener;
-import org.osgi.framework.FrameworkUtil;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.Version;
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
-import org.osgi.service.packageadmin.PackageAdmin;
-import org.osgi.service.startlevel.StartLevel;
-import org.osgi.util.tracker.ServiceTracker;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static java.lang.String.format;
-
-/**
- * The Features service implementation.
- * Adding a repository url will load the features contained in this repository and
- * create dummy sub shells.  When invoked, these commands will prompt the user for
- * installing the needed bundles.
- */
-public class FeaturesServiceImpl implements FeaturesService, FrameworkListener {
-
-    public static final String CONFIG_KEY = "org.apache.karaf.features.configKey";
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(FeaturesServiceImpl.class);
-
-    private static final int KARAF_BUNDLE_START_LEVEL =
-                        Integer.parseInt(System.getProperty("karaf.startlevel.bundle", "80"));
-
-    private BundleContext bundleContext;
-    private ConfigurationAdmin configAdmin;
-    private PackageAdmin packageAdmin;
-    private StartLevel startLevel;
-    private boolean respectStartLvlDuringFeatureStartup;
-    private long resolverTimeout = 5000;
-    private Set<URI> uris;
-    private Map<URI, RepositoryImpl> repositories = new HashMap<URI, RepositoryImpl>();
-    private Map<String, Map<String, Feature>> features;
-    private Map<Feature, Set<Long>> installed = new HashMap<Feature, Set<Long>>();
-    private String boot;
-    private boolean bootFeaturesInstalled;
-    private List<FeaturesListener> listeners = new CopyOnWriteArrayIdentityList<FeaturesListener>();
-    private ThreadLocal<Repository> repo = new ThreadLocal<Repository>();
-    private EventAdminListener eventAdminListener;
-    private final Object refreshLock = new Object();
-    private long refreshTimeout = 5000;
-
-    public FeaturesServiceImpl() {
-    }
-
-    public BundleContext getBundleContext() {
-        return bundleContext;
-    }
-
-    public void setBundleContext(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-
-    public ConfigurationAdmin getConfigAdmin() {
-        return configAdmin;
-    }
-
-    public void setConfigAdmin(ConfigurationAdmin configAdmin) {
-        this.configAdmin = configAdmin;
-    }
-
-    public PackageAdmin getPackageAdmin() {
-        return packageAdmin;
-    }
-
-    public void setPackageAdmin(PackageAdmin packageAdmin) {
-        this.packageAdmin = packageAdmin;
-    }
-
-    public StartLevel getStartLevel() {
-        return startLevel;
-    }
-
-    public void setRespectStartLvlDuringFeatureStartup(boolean respectStartLvlDuringFeatureStartup) {
-        this.respectStartLvlDuringFeatureStartup = respectStartLvlDuringFeatureStartup;
-    }
-
-    public void setStartLevel(StartLevel startLevel) {
-        this.startLevel = startLevel;
-    }
-
-    public long getResolverTimeout() {
-        return resolverTimeout;
-    }
-
-    public void setResolverTimeout(long resolverTimeout) {
-        this.resolverTimeout = resolverTimeout;
-    }
-
-    public long getRefreshTimeout() {
-        return refreshTimeout;
-    }
-
-    public void setRefreshTimeout(long refreshTimeout) {
-        this.refreshTimeout = refreshTimeout;
-    }
-
-    public void registerListener(FeaturesListener listener) {
-        listeners.add(listener);
-        for (Repository repository : listRepositories()) {
-            listener.repositoryEvent(new RepositoryEvent(repository, RepositoryEvent.EventType.RepositoryAdded, true));
-        }
-        for (Feature feature : listInstalledFeatures()) {
-            listener.featureEvent(new FeatureEvent(feature, FeatureEvent.EventType.FeatureInstalled, true));
-        }
-    }
-
-    public void unregisterListener(FeaturesListener listener) {
-        listeners.remove(listener);
-    }
-
-    public void setUrls(String uris) throws URISyntaxException {
-        String[] s = uris.split(",");
-        this.uris = new HashSet<URI>();
-        for (String value : s) {
-            this.uris.add(new URI(value));
-        }
-    }
-
-    public void setBoot(String boot) {
-        this.boot = boot;
-    }
-
-    /**
-     * Validate repository.
-     *
-     * @param uri the features repository URI.
-     */
-    public void validateRepository(URI uri) throws Exception {
-        FeatureValidationUtil.validate(uri);
-    }
-
-    /**
-     * Register a features repository.
-     * @param uri the features repository URI.
-     * @throws Exception in case of adding failure.
-     */
-    public void addRepository(URI uri) throws Exception {
-        addRepository(uri, false);
-    }
-
-    /**
-     * Register a features repository.
-     *
-     * @param uri
-     * @param install
-     * @throws Exception
-     */
-    public void addRepository(URI uri, boolean install) throws Exception {
-        if (!repositories.containsKey(uri)) {
-            RepositoryImpl repository = internalAddRepository(uri);
-            saveState();
-            if (install) {
-                for (Feature feature : repository.getFeatures()) {
-                    installFeature(feature, EnumSet.noneOf(Option.class));
-                }
-            }
-        } else {
-            refreshRepository(uri, install);
-        }
-    }
-
-    /**
-     * Add a features repository into the internal registry.
-     *
-     * @param uri the features repository URI.
-     * @return the internal <code>RepositoryImpl</code> representation.
-     * @throws Exception in case of adding failure.
-     */
-    protected RepositoryImpl internalAddRepository(URI uri) throws Exception {
-        validateRepository(uri);
-        RepositoryImpl repo = null;
-        repo = new RepositoryImpl(uri);
-        repositories.put(uri, repo);
-        repo.load();
-        if (repo.getName() == null) {
-            LOGGER.warn("Feature repository doesn't have a name. The name will be mandatory in the next Karaf version.");
-        }
-        callListeners(new RepositoryEvent(repo, RepositoryEvent.EventType.RepositoryAdded, false));
-        features = null;
-        return repo;
-
-    }
-
-    /**
-     * Refresh a features repository.
-     *
-     * @param uri the features repository URI.
-     * @throws Exception in case of refresh failure.
-     */
-    protected void refreshRepository(URI uri) throws Exception {
-        this.refreshRepository(uri, false);
-    }
-
-    /**
-     * Refresh a features repository.
-     *
-     * @param uri     the features repository URI.
-     * @param install if true, install all features in the features repository.
-     * @throws Exception in case of refresh failure.
-     */
-    protected void refreshRepository(URI uri, boolean install) throws Exception {
-        try {
-            removeRepository(uri, install);
-            addRepository(uri, install);
-        } catch (Exception e) {
-            //get chance to restore previous, fix for KARAF-4
-            restoreRepository(uri);
-            throw new Exception("Unable to refresh features repository " + uri, e);
-        }
-    }
-
-    /**
-     * Remove a features repository.
-     *
-     * @param uri the features repository URI.
-     * @throws Exception in case of remove failure.
-     */
-    public void removeRepository(URI uri) throws Exception {
-        this.removeRepository(uri, false);
-    }
-
-    /**
-     * Remove a features repository.
-     *
-     * @param uri       the features repository URI.
-     * @param uninstall if true, uninstall all features from the features repository.
-     * @throws Exception in case of remove failure.
-     */
-    public void removeRepository(URI uri, boolean uninstall) throws Exception {
-        if (repositories.containsKey(uri)) {
-            if (uninstall) {
-                RepositoryImpl repositoryImpl = repositories.get(uri);
-                for (Feature feature : repositoryImpl.getFeatures()) {
-                    this.uninstallFeature(feature.getName(), feature.getVersion());
-                }
-            }
-            internalRemoveRepository(uri);
-            saveState();
-        }
-    }
-
-    /**
-     * Remove a features repository from the internal registry.
-     *
-     * @param uri the features repository URI.
-     */
-    public void internalRemoveRepository(URI uri) {
-        Repository repo = repositories.remove(uri);
-        this.repo.set(repo);
-        callListeners(new RepositoryEvent(repo, RepositoryEvent.EventType.RepositoryRemoved, false));
-        features = null;
-    }
-
-    /**
-     * Restore a features repository.
-     *
-     * @param uri the features repository URI.
-     * @throws Exception in case of restore failure.
-     */
-    public void restoreRepository(URI uri) throws Exception {
-        repositories.put(uri, (RepositoryImpl) repo.get());
-        callListeners(new RepositoryEvent(repo.get(), RepositoryEvent.EventType.RepositoryAdded, false));
-        features = null;
-    }
-
-    /**
-     * List the features repositories.
-     *
-     * @return the list of features repositories.
-     */
-    public Repository[] listRepositories() {
-        Collection<RepositoryImpl> repos = repositories.values();
-        return repos.toArray(new Repository[repos.size()]);
-    }
-
-    /**
-     * Install a feature identified by a name.
-     *
-     * @param name the name of the feature.
-     * @throws Exception in case of installation failure.
-     */
-    public void installFeature(String name) throws Exception {
-        installFeature(name, FeatureImpl.DEFAULT_VERSION);
-    }
-
-    /**
-     * Install a feature identified by a name, including installation options.
-     *
-     * @param name the name of the feature.
-     * @param options the installation options.
-     * @throws Exception in case of installation failure.
-     */
-    public void installFeature(String name, EnumSet<Option> options) throws Exception {
-        installFeature(name, FeatureImpl.DEFAULT_VERSION, options);
-    }
-
-    /**
-     * Install a feature identified by a name and a version.
-     *
-     * @param name the name of the feature.
-     * @param version the version of the feature.
-     * @throws Exception in case of installation failure.
-     */
-    public void installFeature(String name, String version) throws Exception {
-        installFeature(name, version, EnumSet.noneOf(Option.class));
-    }
-
-    public void installFeature(String name, String version, EnumSet<Option> options) throws Exception {
-        Feature f = getFeature(name, version);
-        if (f == null) {
-            throw new Exception("No feature named '" + name
-                    + "' with version '" + version + "' available");
-        }
-        installFeature(f, options);
-    }
-
-    public void installFeature(Feature f, EnumSet<Option> options) throws Exception {
-        installFeatures(Collections.singleton(f), options);
-    }
-
-    public void installFeatures(Set<Feature> features, EnumSet<Option> options) throws Exception {
-        final InstallationState state = new InstallationState();
-        final InstallationState failure = new InstallationState();
-        boolean verbose = options.contains(FeaturesService.Option.Verbose);
-        try {
-            // Install everything
-            for (Feature f : features) {
-                InstallationState s = new InstallationState();
-                try {
-                    doInstallFeature(s, f, verbose);
-                    state.bundleInfos.putAll(s.bundleInfos);
-                    state.bundles.addAll(s.bundles);
-                    state.features.putAll(s.features);
-                    state.installed.addAll(s.installed);
-                } catch (Exception e) {
-                    failure.bundles.addAll(s.bundles);
-                    failure.features.putAll(s.features);
-                    failure.installed.addAll(s.installed);
-                    if (options.contains(Option.ContinueBatchOnFailure)) {
-                        LOGGER.warn("Error when installing feature {}: {}", f.getName(), e);
-                    } else {
-                        throw e;
-                    }
-                }
-            }
-            // Find bundles to refresh
-            boolean print = options.contains(Option.PrintBundlesToRefresh);
-            boolean refresh = !options.contains(Option.NoAutoRefreshBundles);
-            if (print || refresh) {
-                Set<Bundle> bundlesToRefresh = findBundlesToRefresh(state);
-                StringBuilder sb = new StringBuilder();
-                for (Bundle b : bundlesToRefresh) {
-                    if (sb.length() > 0) {
-                        sb.append(", ");
-                    }
-                    sb.append(b.getSymbolicName()).append(" (").append(b.getBundleId()).append(")");
-                }
-                LOGGER.debug("Bundles to refresh: {}", sb.toString());
-                if (!bundlesToRefresh.isEmpty()) {
-                    if (print) {
-                        if (refresh) {
-                            System.out.println("Refreshing bundles " + sb.toString());
-                        } else {
-                            System.out.println("The following bundles may need to be refreshed: " + sb.toString());
-                        }
-                    }
-                    if (refresh) {
-                        LOGGER.debug("Refreshing bundles: {}", sb.toString());
-                        refreshPackages(bundlesToRefresh.toArray(new Bundle[bundlesToRefresh.size()]));
-                    }
-                }
-            }
-            // start all bundles sorted by startlvl if wished for
-            List<Bundle> bundlesSortedByStartLvl = new ArrayList<Bundle>(state.bundles);
-            if (respectStartLvlDuringFeatureStartup) {
-                Collections.sort(bundlesSortedByStartLvl, new Comparator<Bundle>() {
-                    @Override
-                    public int compare(Bundle bundle, Bundle bundle1) {
-                        int startLevel = state.bundleInfos.get(bundle.getBundleId()).getStartLevel();
-                        startLevel = startLevel == 0 ? KARAF_BUNDLE_START_LEVEL : startLevel;
-                        int startLevel1 = state.bundleInfos.get(bundle1.getBundleId()).getStartLevel();
-                        startLevel1 = startLevel1 == 0 ? KARAF_BUNDLE_START_LEVEL : startLevel1;
-                        return startLevel - startLevel1;
-                    }
-                });
-            }
-            for (Bundle b : bundlesSortedByStartLvl) {
-                // do not start fragment bundles
-                Dictionary d = b.getHeaders();
-                String fragmentHostHeader = (String) d.get(Constants.FRAGMENT_HOST);
-                if (fragmentHostHeader == null || fragmentHostHeader.trim().length() == 0) {
-                    // do not start bundles that are persistently stopped
-                    if (state.installed.contains(b)
-                            || (b.getState() != Bundle.STARTING && b.getState() != Bundle.ACTIVE
-                            && getStartLevel().isBundlePersistentlyStarted(b))) {
-                        // do no start bundles when user request it
-                        Long bundleId = b.getBundleId();
-                        BundleInfo bundleInfo = state.bundleInfos.get(bundleId);
-                        if (bundleInfo == null || bundleInfo.isStart()) {
-                            try {
-                                b.start();
-                            } catch (BundleException be) {
-                                String msg = format("Could not start bundle %s in feature(s) %s: %s", b.getLocation(), getFeaturesContainingBundleList(b), be.getMessage());
-                                throw new Exception(msg, be);
-                            }
-                        }
-                    }
-                }
-            }
-            // Clean up for batch
-            if (!options.contains(Option.NoCleanIfFailure)) {
-                failure.installed.removeAll(state.bundles);
-                for (Bundle b : failure.installed) {
-                    try {
-                        b.uninstall();
-                    } catch (Exception e2) {
-                        // Ignore
-                    }
-                }
-            }
-        } catch (Exception e) {
-            // cleanup on error
-            if (!options.contains(Option.NoCleanIfFailure)) {
-                // Uninstall everything
-                for (Bundle b : state.installed) {
-                    try {
-                        b.uninstall();
-                    } catch (Exception e2) {
-                        // Ignore
-                    }
-                }
-                for (Bundle b : failure.installed) {
-                    try {
-                        b.uninstall();
-                    } catch (Exception e2) {
-                        // Ignore
-                    }
-                }
-            } else {
-                // Force start of bundles so that they are flagged as persistently started
-                for (Bundle b : state.installed) {
-                    try {
-                        b.start();
-                    } catch (Exception e2) {
-                        // Ignore
-                    }
-                }
-            }
-            // rethrow exception
-            throw e;
-        }
-        for (Feature f : features) {
-            callListeners(new FeatureEvent(f, FeatureEvent.EventType.FeatureInstalled, false));
-        }
-        for (Map.Entry<Feature, Set<Long>> e : state.features.entrySet()) {
-            installed.put(e.getKey(), e.getValue());
-        }
-        saveState();
-    }
-
-    protected static class InstallationState {
-        final Set<Bundle> installed = new HashSet<Bundle>();
-        final List<Bundle> bundles = new ArrayList<Bundle>();
-        final Map<Long, BundleInfo> bundleInfos = new HashMap<Long, BundleInfo>();
-        final Map<Feature, Set<Long>> features = new HashMap<Feature, Set<Long>>();
-    }
-
-    protected void doInstallFeature(InstallationState state, Feature feature, boolean verbose) throws Exception {
-        LOGGER.debug("Installing feature " + feature.getName() + " " + feature.getVersion());
-        if (verbose) {
-            System.out.println("Installing feature " + feature.getName() + " " + feature.getVersion());
-        }
-        for (Feature dependency : feature.getDependencies()) {
-            VersionRange range = FeatureImpl.DEFAULT_VERSION.equals(dependency.getVersion())
-                    ? VersionRange.ANY_VERSION : new VersionRange(dependency.getVersion(), true, true);
-            Feature fi = null;
-            for (Feature f : installed.keySet()) {
-                if (f.getName().equals(dependency.getName())) {
-                    Version v = VersionTable.getVersion(f.getVersion());
-                    if (range.contains(v)) {
-                        if (fi == null || VersionTable.getVersion(fi.getVersion()).compareTo(v) < 0) {
-                            fi = f;
-                        }
-                    }
-                }
-            }
-            if (fi == null) {
-                Map<String, Feature> avail = getFeatures().get(dependency.getName());
-                if (avail != null) {
-                    for (Feature f : avail.values()) {
-                        Version v = VersionTable.getVersion(f.getVersion());
-                        if (range.contains(v)) {
-                            if (fi == null || VersionTable.getVersion(fi.getVersion()).compareTo(v) < 0) {
-                                fi = f;
-                            }
-                        }
-                    }
-                }
-            }
-            if (fi == null) {
-                throw new Exception("No feature named '" + dependency.getName()
-                        + "' with version '" + dependency.getVersion() + "' available");
-            }
-            if (state.features.containsKey(fi)) {
-                LOGGER.debug("Feature {} with version {} is already being installed", feature.getName(), feature.getVersion());
-            } else {
-                if (! (fi.getName().equals(feature.getName())
-                    && fi.getVersion().equals(feature.getVersion()))) {
-                    doInstallFeature(state, fi, verbose);
-                }
-            }
-        }
-        for (String config : feature.getConfigurations().keySet()) {
-            Dictionary<String, String> props = new Hashtable<String, String>(feature.getConfigurations().get(config));
-            String[] pid = parsePid(config);
-            Configuration cfg = findExistingConfiguration(configAdmin, pid[0], pid[1]);
-            if (cfg == null) {
-                cfg = createConfiguration(configAdmin, pid[0], pid[1]);
-                String key = createConfigurationKey(pid[0], pid[1]);
-                props.put(CONFIG_KEY, key);
-                if (cfg.getBundleLocation() != null) {
-                    cfg.setBundleLocation(null);
-                }
-                cfg.update(props);
-            }
-        }
-        for (ConfigFileInfo configFile : feature.getConfigurationFiles()) {
-            installConfigurationFile(configFile.getLocation(),
-                    configFile.getFinalname(), configFile.isOverride(), verbose);
-        }
-        Set<Long> bundles = new TreeSet<Long>();
-        List<InstallResult> installResultList = new LinkedList<InstallResult>();
-        for (BundleInfo bInfo : resolve(feature)) {
-            InstallResult result = installBundleIfNeeded(state, bInfo, verbose);
-            bundles.add(result.getBundle().getBundleId());
-            state.bundleInfos.put(result.getBundle().getBundleId(), bInfo);
-            installResultList.add(result);
-        }
-        for (InstallResult result : installResultList) {
-            if (!result.isPreviouslyInstalled()) {
-                startBundleIfNeeded(result.getBundle(), result.getStartLevel());
-            }
-        }
-        state.features.put(feature, bundles);
-    }
-
-    private String createConfigurationKey(String pid, String factoryPid) {
-        return factoryPid == null ? pid : pid + "-" + factoryPid;
-    }
-
-    protected List<BundleInfo> resolve(Feature feature) throws Exception {
-        String resolver = feature.getResolver();
-        // If no resolver is specified, we expect a list of uris
-        if (resolver == null || resolver.length() == 0) {
-            return feature.getBundles();
-        }
-        boolean optional = false;
-        if (resolver.startsWith("(") && resolver.endsWith(")")) {
-            resolver = resolver.substring(1, resolver.length() - 1);
-            optional = true;
-        }
-        // Else, find the resolver
-        String filter = "(&(" + Constants.OBJECTCLASS + "=" + Resolver.class.getName() + ")(name=" + resolver + "))";
-        ServiceTracker tracker = new ServiceTracker(bundleContext, FrameworkUtil.createFilter(filter), null);
-        tracker.open();
-        try {
-            if (optional) {
-                Resolver r = (Resolver) tracker.getService();
-                if (r != null) {
-                    return r.resolve(feature);
-                } else {
-                    LOGGER.debug("Optional resolver '" + resolver + "' not found, using the default resolver");
-                    return feature.getBundles();
-                }
-            } else {
-                Resolver r = (Resolver) tracker.waitForService(resolverTimeout);
-                if (r == null) {
-                    throw new Exception("Unable to find required resolver '" + resolver + "'");
-                }
-                return r.resolve(feature);
-            }
-        } finally {
-            tracker.close();
-        }
-    }
-
-    protected Set<Bundle> findBundlesToRefresh(InstallationState state) {
-        Set<Bundle> bundles = new HashSet<Bundle>();
-        bundles.addAll(findBundlesWithOptionalPackagesToRefresh(state));
-        bundles.addAll(findBundlesWithFragmentsToRefresh(state));
-        return bundles;
-    }
-
-    protected Set<Bundle> findBundlesWithFragmentsToRefresh(InstallationState state) {
-        Set<Bundle> bundles = new HashSet<Bundle>();
-        Set<Bundle> oldBundles = new HashSet<Bundle>(state.bundles);
-        oldBundles.removeAll(state.installed);
-        if (!oldBundles.isEmpty()) {
-            for (Bundle b : state.installed) {
-                String hostHeader = (String) b.getHeaders().get(Constants.FRAGMENT_HOST);
-                if (hostHeader != null) {
-                    Clause[] clauses = Parser.parseHeader(hostHeader);
-                    if (clauses != null && clauses.length > 0) {
-                        Clause path = clauses[0];
-                        for (Bundle hostBundle : oldBundles) {
-                            if (hostBundle.getSymbolicName().equals(path.getName())) {
-                                String ver = path.getAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE);
-                                if (ver != null) {
-                                    VersionRange v = VersionRange.parseVersionRange(ver);
-                                    if (v.contains(hostBundle.getVersion())) {
-                                        bundles.add(hostBundle);
-                                    }
-                                } else {
-                                    bundles.add(hostBundle);
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        return bundles;
-    }
-
-    protected Set<Bundle> findBundlesWithOptionalPackagesToRefresh(InstallationState state) {
-        // First pass: include all bundles contained in these features
-        Set<Bundle> bundles = new HashSet<Bundle>(state.bundles);
-        bundles.removeAll(state.installed);
-        if (bundles.isEmpty()) {
-            return bundles;
-        }
-        // Second pass: for each bundle, check if there is any unresolved optional package that could be resolved
-        Map<Bundle, List<Clause>> imports = new HashMap<Bundle, List<Clause>>();
-        for (Iterator<Bundle> it = bundles.iterator(); it.hasNext(); ) {
-            Bundle b = it.next();
-            String importsStr = (String) b.getHeaders().get(Constants.IMPORT_PACKAGE);
-            List<Clause> importsList = getOptionalImports(importsStr);
-            if (importsList.isEmpty()) {
-                it.remove();
-            } else {
-                imports.put(b, importsList);
-            }
-        }
-        if (bundles.isEmpty()) {
-            return bundles;
-        }
-        // Third pass: compute a list of packages that are exported by our bundles and see if
-        //             some exported packages can be wired to the optional imports
-        List<Clause> exports = new ArrayList<Clause>();
-        for (Bundle b : state.installed) {
-            String exportsStr = (String) b.getHeaders().get(Constants.EXPORT_PACKAGE);
-            if (exportsStr != null) {
-                Clause[] exportsList = Parser.parseHeader(exportsStr);
-                exports.addAll(Arrays.asList(exportsList));
-            }
-        }
-        for (Iterator<Bundle> it = bundles.iterator(); it.hasNext(); ) {
-            Bundle b = it.next();
-            List<Clause> importsList = imports.get(b);
-            for (Iterator<Clause> itpi = importsList.iterator(); itpi.hasNext(); ) {
-                Clause pi = itpi.next();
-                boolean matching = false;
-                for (Clause pe : exports) {
-                    if (pi.getName().equals(pe.getName())) {
-                        String evStr = pe.getAttribute(Constants.VERSION_ATTRIBUTE);
-                        String ivStr = pi.getAttribute(Constants.VERSION_ATTRIBUTE);
-                        Version exported = evStr != null ? Version.parseVersion(evStr) : Version.emptyVersion;
-                        VersionRange imported = ivStr != null ? VersionRange.parseVersionRange(ivStr) : VersionRange.ANY_VERSION;
-                        if (imported.contains(exported)) {
-                            matching = true;
-                            break;
-                        }
-                    }
-                }
-                if (!matching) {
-                    itpi.remove();
-                }
-            }
-            if (importsList.isEmpty()) {
-                it.remove();
-            } else {
-                LOGGER.debug("Refeshing bundle {} ({}) to solve the following optional imports", b.getSymbolicName(), b.getBundleId());
-                for (Clause p : importsList) {
-                    LOGGER.debug("    {}", p);
-                }
-
-            }
-        }
-        return bundles;
-    }
-
-    /*
-     * Get the list of optional imports from an OSGi Import-Package string
-     */
-    protected List<Clause> getOptionalImports(String importsStr) {
-        Clause[] imports = Parser.parseHeader(importsStr);
-        List<Clause> result = new LinkedList<Clause>();
-        for (int i = 0; i < imports.length; i++) {
-            String resolution = imports[i].getDirective(Constants.RESOLUTION_DIRECTIVE);
-            if (Constants.RESOLUTION_OPTIONAL.equals(resolution)) {
-                result.add(imports[i]);
-            }
-        }
-        return result;
-    }
-
-    protected static class InstallResult {
-
-        private final boolean previouslyInstalled;
-        private final Bundle bundle;
-        private final int startLevel;
-
-        protected InstallResult(boolean previouslyInstalled, Bundle bundle, int startLevel) {
-            this.previouslyInstalled = previouslyInstalled;
-            this.bundle = bundle;
-            this.startLevel = startLevel;
-        }
-
-        public boolean isPreviouslyInstalled() {
-            return previouslyInstalled;
-        }
-
-        public Bundle getBundle() {
-            return bundle;
-        }
-
-        public int getStartLevel() {
-            return startLevel;
-        }
-
-    }
-
-    protected InstallResult installBundleIfNeeded(InstallationState state, BundleInfo bundleInfo, boolean verbose) throws IOException, BundleException {
-        InputStream is;
-        String bundleLocation = bundleInfo.getLocation();
-        LOGGER.debug("Checking " + bundleLocation);
-        try {
-            is = new BufferedInputStream(new URL(bundleLocation).openStream());
-        } catch (RuntimeException e) {
-            LOGGER.error(e.getMessage());
-            throw e;
-        }
-        try {
-            is.mark(256 * 1024);
-            JarInputStream jar = new JarInputStream(is);
-            Manifest m = jar.getManifest();
-            if (m == null) {
-                throw new BundleException("Manifest not present in the first entry of the zip " + bundleLocation);
-            }
-            String sn = m.getMainAttributes().getValue(Constants.BUNDLE_SYMBOLICNAME);
-            if (sn == null) {
-                throw new BundleException("Jar is not a bundle, no Bundle-SymbolicName " + bundleLocation);
-            }
-            // remove attributes from the symbolic name (like ;blueprint.graceperiod:=false suffix)
-            int attributeIndexSep = sn.indexOf(';');
-            if (attributeIndexSep != -1) {
-                sn = sn.substring(0, attributeIndexSep);
-            }
-            String vStr = m.getMainAttributes().getValue(Constants.BUNDLE_VERSION);
-            Version v = vStr == null ? Version.emptyVersion : Version.parseVersion(vStr);
-            for (Bundle b : bundleContext.getBundles()) {
-                if (b.getSymbolicName() != null && b.getSymbolicName().equals(sn)) {
-                    vStr = (String) b.getHeaders().get(Constants.BUNDLE_VERSION);
-                    Version bv = vStr == null ? Version.emptyVersion : Version.parseVersion(vStr);
-                    if (v.equals(bv)) {
-                        LOGGER.debug("Found installed bundle: " + b);
-                        if (verbose) {
-                            System.out.println("Found installed bundle: " + b);
-                        }
-                        state.bundles.add(b);
-                        return new InstallResult(true, b, 0);
-                    }
-                }
-            }
-            try {
-                is.reset();
-            } catch (IOException e) {
-                is.close();
-                is = new BufferedInputStream(new URL(bundleLocation).openStream());
-            }
-            LOGGER.debug("Installing bundle " + bundleLocation);
-            if (verbose) {
-                System.out.println("Installing bundle " + bundleLocation);
-            }
-            Bundle b = getBundleContext().installBundle(bundleLocation, is);
-
-            state.bundles.add(b);
-            state.installed.add(b);
-            return new InstallResult(false, b, bundleInfo.getStartLevel());
-        } finally {
-            is.close();
-        }
-    }
-
-    private void startBundleIfNeeded(Bundle bundle, int startLevel) {
-        if (startLevel > 0) {
-            getStartLevel().setBundleStartLevel(bundle, startLevel);
-        }
-    }
-
-    public void installConfigurationFile(String fileLocation, String finalname, boolean override, boolean verbose) throws IOException {
-        LOGGER.debug("Checking configuration file " + fileLocation);
-        if (verbose) {
-            System.out.println("Checking configuration file " + fileLocation);
-        }
-
-        String basePath = System.getProperty("karaf.base");
-
-        if (finalname.indexOf("${") != -1) {
-            //remove any placeholder or variable part, this is not valid.
-            int marker = finalname.indexOf("}");
-            finalname = finalname.substring(marker + 1);
-        }
-
-        finalname = basePath + File.separator + finalname;
-
-        File file = new File(finalname);
-        if (file.exists() && !override) {
-            LOGGER.debug("configFile already exist, don't override it");
-            return;
-        }
-
-        InputStream is = null;
-        FileOutputStream fop = null;
-        try {
-            is = new BufferedInputStream(new URL(fileLocation).openStream());
-
-            if (!file.exists()) {
-                File parentFile = file.getParentFile();
-                if (parentFile != null) {
-                    parentFile.mkdirs();
-                }
-                file.createNewFile();
-            }
-
-            fop = new FileOutputStream(file);
-
-            int bytesRead = 0;
-            byte[] buffer = new byte[1024];
-
-            while ((bytesRead = is.read(buffer)) != -1) {
-                fop.write(buffer, 0, bytesRead);
-            }
-        } catch (RuntimeException e) {
-            LOGGER.error(e.getMessage());
-            throw e;
-        } catch (MalformedURLException e) {
-            LOGGER.error(e.getMessage());
-            throw e;
-        } finally {
-            if (is != null)
-                is.close();
-            if (fop != null) {
-                fop.flush();
-                fop.close();
-            }
-        }
-
-    }
-
-    public void uninstallFeature(String name) throws Exception {
-        List<String> versions = new ArrayList<String>();
-        for (Feature f : installed.keySet()) {
-            if (name.equals(f.getName())) {
-                versions.add(f.getVersion());
-            }
-        }
-        if (versions.size() == 0) {
-            throw new Exception("Feature named '" + name + "' is not installed");
-        } else if (versions.size() > 1) {
-            StringBuilder sb = new StringBuilder();
-            sb.append("Feature named '").append(name).append("' has multiple versions installed (");
-            for (int i = 0; i < versions.size(); i++) {
-                if (i > 0) {
-                    sb.append(", ");
-                }
-                sb.append(versions.get(i));
-            }
-            sb.append("). Please specify the version to uninstall.");
-            throw new Exception(sb.toString());
-        }
-        uninstallFeature(name, versions.get(0));
-    }
-
-    public void uninstallFeature(String name, String version) throws Exception {
-        Feature feature = getFeature(name, version);
-        if (feature == null || !installed.containsKey(feature)) {
-            throw new Exception("Feature named '" + name
-                    + "' with version '" + version + "' is not installed");
-        }
-        // Grab all the bundles installed by this feature
-        // and remove all those who will still be in use.
-        // This gives this list of bundles to uninstall.
-        Set<Long> bundles = installed.remove(feature);
-        for (Set<Long> b : installed.values()) {
-            bundles.removeAll(b);
-        }
-        for (long bundleId : bundles) {
-            Bundle b = getBundleContext().getBundle(bundleId);
-            if (b != null) {
-                b.uninstall();
-            }
-        }
-        refreshPackages(null);
-        callListeners(new FeatureEvent(feature, FeatureEvent.EventType.FeatureUninstalled, false));
-        saveState();
-    }
-
-    public Feature[] listFeatures() throws Exception {
-        Collection<Feature> features = new ArrayList<Feature>();
-        for (Map<String, Feature> featureWithDifferentVersion : getFeatures().values()) {
-            for (Feature f : featureWithDifferentVersion.values()) {
-                features.add(f);
-            }
-        }
-        return features.toArray(new Feature[features.size()]);
-    }
-
-    public Feature[] listInstalledFeatures() {
-        Set<Feature> result = installed.keySet();
-        return result.toArray(new Feature[result.size()]);
-    }
-
-    public boolean isInstalled(Feature f) {
-        return installed.containsKey(f);
-    }
-
-    public Feature getFeature(String name) throws Exception {
-        return getFeature(name, FeatureImpl.DEFAULT_VERSION);
-    }
-
-    public Feature getFeature(String name, String version) throws Exception {
-        if (version != null) {
-            version = version.trim();
-        }
-        Map<String, Feature> versions = getFeatures().get(name);
-        if (versions == null || versions.isEmpty()) {
-            return null;
-        } else {
-            Feature feature = versions.get(version);
-            if (feature == null) {
-                if (FeatureImpl.DEFAULT_VERSION.equals(version)) {
-                    Version latest = new Version(cleanupVersion(version));
-                    for (String available : versions.keySet()) {
-                        Version availableVersion = new Version(cleanupVersion(available));
-                        if (availableVersion.compareTo(latest) > 0) {
-                            feature = versions.get(available);
-                            latest = availableVersion;
-                        }
-                    }
-                } else {
-                    Version latest = new Version(cleanupVersion(FeatureImpl.DEFAULT_VERSION));
-                    VersionRange versionRange = new VersionRange(version, true, true);
-                    for (String available : versions.keySet()) {
-                        Version availableVersion = new Version(cleanupVersion(available));
-                        if (availableVersion.compareTo(latest) > 0 && versionRange.contains(availableVersion)) {
-                            feature = versions.get(available);
-                            latest = availableVersion;
-                        }
-                    }
-                }
-            }
-            return feature;
-        }
-    }
-
-    protected Map<String, Map<String, Feature>> getFeatures() throws Exception {
-        if (features == null) {
-            //the outer map's key is feature name, the inner map's key is feature version
-            Map<String, Map<String, Feature>> map = new HashMap<String, Map<String, Feature>>();
-            // Two phase load:
-            // * first load dependent repositories
-            for (; ; ) {
-                boolean newRepo = false;
-                for (Repository repo : listRepositories()) {
-                    for (URI uri : repo.getRepositories()) {
-                        if (!repositories.containsKey(uri)) {
-                            internalAddRepository(uri);
-                            newRepo = true;
-                        }
-                    }
-                }
-                if (!newRepo) {
-                    break;
-                }
-            }
-            // * then load all features
-            for (Repository repo : repositories.values()) {
-                for (Feature f : repo.getFeatures()) {
-                    if (map.get(f.getName()) == null) {
-                        Map<String, Feature> versionMap = new HashMap<String, Feature>();
-                        versionMap.put(f.getVersion(), f);
-                        map.put(f.getName(), versionMap);
-                    } else {
-                        map.get(f.getName()).put(f.getVersion(), f);
-                    }
-                }
-            }
-            features = map;
-        }
-        return features;
-    }
-
-    public void start() throws Exception {
-        // Register FrameworkEventListener
-        bundleContext.addFrameworkListener(this);
-        // Register EventAdmin listener
-        EventAdminListener listener = null;
-        try {
-            getClass().getClassLoader().loadClass("org.osgi.service.event.EventAdmin");
-            listener = new EventAdminListener(bundleContext);
-        } catch (Throwable t) {
-            // Ignore, if the EventAdmin package is not available, just don't use it
-            LOGGER.debug("EventAdmin package is not available, just don't use it");
-        }
-        this.eventAdminListener = listener;
-        // Load State
-        if (!loadState()) {
-            if (uris != null) {
-                for (URI uri : uris) {
-                    try {
-                        internalAddRepository(uri);
-                    } catch (Exception e) {
-                        LOGGER.warn(format("Unable to add features repository %s at startup", uri), e);
-                    }
-                }
-            }
-            saveState();
-        }
-        // Install boot features
-        if (boot != null && !bootFeaturesInstalled) {
-            new Thread() {
-                public void run() {
-                    // splitting the features
-                    String[] list = boot.split(",");
-                    Set<Feature> features = new LinkedHashSet<Feature>();
-                    for (String f : list) {
-                        f = f.trim();
-                        if (f.length() > 0) {
-                            String featureVersion = null;
-
-                            // first we split the parts of the feature string to gain access to the version info
-                            // if specified
-                            String[] parts = f.split(";");
-                            String featureName = parts[0];
-                            for (String part : parts) {
-                                // if the part starts with "version=" it contains the version info
-                                if (part.startsWith(FeatureImpl.VERSION_PREFIX)) {
-                                    featureVersion = part.substring(FeatureImpl.VERSION_PREFIX.length());
-                                }
-                            }
-
-                            if (featureVersion == null) {
-                                // no version specified - use default version
-                                featureVersion = FeatureImpl.DEFAULT_VERSION;
-                            }
-
-                            try {
-                                // try to grab specific feature version
-                                Feature feature = getFeature(featureName, featureVersion);
-                                if (feature != null) {
-                                    features.add(feature);
-                                } else {
-                                    LOGGER.error("Error installing boot feature " + f + ": feature not found");
-                                }
-                            } catch (Exception e) {
-                                LOGGER.error("Error installing boot feature " + f, e);
-                            }
-                        }
-                    }
-                    try {
-                        installFeatures(features, EnumSet.of(Option.NoCleanIfFailure, Option.ContinueBatchOnFailure));
-                    } catch (Exception e) {
-                        LOGGER.error("Error installing boot features", e);
-                    }
-                    bootFeaturesInstalled = true;
-                    saveState();
-                }
-            }.start();
-        }
-    }
-
-    public void stop() throws Exception {
-        bundleContext.removeFrameworkListener(this);
-        uris = new HashSet<URI>(repositories.keySet());
-        while (!repositories.isEmpty()) {
-            internalRemoveRepository(repositories.keySet().iterator().next());
-        }
-    }
-
-    public void frameworkEvent(FrameworkEvent event) {
-        if (event.getType() == FrameworkEvent.PACKAGES_REFRESHED) {
-            synchronized (refreshLock) {
-                refreshLock.notifyAll();
-            }
-        }
-    }
-
-    protected void refreshPackages(Bundle[] bundles) throws InterruptedException {
-        if (getPackageAdmin() != null) {
-            synchronized (refreshLock) {
-                getPackageAdmin().refreshPackages(bundles);
-                refreshLock.wait(refreshTimeout);
-            }
-        }
-    }
-
-    protected String[] parsePid(String pid) {
-        int n = pid.indexOf('-');
-        if (n > 0) {
-            String factoryPid = pid.substring(n + 1);
-            pid = pid.substring(0, n);
-            return new String[]{pid, factoryPid};
-        } else {
-            return new String[]{pid, null};
-        }
-    }
-
-    protected Configuration createConfiguration(ConfigurationAdmin configurationAdmin,
-                                                String pid, String factoryPid) throws IOException, InvalidSyntaxException {
-        if (factoryPid != null) {
-            return configurationAdmin.createFactoryConfiguration(pid, null);
-        } else {
-            return configurationAdmin.getConfiguration(pid, null);
-        }
-    }
-
-    protected Configuration findExistingConfiguration(ConfigurationAdmin configurationAdmin,
-                                                      String pid, String factoryPid) throws IOException, InvalidSyntaxException {
-        String filter;
-        if (factoryPid == null) {
-            filter = "(" + Constants.SERVICE_PID + "=" + pid + ")";
-        } else {
-            String key = createConfigurationKey(pid, factoryPid);
-            filter = "(" + CONFIG_KEY + "=" + key + ")";
-        }
-        Configuration[] configurations = configurationAdmin.listConfigurations(filter);
-        if (configurations != null && configurations.length > 0) {
-            return configurations[0];
-        }
-        return null;
-    }
-
-    protected void saveState() {
-        try {
-            File file = bundleContext.getDataFile("FeaturesServiceState.properties");
-            Properties props = new Properties();
-            saveSet(props, "repositories.", repositories.keySet());
-            saveMap(props, "features.", installed);
-            props.put("bootFeaturesInstalled", Boolean.toString(bootFeaturesInstalled));
-            OutputStream os = new FileOutputStream(file);
-            try {
-                props.store(new FileOutputStream(file), "FeaturesService State");
-            } finally {
-                os.close();
-            }
-        } catch (Exception e) {
-            LOGGER.error("Error persisting FeaturesService state", e);
-        }
-    }
-
-    protected boolean loadState() {
-        try {
-            File file = bundleContext.getDataFile("FeaturesServiceState.properties");
-            if (!file.exists()) {
-                return false;
-            }
-            Properties props = new Properties();
-            InputStream is = new FileInputStream(file);
-            try {
-                props.load(is);
-            } finally {
-                is.close();
-            }
-            Set<URI> repositories = loadSet(props, "repositories.");
-            for (URI repo : repositories) {
-                try {
-                    internalAddRepository(repo);
-                } catch (Exception e) {
-                    LOGGER.warn(format("Unable to add features repository %s at startup", repo), e);
-                }
-            }
-            installed = loadMap(props, "features.");
-            for (Feature f : installed.keySet()) {
-                callListeners(new FeatureEvent(f, FeatureEvent.EventType.FeatureInstalled, true));
-            }
-            bootFeaturesInstalled = Boolean.parseBoolean((String) props.get("bootFeaturesInstalled"));
-            return true;
-        } catch (Exception e) {
-            LOGGER.error("Error loading FeaturesService state", e);
-        }
-        return false;
-    }
-
-    protected void saveSet(Properties props, String prefix, Set<URI> set) {
-        List<URI> l = new ArrayList<URI>(set);
-        props.clear();
-        props.put(prefix + "count", Integer.toString(l.size()));
-        for (int i = 0; i < l.size(); i++) {
-            props.put(prefix + "item." + i, l.get(i).toString());
-        }
-    }
-
-    protected Set<URI> loadSet(Properties props, String prefix) {
-        Set<URI> l = new HashSet<URI>();
-        String countStr = (String) props.get(prefix + "count");
-        if (countStr != null) {
-            int count = Integer.parseInt(countStr);
-            for (int i = 0; i < count; i++) {
-                l.add(URI.create((String) props.get(prefix + "item." + i)));
-            }
-        }
-        return l;
-    }
-
-    protected void saveMap(Properties props, String prefix, Map<Feature, Set<Long>> map) {
-        for (Map.Entry<Feature, Set<Long>> entry : map.entrySet()) {
-            Feature key = entry.getKey();
-            String val = createValue(entry.getValue());
-            props.put(prefix + key.toString(), val);
-        }
-    }
-
-    protected Map<Feature, Set<Long>> loadMap(Properties props, String prefix) {
-        Map<Feature, Set<Long>> map = new HashMap<Feature, Set<Long>>();
-        for (Enumeration e = props.propertyNames(); e.hasMoreElements(); ) {
-            String key = (String) e.nextElement();
-            if (key.startsWith(prefix)) {
-                String val = (String) props.get(key);
-                Set<Long> set = readValue(val);
-                map.put(FeatureImpl.valueOf(key.substring(prefix.length())), set);
-            }
-        }
-        return map;
-    }
-
-    protected String createValue(Set<Long> set) {
-        StringBuilder sb = new StringBuilder();
-        for (long i : set) {
-            if (sb.length() > 0) {
-                sb.append(",");
-            }
-            sb.append(i);
-        }
-        return sb.toString();
-    }
-
-    protected Set<Long> readValue(String val) {
-        Set<Long> set = new HashSet<Long>();
-        if (val != null && val.length() != 0) {
-            for (String str : val.split(",")) {
-                set.add(Long.parseLong(str));
-            }
-        }
-        return set;
-    }
-
-    protected void callListeners(FeatureEvent event) {
-        if (eventAdminListener != null) {
-            eventAdminListener.featureEvent(event);
-        }
-        for (FeaturesListener listener : listeners) {
-            listener.featureEvent(event);
-        }
-    }
-
-    protected void callListeners(RepositoryEvent event) {
-        if (eventAdminListener != null) {
-            eventAdminListener.repositoryEvent(event);
-        }
-        for (FeaturesListener listener : listeners) {
-            listener.repositoryEvent(event);
-        }
-    }
-
-    static Pattern fuzzyVersion = Pattern.compile("(\\d+)(\\.(\\d+)(\\.(\\d+))?)?([^a-zA-Z0-9](.*))?",
-            Pattern.DOTALL);
-    static Pattern fuzzyModifier = Pattern.compile("(\\d+[.-])*(.*)",
-            Pattern.DOTALL);
-
-    /**
-     * Clean up version parameters. Other builders use more fuzzy definitions of
-     * the version syntax. This method cleans up such a version to match an OSGi
-     * version.
-     *
-     * @param version
-     * @return
-     */
-    static public String cleanupVersion(String version) {
-        Matcher m = fuzzyVersion.matcher(version);
-        if (m.matches()) {
-            StringBuffer result = new StringBuffer();
-            String d1 = m.group(1);
-            String d2 = m.group(3);
-            String d3 = m.group(5);
-            String qualifier = m.group(7);
-
-            if (d1 != null) {
-                result.append(d1);
-                if (d2 != null) {
-                    result.append(".");
-                    result.append(d2);
-                    if (d3 != null) {
-                        result.append(".");
-                        result.append(d3);
-                        if (qualifier != null) {
-                            result.append(".");
-                            cleanupModifier(result, qualifier);
-                        }
-                    } else if (qualifier != null) {
-                        result.append(".0.");
-                        cleanupModifier(result, qualifier);
-                    }
-                } else if (qualifier != null) {
-                    result.append(".0.0.");
-                    cleanupModifier(result, qualifier);
-                }
-                return result.toString();
-            }
-        }
-        return version;
-    }
-
-    static void cleanupModifier(StringBuffer result, String modifier) {
-        Matcher m = fuzzyModifier.matcher(modifier);
-        if (m.matches())
-            modifier = m.group(2);
-
-        for (int i = 0; i < modifier.length(); i++) {
-            char c = modifier.charAt(i);
-            if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z')
-                    || (c >= 'A' && c <= 'Z') || c == '_' || c == '-')
-                result.append(c);
-        }
-    }
-
-    public Set<Feature> getFeaturesContainingBundle(Bundle bundle) throws Exception {
-        Set<Feature> features = new HashSet<Feature>();
-        for (Map<String, Feature> featureMap : this.getFeatures().values()) {
-            for (Feature f : featureMap.values()) {
-                for (BundleInfo bi : f.getBundles()) {
-                    if (bi.getLocation().equals(bundle.getLocation())) {
-                        features.add(f);
-                        break;
-                    }
-                }
-            }
-        }
-        return features;
-    }
-
-    private String getFeaturesContainingBundleList(Bundle bundle) throws Exception {
-        Set<Feature> features = getFeaturesContainingBundle(bundle);
-        StringBuilder buffer = new StringBuilder();
-        Iterator<Feature> iter = features.iterator();
-        while (iter.hasNext()) {
-            Feature feature = iter.next();
-            buffer.append(feature.getId());
-            if (iter.hasNext()) {
-                buffer.append(", ");
-            }
-        }
-        return buffer.toString();
-    }
-}
diff --git a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/internal/RepositoryImpl.java b/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/internal/RepositoryImpl.java
deleted file mode 100644
index 982de6e..0000000
--- a/karaf-2.3.x/features/core/src/main/java/org/apache/karaf/features/internal/RepositoryImpl.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.internal;
-
-import org.apache.karaf.features.Feature;
-import org.apache.karaf.features.Repository;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
-
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URLConnection;
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * The repository implementation.
- */
-public class RepositoryImpl implements Repository {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(RepositoryImpl.class);
-    private int unnamedRepoId = 0;
-    private String name;
-    private URI uri;
-    private List<Feature> features;
-    private List<URI> repositories;
-    private boolean valid;
-
-    public RepositoryImpl(URI uri) {
-        this.uri = uri;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public URI getURI() {
-        return uri;
-    }
-
-    public URI[] getRepositories() throws Exception {
-        if (repositories == null) {
-            load();
-        }
-        return repositories.toArray(new URI[repositories.size()]);
-    }
-
-    public Feature[] getFeatures() throws Exception {
-        if (features == null) {
-            load();
-        }
-        return features.toArray(new Feature[features.size()]);
-    }
-
-    public void load() throws IOException {
-        try {
-            valid = true;
-            repositories = new ArrayList<URI>();
-            features = new ArrayList<Feature>();
-            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-            URLConnection conn = uri.toURL().openConnection();
-            conn.setDefaultUseCaches(false);
-            Document doc = factory.newDocumentBuilder().parse(conn.getInputStream());
-            String temp = doc.getDocumentElement().getAttribute("name");
-            if ("".equals(temp)) {
-                name = "repo-" + String.valueOf(unnamedRepoId++);
-            } else {
-                name = temp;
-            }
-            if (uri.toString().startsWith("bundle")) {
-                name += "*";
-            }
-
-            NodeList nodes = doc.getDocumentElement().getChildNodes();
-            for (int i = 0; i < nodes.getLength(); i++) {
-                Node node = nodes.item(i);
-                if (!(node instanceof Element)) {
-                    continue;
-                }
-                if ("repository".equals(node.getNodeName())) {
-                    Element e = (Element) nodes.item(i);
-                    try {
-                        URI newrepo = new URI(e.getTextContent().trim());
-                        repositories.add(newrepo);
-                    } catch (URISyntaxException ex) {
-                        LOGGER.error("Could not load feature repository: " + ex.getMessage() + " in feature repository " + uri);
-                    }
-                } else if ("feature".equals(node.getNodeName())) {
-                    Element e = (Element) nodes.item(i);
-                    String name = e.getAttribute("name");
-                    String version = e.getAttribute("version");
-                    String allBundleInfeatureStartLevel = e.getAttribute("start-level");
-                    int absl = 0;
-                    // Check start level
-                    if (allBundleInfeatureStartLevel != null && allBundleInfeatureStartLevel.length() > 0) {
-                        try {
-                            absl = Integer.parseInt(allBundleInfeatureStartLevel);
-                        } catch (Exception ex) {
-                            LOGGER.error("The start-level is not an int value for the feature : " + name);
-                        }
-                    }
-                    
-                    FeatureImpl f;
-                    if (version != null && version.length() > 0) {
-                        f = new FeatureImpl(name, version);
-                    } else {
-                        f = new FeatureImpl(name);
-                    }
-
-                    String resolver = e.getAttribute("resolver");
-                    if (resolver != null && resolver.length() > 0) {
-                        f.setResolver(resolver);
-                    }
-
-                    String install = e.getAttribute("install");
-                    if (install != null && install.length() > 0) {
-                        f.setInstall(install);
-                    }
-
-                    String description = e.getAttribute("description");
-                    if (description != null && description.length() > 0) {
-                        f.setDescription(description);
-                    }
-
-                    NodeList detailsNodes = e.getElementsByTagName("details");
-                    StringBuffer detailsBuffer = new StringBuffer();
-                    for (int j = 0; j < detailsNodes.getLength(); j++) {
-                        Element b = (Element) detailsNodes.item(j);
-                        String detail = b.getTextContent().trim();
-                        detailsBuffer.append(detail).append("\n");
-                    }
-                    String details = detailsBuffer.toString();
-                    if (details != null && details.length() > 0)
-                        f.setDetails(details);
-
-                    NodeList featureNodes = e.getElementsByTagName("feature");
-                    for (int j = 0; j < featureNodes.getLength(); j++) {
-                        Element b = (Element) featureNodes.item(j);
-                        String dependencyFeatureVersion = b.getAttribute("version");
-                        if (dependencyFeatureVersion != null && dependencyFeatureVersion.length() > 0) {
-                            f.addDependency(new FeatureImpl(b.getTextContent(), dependencyFeatureVersion));
-                        } else {
-                            f.addDependency(new FeatureImpl(b.getTextContent()));
-                        }
-                    }
-                    NodeList configNodes = e.getElementsByTagName("config");
-                    for (int j = 0; j < configNodes.getLength(); j++) {
-                        Element c = (Element) configNodes.item(j);
-                        String cfgName = c.getAttribute("name");
-                        String data = c.getTextContent();
-                        Properties properties = new Properties();
-                        properties.load(new ByteArrayInputStream(data.getBytes()));
-                        interpolation(properties);
-                        Map<String, String> hashtable = new Hashtable<String, String>();
-                        for (Object key : properties.keySet()) {
-                            String n = key.toString();
-                            hashtable.put(n, properties.getProperty(n));
-                        }
-                        f.addConfig(cfgName, hashtable);
-                    }
-                    NodeList configurationFiles = e.getElementsByTagName("configfile");
-                    for (int j = 0; j < configurationFiles.getLength(); j++) {
-                    	Element cf = (Element) configurationFiles.item(j);
-                    	String finalname = cf.getAttribute("finalname");
-                    	String location = cf.getTextContent().trim();
-                    	String override = cf.getAttribute("override");
-                    	boolean finalnameOverride = false;
-                    	// Check the value of the "override" attribute
-                        if (override != null && override.length() > 0) {
-                        	finalnameOverride = Boolean.parseBoolean(override);
-                        }
-                    	f.addConfigurationFile(new ConfigFileInfoImpl(location, finalname, finalnameOverride));
-                    }
-                    NodeList bundleNodes = e.getElementsByTagName("bundle");
-                    for (int j = 0; j < bundleNodes.getLength(); j++) {
-                        Element b = (Element) bundleNodes.item(j);
-                        String bStartLevel = b.getAttribute("start-level");
-                        String bStart = b.getAttribute("start");
-                        String bDependency = b.getAttribute("dependency");
-                        boolean bs = true;
-                        boolean bd = false;
-                        int bsl = absl;
-
-                        // Check the value of the "start" attribute
-                        if (bStart != null && bStart.length() > 0) {
-                            bs = Boolean.parseBoolean(bStart);
-                        }
-                        // Check the value of the "dependency" attribute
-                        if (bDependency != null && bDependency.length() > 0) {
-                            bd = Boolean.parseBoolean(bDependency);
-                        }
-                        // Check start level
-                        if (bStartLevel != null && bStartLevel.length() > 0) {
-                            try {
-                                bsl = Integer.parseInt(bStartLevel);
-                            } catch (Exception ex) {
-                                LOGGER.error("The start-level is not an int value for the bundle : " + b.getTextContent());
-                            }
-                        }
-                        f.addBundle(new BundleInfoImpl(b.getTextContent().trim(), bsl, bs, bd));
-                    }
-                    features.add(f);
-                }
-            }
-        } catch (SAXException e) {
-            valid = false;
-            throw (IOException) new IOException().initCause(e);
-        } catch (ParserConfigurationException e) {
-            valid = false;
-            throw (IOException) new IOException().initCause(e);
-        } catch (IllegalArgumentException e) {
-            valid = false;
-            throw (IOException) new IOException(e.getMessage() + " : " + uri).initCause(e);
-        } catch (Exception e) {
-            valid = false;
-            throw (IOException) new IOException(e.getMessage() + " : " + uri).initCause(e);
-        }
-    }
-
-    protected void interpolation(Properties properties) {
-        for (Enumeration e = properties.propertyNames(); e.hasMoreElements();) {
-            String key = (String) e.nextElement();
-            String val = properties.getProperty(key);
-            Matcher matcher = Pattern.compile("\\$\\{([^}]+)\\}").matcher(val);
-            while (matcher.find()) {
-                String rep = System.getProperty(matcher.group(1));
-                if (rep != null) {
-                    val = val.replace(matcher.group(0), rep);
-                    matcher.reset(val);
-                }
-            }
-            properties.put(key, val);
-        }
-    }
-
-    public boolean isValid() {
-        return this.valid;
-    }
-
-}
diff --git a/karaf-2.3.x/features/core/src/main/resources/OSGI-INF/blueprint/gshell-features.xml b/karaf-2.3.x/features/core/src/main/resources/OSGI-INF/blueprint/gshell-features.xml
deleted file mode 100644
index aba621d..0000000
--- a/karaf-2.3.x/features/core/src/main/resources/OSGI-INF/blueprint/gshell-features.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0">
-
-    <ext:property-placeholder placeholder-prefix="$(" placeholder-suffix=")"/>
-
-    <ext:property-placeholder placeholder-prefix="$[" placeholder-suffix="]" ignore-missing-locations="true">
-        <ext:default-properties>
-            <ext:property name="featuresRepositories" value=""/>
-            <ext:property name="featuresBoot" value=""/>
-            <ext:property name="resolverTimeout" value="5000"/>
-            <ext:property name="respectStartLvlDuringFeatureStartup" value="false"/>
-        </ext:default-properties>
-        <ext:location>file:$(karaf.base)/etc/org.apache.karaf.features.cfg</ext:location>
-    </ext:property-placeholder>
-
-    <bean id="featuresService" class="org.apache.karaf.features.internal.FeaturesServiceImpl" init-method="start" destroy-method="stop">
-        <property name="urls" value="$[featuresRepositories]" />
-        <property name="boot" value="$[featuresBoot]" />
-        <property name="respectStartLvlDuringFeatureStartup" value="$[respectStartLvlDuringFeatureStartup]" />
-        <property name="resolverTimeout" value="$[resolverTimeout]" />
-        <property name="configAdmin" ref="configAdmin" />
-        <property name="packageAdmin" ref="packageAdmin" />
-        <property name="startLevel" ref="startLevel" />
-        <property name="bundleContext" ref="blueprintBundleContext" />
-    </bean>
-
-    <reference-list id="featuresListeners" interface="org.apache.karaf.features.FeaturesListener" availability="optional">
-        <reference-listener ref="featuresService"
-                            bind-method="registerListener"
-                            unbind-method="unregisterListener" />
-    </reference-list>
-
-    <reference id="configAdmin" interface="org.osgi.service.cm.ConfigurationAdmin" />
-
-    <reference id="packageAdmin" interface="org.osgi.service.packageadmin.PackageAdmin" />
-
-    <reference id="startLevel" interface="org.osgi.service.startlevel.StartLevel" />
-    
-    <service ref="featuresService" interface="org.apache.karaf.features.FeaturesService" />
-
-</blueprint>
diff --git a/karaf-2.3.x/features/core/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/features/core/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 6368630..0000000
--- a/karaf-2.3.x/features/core/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,17 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle is the core implementation of the Karaf features support.
-
-    Karaf provides a simple, yet flexible, way to provision applications or "features". Such a mechanism is mainly
-    provided by a set of commands available in the features shell. The provisioning system uses xml "repositories"
-    that define a set of features.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mProvisioning\u001B[0m section of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/features/core/src/main/resources/org/apache/karaf/features/karaf-features-1.0.0.xsd b/karaf-2.3.x/features/core/src/main/resources/org/apache/karaf/features/karaf-features-1.0.0.xsd
deleted file mode 100644
index 3b839c8..0000000
--- a/karaf-2.3.x/features/core/src/main/resources/org/apache/karaf/features/karaf-features-1.0.0.xsd
+++ /dev/null
@@ -1,238 +0,0 @@
-<?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.
-
--->
-<xs:schema elementFormDefault="qualified"
-    targetNamespace="http://karaf.apache.org/xmlns/features/v1.0.0"
-    xmlns:tns="http://karaf.apache.org/xmlns/features/v1.0.0"
-    xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
-    <xs:annotation>
-        <xs:documentation><![CDATA[
-Karaf features mechanism. For documentation please visit the
-<a href="http://karaf.apache.org/">Karaf website</a>.
-        ]]></xs:documentation>
-    </xs:annotation>
-
-    <xs:complexType name="features">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Root element of Feature definition. It contains optional attribute for
-designating from which repository this feature should be loaded. The Karaf
-shell will show the repository name when displaying information about the feature.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:choice minOccurs="0" maxOccurs="unbounded">
-            <xs:element name="repository" type="xs:anyURI">
-                <xs:annotation>
-                    <xs:documentation><![CDATA[
-Additional repositories where dependencies are stored.
-                    ]]></xs:documentation>
-                </xs:annotation>
-            </xs:element>
-            <xs:element name="feature" type="tns:feature">
-                <xs:annotation>
-                    <xs:documentation><![CDATA[
-Feature definition.
-                    ]]></xs:documentation>
-                </xs:annotation>
-            </xs:element>
-        </xs:choice>
-        <xs:attribute name="name" type="xs:string" />
-    </xs:complexType>
-
-    <xs:complexType name="feature">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Definition of the Feature.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:choice minOccurs="0" maxOccurs="unbounded">
-            <xs:element name="details" minOccurs="0" type="xs:string">
-                <xs:annotation>
-                    <xs:documentation><![CDATA[
-The help shown for this feature when using the feature:info console command.
-                    ]]>
-                    </xs:documentation>
-                </xs:annotation>
-            </xs:element>
-            <xs:element name="config" type="tns:config" />
-            <xs:element name="configfile" type="tns:configFile" />
-            <xs:element name="feature" type="tns:dependency" />
-            <xs:element name="bundle" type="tns:bundle" />
-        </xs:choice>
-        <xs:attribute name="name" type="tns:featureName" use="required" />
-        <xs:attribute name="version" type="xs:string" default="0.0.0" />
-        <xs:attribute name="description" type="xs:string" />
-        <xs:attribute name="resolver" type="tns:resolver">
-            <xs:annotation>
-                <xs:documentation><![CDATA[
-Optional alternative resolver to use for determining the list of bundles to install for a given feature.
-                ]]>
-                </xs:documentation>
-            </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="install" type="tns:install">
-            <xs:annotation>
-                <xs:documentation><![CDATA[
-If true, marks that the feature should start automatically when placed in the deploy folder.
-                ]]>
-                </xs:documentation>
-            </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="start-level" type="xs:int">
-             <xs:annotation>
-                <xs:documentation><![CDATA[
-Set this attribute to have an OSGi start level for this feature different
-from the default start level defined in Karaf's config.properties.
-                ]]>
-                </xs:documentation>
-             </xs:annotation>
-         </xs:attribute>
-    </xs:complexType>
-
-    <xs:complexType name="bundle">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Deployable element to install.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:simpleContent>
-            <xs:extension base="xs:anyURI">
-                <xs:attribute name="start-level" type="xs:int">
-                    <xs:annotation>
-                        <xs:documentation><![CDATA[
-Set this attribute to have an OSGi start level for this bundle different
-from the default start level defined in Karaf's config.properties.
-                        ]]>
-                        </xs:documentation>
-                    </xs:annotation>
-                </xs:attribute>
-                <xs:attribute name="start" type="xs:boolean">
-                    <xs:annotation>
-                        <xs:documentation><![CDATA[
-If false, leaves bundle in resolved start rather than the default active state.
-                        ]]>
-                        </xs:documentation>
-                    </xs:annotation>
-                </xs:attribute>
-                <xs:attribute name="dependency" type="xs:boolean">
-                    <xs:annotation>
-                        <xs:documentation><![CDATA[
-Mark bundle as a dependency for the resolver.
-                        ]]>
-                        </xs:documentation>
-                    </xs:annotation>
-                </xs:attribute>
-            </xs:extension>
-        </xs:simpleContent>
-    </xs:complexType>
-
-    <xs:complexType name="dependency">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Dependency of feature.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:simpleContent>
-            <xs:extension base="tns:featureName">
-                <xs:attribute name="version" type="xs:string" default="0.0.0" />
-            </xs:extension>
-        </xs:simpleContent>
-    </xs:complexType>
-
-    <xs:complexType name="config">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Configuration entries which should be created during feature installation. This
-configuration may be used with OSGi Configuration Admin. The element content is
-read in as a properties file.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:simpleContent>
-            <xs:extension base="xs:string">
-                <xs:attribute name="name" type="xs:string" use="required" />
-            </xs:extension>
-        </xs:simpleContent>
-    </xs:complexType>
-
-    <xs:complexType name="configFile">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Additional configuration files which should be created during feature installation.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:simpleContent>
-            <xs:extension base="xs:anyURI">
-                <xs:attribute name="finalname" type="xs:string" use="required">
-                    <xs:annotation>
-                        <xs:documentation><![CDATA[
-The final destination path and name for the configuration file.
-                        ]]></xs:documentation>
-                    </xs:annotation>
-                </xs:attribute>
-                <xs:attribute name="override" type="xs:boolean">
-                    <xs:annotation>
-                        <xs:documentation><![CDATA[
-If the configFile already exists at the finalname location, whether or not to replace it.
-                        ]]></xs:documentation>
-                    </xs:annotation>
-                </xs:attribute>
-
-            </xs:extension>
-        </xs:simpleContent>
-    </xs:complexType>
-
-    <xs:simpleType name="featureName">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Feature name should be non empty string.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:restriction base="xs:string">
-            <xs:minLength value="1" />
-        </xs:restriction>
-    </xs:simpleType>
-
-    <xs:simpleType name="resolver">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Resolver to use. Karaf will look for OSGi service which have following properties:
-objectClass: org.apache.karaf.features.Resolver
-name: the value
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:restriction base="xs:string">
-            <xs:minLength value="1" />
-        </xs:restriction>
-    </xs:simpleType>
-    <xs:simpleType name="install">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Installation mode. Can be either manual or auto. Specifies whether the feature should be automatically installed when
-dropped inside the deploy folder. Note: This attribute doesn't affect feature descriptors that are installed from the
-command line or as part of the org.apache.karaf.features.cfg.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:restriction base="xs:string">
-            <xs:minLength value="1" />
-        </xs:restriction>
-    </xs:simpleType>
-
-    <xs:element name="features" type="tns:features" />
-
-</xs:schema>
diff --git a/karaf-2.3.x/features/core/src/main/resources/org/apache/karaf/features/karaf-features-1.1.0.xsd b/karaf-2.3.x/features/core/src/main/resources/org/apache/karaf/features/karaf-features-1.1.0.xsd
deleted file mode 100644
index 7138573..0000000
--- a/karaf-2.3.x/features/core/src/main/resources/org/apache/karaf/features/karaf-features-1.1.0.xsd
+++ /dev/null
@@ -1,237 +0,0 @@
-<?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.
-
--->
-<xs:schema elementFormDefault="qualified"
-    targetNamespace="http://karaf.apache.org/xmlns/features/v1.1.0"
-    xmlns:tns="http://karaf.apache.org/xmlns/features/v1.1.0"
-    xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
-    <xs:annotation>
-        <xs:documentation><![CDATA[
-Karaf features mechanism. For documentation please visit the
-<a href="http://karaf.apache.org/">Karaf website</a>.
-        ]]></xs:documentation>
-    </xs:annotation>
-
-    <xs:complexType name="features">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Root element of Feature definition. It contains an required attribute for
-designating from which repository this feature should be loaded. The Karaf
-shell will show the repository name when displaying information about the feature.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:choice minOccurs="0" maxOccurs="unbounded">
-            <xs:element name="repository" type="xs:anyURI">
-                <xs:annotation>
-                    <xs:documentation><![CDATA[
-Additional repositories where dependencies are stored.
-                    ]]></xs:documentation>
-                </xs:annotation>
-            </xs:element>
-            <xs:element name="feature" type="tns:feature">
-                <xs:annotation>
-                    <xs:documentation><![CDATA[
-Feature definition.
-                    ]]></xs:documentation>
-                </xs:annotation>
-            </xs:element>
-        </xs:choice>
-        <xs:attribute name="name" type="xs:string" use="required"/>
-    </xs:complexType>
-
-    <xs:complexType name="feature">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Definition of the Feature.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:choice minOccurs="0" maxOccurs="unbounded">
-            <xs:element name="details" minOccurs="0" type="xs:string">
-                <xs:annotation>
-                    <xs:documentation><![CDATA[
-The help text shown for this feature when using feature:info console command.
-                    ]]>
-                    </xs:documentation>
-                </xs:annotation>
-            </xs:element>
-            <xs:element name="config" type="tns:config" />
-            <xs:element name="configfile" type="tns:configFile" />
-            <xs:element name="feature" type="tns:dependency" />
-            <xs:element name="bundle" type="tns:bundle" />
-        </xs:choice>
-        <xs:attribute name="name" type="tns:featureName" use="required" />
-        <xs:attribute name="version" type="xs:string" default="0.0.0" />
-        <xs:attribute name="description" type="xs:string" />
-        <xs:attribute name="resolver" type="tns:resolver">
-            <xs:annotation>
-                <xs:documentation><![CDATA[
-Optional alternative resolver to use for determining the list of bundles to install for a given feature.
-                ]]>
-                </xs:documentation>
-            </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="install" type="tns:install">
-            <xs:annotation>
-                <xs:documentation><![CDATA[
-Marks if the feaute will be automatically started when thrown to the deploy folder.
-                ]]>
-                </xs:documentation>
-            </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="start-level" type="xs:int">
-             <xs:annotation>
-                <xs:documentation><![CDATA[
-Set this attribute to have an OSGi start level for this feature different
-from the default start level defined in Karaf's config.properties.
-                ]]>
-                </xs:documentation>
-             </xs:annotation>
-         </xs:attribute>
-    </xs:complexType>
-
-    <xs:complexType name="bundle">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Deployable element to install.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:simpleContent>
-            <xs:extension base="xs:anyURI">
-                <xs:attribute name="start-level" type="xs:int">
-                    <xs:annotation>
-                        <xs:documentation><![CDATA[
-Set this attribute to have an OSGi start level for this bundle different
-from the default start level defined in the Karaf's config.properties.
-                        ]]>
-                        </xs:documentation>
-                    </xs:annotation>
-                </xs:attribute>
-                <xs:attribute name="start" type="xs:boolean" default="true">
-                    <xs:annotation>
-                        <xs:documentation><![CDATA[
-If false, leaves bundle in resolved state rather than the default active state.
-                        ]]>
-                        </xs:documentation>
-                    </xs:annotation>
-                </xs:attribute>
-                <xs:attribute name="dependency" type="xs:boolean">
-                    <xs:annotation>
-                        <xs:documentation><![CDATA[
-Mark this bundle as a dependency for the resolver.
-                        ]]>
-                        </xs:documentation>
-                    </xs:annotation>
-                </xs:attribute>
-            </xs:extension>
-        </xs:simpleContent>
-    </xs:complexType>
-
-    <xs:complexType name="dependency">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Dependency of feature.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:simpleContent>
-            <xs:extension base="tns:featureName">
-                <xs:attribute name="version" type="xs:string" default="0.0.0" />
-            </xs:extension>
-        </xs:simpleContent>
-    </xs:complexType>
-
-    <xs:complexType name="config">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Configuration entries which should be created during feature installation. This
-configuration may be used with OSGi Configuration Admin. The element content is
-read in as a properties file.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:simpleContent>
-            <xs:extension base="xs:string">
-                <xs:attribute name="name" type="xs:string" use="required" />
-            </xs:extension>
-        </xs:simpleContent>
-    </xs:complexType>
-
-    <xs:complexType name="configFile">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Additional configuration files which should be created during feature installation.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:simpleContent>
-            <xs:extension base="xs:anyURI">
-                <xs:attribute name="finalname" type="xs:string" use="required">
-                    <xs:annotation>
-                        <xs:documentation><![CDATA[
-The final destination path and name for the configuration file.
-                        ]]></xs:documentation>
-                    </xs:annotation>
-                </xs:attribute>
-                <xs:attribute name="override" type="xs:boolean">
-                    <xs:annotation>
-                        <xs:documentation><![CDATA[
-If the configFile already exists at the finalname location, whether or not to replace it.
-                        ]]></xs:documentation>
-                    </xs:annotation>
-                </xs:attribute>
-
-            </xs:extension>
-        </xs:simpleContent>
-    </xs:complexType>
-
-    <xs:simpleType name="featureName">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Feature name should be non empty string.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:restriction base="xs:string">
-            <xs:minLength value="1" />
-        </xs:restriction>
-    </xs:simpleType>
-
-    <xs:simpleType name="resolver">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Resolver to use. Karaf will look for OSGi service which have following properties:
-objectClass: org.apache.karaf.features.Resolver
-name: the value
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:restriction base="xs:string">
-            <xs:minLength value="1" />
-        </xs:restriction>
-    </xs:simpleType>
-    <xs:simpleType name="install">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Installation mode. Can be either manual or auto. Specifies whether the feature should be automatically installed when
-dropped inside the deploy folder. Note: This attribute doesn't affect feature descriptors that are installed from the
-command line or as part of the org.apache.karaf.features.cfg.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:restriction base="xs:string">
-            <xs:minLength value="1" />
-        </xs:restriction>
-    </xs:simpleType>
-    <xs:element name="features" type="tns:features" />
-
-</xs:schema>
diff --git a/karaf-2.3.x/features/core/src/test/java/org/apache/karaf/features/FeatureTest.java b/karaf-2.3.x/features/core/src/test/java/org/apache/karaf/features/FeatureTest.java
deleted file mode 100644
index 5ff45f9..0000000
--- a/karaf-2.3.x/features/core/src/test/java/org/apache/karaf/features/FeatureTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features;
-
-import junit.framework.TestCase;
-import org.apache.karaf.features.internal.FeatureImpl;
-
-public class FeatureTest extends TestCase {
-	
-	public void testValueOf() {
-		Feature feature = FeatureImpl.valueOf("name" + FeatureImpl.SPLIT_FOR_NAME_AND_VERSION + "version");
-		assertEquals(feature.getName(), "name");
-		assertEquals(feature.getVersion(), "version");
-		feature = FeatureImpl.valueOf("name");
-		assertEquals(feature.getName(), "name");
-		assertEquals(feature.getVersion(), FeatureImpl.DEFAULT_VERSION);
-	}
-	
-}
diff --git a/karaf-2.3.x/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java b/karaf-2.3.x/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java
deleted file mode 100644
index aaf88ca..0000000
--- a/karaf-2.3.x/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java
+++ /dev/null
@@ -1,914 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features;
-
-import static org.easymock.EasyMock.aryEq;
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.isA;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.reset;
-import static org.easymock.EasyMock.verify;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URL;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Dictionary;
-import java.util.EnumSet;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.CopyOnWriteArraySet;
-import java.util.jar.JarInputStream;
-
-import junit.framework.TestCase;
-
-import org.apache.karaf.features.internal.FeatureImpl;
-import org.apache.karaf.features.internal.FeaturesServiceImpl;
-import org.easymock.EasyMock;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-import org.osgi.service.log.LogService;
-import org.osgi.service.packageadmin.PackageAdmin;
-
-import static org.easymock.EasyMock.*;
-
-public class FeaturesServiceTest extends TestCase {
-
-    File dataFile;
-
-    protected void setUp() throws IOException {
-        dataFile = File.createTempFile("features", null, null);
-    }
-
-    public void testInstallFeature() throws Exception {
-
-        String name = getJarUrl(Bundle.class);
-
-        File tmp = File.createTempFile("smx", ".feature");
-        PrintWriter pw = new PrintWriter(new FileWriter(tmp));
-        pw.println("<features xmlns=\"http://karaf.apache.org/xmlns/features/v1.0.0\">");
-        pw.println("  <feature name=\"f1\">");
-        pw.println("    <bundle>" + name + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("</features>");
-        pw.close();
-
-        URI uri = tmp.toURI();
-
-        BundleContext bundleContext = EasyMock.createMock(BundleContext.class);
-        Bundle installedBundle = EasyMock.createMock(Bundle.class);
-
-        expect(bundleContext.getDataFile(EasyMock.<String>anyObject())).andReturn(dataFile).anyTimes();
-
-        replay(bundleContext, installedBundle);
-
-        FeaturesServiceImpl svc = new FeaturesServiceImpl();
-        svc.setBundleContext(bundleContext);
-        svc.addRepository(uri);
-        
-        Repository[] repositories = svc.listRepositories();
-        assertNotNull(repositories);
-        assertEquals(1, repositories.length);
-        assertNotNull(repositories[0]);
-        Feature[] features = repositories[0].getFeatures();
-        assertNotNull(features);
-        assertEquals(1, features.length);
-        assertNotNull(features[0]);
-        assertEquals("f1", features[0].getName());
-        assertNotNull(features[0].getDependencies());
-        assertEquals(0, features[0].getDependencies().size());
-        assertNotNull(features[0].getBundles());
-        assertEquals(1, features[0].getBundles().size());
-        assertEquals(name, features[0].getBundles().get(0).getLocation());
-        assertTrue(features[0].getBundles().get(0).isStart());
-
-        verify(bundleContext, installedBundle);
-
-        reset(bundleContext, installedBundle);
-
-        expect(bundleContext.getBundles()).andReturn(new Bundle[0]);
-        expect(bundleContext.installBundle(isA(String.class),
-                                           isA(InputStream.class))).andReturn(installedBundle);
-        expect(installedBundle.getBundleId()).andReturn(12345L);
-        expect(installedBundle.getBundleId()).andReturn(12345L);
-        expect(installedBundle.getBundleId()).andReturn(12345L);
-        expect(bundleContext.getBundle(12345L)).andReturn(installedBundle);
-        expect(installedBundle.getHeaders()).andReturn(new Hashtable());
-        installedBundle.start();
-
-        expect(bundleContext.getDataFile(EasyMock.<String>anyObject())).andReturn(dataFile).anyTimes();
-
-        replay(bundleContext, installedBundle);
-
-        svc.installFeature("f1", FeatureImpl.DEFAULT_VERSION, EnumSet.of(FeaturesService.Option.NoAutoRefreshBundles));
-        
-        Feature[] installed = svc.listInstalledFeatures();
-        assertEquals(1, installed.length);
-        assertEquals("f1", installed[0].getName());
-    }
-
-    public void testUninstallFeature() throws Exception {
-
-        String name = getJarUrl(Bundle.class);
-
-        File tmp = File.createTempFile("smx", ".feature");
-        PrintWriter pw = new PrintWriter(new FileWriter(tmp));
-        pw.println("<features xmlns=\"http://karaf.apache.org/xmlns/features/v1.0.0\">");
-        pw.println("  <feature name=\"f1\" version=\"0.1\">");
-        pw.println("    <bundle>" + name + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("  <feature name=\"f1\" version=\"0.2\">");
-        pw.println("    <bundle>" + name + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("</features>");
-        pw.close();
-
-        URI uri = tmp.toURI();
-        
-        BundleContext bundleContext = EasyMock.createMock(BundleContext.class);
-        Bundle installedBundle = EasyMock.createMock(Bundle.class);
-
-        expect(bundleContext.getDataFile(EasyMock.<String>anyObject())).andReturn(dataFile).anyTimes();
-
-        replay(bundleContext, installedBundle);
-
-        FeaturesServiceImpl svc = new FeaturesServiceImpl();
-        svc.setBundleContext(bundleContext);
-        svc.addRepository(uri);
-        
-        verify(bundleContext, installedBundle);
-
-        reset(bundleContext, installedBundle);
-
-        // Installs f1 and 0.1
-        expect(bundleContext.getBundles()).andReturn(new Bundle[0]);
-        expect(bundleContext.installBundle(isA(String.class),
-                                           isA(InputStream.class))).andReturn(installedBundle);
-        expect(installedBundle.getBundleId()).andReturn(12345L);
-        expect(installedBundle.getBundleId()).andReturn(12345L);
-        expect(installedBundle.getBundleId()).andReturn(12345L);
-        expect(bundleContext.getBundle(12345L)).andReturn(installedBundle);
-        expect(installedBundle.getHeaders()).andReturn(new Hashtable());
-        installedBundle.start();
-
-        // Installs f1 and 0.2
-        expect(bundleContext.getBundles()).andReturn(new Bundle[0]);
-        expect(bundleContext.installBundle(isA(String.class),
-                                           isA(InputStream.class))).andReturn(installedBundle);
-        expect(installedBundle.getBundleId()).andReturn(123456L);
-        expect(installedBundle.getBundleId()).andReturn(123456L);
-        expect(installedBundle.getBundleId()).andReturn(123456L);
-        expect(bundleContext.getBundle(123456L)).andReturn(installedBundle);
-        expect(installedBundle.getHeaders()).andReturn(new Hashtable());
-        installedBundle.start();
-
-        // UnInstalls f1 and 0.1
-        expect(bundleContext.getBundle(12345)).andReturn(installedBundle);
-        installedBundle.uninstall();
-
-        // UnInstalls f1 and 0.2
-        expect(bundleContext.getBundle(123456)).andReturn(installedBundle);
-        installedBundle.uninstall();
-
-        expect(bundleContext.getDataFile(EasyMock.<String>anyObject())).andReturn(dataFile).anyTimes();
-
-        replay(bundleContext, installedBundle);
-
-        try {
-            svc.uninstallFeature("f1");
-            fail("Uninstall should have failed as feature is not installed");
-        } catch (Exception e) {
-            // ok
-        }
-
-        svc.installFeature("f1", "0.1", EnumSet.of(FeaturesService.Option.NoAutoRefreshBundles));
-        svc.installFeature("f1", "0.2", EnumSet.of(FeaturesService.Option.NoAutoRefreshBundles));
-
-        try {
-            svc.uninstallFeature("f1");
-            fail("Uninstall should have failed as feature is installed in multiple versions");
-        } catch (Exception e) {
-            // ok
-        }
-
-        svc.uninstallFeature("f1", "0.1");
-        svc.uninstallFeature("f1");
-    }    
-    
-    // Tests Add and Remove Repository
-    public void testAddAndRemoveRepository() throws Exception {
-
-        String name = getJarUrl(Bundle.class);
-
-        File tmp = File.createTempFile("smx", ".feature");
-        PrintWriter pw = new PrintWriter(new FileWriter(tmp));
-        pw.println("<features xmlns=\"http://karaf.apache.org/xmlns/features/v1.0.0\">");
-        pw.println("  <feature name=\"f1\" version=\"0.1\">");
-        pw.println("    <bundle>" + name + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("  <feature name=\"f1\" version=\"0.2\">");
-        pw.println("    <bundle>" + name + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("  <feature name=\"f2\" version=\"0.2\">");
-        pw.println("    <bundle>" + name + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("</features>");
-        pw.close();
-
-        URI uri = tmp.toURI();
-
-        // loads the state
-        BundleContext bundleContext = EasyMock.createMock(BundleContext.class);
-
-        expect(bundleContext.getDataFile(EasyMock.<String>anyObject())).andReturn(dataFile).anyTimes();
-
-        replay(bundleContext);
-
-        FeaturesServiceImpl svc = new FeaturesServiceImpl();
-        svc.setBundleContext(bundleContext);
-
-        // Adds Repository
-        svc.addRepository(uri);                                                     
-        
-        // Removes Repository
-        svc.removeRepository(uri);        
-    }
-
-    // Tests install of a Repository that includes a feature
-    // with a feature dependency
-    // The dependant feature is in the same repository
-    // Tests uninstall of features
-    public void testInstallFeatureWithDependantFeatures() throws Exception {
-
-        String name = getJarUrl(Bundle.class);
-
-        File tmp = File.createTempFile("smx", ".feature");
-        PrintWriter pw = new PrintWriter(new FileWriter(tmp));
-        pw.println("<features xmlns=\"http://karaf.apache.org/xmlns/features/v1.0.0\">");
-        pw.println("  <feature name=\"f1\" version=\"0.1\">");
-        pw.println("  <feature version=\"0.1\">f2</feature>");
-        pw.println("    <bundle>" + name + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("  <feature name=\"f2\" version=\"0.1\">");
-        pw.println("    <bundle>" + name + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("</features>");
-        pw.close();
-
-        URI uri = tmp.toURI();
-
-        BundleContext bundleContext = EasyMock.createMock(BundleContext.class);
-        Bundle installedBundle = EasyMock.createMock(Bundle.class);
-
-        // Installs feature f1 with dependency on f2
-        // so will install f2 first
-        expect(bundleContext.getBundles()).andReturn(new Bundle[0]);
-        expect(bundleContext.installBundle(isA(String.class),
-                                           isA(InputStream.class))).andReturn(installedBundle);
-        expect(installedBundle.getBundleId()).andReturn(12345L);
-        expect(installedBundle.getBundleId()).andReturn(12345L);
-        expect(installedBundle.getBundleId()).andReturn(12345L);
-        expect(bundleContext.getBundle(12345L)).andReturn(installedBundle);
-        expect(installedBundle.getHeaders()).andReturn(new Hashtable());
-        installedBundle.start();
-
-        // Then installs f1
-        expect(bundleContext.getBundles()).andReturn(new Bundle[0]);
-        expect(bundleContext.installBundle(isA(String.class),
-                                           isA(InputStream.class))).andReturn(installedBundle);
-        expect(installedBundle.getBundleId()).andReturn(1234L);
-        expect(installedBundle.getBundleId()).andReturn(1234L);
-        expect(installedBundle.getBundleId()).andReturn(1234L);
-        expect(bundleContext.getBundle(1234L)).andReturn(installedBundle);
-        expect(installedBundle.getHeaders()).andReturn(new Hashtable()).anyTimes();
-        installedBundle.start();
-
-        // uninstalls first feature name = f1, version = 0.1
-        expect(bundleContext.getBundle(1234)).andReturn(installedBundle);
-        installedBundle.uninstall();
-
-        // uninstalls first feature name = f2, version = 0.1
-        expect(bundleContext.getBundle(12345)).andReturn(installedBundle);
-        installedBundle.uninstall();
-
-        expect(bundleContext.getDataFile(EasyMock.<String>anyObject())).andReturn(dataFile).anyTimes();
-
-        replay(bundleContext, installedBundle);
-
-        FeaturesServiceImpl svc = new FeaturesServiceImpl();
-        svc.setBundleContext(bundleContext);
-        svc.addRepository(uri);
-
-        svc.installFeature("f1", "0.1");
-
-        // Uninstall repository
-        svc.uninstallFeature("f1", "0.1");
-        svc.uninstallFeature("f2", "0.1");
-
-    }
-
-    // Tests install of a Repository that includes a feature with a feature dependency
-    public void testInstallFeatureWithDependantFeaturesAndVersionWithoutPreinstall() throws Exception {
-
-        String name = getJarUrl(Bundle.class);
-
-        File tmp = File.createTempFile("smx", ".feature");
-        PrintWriter pw = new PrintWriter(new FileWriter(tmp));
-        pw.println("<features xmlns=\"http://karaf.apache.org/xmlns/features/v1.0.0\">");
-        pw.println("  <feature name=\"f1\" version=\"0.1\">");
-        pw.println("    <feature version=\"0.1\">f2</feature>");
-        pw.println("  </feature>");
-        pw.println("  <feature name=\"f2\" version=\"0.1\">");
-        pw.println("    <bundle>" + name + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("  <feature name=\"f2\" version=\"0.2\">");
-        pw.println("    <bundle>" + name + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("</features>");
-        pw.close();
-
-        URI uri = tmp.toURI();
-
-        BundleContext bundleContext = prepareBundleContextForInstallUninstall();
-
-        FeaturesServiceImpl svc = new FeaturesServiceImpl();
-        svc.setBundleContext(bundleContext);
-        svc.addRepository(uri);
-
-        svc.installFeature("f1", "0.1");
-
-        // Uninstall repository
-        svc.uninstallFeature("f1", "0.1");
-        svc.uninstallFeature("f2", "0.1");
-    }
-
-    // Tests install of a Repository that includes a feature with a feature dependency
-    public void testInstallFeatureWithDependantFeaturesAndNoVersionWithoutPreinstall() throws Exception {
-
-        String name = getJarUrl(Bundle.class);
-
-        File tmp = File.createTempFile("smx", ".feature");
-        PrintWriter pw = new PrintWriter(new FileWriter(tmp));
-        pw.println("<features xmlns=\"http://karaf.apache.org/xmlns/features/v1.0.0\">");
-        pw.println("  <feature name=\"f1\" version=\"0.1\">");
-        pw.println("    <feature>f2</feature>");
-        pw.println("  </feature>");
-        pw.println("  <feature name=\"f2\" version=\"0.1\">");
-        pw.println("    <bundle>" + name + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("  <feature name=\"f2\" version=\"0.2\">");
-        pw.println("    <bundle>" + name + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("</features>");
-        pw.close();
-
-        URI uri = tmp.toURI();
-
-        BundleContext bundleContext = prepareBundleContextForInstallUninstall();
-
-        FeaturesServiceImpl svc = new FeaturesServiceImpl();
-        svc.setBundleContext(bundleContext);
-        svc.addRepository(uri);
-
-        svc.installFeature("f1", "0.1");
-
-        // Uninstall repository
-        svc.uninstallFeature("f1", "0.1");
-        svc.uninstallFeature("f2", "0.2");
-    }
-
-    public void testInstallFeatureWithDependantFeaturesAndRangeWithoutPreinstall() throws Exception {
-
-        String name = getJarUrl(Bundle.class);
-
-        File tmp = File.createTempFile("smx", ".feature");
-        PrintWriter pw = new PrintWriter(new FileWriter(tmp));
-        pw.println("<features xmlns=\"http://karaf.apache.org/xmlns/features/v1.0.0\">");
-        pw.println("  <feature name=\"f1\" version=\"0.1\">");
-        pw.println("    <feature version=\"[0.1,0.3)\">f2</feature>");
-        pw.println("  </feature>");
-        pw.println("  <feature name=\"f2\" version=\"0.1\">");
-        pw.println("    <bundle>" + name + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("  <feature name=\"f2\" version=\"0.2\">");
-        pw.println("    <bundle>" + name + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("</features>");
-        pw.close();
-
-        URI uri = tmp.toURI();
-
-        BundleContext bundleContext = prepareBundleContextForInstallUninstall();
-
-        FeaturesServiceImpl svc = new FeaturesServiceImpl();
-        svc.setBundleContext(bundleContext);
-        svc.addRepository(uri);
-
-        svc.installFeature("f1", "0.1");
-
-        // Uninstall repository
-        svc.uninstallFeature("f1", "0.1");
-        svc.uninstallFeature("f2", "0.2");
-    }
-
-    public void testInstallFeatureWithDependantFeaturesAndRangeWithPreinstall() throws Exception {
-
-        String name = getJarUrl(Bundle.class);
-
-        File tmp = File.createTempFile("smx", ".feature");
-        PrintWriter pw = new PrintWriter(new FileWriter(tmp));
-        pw.println("<features xmlns=\"http://karaf.apache.org/xmlns/features/v1.0.0\">");
-        pw.println("  <feature name=\"f1\" version=\"0.1\">");
-        pw.println("    <feature version=\"[0.1,0.3)\">f2</feature>");
-        pw.println("  </feature>");
-        pw.println("  <feature name=\"f2\" version=\"0.1\">");
-        pw.println("    <bundle>" + name + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("  <feature name=\"f2\" version=\"0.2\">");
-        pw.println("    <bundle>" + name + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("</features>");
-        pw.close();
-
-        URI uri = tmp.toURI();
-
-        BundleContext bundleContext = EasyMock.createMock(BundleContext.class);
-        Bundle installedBundle = EasyMock.createMock(Bundle.class);
-
-        // Installs feature f1 with dependency on f2
-        expect(bundleContext.getBundles()).andReturn(new Bundle[0]);
-        expect(bundleContext.installBundle(isA(String.class),
-                                           isA(InputStream.class))).andReturn(installedBundle);
-        expect(installedBundle.getBundleId()).andReturn(12345L).anyTimes();
-        expect(bundleContext.getBundle(12345L)).andReturn(installedBundle).anyTimes();
-        expect(installedBundle.getHeaders()).andReturn(new Hashtable()).anyTimes();
-        installedBundle.start();
-
-        expect(bundleContext.getBundles()).andReturn(new Bundle[] { installedBundle });
-        expect(installedBundle.getSymbolicName()).andReturn(name).anyTimes();
-        expect(bundleContext.installBundle(isA(String.class),
-                                           isA(InputStream.class))).andReturn(installedBundle);
-        installedBundle.start();
-
-        // uninstalls first feature name = f2, version = 0.1
-        installedBundle.uninstall();
-
-        expect(bundleContext.getDataFile(EasyMock.<String>anyObject())).andReturn(dataFile).anyTimes();
-
-        replay(bundleContext, installedBundle);
-
-        FeaturesServiceImpl svc = new FeaturesServiceImpl();
-        svc.setBundleContext(bundleContext);
-        svc.addRepository(uri);
-
-        svc.installFeature("f2", "0.1");
-        svc.installFeature("f1", "0.1");
-
-        // Uninstall repository
-        svc.uninstallFeature("f1", "0.1");
-        svc.uninstallFeature("f2", "0.1");
-    }
-
-    public void testGetFeaturesShouldHandleDifferentVersionPatterns() throws Exception {
-
-        String name = getJarUrl(Bundle.class);
-
-        File tmp = File.createTempFile("smx", ".feature");
-        PrintWriter pw = new PrintWriter(new FileWriter(tmp));
-        pw.println("<features xmlns=\"http://karaf.apache.org/xmlns/features/v1.0.0\">");
-        pw.println("  <feature name=\"f1\" version=\"0.1\">");
-        pw.println("    <feature version=\"[0.1,0.3)\">f2</feature>");
-        pw.println("  </feature>");
-        pw.println("  <feature name=\"f2\" version=\"0.1\">");
-        pw.println("    <bundle>" + name + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("  <feature name=\"f2\" version=\"0.2\">");
-        pw.println("    <bundle>" + name + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("</features>");
-        pw.close();
-
-        URI uri = tmp.toURI();
-
-        FeaturesServiceImpl svc = new FeaturesServiceImpl();
-        svc.addRepository(uri);
-
-        Feature feature = svc.getFeature("f2", "[0.1,0.3)");
-        assertEquals("f2", feature.getName());
-        assertEquals("0.2", feature.getVersion());
-
-        Feature feature2 = svc.getFeature("f2", "0.0.0");
-        assertEquals("f2", feature2.getName());
-        assertEquals("0.2", feature2.getVersion());
-
-        Feature feature3 = svc.getFeature("f2", "0.2");
-        assertEquals("f2", feature3.getName());
-        assertEquals("0.2", feature3.getVersion());
-
-        Feature feature4 = svc.getFeature("f2", "0.3");
-        assertNull(feature4);
-    }
-
-    private BundleContext prepareBundleContextForInstallUninstall() throws Exception {
-        BundleContext bundleContext = EasyMock.createMock(BundleContext.class);
-        Bundle installedBundle = EasyMock.createMock(Bundle.class);
-
-        // Installs feature f1 with dependency on f2
-        expect(bundleContext.getBundles()).andReturn(new Bundle[0]);
-        expect(bundleContext.installBundle(isA(String.class),
-                                           isA(InputStream.class))).andReturn(installedBundle);
-        expect(installedBundle.getBundleId()).andReturn(12345L);
-        expect(installedBundle.getBundleId()).andReturn(12345L);
-        expect(installedBundle.getBundleId()).andReturn(12345L);
-        expect(bundleContext.getBundle(12345L)).andReturn(installedBundle);
-        expect(installedBundle.getHeaders()).andReturn(new Hashtable());
-        installedBundle.start();
-
-        // uninstalls first feature name = f2, version = 0.1
-        expect(bundleContext.getBundle(12345)).andReturn(installedBundle);
-        installedBundle.uninstall();
-
-        expect(bundleContext.getDataFile(EasyMock.<String>anyObject())).andReturn(dataFile).anyTimes();
-
-        replay(bundleContext, installedBundle);
-        return bundleContext;
-    }
-
-    public void testInstallBatchFeatureWithContinueOnFailureNoClean() throws Exception {
-        String bundle1 = getJarUrl(Bundle.class);
-        String bundle2 = getJarUrl(LogService.class);
-
-        File tmp = File.createTempFile("smx", ".feature");
-        PrintWriter pw = new PrintWriter(new FileWriter(tmp));
-        pw.println("<features xmlns=\"http://karaf.apache.org/xmlns/features/v1.0.0\">");
-        pw.println("  <feature name='f1'>");
-        pw.println("    <bundle>" + bundle1 + "</bundle>");
-        pw.println("    <bundle>" + "zfs:unknown" + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("  <feature name='f2'>");
-        pw.println("    <bundle>" + bundle2 + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("</features>");
-        pw.close();
-
-        URI uri = tmp.toURI();
-
-        BundleContext bundleContext = EasyMock.createMock(BundleContext.class);
-        Bundle installedBundle1 = EasyMock.createMock(Bundle.class);
-        Bundle installedBundle2 = EasyMock.createMock(Bundle.class);
-
-        // Installs feature f1 and f2
-        expect(bundleContext.getBundles()).andReturn(new Bundle[0]);
-        expect(bundleContext.installBundle(eq(bundle1), isA(InputStream.class))).andReturn(installedBundle1);
-        expect(installedBundle1.getBundleId()).andReturn(12345L);
-        expect(installedBundle1.getBundleId()).andReturn(12345L);
-        expect(installedBundle1.getBundleId()).andReturn(12345L);
-
-        expect(bundleContext.getBundles()).andReturn(new Bundle[0]);
-        expect(bundleContext.installBundle(eq(bundle2), isA(InputStream.class))).andReturn(installedBundle2);
-        expect(installedBundle2.getBundleId()).andReturn(54321L);
-        expect(installedBundle2.getBundleId()).andReturn(54321L);
-        expect(installedBundle2.getBundleId()).andReturn(54321L);
-        expect(installedBundle2.getHeaders()).andReturn(new Hashtable()).anyTimes();
-        installedBundle2.start();
-
-        expect(bundleContext.getDataFile(EasyMock.<String>anyObject())).andReturn(dataFile).anyTimes();
-
-        replay(bundleContext, installedBundle1, installedBundle2);
-
-        FeaturesServiceImpl svc = new FeaturesServiceImpl();
-        svc.setBundleContext(bundleContext);
-        svc.addRepository(uri);
-
-        svc.installFeatures(new CopyOnWriteArraySet<Feature>(Arrays.asList(svc.listFeatures())),
-                            EnumSet.of(FeaturesService.Option.ContinueBatchOnFailure, FeaturesService.Option.NoCleanIfFailure));
-
-//        verify(preferencesService, prefs, repositoriesNode, featuresNode, bundleContext, installedBundle1, installedBundle2);
-    }
-
-    public void testInstallBatchFeatureWithContinueOnFailureClean() throws Exception {
-        String bundle1 = getJarUrl(Bundle.class);
-        String bundle2 = getJarUrl(LogService.class);
-
-        File tmp = File.createTempFile("smx", ".feature");
-        PrintWriter pw = new PrintWriter(new FileWriter(tmp));
-        pw.println("<features xmlns=\"http://karaf.apache.org/xmlns/features/v1.0.0\">");
-        pw.println("  <feature name='f1'>");
-        pw.println("    <bundle>" + bundle1 + "</bundle>");
-        pw.println("    <bundle>" + "zfs:unknown" + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("  <feature name='f2'>");
-        pw.println("    <bundle>" + bundle2 + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("</features>");
-        pw.close();
-
-        URI uri = tmp.toURI();
-
-        BundleContext bundleContext = EasyMock.createMock(BundleContext.class);
-        Bundle installedBundle1 = EasyMock.createMock(Bundle.class);
-        Bundle installedBundle2 = EasyMock.createMock(Bundle.class);
-
-        // Installs feature f1 and f2
-        expect(bundleContext.getBundles()).andReturn(new Bundle[0]);
-        expect(bundleContext.installBundle(eq(bundle1), isA(InputStream.class))).andReturn(installedBundle1);
-        expect(installedBundle1.getBundleId()).andReturn(12345L);
-        expect(installedBundle1.getBundleId()).andReturn(12345L);
-        expect(installedBundle1.getBundleId()).andReturn(12345L);
-        installedBundle1.uninstall();
-
-        expect(bundleContext.getBundles()).andReturn(new Bundle[0]);
-        expect(bundleContext.installBundle(eq(bundle2), isA(InputStream.class))).andReturn(installedBundle2);
-        expect(installedBundle2.getBundleId()).andReturn(54321L);
-        expect(installedBundle2.getBundleId()).andReturn(54321L);
-        expect(installedBundle2.getBundleId()).andReturn(54321L);
-        expect(installedBundle2.getHeaders()).andReturn(new Hashtable()).anyTimes();
-        installedBundle2.start();
-
-        expect(bundleContext.getDataFile(EasyMock.<String>anyObject())).andReturn(dataFile).anyTimes();
-
-        replay(bundleContext, installedBundle1, installedBundle2);
-
-        FeaturesServiceImpl svc = new FeaturesServiceImpl();
-        svc.setBundleContext(bundleContext);
-        svc.addRepository(uri);
-
-        svc.installFeatures(new CopyOnWriteArraySet<Feature>(Arrays.asList(svc.listFeatures())),
-                            EnumSet.of(FeaturesService.Option.ContinueBatchOnFailure));
-
-//        verify(preferencesService, prefs, repositoriesNode, featuresNode, bundleContext, installedBundle1, installedBundle2);
-    }
-
-    public void testInstallBatchFeatureWithoutContinueOnFailureNoClean() throws Exception {
-        String bundle1 = getJarUrl(Bundle.class);
-        String bundle2 = getJarUrl(LogService.class);
-
-        File tmp = File.createTempFile("smx", ".feature");
-        PrintWriter pw = new PrintWriter(new FileWriter(tmp));
-        pw.println("<features xmlns=\"http://karaf.apache.org/xmlns/features/v1.0.0\">");
-        pw.println("  <feature name='f1'>");
-        pw.println("    <bundle>" + bundle1 + "</bundle>");
-        pw.println("    <bundle>" + "zfs:unknown" + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("  <feature name='f2'>");
-        pw.println("    <bundle>" + bundle2 + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("</features>");
-        pw.close();
-
-        URI uri = tmp.toURI();
-
-        BundleContext bundleContext = EasyMock.createMock(BundleContext.class);
-        Bundle installedBundle1 = EasyMock.createMock(Bundle.class);
-        Bundle installedBundle2 = EasyMock.createMock(Bundle.class);
-
-        // Installs feature f1 and f2
-        expect(bundleContext.getBundles()).andReturn(new Bundle[0]);
-        expect(bundleContext.installBundle(eq(bundle1), isA(InputStream.class))).andReturn(installedBundle1);
-        expect(installedBundle1.getBundleId()).andReturn(12345L);
-        expect(installedBundle1.getBundleId()).andReturn(12345L);
-        expect(installedBundle1.getBundleId()).andReturn(12345L);
-
-        expect(bundleContext.getBundles()).andReturn(new Bundle[0]);
-        expect(bundleContext.installBundle(eq(bundle2), isA(InputStream.class))).andReturn(installedBundle2);
-        expect(installedBundle2.getBundleId()).andReturn(54321L);
-        expect(installedBundle2.getBundleId()).andReturn(54321L);
-        expect(installedBundle2.getBundleId()).andReturn(54321L);
-        installedBundle2.start();
-
-        expect(bundleContext.getDataFile(EasyMock.<String>anyObject())).andReturn(dataFile).anyTimes();
-
-        replay(bundleContext, installedBundle1, installedBundle2);
-
-        FeaturesServiceImpl svc = new FeaturesServiceImpl();
-        svc.setBundleContext(bundleContext);
-        svc.addRepository(uri);
-
-        try {
-            List<Feature> features = Arrays.asList(svc.listFeatures());
-            Collections.reverse(features);
-            svc.installFeatures(new CopyOnWriteArraySet<Feature>(features),
-                                EnumSet.of(FeaturesService.Option.NoCleanIfFailure));
-            fail("Call should have thrown an exception");
-        } catch (MalformedURLException e) {
-        }
-
-//        verify(preferencesService, prefs, repositoriesNode, featuresNode, bundleContext, installedBundle1, installedBundle2);
-    }
-
-    public void testInstallBatchFeatureWithoutContinueOnFailureClean() throws Exception {
-        String bundle1 = getJarUrl(Bundle.class);
-        String bundle2 = getJarUrl(LogService.class);
-
-        File tmp = File.createTempFile("smx", ".feature");
-        PrintWriter pw = new PrintWriter(new FileWriter(tmp));
-        pw.println("<features xmlns=\"http://karaf.apache.org/xmlns/features/v1.0.0\">");
-        pw.println("  <feature name='f1'>");
-        pw.println("    <bundle>" + bundle1 + "</bundle>");
-        pw.println("    <bundle>" + "zfs:unknown" + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("  <feature name='f2'>");
-        pw.println("    <bundle>" + bundle2 + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("</features>");
-        pw.close();
-
-        URI uri = tmp.toURI();
-
-        BundleContext bundleContext = EasyMock.createMock(BundleContext.class);
-        Bundle installedBundle1 = EasyMock.createMock(Bundle.class);
-        Bundle installedBundle2 = EasyMock.createMock(Bundle.class);
-
-        // Installs feature f1 and f2
-        expect(bundleContext.getBundles()).andReturn(new Bundle[0]);
-        expect(bundleContext.installBundle(eq(bundle1), isA(InputStream.class))).andReturn(installedBundle1);
-        expect(installedBundle1.getBundleId()).andReturn(12345L);
-        expect(installedBundle1.getBundleId()).andReturn(12345L);
-        expect(installedBundle1.getBundleId()).andReturn(12345L);
-        installedBundle1.uninstall();
-
-        expect(bundleContext.getBundles()).andReturn(new Bundle[0]);
-        expect(bundleContext.installBundle(eq(bundle2), isA(InputStream.class))).andReturn(installedBundle2);
-        expect(installedBundle2.getBundleId()).andReturn(54321L);
-        expect(installedBundle2.getBundleId()).andReturn(54321L);
-        expect(installedBundle2.getBundleId()).andReturn(54321L);
-        installedBundle2.uninstall();
-
-        expect(bundleContext.getDataFile(EasyMock.<String>anyObject())).andReturn(dataFile).anyTimes();
-
-        replay(bundleContext, installedBundle1, installedBundle2);
-
-        FeaturesServiceImpl svc = new FeaturesServiceImpl();
-        svc.setBundleContext(bundleContext);
-        svc.addRepository(uri);
-
-        try {
-            List<Feature> features = Arrays.asList(svc.listFeatures());
-            Collections.reverse(features);
-            svc.installFeatures(new CopyOnWriteArraySet<Feature>(features),
-                                EnumSet.noneOf(FeaturesService.Option.class));
-            fail("Call should have thrown an exception");
-        } catch (MalformedURLException e) {
-        }
-
-//        verify(preferencesService, prefs, repositoriesNode, featuresNode, bundleContext, installedBundle1, installedBundle2);
-    }
-
-    public void testInstallFeatureWithHostToRefresh() throws Exception {
-        String bundle1 = getJarUrl(LogService.class);
-        String bundle2 = getJarUrl(Bundle.class);
-
-        File tmp = File.createTempFile("smx", ".feature");
-        PrintWriter pw = new PrintWriter(new FileWriter(tmp));
-        pw.println("<features>");
-        pw.println("  <feature name='f1'>");
-        pw.println("    <bundle>" + bundle1 + "</bundle>");
-        pw.println("    <bundle>" + bundle2 + "</bundle>");
-        pw.println("  </feature>");
-        pw.println("</features>");
-        pw.close();
-
-        URI uri = tmp.toURI();
-
-        JarInputStream j = new JarInputStream(new URL(bundle1).openStream());
-        Dictionary<String,String> headers = new Hashtable();
-        for (Map.Entry e : j.getManifest().getMainAttributes().entrySet()) {
-            headers.put(e.getKey().toString(), e.getValue().toString());
-        }
-
-        // loads the state
-        PackageAdmin packageAdmin = EasyMock.createMock(PackageAdmin.class);
-        BundleContext bundleContext = EasyMock.createMock(BundleContext.class);
-        Bundle installedBundle1 = EasyMock.createMock(Bundle.class);
-        Bundle installedBundle2 = EasyMock.createMock(Bundle.class);
-
-        // Installs feature f1
-        expect(installedBundle1.getBundleId()).andReturn(12345L);
-        expect(installedBundle1.getBundleId()).andReturn(12345L);
-        expect(installedBundle1.getBundleId()).andReturn(12345L);
-        expect(installedBundle1.getSymbolicName()).andReturn(headers.get(Constants.BUNDLE_SYMBOLICNAME)).anyTimes();
-        expect(installedBundle1.getHeaders()).andReturn(headers).anyTimes();
-        expect(bundleContext.getBundles()).andReturn(new Bundle[] { installedBundle1 });
-
-        expect(bundleContext.installBundle(eq(bundle2), isA(InputStream.class))).andReturn(installedBundle2);
-        expect(bundleContext.getBundles()).andReturn(new Bundle[] { installedBundle1, installedBundle2 });
-        expect(installedBundle2.getBundleId()).andReturn(54321L);
-        expect(installedBundle2.getBundleId()).andReturn(54321L);
-        expect(installedBundle2.getBundleId()).andReturn(54321L);
-        expect(installedBundle2.getSymbolicName()).andReturn("fragment").anyTimes();
-        Dictionary d = new Hashtable();
-        d.put(Constants.FRAGMENT_HOST, headers.get(Constants.BUNDLE_SYMBOLICNAME));
-        expect(installedBundle2.getHeaders()).andReturn(d).anyTimes();
-
-        expect(installedBundle1.getState()).andReturn(Bundle.ACTIVE);
-        expect(installedBundle1.getState()).andReturn(Bundle.ACTIVE);
-        expect(installedBundle2.getState()).andReturn(Bundle.INSTALLED);
-        expect(installedBundle2.getState()).andReturn(Bundle.INSTALLED);
-
-        //
-        // This is the real test to make sure the host is actually refreshed
-        //
-        packageAdmin.refreshPackages(aryEq(new Bundle[] { installedBundle1 }));
-
-        expect(bundleContext.getDataFile(EasyMock.<String>anyObject())).andReturn(dataFile).anyTimes();
-
-        replay(packageAdmin, bundleContext, installedBundle1, installedBundle2);
-
-        FeaturesServiceImpl svc = new FeaturesServiceImpl();
-        svc.setPackageAdmin(packageAdmin);
-        svc.setBundleContext(bundleContext);
-        svc.addRepository(uri);
-
-        List<Feature> features = Arrays.asList(svc.listFeatures());
-        Collections.reverse(features);
-        svc.installFeatures(new CopyOnWriteArraySet<Feature>(features),
-                            EnumSet.noneOf(FeaturesService.Option.class));
-
-//        verify(preferencesService, prefs, repositoriesNode, featuresNode, bundleContext, installedBundle1, installedBundle2);
-    }
-
-    /**
-     * This test checks schema validation of submited uri.
-     */
-    public void testSchemaValidation() throws Exception {
-        File tmp = File.createTempFile("smx", ".feature");
-        PrintWriter pw = new PrintWriter(new FileWriter(tmp));
-        pw.println("<features xmlns=\"http://karaf.apache.org/xmlns/features/v1.0.0\">");
-        pw.println("  <featur>");
-        pw.println("    <bundle>somebundle</bundle>");
-        pw.println("  </featur>");
-        pw.println("</features>");
-        pw.close();
-
-        URI uri = tmp.toURI();
-
-        BundleContext bundleContext = EasyMock.createMock(BundleContext.class);
-
-        expect(bundleContext.getDataFile(EasyMock.<String>anyObject())).andReturn(dataFile).anyTimes();
-
-        FeaturesServiceImpl svc = new FeaturesServiceImpl();
-        svc.setBundleContext(bundleContext);
-        try {
-            svc.addRepository(uri);
-            fail("exception expected");
-        } catch (Exception e) {
-            assertTrue(e.getMessage().contains("Unable to validate"));
-        }
-    }
-
-    /**
-     * This test checks feature service behavior with old, non namespaced descriptor.
-     */
-    public void testNoSchemaValidation() throws Exception {
-        File tmp = File.createTempFile("smx", ".feature");
-        PrintWriter pw = new PrintWriter(new FileWriter(tmp));
-        pw.println("<features>");
-        pw.println("  <featur>");
-        pw.println("    <bundle>anotherBundle</bundle>");
-        pw.println("  </featur>");
-        pw.println("</features>");
-        pw.close();
-
-        URI uri = tmp.toURI();
-
-        BundleContext bundleContext = EasyMock.createMock(BundleContext.class);
-        expect(bundleContext.getDataFile(EasyMock.<String>anyObject())).andReturn(dataFile).anyTimes();
-        replay(bundleContext);
-
-        FeaturesServiceImpl svc = new FeaturesServiceImpl();
-        svc.setBundleContext(bundleContext);
-        svc.addRepository(uri);
-    }
-
-    private String getJarUrl(Class cl) {
-        String name = cl.getName();
-        name = name.replace(".", "/")  + ".class";
-        name = getClass().getClassLoader().getResource(name).toString();
-        name = name.substring("jar:".length(), name.indexOf('!'));
-        return name;
-    }
-
-}
diff --git a/karaf-2.3.x/features/core/src/test/java/org/apache/karaf/features/RepositoryTest.java b/karaf-2.3.x/features/core/src/test/java/org/apache/karaf/features/RepositoryTest.java
deleted file mode 100644
index 2e1c6da..0000000
--- a/karaf-2.3.x/features/core/src/test/java/org/apache/karaf/features/RepositoryTest.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features;
-
-import java.net.URI;
-
-import junit.framework.TestCase;
-import org.apache.karaf.features.internal.RepositoryImpl;
-import org.apache.karaf.features.internal.FeatureImpl;
-
-
-public class RepositoryTest extends TestCase {
-
-    public void testLoad() throws Exception {
-        RepositoryImpl r = new RepositoryImpl(getClass().getResource("repo1.xml").toURI());
-        // Check repo
-        URI[] repos = r.getRepositories();
-        assertNotNull(repos);
-        assertEquals(1, repos.length);
-        assertEquals(URI.create("urn:r1"), repos[0]);
-        // Check features
-        Feature[] features = r.getFeatures();
-        assertNotNull(features);
-        assertEquals(3, features.length);
-        assertNotNull(features[0]);
-        assertEquals("f1", features[0].getName());
-        assertNotNull(features[0].getConfigurations());
-        assertEquals(1, features[0].getConfigurations().size());
-        assertNotNull(features[0].getConfigurations().get("c1"));
-        assertEquals(1, features[0].getConfigurations().get("c1").size());
-        assertEquals("v", features[0].getConfigurations().get("c1").get("k"));
-        assertNotNull(features[0].getDependencies());
-        assertEquals(0, features[0].getDependencies().size());
-        assertNotNull(features[0].getBundles());
-        assertEquals(2, features[0].getBundles().size());
-        assertEquals("b1", features[0].getBundles().get(0).getLocation());
-        assertEquals("b2", features[0].getBundles().get(1).getLocation());
-        assertNotNull(features[1]);
-        assertEquals("f2", features[1].getName());
-        assertNotNull(features[1].getConfigurations());
-        assertEquals(0, features[1].getConfigurations().size());
-        assertNotNull(features[1].getDependencies());
-        assertEquals(1, features[1].getDependencies().size());
-        assertEquals("f1" + FeatureImpl.SPLIT_FOR_NAME_AND_VERSION + FeatureImpl.DEFAULT_VERSION, features[1].getDependencies().get(0).toString());
-        assertNotNull(features[1].getBundles());
-        assertEquals(1, features[1].getBundles().size());
-        assertEquals("b3", features[1].getBundles().get(0).getLocation());
-        assertEquals("f3", features[2].getName());
-        assertNotNull(features[2].getConfigurationFiles());
-        assertEquals(1, features[2].getConfigurationFiles().size());
-        assertEquals("cf1", features[2].getConfigurationFiles().get(0).getFinalname());
-        assertEquals("cfloc", features[2].getConfigurationFiles().get(0).getLocation());
-    }
-    
-    public void testShowWrongUriInException() throws Exception {
-        String uri = "src/test/resources/org/apache/karaf/shell/features/repo1.xml";
-        RepositoryImpl r = new RepositoryImpl(new URI(uri));
-        try {
-            r.load();
-        } catch (Exception e) {
-            assertTrue(e.getMessage().contains(uri));
-        }
-    }
-}
diff --git a/karaf-2.3.x/features/core/src/test/java/org/apache/karaf/features/internal/FeaturesServiceImplTest.java b/karaf-2.3.x/features/core/src/test/java/org/apache/karaf/features/internal/FeaturesServiceImplTest.java
deleted file mode 100644
index 8080029..0000000
--- a/karaf-2.3.x/features/core/src/test/java/org/apache/karaf/features/internal/FeaturesServiceImplTest.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.internal;
-
-import static org.easymock.EasyMock.*;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.HashMap;
-import java.util.List;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.Set;
-import java.util.HashSet;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-import junit.framework.TestCase;
-
-import org.apache.felix.utils.manifest.Clause;
-import org.apache.karaf.features.BundleInfo;
-import org.apache.karaf.features.Feature;
-import org.easymock.EasyMock;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleException;
-import org.osgi.framework.FrameworkListener;
-
-/**
- * Test cases for {@link FeaturesServiceImpl}
- */
-public class FeaturesServiceImplTest extends TestCase {
-    
-    File dataFile;
-
-    protected void setUp() throws IOException {
-        dataFile = File.createTempFile("features", null, null);
-    }
-
-    public void testGetFeature() throws Exception {
-        final Map<String, Map<String, Feature>> features = new HashMap<String, Map<String,Feature>>();
-        Map<String, Feature> versions = new HashMap<String, Feature>();
-        FeatureImpl feature = new FeatureImpl("transaction");
-        versions.put("1.0.0", feature);
-        features.put("transaction", versions);
-        final FeaturesServiceImpl impl = new FeaturesServiceImpl() {
-            protected Map<String,Map<String,Feature>> getFeatures() throws Exception {
-                return features;
-            };
-        };
-        assertNotNull(impl.getFeature("transaction", FeatureImpl.DEFAULT_VERSION));
-        assertSame(feature, impl.getFeature("transaction", FeatureImpl.DEFAULT_VERSION));
-    }
-    
-    public void testGetFeatureStripVersion() throws Exception {
-        final Map<String, Map<String, Feature>> features = new HashMap<String, Map<String,Feature>>();
-        Map<String, Feature> versions = new HashMap<String, Feature>();
-        FeatureImpl feature = new FeatureImpl("transaction");
-        versions.put("1.0.0", feature);
-        features.put("transaction", versions);
-        final FeaturesServiceImpl impl = new FeaturesServiceImpl() {
-            protected Map<String,Map<String,Feature>> getFeatures() throws Exception {
-                return features;
-            };
-        };
-        assertNotNull(impl.getFeature("transaction", "  1.0.0  "));
-        assertSame(feature, impl.getFeature("transaction", "  1.0.0   "));
-    }
-    
-    public void testGetFeatureNotAvailable() throws Exception {
-        final Map<String, Map<String, Feature>> features = new HashMap<String, Map<String,Feature>>();
-        Map<String, Feature> versions = new HashMap<String, Feature>();
-        versions.put("1.0.0", new FeatureImpl("transaction"));
-        features.put("transaction", versions);
-        final FeaturesServiceImpl impl = new FeaturesServiceImpl() {
-            protected Map<String,Map<String,Feature>> getFeatures() throws Exception {
-                return features;
-            };
-        };
-        assertNull(impl.getFeature("activemq", FeatureImpl.DEFAULT_VERSION));
-    }
-    
-    public void testGetFeatureHighestAvailable() throws Exception {
-        final Map<String, Map<String, Feature>> features = new HashMap<String, Map<String,Feature>>();
-        Map<String, Feature> versions = new HashMap<String, Feature>();
-        versions.put("1.0.0", new FeatureImpl("transaction", "1.0.0"));
-        versions.put("2.0.0", new FeatureImpl("transaction", "2.0.0"));
-        features.put("transaction", versions);
-        final FeaturesServiceImpl impl = new FeaturesServiceImpl() {
-            protected Map<String,Map<String,Feature>> getFeatures() throws Exception {
-                return features;
-            };
-        };
-        assertNotNull(impl.getFeature("transaction", FeatureImpl.DEFAULT_VERSION));
-        assertSame("2.0.0", impl.getFeature("transaction", FeatureImpl.DEFAULT_VERSION).getVersion());
-    }
-
-    public void testStartDoesNotFailWithOneInvalidUri()  {
-        BundleContext bundleContext = EasyMock.createMock(BundleContext.class);
-        expect(bundleContext.getDataFile(EasyMock.<String>anyObject())).andReturn(dataFile).anyTimes();
-        bundleContext.addFrameworkListener(EasyMock.<FrameworkListener>anyObject());
-        bundleContext.removeFrameworkListener(EasyMock.<FrameworkListener>anyObject());
-        replay(bundleContext);
-        FeaturesServiceImpl service = new FeaturesServiceImpl();
-        service.setBundleContext(bundleContext);
-        try {
-            service.setUrls("mvn:inexistent/features/1.0/xml/features");
-            service.start();
-        } catch (Exception e) {
-            fail(String.format("Service should not throw start-up exception but log the error instead: %s", e));
-        }
-    }
-
-    /**
-     * This test checks KARAF-388 which allows you to specify version of boot feature.
-     */
-    public void testStartDoesNotFailWithNonExistentVersion()  {
-        BundleContext bundleContext = EasyMock.createMock(BundleContext.class);
-
-        final Map<String, Map<String, Feature>> features = new HashMap<String, Map<String,Feature>>();
-        Map<String, Feature> versions = new HashMap<String, Feature>();
-        versions.put("1.0.0", new FeatureImpl("transaction", "1.0.0"));
-        versions.put("2.0.0", new FeatureImpl("transaction", "2.0.0"));
-        features.put("transaction", versions);
-
-        Map<String, Feature> versions2 = new HashMap<String, Feature>();
-        versions2.put("1.0.0", new FeatureImpl("ssh", "1.0.0"));
-        features.put("ssh", versions2);
-        
-        final CountDownLatch latch = new CountDownLatch(2);
-
-        final FeaturesServiceImpl impl = new FeaturesServiceImpl() {
-            protected Map<String,Map<String,Feature>> getFeatures() throws Exception {
-                return features;
-            };
-
-            // override methods which refers to bundle context to avoid mocking everything
-            @Override
-            protected boolean loadState() {
-                return true;
-            }
-            @Override
-            protected void saveState() {
-                // this method will be invoked twice while features service is starting
-                latch.countDown();
-            }
-        };
-        impl.setBundleContext(bundleContext);
-
-        try {
-            Thread.currentThread().setContextClassLoader(new URLClassLoader(new URL[0]));
-            impl.setBoot("transaction;version=1.2,ssh;version=1.0.0");
-            impl.start();
-
-            // waiting for the features service installation thread to finish its work
-            latch.await(2, TimeUnit.SECONDS);
-
-            assertFalse("Feature transaction 1.0.0 should not be installed", impl.isInstalled(impl.getFeature("transaction", "1.0.0")));
-            assertFalse("Feature transaction 2.0.0 should not be installed", impl.isInstalled(impl.getFeature("transaction", "2.0.0")));
-            assertTrue("Feature ssh should be installed", impl.isInstalled(impl.getFeature("ssh", "1.0.0")));
-        } catch (Exception e) {
-            fail(String.format("Service should not throw start-up exception but log the error instead: %s", e));
-        }
-    }
-
-    /**
-     * This test ensures that every feature get installed only once, even if it appears multiple times in the list
-     * of transitive feature dependencies (KARAF-1600)
-     */
-    public void testNoDuplicateFeaturesInstallation() throws Exception {
-        final List<Feature> installed = new LinkedList<Feature>();
-
-        final FeaturesServiceImpl impl = new FeaturesServiceImpl() {
-            // override methods which refers to bundle context to avoid mocking everything
-            @Override
-            protected boolean loadState() {
-                return true;
-            }
-
-            @Override
-            protected void saveState() {
-
-            }
-
-            @Override
-            protected void doInstallFeature(InstallationState state, Feature feature, boolean verbose) throws Exception {
-                installed.add(feature);
-
-                super.doInstallFeature(state, feature, verbose);
-            }
-
-            @Override
-            protected InstallResult installBundleIfNeeded(InstallationState state, BundleInfo bundleInfo, boolean verbose) throws IOException, BundleException {
-                // let's return a mock bundle and bundle id to keep the features service happy
-                Bundle bundle = createNiceMock(Bundle.class);
-                expect(bundle.getBundleId()).andReturn(10l).anyTimes();
-                replay(bundle);
-                return new InstallResult(false, bundle, 0);
-            }
-        };
-        impl.addRepository(getClass().getResource("repo2.xml").toURI());
-
-        try {
-            impl.installFeature("all");
-
-            // copying the features to a set to filter out the duplicates
-            Set<Feature> noduplicates = new HashSet<Feature>();
-            noduplicates.addAll(installed);
-
-            assertEquals("Every feature should only have been installed once", installed.size(), noduplicates.size());
-        } catch (Exception e) {
-            fail(String.format("Service should not throw any exceptions: %s", e));
-        }
-    }
-
-    public void testGetOptionalImportsOnly() {
-        FeaturesServiceImpl service = new FeaturesServiceImpl();
-
-        List<Clause> result = service.getOptionalImports("org.apache.karaf,org.apache.karaf.optional;resolution:=optional");
-        assertEquals("One optional import expected", 1, result.size());
-        assertEquals("org.apache.karaf.optional", result.get(0).getName());
-
-        result = service.getOptionalImports(null);
-        assertNotNull(result);
-        assertEquals("No optional imports expected", 0, result.size());
-    }
-}
diff --git a/karaf-2.3.x/features/core/src/test/resources/org/apache/karaf/features/internal/repo2.xml b/karaf-2.3.x/features/core/src/test/resources/org/apache/karaf/features/internal/repo2.xml
deleted file mode 100644
index 307ae55..0000000
--- a/karaf-2.3.x/features/core/src/test/resources/org/apache/karaf/features/internal/repo2.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<!--
-
-    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.
--->
-<features name="repo2">
-    <feature name="common">
-        <bundle>b1</bundle>
-    </feature>
-    <feature name="f1">
-        <feature>common</feature>
-        <feature>f1</feature>
-        <bundle>b2</bundle>
-    </feature>
-    <feature name="f2">
-        <feature>common</feature>
-        <feature>f1</feature>
-        <bundle>b3</bundle>
-    </feature>
-    <feature name="f3">
-        <feature>f1</feature>
-        <feature>f2</feature>
-    	<bundle>b4</bundle>
-    </feature>
-    <feature name="all">
-        <feature>f1</feature>
-        <feature>f2</feature>
-        <feature>f3</feature>
-    </feature>
-</features>
diff --git a/karaf-2.3.x/features/core/src/test/resources/org/apache/karaf/features/repo1.xml b/karaf-2.3.x/features/core/src/test/resources/org/apache/karaf/features/repo1.xml
deleted file mode 100644
index 4c8db01..0000000
--- a/karaf-2.3.x/features/core/src/test/resources/org/apache/karaf/features/repo1.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<!--
-
-    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.
--->
-<features name="test">
-    <repository>urn:r1</repository>
-    <feature name="f1">
-        <config name="c1">
-            k=v
-        </config>
-        <bundle>b1</bundle>
-        <bundle>b2</bundle>
-    </feature>
-    <feature name="f2">
-        <feature>f1</feature>
-        <bundle>b3</bundle>
-    </feature>
-    <feature name="f3">
-    	<configfile finalname="cf1">cfloc</configfile>
-    	<bundle>b4</bundle> 
-    </feature>
-</features>
diff --git a/karaf-2.3.x/features/management/NOTICE b/karaf-2.3.x/features/management/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/features/management/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/features/management/pom.xml b/karaf-2.3.x/features/management/pom.xml
deleted file mode 100644
index ac0317f..0000000
--- a/karaf-2.3.x/features/management/pom.xml
+++ /dev/null
@@ -1,137 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.features</groupId>
-        <artifactId>features</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.features.management</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Features :: Management</name>
-    <description>This bundle provides MBeans to manipulate features via JMX.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.features</groupId>
-            <artifactId>org.apache.karaf.features.core</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.bundlerepository</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.obr</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.management</groupId>
-            <artifactId>org.apache.karaf.management.server</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.osgi</groupId>
-            <artifactId>spring-osgi-core</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicemix.bundles</groupId>
-            <artifactId>org.apache.servicemix.bundles.junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymock</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-jdk14</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            javax.management,
-                            javax.management.loading,
-                            org.apache.felix.service.command,
-                            org.apache.felix.gogo.commands,
-                            org.apache.karaf.shell.console,
-                            *
-                        </Import-Package>
-                        <Private-Package>org.apache.karaf.features.management.internal</Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/features/management/src/main/java/org/apache/karaf/features/management/FeaturesServiceMBean.java b/karaf-2.3.x/features/management/src/main/java/org/apache/karaf/features/management/FeaturesServiceMBean.java
deleted file mode 100644
index 0f21aab..0000000
--- a/karaf-2.3.x/features/management/src/main/java/org/apache/karaf/features/management/FeaturesServiceMBean.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.management;
-
-import javax.management.openmbean.TabularData;
-
-public interface FeaturesServiceMBean {
-
-    TabularData getFeatures() throws Exception;
-
-    TabularData getRepositories() throws Exception;
-
-    void addRepository(String url) throws Exception;
-
-    void addRepository(String url, boolean install) throws Exception;
-
-    void removeRepository(String url) throws Exception;
-
-    void removeRepository(String url, boolean uninstall) throws Exception;
-
-    void installFeature(String name) throws Exception;
-
-    void installFeature(String name, boolean noClean, boolean noRefresh) throws Exception;
-
-    void installFeature(String name, String version) throws Exception;
-
-    void installFeature(String name, String version, boolean noClean, boolean noRefresh) throws Exception;
-
-    void uninstallFeature(String name) throws Exception;
-
-    void uninstallFeature(String name, String version) throws Exception;
-
-    String FEATURE_NAME = "Name";
-
-    String FEATURE_VERSION = "Version";
-
-    String FEATURE_DEPENDENCIES = "Dependencies";
-
-    String FEATURE_BUNDLES = "Bundles";
-
-    String FEATURE_CONFIGURATIONS = "Configurations";
-    
-    String FEATURE_CONFIGURATIONFILES = "Configuration Files";
-
-    String FEATURE_INSTALLED = "Installed";
-
-    String FEATURE_CONFIG_PID = "Pid";
-    String FEATURE_CONFIG_ELEMENTS = "Elements";
-    String FEATURE_CONFIG_ELEMENT_KEY = "Key";
-    String FEATURE_CONFIG_ELEMENT_VALUE = "Value";
-    
-    String FEATURE_CONFIG_FILES_ELEMENTS = "Files";
-
-    /**
-     * The type of the event which is emitted for features events
-     */
-    String FEATURE_EVENT_TYPE = "org.apache.karaf.features.featureEvent";
-
-    String FEATURE_EVENT_EVENT_TYPE = "Type";
-
-    String FEATURE_EVENT_EVENT_TYPE_INSTALLED = "Installed";
-
-    String FEATURE_EVENT_EVENT_TYPE_UNINSTALLED = "Uninstalled";
-
-    /**
-     * The item names in the CompositeData representing a feature
-     */
-    String[] FEATURE = { FEATURE_NAME, FEATURE_VERSION, FEATURE_DEPENDENCIES, FEATURE_BUNDLES,
-                         FEATURE_CONFIGURATIONS, FEATURE_CONFIGURATIONFILES, FEATURE_INSTALLED };
-
-    String[] FEATURE_IDENTIFIER = { FEATURE_NAME, FEATURE_VERSION };
-
-    String[] FEATURE_CONFIG = { FEATURE_CONFIG_PID, FEATURE_CONFIG_ELEMENTS };
-    
-    String[] FEATURE_CONFIG_FILES = { FEATURE_CONFIG_FILES_ELEMENTS };
-
-    String[] FEATURE_CONFIG_ELEMENT = { FEATURE_CONFIG_ELEMENT_KEY, FEATURE_CONFIG_ELEMENT_VALUE };
-
-    /**
-     * The item names in the CompositeData representing the event raised for
-     * feature events within the OSGi container by this bean
-     */
-    String[] FEATURE_EVENT = { FEATURE_NAME, FEATURE_VERSION, FEATURE_EVENT_EVENT_TYPE };
-
-
-    String REPOSITORY_NAME = "Name";
-
-    String REPOSITORY_URI = "Uri";
-
-    String REPOSITORY_REPOSITORIES = "Repositories";
-
-    String REPOSITORY_FEATURES = "Features";
-
-    /**
-     * The type of the event which is emitted for repositories events
-     */
-    String REPOSITORY_EVENT_TYPE = "org.apache.karaf.features.repositoryEvent";
-
-    String REPOSITORY_EVENT_EVENT_TYPE = "Type";
-
-    String REPOSITORY_EVENT_EVENT_TYPE_ADDED = "Added";
-
-    String REPOSITORY_EVENT_EVENT_TYPE_REMOVED = "Removed";
-
-    /**
-     * The item names in the CompositeData representing a feature
-     */
-    String[] REPOSITORY = { REPOSITORY_NAME, REPOSITORY_URI,  REPOSITORY_REPOSITORIES, REPOSITORY_FEATURES };
-
-    /**
-     * The item names in the CompositeData representing the event raised for
-     * feature events within the OSGi container by this bean
-     */
-    String[] REPOSITORY_EVENT = { REPOSITORY_NAME, REPOSITORY_URI, REPOSITORY_EVENT_EVENT_TYPE };
-
-}
diff --git a/karaf-2.3.x/features/management/src/main/java/org/apache/karaf/features/management/codec/JmxFeature.java b/karaf-2.3.x/features/management/src/main/java/org/apache/karaf/features/management/codec/JmxFeature.java
deleted file mode 100644
index ad682be..0000000
--- a/karaf-2.3.x/features/management/src/main/java/org/apache/karaf/features/management/codec/JmxFeature.java
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.management.codec;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.management.openmbean.TabularData;
-import javax.management.openmbean.TabularType;
-import javax.management.openmbean.OpenDataException;
-import javax.management.openmbean.CompositeType;
-import javax.management.openmbean.OpenType;
-import javax.management.openmbean.SimpleType;
-import javax.management.openmbean.ArrayType;
-import javax.management.openmbean.CompositeData;
-import javax.management.openmbean.CompositeDataSupport;
-import javax.management.openmbean.TabularDataSupport;
-
-import org.apache.karaf.features.BundleInfo;
-import org.apache.karaf.features.ConfigFileInfo;
-import org.apache.karaf.features.Feature;
-import org.apache.karaf.features.management.FeaturesServiceMBean;
-
-public class JmxFeature {
-
-    /**
-     * The CompositeType which represents a single feature
-     */
-    public final static CompositeType FEATURE;
-
-    /**
-     * The TabularType which represents a list of features
-     */
-    public final static TabularType FEATURE_TABLE;
-
-    public final static CompositeType FEATURE_IDENTIFIER;
-
-    public final static TabularType FEATURE_IDENTIFIER_TABLE;
-
-    public final static CompositeType FEATURE_CONFIG_ELEMENT;
-
-    public final static TabularType FEATURE_CONFIG_ELEMENT_TABLE;
-
-    public final static CompositeType FEATURE_CONFIG;
-
-    public final static TabularType FEATURE_CONFIG_TABLE;
-
-    public final static CompositeType FEATURE_CONFIG_FILES;
-    
-    public final static TabularType FEATURE_CONFIG_FILES_TABLE;
-    
-    private final CompositeData data;
-
-    public JmxFeature(Feature feature, boolean installed) {
-        try {
-            String[] itemNames = FeaturesServiceMBean.FEATURE;
-            Object[] itemValues = new Object[itemNames.length];
-            itemValues[0] = feature.getName();
-            itemValues[1] = feature.getVersion();
-            itemValues[2] = getFeatureIdentifierTable(feature.getDependencies());
-            itemValues[3] = getBundleUris(feature.getBundles());
-            itemValues[4] = getConfigTable(feature.getConfigurations());
-            itemValues[5] = getConfigFileList(feature.getConfigurationFiles());
-            itemValues[6] = installed;
-            data = new CompositeDataSupport(FEATURE, itemNames, itemValues);
-        } catch (OpenDataException e) {
-            throw new IllegalStateException("Cannot form feature open data", e);
-        }
-    }
-
-    public CompositeData asCompositeData() {
-        return data;
-    }
-
-    public static TabularData tableFrom(Collection<JmxFeature> features) {
-        TabularDataSupport table = new TabularDataSupport(FEATURE_TABLE);
-        for (JmxFeature feature : features) {
-            table.put(feature.asCompositeData());
-        }
-        return table;
-    }
-
-    static TabularData getFeatureIdentifierTable(List<Feature> features) throws OpenDataException {
-        TabularDataSupport table = new TabularDataSupport(FEATURE_IDENTIFIER_TABLE);
-        Set<String> featureSet = new HashSet<String>();
-        for (Feature feature : features) {
-        	if (featureSet.contains(feature.getName() + feature.getVersion())) {
-        		continue;
-        	} else {
-        		featureSet.add(feature.getName() + feature.getVersion());
-        	}
-            String[] itemNames = new String[] { FeaturesServiceMBean.FEATURE_NAME, FeaturesServiceMBean.FEATURE_VERSION };
-            Object[] itemValues = new Object[] { feature.getName(), feature.getVersion() };
-            CompositeData ident = new CompositeDataSupport(FEATURE_IDENTIFIER, itemNames, itemValues);
-            table.put(ident);
-        }
-        return table;
-    }
-
-    static String[] getBundleUris(List<BundleInfo> infos) {
-        String[] array = new String[infos.size()];
-        for (int i = 0; i < array.length; i++) {
-            array[i] = infos.get(i).getLocation();
-        }
-        return array;
-    }
-
-    static TabularData getConfigTable(Map<String, Map<String, String>> configs) throws OpenDataException {
-        TabularDataSupport table = new TabularDataSupport(FEATURE_CONFIG_TABLE);
-        for (Map.Entry<String, Map<String, String>> entry : configs.entrySet()) {
-            String[] itemNames = FeaturesServiceMBean.FEATURE_CONFIG;
-            Object[] itemValues = new Object[2];
-            itemValues[0] = entry.getKey();
-            itemValues[1] = getConfigElementTable(entry.getValue());
-            CompositeData config = new CompositeDataSupport(FEATURE_CONFIG, itemNames, itemValues);
-            table.put(config);
-        }
-        return table;
-    }
-    
-    static TabularData getConfigFileList(List<ConfigFileInfo> configFiles) throws OpenDataException {
-        TabularDataSupport table = new TabularDataSupport(FEATURE_CONFIG_FILES_TABLE);
-        for (ConfigFileInfo configFile : configFiles) {
-            String[] itemNames = FeaturesServiceMBean.FEATURE_CONFIG_FILES;
-            Object[] itemValues = { configFile.getFinalname() };
-            CompositeData config = new CompositeDataSupport(FEATURE_CONFIG_FILES, itemNames, itemValues);
-            table.put(config);
-        }
-        return table;
-    }
-
-    static TabularData getConfigElementTable(Map<String, String> config) throws OpenDataException {
-        TabularDataSupport table = new TabularDataSupport(FEATURE_CONFIG_ELEMENT_TABLE);
-        for (Map.Entry<String, String> entry : config.entrySet()) {
-            String[] itemNames = FeaturesServiceMBean.FEATURE_CONFIG_ELEMENT;
-            Object[] itemValues = { entry.getKey(), entry.getValue() };
-            CompositeData element = new CompositeDataSupport(FEATURE_CONFIG_ELEMENT, itemNames, itemValues);
-            table.put(element);
-        }
-        return table;
-    }
-
-
-    static {
-        FEATURE_IDENTIFIER = createFeatureIdentifierType();
-        FEATURE_IDENTIFIER_TABLE = createFeatureIdentifierTableType();
-        FEATURE_CONFIG_ELEMENT = createFeatureConfigElementType();
-        FEATURE_CONFIG_ELEMENT_TABLE = createFeatureConfigElementTableType();
-        FEATURE_CONFIG = createFeatureConfigType();
-        FEATURE_CONFIG_TABLE = createFeatureConfigTableType();
-        FEATURE_CONFIG_FILES =  createFeatureConfigFilesType();
-        FEATURE_CONFIG_FILES_TABLE = createFeatureConfigFilesTableType();
-        FEATURE = createFeatureType();
-        FEATURE_TABLE = createFeatureTableType();
-    }
-
-    private static CompositeType createFeatureIdentifierType() {
-        try {
-            String description = "This type identify a Karaf features";
-            String[] itemNames = FeaturesServiceMBean.FEATURE_IDENTIFIER;
-            OpenType[] itemTypes = new OpenType[itemNames.length];
-            String[] itemDescriptions = new String[itemNames.length];
-            itemTypes[0] = SimpleType.STRING;
-            itemTypes[1] = SimpleType.STRING;
-
-            itemDescriptions[0] = "The id of the feature";
-            itemDescriptions[1] = "The version of the feature";
-
-            return new CompositeType("FeatureIdentifier", description, itemNames,
-                    itemDescriptions, itemTypes);
-        } catch (OpenDataException e) {
-            throw new IllegalStateException("Unable to build featureIdentifier type", e);
-        }
-    }
-
-    private static TabularType createFeatureIdentifierTableType() {
-        try {
-            return new TabularType("Features", "The table of featureIdentifiers",
-                    FEATURE_IDENTIFIER, new String[] { FeaturesServiceMBean.FEATURE_NAME, FeaturesServiceMBean.FEATURE_VERSION });
-        } catch (OpenDataException e) {
-            throw new IllegalStateException("Unable to build featureIdentifier table type", e);
-        }
-    }
-
-    private static CompositeType createFeatureConfigElementType() {
-        try {
-            String description = "This type encapsulates Karaf feature config element";
-            String[] itemNames = FeaturesServiceMBean.FEATURE_CONFIG_ELEMENT;
-            OpenType[] itemTypes = new OpenType[itemNames.length];
-            String[] itemDescriptions = new String[itemNames.length];
-            itemTypes[0] = SimpleType.STRING;
-            itemTypes[1] = SimpleType.STRING;
-
-            itemDescriptions[0] = "The key";
-            itemDescriptions[1] = "The value";
-
-            return new CompositeType("ConfigElement", description, itemNames,
-                    itemDescriptions, itemTypes);
-        } catch (OpenDataException e) {
-            throw new IllegalStateException("Unable to build configElement type", e);
-        }
-    }
-
-    private static TabularType createFeatureConfigElementTableType() {
-        try {
-            return new TabularType("ConfigElement", "The table of configurations elements",
-                    FEATURE_CONFIG_ELEMENT, new String[] { FeaturesServiceMBean.FEATURE_CONFIG_ELEMENT_KEY});
-        } catch (OpenDataException e) {
-            throw new IllegalStateException("Unable to build feature table type", e);
-        }
-    }
-
-    private static CompositeType createFeatureConfigType() {
-        try {
-            String description = "This type encapsulates Karaf feature config";
-            String[] itemNames = FeaturesServiceMBean.FEATURE_CONFIG;
-            OpenType[] itemTypes = new OpenType[itemNames.length];
-            String[] itemDescriptions = new String[itemNames.length];
-            itemTypes[0] = SimpleType.STRING;
-            itemTypes[1] = FEATURE_CONFIG_ELEMENT_TABLE;
-
-            itemDescriptions[0] = "The PID of the config";
-            itemDescriptions[1] = "The configuration elements";
-
-            return new CompositeType("Config", description, itemNames,
-                    itemDescriptions, itemTypes);
-        } catch (OpenDataException e) {
-            throw new IllegalStateException("Unable to build configElement type", e);
-        }
-    }
-    
-    private static CompositeType createFeatureConfigFilesType() {
-        try {
-            String description = "This type encapsulates Karaf feature config files";
-            String[] itemNames = FeaturesServiceMBean.FEATURE_CONFIG_FILES;
-            OpenType[] itemTypes = new OpenType[itemNames.length];
-            String[] itemDescriptions = new String[itemNames.length];
-            itemTypes[0] = SimpleType.STRING;
-
-            itemDescriptions[0] = "The configuration file";
-
-            return new CompositeType("Config", description, itemNames,
-                    itemDescriptions, itemTypes);
-        } catch (OpenDataException e) {
-            throw new IllegalStateException("Unable to build configElement type", e);
-        }
-    }
-
-    private static TabularType createFeatureConfigTableType() {
-        try {
-            return new TabularType("Features", "The table of configurations",
-                    FEATURE_CONFIG, new String[] { FeaturesServiceMBean.FEATURE_CONFIG_PID});
-        } catch (OpenDataException e) {
-            throw new IllegalStateException("Unable to build feature table type", e);
-        }
-    }
-    
-    private static TabularType createFeatureConfigFilesTableType() {
-        try {
-            return new TabularType("Features", "The table of configuration files",
-            		FEATURE_CONFIG_FILES, new String[] { FeaturesServiceMBean.FEATURE_CONFIG_FILES_ELEMENTS });
-        } catch (OpenDataException e) {
-            throw new IllegalStateException("Unable to build feature table type", e);
-        }
-    }
-
-    private static CompositeType createFeatureType() {
-        try {
-            String description = "This type encapsulates Karaf features";
-            String[] itemNames = FeaturesServiceMBean.FEATURE;
-            OpenType[] itemTypes = new OpenType[itemNames.length];
-            String[] itemDescriptions = new String[itemNames.length];
-            itemTypes[0] = SimpleType.STRING;
-            itemTypes[1] = SimpleType.STRING;
-            itemTypes[2] = FEATURE_IDENTIFIER_TABLE;
-            itemTypes[3] = new ArrayType(1, SimpleType.STRING);
-            itemTypes[4] = FEATURE_CONFIG_TABLE;
-            itemTypes[5] = FEATURE_CONFIG_FILES_TABLE;
-            itemTypes[6] = SimpleType.BOOLEAN;
-
-            itemDescriptions[0] = "The name of the feature";
-            itemDescriptions[1] = "The version of the feature";
-            itemDescriptions[2] = "The feature dependencies";
-            itemDescriptions[3] = "The feature bundles";
-            itemDescriptions[4] = "The feature configurations";
-            itemDescriptions[5] = "The feature configuration files";
-            itemDescriptions[6] = "Whether the feature is installed";
-
-            return new CompositeType("Feature", description, itemNames,
-                    itemDescriptions, itemTypes);
-        } catch (OpenDataException e) {
-            throw new IllegalStateException("Unable to build feature type", e);
-        }
-    }
-
-    private static TabularType createFeatureTableType() {
-        try {
-            return new TabularType("Features", "The table of all features",
-                    FEATURE, new String[] { FeaturesServiceMBean.FEATURE_NAME, FeaturesServiceMBean.FEATURE_VERSION });
-        } catch (OpenDataException e) {
-            throw new IllegalStateException("Unable to build feature table type", e);
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/features/management/src/main/java/org/apache/karaf/features/management/codec/JmxFeatureEvent.java b/karaf-2.3.x/features/management/src/main/java/org/apache/karaf/features/management/codec/JmxFeatureEvent.java
deleted file mode 100644
index 81f446b..0000000
--- a/karaf-2.3.x/features/management/src/main/java/org/apache/karaf/features/management/codec/JmxFeatureEvent.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.management.codec;
-
-import javax.management.openmbean.CompositeData;
-import javax.management.openmbean.CompositeDataSupport;
-import javax.management.openmbean.OpenDataException;
-import javax.management.openmbean.CompositeType;
-import javax.management.openmbean.OpenType;
-import javax.management.openmbean.SimpleType;
-
-import org.apache.karaf.features.FeatureEvent;
-import org.apache.karaf.features.management.FeaturesServiceMBean;
-
-public class JmxFeatureEvent {
-
-    public static final CompositeType FEATURE_EVENT;
-
-    private final CompositeData data;
-
-    public JmxFeatureEvent(FeatureEvent event) {
-        try {
-            String[] itemNames = FeaturesServiceMBean.FEATURE_EVENT;
-            Object[] itemValues = new Object[itemNames.length];
-            itemValues[0] = event.getFeature().getName();
-            itemValues[1] = event.getFeature().getVersion();
-            switch (event.getType()) {
-                case FeatureInstalled:   itemValues[2] = FeaturesServiceMBean.FEATURE_EVENT_EVENT_TYPE_INSTALLED; break;
-                case FeatureUninstalled: itemValues[2] = FeaturesServiceMBean.FEATURE_EVENT_EVENT_TYPE_UNINSTALLED; break;
-                default: throw new IllegalStateException("Unsupported event type: " + event.getType());
-            }
-            data = new CompositeDataSupport(FEATURE_EVENT, itemNames, itemValues);
-        } catch (OpenDataException e) {
-            throw new IllegalStateException("Cannot form feature event open data", e);
-        }
-    }
-
-    public CompositeData asCompositeData() {
-        return data;
-    }
-
-    static {
-        FEATURE_EVENT = createFeatureEventType();
-    }
-
-    private static CompositeType createFeatureEventType() {
-        try {
-            String description = "This type identify a Karaf feature event";
-            String[] itemNames = FeaturesServiceMBean.FEATURE_EVENT;
-            OpenType[] itemTypes = new OpenType[itemNames.length];
-            String[] itemDescriptions = new String[itemNames.length];
-            itemTypes[0] = SimpleType.STRING;
-            itemTypes[1] = SimpleType.STRING;
-            itemTypes[2] = SimpleType.STRING;
-
-            itemDescriptions[0] = "The id of the feature";
-            itemDescriptions[1] = "The version of the feature";
-            itemDescriptions[2] = "The type of the event";
-
-            return new CompositeType("FeatureEvent", description, itemNames,
-                    itemDescriptions, itemTypes);
-        } catch (OpenDataException e) {
-            throw new IllegalStateException("Unable to build featureEvent type", e);
-        }
-    }
-}
diff --git a/karaf-2.3.x/features/management/src/main/java/org/apache/karaf/features/management/codec/JmxRepository.java b/karaf-2.3.x/features/management/src/main/java/org/apache/karaf/features/management/codec/JmxRepository.java
deleted file mode 100644
index f535b2b..0000000
--- a/karaf-2.3.x/features/management/src/main/java/org/apache/karaf/features/management/codec/JmxRepository.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.management.codec;
-
-import java.util.Collection;
-import java.util.Arrays;
-import java.net.URI;
-
-import javax.management.openmbean.TabularData;
-import javax.management.openmbean.CompositeType;
-import javax.management.openmbean.TabularType;
-import javax.management.openmbean.OpenType;
-import javax.management.openmbean.SimpleType;
-import javax.management.openmbean.OpenDataException;
-import javax.management.openmbean.ArrayType;
-import javax.management.openmbean.CompositeData;
-import javax.management.openmbean.TabularDataSupport;
-import javax.management.openmbean.CompositeDataSupport;
-
-import org.apache.karaf.features.Repository;
-import org.apache.karaf.features.management.FeaturesServiceMBean;
-
-public class JmxRepository {
-
-    public final static CompositeType REPOSITORY;
-
-    public final static TabularType REPOSITORY_TABLE;
-
-    private final CompositeData data;
-
-    public JmxRepository(Repository repository) {
-        try {
-            String[] itemNames = FeaturesServiceMBean.REPOSITORY;
-            Object[] itemValues = new Object[itemNames.length];
-            itemValues[0] = repository.getName();
-            itemValues[1] = repository.getURI().toString();
-            itemValues[2] = toStringArray(repository.getRepositories());
-            itemValues[3] = JmxFeature.getFeatureIdentifierTable(Arrays.asList(repository.getFeatures()));
-            data = new CompositeDataSupport(REPOSITORY, itemNames, itemValues);
-        } catch (Exception e) {
-            throw new IllegalStateException("Cannot form repository open data", e);
-        }
-    }
-
-    public CompositeData asCompositeData() {
-        return data;
-    }
-
-    public static TabularData tableFrom(Collection<JmxRepository> repositories) {
-        TabularDataSupport table = new TabularDataSupport(REPOSITORY_TABLE);
-        for (JmxRepository repository : repositories) {
-            table.put(repository.asCompositeData());
-        }
-        return table;
-    }
-
-    private static String[] toStringArray(URI[] uris) {
-        if (uris == null) {
-            return null;
-        }
-        String[] res = new String[uris.length];
-        for (int i = 0; i < res.length; i++) {
-            res[i] = uris[i].toString();
-        }
-        return res;
-    }
-
-    static {
-        REPOSITORY = createRepositoryType();
-        REPOSITORY_TABLE = createRepositoryTableType();
-    }
-
-    private static CompositeType createRepositoryType() {
-        try {
-            String description = "This type identify a Karaf repository";
-            String[] itemNames = FeaturesServiceMBean.REPOSITORY;
-            OpenType[] itemTypes = new OpenType[itemNames.length];
-            String[] itemDescriptions = new String[itemNames.length];
-            itemTypes[0] = SimpleType.STRING;
-            itemTypes[1] = SimpleType.STRING;
-            itemTypes[2] = new ArrayType(1, SimpleType.STRING);
-            itemTypes[3] = JmxFeature.FEATURE_IDENTIFIER_TABLE;
-
-            itemDescriptions[0] = "The name of the repository";
-            itemDescriptions[1] = "The uri of the repository";
-            itemDescriptions[2] = "The dependent repositories";
-            itemDescriptions[3] = "The list of included features";
-
-            return new CompositeType("Repository", description, itemNames,
-                    itemDescriptions, itemTypes);
-        } catch (OpenDataException e) {
-            throw new IllegalStateException("Unable to build repository type", e);
-        }
-    }
-
-    private static TabularType createRepositoryTableType() {
-        try {
-            return new TabularType("Features", "The table of repositories",
-                    REPOSITORY, new String[] { FeaturesServiceMBean.REPOSITORY_URI });
-        } catch (OpenDataException e) {
-            throw new IllegalStateException("Unable to build repository table type", e);
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/features/management/src/main/java/org/apache/karaf/features/management/codec/JmxRepositoryEvent.java b/karaf-2.3.x/features/management/src/main/java/org/apache/karaf/features/management/codec/JmxRepositoryEvent.java
deleted file mode 100644
index bf7910a..0000000
--- a/karaf-2.3.x/features/management/src/main/java/org/apache/karaf/features/management/codec/JmxRepositoryEvent.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.management.codec;
-
-import javax.management.openmbean.CompositeData;
-import javax.management.openmbean.CompositeType;
-import javax.management.openmbean.CompositeDataSupport;
-import javax.management.openmbean.OpenDataException;
-import javax.management.openmbean.OpenType;
-import javax.management.openmbean.SimpleType;
-
-import org.apache.karaf.features.RepositoryEvent;
-import org.apache.karaf.features.management.FeaturesServiceMBean;
-
-public class JmxRepositoryEvent {
-
-    public static final CompositeType REPOSITORY_EVENT;
-
-    private final CompositeData data;
-
-    public JmxRepositoryEvent(RepositoryEvent event) {
-        try {
-            String[] itemNames = FeaturesServiceMBean.REPOSITORY_EVENT;
-            Object[] itemValues = new Object[itemNames.length];
-            itemValues[0] = event.getRepository().getName();
-            itemValues[1] = event.getRepository().getURI().toString();
-            switch (event.getType()) {
-                case RepositoryAdded:   itemValues[2] = FeaturesServiceMBean.REPOSITORY_EVENT_EVENT_TYPE_ADDED; break;
-                case RepositoryRemoved: itemValues[2] = FeaturesServiceMBean.REPOSITORY_EVENT_EVENT_TYPE_REMOVED; break;
-                default: throw new IllegalStateException("Unsupported event type: " + event.getType());
-            }
-            data = new CompositeDataSupport(REPOSITORY_EVENT, itemNames, itemValues);
-        } catch (OpenDataException e) {
-            throw new IllegalStateException("Cannot form repository event open data", e);
-        }
-    }
-
-    public CompositeData asCompositeData() {
-        return data;
-    }
-
-    static {
-        REPOSITORY_EVENT = createRepositoryEventType();
-    }
-
-    private static CompositeType createRepositoryEventType() {
-        try {
-            String description = "This type identify a Karaf repository event";
-            String[] itemNames = FeaturesServiceMBean.REPOSITORY_EVENT;
-            OpenType[] itemTypes = new OpenType[itemNames.length];
-            String[] itemDescriptions = new String[itemNames.length];
-            itemTypes[0] = SimpleType.STRING;
-            itemTypes[1] = SimpleType.STRING;
-            itemTypes[2] = SimpleType.STRING;
-
-            itemDescriptions[0] = "The name of the repository";
-            itemDescriptions[1] = "The uri of the repository";
-            itemDescriptions[2] = "The type of event";
-
-            return new CompositeType("RepositoryEvent", description, itemNames,
-                    itemDescriptions, itemTypes);
-        } catch (OpenDataException e) {
-            throw new IllegalStateException("Unable to build repositoryEvent type", e);
-        }
-    }
-}
diff --git a/karaf-2.3.x/features/management/src/main/java/org/apache/karaf/features/management/internal/FeaturesServiceMBeanImpl.java b/karaf-2.3.x/features/management/src/main/java/org/apache/karaf/features/management/internal/FeaturesServiceMBeanImpl.java
deleted file mode 100644
index 14f5e15..0000000
--- a/karaf-2.3.x/features/management/src/main/java/org/apache/karaf/features/management/internal/FeaturesServiceMBeanImpl.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Licensed 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.
- */
-package org.apache.karaf.features.management.internal;
-
-import java.net.URI;
-import java.util.*;
-import javax.management.MBeanNotificationInfo;
-import javax.management.MBeanRegistration;
-import javax.management.MBeanServer;
-import javax.management.NotCompliantMBeanException;
-import javax.management.Notification;
-import javax.management.ObjectName;
-import javax.management.openmbean.TabularData;
-
-import org.apache.karaf.features.Feature;
-import org.apache.karaf.features.FeatureEvent;
-import org.apache.karaf.features.FeaturesListener;
-import org.apache.karaf.features.FeaturesService;
-import org.apache.karaf.features.Repository;
-import org.apache.karaf.features.RepositoryEvent;
-import org.apache.karaf.features.management.FeaturesServiceMBean;
-import org.apache.karaf.features.management.codec.JmxFeature;
-import org.apache.karaf.features.management.codec.JmxFeatureEvent;
-import org.apache.karaf.features.management.codec.JmxRepository;
-import org.apache.karaf.features.management.codec.JmxRepositoryEvent;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceRegistration;
-
-/**
- * Implementation of {@link FeaturesServiceMBean}.
- */
-public class FeaturesServiceMBeanImpl extends StandardEmitterMBean implements
-    MBeanRegistration, FeaturesServiceMBean {
-
-    private ServiceRegistration registration;
-
-    private BundleContext bundleContext;
-
-	private ObjectName objectName;
-
-	private volatile long sequenceNumber = 0;
-
-	private MBeanServer server;
-
-    private FeaturesService featuresService;
-
-    public FeaturesServiceMBeanImpl() throws NotCompliantMBeanException {
-        super(FeaturesServiceMBean.class);
-    }
-
-    public ObjectName preRegister(MBeanServer server, ObjectName name) throws Exception {
-        objectName = name;
-        this.server = server;
-        return name;
-    }
-
-    public void postRegister(Boolean registrationDone) {
-        registerService();
-    }
-
-    public void preDeregister() {
-        unregisterService();
-    }
-
-    public void postDeregister() {
-    }
-
-    public void registerService() {
-        unregisterService();
-        registration = bundleContext.registerService(FeaturesListener.class.getName(),
-                getFeaturesListener(), new Hashtable());
-    }
-
-    public void unregisterService() {
-        if (registration != null) {
-            try {
-                registration.unregister();
-            } finally {
-                registration = null;
-            }
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public TabularData getFeatures() throws Exception {
-        try {
-            List<Feature> allFeatures = Arrays.asList(featuresService.listFeatures());
-            List<Feature> insFeatures = Arrays.asList(featuresService.listInstalledFeatures());
-            ArrayList<JmxFeature> features = new ArrayList<JmxFeature>();
-            for (Feature feature : allFeatures) {
-                try {
-                    features.add(new JmxFeature(feature, insFeatures.contains(feature)));
-                } catch (Throwable t) {
-                    t.printStackTrace();
-                }
-            }
-            TabularData table = JmxFeature.tableFrom(features);
-            return table;
-        } catch (Throwable t) {
-            t.printStackTrace();
-            return null;
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public TabularData getRepositories() throws Exception {
-        try {
-            List<Repository> allRepositories = Arrays.asList(featuresService.listRepositories());
-            ArrayList<JmxRepository> repositories = new ArrayList<JmxRepository>();
-            for (Repository repository : allRepositories) {
-                repositories.add(new JmxRepository(repository));
-            }
-            TabularData table = JmxRepository.tableFrom(repositories);
-            return table;
-        } catch (Throwable t) {
-            t.printStackTrace();
-            return null;
-        }
-    }
-
-    public void addRepository(String uri) throws Exception {
-        featuresService.addRepository(new URI(uri));
-    }
-
-    public void addRepository(String uri, boolean install) throws Exception {
-        featuresService.addRepository(new URI(uri), install);
-    }
-
-    public void removeRepository(String uri) throws Exception {
-        featuresService.removeRepository(new URI(uri));
-    }
-
-    public void removeRepository(String uri, boolean uninstall) throws Exception {
-        featuresService.removeRepository(new URI(uri), uninstall);
-    }
-
-    public void installFeature(String name) throws Exception {
-        featuresService.installFeature(name);
-    }
-
-    public void installFeature(String name, boolean noClean, boolean noRefresh) throws Exception {
-        EnumSet<FeaturesService.Option> options = EnumSet.noneOf(FeaturesService.Option.class);
-        if (noClean) {
-            options.add(FeaturesService.Option.NoCleanIfFailure);
-        }
-        if (noRefresh) {
-            options.add(FeaturesService.Option.NoAutoRefreshBundles);
-        }
-        featuresService.installFeature(name, options);
-    }
-
-    public void installFeature(String name, String version) throws Exception {
-        featuresService.installFeature(name, version);
-    }
-
-    public void installFeature(String name, String version, boolean noClean, boolean noRefresh) throws Exception {
-        EnumSet<FeaturesService.Option> options = EnumSet.noneOf(FeaturesService.Option.class);
-        if (noClean) {
-            options.add(FeaturesService.Option.NoCleanIfFailure);
-        }
-        if (noRefresh) {
-            options.add(FeaturesService.Option.NoAutoRefreshBundles);
-        }
-        featuresService.installFeature(name, version, options);
-    }
-
-    public void uninstallFeature(String name) throws Exception {
-        featuresService.uninstallFeature(name);
-    }
-
-    public void uninstallFeature(String name, String version) throws Exception {
-        featuresService.uninstallFeature(name, version);
-    }
-
-    public void setBundleContext(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-
-    public void setFeaturesService(FeaturesService featuresService) {
-        this.featuresService = featuresService;
-    }
-
-    public FeaturesListener getFeaturesListener() {
-        return new FeaturesListener() {
-            public void featureEvent(FeatureEvent event) {
-                if (!event.isReplay()) {
-                    Notification notification = new Notification(FEATURE_EVENT_TYPE, objectName, sequenceNumber++);
-                    notification.setUserData(new JmxFeatureEvent(event).asCompositeData());
-                    sendNotification(notification);
-                }
-            }
-            public void repositoryEvent(RepositoryEvent event) {
-                if (!event.isReplay()) {
-                    Notification notification = new Notification(REPOSITORY_EVENT_TYPE, objectName, sequenceNumber++);
-                    notification.setUserData(new JmxRepositoryEvent(event).asCompositeData());
-                    sendNotification(notification);
-                }
-            }
-            
-            public boolean equals(Object o) {
-            	if (this == o) {
-            		return true;
-            	}
-            	return o.equals(this);
-              }
-
-        };
-    }
-
-    public MBeanNotificationInfo[] getNotificationInfo() {
-        return getBroadcastInfo();
-    }
-
-    private static MBeanNotificationInfo[] getBroadcastInfo() {
-        String type = Notification.class.getCanonicalName();
-        MBeanNotificationInfo info1 = new MBeanNotificationInfo(new String[] {FEATURE_EVENT_EVENT_TYPE},
-            type, "Some features notification");
-        MBeanNotificationInfo info2 = new MBeanNotificationInfo(new String[] {REPOSITORY_EVENT_EVENT_TYPE},
-            type, "Some repository notification");
-        return new MBeanNotificationInfo[] {info1, info2};
-    }
-
-}
diff --git a/karaf-2.3.x/features/management/src/main/java/org/apache/karaf/features/management/internal/StandardEmitterMBean.java b/karaf-2.3.x/features/management/src/main/java/org/apache/karaf/features/management/internal/StandardEmitterMBean.java
deleted file mode 100644
index 58f587c..0000000
--- a/karaf-2.3.x/features/management/src/main/java/org/apache/karaf/features/management/internal/StandardEmitterMBean.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed 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.
- */
-package org.apache.karaf.features.management.internal;
-
-import javax.management.*;
-
-public class StandardEmitterMBean extends StandardMBean implements NotificationEmitter {
-
-    private final NotificationBroadcasterSupport emitter;
-
-    public StandardEmitterMBean(Class mbeanInterface) throws NotCompliantMBeanException {
-        super(mbeanInterface);
-        this.emitter = new NotificationBroadcasterSupport() {
-            @Override
-            public MBeanNotificationInfo[] getNotificationInfo() {
-                return StandardEmitterMBean.this.getNotificationInfo();
-            }
-        };
-    }
-
-    public void sendNotification(Notification notification) {
-        emitter.sendNotification(notification);
-    }
-
-
-    public void removeNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) throws ListenerNotFoundException {
-        emitter.removeNotificationListener(listener, filter, handback);
-    }
-
-    public void addNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) throws IllegalArgumentException {
-        emitter.addNotificationListener(listener, filter, handback);
-    }
-
-    public void removeNotificationListener(NotificationListener listener) throws ListenerNotFoundException {
-        emitter.removeNotificationListener(listener);
-    }
-
-    public MBeanNotificationInfo[] getNotificationInfo() {
-        return new MBeanNotificationInfo[0];
-    }
-
-    @Override
-    public MBeanInfo getMBeanInfo() {
-        MBeanInfo mbeanInfo = super.getMBeanInfo();
-        if (mbeanInfo != null) {
-            MBeanNotificationInfo[] notificationInfo = getNotificationInfo();
-            mbeanInfo = new MBeanInfo(mbeanInfo.getClassName(), mbeanInfo.getDescription(), mbeanInfo.getAttributes(),
-                    mbeanInfo.getConstructors(), mbeanInfo.getOperations(), notificationInfo);
-        }
-        return mbeanInfo;
-    }
-
-}
diff --git a/karaf-2.3.x/features/management/src/main/resources/OSGI-INF/blueprint/features-management.xml b/karaf-2.3.x/features/management/src/main/resources/OSGI-INF/blueprint/features-management.xml
deleted file mode 100644
index 5f47e06..0000000
--- a/karaf-2.3.x/features/management/src/main/resources/OSGI-INF/blueprint/features-management.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="eager">
-
-    <reference id="featuresService" interface="org.apache.karaf.features.FeaturesService" />
-
-    <reference id="mbeanServer" interface="javax.management.MBeanServer">
-        <reference-listener ref="mbeanRegister" bind-method="registerMBeanServer" unbind-method="unregisterMBeanServer" />
-    </reference>
-
-    <bean id="mbeanImpl" class="org.apache.karaf.features.management.internal.FeaturesServiceMBeanImpl" destroy-method="unregisterService">
-        <property name="bundleContext" ref="blueprintBundleContext" />
-        <property name="featuresService" ref="featuresService" />
-    </bean>
-
-    <bean id="mbeanRegister" class="org.apache.karaf.management.MBeanRegistrer" init-method="init"  destroy-method="destroy">
-        <property name="mbeans">
-            <map>
-                <entry value="org.apache.karaf:type=features,name=${karaf.name}"
-                    key-ref="mbeanImpl" />
-            </map>
-        </property>
-    </bean>
-
-</blueprint>
diff --git a/karaf-2.3.x/features/management/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/features/management/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 13fed77..0000000
--- a/karaf-2.3.x/features/management/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,23 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides MBean to manipulate Karaf features via JMX.
-
-    In particular it provides the FeaturesServiceMBean supporting the following operations:
-    \u001B[36mgetFeatures()\u001B[0m Gets the list of features with the current status (installed or uninstalled).
-    \u001B[36mgetRepositories()\u001B[0m Gets the list of features repositories.
-    \u001B[36maddRepository(url)\u001B[0m Adds a new repository URL in the repositories set.
-    \u001B[36mremoveRepository(url)\u001B[0m Removes a repository URL from the repositories set.
-    \u001B[36minstallFeature(name)\u001B[0m Installs a feature identified by name.
-    \u001B[36minstallFeature(name, version)\u001B[0m Installs a feature identified by name and version.
-    \u001B[36muninstallFeature(name)\u001B[0m Uninstalls a feature identified by name.
-    \u001B[36muninstallFeature(name, version)\u001B[0m Uninstalls a feature identified by name and version.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mProvisioning\u001B[0m and \u001B[Remote Management via JMX\u001B[0m sections of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/features/management/src/test/java/org/apache/karaf/features/management/internal/FeaturesServiceMBeanImplTest.java b/karaf-2.3.x/features/management/src/test/java/org/apache/karaf/features/management/internal/FeaturesServiceMBeanImplTest.java
deleted file mode 100644
index 0a8a00e..0000000
--- a/karaf-2.3.x/features/management/src/test/java/org/apache/karaf/features/management/internal/FeaturesServiceMBeanImplTest.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed 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.
- */
-package org.apache.karaf.features.management.internal;
-
-import org.junit.Test;
-
-public class FeaturesServiceMBeanImplTest {
-
-    @Test
-    public void testInstantiation() throws Exception {
-        new FeaturesServiceMBeanImpl();
-    }
-}
diff --git a/karaf-2.3.x/features/obr/NOTICE b/karaf-2.3.x/features/obr/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/features/obr/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/features/obr/pom.xml b/karaf-2.3.x/features/obr/pom.xml
deleted file mode 100644
index 60585a7..0000000
--- a/karaf-2.3.x/features/obr/pom.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.features</groupId>
-        <artifactId>features</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.features.obr</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Features :: OBR Resolver</name>
-    <description>This bundle provide OBR (OSGi Bundle Repository) support for Karaf features.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.features</groupId>
-            <artifactId>org.apache.karaf.features.core</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.utils</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.bundlerepository</artifactId>
-        </dependency>
-
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            *
-                        </Import-Package>
-                        <Private-Package>org.apache.karaf.features.obr.internal</Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/features/obr/src/main/java/org/apache/karaf/features/obr/internal/BundleInfoImpl.java b/karaf-2.3.x/features/obr/src/main/java/org/apache/karaf/features/obr/internal/BundleInfoImpl.java
deleted file mode 100644
index ac48da8..0000000
--- a/karaf-2.3.x/features/obr/src/main/java/org/apache/karaf/features/obr/internal/BundleInfoImpl.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.obr.internal;
-
-import org.apache.karaf.features.BundleInfo;
-
-/**
- * A holder of bundle info
- */
-public class BundleInfoImpl implements BundleInfo {
-
-    private int startLevel;
-    private String location;
-    private boolean start;
-    private boolean dependency;
-
-
-    public BundleInfoImpl() {
-    }
-
-    public BundleInfoImpl(String location) {
-    	this.location = location;
-    }
-
-
-    public BundleInfoImpl(String location, boolean start) {
-    	this.location = location;
-        this.start = start;
-    }
-
-    public BundleInfoImpl(String location, int startLevel) {
-    	this.location = location;
-        this.startLevel = startLevel;
-    }
-
-    public BundleInfoImpl(String location, int startLevel, boolean start) {
-    	this.location = location;
-        this.startLevel = startLevel;
-        this.start = start;
-    }
-
-    public BundleInfoImpl(String location, int startLevel, boolean start, boolean dependency) {
-        this.location = location;
-        this.startLevel = startLevel;
-        this.start = start;
-        this.dependency = dependency;
-    }
-
-    public void setStartLevel(Integer startLevel) {
-    	this.startLevel = startLevel;
-    }
-
-    public int getStartLevel() {
-		return this.startLevel;
-	}
-
-	public void setName(String location) {
-		this.location = location;
-	}
-
-	public String getLocation() {
-		return this.location;
-	}
-
-	public void setStart(boolean start) {
-		this.start = start;
-	}
-
-	public boolean isStart() {
-		return start;
-	}
-
-    public void setDependency(boolean dependency) {
-        this.dependency = dependency;
-    }
-
-    public boolean isDependency() {
-        return dependency;
-    }
-
-}
diff --git a/karaf-2.3.x/features/obr/src/main/java/org/apache/karaf/features/obr/internal/ObrResolver.java b/karaf-2.3.x/features/obr/src/main/java/org/apache/karaf/features/obr/internal/ObrResolver.java
deleted file mode 100644
index 2fd1eeb..0000000
--- a/karaf-2.3.x/features/obr/src/main/java/org/apache/karaf/features/obr/internal/ObrResolver.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.obr.internal;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.felix.bundlerepository.Reason;
-import org.apache.felix.bundlerepository.Repository;
-import org.apache.felix.bundlerepository.RepositoryAdmin;
-import org.apache.felix.bundlerepository.Requirement;
-import org.apache.felix.bundlerepository.Resource;
-import org.apache.karaf.features.BundleInfo;
-import org.apache.karaf.features.Feature;
-import org.apache.karaf.features.Resolver;
-
-public class ObrResolver implements Resolver {
-
-    private RepositoryAdmin repositoryAdmin;
-    private boolean resolveOptionalImports;
-    private boolean startByDefault;
-    private int startLevel;
-
-    public RepositoryAdmin getRepositoryAdmin() {
-        return repositoryAdmin;
-    }
-
-    public void setRepositoryAdmin(RepositoryAdmin repositoryAdmin) {
-        this.repositoryAdmin = repositoryAdmin;
-    }
-
-    public boolean isResolveOptionalImports() {
-        return resolveOptionalImports;
-    }
-
-    /**
-     * When set to <code>true</code>, the OBR resolver will try to resolve optional imports as well.
-     * Defaults to <code>false</code>
-     *
-     * @param resolveOptionalImports
-     */
-    public void setResolveOptionalImports(boolean resolveOptionalImports) {
-        this.resolveOptionalImports = resolveOptionalImports;
-    }
-
-    public void setStartByDefault(boolean startByDefault) {
-        this.startByDefault = startByDefault;
-    }
-
-    public void setStartLevel(int startLevel) {
-        this.startLevel = startLevel;
-    }
-
-    public List<BundleInfo> resolve(Feature feature) throws Exception {
-        List<Requirement> reqs = new ArrayList<Requirement>();
-        List<Resource> ress = new ArrayList<Resource>();
-        List<Resource> featureDeploy = new ArrayList<Resource>();
-        Map<Object, BundleInfo> infos = new HashMap<Object, BundleInfo>();
-        for (BundleInfo bundleInfo : feature.getBundles()) {
-        	URL url = null;
-            try {
-                url = new URL(bundleInfo.getLocation());
-            } catch (MalformedURLException e) {
-                Requirement req = parseRequirement(bundleInfo.getLocation());
-                reqs.add(req);
-                infos.put(req, bundleInfo);
-            }
-            if (url != null) {
-            	Resource res = repositoryAdmin.getHelper().createResource(url);
-            	ress.add(res);
-            	infos.put(res, bundleInfo);
-            }
-        }
-
-        Repository repository = repositoryAdmin.getHelper().repository(ress.toArray(new Resource[ress.size()]));
-        List<Repository> repos = new ArrayList<Repository>();
-        repos.add(repositoryAdmin.getSystemRepository());
-        repos.add(repositoryAdmin.getLocalRepository());
-        repos.add(repository);
-        repos.addAll(Arrays.asList(repositoryAdmin.listRepositories()));
-        org.apache.felix.bundlerepository.Resolver resolver = repositoryAdmin.resolver(repos.toArray(new Repository[repos.size()]));
-
-        for (Resource res : ress) {
-            if (!infos.get(res).isDependency()) {
-                resolver.add(res);
-            }
-        }
-        for (Requirement req : reqs) {
-            resolver.add(req);
-        }
-
-        if (!doResolve(resolver)) {
-            StringWriter w = new StringWriter();
-            PrintWriter out = new PrintWriter(w);
-            Reason[] failedReqs = resolver.getUnsatisfiedRequirements();
-            if ((failedReqs != null) && (failedReqs.length > 0)) {
-                out.println("Unsatisfied requirement(s):");
-                printUnderline(out, 27);
-                for (Reason r : failedReqs) {
-                    out.println("   " + r.getRequirement().getName() + ":" + r.getRequirement().getFilter());
-                    out.println("      " + r.getResource().getPresentationName());
-                }
-            } else {
-                out.println("Could not resolve targets.");
-            }
-            out.flush();
-            throw new Exception("Can not resolve feature:\n" + w.toString());
-        }
-
-        List<BundleInfo> bundles = new ArrayList<BundleInfo>();
-        List<Resource> deploy = new ArrayList<Resource>();
-        Collections.addAll(deploy, resolver.getRequiredResources());
-        if (resolveOptionalImports) {
-            Collections.addAll(deploy, resolver.getOptionalResources());
-        }
-        Collections.addAll(deploy, resolver.getAddedResources());
-        deploy.addAll(featureDeploy);
-        for (Resource res : deploy) {
-            BundleInfo info = infos.get(res);
-            if (info == null) {
-                Reason[] reasons = resolver.getReason(res);
-                if (reasons != null) {
-                    for (Reason r : reasons) {
-                        info = infos.get(r);
-                        if (info != null) {
-                            break;
-                        }
-                    }
-                }
-            }
-            if (info == null) {
-                info = new BundleInfoImpl(res.getURI(), this.startLevel, this.startByDefault, false);
-            }
-            bundles.add(info);
-        }
-        return bundles;
-    }
-
-    private boolean doResolve(org.apache.felix.bundlerepository.Resolver resolver) {
-        if (resolveOptionalImports) {
-            return resolver.resolve();
-        } else {
-            return resolver.resolve(org.apache.felix.bundlerepository.Resolver.NO_OPTIONAL_RESOURCES);
-        }
-    }
-
-    protected void printUnderline(PrintWriter out, int length) {
-        for (int i = 0; i < length; i++) {
-            out.print('-');
-        }
-        out.println("");
-    }
-
-    protected Requirement parseRequirement(String req) {
-        int p = req.indexOf(':');
-        String name;
-        String filter;
-        if (p > 0) {
-            name = req.substring(0, p);
-            filter = req.substring(p + 1);
-        } else {
-            if (req.contains("package")) {
-                name = "package";
-            } else if (req.contains("service")) {
-                name = "service";
-            } else {
-                name = "bundle";
-            }
-            filter = req;
-        }
-        if (!filter.startsWith("(")) {
-            filter = "(" + filter + ")";
-        }
-        return repositoryAdmin.getHelper().requirement(name, filter);
-    }
-}
diff --git a/karaf-2.3.x/features/obr/src/main/resources/OSGI-INF/blueprint/features-obr.xml b/karaf-2.3.x/features/obr/src/main/resources/OSGI-INF/blueprint/features-obr.xml
deleted file mode 100644
index e03caf2..0000000
--- a/karaf-2.3.x/features/obr/src/main/resources/OSGI-INF/blueprint/features-obr.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"
-           default-activation="lazy">
-
-    <ext:property-placeholder placeholder-prefix="$(" placeholder-suffix=")"/>
-
-    <ext:property-placeholder placeholder-prefix="$[" placeholder-suffix="]" ignore-missing-locations="true">
-        <ext:default-properties>
-            <ext:property name="resolveOptionalImports" value="false"/>
-            <ext:property name="startByDefault" value="true"/>
-            <ext:property name="startLevel" value="80"/>
-        </ext:default-properties>
-        <ext:location>file:$(karaf.base)/etc/org.apache.karaf.features.obr.cfg</ext:location>
-    </ext:property-placeholder>
-
-    <bean id="obrResolver" class="org.apache.karaf.features.obr.internal.ObrResolver">
-        <property name="repositoryAdmin" ref="repositoryAdmin" />
-        <property name="resolveOptionalImports" value="$[resolveOptionalImports]" />
-        <property name="startByDefault" value="$[startByDefault]" />
-        <property name="startLevel" value="$[startLevel]" />
-    </bean>
-
-    <reference id="repositoryAdmin" interface="org.apache.felix.bundlerepository.RepositoryAdmin" />
-
-    <service ref="obrResolver" interface="org.apache.karaf.features.Resolver">
-        <service-properties>
-            <entry key="name" value="obr" />
-        </service-properties>
-    </service>
-
-</blueprint>
diff --git a/karaf-2.3.x/features/obr/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/features/obr/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 0a73a45..0000000
--- a/karaf-2.3.x/features/obr/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,15 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides the OBR (OSGi Bundle Repository) support for Karaf features.
-
-    It allows you to use an OBR resolver for bundle.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mProvisioning\u001B[0m section of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java b/karaf-2.3.x/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java
deleted file mode 100644
index 31c9956..0000000
--- a/karaf-2.3.x/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.features.obr.internal;
-
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.List;
-
-import org.apache.felix.bundlerepository.Reason;
-import org.apache.felix.bundlerepository.RepositoryAdmin;
-import org.apache.felix.bundlerepository.Requirement;
-import org.apache.felix.bundlerepository.Resolver;
-import org.apache.felix.bundlerepository.Resource;
-import org.apache.felix.bundlerepository.impl.DataModelHelperImpl;
-import org.apache.felix.bundlerepository.impl.ReasonImpl;
-import org.apache.karaf.features.BundleInfo;
-import org.apache.karaf.features.internal.FeatureImpl;
-import org.easymock.Capture;
-import org.easymock.EasyMock;
-import org.easymock.IAnswer;
-import org.junit.Test;
-
-public class ObrResolverTest {
-
-    @Test
-    public void testResolver() throws Exception {
-        final String requirement = "bundle:(&(symbolicname=org.apache.camel.camel-blueprint)(version>=2.4.0)(version<2.4.1))";
-
-        final FeatureImpl f = new FeatureImpl("f1", "1.0");
-        f.setResolver("obr");
-        f.addBundle(new BundleInfoImpl(requirement));
-        final RepositoryAdmin admin = createMock(RepositoryAdmin.class);
-        final Resolver resolver = createMock(Resolver.class);
-        final Resource resource = createMock(Resource.class);
-        final ObrResolver obrResolver = new ObrResolver();
-        obrResolver.setRepositoryAdmin(admin);
-
-        final Capture<Requirement> captureReq = new Capture<Requirement>();
-
-        expect(admin.getHelper()).andReturn(new DataModelHelperImpl()).anyTimes();
-        expect(admin.getSystemRepository()).andReturn(createMock(org.apache.felix.bundlerepository.Repository.class));
-        expect(admin.getLocalRepository()).andReturn(createMock(org.apache.felix.bundlerepository.Repository.class));
-        expect(admin.listRepositories()).andReturn(new org.apache.felix.bundlerepository.Repository[0]);
-        expect(admin.resolver(EasyMock.<org.apache.felix.bundlerepository.Repository[]>anyObject())).andReturn(resolver);
-        resolver.add(EasyMock.capture(captureReq));
-        expect(resolver.resolve(Resolver.NO_OPTIONAL_RESOURCES)).andReturn(true);
-        expect(resolver.getAddedResources()).andReturn(new Resource[] { });
-        expect(resolver.getRequiredResources()).andReturn(new Resource[] { resource });
-        expect(resolver.getReason(resource)).andAnswer(new IAnswer<Reason[]>() {
-            public Reason[] answer() throws Throwable {
-                return new Reason[] { new ReasonImpl( resource, captureReq.getValue()) };
-            }
-        });
-        expect(resource.getURI()).andReturn("foo:bar");
-        replay(admin, resolver, resource);
-
-        List<BundleInfo> bundles = obrResolver.resolve(f);
-        assertNotNull(bundles);
-        assertEquals(1, bundles.size());
-        assertEquals("foo:bar", bundles.get(0).getLocation());
-        assertEquals(obrResolver.parseRequirement(requirement).toString(), captureReq.getValue().toString());
-        verify(admin, resolver, resource);
-    }
-
-    @Test
-    public void testResolverWithOptionalImports() throws Exception {
-        final String requirement = "bundle:(&(symbolicname=org.apache.camel.camel-blueprint)(version>=2.4.0)(version<2.4.1))";
-
-        final FeatureImpl f = new FeatureImpl("f1", "1.0");
-        f.setResolver("obr");
-        f.getBundles().add(new BundleInfoImpl(requirement));
-        final RepositoryAdmin admin = createMock(RepositoryAdmin.class);
-        final Resolver resolver = createMock(Resolver.class);
-        final Resource resource = createMock(Resource.class);
-        final Resource optionalResource = createMock(Resource.class);
-        final ObrResolver obrResolver = new ObrResolver();
-        obrResolver.setRepositoryAdmin(admin);
-        obrResolver.setResolveOptionalImports(true);
-
-        final Capture<Requirement> captureReq = new Capture<Requirement>();
-
-        expect(admin.getHelper()).andReturn(new DataModelHelperImpl()).anyTimes();
-        expect(admin.getSystemRepository()).andReturn(createMock(org.apache.felix.bundlerepository.Repository.class));
-        expect(admin.getLocalRepository()).andReturn(createMock(org.apache.felix.bundlerepository.Repository.class));
-        expect(admin.listRepositories()).andReturn(new org.apache.felix.bundlerepository.Repository[0]);
-        expect(admin.resolver(EasyMock.<org.apache.felix.bundlerepository.Repository[]>anyObject())).andReturn(resolver);
-        resolver.add(EasyMock.capture(captureReq));
-        expect(resolver.resolve()).andReturn(true);
-        expect(resolver.getAddedResources()).andReturn(new Resource[] { });
-        expect(resolver.getRequiredResources()).andReturn(new Resource[] { resource });
-        expect(resolver.getOptionalResources()).andReturn(new Resource[] { optionalResource});
-        expect(resolver.getReason(resource)).andAnswer(new IAnswer<Reason[]>() {
-            public Reason[] answer() throws Throwable {
-                return new Reason[] { new ReasonImpl( resource, captureReq.getValue()) };
-            }
-        });
-        expect(resolver.getReason(optionalResource)).andAnswer(new IAnswer<Reason[]>() {
-            public Reason[] answer() throws Throwable {
-                return new Reason[] { new ReasonImpl( optionalResource, captureReq.getValue()) };
-            }
-        });
-        expect(resource.getURI()).andReturn("foo:bar");
-        expect(optionalResource.getURI()).andReturn("foo:optional:baz");
-        replay(admin, resolver, resource, optionalResource);
-
-        List<BundleInfo> bundles = obrResolver.resolve(f);
-        assertNotNull(bundles);
-        assertEquals(2, bundles.size());
-        assertEquals("foo:bar", bundles.get(0).getLocation());
-        assertEquals("foo:optional:baz", bundles.get(1).getLocation());
-        assertEquals(obrResolver.parseRequirement(requirement).toString(), captureReq.getValue().toString());
-        verify(admin, resolver, resource);
-    }
-    
-    /**
-     * Test resolving a mvn url when pax url is configured with a repo that contains no protocol like: "test"
-     * We expect to get a MalFormedUrlException not a IllegalArgumentException as in the issue 
-     * @throws Exception
-     */
-    @Test(expected=MalformedURLException.class)
-    public void testResolverWithInvalidMvnRepoIssueKaraf667() throws Exception {
-        final FeatureImpl f = new FeatureImpl("f1", "1.0");
-        f.setResolver("obr");
-        // Using file instead of mvn: as we do not want to mess with URL handlers
-        f.addBundle(new BundleInfoImpl("file:org.foo/foo/1.0"));
-
-        final RepositoryAdmin admin = createMock(RepositoryAdmin.class);
-        final Resolver resolver = createMock(Resolver.class);
-        final Resource resource = createMock(Resource.class);
-        final ObrResolver obrResolver = new ObrResolver();
-        obrResolver.setRepositoryAdmin(admin);
-
-        expect(admin.getHelper()).andReturn(new DummyDataModelHelper()).anyTimes();
-        replay(admin, resolver, resource);
-
-       	obrResolver.resolve(f);
-    }
-    
-    /**
-     * Recreates behaviour of DataModelHelper when an invalid maven url is set for pax url repos
-     * TODO Remove as soon as DataModelHelper does not throw this exception any more  
-     */
-    class DummyDataModelHelper extends DataModelHelperImpl {
-
-		@Override
-		public Resource createResource(URL bundleUrl) throws IOException {
-			throw new MalformedURLException("Missing protocol");
-		}
-
-    	
-    }
-}
diff --git a/karaf-2.3.x/features/pom.xml b/karaf-2.3.x/features/pom.xml
deleted file mode 100644
index 94dfd76..0000000
--- a/karaf-2.3.x/features/pom.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>karaf</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.features</groupId>
-    <artifactId>features</artifactId>
-    <packaging>pom</packaging>
-    <name>Apache Karaf :: Features</name>
-
-    <modules>
-        <module>core</module>
-        <module>command</module>
-        <module>management</module>
-        <module>obr</module>
-    </modules>
-
-</project>
diff --git a/karaf-2.3.x/itests/NOTICE b/karaf-2.3.x/itests/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/itests/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/itests/pom.xml b/karaf-2.3.x/itests/pom.xml
deleted file mode 100644
index d110e84..0000000
--- a/karaf-2.3.x/itests/pom.xml
+++ /dev/null
@@ -1,146 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>karaf</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.itests</groupId>
-    <artifactId>itests</artifactId>
-    <packaging>jar</packaging>
-    <name>Apache Karaf :: Integration Tests</name>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-
-        <dependency>
-            <groupId>org.apache.karaf</groupId>
-            <artifactId>apache-karaf</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-            <type>tar.gz</type>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.apache.karaf</groupId>
-                    <artifactId>org.apache.karaf.client</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf</groupId>
-            <artifactId>apache-karaf</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-            <type>zip</type>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.apache.karaf</groupId>
-                    <artifactId>org.apache.karaf.client</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.features</groupId>
-            <artifactId>org.apache.karaf.features.core</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.tooling.exam</groupId>
-            <artifactId>org.apache.karaf.tooling.exam.container</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.ops4j.pax.exam</groupId>
-            <artifactId>pax-exam-junit4</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.servicemix.tooling</groupId>
-                <artifactId>depends-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>generate-depends-file</id>
-                        <goals>
-                            <goal>generate-depends-file</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <artifactId>maven-jar-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>jar-test-classes</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>test-jar</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-    <profiles>
-        <profile>
-            <id>ci-build-profile</id>
-            <activation>
-                <property>
-                    <name>maven.repo.local</name>
-                </property>
-            </activation>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-surefire-plugin</artifactId>
-                        <configuration>
-                            <!-- when the local repo location has been specified, we need to pass on this information to PAX mvn url -->
-                            <argLine>-Dorg.ops4j.pax.url.mvn.localRepository=${maven.repo.local}</argLine>
-                        </configuration>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
-
-</project>
diff --git a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/AdminTest.java b/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/AdminTest.java
deleted file mode 100644
index 78d7361..0000000
--- a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/AdminTest.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Licensed 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.
- */
-package org.apache.karaf.itests;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.junit.ExamReactorStrategy;
-import org.ops4j.pax.exam.junit.JUnit4TestRunner;
-import org.ops4j.pax.exam.spi.reactors.AllConfinedStagedReactorFactory;
-
-import javax.management.MBeanServerConnection;
-import javax.management.ObjectName;
-import javax.management.openmbean.TabularData;
-import javax.management.remote.JMXConnector;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-@RunWith(JUnit4TestRunner.class)
-@ExamReactorStrategy(AllConfinedStagedReactorFactory.class)
-public class AdminTest extends KarafTestSupport {
-
-    @Test
-    public void createDestroyCommand() throws Exception {
-        System.out.println(executeCommand("admin:create itest"));
-        String adminListOutput = executeCommand("admin:list");
-        System.out.println(adminListOutput);
-        assertTrue(adminListOutput.contains("itest"));
-        System.out.println(executeCommand("admin:destroy itest"));
-        adminListOutput = executeCommand("admin:list");
-        System.out.println(adminListOutput);
-        assertFalse(adminListOutput.contains("itest"));
-    }
-
-    @Test
-    public void createDestroyViaMBean() throws Exception {
-        JMXConnector connector = null;
-        try {
-            connector = this.getJMXConnector();
-            MBeanServerConnection connection = connector.getMBeanServerConnection();
-            ObjectName name = new ObjectName("org.apache.karaf:type=admin,name=root");
-            connection.invoke(name, "createInstance", new Object[]{ "itest", 0, 0, 0, null, null, null, null },
-                    new String[]{ "java.lang.String", "int", "int", "int", "java.lang.String", "java.lang.String", "java.lang.String", "java.lang.String" });
-            TabularData instances = (TabularData) connection.getAttribute(name, "Instances");
-            assertEquals(instances.size(), 2);
-            connection.invoke(name, "destroyInstance", new Object[]{ "itest" }, new String[]{ "java.lang.String" });
-            instances = (TabularData) connection.getAttribute(name, "Instances");
-            assertEquals(instances.size(), 1);
-        } finally {
-            if (connector != null)
-                connector.close();
-        }
-    }
-
-    @Test
-    public void cloneCommand() throws Exception {
-        System.out.println(executeCommand("admin:clone root itest"));
-        String adminListOutput = executeCommand("admin:list");
-        System.out.println(adminListOutput);
-        assertTrue(adminListOutput.contains("itest"));
-    }
-
-    @Test
-    public void cloneViaMBean() throws Exception {
-        JMXConnector connector = null;
-        try {
-            connector = this.getJMXConnector();
-            MBeanServerConnection connection = connector.getMBeanServerConnection();
-            ObjectName name = new ObjectName("org.apache.karaf:type=admin,name=root");
-            connection.invoke(name, "cloneInstance", new Object[]{ "root", "itest", 0, 0, 0, null, null },
-                    new String[]{ "java.lang.String", "java.lang.String", "int", "int", "int", "java.lang.String", "java.lang.String" });
-            TabularData instances = (TabularData) connection.getAttribute(name, "Instances");
-            assertEquals(instances.size(), 2);
-        } finally {
-            if (connector != null)
-                connector.close();
-        }
-    }
-
-    @Test
-    public void renameCommand() throws Exception {
-        System.out.println(executeCommand("admin:create itest"));
-        System.out.println(executeCommand("admin:rename itest new_itest"));
-        String instanceListOutput = executeCommand("admin:list");
-        System.out.println(instanceListOutput);
-        assertTrue(instanceListOutput.contains("new_itest"));
-    }
-
-}
diff --git a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/ConfigTest.java b/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/ConfigTest.java
deleted file mode 100644
index 53f1ef9..0000000
--- a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/ConfigTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed 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.
- */
-package org.apache.karaf.itests;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.junit.ExamReactorStrategy;
-import org.ops4j.pax.exam.junit.JUnit4TestRunner;
-import org.ops4j.pax.exam.spi.reactors.AllConfinedStagedReactorFactory;
-
-import javax.management.MBeanServerConnection;
-import javax.management.ObjectName;
-import javax.management.remote.JMXConnector;
-
-import java.util.List;
-import java.util.Map;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-@RunWith(JUnit4TestRunner.class)
-@ExamReactorStrategy(AllConfinedStagedReactorFactory.class)
-public class ConfigTest extends KarafTestSupport {
-
-    @Test
-    public void listCommand() throws Exception {
-        String configListOutput = executeCommand("config:list");
-        System.out.println(configListOutput);
-        assertFalse(configListOutput.isEmpty());
-        configListOutput = executeCommand("config:list \"(service.pid=org.apache.karaf.features)\"");
-        System.out.println(configListOutput);
-        assertFalse(configListOutput.isEmpty());
-    }
-
-    @Test
-    public void listViaMBean() throws Exception {
-        JMXConnector connector = null;
-        try {
-            connector = this.getJMXConnector();
-            MBeanServerConnection connection = connector.getMBeanServerConnection();
-            ObjectName name = new ObjectName("org.apache.karaf:type=config,name=root");
-            List<String> configs = (List<String>) connection.invoke(name, "list", new Object[]{ }, new String[]{ });
-            assertTrue(configs.size() > 0);
-            assertTrue(configs.contains("org.apache.karaf.features"));
-            Map<String, String> properties = (Map<String, String>) connection.invoke(name, "proplist", new Object[]{ "org.apache.karaf.features" }, new String[]{ "java.lang.String" });
-            assertTrue(properties.keySet().size() > 0);
-        } finally {
-            if (connector != null)
-                connector.close();
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/EnterpriseFeaturesTest.java b/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/EnterpriseFeaturesTest.java
deleted file mode 100644
index c5676cf..0000000
--- a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/EnterpriseFeaturesTest.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed 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.
- */
-package org.apache.karaf.itests;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.junit.ExamReactorStrategy;
-import org.ops4j.pax.exam.junit.JUnit4TestRunner;
-import org.ops4j.pax.exam.spi.reactors.AllConfinedStagedReactorFactory;
-
-@RunWith(JUnit4TestRunner.class)
-@ExamReactorStrategy(AllConfinedStagedReactorFactory.class)
-public class EnterpriseFeaturesTest extends KarafTestSupport {
-
-    private void installAndAssertFeature(String feature) throws Exception {
-        featuresService.installFeature(feature);
-        assertFeatureInstalled(feature);
-    }
-
-    @Test
-    public void testTransactionFeature() throws Exception {
-        installAndAssertFeature("transaction");
-    }
-
-    @Test
-    public void testJpaFeature() throws Exception {
-        installAndAssertFeature("jpa");
-    }
-
-    @Test
-    public void testJndiFeature() throws Exception {
-        installAndAssertFeature("jndi");
-    }
-
-    @Test
-    public void testApplicationWithoutIsolationFeature() throws Exception {
-        installAndAssertFeature("application-without-isolation");
-    }
-
-}
diff --git a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/FeaturesTest.java b/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/FeaturesTest.java
deleted file mode 100644
index 688e771..0000000
--- a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/FeaturesTest.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Licensed 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.
- */
-package org.apache.karaf.itests;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.junit.ExamReactorStrategy;
-import org.ops4j.pax.exam.junit.JUnit4TestRunner;
-import org.ops4j.pax.exam.spi.reactors.AllConfinedStagedReactorFactory;
-
-import javax.management.MBeanServerConnection;
-import javax.management.ObjectName;
-import javax.management.openmbean.TabularData;
-import javax.management.remote.JMXConnector;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-@RunWith(JUnit4TestRunner.class)
-@ExamReactorStrategy(AllConfinedStagedReactorFactory.class)
-public class FeaturesTest extends KarafTestSupport {
-
-    @Test
-    public void listCommand() throws Exception {
-        String listOutput = executeCommand("features:list");
-        System.out.println(listOutput);
-        assertFalse(listOutput.isEmpty());
-        listOutput = executeCommand("features:list -i");
-        System.out.println(listOutput);
-        assertFalse(listOutput.isEmpty());
-    }
-
-    @Test
-    public void listViaMBean() throws Exception {
-        JMXConnector connector = null;
-        try {
-            connector = this.getJMXConnector();
-            MBeanServerConnection connection = connector.getMBeanServerConnection();
-            ObjectName name = new ObjectName("org.apache.karaf:type=features,name=root");
-            TabularData features = (TabularData) connection.getAttribute(name, "Features");
-            assertTrue(features.size() > 0);
-        } finally {
-            if (connector != null)
-                connector.close();
-        }
-    }
-
-    @Test
-    public void installUninstallCommand() throws Exception {
-        String featureInstallOutput = executeCommand("features:install -v eventadmin");
-        System.out.println(featureInstallOutput);
-        assertFalse(featureInstallOutput.isEmpty());
-        String featureListOutput = executeCommand("features:list -i | grep eventadmin");
-        System.out.println(featureListOutput);
-        assertFalse(featureListOutput.isEmpty());
-        System.out.println(executeCommand("features:uninstall eventadmin"));
-        featureListOutput = executeCommand("features:list -i | grep eventadmin");
-        System.out.println(featureListOutput);
-        assertTrue(featureListOutput.isEmpty());
-    }
-
-    @Test
-    public void installUninstallViaMBean() throws Exception {
-        JMXConnector connector = null;
-        try {
-            connector = this.getJMXConnector();
-            MBeanServerConnection connection = connector.getMBeanServerConnection();
-            ObjectName name = new ObjectName("org.apache.karaf:type=features,name=root");
-            connection.invoke(name, "installFeature", new Object[] { "eventadmin" }, new String[]{ "java.lang.String" });
-            connection.invoke(name, "uninstallFeature", new Object[] { "eventadmin" }, new String[]{ "java.lang.String" });
-        } finally {
-            if (connector != null)
-                connector.close();
-        }
-    }
-
-    @Test
-    public void repoAddRemoveCommand() throws Exception {
-        System.out.println(executeCommand("features:addurl mvn:org.apache.karaf.cellar/apache-karaf-cellar/2.2.4/xml/features"));
-        String repoListOutput = executeCommand("features:listurl");
-        System.out.println(repoListOutput);
-        assertTrue(repoListOutput.contains("apache-karaf-cellar"));
-        System.out.println(executeCommand("features:removeurl mvn:org.apache.karaf.cellar/apache-karaf-cellar/2.2.4/xml/features"));
-        repoListOutput = executeCommand("features:listurl");
-        System.out.println(repoListOutput);
-        assertFalse(repoListOutput.contains("apache-karaf-cellar"));
-    }
-
-    @Test
-    public void repoAddRemoveViaMBean() throws Exception {
-        JMXConnector connector = null;
-        try {
-            connector = this.getJMXConnector();
-            MBeanServerConnection connection = connector.getMBeanServerConnection();
-            ObjectName name = new ObjectName("org.apache.karaf:type=features,name=root");
-            connection.invoke(name, "addRepository", new Object[] { "mvn:org.apache.karaf.cellar/apache-karaf-cellar/2.2.4/xml/features" }, new String[]{ "java.lang.String" });
-            connection.invoke(name, "removeRepository", new Object[] { "mvn:org.apache.karaf.cellar/apache-karaf-cellar/2.2.4/xml/features" }, new String[]{ "java.lang.String" });
-        } finally {
-            if (connector != null)
-                connector.close();
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/JaasTest.java b/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/JaasTest.java
deleted file mode 100644
index 032b888..0000000
--- a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/JaasTest.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed 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.
- */
-package org.apache.karaf.itests;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.junit.ExamReactorStrategy;
-import org.ops4j.pax.exam.junit.JUnit4TestRunner;
-import org.ops4j.pax.exam.spi.reactors.AllConfinedStagedReactorFactory;
-
-import static org.junit.Assert.assertTrue;
-
-@RunWith(JUnit4TestRunner.class)
-@ExamReactorStrategy(AllConfinedStagedReactorFactory.class)
-public class JaasTest extends KarafTestSupport {
-
-    @Test
-    public void realmListCommand() throws Exception {
-        String listRealmsOutput = executeCommand("jaas:realms");
-        System.out.println(listRealmsOutput);
-        assertTrue(listRealmsOutput.contains("PropertiesLoginModule"));
-        assertTrue(listRealmsOutput.contains("PublickeyLoginModule"));
-    }
-
-}
diff --git a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java b/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java
deleted file mode 100644
index 2744fb8..0000000
--- a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Licensed 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.
- */
-package org.apache.karaf.itests;
-
-import org.apache.felix.service.command.CommandProcessor;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.karaf.features.Feature;
-import org.apache.karaf.features.FeaturesService;
-import org.apache.karaf.tooling.exam.options.LogLevelOption;
-import org.junit.Assert;
-import org.ops4j.pax.exam.MavenUtils;
-import org.ops4j.pax.exam.Option;
-import org.ops4j.pax.exam.TestProbeBuilder;
-import org.ops4j.pax.exam.junit.Configuration;
-import org.ops4j.pax.exam.junit.ProbeBuilder;
-import org.osgi.framework.*;
-import org.osgi.util.tracker.ServiceTracker;
-
-import javax.inject.Inject;
-import javax.management.remote.JMXConnector;
-import javax.management.remote.JMXConnectorFactory;
-import javax.management.remote.JMXServiceURL;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.PrintStream;
-import java.util.*;
-import java.util.concurrent.*;
-
-import static org.apache.karaf.tooling.exam.options.KarafDistributionOption.karafDistributionConfiguration;
-import static org.apache.karaf.tooling.exam.options.KarafDistributionOption.keepRuntimeFolder;
-import static org.apache.karaf.tooling.exam.options.KarafDistributionOption.logLevel;
-
-import static org.ops4j.pax.exam.CoreOptions.maven;
-
-public class KarafTestSupport {
-
-    static final Long COMMAND_TIMEOUT = 10000L;
-    static final Long SERVICE_TIMEOUT = 30000L;
-
-    ExecutorService executor = Executors.newCachedThreadPool();
-
-    @Inject
-    protected BundleContext bundleContext;
-
-    @Inject
-    protected FeaturesService featuresService;
-
-    @ProbeBuilder
-    public TestProbeBuilder probeConfiguration(TestProbeBuilder probe) {
-        probe.setHeader(Constants.DYNAMICIMPORT_PACKAGE, "*,org.apache.felix.service.*;status=provisional");
-        return probe;
-    }
-
-    @Configuration
-    public Option[] config() {
-        return new Option[]{
-                karafDistributionConfiguration().frameworkUrl(maven().groupId("org.apache.karaf").artifactId("apache-karaf").versionAsInProject().type("tar.gz"))
-                        .karafVersion(MavenUtils.getArtifactVersion("org.apache.karaf", "apache-karaf")).name("Apache Karaf").unpackDirectory(new File("target/exam")),
-                keepRuntimeFolder(),
-                logLevel(LogLevelOption.LogLevel.ERROR)};
-    }
-
-    /**
-     * Executes a shell command and returns output as a String.
-     * Commands have a default timeout of 10 seconds.
-     *
-     * @param command
-     * @return
-     */
-    protected String executeCommand(final String command) {
-        return executeCommand(command, COMMAND_TIMEOUT, false);
-    }
-
-    /**
-     * Executes a shell command and returns output as a String.
-     * Commands have a default timeout of 10 seconds.
-     *
-     * @param command The command to execute.
-     * @param timeout The amount of time in millis to wait for the command to execute.
-     * @param silent  Specifies if the command should be displayed in the screen.
-     * @return
-     */
-    protected String executeCommand(final String command, final Long timeout, final Boolean silent) {
-        String response;
-        final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-        final PrintStream printStream = new PrintStream(byteArrayOutputStream);
-        final CommandProcessor commandProcessor = getOsgiService(CommandProcessor.class);
-        final CommandSession commandSession = commandProcessor.createSession(System.in, printStream, System.err);
-        FutureTask<String> commandFuture = new FutureTask<String>(
-                new Callable<String>() {
-                    public String call() {
-                        try {
-                            if (!silent) {
-                                System.err.println(command);
-                            }
-                            commandSession.execute(command);
-                        } catch (Exception e) {
-                            e.printStackTrace(System.err);
-                        }
-                        printStream.flush();
-                        return byteArrayOutputStream.toString();
-                    }
-                });
-
-        try {
-            executor.submit(commandFuture);
-            response = commandFuture.get(timeout, TimeUnit.MILLISECONDS);
-        } catch (Exception e) {
-            e.printStackTrace(System.err);
-            response = "SHELL COMMAND TIMED OUT: ";
-        }
-
-        return response;
-    }
-
-
-    protected <T> T getOsgiService(Class<T> type, long timeout) {
-        return getOsgiService(type, null, timeout);
-    }
-
-    protected <T> T getOsgiService(Class<T> type) {
-        return getOsgiService(type, null, SERVICE_TIMEOUT);
-    }
-
-    protected <T> T getOsgiService(Class<T> type, String filter, long timeout) {
-        ServiceTracker tracker = null;
-        try {
-            String flt;
-            if (filter != null) {
-                if (filter.startsWith("(")) {
-                    flt = "(&(" + Constants.OBJECTCLASS + "=" + type.getName() + ")" + filter + ")";
-                } else {
-                    flt = "(&(" + Constants.OBJECTCLASS + "=" + type.getName() + ")(" + filter + "))";
-                }
-            } else {
-                flt = "(" + Constants.OBJECTCLASS + "=" + type.getName() + ")";
-            }
-            Filter osgiFilter = FrameworkUtil.createFilter(flt);
-            tracker = new ServiceTracker(bundleContext, osgiFilter, null);
-            tracker.open(true);
-            // Note that the tracker is not closed to keep the reference
-            // This is buggy, as the service reference may change i think
-            Object svc = type.cast(tracker.waitForService(timeout));
-            if (svc == null) {
-                Dictionary dic = bundleContext.getBundle().getHeaders();
-                System.err.println("Test bundle headers: " + explode(dic));
-
-                for (ServiceReference ref : asCollection(bundleContext.getAllServiceReferences(null, null))) {
-                    System.err.println("ServiceReference: " + ref);
-                }
-
-                for (ServiceReference ref : asCollection(bundleContext.getAllServiceReferences(null, flt))) {
-                    System.err.println("Filtered ServiceReference: " + ref);
-                }
-
-                throw new RuntimeException("Gave up waiting for service " + flt);
-            }
-            return type.cast(svc);
-        } catch (InvalidSyntaxException e) {
-            throw new IllegalArgumentException("Invalid filter", e);
-        } catch (InterruptedException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    /*
-    * Explode the dictionary into a ,-delimited list of key=value pairs
-    */
-    private static String explode(Dictionary dictionary) {
-        Enumeration keys = dictionary.keys();
-        StringBuffer result = new StringBuffer();
-        while (keys.hasMoreElements()) {
-            Object key = keys.nextElement();
-            result.append(String.format("%s=%s", key, dictionary.get(key)));
-            if (keys.hasMoreElements()) {
-                result.append(", ");
-            }
-        }
-        return result.toString();
-    }
-
-    /**
-     * Provides an iterable collection of references, even if the original array is null
-     */
-    private static Collection<ServiceReference> asCollection(ServiceReference[] references) {
-        return references != null ? Arrays.asList(references) : Collections.<ServiceReference>emptyList();
-    }
-
-    public JMXConnector getJMXConnector() throws Exception {
-        JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1099/karaf-root");
-        Hashtable env = new Hashtable();
-        String[] credentials = new String[]{"karaf", "karaf"};
-        env.put("jmx.remote.credentials", credentials);
-        JMXConnector connector = JMXConnectorFactory.connect(url, env);
-        return connector;
-    }
-
-    public void assertFeatureInstalled(String featureName) {
-        Feature[] features = featuresService.listInstalledFeatures();
-        for (Feature feature : features) {
-            if (featureName.equals(feature.getName())) {
-                return;
-            }
-        }
-        Assert.fail("Feature " + featureName + " should be installed but is not");
-    }
-
-}
diff --git a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/LogTest.java b/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/LogTest.java
deleted file mode 100644
index 9c3e494..0000000
--- a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/LogTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed 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.
- */
-package org.apache.karaf.itests;
-
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.junit.ExamReactorStrategy;
-import org.ops4j.pax.exam.junit.JUnit4TestRunner;
-import org.ops4j.pax.exam.spi.reactors.AllConfinedStagedReactorFactory;
-
-import javax.management.Attribute;
-import javax.management.MBeanServerConnection;
-import javax.management.ObjectName;
-import javax.management.remote.JMXConnector;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-@RunWith(JUnit4TestRunner.class)
-@ExamReactorStrategy(AllConfinedStagedReactorFactory.class)
-public class LogTest extends KarafTestSupport {
-
-    @Test
-    public void setDebugAndDisplay() throws Exception {
-        System.out.println(executeCommand("log:set DEBUG"));
-        String displayOutput = executeCommand("log:display");
-        System.out.println(displayOutput);
-        assertTrue(displayOutput.contains("DEBUG"));
-    }
-
-    @Test
-    public void setDebugViaMBean() throws Exception {
-        JMXConnector connector = null;
-        try {
-            connector = this.getJMXConnector();
-            MBeanServerConnection connection = connector.getMBeanServerConnection();
-            ObjectName name = new ObjectName("org.apache.karaf:type=log,name=root");
-            Attribute attribute = new Attribute("Level", "DEBUG");
-            connection.setAttribute(name, attribute);
-            String logLevel = (String) connection.getAttribute(name, "Level");
-            assertEquals("Level: DEBUG", logLevel);
-        } finally {
-            if (connector != null)
-                connector.close();
-        }
-    }
-
-    @Test
-    public void setGetDebugAndClear() throws Exception {
-        System.out.println(executeCommand("log:set DEBUG"));
-        String getOutput = executeCommand("log:get");
-        System.out.println(getOutput);
-        assertTrue(getOutput.contains("DEBUG"));
-        System.out.println(executeCommand("log:set INFO"));
-        System.out.println(executeCommand("log:clear"));
-        String displayOutput = executeCommand("log:display");
-        System.out.println(displayOutput.trim());
-        assertTrue(displayOutput.trim().isEmpty());
-    }
-
-}
diff --git a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/ObrTest.java b/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/ObrTest.java
deleted file mode 100644
index 2fee98c..0000000
--- a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/ObrTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed 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.
- */
-package org.apache.karaf.itests;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.junit.ExamReactorStrategy;
-import org.ops4j.pax.exam.junit.JUnit4TestRunner;
-import org.ops4j.pax.exam.spi.reactors.AllConfinedStagedReactorFactory;
-
-import javax.management.MBeanServerConnection;
-import javax.management.ObjectName;
-import javax.management.openmbean.TabularData;
-import javax.management.remote.JMXConnector;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-
-@RunWith(JUnit4TestRunner.class)
-@ExamReactorStrategy(AllConfinedStagedReactorFactory.class)
-public class ObrTest extends KarafTestSupport {
-
-    @Before
-    public void installObrFeature() throws Exception {
-        System.out.println(executeCommand("features:install obr"));
-        // give it time on faster machines to complete
-        Thread.sleep(500);
-    }
-
-    @Test
-    public void listCommands() throws Exception {
-        System.out.println(executeCommand("obr:listUrl"));
-        System.out.println(executeCommand("obr:list"));
-    }
-
-    @Test
-    public void listsViaMBean() throws Exception {
-        JMXConnector connector = null;
-        try {
-            connector = this.getJMXConnector();
-            MBeanServerConnection connection = connector.getMBeanServerConnection();
-            ObjectName name = new ObjectName("org.apache.karaf:type=obr,name=root");
-            List<String> urls = (List<String>) connection.invoke(name, "listUrls", new Object[]{ }, new String[]{ });
-            assertEquals(0, urls.size());
-            TabularData bundles = (TabularData) connection.getAttribute(name, "Bundles");
-            assertEquals(0, bundles.size());
-        } finally {
-            if (connector != null)
-                connector.close();
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/OsgiTest.java b/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/OsgiTest.java
deleted file mode 100644
index 05f7f66..0000000
--- a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/OsgiTest.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Licensed 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.
- */
-package org.apache.karaf.itests;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.junit.ExamReactorStrategy;
-import org.ops4j.pax.exam.junit.JUnit4TestRunner;
-import org.ops4j.pax.exam.spi.reactors.AllConfinedStagedReactorFactory;
-
-import javax.management.MBeanServerConnection;
-import javax.management.ObjectName;
-import javax.management.openmbean.TabularData;
-import javax.management.remote.JMXConnector;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-@RunWith(JUnit4TestRunner.class)
-@ExamReactorStrategy(AllConfinedStagedReactorFactory.class)
-public class OsgiTest extends KarafTestSupport {
-
-    @Test
-    public void listCommand() throws Exception {
-        String listOutput = executeCommand("osgi:list -t 0");
-        System.out.println(listOutput);
-        assertFalse(listOutput.isEmpty());
-    }
-
-    @Test
-    public void listViaMBean() throws Exception {
-        JMXConnector connector = null;
-        try {
-            connector = this.getJMXConnector();
-            MBeanServerConnection connection = connector.getMBeanServerConnection();
-            ObjectName name = new ObjectName("org.apache.karaf:type=bundles,name=root");
-            TabularData bundles = (TabularData) connection.invoke(name, "list", new Object[]{ }, new String[]{ });
-            assertTrue(bundles.size() > 0);
-        } finally {
-            if (connector != null)
-                connector.close();
-        }
-    }
-
-    @Test
-    public void classesCommand() throws Exception {
-        String classesOutput = executeCommand("osgi:classes --force org.apache.aries.proxy.api");
-        System.out.println(classesOutput);
-        assertFalse(classesOutput.isEmpty());
-        classesOutput = executeCommand("osgi:classes --force org.apache.aries.proxy.api");
-        System.out.println(classesOutput);
-        assertTrue(classesOutput.contains("org/apache/aries/proxy"));
-    }
-
-    @Test
-    public void findClassCommand() throws Exception {
-        String findClassOutput = executeCommand("osgi:find-class jmx");
-        System.out.println(findClassOutput);
-        assertFalse(findClassOutput.isEmpty());
-    }
-
-    @Test
-    public void headersCommand() throws Exception {
-        String headersOutput = executeCommand("osgi:headers --force org.apache.aries.proxy.api");
-        System.out.println(headersOutput);
-        assertTrue(headersOutput.contains("Bundle-SymbolicName = org.apache.aries.proxy.api"));
-    }
-
-    @Test
-    public void infoCommand() throws Exception {
-        String infoOutput = executeCommand("osgi:info --force org.apache.aries.proxy.api");
-        System.out.println(infoOutput);
-        assertTrue(infoOutput.contains("Apache Aries Proxy API"));
-    }
-
-    @Test
-    public void installCommand() throws Exception {
-        String installOutput = executeCommand("osgi:install mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-lang/2.4_6");
-        System.out.println(installOutput);
-        String listOutput = executeCommand("osgi:list | grep -i commons-lang");
-        assertFalse(listOutput.isEmpty());
-    }
-
-    @Test
-    public void nameCommand() throws Exception {
-        String nameOutput = executeCommand("osgi:name");
-        System.out.println(nameOutput);
-        assertEquals("root", nameOutput.trim());
-    }
-
-    @Test
-    public void nameViaMBean() throws Exception {
-        JMXConnector connector = null;
-        try {
-            connector = this.getJMXConnector();
-            MBeanServerConnection connection = connector.getMBeanServerConnection();
-            ObjectName name = new ObjectName("org.apache.karaf:type=system,name=root");
-            String currentName = (String) connection.getAttribute(name, "Name");
-            assertEquals("root", currentName);
-        } finally {
-            if (connector != null)
-                connector.close();
-        }
-    }
-
-    @Test
-    public void versionCommand() throws Exception {
-        String versionOutput = executeCommand("osgi:version");
-        System.out.println(versionOutput);
-        assertTrue(versionOutput.contains("2.3"));
-    }
-
-    @Test
-    public void versionViaMBean() throws Exception {
-        JMXConnector connector = null;
-        try {
-            connector = this.getJMXConnector();
-            MBeanServerConnection connection = connector.getMBeanServerConnection();
-            ObjectName name = new ObjectName("org.apache.karaf:type=system,name=root");
-            String version = (String) connection.getAttribute(name, "Version");
-            assertTrue(version.contains("2.3"));
-        } finally {
-            if (connector != null)
-                connector.close();
-        }
-    }
-
-    @Test
-    public void startLevelCommand() throws Exception {
-        String startLevelOutput = executeCommand("osgi:start-level");
-        System.out.println(startLevelOutput);
-        assertTrue(startLevelOutput.contains("100"));
-    }
-
-    @Test
-    public void shutdownCommand() throws Exception {
-        System.out.println(executeCommand("osgi:shutdown -f"));
-    }
-
-}
diff --git a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/PackagesTest.java b/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/PackagesTest.java
deleted file mode 100644
index 546f1ae..0000000
--- a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/PackagesTest.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed 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.
- */
-package org.apache.karaf.itests;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.junit.ExamReactorStrategy;
-import org.ops4j.pax.exam.junit.JUnit4TestRunner;
-import org.ops4j.pax.exam.spi.reactors.AllConfinedStagedReactorFactory;
-
-import javax.management.MBeanServerConnection;
-import javax.management.ObjectName;
-import javax.management.remote.JMXConnector;
-
-import java.util.ArrayList;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-@RunWith(JUnit4TestRunner.class)
-@ExamReactorStrategy(AllConfinedStagedReactorFactory.class)
-public class PackagesTest extends KarafTestSupport {
-
-    @Test
-    public void exportsCommand() throws Exception {
-        String exportsOutput = executeCommand("packages:exports");
-        System.out.println(exportsOutput);
-        assertFalse(exportsOutput.isEmpty());
-    }
-
-    @Test
-    public void exportsViaMBean() throws Exception {
-        JMXConnector connector = null;
-        try {
-            connector = this.getJMXConnector();
-            MBeanServerConnection connection = connector.getMBeanServerConnection();
-            ObjectName name = new ObjectName("org.apache.karaf:type=packages,name=root");
-            ArrayList exports = (ArrayList) connection.invoke(name, "exportedPackages", new Object[]{ }, new String[]{ });
-            assertTrue(exports.size() > 0);
-        } finally {
-            if (connector != null)
-                connector.close();
-        }
-    }
-
-    @Test
-    public void importsCommand() throws Exception {
-        String importsOutput = executeCommand("packages:imports");
-        System.out.println(importsOutput);
-        assertFalse(importsOutput.isEmpty());
-    }
-
-    @Test
-    public void importsViaMBean() throws Exception {
-        JMXConnector connector = null;
-        try {
-            connector = this.getJMXConnector();
-            MBeanServerConnection connection = connector.getMBeanServerConnection();
-            ObjectName name = new ObjectName("org.apache.karaf:type=packages,name=root");
-            ArrayList imports = (ArrayList) connection.invoke(name, "importedPackages", new Object[]{ }, new String[]{ });
-            assertTrue(imports.size() > 0);
-        } finally {
-            if (connector != null)
-                connector.close();
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/ServicesTest.java b/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/ServicesTest.java
deleted file mode 100644
index 13730e0..0000000
--- a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/ServicesTest.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed 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.
- */
-package org.apache.karaf.itests;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.junit.ExamReactorStrategy;
-import org.ops4j.pax.exam.junit.JUnit4TestRunner;
-import org.ops4j.pax.exam.spi.reactors.AllConfinedStagedReactorFactory;
-
-import javax.management.MBeanServerConnection;
-import javax.management.ObjectName;
-import javax.management.openmbean.TabularData;
-import javax.management.remote.JMXConnector;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-@RunWith(JUnit4TestRunner.class)
-@ExamReactorStrategy(AllConfinedStagedReactorFactory.class)
-public class ServicesTest extends KarafTestSupport {
-
-    @Test
-    public void listCommand() throws Exception {
-        String listOutput = executeCommand("ls");
-        System.out.println(listOutput);
-        assertFalse(listOutput.isEmpty());
-    }
-
-    @Test
-    public void listViaMBean() throws Exception {
-        JMXConnector connector = null;
-        try {
-            connector = this.getJMXConnector();
-            MBeanServerConnection connection = connector.getMBeanServerConnection();
-            ObjectName name = new ObjectName("org.apache.karaf:type=services,name=root");
-            TabularData services = (TabularData) connection.invoke(name, "list", new Object[]{ }, new String[]{ });
-            assertTrue(services.size() > 0);
-        } finally {
-            if (connector != null)
-                connector.close();
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/StandardFeaturesTest.java b/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/StandardFeaturesTest.java
deleted file mode 100644
index 8ff7770..0000000
--- a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/StandardFeaturesTest.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Licensed 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.
- */
-package org.apache.karaf.itests;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.junit.ExamReactorStrategy;
-import org.ops4j.pax.exam.junit.JUnit4TestRunner;
-import org.ops4j.pax.exam.spi.reactors.AllConfinedStagedReactorFactory;
-
-@RunWith(JUnit4TestRunner.class)
-@ExamReactorStrategy(AllConfinedStagedReactorFactory.class)
-public class StandardFeaturesTest extends KarafTestSupport {
-
-    @Test
-    public void testBootFeatures() throws Exception {
-        assertFeatureInstalled("config");
-        assertFeatureInstalled("ssh");
-        assertFeatureInstalled("management");
-        assertFeatureInstalled("kar");
-    }
-
-    private void installAndAssertFeature(String feature) throws Exception {
-        featuresService.installFeature(feature);
-        assertFeatureInstalled(feature);
-    }
-
-    @Test
-    public void testSpringFeature() throws Exception {
-        installAndAssertFeature("spring");
-    }
-
-    @Test
-    public void testSpringAspectsFeature() throws Exception {
-        installAndAssertFeature("spring-aspects");
-    }
-
-    @Test
-    public void testSpringDmFeature() throws Exception {
-        installAndAssertFeature("spring-dm");
-    }
-
-    @Test
-    public void testSpringDmWebFeature() throws Exception {
-        installAndAssertFeature("spring-dm-web");
-    }
-
-    @Test
-    public void testSpringInstrumentFeature() throws Exception {
-        installAndAssertFeature("spring-instrument");
-    }
-
-    @Test
-    public void testSpringJdbcFeature() throws Exception {
-        installAndAssertFeature("spring-jdbc");
-    }
-
-    @Test
-    public void testSpringJmsFeature() throws Exception {
-        installAndAssertFeature("spring-jms");
-    }
-
-    @Test
-    public void testSpringStrutsFeature() throws Exception {
-        installAndAssertFeature("spring-struts");
-    }
-
-    @Test
-    public void testSpringTestFeature() throws Exception {
-        installAndAssertFeature("spring-test");
-    }
-
-    @Test
-    public void testSpringOrmFeature() throws Exception {
-        installAndAssertFeature("spring-orm");
-    }
-
-    @Test
-    public void testSpringOxmFeature() throws Exception {
-        installAndAssertFeature("spring-oxm");
-    }
-
-    @Test
-    public void testSpringTxFeature() throws Exception {
-        installAndAssertFeature("spring-tx");
-    }
-
-    @Test
-    public void testSpringWebFeature() throws Exception {
-        installAndAssertFeature("spring-web");
-    }
-
-    @Test
-    public void testSpringWebPortletFeature() throws Exception {
-        installAndAssertFeature("spring-web-portlet");
-    }
-
-    @Test
-    public void testWrapperFeature() throws Exception {
-        installAndAssertFeature("wrapper");
-    }
-
-    @Test
-    public void testObrFeature() throws Exception {
-        installAndAssertFeature("obr");
-    }
-
-    @Test
-    public void testJettyFeature() throws Exception {
-        installAndAssertFeature("jetty");
-    }
-
-    @Test
-    public void testHttpFeature() throws Exception {
-        installAndAssertFeature("http");
-    }
-
-    @Test
-    public void testHttpWhiteboardFeature() throws Exception {
-        installAndAssertFeature("http-whiteboard");
-    }
-
-    @Test
-    public void testWarFeature() throws Exception {
-        installAndAssertFeature("war");
-    }
-
-    @Test
-    public void testWebconsoleFeature() throws Exception {
-        installAndAssertFeature("webconsole");
-    }
-
-    @Test
-    public void testEventadminFeature() throws Exception {
-        installAndAssertFeature("eventadmin");
-    }
-
-    @Test
-    public void testJasyptEncryptionFeature() throws Exception {
-        installAndAssertFeature("jasypt-encryption");
-    }
-
-}
diff --git a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/WrapperTest.java b/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/WrapperTest.java
deleted file mode 100644
index 73e09e1..0000000
--- a/karaf-2.3.x/itests/src/test/java/org/apache/karaf/itests/WrapperTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed 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.
- */
-package org.apache.karaf.itests;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.junit.ExamReactorStrategy;
-import org.ops4j.pax.exam.junit.JUnit4TestRunner;
-import org.ops4j.pax.exam.spi.reactors.AllConfinedStagedReactorFactory;
-
-import javax.management.MBeanServerConnection;
-import javax.management.ObjectName;
-import javax.management.remote.JMXConnector;
-
-import static org.junit.Assert.assertFalse;
-
-@RunWith(JUnit4TestRunner.class)
-@ExamReactorStrategy(AllConfinedStagedReactorFactory.class)
-public class WrapperTest extends KarafTestSupport {
-
-    @Before
-    public void installObrFeature() throws Exception {
-        System.out.println(executeCommand("features:install wrapper"));
-        // give it time on faster machines to complete
-        Thread.sleep(500);
-    }
-
-
-    @Test
-    public void installCommand() throws Exception {
-        String installOutput = executeCommand("wrapper:install");
-        System.out.println(installOutput);
-        assertFalse(installOutput.isEmpty());
-    }
-
-}
diff --git a/karaf-2.3.x/jaas/boot/NOTICE b/karaf-2.3.x/jaas/boot/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/jaas/boot/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/jaas/boot/pom.xml b/karaf-2.3.x/jaas/boot/pom.xml
deleted file mode 100644
index 4cd9fb9..0000000
--- a/karaf-2.3.x/jaas/boot/pom.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.jaas</groupId>
-        <artifactId>jaas</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.jaas.boot</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: JAAS :: Boot</name>
-    <description>Provides the JAAS classes loading at boot process.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Import-Package>*</Import-Package>
-                        <Private-Package>!*</Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/jaas/boot/src/main/java/org/apache/karaf/jaas/boot/ProxyLoginModule.java b/karaf-2.3.x/jaas/boot/src/main/java/org/apache/karaf/jaas/boot/ProxyLoginModule.java
deleted file mode 100644
index 6f65b5d..0000000
--- a/karaf-2.3.x/jaas/boot/src/main/java/org/apache/karaf/jaas/boot/ProxyLoginModule.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.boot;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.security.auth.Subject;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.login.LoginException;
-import javax.security.auth.spi.LoginModule;
-
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-
-/**
- * An OSGi proxy login module that should be used instead of a plain reference to
- * a given login module.  Two properties must be set, the name of the login module
- * class and the bundle to be used to load it.
- * This class must be available from all modules, so it has to be either in a fragment
- * bundle attached to the system bundle or be made available through the boot delegation
- * class path.
- */
-public class ProxyLoginModule implements LoginModule {
-
-    public static final String PROPERTY_MODULE = "org.apache.karaf.jaas.module";
-    public static final String PROPERTY_BUNDLE = "org.apache.karaf.jaas.bundle";
-
-    private static BundleContext bundleContext = null;
-    
-    private LoginModule target = null;
-
-    public static void init(BundleContext context) {
-        bundleContext = context;
-    }
-
-    /* (non-Javadoc)
-     * @see javax.security.auth.spi.LoginModule#initialize(javax.security.auth.Subject, javax.security.auth.callback.CallbackHandler, java.util.Map, java.util.Map)
-     */
-    public void initialize(Subject subject, CallbackHandler callbackHandler, Map<String, ?> sharedState, Map<String, ?> options) {
-        if (bundleContext == null) {
-            throw new IllegalStateException("ProxyLoginModule not initialized. Init must be called prior any invocation.");
-        }
-        Map<String,?> newOptions = new HashMap<String,Object>(options);
-        String module = (String) newOptions.remove(PROPERTY_MODULE);
-        if (module == null) {
-            throw new IllegalStateException("Option " + PROPERTY_MODULE + " must be set to the name of the factory service");
-        }
-        String bundleId = (String) newOptions.remove(PROPERTY_BUNDLE);
-        if (bundleId == null) {
-            throw new IllegalStateException("Option " + PROPERTY_BUNDLE + " must be set to the name of the factory service");
-        }
-        Bundle bundle = bundleContext.getBundle(Long.parseLong(bundleId));
-        if (bundle == null) {
-            throw new IllegalStateException("No bundle found for id " + bundleId);
-        }
-        try {
-            target = (LoginModule) bundle.loadClass(module).newInstance();
-        } catch (Exception e) {
-            throw new IllegalStateException("Can not load or create login module " + module + " for bundle " + bundleId, e);
-        }
-        target.initialize(subject, callbackHandler, sharedState, newOptions);
-    }
-
-    /* (non-Javadoc)
-     * @see javax.security.auth.spi.LoginModule#login()
-     */
-    public boolean login() throws LoginException {
-        return target.login();
-    }
-
-    /* (non-Javadoc)
-     * @see javax.security.auth.spi.LoginModule#commit()
-     */
-    public boolean commit() throws LoginException {
-        return target.commit();
-    }
-
-    /* (non-Javadoc)
-     * @see javax.security.auth.spi.LoginModule#abort()
-     */
-    public boolean abort() throws LoginException {
-        return target.abort();
-    }
-
-    /* (non-Javadoc)
-     * @see javax.security.auth.spi.LoginModule#logout()
-     */
-    public boolean logout() throws LoginException {
-        return target.logout();
-    }
-
-}
diff --git a/karaf-2.3.x/jaas/boot/src/main/java/org/apache/karaf/jaas/boot/principal/GroupPrincipal.java b/karaf-2.3.x/jaas/boot/src/main/java/org/apache/karaf/jaas/boot/principal/GroupPrincipal.java
deleted file mode 100644
index f993473..0000000
--- a/karaf-2.3.x/jaas/boot/src/main/java/org/apache/karaf/jaas/boot/principal/GroupPrincipal.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *  Licensed 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.
- *  under the License.
- */
-package org.apache.karaf.jaas.boot.principal;
-
-import java.security.Principal;
-import java.security.acl.Group;
-import java.util.Enumeration;
-import java.util.Hashtable;
-
-public class GroupPrincipal implements Group {
-
-    private String name;
-    private Hashtable<String,Principal> members = new Hashtable<String, Principal>();
-
-    public GroupPrincipal(String name) {
-        this.name = name;
-    }
-    
-    public boolean addMember(Principal user) {
-        members.put(user.getName(), user);
-        return true;
-    }
-
-    public boolean removeMember(Principal user) {
-        members.remove(user.getName());
-        return true;
-    }
-
-    public boolean isMember(Principal member) {
-        return members.contains(member.getName());
-    }
-
-    public Enumeration<? extends Principal> members() {
-        return members.elements();
-    }
-
-    public String getName() {
-        return name;
-    }
-}
diff --git a/karaf-2.3.x/jaas/boot/src/main/java/org/apache/karaf/jaas/boot/principal/RolePolicy.java b/karaf-2.3.x/jaas/boot/src/main/java/org/apache/karaf/jaas/boot/principal/RolePolicy.java
deleted file mode 100644
index e2965ea..0000000
--- a/karaf-2.3.x/jaas/boot/src/main/java/org/apache/karaf/jaas/boot/principal/RolePolicy.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- *  Licensed 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.
- *  under the License.
- */
-package org.apache.karaf.jaas.boot.principal;
-
-import java.security.Principal;
-import java.security.acl.Group;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import javax.security.auth.Subject;
-
-public enum RolePolicy {
-
-    PREFIXED_ROLES("prefix") {
-        public void handleRoles(Subject subject,Set<Principal> principals,String discriminator) {
-            for(Principal p:principals) {
-                if(p instanceof RolePrincipal){
-                    RolePrincipal rolePrincipal = new RolePrincipal(discriminator+p.getName());
-                    subject.getPrincipals().add(rolePrincipal);
-                } else {
-                    subject.getPrincipals().add(p);
-                }
-            }
-        }
-    },
-    GROUP_ROLES("group") {
-        public void handleRoles(Subject subject,Set<Principal> principals,String discriminator) {
-            Group group = new GroupPrincipal(discriminator);
-            for(Principal p:principals) {
-                if(p instanceof RolePrincipal) {
-                    group.addMember(p);
-                } else {
-                    subject.getPrincipals().add(p);
-                }
-            }
-            subject.getPrincipals().add(group);
-        }
-    };
-
-    private String value;
-
-    private static final Map<String, RolePolicy> policies = new HashMap<String, RolePolicy>();
-
-    static {
-        for (RolePolicy s : EnumSet.allOf(RolePolicy.class)) {
-            policies.put(s.getValue(), s);
-        }
-    }
-
-    private RolePolicy(String value) {
-        this.value = value;
-    }
-
-    public String getValue() {
-        return value;
-    }
-    public static RolePolicy getPolicy(String code) {
-        return policies.get(code);
-    }
-
-    public abstract void handleRoles(Subject subject,Set<Principal> principals,String discriminator);
-}
diff --git a/karaf-2.3.x/jaas/boot/src/main/java/org/apache/karaf/jaas/boot/principal/RolePrincipal.java b/karaf-2.3.x/jaas/boot/src/main/java/org/apache/karaf/jaas/boot/principal/RolePrincipal.java
deleted file mode 100644
index 2c97244..0000000
--- a/karaf-2.3.x/jaas/boot/src/main/java/org/apache/karaf/jaas/boot/principal/RolePrincipal.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.boot.principal;
-
-import java.security.Principal;
-
-public class RolePrincipal implements Principal {
-
-    private final String name;
-
-    public RolePrincipal(String name) {
-        assert name != null;
-        this.name = name;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (!(o instanceof RolePrincipal)) return false;
-
-        RolePrincipal that = (RolePrincipal) o;
-
-        if (name != null ? !name.equals(that.name) : that.name != null) return false;
-
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        return name != null ? name.hashCode() : 0;
-    }
-
-    @Override
-    public String toString() {
-        return "RolePrincipal[" + name + "]";
-    }
-}
diff --git a/karaf-2.3.x/jaas/boot/src/main/java/org/apache/karaf/jaas/boot/principal/UserPrincipal.java b/karaf-2.3.x/jaas/boot/src/main/java/org/apache/karaf/jaas/boot/principal/UserPrincipal.java
deleted file mode 100644
index 7a06a9b..0000000
--- a/karaf-2.3.x/jaas/boot/src/main/java/org/apache/karaf/jaas/boot/principal/UserPrincipal.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.boot.principal;
-
-import java.security.Principal;
-
-public class UserPrincipal implements Principal {
-
-    private final String name;
-
-    public UserPrincipal(String name) {
-        assert name != null;
-        this.name = name;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (!(o instanceof UserPrincipal)) return false;
-
-        UserPrincipal that = (UserPrincipal) o;
-
-        if (name != null ? !name.equals(that.name) : that.name != null) return false;
-
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        return name != null ? name.hashCode() : 0;
-    }
-
-    @Override
-    public String toString() {
-        return "UserPrincipal[" + name + "]";
-    }
-}
diff --git a/karaf-2.3.x/jaas/boot/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/jaas/boot/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index a334424..0000000
--- a/karaf-2.3.x/jaas/boot/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,22 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides JAAS classes loaded during Karaf boot process.
-
-    In particular it provides the ProxyLoginModule.
-
-    The ProxyLoginModule is an OSGi proxy login module that should be used instead of a plain reference to
-    a given login module. It takes two properties, the name of the login module class, and the bundle to be used
-    to load it.
-    This class must be loadable from modules, so it has to be either in a fragment bundle attached to the
-    system bundle or be made available through the boot delegation class path.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mSecurity\u001B[0m section of the Karaf User Guide.
-    \u001B[36mSecurity Framework\u001B[0m section of the Karaf Developer Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/jaas/command/NOTICE b/karaf-2.3.x/jaas/command/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/jaas/command/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/jaas/command/pom.xml b/karaf-2.3.x/jaas/command/pom.xml
deleted file mode 100644
index e7367ec..0000000
--- a/karaf-2.3.x/jaas/command/pom.xml
+++ /dev/null
@@ -1,146 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <artifactId>jaas</artifactId>
-        <groupId>org.apache.karaf.jaas</groupId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.jaas.command</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: JAAS :: Command</name>
-    <description>This bundle provides Karaf shell commands to manipulate JAAS security framework.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.karaf.jaas</groupId>
-            <artifactId>org.apache.karaf.jaas.config</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.jaas</groupId>
-            <artifactId>org.apache.karaf.jaas.boot</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.jaas</groupId>
-            <artifactId>org.apache.karaf.jaas.modules</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.obr</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.osgi</groupId>
-            <artifactId>spring-osgi-core</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.servicemix.bundles</groupId>
-            <artifactId>org.apache.servicemix.bundles.junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymock</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-jdk14</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Export-Package>${project.artifactId}*;version=${project.version}</Export-Package>
-                        <Import-Package>
-                            javax.management,
-                            javax.management.loading,
-                            org.apache.felix.service.command,
-                            org.apache.felix.gogo.commands,
-                            org.apache.karaf.shell.console,
-                            *
-                        </Import-Package>
-                        <Private-Package>!*</Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/CancelCommand.java b/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/CancelCommand.java
deleted file mode 100644
index fd4fe14..0000000
--- a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/CancelCommand.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.command;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.jaas.modules.BackingEngine;
-
-import java.util.LinkedList;
-
-@Command(scope = "jaas", name = "cancel", description = "Cancel the modification on a JAAS Realm")
-public class CancelCommand extends JaasCommandSupport {
-
-    @Override
-    protected Object doExecute() throws Exception {
-        //Cleanup the session
-        session.put(JAAS_REALM, null);
-        session.put(JAAS_ENTRY, null);
-        session.put(JAAS_CMDS, new LinkedList<JaasCommandSupport>());
-        return null;
-    }
-
-    @Override
-    protected Object doExecute(BackingEngine engine) throws Exception {
-        return null;
-    }
-}
diff --git a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/JaasCommandSupport.java b/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/JaasCommandSupport.java
deleted file mode 100644
index 5706f21..0000000
--- a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/JaasCommandSupport.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.command;
-
-import org.apache.karaf.jaas.config.JaasRealm;
-import org.apache.karaf.jaas.modules.BackingEngine;
-import org.apache.karaf.jaas.modules.BackingEngineService;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-
-import javax.security.auth.login.AppConfigurationEntry;
-import java.util.List;
-import java.util.Queue;
-
-public abstract class JaasCommandSupport extends OsgiCommandSupport {
-
-    public static final String JAAS_REALM = "JaasCommand.REALM";
-    public static final String JAAS_ENTRY = "JaasCommand.ENTRY";
-    public static final String JAAS_CMDS = "JaasCommand.COMMANDS";
-
-    private List<JaasRealm> realms;
-
-    protected BackingEngineService backingEngineService;
-
-    protected abstract Object doExecute(BackingEngine engine) throws Exception;
-
-    /**
-     * Add the command to the command queue.
-     *
-     * @return
-     * @throws Exception
-     */
-    protected Object doExecute() throws Exception {
-        JaasRealm realm = (JaasRealm) session.get(JAAS_REALM);
-        AppConfigurationEntry entry = (AppConfigurationEntry) session.get(JAAS_ENTRY);
-        Queue commandQueue = (Queue) session.get(JAAS_CMDS);
-
-        if (realm != null && entry != null) {
-            if (commandQueue != null) {
-                commandQueue.add(this);
-            }
-        } else {
-            System.err.println("No JAAS Realm / Module has been selected.");
-        }
-        return null;
-    }
-
-    public List<JaasRealm> getRealms() {
-        return realms;
-    }
-
-    public void setRealms(List<JaasRealm> realms) {
-        this.realms = realms;
-    }
-
-    public BackingEngineService getBackingEngineService() {
-        return backingEngineService;
-    }
-
-    public void setBackingEngineService(BackingEngineService backingEngineService) {
-        this.backingEngineService = backingEngineService;
-    }
-
-}
diff --git a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListPendingCommand.java b/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListPendingCommand.java
deleted file mode 100644
index ff4eda7..0000000
--- a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListPendingCommand.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.command;
-
-import java.util.Queue;
-import javax.security.auth.login.AppConfigurationEntry;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.jaas.boot.ProxyLoginModule;
-import org.apache.karaf.jaas.config.JaasRealm;
-import org.apache.karaf.jaas.modules.BackingEngine;
-
-@Command(scope = "jaas", name = "pending", description = "List the modification on the selected JAAS Realm/Login Module")
-public class ListPendingCommand extends JaasCommandSupport {
-
-    @Override
-    protected Object doExecute() throws Exception {
-        JaasRealm realm = (JaasRealm) session.get(JAAS_REALM);
-        AppConfigurationEntry entry = (AppConfigurationEntry) session.get(JAAS_ENTRY);
-        Queue<JaasCommandSupport> commandQueue = (Queue<JaasCommandSupport>) session.get(JAAS_CMDS);
-
-        if (realm != null && entry != null) {
-            String moduleClass = (String) entry.getOptions().get(ProxyLoginModule.PROPERTY_MODULE);
-            System.out.println(String.format("JAAS Realm %s/JAAS Login Module %s", realm.getName(), moduleClass));
-
-            if (commandQueue != null && !commandQueue.isEmpty()) {
-                for (JaasCommandSupport command : commandQueue) {
-                    System.out.println(command);
-                }
-            } else {
-                System.err.println("No JAAS pending modification");
-            }
-        } else {
-            System.err.println("No JAAS Realm/Login Module has been selected");
-        }
-        return null;
-    }
-
-    @Override
-    protected Object doExecute(BackingEngine engine) throws Exception {
-        return null;
-    }
-}
\ No newline at end of file
diff --git a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListRealmsCommand.java b/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListRealmsCommand.java
deleted file mode 100644
index 904f47b..0000000
--- a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListRealmsCommand.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.command;
-
-import java.util.List;
-import javax.security.auth.login.AppConfigurationEntry;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.jaas.boot.ProxyLoginModule;
-import org.apache.karaf.jaas.config.JaasRealm;
-import org.apache.karaf.jaas.modules.BackingEngine;
-
-@Command(scope = "jaas", name = "realms", description = "List JAAS Realms")
-public class ListRealmsCommand extends JaasCommandSupport {
-
-    private static final String REALM_LIST_FORMAT = "%5s %-20s %-80s";
-
-    @Override
-    protected Object doExecute(BackingEngine engine) throws Exception {
-        return null;
-    }
-
-    protected Object doExecute() throws Exception {
-        List<JaasRealm> realms = getRealms();
-        if (realms != null && realms.size() > 0) {
-            System.out.println(String.format(REALM_LIST_FORMAT, "Index","Realm", "Module Class"));
-            int index = 1;
-            for (JaasRealm realm : realms) {
-                String realmName = realm.getName();
-                AppConfigurationEntry[] entries = realm.getEntries();
-
-                if (entries != null && entries.length > 0) {
-                    for (int i = 0; i < entries.length; i++) {
-                        String moduleClass = (String) entries[i].getOptions().get(ProxyLoginModule.PROPERTY_MODULE);
-                        System.out.println(String.format(REALM_LIST_FORMAT, index++, realmName, moduleClass));
-                    }
-                } else {
-                    System.out.println(String.format(REALM_LIST_FORMAT, realmName, "No JAAS Login Module found for JAAS Realm"));
-                }
-            }
-        } else {
-            System.err.println("No realm found");
-        }
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListUsersCommand.java b/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListUsersCommand.java
deleted file mode 100644
index 00a4248..0000000
--- a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListUsersCommand.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.command;
-
-import java.util.List;
-import javax.security.auth.login.AppConfigurationEntry;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.jaas.config.JaasRealm;
-import org.apache.karaf.jaas.modules.BackingEngine;
-import org.apache.karaf.jaas.boot.principal.RolePrincipal;
-import org.apache.karaf.jaas.boot.principal.UserPrincipal;
-
-@Command(scope = "jaas", name = "users", description = "List the users of the selected JAAS Realm/Login Module")
-public class ListUsersCommand extends JaasCommandSupport {
-
-    private static final String OUTPUT_FORMAT = "%-20s %-20s";
-
-    @Override
-    protected Object doExecute() throws Exception {
-        JaasRealm realm = (JaasRealm) session.get(JAAS_REALM);
-        AppConfigurationEntry entry = (AppConfigurationEntry) session.get(JAAS_ENTRY);
-
-        if (realm == null || entry == null) {
-            System.err.println("No JAAS Realm / Module has been selected.");
-            return null;
-        }
-
-        BackingEngine engine = backingEngineService.get(entry);
-
-        if (engine == null) {
-            System.err.println("Can't get the list of users (no backing engine service registered)");
-            return null;
-        }
-
-        return doExecute(engine);
-    }
-
-    @Override
-    protected Object doExecute(BackingEngine engine) throws Exception {
-        List<UserPrincipal> users = engine.listUsers();
-        System.out.println(String.format(OUTPUT_FORMAT, "User Name", "Role"));
-
-        for (UserPrincipal user : users) {
-            String userName = user.getName();
-            List<RolePrincipal> roles = engine.listRoles(user);
-
-            if (roles != null && roles.size() >= 1) {
-                for (RolePrincipal role : roles) {
-                    String roleName = role.getName();
-                    System.out.println(String.format(OUTPUT_FORMAT, userName, roleName));
-                }
-            } else {
-                System.out.println(String.format(OUTPUT_FORMAT, userName, ""));
-            }
-
-        }
-        return null;
-    }
-}
diff --git a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/ManageRealmCommand.java b/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/ManageRealmCommand.java
deleted file mode 100644
index 8502847..0000000
--- a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/ManageRealmCommand.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.command;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.jaas.boot.ProxyLoginModule;
-import org.apache.karaf.jaas.config.JaasRealm;
-import org.apache.karaf.jaas.modules.BackingEngine;
-
-import javax.security.auth.login.AppConfigurationEntry;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Queue;
-
-@Command(scope = "jaas", name = "manage", description = "Manage users and roles of a JAAS Realm")
-public class ManageRealmCommand extends JaasCommandSupport {
-
-    @Option(name = "--realm", description = "Realm Name", required = false, multiValued = false)
-    String realmName;
-
-    @Option(name = "--index", description = "Realm Index", required = false, multiValued = false)
-    int index;
-
-    @Option(name = "--module", aliases = {}, description = "Login Module Class Name", required = false, multiValued = false)
-    String moduleName;
-
-    @Option(name = "-f", aliases = {"--force"}, description = "Force the management of this realm, even if another one was under management", required = false, multiValued = false)
-    boolean force;
-
-    @Override
-    protected Object doExecute() throws Exception {
-        if (realmName == null && index <= 0) {
-            System.err.println("A valid realm or the realm index need to be specified");
-            return null;
-        }
-        JaasRealm oldRealm = (JaasRealm) this.session.get(JAAS_REALM);
-        AppConfigurationEntry oldEntry = (AppConfigurationEntry) this.session.get(JAAS_ENTRY);
-
-        if (oldRealm != null && !oldRealm.getName().equals(realmName) && !force) {
-            System.err.println("Another JAAS Realm is being edited. Cancel/update first, or use the --force option.");
-        } else if (oldEntry != null && !oldEntry.getLoginModuleName().equals(moduleName) && !force) {
-            System.err.println("Another JAAS Login Module is being edited. Cancel/update first, or use the --force option.");
-        } else {
-
-            JaasRealm realm = null;
-            AppConfigurationEntry entry = null;
-
-            if (index > 0) {
-                // user provided the index, get the realm AND entry from the index
-                List<JaasRealm> realms = getRealms();
-                if (realms != null && realms.size() > 0) {
-                    int i = 1;
-                    for (JaasRealm r : realms) {
-                        AppConfigurationEntry[] entries = r.getEntries();
-
-                        if (entries != null) {
-                            for (int j = 0; j < entries.length; j++) {
-                                if (i == index) {
-                                    realm = r;
-                                    entry = entries[j];
-                                    break;
-                                }
-                                i++;
-                            }
-                        }
-                    }
-                }
-            } else {
-                List<JaasRealm> realms = getRealms();
-                if (realms != null && realms.size() > 0) {
-                    for (JaasRealm r : realms) {
-                        if (r.getName().equals(realmName)) {
-                            realm = r;
-                            break;
-                        }
-                    }
-
-                }
-                AppConfigurationEntry[] entries = realm.getEntries();
-                if (entries != null) {
-                    for (AppConfigurationEntry e : entries) {
-                        String moduleClass = (String) e.getOptions().get(ProxyLoginModule.PROPERTY_MODULE);
-                        if (moduleName == null) {
-                            entry = e;
-                            break;
-                        } else {
-                            if (moduleName.equals(e.getLoginModuleName()) || moduleName.equals(moduleClass)) {
-                                entry = e;
-                                break;
-                            }
-                        }
-                    }
-                }
-            }
-
-            if (realm == null) {
-                System.err.println("JAAS realm has not been found.");
-                return null;
-            }
-
-            if (entry == null) {
-                System.err.println("JAAS module has not been found.");
-                return null;
-            }
-
-            Queue<JaasCommandSupport> commands = null;
-
-            commands = (Queue<JaasCommandSupport>) this.session.get(JAAS_CMDS);
-            if (commands == null) {
-                commands = new LinkedList<JaasCommandSupport>();
-            }
-
-            this.session.put(JAAS_REALM, realm);
-            this.session.put(JAAS_ENTRY, entry);
-            this.session.put(JAAS_CMDS, commands);
-        }
-        return null;
-    }
-
-    @Override
-    protected Object doExecute(BackingEngine engine) throws Exception {
-        return null;
-    }
-}
diff --git a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/RoleAddCommand.java b/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/RoleAddCommand.java
deleted file mode 100644
index 81ec514..0000000
--- a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/RoleAddCommand.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.command;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.jaas.modules.BackingEngine;
-
-@Command(scope = "jaas", name = "roleadd", description = "Add a role to a user")
-public class RoleAddCommand extends JaasCommandSupport {
-
-    @Argument(index = 0, name = "username", description = "User Name", required = true, multiValued = false)
-    private String username;
-
-    @Argument(index = 1, name = "role", description = "Role", required = true, multiValued = false)
-    private String role;
-
-    /**
-     * Execute the RoleAddCommand in the given Excecution Context.
-     *
-     * @param engine
-     * @return
-     * @throws Exception
-     */
-    @Override
-    protected Object doExecute(BackingEngine engine) throws Exception {
-        engine.addRole(username, role);
-        return null;
-    }
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public String getRole() {
-        return role;
-    }
-
-    public void setRole(String role) {
-        this.role = role;
-    }
-
-    @Override
-    public String toString() {
-        return "RoleAddCommand{" +
-                "username='" + username + '\'' +
-                ", role='" + role + '\'' +
-                '}';
-    }
-}
diff --git a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/RoleDeleteCommand.java b/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/RoleDeleteCommand.java
deleted file mode 100644
index a44b17e..0000000
--- a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/RoleDeleteCommand.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.command;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.jaas.modules.BackingEngine;
-
-@Command(scope = "jaas", name = "roledel", description = "Delete a role from a user")
-public class RoleDeleteCommand extends JaasCommandSupport {
-
-    @Argument(index = 0, name = "username", description = "User Name", required = true, multiValued = false)
-    private String username;
-
-    @Argument(index = 1, name = "role", description = "Role", required = true, multiValued = false)
-    private String role;
-
-    /**
-     * Execute the RoleDeleteCommand in the given Excecution Context.
-     *
-     * @param engine
-     * @return
-     * @throws Exception
-     */
-    @Override
-    protected Object doExecute(BackingEngine engine) throws Exception {
-        engine.deleteRole(username, role);
-        return null;
-    }
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public String getRole() {
-        return role;
-    }
-
-    public void setRole(String role) {
-        this.role = role;
-    }
-
-    @Override
-    public String toString() {
-        return "RoleDeleteCommand{" +
-                "username='" + username + '\'' +
-                ", role='" + role + '\'' +
-                '}';
-    }
-}
diff --git a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/UpdateCommand.java b/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/UpdateCommand.java
deleted file mode 100644
index dfa9a4e..0000000
--- a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/UpdateCommand.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.command;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.jaas.config.JaasRealm;
-import org.apache.karaf.jaas.modules.BackingEngine;
-
-import javax.security.auth.login.AppConfigurationEntry;
-import java.util.LinkedList;
-import java.util.Queue;
-
-@Command(scope = "jaas", name = "update", description = "Update the selected JAAS Realm")
-public class UpdateCommand extends JaasCommandSupport {
-
-    @Override
-    protected Object doExecute() throws Exception {
-        JaasRealm realm = (JaasRealm) session.get(JAAS_REALM);
-        AppConfigurationEntry entry = (AppConfigurationEntry) session.get(JAAS_ENTRY);
-
-        if (realm == null || entry == null) {
-            System.err.println("No JAAS Realm/Login Module selected");
-            return null;
-        }
-
-        BackingEngine engine = backingEngineService.get(entry);
-
-        if (engine == null) {
-            System.err.println("Can't update the JAAS realm (no backing engine service registered)");
-            return null;
-        }
-
-        return doExecute(engine);
-    }
-
-    @Override
-    protected Object doExecute(BackingEngine engine) throws Exception {
-        Queue<? extends JaasCommandSupport> commands = (Queue<? extends JaasCommandSupport>) session.get(JAAS_CMDS);
-
-        if (commands == null || commands.isEmpty()) {
-            System.err.println("No pending modification");
-            return null;
-        }
-
-        // loop in the commands and execute them.
-        while (!commands.isEmpty()) {
-            Object obj = commands.remove();
-            if (obj instanceof JaasCommandSupport) {
-                ((JaasCommandSupport) obj).doExecute(engine);
-            }
-        }
-
-        // cleanup the session
-        session.put(JAAS_REALM, null);
-        session.put(JAAS_ENTRY, null);
-        session.put(JAAS_CMDS, new LinkedList<JaasCommandSupport>());
-        return null;
-    }
-}
diff --git a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/UserAddCommand.java b/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/UserAddCommand.java
deleted file mode 100644
index b8887bd..0000000
--- a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/UserAddCommand.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.command;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.jaas.modules.BackingEngine;
-
-@Command(scope = "jaas", name = "useradd", description = "Add a user")
-public class UserAddCommand extends JaasCommandSupport {
-
-    @Argument(index = 0, name = "username", description = "User Name", required = true, multiValued = false)
-    private String username;
-
-    @Argument(index = 1, name = "password", description = "Password", required = true, multiValued = false)
-    private String password;
-
-
-    /**
-     * Execute the RoleAddCommand in the given Excecution Context.
-     *
-     * @param engine
-     * @return
-     * @throws Exception
-     */
-    @Override
-    protected Object doExecute(BackingEngine engine) throws Exception {
-        engine.addUser(username, password);
-        return null;
-    }
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    @Override
-    public String toString() {
-        return "UserAddCommand{" +
-                "username='" + username + '\'' +
-                ", password='" + password + '\'' +
-                '}';
-    }
-}
diff --git a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/UserDeleteCommand.java b/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/UserDeleteCommand.java
deleted file mode 100644
index 6f392ed..0000000
--- a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/UserDeleteCommand.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.command;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.jaas.modules.BackingEngine;
-
-@Command(scope = "jaas", name = "userdel", description = "Delete a user")
-public class UserDeleteCommand extends JaasCommandSupport {
-
-    @Argument(index = 0, name = "username", description = "User Name", required = true, multiValued = false)
-    private String username;
-
-    /**
-     * Execute the RoleAddCommand in the given Excecution Context.
-     *
-     * @param engine
-     * @return
-     * @throws Exception
-     */
-    @Override
-    protected Object doExecute(BackingEngine engine) throws Exception {
-        engine.deleteUser(username);
-        return null;
-    }
-
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    @Override
-    public String toString() {
-        return "UserDeleteCommand{" +
-                "username='" + username + '\'' +
-                '}';
-    }
-}
diff --git a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/completers/LoginModuleNameCompleter.java b/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/completers/LoginModuleNameCompleter.java
deleted file mode 100644
index 1256953..0000000
--- a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/completers/LoginModuleNameCompleter.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.command.completers;
-
-import java.util.LinkedList;
-import java.util.List;
-import javax.security.auth.login.AppConfigurationEntry;
-import org.apache.karaf.jaas.boot.ProxyLoginModule;
-import org.apache.karaf.jaas.config.JaasRealm;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-
-public class LoginModuleNameCompleter implements Completer {
-
-    private List<JaasRealm> realms;
-
-    public int complete(String buffer, int cursor, List<String> candidates) {
-        StringsCompleter delegate = new StringsCompleter();
-        try {
-            if (realms != null && !realms.isEmpty())
-                for (JaasRealm realm : realms) {
-                    List<String> moduleClassNames = findLoginModuleClassNames(realm);
-                    if (moduleClassNames != null && !moduleClassNames.isEmpty())
-                    delegate.getStrings().addAll(moduleClassNames);
-                }
-        } catch (Exception e) {
-            // Ignore
-        }
-        return delegate.complete(buffer, cursor, candidates);
-    }
-
-    /**
-     * Finds the login module class name in the {@link JaasRealm} entries.
-     * @param realm
-     * @return
-     */
-    private List<String> findLoginModuleClassNames(JaasRealm realm) {
-        List<String> moduleClassNames = new LinkedList<String>();
-        for (AppConfigurationEntry entry : realm.getEntries()) {
-            String moduleClass = (String) entry.getOptions().get(ProxyLoginModule.PROPERTY_MODULE);
-            if (moduleClass != null) {
-                moduleClassNames.add(moduleClass);
-            }
-
-        }
-        return moduleClassNames;
-    }
-
-    public List<JaasRealm> getRealms() {
-        return realms;
-    }
-
-    public void setRealms(List<JaasRealm> realms) {
-        this.realms = realms;
-    }
-
-}
diff --git a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/completers/RealmCompleter.java b/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/completers/RealmCompleter.java
deleted file mode 100644
index d973acb..0000000
--- a/karaf-2.3.x/jaas/command/src/main/java/org/apache/karaf/jaas/command/completers/RealmCompleter.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.command.completers;
-
-import java.util.List;
-import org.apache.karaf.jaas.config.JaasRealm;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-
-public class RealmCompleter implements Completer {
-
-    private List<JaasRealm> realms;
-
-    public int complete(String buffer, int cursor, List<String> candidates) {
-        StringsCompleter delegate = new StringsCompleter();
-        try {
-            if (realms != null && !realms.isEmpty())
-                for (JaasRealm realm : realms) {
-                    delegate.getStrings().add(realm.getName());
-                }
-        } catch (Exception e) {
-            // Ignore
-        }
-        return delegate.complete(buffer, cursor, candidates);
-    }
-
-    public List<JaasRealm> getRealms() {
-        return realms;
-    }
-
-    public void setRealms(List<JaasRealm> realms) {
-        this.realms = realms;
-    }
-
-}
diff --git a/karaf-2.3.x/jaas/command/src/main/resources/OSGI-INF/blueprint/jaas-command.xml b/karaf-2.3.x/jaas/command/src/main/resources/OSGI-INF/blueprint/jaas-command.xml
deleted file mode 100644
index 84c5f9d..0000000
--- a/karaf-2.3.x/jaas/command/src/main/resources/OSGI-INF/blueprint/jaas-command.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
-        <command name="jaas/manage">
-            <action class="org.apache.karaf.jaas.command.ManageRealmCommand">
-                <property name="realms" ref="realms"/>
-            </action>
-            <optional-completers>
-                <entry key="--realm" value-ref="realmCompleter"/>
-                <entry key="--module" value-ref="moduleClassNameCompleter"/>
-            </optional-completers>
-        </command>
-        <command name="jaas/update">
-            <action class="org.apache.karaf.jaas.command.UpdateCommand">
-                <property name="backingEngineService" ref="engineService"/>
-            </action>
-        </command>
-        <command name="jaas/cancel">
-            <action class="org.apache.karaf.jaas.command.CancelCommand"/>
-        </command>
-        <command name="jaas/pending">
-            <action class="org.apache.karaf.jaas.command.ListPendingCommand"/>
-        </command>
-        <command name="jaas/users">
-            <action class="org.apache.karaf.jaas.command.ListUsersCommand">
-                <property name="backingEngineService" ref="engineService"/>
-            </action>
-        </command>
-        <command name="jaas/realms">
-            <action class="org.apache.karaf.jaas.command.ListRealmsCommand">
-                <property name="realms" ref="realms"/>
-            </action>
-        </command>
-        <command name="jaas/useradd">
-            <action class="org.apache.karaf.jaas.command.UserAddCommand"/>
-        </command>
-        <command name="jaas/userdel">
-            <action class="org.apache.karaf.jaas.command.UserDeleteCommand"/>
-        </command>
-        <command name="jaas/roleadd">
-            <action class="org.apache.karaf.jaas.command.RoleAddCommand"/>
-        </command>
-        <command name="jaas/roledel">
-            <action class="org.apache.karaf.jaas.command.RoleDeleteCommand"/>
-        </command>
-    </command-bundle>
-
-    <!-- JAAS Realms -->
-    <reference-list id="realms" interface="org.apache.karaf.jaas.config.JaasRealm" availability="optional"/>
-
-    <!-- Backing Engine Service -->
-    <bean id="engineService" class="org.apache.karaf.jaas.modules.BackingEngineService">
-        <property name="engineFactories" ref="engineFactories"/>
-    </bean>
-
-    <!-- Backing Engine Factories -->
-    <reference-list id="engineFactories" interface="org.apache.karaf.jaas.modules.BackingEngineFactory"
-                    availability="optional"/>
-
-    <!-- Completers -->
-    <bean id="realmCompleter" class="org.apache.karaf.jaas.command.completers.RealmCompleter">
-        <property name="realms" ref="realms"/>
-    </bean>
-
-    <bean id="moduleClassNameCompleter" class="org.apache.karaf.jaas.command.completers.LoginModuleNameCompleter">
-        <property name="realms" ref="realms"/>
-    </bean>
-
-</blueprint>
diff --git a/karaf-2.3.x/jaas/command/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/jaas/command/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 6432a50..0000000
--- a/karaf-2.3.x/jaas/command/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,26 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides Karaf shell commands to manipulate the JAAS security framework.
-
-    The following commands are available:
-    \u001B[36mjaas:cancel\u001B[0m Cancel the modification of a JAAS realm.
-    \u001B[36mjaas:pending\u001B[0m Lists the modification on the active realm/module.
-    \u001B[36mjaas:list\u001B[0m Lists the modification on the active realm/module.
-    \u001B[36mjaas:userlist\u001B[0m Lists the users of the active realm/module.
-    \u001B[36mjaas:manage\u001B[0m Manage user and roles of a Jaas Realm.
-    \u001B[36mjaas:roleadd\u001B[0m Add a role to a user.
-    \u001B[36mjaas:roledel\u001B[0m Delete a role from a user.
-    \u001B[36mjaas:update\u001B[0m Update JAAS realm.
-    \u001B[36mjaas:useradd\u001B[0m Add a user.
-    \u001B[36mjaas:userdel\u001B[0m Delete a user.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mSecurity\u001B[0m section of the Karaf User Guide.
-    \u001B[36mSeucrity Framework\u001B[0m section of the Karaf Developer Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/jaas/config/NOTICE b/karaf-2.3.x/jaas/config/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/jaas/config/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/jaas/config/pom.xml b/karaf-2.3.x/jaas/config/pom.xml
deleted file mode 100644
index c75795e..0000000
--- a/karaf-2.3.x/jaas/config/pom.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.jaas</groupId>
-        <artifactId>jaas</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.jaas.config</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: JAAS :: Config</name>
-    <description>This bundle provides the configuration facility for the JAAS security framework.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.karaf.jaas</groupId>
-            <artifactId>org.apache.karaf.jaas.boot</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf</groupId>
-            <artifactId>org.apache.karaf.util</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.osgi</groupId>
-            <artifactId>spring-osgi-core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.aries.blueprint</groupId>
-            <artifactId>org.apache.aries.blueprint.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Export-Package>${project.artifactId};version=${project.version}</Export-Package>
-                        <Import-Package>!${project.artifactId},*</Import-Package>
-                        <Private-Package>
-                            ${project.artifactId}.impl;-split-package:=merge-first,
-                            org.apache.karaf.util.collections
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/JaasRealm.java b/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/JaasRealm.java
deleted file mode 100644
index d3fc014..0000000
--- a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/JaasRealm.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.config;
-
-import javax.security.auth.login.AppConfigurationEntry;
-
-public interface JaasRealm {
-
-    public String getName();
-
-    public int getRank();
-
-    public AppConfigurationEntry[] getEntries();
-}
diff --git a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/KeyIsLocked.java b/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/KeyIsLocked.java
deleted file mode 100644
index e0e76f7..0000000
--- a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/KeyIsLocked.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.config;
-
-import java.security.GeneralSecurityException;
-
-public class KeyIsLocked extends GeneralSecurityException {
-
-    public KeyIsLocked() {
-        super();
-    }
-
-    public KeyIsLocked(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-    public KeyIsLocked(String msg) {
-        super(msg);
-    }
-
-    public KeyIsLocked(Throwable cause) {
-        super(cause);
-    }
-
-}
diff --git a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/KeystoreInstance.java b/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/KeystoreInstance.java
deleted file mode 100644
index 11e9ca2..0000000
--- a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/KeystoreInstance.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.config;
-
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.PrivateKey;
-import java.security.UnrecoverableKeyException;
-import java.security.cert.Certificate;
-
-import javax.net.ssl.KeyManager;
-import javax.net.ssl.TrustManager;
-
-/**
- * Based on http://svn.apache.org/repos/asf/geronimo/trunk/modules/management/
- *              src/java/org/apache/geronimo/management/geronimo/KeystoreInstance.java
- */
-public interface KeystoreInstance {
-
-    String getName();
-
-    int getRank();
-
-    String[] listPrivateKeys();
-
-    String[] listTrustCertificates();
-
-    Certificate getCertificate(String alias);
-
-    String getCertificateAlias(Certificate cert);
-
-    Certificate[] getCertificateChain(String alias);
-
-    PrivateKey getPrivateKey(String alias);
-
-    boolean isKeystoreLocked();
-
-    boolean isKeyLocked(String keyAlias);
-
-    KeyManager[] getKeyManager(String algorithm, String keyAlias) throws NoSuchAlgorithmException,
-                                UnrecoverableKeyException, KeyStoreException, KeystoreIsLocked;
-
-    TrustManager[] getTrustManager(String algorithm) throws KeyStoreException, NoSuchAlgorithmException, KeystoreIsLocked;
-
-}
diff --git a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/KeystoreIsLocked.java b/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/KeystoreIsLocked.java
deleted file mode 100644
index 1ee4dc8..0000000
--- a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/KeystoreIsLocked.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.config;
-
-import java.security.GeneralSecurityException;
-
-public class KeystoreIsLocked extends GeneralSecurityException {
-
-    public KeystoreIsLocked() {
-        super();
-    }
-
-    public KeystoreIsLocked(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-    public KeystoreIsLocked(String msg) {
-        super(msg);
-    }
-
-    public KeystoreIsLocked(Throwable cause) {
-        super(cause);
-    }
-
-}
diff --git a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/KeystoreManager.java b/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/KeystoreManager.java
deleted file mode 100644
index 146ba50..0000000
--- a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/KeystoreManager.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.config;
-
-import java.security.GeneralSecurityException;
-
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLServerSocketFactory;
-import javax.net.ssl.SSLSocketFactory;
-
-/**
- * Based on http://svn.apache.org/repos/asf/geronimo/trunk/modules/management/
- *                      src/java/org/apache/geronimo/management/geronimo/KeystoreManager.java
- *
- */
-public interface KeystoreManager {
-
-    KeystoreInstance getKeystore(String name);
-
-    /**
-     * Gets a SSLContext using one Keystore to access the private key
-     * and another to provide the list of trusted certificate authorities.
-     * @param provider
-     * @param protocol The SSL protocol to use
-     * @param algorithm The SSL algorithm to use
-     * @param keyStore The key keystore name as provided by listKeystores.  The
-     *                 KeystoreInstance for this keystore must be unlocked.
-     * @param keyAlias The name of the private key in the keystore.  The
-     *                 KeystoreInstance for this keystore must have unlocked
-     *                 this key.
-     * @param trustStore The trust keystore name as provided by listKeystores.
-     *                   The KeystoreInstance for this keystore must have
-     *                   unlocked this key.
-     * @param timeout Amount of time waiting for keyStore and keyAlias to be available.
-     *
-     * @throws KeystoreIsLocked Occurs when the requested key keystore cannot
-     *                          be used because it has not been unlocked.
-     * @throws KeyIsLocked Occurs when the requested private key in the key
-     *                     keystore cannot be used because it has not been
-     *                     unlocked.
-     */
-    SSLContext createSSLContext(String provider, String protocol,
-                                String algorithm, String keyStore,
-                                String keyAlias, String trustStore,
-                                long timeout) throws GeneralSecurityException;
-
-    /**
-     * Gets a SSLContext using one Keystore to access the private key
-     * and another to provide the list of trusted certificate authorities.
-     * @param provider
-     * @param protocol The SSL protocol to use
-     * @param algorithm The SSL algorithm to use
-     * @param keyStore The key keystore name as provided by listKeystores.  The
-     *                 KeystoreInstance for this keystore must be unlocked.
-     * @param keyAlias The name of the private key in the keystore.  The
-     *                 KeystoreInstance for this keystore must have unlocked
-     *                 this key.
-     * @param trustStore The trust keystore name as provided by listKeystores.
-     *                   The KeystoreInstance for this keystore must have
-     *                   unlocked this key.
-     *
-     * @throws KeystoreIsLocked Occurs when the requested key keystore cannot
-     *                          be used because it has not been unlocked.
-     * @throws KeyIsLocked Occurs when the requested private key in the key
-     *                     keystore cannot be used because it has not been
-     *                     unlocked.
-     */
-    SSLContext createSSLContext(String provider, String protocol,
-                                String algorithm, String keyStore,
-                                String keyAlias, String trustStore) throws GeneralSecurityException;
-
-    /**
-     * Gets a ServerSocketFactory using one Keystore to access the private key
-     * and another to provide the list of trusted certificate authorities.
-     * @param provider
-     * @param protocol The SSL protocol to use
-     * @param algorithm The SSL algorithm to use
-     * @param keyStore The key keystore name as provided by listKeystores.  The
-     *                 KeystoreInstance for this keystore must be unlocked.
-     * @param keyAlias The name of the private key in the keystore.  The
-     *                 KeystoreInstance for this keystore must have unlocked
-     *                 this key.
-     * @param trustStore The trust keystore name as provided by listKeystores.
-     *                   The KeystoreInstance for this keystore must have
-     *                   unlocked this key.
-     * @param timeout Amount of time waiting for keyStore and keyAlias to be available.
-     *
-     * @throws KeystoreIsLocked Occurs when the requested key keystore cannot
-     *                          be used because it has not been unlocked.
-     * @throws KeyIsLocked Occurs when the requested private key in the key
-     *                     keystore cannot be used because it has not been
-     *                     unlocked.
-     */
-    SSLServerSocketFactory createSSLServerFactory(String provider, String protocol,
-                                                  String algorithm, String keyStore,
-                                                  String keyAlias, String trustStore,
-                                                  long timeout) throws GeneralSecurityException;
-
-    /**
-     * Gets a ServerSocketFactory using one Keystore to access the private key
-     * and another to provide the list of trusted certificate authorities.
-     * @param provider
-     * @param protocol The SSL protocol to use
-     * @param algorithm The SSL algorithm to use
-     * @param keyStore The key keystore name as provided by listKeystores.  The
-     *                 KeystoreInstance for this keystore must be unlocked.
-     * @param keyAlias The name of the private key in the keystore.  The
-     *                 KeystoreInstance for this keystore must have unlocked
-     *                 this key.
-     * @param trustStore The trust keystore name as provided by listKeystores.
-     *                   The KeystoreInstance for this keystore must have
-     *                   unlocked this key.
-     *
-     * @throws KeystoreIsLocked Occurs when the requested key keystore cannot
-     *                          be used because it has not been unlocked.
-     * @throws KeyIsLocked Occurs when the requested private key in the key
-     *                     keystore cannot be used because it has not been
-     *                     unlocked.
-     */
-    SSLServerSocketFactory createSSLServerFactory(String provider, String protocol,
-                                                  String algorithm, String keyStore,
-                                                  String keyAlias, String trustStore) throws GeneralSecurityException;
-
-    /**
-     * Gets a SocketFactory using one Keystore to access the private key
-     * and another to provide the list of trusted certificate authorities.
-     * @param provider The SSL provider to use, or null for the default
-     * @param protocol The SSL protocol to use
-     * @param algorithm The SSL algorithm to use
-     * @param keyStore The key keystore name as provided by listKeystores.  The
-     *                 KeystoreInstance for this keystore must be unlocked.
-     * @param keyAlias The name of the private key in the keystore.  The
-     *                 KeystoreInstance for this keystore must have unlocked
-     *                 this key.
-     * @param trustStore The trust keystore name as provided by listKeystores.
-     *                   The KeystoreInstance for this keystore must have
-     *                   unlocked this key.
-     * @param timeout Amount of time waiting for keyStore and keyAlias to be available.
-     *
-     * @throws KeystoreIsLocked Occurs when the requested key keystore cannot
-     *                          be used because it has not been unlocked.
-     * @throws KeyIsLocked Occurs when the requested private key in the key
-     *                     keystore cannot be used because it has not been
-     *                     unlocked.
-     * @throws GeneralSecurityException
-     */
-    SSLSocketFactory createSSLFactory(String provider, String protocol,
-                                      String algorithm, String keyStore,
-                                      String keyAlias, String trustStore,
-                                      long timeout) throws GeneralSecurityException;
-
-    /**
-     * Gets a SocketFactory using one Keystore to access the private key
-     * and another to provide the list of trusted certificate authorities.
-     * @param provider The SSL provider to use, or null for the default
-     * @param protocol The SSL protocol to use
-     * @param algorithm The SSL algorithm to use
-     * @param keyStore The key keystore name as provided by listKeystores.  The
-     *                 KeystoreInstance for this keystore must be unlocked.
-     * @param keyAlias The name of the private key in the keystore.  The
-     *                 KeystoreInstance for this keystore must have unlocked
-     *                 this key.
-     * @param trustStore The trust keystore name as provided by listKeystores.
-     *                   The KeystoreInstance for this keystore must have
-     *                   unlocked this key.
-     *
-     * @throws KeystoreIsLocked Occurs when the requested key keystore cannot
-     *                          be used because it has not been unlocked.
-     * @throws KeyIsLocked Occurs when the requested private key in the key
-     *                     keystore cannot be used because it has not been
-     *                     unlocked.
-     * @throws GeneralSecurityException
-     */
-    SSLSocketFactory createSSLFactory(String provider, String protocol,
-                                      String algorithm, String keyStore,
-                                      String keyAlias, String trustStore) throws GeneralSecurityException;
-
-}
diff --git a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/Config.java b/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/Config.java
deleted file mode 100644
index b7966b1..0000000
--- a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/Config.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.config.impl;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.security.auth.login.AppConfigurationEntry;
-
-import org.apache.karaf.jaas.boot.ProxyLoginModule;
-import org.apache.karaf.jaas.config.JaasRealm;
-import org.osgi.framework.BundleContext;
-
-/**
- * An implementation of JaasRealm which is created
- * by the spring namespace handler.
- */
-public class Config implements JaasRealm {
-
-    private String name;
-    private int rank;
-    private Module[] modules;
-    private BundleContext bundleContext;
-    private transient AppConfigurationEntry[] entries;
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public int getRank() {
-        return rank;
-    }
-
-    public void setRank(int rank) {
-        this.rank = rank;
-    }
-
-    public Module[] getModules() {
-        return modules;
-    }
-
-    public void setModules(Module[] modules) {
-        this.modules = modules;
-        this.entries = null;
-    }
-
-    public BundleContext getBundleContext() {
-        return bundleContext;
-    }
-
-    public void setBundleContext(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-
-    public AppConfigurationEntry[] getEntries() {
-        if (this.entries == null && this.modules != null) {
-            Module[] modules = this.modules;
-            AppConfigurationEntry[] entries = new AppConfigurationEntry[modules.length];
-            for (int i = 0; i < modules.length; i++) {
-                Map<String,Object> options = new HashMap<String,Object>();
-                // put the bundle context in the options map
-                // it's required to be able to use the encryption service
-                // in the AbstractKarafLoginModule
-                options.put(BundleContext.class.getName(), bundleContext);
-                if (modules[i].getOptions() != null) {
-                    for (Map.Entry e : modules[i].getOptions().entrySet()) {
-                        options.put(e.getKey().toString(), e.getValue());
-                    }
-                }
-                options.put(ProxyLoginModule.PROPERTY_MODULE, modules[i].getClassName());
-                options.put(ProxyLoginModule.PROPERTY_BUNDLE, Long.toString(bundleContext.getBundle().getBundleId()));
-                entries[i] = new AppConfigurationEntry(ProxyLoginModule.class.getName(),
-                                                       getControlFlag(modules[i].getFlags()),
-                                                       options);
-            }
-            this.entries = entries;
-        }
-        return this.entries;
-    }
-
-    private AppConfigurationEntry.LoginModuleControlFlag getControlFlag(String flags) {
-        if ("required".equalsIgnoreCase(flags)) {
-            return AppConfigurationEntry.LoginModuleControlFlag.REQUIRED;
-        }
-        if ("optional".equalsIgnoreCase(flags)) {
-            return AppConfigurationEntry.LoginModuleControlFlag.OPTIONAL;
-        }
-        if ("requisite".equalsIgnoreCase(flags)) {
-            return AppConfigurationEntry.LoginModuleControlFlag.REQUISITE;
-        }
-        if ("sufficient".equalsIgnoreCase(flags)) {
-            return AppConfigurationEntry.LoginModuleControlFlag.SUFFICIENT;
-        }
-        return null;
-    }
-}
diff --git a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/Module.java b/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/Module.java
deleted file mode 100644
index 0a990d4..0000000
--- a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/Module.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.config.impl;
-
-import java.util.Properties;
-
-/**
- * POJO for a login module.
- * It contains the class name, flags and a map of options.
- */
-public class Module {
-
-    private String name;
-    private String className;
-    private String flags;
-    private Properties options;
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getClassName() {
-        return className;
-    }
-
-    public void setClassName(String className) {
-        this.className = className;
-    }
-
-    public String getFlags() {
-        return flags;
-    }
-
-    public void setFlags(String flags) {
-        this.flags = flags;
-    }
-
-    public Properties getOptions() {
-        return options;
-    }
-
-    public void setOptions(Properties options) {
-        this.options = options;
-    }
-
-}
diff --git a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/NamespaceHandler.java b/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/NamespaceHandler.java
deleted file mode 100644
index a6ed36c..0000000
--- a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/NamespaceHandler.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.config.impl;
-
-import org.apache.aries.blueprint.ParserContext;
-import org.apache.aries.blueprint.mutable.*;
-import org.apache.karaf.jaas.boot.ProxyLoginModule;
-import org.apache.karaf.jaas.config.JaasRealm;
-import org.apache.karaf.jaas.config.KeystoreInstance;
-import org.osgi.service.blueprint.container.ComponentDefinitionException;
-import org.osgi.service.blueprint.reflect.ComponentMetadata;
-import org.osgi.service.blueprint.reflect.Metadata;
-import org.osgi.service.blueprint.reflect.RefMetadata;
-import org.osgi.service.blueprint.reflect.ValueMetadata;
-import org.w3c.dom.*;
-
-import java.net.URL;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-
-public class NamespaceHandler implements org.apache.aries.blueprint.NamespaceHandler {
-
-    public URL getSchemaLocation(String namespace) {
-        if ("http://karaf.apache.org/xmlns/jaas/v1.0.0".equals(namespace)) {
-            return getClass().getResource("/org/apache/karaf/jaas/config/karaf-jaas-1.0.0.xsd");
-        } else {
-            return getClass().getResource("/org/apache/karaf/jaas/config/karaf-jaas-1.1.0.xsd");
-        }
-    }
-
-    public Set<Class> getManagedClasses() {
-        return new HashSet<Class>(Arrays.asList(
-                Config.class,
-                ResourceKeystoreInstance.class
-        ));
-    }
-
-    public Metadata parse(Element element, ParserContext context) {
-        String name = element.getLocalName() != null ? element.getLocalName() : element.getNodeName();
-        if ("config".equals(name)) {
-            return parseConfig(element, context);
-        } else if ("keystore".equals(name)) {
-            return parseKeystore(element, context);
-        }
-        throw new ComponentDefinitionException("Bad xml syntax: unknown element '" + name + "'");
-    }
-
-    public ComponentMetadata decorate(Node node, ComponentMetadata component, ParserContext context) {
-        throw new ComponentDefinitionException("Bad xml syntax: node decoration is not supported");
-    }
-
-    public ComponentMetadata parseConfig(Element element, ParserContext context) {
-        MutableBeanMetadata bean = context.createMetadata(MutableBeanMetadata.class);
-        bean.setRuntimeClass(Config.class);
-        String name = element.getAttribute("name");
-        bean.addProperty("bundleContext", createRef(context, "blueprintBundleContext"));
-        bean.addProperty("name", createValue(context, name));
-        String rank = element.getAttribute("rank");
-        if (rank != null && rank.length() > 0) {
-            bean.addProperty("rank", createValue(context, rank));
-        }
-        NodeList childElements = element.getElementsByTagNameNS(element.getNamespaceURI(), "module");
-        if (childElements != null && childElements.getLength() > 0) {
-            MutableCollectionMetadata children = context.createMetadata(MutableCollectionMetadata.class);
-            for (int i = 0; i < childElements.getLength(); ++i) {
-                Element childElement = (Element) childElements.item(i);
-                MutableBeanMetadata md = context.createMetadata(MutableBeanMetadata.class);
-                md.setRuntimeClass(Module.class);
-                md.addProperty("className", createValue(context, childElement.getAttribute("className")));
-                if (childElement.getAttribute("name") != null) {
-                    md.addProperty("name", createValue(context, childElement.getAttribute("name")));
-                }
-                if (childElement.getAttribute("flags") != null) {
-                    md.addProperty("flags", createValue(context, childElement.getAttribute("flags")));
-                }
-                String options = getTextValue(childElement);
-                if (options != null && options.length() > 0) {
-                    md.addProperty("options", createValue(context, options));
-                }
-                children.addValue(md);
-            }
-            bean.addProperty("modules", children);
-        }
-        // Publish Config
-        MutableServiceMetadata service = context.createMetadata(MutableServiceMetadata.class);
-        service.setId(name);
-        service.setServiceComponent(bean);
-        service.addInterface(JaasRealm.class.getName());
-        service.addServiceProperty(createValue(context, ProxyLoginModule.PROPERTY_MODULE), createValue(context, name));
-        return service;
-    }
-
-    public ComponentMetadata parseKeystore(Element element, ParserContext context) {
-        MutableBeanMetadata bean = context.createMetadata(MutableBeanMetadata.class);
-        bean.setRuntimeClass(ResourceKeystoreInstance.class);
-        // Parse name
-        String name = element.getAttribute("name");
-        bean.addProperty("name", createValue(context, name));
-        // Parse rank
-        String rank = element.getAttribute("rank");
-        if (rank != null && rank.length() > 0) {
-            bean.addProperty("rank", createValue(context, rank));
-        }
-        // Parse path
-        String path = element.getAttribute("path");
-        if (path != null && path.length() > 0) {
-            bean.addProperty("path", createValue(context, path));
-        }
-        // Parse keystorePassword
-        String keystorePassword = element.getAttribute("keystorePassword");
-        if (keystorePassword != null && keystorePassword.length() > 0) {
-            bean.addProperty("keystorePassword", createValue(context, keystorePassword));
-        }
-        // Parse keyPasswords
-        String keyPasswords = element.getAttribute("keyPasswords");
-        if (keyPasswords != null && keyPasswords.length() > 0) {
-            bean.addProperty("keyPasswords", createValue(context, keyPasswords));
-        }
-        // Publish Config
-        MutableServiceMetadata service = context.createMetadata(MutableServiceMetadata.class);
-        service.setId(name);
-        service.setServiceComponent(bean);
-        service.addInterface(KeystoreInstance.class.getName());
-        return service;
-    }
-
-    private ValueMetadata createValue(ParserContext context, String value) {
-        MutableValueMetadata v = context.createMetadata(MutableValueMetadata.class);
-        v.setStringValue(value);
-        return v;
-    }
-
-    private RefMetadata createRef(ParserContext context, String value) {
-        MutableRefMetadata r = context.createMetadata(MutableRefMetadata.class);
-        r.setComponentId(value);
-        return r;
-    }
-
-    private static String getTextValue(Element element) {
-        StringBuffer value = new StringBuffer();
-        NodeList nl = element.getChildNodes();
-        for (int i = 0; i < nl.getLength(); i++) {
-            Node item = nl.item(i);
-            if ((item instanceof CharacterData && !(item instanceof Comment)) || item instanceof EntityReference) {
-                value.append(item.getNodeValue());
-            }
-        }
-        return value.toString();
-    }
-}
diff --git a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/OsgiConfiguration.java b/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/OsgiConfiguration.java
deleted file mode 100644
index 6c995ba..0000000
--- a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/OsgiConfiguration.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.config.impl;
-
-import java.util.List;
-import java.util.Map;
-import javax.security.auth.login.AppConfigurationEntry;
-import javax.security.auth.login.Configuration;
-
-import org.apache.karaf.jaas.config.JaasRealm;
-import org.apache.karaf.util.collections.CopyOnWriteArrayIdentityList;
-
-public class OsgiConfiguration extends Configuration {
-
-    private final List<JaasRealm> realms = new CopyOnWriteArrayIdentityList<JaasRealm>();
-
-    public void init() {
-        Configuration.setConfiguration(this);
-    }
-
-    public void close() {
-        realms.clear();
-        Configuration.setConfiguration(null);
-    }
-
-    public void register(JaasRealm realm, Map<String,?> properties) {
-        if (realm != null) {
-            realms.add(realm);
-        }
-    }
-
-    public void unregister(JaasRealm realm, Map<String,?> properties) {
-        if (realm != null) {
-            realms.remove(realm);
-        }
-    }
-
-    public AppConfigurationEntry[] getAppConfigurationEntry(String name) {
-        JaasRealm realm = null;
-        for (JaasRealm r : realms) {
-            if (r.getName().equals(name)) {
-                if (realm == null || r.getRank() > realm.getRank()) {
-                    realm = r;
-                }
-            }
-        }
-        if (realm != null) {
-            return realm.getEntries();
-        }
-        return null;
-    }
-
-    public void refresh() {
-        // Nothing to do, as we auto-update the configuration
-    }
-}
diff --git a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/OsgiKeystoreManager.java b/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/OsgiKeystoreManager.java
deleted file mode 100644
index 3cc43d9..0000000
--- a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/OsgiKeystoreManager.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.config.impl;
-
-import java.security.GeneralSecurityException;
-import java.security.SecureRandom;
-import java.util.List;
-import java.util.Map;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLServerSocketFactory;
-import javax.net.ssl.SSLSocketFactory;
-
-import org.apache.karaf.jaas.config.KeystoreInstance;
-import org.apache.karaf.jaas.config.KeystoreIsLocked;
-import org.apache.karaf.jaas.config.KeystoreManager;
-import org.apache.karaf.util.collections.CopyOnWriteArrayIdentityList;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Implementation of KeystoreManager
- */
-public class OsgiKeystoreManager implements KeystoreManager {
-
-    private final static transient Logger logger = LoggerFactory.getLogger(OsgiKeystoreManager.class);
-
-    private List<KeystoreInstance> keystores = new CopyOnWriteArrayIdentityList<KeystoreInstance>();
-
-    public void register(KeystoreInstance keystore, Map<String,?> properties) {
-        keystores.add(keystore);
-    }
-
-    public void unregister(KeystoreInstance keystore, Map<String,?> properties) {
-        keystores.remove(keystore);
-    }
-
-    public KeystoreInstance getKeystore(String name) {
-        KeystoreInstance keystore = null;
-        for (KeystoreInstance ks : keystores) {
-            if (ks.getName().equals(name)) {
-                if (keystore == null || keystore.getRank() < ks.getRank()) {
-                    keystore = ks;
-                }
-            }
-        }
-        return keystore;
-    }
-
-    public SSLContext createSSLContext(String provider, String protocol, String algorithm, String keyStore, String keyAlias, String trustStore) throws GeneralSecurityException {
-        return createSSLContext(provider, protocol, algorithm, keyStore, keyAlias, trustStore, 0);
-    }
-
-    public SSLContext createSSLContext(String provider, String protocol, String algorithm, String keyStore, String keyAlias, String trustStore, long timeout) throws GeneralSecurityException {
-
-        if (!this.checkForKeystoresAvailability(keyStore, keyAlias, trustStore, timeout)) {
-            throw new GeneralSecurityException("Unable to lookup configured keystore and/or truststore");
-        }
-
-        KeystoreInstance keyInstance = getKeystore(keyStore);
-        if (keyInstance != null && keyInstance.isKeystoreLocked()) {
-            throw new KeystoreIsLocked("Keystore '" + keyStore + "' is locked");
-        }
-        if (keyInstance != null && keyInstance.isKeyLocked(keyAlias)) {
-            throw new KeystoreIsLocked("Key '" + keyAlias + "' in keystore '" + keyStore + "' is locked");
-        }
-        KeystoreInstance trustInstance = trustStore == null ? null : getKeystore(trustStore);
-        if (trustInstance != null && trustInstance.isKeystoreLocked()) {
-            throw new KeystoreIsLocked("Keystore '" + trustStore + "' is locked");
-        }
-        SSLContext context;
-        if (provider == null) {
-            context = SSLContext.getInstance(protocol);
-        } else {
-            context = SSLContext.getInstance(protocol, provider);
-        }
-        context.init(keyInstance == null ? null : keyInstance.getKeyManager(algorithm, keyAlias),
-                     trustInstance == null ? null : trustInstance.getTrustManager(algorithm), new SecureRandom());
-        return context;
-    }
-
-    public SSLServerSocketFactory createSSLServerFactory(String provider, String protocol, String algorithm, String keyStore, String keyAlias, String trustStore) throws GeneralSecurityException {
-        return createSSLServerFactory(provider, protocol, algorithm, keyStore, keyAlias, trustStore, 0);
-    }
-
-    public SSLServerSocketFactory createSSLServerFactory(String provider, String protocol, String algorithm, String keyStore, String keyAlias, String trustStore, long timeout) throws GeneralSecurityException {
-        SSLContext context = createSSLContext(provider, protocol, algorithm, keyStore, keyAlias, trustStore, timeout);
-        return context.getServerSocketFactory();
-    }
-
-    public SSLSocketFactory createSSLFactory(String provider, String protocol, String algorithm, String keyStore, String keyAlias, String trustStore) throws GeneralSecurityException {
-        return createSSLFactory(provider, protocol, algorithm, keyStore, keyAlias, trustStore, 0);
-    }
-
-    public SSLSocketFactory createSSLFactory(String provider, String protocol, String algorithm, String keyStore, String keyAlias, String trustStore, long timeout) throws GeneralSecurityException {
-        SSLContext context = createSSLContext(provider, protocol, algorithm, keyStore, keyAlias, trustStore, timeout);
-        return context.getSocketFactory();
-    }
-
-    /**
-     * Purely check for the availability of provided key stores and key
-
-     * @param keyStore
-     * @param keyAlias
-     * @param trustStore
-     * @param timeout
-     */
-    private boolean checkForKeystoresAvailability( String keyStore, String keyAlias, String trustStore, long timeout ) throws GeneralSecurityException {
-        long start = System.currentTimeMillis();
-        while (true) {
-            KeystoreInstance keyInstance = getKeystore(keyStore);
-            KeystoreInstance trustInstance = trustStore == null ? null : getKeystore(trustStore);
-            if (keyStore != null && keyInstance == null) {
-                logger.info( "Keystore {} not found", keyStore );
-            } else if (keyStore != null && keyInstance.isKeystoreLocked()) {
-                logger.info( "Keystore {} locked", keyStore );
-            } else if (keyStore != null && keyAlias != null && keyInstance.isKeyLocked(keyAlias)) {
-                logger.info( "Keystore's key {} locked", keyAlias );
-            } else if (trustStore != null && trustInstance == null) {
-                logger.info( "Truststore {} not found", trustStore );
-            } else if (trustStore != null && trustInstance.isKeystoreLocked()) {
-                logger.info( "Truststore {} locked", keyStore );
-            } else {
-                return true;
-            }
-            if (System.currentTimeMillis() - start < timeout) {
-                try {
-                    Thread.sleep(1000);
-                } catch (InterruptedException e) {
-                    throw new GeneralSecurityException("Interrupted", e);
-                }
-            } else {
-                return false;
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/ProxyLoginModuleInitializer.java b/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/ProxyLoginModuleInitializer.java
deleted file mode 100644
index acdee67..0000000
--- a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/ProxyLoginModuleInitializer.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.config.impl;
-
-import org.apache.karaf.jaas.boot.ProxyLoginModule;
-import org.osgi.framework.BundleContext;
-
-public class ProxyLoginModuleInitializer {
-
-    private BundleContext bundleContext;
-
-    public void setBundleContext(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-
-    public void init() {
-        BundleContext context = bundleContext.getBundle(0).getBundleContext();
-        ProxyLoginModule.init(context);
-    }
-}
diff --git a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/ResourceKeystoreInstance.java b/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/ResourceKeystoreInstance.java
deleted file mode 100644
index f2c7260..0000000
--- a/karaf-2.3.x/jaas/config/src/main/java/org/apache/karaf/jaas/config/impl/ResourceKeystoreInstance.java
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.config.impl;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.Key;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.PrivateKey;
-import java.security.UnrecoverableKeyException;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateException;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.net.URL;
-import java.net.URI;
-
-import javax.net.ssl.KeyManager;
-import javax.net.ssl.KeyManagerFactory;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.TrustManagerFactory;
-
-import org.apache.karaf.jaas.config.KeystoreInstance;
-import org.apache.karaf.jaas.config.KeystoreIsLocked;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- *
- */
-public class ResourceKeystoreInstance implements KeystoreInstance {
-
-    private final Logger logger = LoggerFactory.getLogger(ResourceKeystoreInstance.class);
-
-    private static final String JKS = "JKS";
-
-    private String name;
-    private int rank;
-    private URL path;
-    private String keystorePassword;
-    private Map keyPasswords = new HashMap();
-    private File keystoreFile; // Only valid after startup and if the resource points to a file
-
-    // The following variables are the state of the keystore, which should be chucked if the file on disk changes
-    private List privateKeys = new ArrayList();
-    private List trustCerts = new ArrayList();
-    private KeyStore keystore;
-    private long keystoreReadDate = Long.MIN_VALUE;
-
-    /**
-     * @return the keystoreName
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * @param keystoreName the keystoreName to set
-     */
-    public void setName(String keystoreName) {
-        this.name = keystoreName;
-    }
-
-    /**
-     * @return the rank
-     */
-    public int getRank() {
-        return rank;
-    }
-
-    /**
-     * @param rank the rank to set
-     */
-    public void setRank(int rank) {
-        this.rank = rank;
-    }
-
-    /**
-     * @return the keystorePath
-     */
-    public URL getPath() {
-        return path;
-    }
-
-    /**
-     * @param keystorePath the keystorePath to set
-     */
-    public void setPath(URL keystorePath) throws IOException {
-        this.path = keystorePath;
-        if (keystorePath.getProtocol().equals("file")) {
-            URI uri = URI.create(keystorePath.toString().replace(" ", "%20"));
-            this.keystoreFile = new File(uri.getSchemeSpecificPart());
-        }
-    }
-
-    /**
-     * @param keystorePassword the keystorePassword to set
-     */
-    public void setKeystorePassword(String keystorePassword) {
-        this.keystorePassword = keystorePassword;
-    }
-
-    /**
-     * @param keyPasswords the keyPasswords to set
-     */
-    public void setKeyPasswords(String keyPasswords) {
-        if (keyPasswords != null) {
-            String[] keys = keyPasswords.split("\\]\\!\\[");
-            for (int i = 0; i < keys.length; i++) {
-                String key = keys[i];
-                int pos = key.indexOf('=');
-                this.keyPasswords.put(key.substring(0, pos), key.substring(pos + 1).toCharArray());
-            }
-        }
-    }
-
-    public Certificate getCertificate(String alias) {
-        if (!loadKeystoreData()) {
-            return null;
-        }
-        try {
-            return keystore.getCertificate(alias);
-        } catch (KeyStoreException e) {
-            logger.error("Unable to read certificate from keystore", e);
-        }
-        return null;
-    }
-
-    public String getCertificateAlias(Certificate cert) {
-        if (!loadKeystoreData()) {
-            return null;
-        }
-        try {
-            return keystore.getCertificateAlias(cert);
-        } catch (KeyStoreException e) {
-            logger.error("Unable to read retrieve alias for given certificate from keystore", e);
-        }
-        return null;
-    }
-
-    public Certificate[] getCertificateChain(String alias) {
-        if (!loadKeystoreData()) {
-            return null;
-        }
-        try {
-            return keystore.getCertificateChain(alias);
-        } catch (KeyStoreException e) {
-            logger.error("Unable to read certificate chain from keystore", e);
-        }
-        return null;
-    }
-
-    public KeyManager[] getKeyManager(String algorithm, String keyAlias) throws KeystoreIsLocked,
-                                    NoSuchAlgorithmException, KeyStoreException, UnrecoverableKeyException {
-        if (isKeystoreLocked()) {
-            throw new KeystoreIsLocked("Keystore '" + name + "' is locked.");
-        }
-        if (!loadKeystoreData()) {
-            return null;
-        }
-        KeyManagerFactory keyFactory = KeyManagerFactory.getInstance(algorithm);
-        keyFactory.init(keystore, (char[]) keyPasswords.get(keyAlias));
-        return keyFactory.getKeyManagers();
-    }
-
-    public PrivateKey getPrivateKey(String alias) {
-        if (!loadKeystoreData()) {
-            return null;
-        }
-        try {
-            if (isKeyLocked(alias)) {
-                return null;
-            }
-            Key key = keystore.getKey(alias, (char[]) keyPasswords.get(alias));
-            if (key instanceof PrivateKey) {
-                return (PrivateKey) key;
-            }
-        } catch (KeyStoreException e) {
-            logger.error("Unable to read private key from keystore", e);
-        } catch (NoSuchAlgorithmException e) {
-            logger.error("Unable to read private key from keystore", e);
-        } catch (UnrecoverableKeyException e) {
-            logger.error("Unable to read private key from keystore", e);
-        }
-        return null;
-    }
-
-    public TrustManager[] getTrustManager(String algorithm) throws KeyStoreException,
-                                            NoSuchAlgorithmException, KeystoreIsLocked {
-        if (isKeystoreLocked()) {
-            throw new KeystoreIsLocked("Keystore '" + name + "' is locked.");
-        }
-        if (!loadKeystoreData()) {
-            return null;
-        }
-        TrustManagerFactory trustFactory = TrustManagerFactory.getInstance(algorithm);
-        trustFactory.init(keystore);
-        return trustFactory.getTrustManagers();
-    }
-
-    public boolean isKeyLocked(String keyAlias) {
-        return keyPasswords.get(keyAlias) == null;
-    }
-
-    public boolean isKeystoreLocked() {
-        return keystorePassword == null;
-    }
-
-    public String[] listPrivateKeys() {
-        if (!loadKeystoreData()) {
-            return null;
-        }
-        return (String[]) privateKeys.toArray(new String[privateKeys.size()]);
-    }
-
-    public String[] listTrustCertificates() {
-        if (!loadKeystoreData()) {
-            return null;
-        }
-        return (String[]) trustCerts.toArray(new String[trustCerts.size()]);
-    }
-
-    // ==================== Internals =====================
-
-    private boolean loadKeystoreData() {
-        // Check to reload the data if needed
-        if (keystoreFile != null && keystoreReadDate >= keystoreFile.lastModified()) {
-            return true;
-        }
-        // If not a file, just not reload the data if it has already been loaded
-        if (keystoreFile == null && keystore != null) {
-            return true;
-        }
-        // Check if the file is invalid
-        if (keystoreFile != null && (!keystoreFile.exists() || !keystoreFile.canRead())) {
-            throw new IllegalArgumentException("Invalid keystore file (" + path + " = " + keystoreFile.getAbsolutePath() + ")");
-        }
-        // Load the keystore data
-        try {
-            keystoreReadDate = System.currentTimeMillis();
-            privateKeys.clear();
-            trustCerts.clear();
-            if (keystore == null) {
-                keystore = KeyStore.getInstance(JKS);
-            }
-            InputStream in = new BufferedInputStream(path.openStream());
-            keystore.load(in, keystorePassword == null ? new char[0] : keystorePassword.toCharArray());
-            in.close();
-            Enumeration aliases = keystore.aliases();
-            while (aliases.hasMoreElements()) {
-                String alias = (String) aliases.nextElement();
-                if (keystore.isKeyEntry(alias)) {
-                    privateKeys.add(alias);
-                } else if (keystore.isCertificateEntry(alias)) {
-                    trustCerts.add(alias);
-                }
-            }
-            return true;
-        } catch (KeyStoreException e) {
-            logger.error("Unable to open keystore with provided password", e);
-        } catch (IOException e) {
-            logger.error("Unable to open keystore with provided password", e);
-        } catch (NoSuchAlgorithmException e) {
-            logger.error("Unable to open keystore with provided password", e);
-        } catch (CertificateException e) {
-            logger.error("Unable to open keystore with provided password", e);
-        }
-        return false;
-    }
-
-}
diff --git a/karaf-2.3.x/jaas/config/src/main/resources/OSGI-INF/blueprint/karaf-jaas.xml b/karaf-2.3.x/jaas/config/src/main/resources/OSGI-INF/blueprint/karaf-jaas.xml
deleted file mode 100644
index 8698f87..0000000
--- a/karaf-2.3.x/jaas/config/src/main/resources/OSGI-INF/blueprint/karaf-jaas.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
-    <bean id="config"
-          class="org.apache.karaf.jaas.config.impl.OsgiConfiguration"
-          init-method="init"
-          destroy-method="close"/>
-
-    <reference-list id="realms"
-                    interface="org.apache.karaf.jaas.config.JaasRealm"
-                    availability="optional">
-        <reference-listener ref="config" bind-method="register" unbind-method="unregister" />
-    </reference-list>
-
-    <bean id="proxyLoginModuleInitializer" class="org.apache.karaf.jaas.config.impl.ProxyLoginModuleInitializer" init-method="init">
-        <property name="bundleContext" ref="blueprintBundleContext"/>
-    </bean>
-
-    <!-- Register the Straight-Through flow -->
-    <bean id="keystoreManager" class="org.apache.karaf.jaas.config.impl.OsgiKeystoreManager" />
-    <service ref="keystoreManager" interface="org.apache.karaf.jaas.config.KeystoreManager" />
-
-    <reference-list id="keystores"
-                    interface="org.apache.karaf.jaas.config.KeystoreInstance"
-                    availability="optional">
-        <reference-listener ref="keystoreManager" bind-method="register" unbind-method="unregister" />
-    </reference-list>
-
-    <service interface="org.apache.aries.blueprint.NamespaceHandler">
-        <service-properties>
-            <entry key="osgi.service.blueprint.namespace">
-                <array>
-                    <value>http://karaf.apache.org/xmlns/jaas/v1.0.0</value>
-                    <value>http://karaf.apache.org/xmlns/jaas/v1.1.0</value>
-                </array>
-            </entry>
-        </service-properties>
-        <bean class="org.apache.karaf.jaas.config.impl.NamespaceHandler"/>
-    </service>
-
-</blueprint>
diff --git a/karaf-2.3.x/jaas/config/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/jaas/config/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 17e17f4..0000000
--- a/karaf-2.3.x/jaas/config/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,18 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle manages the configuration of the JAAS security framework.
-
-    In particular it  initializes the JAAS ProxyLoginModule and manages the Karaf JAAS namespaces:
-    \u001B[33mhttp://karaf.apache.org/xmlns/jaas/v1.0.0\u001B[0m
-    \u001B[33mhttp://karaf.apache.org/xmlns/jaas/v1.1.0\u001B[0m
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mSecurity\u001B[0m section of the Karaf User Guide.
-    \u001B[36mSecurity Framework\u001B[0m section of the Karaf Developer Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/jaas/config/src/main/resources/org/apache/karaf/jaas/config/karaf-jaas-1.0.0.xsd b/karaf-2.3.x/jaas/config/src/main/resources/org/apache/karaf/jaas/config/karaf-jaas-1.0.0.xsd
deleted file mode 100644
index 225665c..0000000
--- a/karaf-2.3.x/jaas/config/src/main/resources/org/apache/karaf/jaas/config/karaf-jaas-1.0.0.xsd
+++ /dev/null
@@ -1,62 +0,0 @@
-<?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.
-
--->
-<xs:schema elementFormDefault='qualified'
-           targetNamespace='http://karaf.apache.org/xmlns/jaas/v1.0.0'
-           xmlns:xs='http://www.w3.org/2001/XMLSchema'
-           xmlns:bp="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:tns='http://karaf.apache.org/xmlns/jaas/v1.0.0'>
-
-    <xs:import namespace="http://www.osgi.org/xmlns/blueprint/v1.0.0"/>
-
-    <xs:element name="config">
-        <xs:complexType>
-            <xs:sequence>
-                <xs:element name="module" minOccurs="0" maxOccurs="unbounded">
-                    <xs:complexType mixed="true">
-                        <xs:attribute name="className" use="required" type="xs:string"/>
-                        <xs:attribute name="flags" default="required">
-                            <xs:simpleType>
-                                <xs:restriction base="xs:NMTOKEN">
-                                    <xs:enumeration value="required"/>
-                                    <xs:enumeration value="requisite"/>
-                                    <xs:enumeration value="sufficient"/>
-                                    <xs:enumeration value="optional"/>
-                                </xs:restriction>
-                            </xs:simpleType>
-                        </xs:attribute>
-                    </xs:complexType>
-                </xs:element>
-            </xs:sequence>
-            <xs:attribute name="name" use="required" type="xs:string"/>
-            <xs:attribute name="rank" use="optional" default="0" type="xs:int"/>
-        </xs:complexType>
-    </xs:element>
-
-    <xs:element name="keystore">
-        <xs:complexType>
-            <xs:attribute name="name" use="required" type="xs:string"/>
-            <xs:attribute name="rank" use="optional" default="0" type="xs:int"/>
-            <xs:attribute name="path" use="required" type="xs:string"/>
-            <xs:attribute name="keystorePassword" use="optional" type="xs:string"/>
-            <xs:attribute name="keyPasswords" use="optional" type="xs:string"/>
-        </xs:complexType>
-    </xs:element>
-
-</xs:schema>
diff --git a/karaf-2.3.x/jaas/config/src/main/resources/org/apache/karaf/jaas/config/karaf-jaas-1.1.0.xsd b/karaf-2.3.x/jaas/config/src/main/resources/org/apache/karaf/jaas/config/karaf-jaas-1.1.0.xsd
deleted file mode 100644
index f56b206..0000000
--- a/karaf-2.3.x/jaas/config/src/main/resources/org/apache/karaf/jaas/config/karaf-jaas-1.1.0.xsd
+++ /dev/null
@@ -1,63 +0,0 @@
-<?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.
-
--->
-<xs:schema elementFormDefault='qualified'
-           targetNamespace='http://karaf.apache.org/xmlns/jaas/v1.1.0'
-           xmlns:xs='http://www.w3.org/2001/XMLSchema'
-           xmlns:bp="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:tns='http://karaf.apache.org/xmlns/jaas/v1.1.0'>
-
-    <xs:import namespace="http://www.osgi.org/xmlns/blueprint/v1.0.0"/>
-
-    <xs:element name="config">
-        <xs:complexType>
-            <xs:sequence>
-                <xs:element name="module" minOccurs="0" maxOccurs="unbounded">
-                    <xs:complexType mixed="true">
-                        <xs:attribute name="name" use="optional" type="xs:string"/>
-                        <xs:attribute name="className" use="required" type="xs:string"/>
-                        <xs:attribute name="flags" default="required">
-                            <xs:simpleType>
-                                <xs:restriction base="xs:NMTOKEN">
-                                    <xs:enumeration value="required"/>
-                                    <xs:enumeration value="requisite"/>
-                                    <xs:enumeration value="sufficient"/>
-                                    <xs:enumeration value="optional"/>
-                                </xs:restriction>
-                            </xs:simpleType>
-                        </xs:attribute>
-                    </xs:complexType>
-                </xs:element>
-            </xs:sequence>
-            <xs:attribute name="name" use="required" type="xs:string"/>
-            <xs:attribute name="rank" use="optional" default="0" type="xs:int"/>
-        </xs:complexType>
-    </xs:element>
-
-    <xs:element name="keystore">
-        <xs:complexType>
-            <xs:attribute name="name" use="required" type="xs:string"/>
-            <xs:attribute name="rank" use="optional" default="0" type="xs:int"/>
-            <xs:attribute name="path" use="required" type="xs:string"/>
-            <xs:attribute name="keystorePassword" use="optional" type="xs:string"/>
-            <xs:attribute name="keyPasswords" use="optional" type="xs:string"/>
-        </xs:complexType>
-    </xs:element>
-
-</xs:schema>
diff --git a/karaf-2.3.x/jaas/jasypt/NOTICE b/karaf-2.3.x/jaas/jasypt/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/jaas/jasypt/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/jaas/jasypt/pom.xml b/karaf-2.3.x/jaas/jasypt/pom.xml
deleted file mode 100644
index b25962e..0000000
--- a/karaf-2.3.x/jaas/jasypt/pom.xml
+++ /dev/null
@@ -1,154 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-    
-    <modelVersion>4.0.0</modelVersion>
-    
-    <parent>
-        <groupId>org.apache.karaf.jaas</groupId>
-        <artifactId>jaas</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-    
-    <artifactId>org.apache.karaf.jaas.jasypt</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: JAAS :: Jasypt Encryption</name>
-    <description>This bundle provide Jasypt service for the encryption support in the JAAS security framework.</description>
-    
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-    
-    <dependencies>
-    
-        <dependency>
-            <groupId>org.apache.karaf.jaas</groupId>
-            <artifactId>org.apache.karaf.jaas.modules</artifactId>    
-        </dependency>
-        
-        <dependency>
-            <groupId>org.apache.servicemix.bundles</groupId>
-            <artifactId>org.apache.servicemix.bundles.jasypt</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.aries.blueprint</groupId>
-            <artifactId>org.apache.aries.blueprint.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.aries.blueprint</groupId>
-            <artifactId>org.apache.aries.blueprint.cm</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.configadmin</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <!-- Force osgi 4.2 so that blueprint bundle tracker works correctly -->
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <version>4.2.0</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>com.googlecode.pojosr</groupId>
-            <artifactId>de.kalpatec.pojosr.framework</artifactId>
-            <version>0.1.6</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.ops4j.pax.swissbox</groupId>
-            <artifactId>pax-swissbox-tinybundles</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.aries.proxy</groupId>
-            <artifactId>org.apache.aries.proxy.impl</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <version>${slf4j.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>jcl-over-slf4j</artifactId>
-            <version>${slf4j.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            *
-                        </Import-Package>
-                        <Private-Package>
-                            org.apache.karaf.jaas.jasypt.impl,
-                            com.ibm.icu*
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/karaf-2.3.x/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/handler/EncryptablePropertyPlaceholder.java b/karaf-2.3.x/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/handler/EncryptablePropertyPlaceholder.java
deleted file mode 100644
index c8e518e..0000000
--- a/karaf-2.3.x/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/handler/EncryptablePropertyPlaceholder.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *  Licensed 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.
- *  under the License.
- */
-package org.apache.karaf.jaas.jasypt.handler;
-
-import org.apache.aries.blueprint.ext.AbstractPropertyPlaceholder;
-import org.jasypt.encryption.StringEncryptor;
-
-public class EncryptablePropertyPlaceholder extends AbstractPropertyPlaceholder {
-
-    private StringEncryptor encryptor;
-
-    public StringEncryptor getEncryptor() {
-        return encryptor;
-    }
-
-    public void setEncryptor(StringEncryptor encryptor) {
-        this.encryptor = encryptor;
-    }
-
-    public void init() {
-
-    }
-
-    @Override
-    protected String getProperty(String val) {
-        return encryptor.decrypt(val);
-    }
-
-}
diff --git a/karaf-2.3.x/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/handler/NamespaceHandler.java b/karaf-2.3.x/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/handler/NamespaceHandler.java
deleted file mode 100644
index 4a196c0..0000000
--- a/karaf-2.3.x/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/handler/NamespaceHandler.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- *  Licensed 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.
- *  under the License.
- */
-package org.apache.karaf.jaas.jasypt.handler;
-
-import java.net.URL;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.aries.blueprint.ParserContext;
-import org.apache.aries.blueprint.ext.PlaceholdersUtils;
-import org.apache.aries.blueprint.mutable.MutableBeanMetadata;
-import org.apache.aries.blueprint.mutable.MutableCollectionMetadata;
-import org.apache.aries.blueprint.mutable.MutableRefMetadata;
-import org.apache.aries.blueprint.mutable.MutableValueMetadata;
-import org.osgi.service.blueprint.container.ComponentDefinitionException;
-import org.osgi.service.blueprint.reflect.BeanMetadata;
-import org.osgi.service.blueprint.reflect.CollectionMetadata;
-import org.osgi.service.blueprint.reflect.ComponentMetadata;
-import org.osgi.service.blueprint.reflect.Metadata;
-import org.osgi.service.blueprint.reflect.RefMetadata;
-import org.osgi.service.blueprint.reflect.ValueMetadata;
-import org.w3c.dom.CharacterData;
-import org.w3c.dom.Comment;
-import org.w3c.dom.Element;
-import org.w3c.dom.EntityReference;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-public class NamespaceHandler implements org.apache.aries.blueprint.NamespaceHandler {
-
-    public static final String ID_ATTRIBUTE = "id";
-    public static final String PLACEHOLDER_PREFIX_ATTRIBUTE = "placeholder-prefix";
-    public static final String PLACEHOLDER_SUFFIX_ATTRIBUTE = "placeholder-suffix";
-    public static final String PROPERTY_PLACEHOLDER_ELEMENT = "property-placeholder";
-    public static final String ENCRYPTOR_REF_ATTRIBUTE = "encryptor-ref";
-    public static final String ENCRYPTOR_ELEMENT = "encryptor";
-    public static final String JASYPT_NAMESPACE_1_0 = "http://karaf.apache.org/xmlns/jasypt/v1.0.0";
-
-    private int idCounter;
-
-    public URL getSchemaLocation(String s) {
-        return getClass().getResource("/org/apache/karaf/jaas/jasypt/handler/karaf-jasypt-1.0.0.xsd");
-    }
-
-    public Set<Class> getManagedClasses() {
-        return new HashSet<Class>(Arrays.asList(
-                EncryptablePropertyPlaceholder.class
-        ));
-    }
-
-    public Metadata parse(Element element, ParserContext context) {
-        String name = element.getLocalName() != null ? element.getLocalName() : element.getNodeName();
-        if (PROPERTY_PLACEHOLDER_ELEMENT.equals(name)) {
-            return parsePropertyPlaceholder(element, context);
-        }
-        throw new ComponentDefinitionException("Bad xml syntax: unknown element '" + name + "'");
-    }
-
-    public ComponentMetadata decorate(Node node, ComponentMetadata componentMetadata, ParserContext parserContext) {
-        throw new ComponentDefinitionException("Bad xml syntax: node decoration is not supported");
-    }
-
-    public ComponentMetadata parsePropertyPlaceholder(Element element, ParserContext context) {
-        MutableBeanMetadata metadata = context.createMetadata(MutableBeanMetadata.class);
-        metadata.setProcessor(true);
-        metadata.setId(getId(context, element));
-        metadata.setScope(BeanMetadata.SCOPE_SINGLETON);
-        metadata.setRuntimeClass(EncryptablePropertyPlaceholder.class);
-        metadata.setInitMethod("init");
-        String prefix = element.hasAttribute(PLACEHOLDER_PREFIX_ATTRIBUTE)
-                                    ? element.getAttribute(PLACEHOLDER_PREFIX_ATTRIBUTE)
-                                    : "ENC(";
-        metadata.addProperty("placeholderPrefix", createValue(context, prefix));
-        String suffix = element.hasAttribute(PLACEHOLDER_SUFFIX_ATTRIBUTE)
-                                    ? element.getAttribute(PLACEHOLDER_SUFFIX_ATTRIBUTE)
-                                    : ")";
-        metadata.addProperty("placeholderSuffix", createValue(context, suffix));
-        String encryptorRef = element.hasAttribute("encryptor-ref")
-                                    ? element.getAttribute("encryptor-ref")
-                                    : null;
-        if (encryptorRef != null) {
-            metadata.addProperty("encryptor", createRef(context, encryptorRef));
-        }
-        NodeList nl = element.getChildNodes();
-        for (int i = 0; i < nl.getLength(); i++) {
-            Node node = nl.item(i);
-            if (node instanceof Element) {
-                Element e = (Element) node;
-                if (JASYPT_NAMESPACE_1_0.equals(e.getNamespaceURI())) {
-                    String name = e.getLocalName() != null ? e.getLocalName() : e.getNodeName();
-                    if (ENCRYPTOR_ELEMENT.equals(name)) {
-                        if (encryptorRef != null) {
-                            throw new ComponentDefinitionException("Only one of " + ENCRYPTOR_REF_ATTRIBUTE + " attribute or " + ENCRYPTOR_ELEMENT + " element is allowed");
-                        }
-                        BeanMetadata encryptor = context.parseElement(BeanMetadata.class, metadata, e);
-                        metadata.addProperty("encryptor", encryptor);
-                    }
-                }
-            }
-        }
-        PlaceholdersUtils.validatePlaceholder(metadata, context.getComponentDefinitionRegistry());
-        return metadata;
-    }
-
-    public String getId(ParserContext context, Element element) {
-        if (element.hasAttribute(ID_ATTRIBUTE)) {
-            return element.getAttribute(ID_ATTRIBUTE);
-        } else {
-            return generateId(context);
-        }
-    }
-
-    private String generateId(ParserContext context) {
-        String id;
-        do {
-            id = ".jaas-" + ++idCounter;
-        } while (context.getComponentDefinitionRegistry().containsComponentDefinition(id));
-        return id;
-    }
-
-    private static ValueMetadata createValue(ParserContext context, String value) {
-        return createValue(context, value, null);
-    }
-
-    private static ValueMetadata createValue(ParserContext context, String value, String type) {
-        MutableValueMetadata m = context.createMetadata(MutableValueMetadata.class);
-        m.setStringValue(value);
-        m.setType(type);
-        return m;
-    }
-
-    private static CollectionMetadata createList(ParserContext context, List<String> list) {
-        MutableCollectionMetadata m = context.createMetadata(MutableCollectionMetadata.class);
-        m.setCollectionClass(List.class);
-        m.setValueType(String.class.getName());
-        for (String v : list) {
-            m.addValue(createValue(context, v, String.class.getName()));
-        }
-        return m;
-    }
-
-    private RefMetadata createRef(ParserContext context, String value) {
-        MutableRefMetadata r = context.createMetadata(MutableRefMetadata.class);
-        r.setComponentId(value);
-        return r;
-    }
-
-    private static String getTextValue(Element element) {
-        StringBuffer value = new StringBuffer();
-        NodeList nl = element.getChildNodes();
-        for (int i = 0; i < nl.getLength(); i++) {
-            Node item = nl.item(i);
-            if ((item instanceof CharacterData && !(item instanceof Comment)) || item instanceof EntityReference) {
-                value.append(item.getNodeValue());
-            }
-        }
-        return value.toString();
-    }
-}
diff --git a/karaf-2.3.x/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryption.java b/karaf-2.3.x/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryption.java
deleted file mode 100644
index 99311a8..0000000
--- a/karaf-2.3.x/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryption.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- *  Licensed 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.
- *  under the License.
- */
-package org.apache.karaf.jaas.jasypt.impl;
-
-import java.util.Map;
-
-import org.apache.karaf.jaas.modules.Encryption;
-import org.apache.karaf.jaas.modules.EncryptionService;
-import org.jasypt.digest.config.DigesterConfig;
-import org.jasypt.digest.config.SimpleDigesterConfig;
-import org.jasypt.digest.config.SimpleStringDigesterConfig;
-import org.jasypt.exceptions.EncryptionInitializationException;
-import org.jasypt.util.password.ConfigurablePasswordEncryptor;
-
-/**
- * Jasypt implementation of the Encryption service.
- */
-public class JasyptEncryption implements Encryption {
-
-    private ConfigurablePasswordEncryptor passwordEncryptor;
-    
-    /**
-     * <p>
-     * Default constructor with the encryption algorithm.
-     * </p>
-     * 
-     * @param params encryption parameters
-     */
-    public JasyptEncryption(Map<String,String> params) {
-        SimpleStringDigesterConfig config = new SimpleStringDigesterConfig();
-        for (String key : params.keySet()) {
-            if (EncryptionService.ALGORITHM.equalsIgnoreCase(key)) {
-                config.setAlgorithm(params.get(key));
-            } else if (EncryptionService.ENCODING.equalsIgnoreCase(key)) {
-                config.setStringOutputType(params.get(key));
-            } else if ("providerName".equalsIgnoreCase(key)) {
-                config.setProviderName(params.get(key));
-            } else if ("saltSizeBytes".equalsIgnoreCase(key)) {
-                config.setSaltSizeBytes(params.get(key));
-            } else if ("iterations".equalsIgnoreCase(key)) {
-                config.setIterations(params.get(key));
-            } else if ("providerClassName".equalsIgnoreCase(key)) {
-                config.setProviderClassName(params.get(key));
-            } else if ("saltGeneratorClassName".equalsIgnoreCase(key)) {
-                config.setSaltGeneratorClassName(params.get(key));
-            } else {
-                throw new IllegalArgumentException("Unsupported encryption parameter: " + key);
-            }
-        }
-        this.passwordEncryptor = new ConfigurablePasswordEncryptor();
-        this.passwordEncryptor.setConfig(config);
-        try {
-            this.passwordEncryptor.encryptPassword("test");
-        } catch (EncryptionInitializationException e) {
-            throw new IllegalArgumentException(e);
-        }
-    }
-    
-    /*
-     * (non-Javadoc)
-     * @see org.apache.karaf.jaas.modules.Encryption#encryptPassword(java.lang.String)
-     */
-    public String encryptPassword(String plain) {
-        return this.passwordEncryptor.encryptPassword(plain);
-    }
-    
-    /*
-     * (non-Javadoc)
-     * @see org.apache.karaf.jaas.modules.Encryption#checkPassword(java.lang.String, java.lang.String)
-     */
-    public boolean checkPassword(String input, String password) {
-        return passwordEncryptor.checkPassword(input, password);
-    }
-    
-}
diff --git a/karaf-2.3.x/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryptionService.java b/karaf-2.3.x/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryptionService.java
deleted file mode 100644
index 24c49af..0000000
--- a/karaf-2.3.x/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryptionService.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- *  Licensed 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.
- *  under the License.
- */
-package org.apache.karaf.jaas.jasypt.impl;
-
-import java.util.Map;
-
-import org.apache.karaf.jaas.modules.Encryption;
-import org.apache.karaf.jaas.modules.EncryptionService;
-
-public class JasyptEncryptionService implements EncryptionService {
-
-    public Encryption createEncryption(Map<String, String> params) throws IllegalArgumentException {
-        return new JasyptEncryption(params);
-    }
-}
diff --git a/karaf-2.3.x/jaas/jasypt/src/main/resources/OSGI-INF/blueprint/karaf-jaas-jasypt.xml b/karaf-2.3.x/jaas/jasypt/src/main/resources/OSGI-INF/blueprint/karaf-jaas-jasypt.xml
deleted file mode 100644
index e74ee76..0000000
--- a/karaf-2.3.x/jaas/jasypt/src/main/resources/OSGI-INF/blueprint/karaf-jaas-jasypt.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
-    <service interface="org.apache.karaf.jaas.modules.EncryptionService">
-        <service-properties>
-            <entry key="name" value="jasypt" />
-        </service-properties>
-        <bean class="org.apache.karaf.jaas.jasypt.impl.JasyptEncryptionService"/>
-    </service>
-
-    <service interface="org.apache.aries.blueprint.NamespaceHandler">
-        <service-properties>
-            <entry key="osgi.service.blueprint.namespace">
-                <array>
-                    <value>http://karaf.apache.org/xmlns/jasypt/v1.0.0</value>
-                </array>
-            </entry>
-        </service-properties>
-        <bean class="org.apache.karaf.jaas.jasypt.handler.NamespaceHandler"/>
-    </service>
-
-</blueprint>
\ No newline at end of file
diff --git a/karaf-2.3.x/jaas/jasypt/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/jaas/jasypt/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index d191ded..0000000
--- a/karaf-2.3.x/jaas/jasypt/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,26 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle uses the Jasypt tool to provide encryption support in the JAAS security framework.
-
-    Jasypt is a java library which allows the developer to add basic encryption capabilities to his/her projects
-    with minimum effort, and without the need of having deep knowledge on how cryptography works.
-
-    * High-security, standards-based encryption techniques, both for unidirectional and bidirectional encryption.
-      Encrypt passwords, texts, numbers, binaries...
-    * Transparent integration with Hibernate.
-    * Suitable for integration into Spring-based applications and also transparently integrable with Spring Security.
-    * Integrated capabilities for encrypting the configuration of applications (i.e. datasources).
-    * Specific features for high-performance encryption in multi-processor/multi-core systems.
-    * Open API for use with any JCE provider.
-    * ...and much more
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mSecurity Framework\u001B[0m section of the Karaf Developer Guide.
-    \u001B[36mhttp://www.jasypt.org/\u001B[0m
\ No newline at end of file
diff --git a/karaf-2.3.x/jaas/jasypt/src/main/resources/org/apache/karaf/jaas/jasypt/handler/karaf-jasypt-1.0.0.xsd b/karaf-2.3.x/jaas/jasypt/src/main/resources/org/apache/karaf/jaas/jasypt/handler/karaf-jasypt-1.0.0.xsd
deleted file mode 100644
index f5e6921..0000000
--- a/karaf-2.3.x/jaas/jasypt/src/main/resources/org/apache/karaf/jaas/jasypt/handler/karaf-jasypt-1.0.0.xsd
+++ /dev/null
@@ -1,43 +0,0 @@
-<?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.
-
--->
-<xs:schema elementFormDefault='qualified'
-           targetNamespace='http://karaf.apache.org/xmlns/jasypt/v1.0.0'
-           xmlns:xs='http://www.w3.org/2001/XMLSchema'
-           xmlns:bp="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:tns='http://karaf.apache.org/xmlns/jasypt/v1.0.0'>
-
-    <xs:import namespace="http://www.osgi.org/xmlns/blueprint/v1.0.0"/>
-
-    <xs:element name="property-placeholder">
-        <xs:complexType>
-            <xs:complexContent>
-                <xs:extension base="bp:Tcomponent">
-                    <xs:sequence>
-                        <xs:element maxOccurs="1" minOccurs="0" name="encryptor" type="bp:Tbean"/>
-                    </xs:sequence>
-                    <xs:attribute name="placeholder-prefix" type="xs:string" use="optional" default="ENC("/>
-                    <xs:attribute name="placeholder-suffix" type="xs:string" use="optional" default=")"/>
-                    <xs:attribute name="encryptor-ref" type="bp:Tidref" use="optional"/>
-                </xs:extension>
-            </xs:complexContent>
-        </xs:complexType>
-    </xs:element>
-
-</xs:schema>
diff --git a/karaf-2.3.x/jaas/jasypt/src/test/java/org/apache/karaf/jaas/jasypt/handler/EncryptablePropertyPlaceholderTest.java b/karaf-2.3.x/jaas/jasypt/src/test/java/org/apache/karaf/jaas/jasypt/handler/EncryptablePropertyPlaceholderTest.java
deleted file mode 100644
index 0e7c274..0000000
--- a/karaf-2.3.x/jaas/jasypt/src/test/java/org/apache/karaf/jaas/jasypt/handler/EncryptablePropertyPlaceholderTest.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- *  Licensed 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.
- *  under the License.
- */
-package org.apache.karaf.jaas.jasypt.handler;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URL;
-import java.util.Collection;
-import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.jar.JarInputStream;
-
-import de.kalpatec.pojosr.framework.PojoServiceRegistryFactoryImpl;
-import de.kalpatec.pojosr.framework.launch.BundleDescriptor;
-import de.kalpatec.pojosr.framework.launch.ClasspathScanner;
-import de.kalpatec.pojosr.framework.launch.PojoServiceRegistry;
-import de.kalpatec.pojosr.framework.launch.PojoServiceRegistryFactory;
-import junit.framework.TestCase;
-import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
-import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.ops4j.pax.swissbox.tinybundles.core.TinyBundle;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-import org.osgi.framework.Filter;
-import org.osgi.framework.FrameworkUtil;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
-import org.osgi.util.tracker.ServiceTracker;
-
-import static org.ops4j.pax.swissbox.tinybundles.core.TinyBundles.newBundle;
-
-public class EncryptablePropertyPlaceholderTest extends TestCase {
-
-    public static final long DEFAULT_TIMEOUT = 30000;
-
-    private BundleContext bundleContext;
-
-    @Before
-    public void setUp() throws Exception {
-
-        StandardPBEStringEncryptor enc = new StandardPBEStringEncryptor();
-        EnvironmentStringPBEConfig env = new EnvironmentStringPBEConfig();
-        env.setAlgorithm("PBEWithMD5AndDES");
-        env.setPassword("password");
-        enc.setConfig(env);
-        String val = enc.encrypt("bar");
-        System.setProperty("foo", val);
-
-        System.setProperty("org.osgi.framework.storage", "target/osgi/" + System.currentTimeMillis());
-        System.setProperty("karaf.name", "root");
-
-        List<BundleDescriptor> bundles = new ClasspathScanner().scanForBundles("(Bundle-SymbolicName=*)");
-        bundles.add(getBundleDescriptor(
-                "target/jasypt.jar",
-                newBundle().add("OSGI-INF/blueprint/karaf-jaas-jasypt.xml", getClass().getResource("/OSGI-INF/blueprint/karaf-jaas-jasypt.xml"))
-                           .set("Manifest-Version", "2")
-                           .set("Bundle-ManifestVersion", "2")
-                           .set("Bundle-SymbolicName", "jasypt")
-                           .set("Bundle-Version", "0.0.0")));
-        bundles.add(getBundleDescriptor(
-                "target/test.jar",
-                newBundle().add("OSGI-INF/blueprint/test.xml", getClass().getResource("test.xml"))
-                           .set("Manifest-Version", "2")
-                           .set("Bundle-ManifestVersion", "2")
-                           .set("Bundle-SymbolicName", "test")
-                           .set("Bundle-Version", "0.0.0")));
-
-        Map config = new HashMap();
-        config.put(PojoServiceRegistryFactory.BUNDLE_DESCRIPTORS, bundles);
-        PojoServiceRegistry reg = new PojoServiceRegistryFactoryImpl().newPojoServiceRegistry(config);
-        bundleContext = reg.getBundleContext();
-    }
-
-    private BundleDescriptor getBundleDescriptor(String path, TinyBundle bundle) throws Exception {
-        File file = new File(path);
-        FileOutputStream fos = new FileOutputStream(file);
-        copy(bundle.build(), fos);
-        fos.close();
-        JarInputStream jis = new JarInputStream(new FileInputStream(file));
-        Map<String, String> headers = new HashMap<String, String>();
-        for (Map.Entry entry : jis.getManifest().getMainAttributes().entrySet()) {
-            headers.put(entry.getKey().toString(), entry.getValue().toString());
-        }
-        return new BundleDescriptor(
-                getClass().getClassLoader(),
-                new URL("jar:" + file.toURI().toString() + "!/"),
-                headers);
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        bundleContext.getBundle().stop();
-    }
-
-    @Test
-    public void testPlaceholder() throws Exception {
-
-        for (Bundle bundle: bundleContext.getBundles()) {
-            System.out.println(bundle.getSymbolicName() + " / " + bundle.getVersion());
-        }
-
-        String encoded = getOsgiService(String.class, "(encoded=*)");
-        assertEquals("bar", encoded);
-    }
-
-
-    protected <T> T getOsgiService(Class<T> type, long timeout) {
-        return getOsgiService(type, null, timeout);
-    }
-
-    protected <T> T getOsgiService(Class<T> type) {
-        return getOsgiService(type, null, DEFAULT_TIMEOUT);
-    }
-
-    protected <T> T getOsgiService(Class<T> type, String filter) {
-        return getOsgiService(type, filter, DEFAULT_TIMEOUT);
-    }
-
-    protected <T> T getOsgiService(Class<T> type, String filter, long timeout) {
-        ServiceTracker tracker = null;
-        try {
-            String flt;
-            if (filter != null) {
-                if (filter.startsWith("(")) {
-                    flt = "(&(" + Constants.OBJECTCLASS + "=" + type.getName() + ")" + filter + ")";
-                } else {
-                    flt = "(&(" + Constants.OBJECTCLASS + "=" + type.getName() + ")(" + filter + "))";
-                }
-            } else {
-                flt = "(" + Constants.OBJECTCLASS + "=" + type.getName() + ")";
-            }
-            Filter osgiFilter = FrameworkUtil.createFilter(flt);
-            tracker = new ServiceTracker(bundleContext, osgiFilter, null);
-            tracker.open(true);
-            // Note that the tracker is not closed to keep the reference
-            // This is buggy, as the service reference may change i think
-            Object svc = type.cast(tracker.waitForService(timeout));
-            if (svc == null) {
-                Dictionary dic = bundleContext.getBundle().getHeaders();
-                System.err.println("Test bundle headers: " + explode(dic));
-
-                for (ServiceReference ref : asCollection(bundleContext.getAllServiceReferences(null, null))) {
-                    System.err.println("ServiceReference: " + ref);
-                }
-
-                for (ServiceReference ref : asCollection(bundleContext.getAllServiceReferences(null, flt))) {
-                    System.err.println("Filtered ServiceReference: " + ref);
-                }
-
-                throw new RuntimeException("Gave up waiting for service " + flt);
-            }
-            return type.cast(svc);
-        } catch (InvalidSyntaxException e) {
-            throw new IllegalArgumentException("Invalid filter", e);
-        } catch (InterruptedException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    /*
-     * Explode the dictionary into a ,-delimited list of key=value pairs
-     */
-    private static String explode(Dictionary dictionary) {
-        Enumeration keys = dictionary.keys();
-        StringBuffer result = new StringBuffer();
-        while (keys.hasMoreElements()) {
-            Object key = keys.nextElement();
-            result.append(String.format("%s=%s", key, dictionary.get(key)));
-            if (keys.hasMoreElements()) {
-                result.append(", ");
-            }
-        }
-        return result.toString();
-    }
-
-    /*
-     * Provides an iterable collection of references, even if the original array is null
-     */
-    private static final Collection<ServiceReference> asCollection(ServiceReference[] references) {
-        List<ServiceReference> result = new LinkedList<ServiceReference>();
-        if (references != null) {
-            for (ServiceReference reference : references) {
-                result.add(reference);
-            }
-        }
-        return result;
-    }
-
-    public static long copy(final InputStream input, final OutputStream output) throws IOException {
-        return copy(input, output, 8024);
-    }
-
-    public static long copy(final InputStream input, final OutputStream output, int buffersize) throws IOException {
-        final byte[] buffer = new byte[buffersize];
-        int n;
-        long count=0;
-        while (-1 != (n = input.read(buffer))) {
-            output.write(buffer, 0, n);
-            count += n;
-        }
-        return count;
-    }
-
-}
diff --git a/karaf-2.3.x/jaas/jasypt/src/test/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryptionTest.java b/karaf-2.3.x/jaas/jasypt/src/test/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryptionTest.java
deleted file mode 100644
index a118ef9..0000000
--- a/karaf-2.3.x/jaas/jasypt/src/test/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryptionTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- *  Licensed 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.
- *  under the License.
- */
-package org.apache.karaf.jaas.jasypt.impl;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import junit.framework.TestCase;
-import org.apache.karaf.jaas.modules.EncryptionService;
-
-/**
- * Test <code>JasyptEncryption</code>.
- */
-public class JasyptEncryptionTest extends TestCase {
-    
-    private JasyptEncryption encryption;
-    
-    /*
-     * (non-Javadoc)
-     * @see junit.framework.TestCase#setUp()
-     */
-    public void setUp() {
-        Map<String,String> props = new HashMap<String,String>();
-        props.put(EncryptionService.ALGORITHM, "MD5");
-        this.encryption = new JasyptEncryption(props);
-    }
-    
-    /**
-     * <p>
-     * Test <code>checkPassword()</p> method.
-     * </p>
-     * 
-     * @throws Exception in case of test error.
-     */
-    public void testCheckPassword() throws Exception {
-        String password = this.encryption.encryptPassword("test");
-        
-        assertEquals(true, this.encryption.checkPassword("test", password));
-    }
-    
-}
diff --git a/karaf-2.3.x/jaas/jasypt/src/test/resources/log4j.properties b/karaf-2.3.x/jaas/jasypt/src/test/resources/log4j.properties
deleted file mode 100644
index e1cbdd1..0000000
--- a/karaf-2.3.x/jaas/jasypt/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-## ---------------------------------------------------------------------------
-## 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.
-## ---------------------------------------------------------------------------
-
-#
-# The logging properties used during tests..
-#
-log4j.rootLogger=DEBUG, console, file
-
-# Console will only display warnnings
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %-32.32C %4L | %m%n
-#log4j.appender.console.threshold=WARN
-
-# File appender will contain all info messages
-log4j.appender.file=org.apache.log4j.FileAppender
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d | %-5p | %m | %c | %t%n
-log4j.appender.file.file=target/test.log
-log4j.appender.file.append=true
diff --git a/karaf-2.3.x/jaas/jasypt/src/test/resources/org/apache/karaf/jaas/jasypt/handler/config-adminTest.xml b/karaf-2.3.x/jaas/jasypt/src/test/resources/org/apache/karaf/jaas/jasypt/handler/config-adminTest.xml
deleted file mode 100644
index a0f6619..0000000
--- a/karaf-2.3.x/jaas/jasypt/src/test/resources/org/apache/karaf/jaas/jasypt/handler/config-adminTest.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?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.
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-        xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"
-        xmlns:enc="http://karaf.apache.org/xmlns/jasypt/v1.0.0"
-        xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0">
-
-    <cm:property-placeholder persistent-id="encrypt.config" update-strategy="reload" >
-        <cm:default-properties>
-            <cm:property name="encoded" value="ENC(${foo})"/>
-        </cm:default-properties>
-    </cm:property-placeholder>
-
-    <enc:property-placeholder>
-        <enc:encryptor class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
-            <property name="config">
-                <bean class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
-                    <property name="algorithm" value="PBEWithMD5AndDES" />
-                    <property name="password" value="password" />
-                </bean>
-            </property>
-        </enc:encryptor>
-    </enc:property-placeholder>
-
-</blueprint>
\ No newline at end of file
diff --git a/karaf-2.3.x/jaas/jasypt/src/test/resources/org/apache/karaf/jaas/jasypt/handler/test.xml b/karaf-2.3.x/jaas/jasypt/src/test/resources/org/apache/karaf/jaas/jasypt/handler/test.xml
deleted file mode 100644
index 5829d63..0000000
--- a/karaf-2.3.x/jaas/jasypt/src/test/resources/org/apache/karaf/jaas/jasypt/handler/test.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?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.
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-        xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"
-        xmlns:enc="http://karaf.apache.org/xmlns/jasypt/v1.0.0">
-
-
-    <ext:property-placeholder />
-
-    <enc:property-placeholder>
-        <enc:encryptor class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
-            <property name="config">
-                <bean class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
-                    <property name="algorithm" value="PBEWithMD5AndDES" />
-                    <property name="password" value="password" />
-                </bean>
-            </property>
-        </enc:encryptor>
-    </enc:property-placeholder>
-
-    <service auto-export="all-classes">
-        <service-properties>
-            <entry key="encoded" value="ENC(${foo})" />
-        </service-properties>
-        <bean class="java.lang.String">
-            <argument value="ENC(${foo})" />
-        </bean>
-    </service>
-
-</blueprint>
\ No newline at end of file
diff --git a/karaf-2.3.x/jaas/modules/NOTICE b/karaf-2.3.x/jaas/modules/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/jaas/modules/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/jaas/modules/pom.xml b/karaf-2.3.x/jaas/modules/pom.xml
deleted file mode 100644
index 18fdd1c..0000000
--- a/karaf-2.3.x/jaas/modules/pom.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.jaas</groupId>
-        <artifactId>jaas</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.jaas.modules</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: JAAS :: Modules</name>
-    <description>This bundle provides JAAS modules which can be used in Karaf (LDAP, JDBC, etc).</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.karaf.jaas</groupId>
-            <artifactId>org.apache.karaf.jaas.config</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.jaas</groupId>
-            <artifactId>org.apache.karaf.jaas.boot</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.utils</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.osgi</groupId>
-            <artifactId>spring-osgi-core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.aries.blueprint</groupId>
-            <artifactId>org.apache.aries.blueprint.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            javax.net,
-                            org.apache.karaf.jaas.config,
-                            org.apache.aries.blueprint.ext,
-                            *
-                        </Import-Package>
-                        <Private-Package>
-                            org.apache.felix.utils*
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/AbstractKarafLoginModule.java b/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/AbstractKarafLoginModule.java
deleted file mode 100644
index 17624fc..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/AbstractKarafLoginModule.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- *  Licensed 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.
- *  under the License.
- */
-package org.apache.karaf.jaas.modules;
-
-import java.security.Principal;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import javax.security.auth.Subject;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.login.LoginException;
-import javax.security.auth.spi.LoginModule;
-
-import org.apache.karaf.jaas.modules.encryption.EncryptionSupport;
-import org.apache.karaf.jaas.boot.principal.RolePolicy;
-import org.osgi.framework.BundleContext;
-
-public abstract class AbstractKarafLoginModule implements LoginModule {
-
-    protected Set<Principal> principals = new HashSet<Principal>();
-    protected Subject subject;
-    protected String user;
-    protected CallbackHandler callbackHandler;
-    protected boolean debug;
-    protected Map<String, ?> options;
-   
-    protected String rolePolicy;
-    protected String roleDiscriminator;
-    protected boolean detailedLoginExcepion;
-
-    /**
-     * the bundle context is required to use the encryption service
-     */
-    protected BundleContext bundleContext;
-
-    private EncryptionSupport encryptionSupport;
-
-    public boolean commit() throws LoginException {
-        if (principals.isEmpty()) {
-            return false;
-        }
-        RolePolicy policy = RolePolicy.getPolicy(rolePolicy);
-        if (policy != null && roleDiscriminator != null) {
-            policy.handleRoles(subject, principals, roleDiscriminator);
-        } else {
-            subject.getPrincipals().addAll(principals);
-        }
-        return true;
-    }
-
-    protected void clear() {
-        user = null;
-    }
-
-    public void initialize(Subject sub, CallbackHandler handler, Map options) {
-        this.subject = sub;
-        this.callbackHandler = handler;
-        this.options = options;
-        this.rolePolicy = (String) options.get("role.policy");
-        this.roleDiscriminator = (String) options.get("role.discriminator");
-        this.debug = Boolean.parseBoolean((String) options.get("debug"));
-        this.detailedLoginExcepion = Boolean.parseBoolean((String) options.get("detailed.login.exception"));
-        // the bundle context is set in the Config JaasRealm by default
-        this.bundleContext = (BundleContext) options.get(BundleContext.class.getName());
-        encryptionSupport = new EncryptionSupport(options);
-    }
-
-
-    public String getEncryptedPassword(String password) {
-        Encryption encryption = encryptionSupport.getEncryption();
-        String encryptionPrefix = encryptionSupport.getEncryptionPrefix();
-        String encryptionSuffix = encryptionSupport.getEncryptionSuffix();
-
-        if (encryption == null) {
-            return password;
-        } else {
-            boolean prefix = encryptionPrefix == null || password.startsWith(encryptionPrefix);
-            boolean suffix = encryptionSuffix == null || password.endsWith(encryptionSuffix);
-            if (prefix && suffix) {
-                return password;
-            } else {
-                String p = encryption.encryptPassword(password);
-                if (encryptionPrefix != null) {
-                    p = encryptionPrefix + p;
-                }
-                if (encryptionSuffix != null) {
-                    p = p + encryptionSuffix;
-                }
-                return p;
-            }
-        }
-    }
-
-    public boolean checkPassword(String plain, String encrypted) {
-        Encryption encryption = encryptionSupport.getEncryption();
-        String encryptionPrefix = encryptionSupport.getEncryptionPrefix();
-        String encryptionSuffix = encryptionSupport.getEncryptionSuffix();
-
-        if (encryption == null) {
-            return plain.equals(encrypted);
-        } else {
-            boolean prefix = encryptionPrefix == null || encrypted.startsWith(encryptionPrefix);
-            boolean suffix = encryptionSuffix == null || encrypted.endsWith(encryptionSuffix);
-            if (prefix && suffix) {
-                encrypted = encrypted.substring(encryptionPrefix != null ? encryptionPrefix.length() : 0,
-                        encrypted.length() - (encryptionSuffix != null ? encryptionSuffix.length() : 0));
-                return encryption.checkPassword(plain, encrypted);
-            } else {
-                return plain.equals(encrypted);
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/BackingEngine.java b/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/BackingEngine.java
deleted file mode 100644
index 07a3d0b..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/BackingEngine.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- *  Licensed 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.
- *  under the License.
- */
-package org.apache.karaf.jaas.modules;
-
-import java.util.List;
-
-import org.apache.karaf.jaas.boot.principal.RolePrincipal;
-import org.apache.karaf.jaas.boot.principal.UserPrincipal;
-
-public interface BackingEngine {
-
-    /**
-     * Create a new User.
-     *
-     * @param username
-     * @param password
-     */
-    void addUser(String username, String password);
-
-    /**
-     * Delete User
-     *
-     * @param username
-     */
-    void deleteUser(String username);
-
-    /**
-     * List Users
-     */
-    List<UserPrincipal> listUsers();
-
-    /**
-     * List Roles for {@param user}.
-     *
-     * @param user
-     * @return
-     */
-    List<RolePrincipal> listRoles(UserPrincipal user);
-
-    /**
-     * Add a role to the user
-     *
-     * @param username
-     * @param role
-     */
-    void addRole(String username, String role);
-
-    /**
-     * Remove a role from a user.
-     *
-     * @param username
-     * @param role
-     */
-    void deleteRole(String username, String role);
-
-}
diff --git a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/BackingEngineFactory.java b/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/BackingEngineFactory.java
deleted file mode 100644
index 22cad9dc..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/BackingEngineFactory.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.modules;
-
-import java.util.Map;
-
-public interface BackingEngineFactory {
-
-    /**
-     * Returns the corresponding module class.
-     *
-     * @return
-     */
-    String getModuleClass();
-
-
-    /**
-     * Backing engine factory method.
-     *
-     * @param options
-     * @return
-     */
-    BackingEngine build(Map options);
-}
diff --git a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/BackingEngineService.java b/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/BackingEngineService.java
deleted file mode 100644
index f978cf2..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/BackingEngineService.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.modules;
-
-import org.apache.karaf.jaas.boot.ProxyLoginModule;
-
-import javax.security.auth.login.AppConfigurationEntry;
-import java.util.List;
-
-public class BackingEngineService {
-
-    private List<BackingEngineFactory> engineFactories;
-
-    public BackingEngine get(AppConfigurationEntry entry) {
-
-        if (engineFactories != null) {
-            for (BackingEngineFactory factory : engineFactories) {
-                String loginModuleClass = (String) entry.getOptions().get(ProxyLoginModule.PROPERTY_MODULE);
-                if (factory.getModuleClass().equals(loginModuleClass)) {
-                    return factory.build(entry.getOptions());
-                }
-            }
-        }
-        return null;
-    }
-
-    public List<BackingEngineFactory> getEngineFactories() {
-        return engineFactories;
-    }
-
-    public void setEngineFactories(List<BackingEngineFactory> engineFactories) {
-        this.engineFactories = engineFactories;
-    }
-}
diff --git a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/Encryption.java b/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/Encryption.java
deleted file mode 100644
index 8fe568d..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/Encryption.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *  Licensed 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.
- *  under the License.
- */
-package org.apache.karaf.jaas.modules;
-
-public interface Encryption {
-    
-    /**
-     * <p>
-     * Encrypt a password.
-     * </p>
-     * 
-     * @param plain the password in plain format.
-     * @return the encrypted password format.
-     */
-    public String encryptPassword(String plain);
-    
-    /**
-     * <p>
-     * Check password.
-     * </p>
-     * 
-     * @param input password provided in plain format.
-     * @param password the encrypted format to compare with.
-     * @return true if the password match, false else.
-     */
-    public boolean checkPassword(String input, String password);
-
-}
diff --git a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/EncryptionService.java b/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/EncryptionService.java
deleted file mode 100644
index a1438a5..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/EncryptionService.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- *  Licensed 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.
- *  under the License.
- */
-package org.apache.karaf.jaas.modules;
-
-import java.util.Map;
-
-/**
- */
-public interface EncryptionService {
-
-    String ALGORITHM = "algorithm";
-
-    String ALGORITHM_MD2 = "MD2";
-    String ALGORITHM_MD5 = "MD5";
-    String ALGORITHM_SHA1 = "SHA-1";
-    String ALGORITHM_SHA256 = "SHA-256";
-    String ALGORITHM_SHA384 = "SHA-384";
-    String ALGORITHM_SHA512 = "SHA-512";
-
-    String ENCODING = "encoding";
-
-    String ENCODING_HEXADECIMAL = "hexadecimal";
-    String ENCODING_BASE64 = "base64";
-
-    /**
-     * Create an encryption service with the specified parameters.
-     * If the parameters are not supported, a <code>null</code> should
-     * be returned or an IllegalArgumentException thrown.
-     *
-     * @param params
-     * @return
-     * @throws IllegalArgumentException
-     */
-    Encryption createEncryption(Map<String,String> params) throws IllegalArgumentException;
-
-}
diff --git a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/encryption/BasicEncryption.java b/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/encryption/BasicEncryption.java
deleted file mode 100644
index 28fcbb0..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/encryption/BasicEncryption.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- *  Licensed 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.
- *  under the License.
- */
-package org.apache.karaf.jaas.modules.encryption;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.Map;
-
-import org.apache.karaf.jaas.modules.Encryption;
-import org.apache.karaf.jaas.modules.EncryptionService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class BasicEncryption implements Encryption {
-
-    private static final Logger log = LoggerFactory.getLogger(BasicEncryption.class);
-
-    private String algorithm;
-    private String encoding;
-    private MessageDigest md;
-
-    public BasicEncryption(Map<String, String> params) {
-        for (String key : params.keySet()) {
-            if (EncryptionService.ALGORITHM.equalsIgnoreCase(key)) {
-                algorithm = params.get(key);
-            } else if (EncryptionService.ENCODING.equalsIgnoreCase(key)) {
-                encoding = params.get(key);
-            } else {
-                throw new IllegalArgumentException("Unsupported encryption parameter: " + key);
-            }
-        }
-        if (algorithm == null) {
-            throw new IllegalArgumentException("Digest algorithm must be specified");
-        }
-        // Check if the algorithm algorithm is available
-        try {
-            md = MessageDigest.getInstance(algorithm);
-        } catch (NoSuchAlgorithmException e) {
-            log.error("Initialization failed. Digest algorithm " + algorithm + " is not available.", e);
-            throw new IllegalArgumentException("Unable to configure login module: " + e.getMessage(), e);
-        }
-        if (encoding != null && encoding.length() > 0
-                && !EncryptionService.ENCODING_HEXADECIMAL.equalsIgnoreCase(encoding)
-                && !EncryptionService.ENCODING_BASE64.equalsIgnoreCase(encoding)) {
-            log.error("Initialization failed. Digest encoding " + encoding + " is not supported.");
-            throw new IllegalArgumentException(
-                    "Unable to configure login module. Digest Encoding " + encoding + " not supported.");
-        }
-    }
-
-    public String encryptPassword(String password) {
-        if (password == null) {
-            return null;
-        }
-        // Digest the user provided password
-        byte[] data = md.digest(password.getBytes());
-        if (encoding == null || encoding.length() == 0 || EncryptionService.ENCODING_HEXADECIMAL.equalsIgnoreCase(encoding)) {
-            return hexEncode(data);
-        } else if (EncryptionService.ENCODING_BASE64.equalsIgnoreCase(encoding)) {
-            return base64Encode(data);
-        } else {
-            throw new IllegalArgumentException(
-                    "Unable to configure login module. Digest Encoding " + encoding + " not supported.");
-        }
-    }
-
-    public boolean checkPassword(String provided, String real) {
-        if (real == null && provided == null) {
-            return true;
-        }
-        if (real == null || provided == null) {
-            return false;
-        }
-        // both are non-null
-        String encoded = encryptPassword(provided);
-        if (encoding == null || encoding.length() == 0 || EncryptionService.ENCODING_HEXADECIMAL.equalsIgnoreCase(encoding)) {
-            return real.equalsIgnoreCase(encoded);
-        } else if (EncryptionService.ENCODING_BASE64.equalsIgnoreCase(encoding)) {
-            return real.equals(encoded);
-        }
-        return false;
-    }
-
-    private static final byte[] hexTable = {
-        (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7',
-        (byte) '8', (byte) '9', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f'
-    };
-
-    public static String hexEncode(byte[] in) {
-        int inOff = 0;
-        int length = in.length;
-        byte[] out = new byte[length * 2];
-        for (int i = 0, j = 0; i < length; i++, j += 2) {
-            out[j] = hexTable[(in[inOff] >> 4) & 0x0f];
-            out[j + 1] = hexTable[in[inOff] & 0x0f];
-            inOff++;
-        }
-        return new String(out);
-    }
-
-    private static final byte[] encodingTable = {
-        (byte)'A', (byte)'B', (byte)'C', (byte)'D', (byte)'E', (byte)'F', (byte)'G',
-        (byte)'H', (byte)'I', (byte)'J', (byte)'K', (byte)'L', (byte)'M', (byte)'N',
-        (byte)'O', (byte)'P', (byte)'Q', (byte)'R', (byte)'S', (byte)'T', (byte)'U',
-        (byte)'V', (byte)'W', (byte)'X', (byte)'Y', (byte)'Z',
-        (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f', (byte)'g',
-        (byte)'h', (byte)'i', (byte)'j', (byte)'k', (byte)'l', (byte)'m', (byte)'n',
-        (byte)'o', (byte)'p', (byte)'q', (byte)'r', (byte)'s', (byte)'t', (byte)'u',
-        (byte)'v',
-        (byte)'w', (byte)'x', (byte)'y', (byte)'z',
-        (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', (byte)'6',
-        (byte)'7', (byte)'8', (byte)'9',
-        (byte)'+', (byte)'/'
-    };
-
-    private static byte padding = (byte)'=';
-
-    /**
-     * encode the input data producing a base 64 encoded byte array.
-     *
-     * @return a byte array containing the base 64 encoded data.
-     */
-    public static String base64Encode(byte[] data) {
-        ByteArrayOutputStream    bOut = new ByteArrayOutputStream();
-        try {
-            base64Encode(data, 0, data.length, bOut);
-        } catch (IOException e) {
-            throw new RuntimeException("exception encoding base64 string: " + e.getMessage(), e);
-        }
-        return new String(bOut.toByteArray());
-    }
-
-    /**
-     * encode the input data producing a base 64 output stream.
-     *
-     * @return the number of bytes produced.
-     */
-    public static int base64Encode(byte[] data, int off, int length, OutputStream out) throws IOException {
-        int modulus = length % 3;
-        int dataLength = (length - modulus);
-        int a1, a2, a3;
-        for (int i = off; i < off + dataLength; i += 3) {
-            a1 = data[i] & 0xff;
-            a2 = data[i + 1] & 0xff;
-            a3 = data[i + 2] & 0xff;
-            out.write(encodingTable[(a1 >>> 2) & 0x3f]);
-            out.write(encodingTable[((a1 << 4) | (a2 >>> 4)) & 0x3f]);
-            out.write(encodingTable[((a2 << 2) | (a3 >>> 6)) & 0x3f]);
-            out.write(encodingTable[a3 & 0x3f]);
-        }
-        /*
-         * process the tail end.
-         */
-        int b1, b2, b3;
-        int d1, d2;
-        switch (modulus) {
-            case 0:        /* nothing left to do */
-                break;
-            case 1:
-                d1 = data[off + dataLength] & 0xff;
-                b1 = (d1 >>> 2) & 0x3f;
-                b2 = (d1 << 4) & 0x3f;
-                out.write(encodingTable[b1]);
-                out.write(encodingTable[b2]);
-                out.write(padding);
-                out.write(padding);
-                break;
-            case 2:
-                d1 = data[off + dataLength] & 0xff;
-                d2 = data[off + dataLength + 1] & 0xff;
-                b1 = (d1 >>> 2) & 0x3f;
-                b2 = ((d1 << 4) | (d2 >>> 4)) & 0x3f;
-                b3 = (d2 << 2) & 0x3f;
-                out.write(encodingTable[b1]);
-                out.write(encodingTable[b2]);
-                out.write(encodingTable[b3]);
-                out.write(padding);
-                break;
-        }
-        return (dataLength / 3) * 4 + ((modulus == 0) ? 0 : 4);
-    }
-
-
-}
\ No newline at end of file
diff --git a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/encryption/BasicEncryptionService.java b/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/encryption/BasicEncryptionService.java
deleted file mode 100644
index 505eb6f..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/encryption/BasicEncryptionService.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- *  Licensed 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.
- *  under the License.
- */
-package org.apache.karaf.jaas.modules.encryption;
-
-import java.util.Map;
-
-import org.apache.karaf.jaas.modules.Encryption;
-import org.apache.karaf.jaas.modules.EncryptionService;
-
-public class BasicEncryptionService implements EncryptionService {
-
-    public Encryption createEncryption(Map<String, String> params) throws IllegalArgumentException {
-        return new BasicEncryption(params);
-    }
-}
diff --git a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/encryption/EncryptionSupport.java b/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/encryption/EncryptionSupport.java
deleted file mode 100644
index cc2d074..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/encryption/EncryptionSupport.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- *  Licensed 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.
- *  under the License.
- */
-package org.apache.karaf.jaas.modules.encryption;
-
-import org.apache.karaf.jaas.modules.Encryption;
-import org.apache.karaf.jaas.modules.EncryptionService;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
-
-public class EncryptionSupport {
-
-    private final Logger logger = LoggerFactory.getLogger(EncryptionSupport.class);
-
-    private BundleContext bundleContext;
-
-    private Encryption encryption;
-    private String encryptionPrefix;
-    private String encryptionSuffix;
-    protected Map<String, ?> options;
-
-    protected boolean debug;
-
-
-    public EncryptionSupport(Map<String, ?> options) {
-        this.options = options;
-        this.debug = Boolean.parseBoolean((String) options.get("debug"));
-        // the bundle context is set in the Config JaasRealm by default
-        this.bundleContext = (BundleContext) options.get(BundleContext.class.getName());
-    }
-
-    public Encryption getEncryption() {
-        if (encryption == null) {
-            Map<String, String> encOpts = new HashMap<String, String>();
-            for (String key : options.keySet()) {
-                if (key.startsWith("encryption.")) {
-                    encOpts.put(key.substring("encryption.".length()), options.get(key).toString());
-                }
-            }
-            encryptionPrefix = encOpts.remove("prefix");
-            encryptionSuffix = encOpts.remove("suffix");
-            boolean enabled = Boolean.parseBoolean(encOpts.remove("enabled"));
-
-            if (!enabled) {
-                if (debug) {
-                    logger.debug("Encryption is disabled.");
-                }
-            } else {
-                String name = encOpts.remove("name");
-                if (debug) {
-                    if (name != null && name.length() > 0) {
-                        logger.debug("Encryption is enabled. Using service " + name + " with options " + encOpts);
-                    } else {
-                        logger.debug("Encryption is enabled. Using options " + encOpts);
-                    }
-                }
-                // lookup the encryption service reference
-                ServiceReference[] encryptionServiceReferences;
-                try {
-                    encryptionServiceReferences = bundleContext.getServiceReferences(
-                            EncryptionService.class.getName(),
-                            name != null && name.length() > 0 ? "(name=" + name + ")" : null);
-                } catch (InvalidSyntaxException e) {
-                    throw new IllegalStateException("The encryption service filter is not well formed.", e);
-                }
-                if (encryptionServiceReferences == null || encryptionServiceReferences.length == 0) {
-                    if (name != null && name.length() > 0) {
-                        throw new IllegalStateException("Encryption service " + name + " not found. Please check that the encryption service is correctly set up.");
-                    } else {
-                        throw new IllegalStateException("No encryption service found. Please install the Karaf encryption feature and check that the encryption algorithm is supported..");
-                    }
-                }
-                Arrays.sort(encryptionServiceReferences);
-                for (ServiceReference ref : encryptionServiceReferences) {
-                    try {
-                        EncryptionService encryptionService = (EncryptionService) bundleContext.getService(ref);
-                        if (encryptionService != null) {
-                            try {
-                                encryption = encryptionService.createEncryption(encOpts);
-                                if (encryption != null) {
-                                    break;
-                                }
-                            } finally {
-                                bundleContext.ungetService(ref);
-                            }
-                        }
-                    } catch (IllegalStateException e) {
-                        // continue
-                    }
-                }
-                if (encryption == null) {
-                    throw new IllegalStateException("No EncryptionService supporting the required options could be found.");
-                }
-            }
-        }
-        return encryption;
-    }
-
-    public String getEncryptionSuffix() {
-        return encryptionSuffix;
-    }
-
-    public void setEncryptionSuffix(String encryptionSuffix) {
-        this.encryptionSuffix = encryptionSuffix;
-    }
-
-    public String getEncryptionPrefix() {
-        return encryptionPrefix;
-    }
-
-    public void setEncryptionPrefix(String encryptionPrefix) {
-        this.encryptionPrefix = encryptionPrefix;
-    }
-}
diff --git a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/jdbc/JDBCBackingEngine.java b/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/jdbc/JDBCBackingEngine.java
deleted file mode 100644
index 4f93e11..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/jdbc/JDBCBackingEngine.java
+++ /dev/null
@@ -1,407 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.modules.jdbc;
-
-import org.apache.karaf.jaas.boot.principal.RolePrincipal;
-import org.apache.karaf.jaas.boot.principal.UserPrincipal;
-import org.apache.karaf.jaas.modules.BackingEngine;
-import org.apache.karaf.jaas.modules.encryption.EncryptionSupport;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.sql.DataSource;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
-public class JDBCBackingEngine implements BackingEngine {
-
-    private final Logger logger = LoggerFactory.getLogger(JDBCBackingEngine.class);
-
-    private DataSource dataSource;
-    private EncryptionSupport encryptionSupport;
-
-    private static final String MSG_CONNECTION_CLOSE_FAILED = "Failed to clearly close connection to the database:";
-
-    private String addUserStatement = "INSERT INTO USERS VALUES(?,?)";
-    private String addRoleStatement = "INSERT INTO ROLES VALUES(?,?)";
-    private String deleteRoleStatement = "DELETE FROM ROLES WHERE USERNAME=? AND ROLE=?";
-    private String deleteAllUserRolesStatement = "DELETE FROM ROLES WHERE USERNAME=?";
-    private String deleteUserStatement = "DELETE FROM USERS WHERE USERNAME=?";
-    private String selectUsersQuery = "SELECT USERNAME FROM USERS";
-    private String selectRolesQuery = "SELECT ROLE FROM ROLES WHERE USERNAME=?";
-
-    /**
-     * Constructor
-     *
-     * @param dataSource
-     */
-    public JDBCBackingEngine(DataSource dataSource) {
-        this.dataSource = dataSource;
-    }
-
-    public JDBCBackingEngine(DataSource dataSource, EncryptionSupport encryptionSupport) {
-        this.dataSource = dataSource;
-        this.encryptionSupport = encryptionSupport;
-    }
-
-    /**
-     * Adds a new user.
-     *
-     * @param username
-     * @param password
-     */
-    public void addUser(String username, String password) {
-        Connection connection = null;
-        PreparedStatement statement = null;
-
-        String newPassword = password;
-
-        //If encryption support is enabled, encrypt password
-        if (encryptionSupport != null && encryptionSupport.getEncryption() != null) {
-            newPassword = encryptionSupport.getEncryption().encryptPassword(password);
-            if (encryptionSupport.getEncryptionPrefix() != null) {
-                newPassword = encryptionSupport.getEncryptionPrefix() + newPassword;
-            }
-            if (encryptionSupport.getEncryptionSuffix() != null) {
-                newPassword = newPassword + encryptionSupport.getEncryptionSuffix();
-            }
-        }
-
-        if (dataSource != null) {
-
-            try {
-                connection = dataSource.getConnection();
-                statement = connection.prepareStatement(addUserStatement);
-                statement.setString(1, username);
-                statement.setString(2, newPassword);
-                int rows = statement.executeUpdate();
-
-                if (!connection.getAutoCommit()) {
-                    connection.commit();
-                }
-                if (logger.isDebugEnabled()) {
-                    logger.debug(String.format("Executiong [%s], USERNAME=%s, PASSWORD=%s. %i rows affected.", addUserStatement, username, newPassword, rows));
-                }
-            } catch (SQLException e) {
-                logger.error("Error executiong statement", e);
-            } finally {
-                try {
-                    if (statement != null) {
-                        statement.close();
-                    }
-                    if (connection != null) {
-                        connection.close();
-                    }
-                } catch (SQLException e) {
-                    logger.warn(MSG_CONNECTION_CLOSE_FAILED, e);
-                }
-            }
-        }
-    }
-
-    /**
-     * Delete user by username.
-     *
-     * @param username
-     */
-    public void deleteUser(String username) {
-        Connection connection = null;
-        PreparedStatement userStatement = null;
-        PreparedStatement roleStatement = null;
-
-        if (dataSource != null) {
-
-            try {
-                connection = dataSource.getConnection();
-
-                //Remove from roles
-                roleStatement = connection.prepareStatement(deleteAllUserRolesStatement);
-                roleStatement.setString(1, username);
-                roleStatement.executeUpdate();
-
-                //Remove from users
-                userStatement = connection.prepareStatement(deleteUserStatement);
-                userStatement.setString(1, username);
-                int userRows = userStatement.executeUpdate();
-
-                if (!connection.getAutoCommit()) {
-                    connection.commit();
-                }
-
-                if (logger.isDebugEnabled()) {
-                    logger.debug(String.format("Executiong [%s], USERNAME=%s. %i userRows affected.", deleteUserStatement, username, userRows));
-                }
-            } catch (SQLException e) {
-                logger.error("Error executiong statement", e);
-            } finally {
-                try {
-                    if (userStatement != null) {
-                        userStatement.close();
-                    }
-                    if (roleStatement != null) {
-                        roleStatement.close();
-                    }
-                    if (connection != null) {
-                        connection.close();
-                    }
-                } catch (SQLException e) {
-                    logger.warn(MSG_CONNECTION_CLOSE_FAILED, e);
-                }
-            }
-        }
-    }
-
-    /**
-     * List all Users
-     *
-     * @return
-     */
-    public List<UserPrincipal> listUsers() {
-        List<UserPrincipal> users = new ArrayList<UserPrincipal>();
-
-        Connection connection = null;
-        PreparedStatement listUserStatement = null;
-        ResultSet usersResultSet = null;
-
-
-        if (dataSource != null) {
-
-            try {
-                connection = dataSource.getConnection();
-
-                //Remove from users
-                listUserStatement = connection.prepareStatement(selectUsersQuery);
-                usersResultSet = listUserStatement.executeQuery();
-                while (!usersResultSet.next()) {
-                    String username = usersResultSet.getString("USERNAME");
-                    users.add(new UserPrincipal(username));
-                }
-            } catch (SQLException e) {
-                logger.error("Error executiong statement", e);
-            } finally {
-                try {
-                    if (usersResultSet != null) {
-                        usersResultSet.close();
-                    }
-                    if (listUserStatement != null) {
-                        listUserStatement.close();
-                    }
-                    if (connection != null) {
-                        connection.close();
-                    }
-                } catch (SQLException e) {
-                    logger.warn(MSG_CONNECTION_CLOSE_FAILED, e);
-                }
-            }
-        }
-        return users;
-    }
-
-    /**
-     * List the roles of the {@param user}.
-     *
-     * @param user
-     * @return
-     */
-    public List<RolePrincipal> listRoles(UserPrincipal user) {
-        List<RolePrincipal> roles = new ArrayList<RolePrincipal>();
-
-        Connection connection = null;
-        PreparedStatement listRolesStatement = null;
-        ResultSet rolesResultSet = null;
-
-
-        if (dataSource != null) {
-
-            try {
-                connection = dataSource.getConnection();
-
-                //Remove from roles
-                listRolesStatement = connection.prepareStatement(selectRolesQuery);
-                listRolesStatement.setString(1, user.getName());
-
-                rolesResultSet = listRolesStatement.executeQuery();
-
-                while (!rolesResultSet.next()) {
-                    String role = rolesResultSet.getString(1);
-                    roles.add(new RolePrincipal(role));
-                }
-
-            } catch (SQLException e) {
-                logger.error("Error executiong statement", e);
-            } finally {
-                try {
-                    if (rolesResultSet != null) {
-                        rolesResultSet.close();
-                    }
-                    if (listRolesStatement != null) {
-                        listRolesStatement.close();
-                    }
-                    if (connection != null) {
-                        connection.close();
-                    }
-                } catch (SQLException e) {
-                    logger.warn(MSG_CONNECTION_CLOSE_FAILED, e);
-                }
-            }
-        }
-        return roles;
-    }
-
-    /**
-     * Add a role to a user.
-     *
-     * @param username
-     * @param role
-     */
-    public void addRole(String username, String role) {
-        Connection connection = null;
-        PreparedStatement statement = null;
-
-        if (dataSource != null) {
-
-            try {
-                connection = dataSource.getConnection();
-                statement = connection.prepareStatement(addRoleStatement);
-                statement.setString(1, username);
-                statement.setString(2, role);
-                int rows = statement.executeUpdate();
-
-                if (!connection.getAutoCommit()) {
-                    connection.commit();
-                }
-                if (logger.isDebugEnabled()) {
-                    logger.debug(String.format("Executiong [%s], USERNAME=%s, ROLE=%s. %i rows affected.", addRoleStatement, username, role, rows));
-                }
-            } catch (SQLException e) {
-                logger.error("Error executiong statement", e);
-            } finally {
-                try {
-                    if (statement != null) {
-                        statement.close();
-                    }
-                    if (connection != null) {
-                        connection.close();
-                    }
-                } catch (SQLException e) {
-                    logger.warn(MSG_CONNECTION_CLOSE_FAILED, e);
-                }
-            }
-        }
-    }
-
-    /**
-     * Remove role from user.
-     *
-     * @param username
-     * @param role
-     */
-    public void deleteRole(String username, String role) {
-        Connection connection = null;
-        PreparedStatement statement = null;
-
-        if (dataSource != null) {
-
-            try {
-                connection = dataSource.getConnection();
-                statement = connection.prepareStatement(deleteRoleStatement);
-                statement.setString(1, username);
-                statement.setString(2, role);
-                int rows = statement.executeUpdate();
-
-                if (!connection.getAutoCommit()) {
-                    connection.commit();
-                }
-                if (logger.isDebugEnabled()) {
-                    logger.debug(String.format("Executiong [%s], USERNAME=%s, ROLE=%s. %i rows affected.", deleteRoleStatement, username, role, rows));
-                }
-            } catch (SQLException e) {
-                logger.error("Error executing statement", e);
-            } finally {
-                try {
-                    if (statement != null) {
-                        statement.close();
-                    }
-                    if (connection != null) {
-                        connection.close();
-                    }
-                } catch (SQLException e) {
-                    logger.warn(MSG_CONNECTION_CLOSE_FAILED, e);
-                }
-            }
-        }
-    }
-
-    public String getAddUserStatement() {
-        return addUserStatement;
-    }
-
-    public void setAddUserStatement(String addUserStatement) {
-        this.addUserStatement = addUserStatement;
-    }
-
-    public String getAddRoleStatement() {
-        return addRoleStatement;
-    }
-
-    public void setAddRoleStatement(String addRoleStatement) {
-        this.addRoleStatement = addRoleStatement;
-    }
-
-    public String getDeleteRoleStatement() {
-        return deleteRoleStatement;
-    }
-
-    public void setDeleteRoleStatement(String deleteRoleStatement) {
-        this.deleteRoleStatement = deleteRoleStatement;
-    }
-
-    public String getDeleteAllUserRolesStatement() {
-        return deleteAllUserRolesStatement;
-    }
-
-    public void setDeleteAllUserRolesStatement(String deleteAllUserRolesStatement) {
-        this.deleteAllUserRolesStatement = deleteAllUserRolesStatement;
-    }
-
-    public String getDeleteUserStatement() {
-        return deleteUserStatement;
-    }
-
-    public void setDeleteUserStatement(String deleteUserStatement) {
-        this.deleteUserStatement = deleteUserStatement;
-    }
-
-    public String getSelectUsersQuery() {
-        return selectUsersQuery;
-    }
-
-    public void setSelectUsersQuery(String selectUsersQuery) {
-        this.selectUsersQuery = selectUsersQuery;
-    }
-
-    public String getSelectRolesQuery() {
-        return selectRolesQuery;
-    }
-
-    public void setSelectRolesQuery(String selectRolesQuery) {
-        this.selectRolesQuery = selectRolesQuery;
-    }
-}
diff --git a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/jdbc/JDBCBackingEngineFactory.java b/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/jdbc/JDBCBackingEngineFactory.java
deleted file mode 100644
index e863d5f..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/jdbc/JDBCBackingEngineFactory.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.modules.jdbc;
-
-import org.apache.karaf.jaas.modules.BackingEngine;
-import org.apache.karaf.jaas.modules.BackingEngineFactory;
-import org.apache.karaf.jaas.modules.encryption.EncryptionSupport;
-import org.osgi.framework.BundleContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.sql.DataSource;
-import java.util.Map;
-
-public class JDBCBackingEngineFactory implements BackingEngineFactory {
-
-    private final Logger logger = LoggerFactory.getLogger(JDBCBackingEngineFactory.class);
-
-    /**
-     * Build a Backing engine for the JDBCLoginModule.
-     *
-     * @param options
-     * @return
-     */
-    public BackingEngine build(Map options) {
-        JDBCBackingEngine instance = null;
-        String datasourceURL = (String) options.get(JDBCUtils.DATASOURCE);
-        BundleContext bundleContext = (BundleContext) options.get(BundleContext.class.getName());
-
-        String addUserStatement = (String) options.get(JDBCLoginModule.INSERT_USER_STATEMENT);
-        String addRoleStatement = (String) options.get(JDBCLoginModule.INSERT_ROLE_STATEMENT);
-        String deleteRoleStatement = (String) options.get(JDBCLoginModule.DELETE_ROLE_STATEMENT);
-        String deleteAllUserRolesStatement = (String) options.get(JDBCLoginModule.DELETE_ROLES_STATEMENT);
-        String deleteUserStatement = (String) options.get(JDBCLoginModule.DELETE_USER_STATEMENT);
-        String selectUsersQuery = (String) options.get(JDBCLoginModule.PASSWORD_QUERY);
-        String selectRolesQuery = (String) options.get(JDBCLoginModule.ROLE_QUERY);
-
-        try {
-            DataSource dataSource = (DataSource) JDBCUtils.createDatasource(bundleContext, datasourceURL);
-            EncryptionSupport encryptionSupport = new EncryptionSupport(options);
-            instance = new JDBCBackingEngine(dataSource, encryptionSupport);
-            if(addUserStatement != null) {
-                instance.setAddUserStatement(addUserStatement);
-            }
-            if(addRoleStatement != null) {
-                instance.setAddRoleStatement(addRoleStatement);
-            }
-            if(deleteRoleStatement != null) {
-                instance.setDeleteRoleStatement(deleteRoleStatement);
-            }
-            if(deleteAllUserRolesStatement != null) {
-                instance.setDeleteAllUserRolesStatement(deleteAllUserRolesStatement);
-            }
-            if(deleteUserStatement != null) {
-                instance.setDeleteUserStatement(deleteUserStatement);
-            }
-            if(selectUsersQuery != null) {
-                instance.setSelectUsersQuery(selectUsersQuery);
-            }
-            if(selectRolesQuery != null) {
-                instance.setSelectRolesQuery(selectRolesQuery);
-            }
-        } catch (Exception e) {
-            logger.error("Error creating JDBCBackingEngine.", e);
-        }
-        return instance;
-    }
-
-    /**
-     * Returns the login module class, that this factory can build.
-     *
-     * @return
-     */
-    public String getModuleClass() {
-        return JDBCLoginModule.class.getName();
-    }
-}
diff --git a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/jdbc/JDBCLoginModule.java b/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/jdbc/JDBCLoginModule.java
deleted file mode 100644
index b6c9d02..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/jdbc/JDBCLoginModule.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * 
- *  Licensed 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.
- *  under the License.
- */
-package org.apache.karaf.jaas.modules.jdbc;
-
-import org.apache.karaf.jaas.boot.principal.RolePrincipal;
-import org.apache.karaf.jaas.boot.principal.UserPrincipal;
-import org.apache.karaf.jaas.modules.AbstractKarafLoginModule;
-import org.apache.karaf.jaas.modules.properties.PropertiesLoginModule;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.security.auth.Subject;
-import javax.security.auth.callback.*;
-import javax.security.auth.login.LoginException;
-import javax.sql.DataSource;
-import javax.sql.XADataSource;
-import java.io.IOException;
-import java.security.Principal;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.HashSet;
-import java.util.Map;
-
-public class JDBCLoginModule extends AbstractKarafLoginModule {
-
-    private final Logger logger = LoggerFactory.getLogger(PropertiesLoginModule.class);
-
-    public static final String PASSWORD_QUERY = "query.password";
-    public static final String ROLE_QUERY = "query.role";
-    public static final String INSERT_USER_STATEMENT = "insert.user";
-    public static final String INSERT_ROLE_STATEMENT = "insert.role";
-    public static final String DELETE_ROLE_STATEMENT = "delete.role";
-    public static final String DELETE_ROLES_STATEMENT = "delete.roles";
-    public static final String DELETE_USER_STATEMENT = "delete.user";
-
-    private String datasourceURL;
-    protected String passwordQuery = "SELECT PASSWORD FROM USERS WHERE USERNAME=?";
-    protected String roleQuery = "SELECT ROLE FROM ROLES WHERE USERNAME=?";
-
-    public void initialize(Subject subject, CallbackHandler callbackHandler, Map<String, ?> sharedState, Map<String, ?> options) {
-        super.initialize(subject, callbackHandler, options);
-        datasourceURL = (String) options.get(JDBCUtils.DATASOURCE);
-        passwordQuery = (String) options.get(PASSWORD_QUERY);
-        roleQuery = (String) options.get(ROLE_QUERY);
-        if (datasourceURL == null || datasourceURL.trim().length() == 0) {
-            logger.error("No datasource was specified ");
-        } else if (!datasourceURL.startsWith(JDBCUtils.JNDI) && !datasourceURL.startsWith(JDBCUtils.OSGI)) {
-            logger.error("Invalid datasource lookup protocol");
-        }
-    }
-
-
-    public boolean login() throws LoginException {
-        Connection connection = null;
-
-        PreparedStatement passwordStatement = null;
-        PreparedStatement roleStatement = null;
-
-        ResultSet passwordResultSet = null;
-        ResultSet roleResultSet = null;
-
-        Callback[] callbacks = new Callback[2];
-        callbacks[0] = new NameCallback("Username: ");
-        callbacks[1] = new PasswordCallback("Password: ", false);
-
-        try {
-            callbackHandler.handle(callbacks);
-        } catch (IOException ioe) {
-            throw new LoginException(ioe.getMessage());
-        } catch (UnsupportedCallbackException uce) {
-            throw new LoginException(uce.getMessage() + " not available to obtain information from user");
-        }
-
-        user = ((NameCallback) callbacks[0]).getName();
-
-        char[] tmpPassword = ((PasswordCallback) callbacks[1]).getPassword();
-        if (tmpPassword == null) {
-            tmpPassword = new char[0];
-        }
-
-        String password = new String(tmpPassword);
-        principals = new HashSet<Principal>();
-
-        try {
-            Object credentialsDatasource = JDBCUtils.createDatasource(bundleContext, datasourceURL);
-
-            if (credentialsDatasource == null) {
-                throw new LoginException("Cannot obtain data source:" + datasourceURL);
-            } else if (credentialsDatasource instanceof DataSource) {
-                connection = ((DataSource) credentialsDatasource).getConnection();
-            } else if (credentialsDatasource instanceof XADataSource) {
-                connection = ((XADataSource) credentialsDatasource).getXAConnection().getConnection();
-            } else {
-                throw new LoginException("Unknow dataSource type " + credentialsDatasource.getClass());
-            }
-
-            //Retrieve user credentials from database.
-            passwordStatement = connection.prepareStatement(passwordQuery);
-            passwordStatement.setString(1, user);
-            passwordResultSet = passwordStatement.executeQuery();
-
-            if (!passwordResultSet.next()) {
-            	if (!this.detailedLoginExcepion) {
-            		throw new LoginException("login failed");
-            	} else {
-            		throw new LoginException("User " + user + " does not exist");
-            	}
-            } else {
-                String storedPassword = passwordResultSet.getString(1);
-
-                if (!checkPassword(password, storedPassword)) {
-                	if (!this.detailedLoginExcepion) {
-                		throw new LoginException("login failed");
-                	} else {
-                		throw new LoginException("Password for " + user + " does not match");
-                	}
-                }
-                principals.add(new UserPrincipal(user));
-            }
-
-            //Retrieve user roles from database
-            roleStatement = connection.prepareStatement(roleQuery);
-            roleStatement.setString(1, user);
-            roleResultSet = roleStatement.executeQuery();
-            while (roleResultSet.next()) {
-                String role = roleResultSet.getString(1);
-                principals.add(new RolePrincipal(role));
-            }
-        } catch (Exception ex) {
-            throw new LoginException("Error has occured while retrieving credentials from database:" + ex.getMessage());
-        } finally {
-            try {
-                if (passwordResultSet != null) {
-                    passwordResultSet.close();
-                }
-                if (passwordStatement != null) {
-                    passwordStatement.close();
-                }
-                if (roleResultSet != null) {
-                    roleResultSet.close();
-                }
-                if (roleStatement != null) {
-                    roleStatement.close();
-                }
-                if (connection != null) {
-                    connection.close();
-                }
-            } catch (SQLException ex) {
-                logger.warn("Failed to clearly close connection to the database:", ex);
-            }
-        }
-        return true;
-    }
-
-    public boolean abort() throws LoginException {
-        return true;
-    }
-
-    public boolean logout() throws LoginException {
-        subject.getPrincipals().removeAll(principals);
-        principals.clear();
-        if (debug) {
-            logger.debug("logout");
-        }
-        return true;
-    }
-}
diff --git a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/jdbc/JDBCUtils.java b/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/jdbc/JDBCUtils.java
deleted file mode 100644
index b68e366..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/jdbc/JDBCUtils.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.modules.jdbc;
-
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-
-import javax.naming.InitialContext;
-
-public final class JDBCUtils {
-
-    public static final String DATASOURCE = "datasource";
-    public static final String JNDI = "jndi:";
-    public static final String OSGI = "osgi:";
-
-    private JDBCUtils() {
-
-    }
-
-    /**
-     * Looks up a datasource from the url. The datasource can be passed either as jndi name or osgi ldap filter.
-     *
-     * @param url
-     * @return
-     * @throws Exception
-     */
-    public static Object createDatasource(BundleContext bc, String url) throws Exception {
-        if (url == null) {
-            throw new Exception("Illegal datasource url format. Datasource URL cannot be null.");
-        } else if (url.trim().length() == 0) {
-            throw new Exception("Illegal datasource url format. Datasource URL cannot be empty.");
-        } else if (url.startsWith(JNDI)) {
-            String jndiName = url.substring(JNDI.length());
-            InitialContext ic = new InitialContext();
-            return ic.lookup(jndiName);
-        } else if (url.startsWith(OSGI)) {
-            String osgiFilter = url.substring(OSGI.length());
-            String clazz = null;
-            String filter = null;
-            String[] tokens = osgiFilter.split("/", 2);
-            if (tokens != null) {
-                if (tokens.length > 0) {
-                    clazz = tokens[0];
-                }
-                if (tokens.length > 1) {
-                    filter = tokens[1];
-                }
-            }
-            ServiceReference[] references = bc.getServiceReferences(clazz, filter);
-            if (references != null) {
-                ServiceReference ref = references[0];
-                Object ds = bc.getService(ref);
-                bc.ungetService(ref);
-                return ds;
-            } else {
-                throw new Exception("Unable to find service reference for datasource: " + clazz + "/" + filter);
-            }
-        } else {
-            throw new Exception("Illegal datasource url format");
-        }
-    }
-}
diff --git a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/ldap/LDAPLoginModule.java b/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/ldap/LDAPLoginModule.java
deleted file mode 100644
index 568732a..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/ldap/LDAPLoginModule.java
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
- *
- *  Licensed 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.
- *  under the License.
- */
-package org.apache.karaf.jaas.modules.ldap;
-
-import org.apache.karaf.jaas.boot.principal.RolePrincipal;
-import org.apache.karaf.jaas.boot.principal.UserPrincipal;
-import org.apache.karaf.jaas.config.KeystoreManager;
-import org.apache.karaf.jaas.modules.AbstractKarafLoginModule;
-import org.osgi.framework.ServiceReference;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.naming.Context;
-import javax.naming.NamingEnumeration;
-import javax.naming.directory.*;
-import javax.net.ssl.SSLSocketFactory;
-import javax.security.auth.Subject;
-import javax.security.auth.callback.*;
-import javax.security.auth.login.LoginException;
-import java.io.IOException;
-import java.security.Principal;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Map;
-
-/**
- * Karaf JAAS login module which uses a LDAP backend.
- */
-public class LDAPLoginModule extends AbstractKarafLoginModule {
-
-    private static Logger logger = LoggerFactory.getLogger(LDAPLoginModule.class);
-
-    public final static String CONNECTION_URL = "connection.url";
-    public final static String CONNECTION_USERNAME = "connection.username";
-    public final static String CONNECTION_PASSWORD = "connection.password";
-    public final static String USER_BASE_DN = "user.base.dn";
-    public final static String USER_FILTER = "user.filter";
-    public final static String USER_SEARCH_SUBTREE = "user.search.subtree";
-    public final static String ROLE_BASE_DN = "role.base.dn";
-    public final static String ROLE_FILTER = "role.filter";
-    public final static String ROLE_NAME_ATTRIBUTE = "role.name.attribute";
-    public final static String ROLE_SEARCH_SUBTREE = "role.search.subtree";
-    public final static String AUTHENTICATION = "authentication";
-    public final static String INITIAL_CONTEXT_FACTORY = "initial.context.factory";
-    public final static String SSL = "ssl";
-    public final static String SSL_PROVIDER = "ssl.provider";
-    public final static String SSL_PROTOCOL = "ssl.protocol";
-    public final static String SSL_ALGORITHM = "ssl.algorithm";
-    public final static String SSL_KEYSTORE = "ssl.keystore";
-    public final static String SSL_KEYALIAS = "ssl.keyalias";
-    public final static String SSL_TRUSTSTORE = "ssl.truststore";
-
-    public final static String DEFAULT_INITIAL_CONTEXT_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";
-
-    private String connectionURL;
-    private String connectionUsername;
-    private String connectionPassword;
-    private String userBaseDN;
-    private String userFilter;
-    private boolean userSearchSubtree = true;
-    private String roleBaseDN;
-    private String roleFilter;
-    private String roleNameAttribute;
-    private boolean roleSearchSubtree = true;
-    private String authentication = "simple";
-    private String initialContextFactory = null;
-    private boolean ssl;
-    private String sslProvider;
-    private String sslProtocol;
-    private String sslAlgorithm;
-    private String sslKeystore;
-    private String sslKeyAlias;
-    private String sslTrustStore;
-
-    public void initialize(Subject subject, CallbackHandler callbackHandler, Map<String, ?> sharedState, Map<String, ?> options) {
-        super.initialize(subject, callbackHandler, options);
-        connectionURL = (String) options.get(CONNECTION_URL);
-        connectionUsername = (String) options.get(CONNECTION_USERNAME);
-        connectionPassword = (String) options.get(CONNECTION_PASSWORD);
-        userBaseDN =  (String) options.get(USER_BASE_DN);
-        userFilter = (String) options.get(USER_FILTER);
-        userSearchSubtree = Boolean.parseBoolean((String) options.get(USER_SEARCH_SUBTREE));
-        roleBaseDN = (String) options.get(ROLE_BASE_DN);
-        roleFilter = (String) options.get(ROLE_FILTER);
-        roleNameAttribute = (String) options.get(ROLE_NAME_ATTRIBUTE);
-        roleSearchSubtree = Boolean.parseBoolean((String) options.get(ROLE_SEARCH_SUBTREE));
-        initialContextFactory = (String) options.get(INITIAL_CONTEXT_FACTORY);
-        if (initialContextFactory == null) {
-            initialContextFactory = DEFAULT_INITIAL_CONTEXT_FACTORY;
-        }
-        authentication = (String) options.get(AUTHENTICATION);
-        if (connectionURL == null || connectionURL.trim().length() == 0) {
-            logger.error("No LDAP URL specified.");
-        } else if (!connectionURL.startsWith("ldap:") && !connectionURL.startsWith("ldaps:")) {
-            logger.error("Invalid LDAP URL: " + connectionURL);
-        }
-        if (options.get(SSL) != null) {
-            ssl = Boolean.parseBoolean((String) options.get(SSL));
-        } else {
-            ssl = connectionURL.startsWith("ldaps:");
-        }
-        sslProvider = (String) options.get(SSL_PROVIDER);
-        sslProtocol = (String) options.get(SSL_PROTOCOL);
-        sslAlgorithm = (String) options.get(SSL_ALGORITHM);
-        sslKeystore = (String) options.get(SSL_KEYSTORE);
-        sslKeyAlias = (String) options.get(SSL_KEYALIAS);
-        sslTrustStore = (String) options.get(SSL_TRUSTSTORE);
-    }
-
-    public boolean login() throws LoginException {
-        ClassLoader tccl = Thread.currentThread().getContextClassLoader();
-        try {
-            return doLogin();
-        } finally {
-            ManagedSSLSocketFactory.setSocketFactory(null);
-            Thread.currentThread().setContextClassLoader(tccl);
-        }
-    }
-
-    protected boolean doLogin() throws LoginException {
-        Callback[] callbacks = new Callback[2];
-        callbacks[0] = new NameCallback("Username: ");
-        callbacks[1] = new PasswordCallback("Password: ", false);
-
-        try {
-            callbackHandler.handle(callbacks);
-        } catch (IOException ioException) {
-            throw new LoginException(ioException.getMessage());
-        } catch (UnsupportedCallbackException unsupportedCallbackException) {
-            throw new LoginException(unsupportedCallbackException.getMessage() + " not available to obtain information from user.");
-        }
-
-        user = ((NameCallback) callbacks[0]).getName();
-
-        char[] tmpPassword = ((PasswordCallback) callbacks[1]).getPassword();
-        if (tmpPassword == null) {
-            tmpPassword = new char[0];
-        }
-        String password = new String(tmpPassword);
-        principals = new HashSet<Principal>();
-
-        // step 1: get the user DN
-        Hashtable env = new Hashtable();
-        logger.debug("Create the LDAP initial context.");
-        env.put(Context.INITIAL_CONTEXT_FACTORY, initialContextFactory);
-        env.put(Context.PROVIDER_URL, connectionURL);
-        if (connectionUsername != null && connectionUsername.trim().length() > 0) {
-            logger.debug("Bound access requested.");
-            env.put(Context.SECURITY_AUTHENTICATION, authentication);
-            env.put(Context.SECURITY_PRINCIPAL, connectionUsername);
-            env.put(Context.SECURITY_CREDENTIALS, connectionPassword);
-        }
-        if (ssl) {
-            setupSsl(env);
-        }
-        logger.debug("Get the user DN.");
-        String userDN;
-        DirContext context = null;
-        try {
-            logger.debug("Initialize the JNDI LDAP Dir Context.");
-            context = new InitialDirContext(env);
-            logger.debug("Define the subtree scope search control.");
-            SearchControls controls = new SearchControls();
-            if (userSearchSubtree) {
-                controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
-            } else {
-                controls.setSearchScope(SearchControls.ONELEVEL_SCOPE);
-            }
-            logger.debug("Looking for the user in LDAP with ");
-            logger.debug("  base DN: " + userBaseDN);
-            userFilter = userFilter.replaceAll("%u", user);
-            logger.debug("  filter: " + userFilter);
-            NamingEnumeration namingEnumeration = context.search(userBaseDN, userFilter, controls);
-            if (!namingEnumeration.hasMore()) {
-                logger.warn("User " + user + " not found in LDAP.");
-                return false;
-            }
-            logger.debug("Get the user DN.");
-            SearchResult result = (SearchResult) namingEnumeration.next();
-            userDN = (String) result.getName();
-            namingEnumeration.close();
-        } catch (Exception e) {
-            throw new LoginException("Can't connect to the LDAP server: " + e.getMessage());
-        } finally {
-            if (context != null) {
-                try {
-                    context.close();
-                } catch (Exception e) {
-                    // ignore
-                }
-            }
-        }
-        // step 2: bind the user using the DN
-        context = null;
-        try {
-            logger.debug("Bind user (authentication).");
-            env.put(Context.SECURITY_AUTHENTICATION, authentication);
-            logger.debug("Set the security principal for " + userDN + "," + userBaseDN);
-            env.put(Context.SECURITY_PRINCIPAL, userDN + "," + userBaseDN);
-            env.put(Context.SECURITY_CREDENTIALS, password);
-            logger.debug("Binding the user.");
-            context = new InitialDirContext(env);
-            logger.debug("User " + user + " successfully bound.");
-            context.close();
-        } catch (Exception e) {
-            logger.warn("User " + user + " authentication failed.", e);
-            return false;
-        } finally {
-            if (context != null) {
-                try {
-                    context.close();
-                } catch (Exception e) {
-                    // ignore
-                }
-            }
-        }
-        principals.add(new UserPrincipal(user));
-        // step 3: retrieving user roles
-        context = null;
-        try {
-            logger.debug("Get user roles.");
-            context = new InitialDirContext(env);
-            SearchControls controls = new SearchControls();
-            if (roleSearchSubtree) {
-                controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
-            } else {
-                controls.setSearchScope(SearchControls.ONELEVEL_SCOPE);
-            }
-            if (roleNameAttribute != null) {
-                controls.setReturningAttributes(new String[]{ roleNameAttribute });
-            }
-            logger.debug("Looking for the user roles in LDAP with ");
-            logger.debug("  base DN: " + roleBaseDN);
-            roleFilter = roleFilter.replaceAll("%u", user);
-            logger.debug("  filter: " + roleFilter);
-            NamingEnumeration namingEnumeration = context.search(roleBaseDN, roleFilter, controls);
-            while (namingEnumeration.hasMore()) {
-                SearchResult result = (SearchResult) namingEnumeration.next();
-                Attributes attributes = result.getAttributes();
-                String role = (String) attributes.get(roleNameAttribute).get();
-                if (role != null) {
-                    principals.add(new RolePrincipal(role));
-                }
-            }
-        } catch (Exception e) {
-            throw new LoginException("Can't get user " + user + " roles: " + e.getMessage());
-        } finally {
-            if (context != null) {
-                try {
-                    context.close();
-                } catch (Exception e) {
-                    // ignore
-                }
-            }
-        }
-        return true;
-    }
-
-    protected void setupSsl(Hashtable env) throws LoginException {
-        ServiceReference ref = null;
-        try {
-            logger.debug("Setting up SSL");
-            env.put(Context.SECURITY_PROTOCOL, "ssl");
-            env.put("java.naming.ldap.factory.socket", ManagedSSLSocketFactory.class.getName());
-            ref = bundleContext.getServiceReference(KeystoreManager.class.getName());
-            KeystoreManager manager = (KeystoreManager) bundleContext.getService(ref);
-            SSLSocketFactory factory = manager.createSSLFactory(sslProvider, sslProtocol, sslAlgorithm, sslKeystore, sslKeyAlias, sslTrustStore);
-            ManagedSSLSocketFactory.setSocketFactory(factory);
-            Thread.currentThread().setContextClassLoader(ManagedSSLSocketFactory.class.getClassLoader());
-        } catch (Exception e) {
-            throw new LoginException("Unable to setup SSL support for LDAP: " + e.getMessage());
-        } finally {
-            bundleContext.ungetService(ref);
-        }
-    }
-
-    public boolean abort() throws LoginException {
-        return true;
-    }
-
-    public boolean logout() throws LoginException {
-        subject.getPrincipals().removeAll(principals);
-        principals.clear();
-        return true;
-    }
-
-    public static abstract class ManagedSSLSocketFactory extends SSLSocketFactory {
-
-        private static final ThreadLocal<SSLSocketFactory> factories = new ThreadLocal<SSLSocketFactory>();
-
-        public static void setSocketFactory(SSLSocketFactory factory) {
-            factories.set(factory);
-        }
-
-        public static SSLSocketFactory getDefault() {
-            SSLSocketFactory factory = factories.get();
-            if (factory == null) {
-                throw new IllegalStateException("No SSLSocketFactory parameters have been set!");
-            }
-            return factory;
-        }
-
-    }
-
-}
diff --git a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/osgi/ConfigAdminHolder.java b/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/osgi/ConfigAdminHolder.java
deleted file mode 100644
index 417b971..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/osgi/ConfigAdminHolder.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.modules.osgi;
-
-import org.osgi.service.cm.ConfigurationAdmin;
-
-public class ConfigAdminHolder {
-
-    private static ConfigurationAdmin configAdmin;
-
-    public static ConfigurationAdmin getService() {
-        return configAdmin;
-    }
-
-    public void setService(ConfigurationAdmin configAdmin) {
-        ConfigAdminHolder.configAdmin = configAdmin;
-    }
-
-}
diff --git a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/osgi/OsgiConfigLoginModule.java b/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/osgi/OsgiConfigLoginModule.java
deleted file mode 100644
index 1491507..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/osgi/OsgiConfigLoginModule.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.modules.osgi;
-
-import java.io.IOException;
-import java.security.Principal;
-import java.util.Dictionary;
-import java.util.HashSet;
-import java.util.Map;
-
-import javax.security.auth.Subject;
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.NameCallback;
-import javax.security.auth.callback.PasswordCallback;
-import javax.security.auth.callback.UnsupportedCallbackException;
-import javax.security.auth.login.FailedLoginException;
-import javax.security.auth.login.LoginException;
-
-import org.apache.karaf.jaas.boot.principal.RolePrincipal;
-import org.apache.karaf.jaas.boot.principal.UserPrincipal;
-import org.apache.karaf.jaas.modules.AbstractKarafLoginModule;
-
-import org.osgi.service.cm.Configuration;
-
-public class OsgiConfigLoginModule extends AbstractKarafLoginModule {
-
-    public static final String PID = "pid";
-    public static final String USER_PREFIX = "user.";
-
-    public void initialize(Subject subject, CallbackHandler callbackHandler, Map<String, ?> sharedState, Map<String, ?> options) {
-        super.initialize(subject, callbackHandler, options);
-    }
-
-    public boolean login() throws LoginException {
-        try {
-            String pid = (String) options.get(PID);
-            Configuration config = ConfigAdminHolder.getService().getConfiguration(pid);
-            Dictionary properties = config.getProperties();
-
-            Callback[] callbacks = new Callback[2];
-
-            callbacks[0] = new NameCallback("Username: ");
-            callbacks[1] = new PasswordCallback("Password: ", false);
-            try {
-                callbackHandler.handle(callbacks);
-            } catch (IOException ioe) {
-                throw new LoginException(ioe.getMessage());
-            } catch (UnsupportedCallbackException uce) {
-                throw new LoginException(uce.getMessage() + " not available to obtain information from user");
-            }
-            String user = ((NameCallback) callbacks[0]).getName();
-            String password = new String(((PasswordCallback) callbacks[1]).getPassword());
-
-            String userInfos = (String) properties.get(USER_PREFIX + user);
-            if (userInfos == null) {
-            	if (!this.detailedLoginExcepion) {
-            		throw new FailedLoginException("login failed");
-            	} else {
-            		throw new FailedLoginException("User does not exist");
-            	}
-            }
-            String[] infos = userInfos.split(",");
-            String storedPassword = infos[0];
-
-            // check the provided password
-            if (!checkPassword(password, storedPassword)) {
-            	if (!this.detailedLoginExcepion) {
-            		throw new FailedLoginException("login failed");
-            	} else {
-            		throw new FailedLoginException("Password for " + user + " does not match");
-            	}
-            }
-
-            principals = new HashSet<Principal>();
-            principals.add(new UserPrincipal(user));
-            for (int i = 1; i < infos.length; i++) {
-                principals.add(new RolePrincipal(infos[i]));
-            }
-
-            return true;
-        } catch (LoginException e) {
-            throw e;
-        } catch (Exception e) {
-            throw (LoginException) new LoginException("Unable to authenticate user").initCause(e);
-        } finally {
-            callbackHandler = null;
-            options = null;
-        }
-    }
-
-
-    public boolean abort() throws LoginException {
-        subject = null;
-        principals = null;
-        return true;
-    }
-
-    public boolean logout() throws LoginException {
-        try {
-            subject.getPrincipals().removeAll(principals);
-            principals.clear();
-            return true;
-        } finally {
-            subject = null;
-            principals = null;
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesBackingEngine.java b/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesBackingEngine.java
deleted file mode 100644
index a8ae1a7..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesBackingEngine.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.modules.properties;
-
-import org.apache.karaf.jaas.boot.principal.RolePrincipal;
-import org.apache.karaf.jaas.boot.principal.UserPrincipal;
-import org.apache.felix.utils.properties.Properties;
-import org.apache.karaf.jaas.modules.BackingEngine;
-import org.apache.karaf.jaas.modules.encryption.EncryptionSupport;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-public class PropertiesBackingEngine implements BackingEngine {
-
-    private final Logger logger = LoggerFactory.getLogger(PropertiesBackingEngine.class);
-
-    private Properties users;
-    private EncryptionSupport encryptionSupport;
-
-    /**
-     * Constructor
-     *
-     * @param users
-     */
-    public PropertiesBackingEngine(Properties users) {
-        this.users = users;
-    }
-
-    public PropertiesBackingEngine(Properties users, EncryptionSupport encryptionSupport) {
-        this.users = users;
-        this.encryptionSupport = encryptionSupport;
-    }
-
-    /**
-     * Add a user.
-     *
-     * @param username
-     * @param password
-     */
-    public void addUser(String username, String password) {
-        String[] infos = null;
-        StringBuffer userInfoBuffer = new StringBuffer();
-
-        String newPassword = password;
-
-        //If encryption support is enabled, encrypt password
-        if (encryptionSupport != null && encryptionSupport.getEncryption() != null) {
-            newPassword = encryptionSupport.getEncryption().encryptPassword(password);
-            if (encryptionSupport.getEncryptionPrefix() != null) {
-                newPassword = encryptionSupport.getEncryptionPrefix() + newPassword;
-            }
-            if (encryptionSupport.getEncryptionSuffix() != null) {
-                newPassword = newPassword + encryptionSupport.getEncryptionSuffix();
-            }
-        }
-
-        String userInfos = (String) users.get(username);
-
-        //If user already exists, update password
-        if (userInfos != null && userInfos.length() > 0) {
-            infos = userInfos.split(",");
-            userInfoBuffer.append(newPassword);
-
-            for (int i = 1; i < infos.length; i++) {
-                userInfoBuffer.append(",");
-                userInfoBuffer.append(infos[i]);
-            }
-            String newUserInfo = userInfoBuffer.toString();
-            users.put(username, newUserInfo);
-        } else {
-            users.put(username, newPassword);
-        }
-
-        try {
-            users.save();
-        } catch (Exception ex) {
-            logger.error("Cannot update users file,", ex);
-        }
-    }
-
-    /**
-     * Delete a User.
-     *
-     * @param username
-     */
-    public void deleteUser(String username) {
-        users.remove(username);
-
-        try {
-            users.save();
-        } catch (Exception ex) {
-            logger.error("Cannot remove users file,", ex);
-        }
-    }
-
-    /**
-     * List Users
-     *
-     * @return
-     */
-    public List<UserPrincipal> listUsers() {
-        List<UserPrincipal> result = new ArrayList<UserPrincipal>();
-
-        Set<String> userSet = users.keySet();
-
-        for (String userNames : userSet) {
-            UserPrincipal userPrincipal = new UserPrincipal(userNames);
-            result.add(userPrincipal);
-        }
-        return result;
-    }
-
-    /**
-     * List the Roles of the {@param user}
-     *
-     * @param user
-     * @return
-     */
-    public List<RolePrincipal> listRoles(UserPrincipal user) {
-        List<RolePrincipal> result = new ArrayList<RolePrincipal>();
-        String userInfo = (String) users.get(user.getName());
-        String[] infos = userInfo.split(",");
-        for (int i = 1; i < infos.length; i++) {
-            result.add(new RolePrincipal(infos[i]));
-        }
-        return result;
-    }
-
-    /**
-     * Add a role to a User.
-     *
-     * @param username
-     * @param role
-     */
-    public void addRole(String username, String role) {
-        String userInfos = (String) users.get(username);
-        if (userInfos != null) {
-            String newUserInfos = userInfos + "," + role;
-            users.put(username, newUserInfos);
-        }
-        try {
-            users.save();
-        } catch (Exception ex) {
-            logger.error("Cannot update users file,", ex);
-        }
-    }
-
-    /**
-     * Delete a Role form User.
-     *
-     * @param username
-     * @param role
-     */
-    public void deleteRole(String username, String role) {
-        String[] infos = null;
-        StringBuffer userInfoBuffer = new StringBuffer();
-
-        String userInfos = (String) users.get(username);
-
-        //If user already exists, remove the role
-        if (userInfos != null && userInfos.length() > 0) {
-            infos = userInfos.split(",");
-            String password = infos[0];
-            userInfoBuffer.append(password);
-
-            for (int i = 1; i < infos.length; i++) {
-                if (infos[i] != null && !infos[i].equals(role)) {
-                    userInfoBuffer.append(",");
-                    userInfoBuffer.append(infos[i]);
-                }
-            }
-            String newUserInfo = userInfoBuffer.toString();
-            users.put(username, newUserInfo);
-        }
-
-        try {
-            users.save();
-        } catch (Exception ex) {
-            logger.error("Cannot update users file,", ex);
-        }
-    }
-}
diff --git a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesBackingEngineFactory.java b/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesBackingEngineFactory.java
deleted file mode 100644
index c4d2b6c..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesBackingEngineFactory.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.modules.properties;
-
-import org.apache.felix.utils.properties.Properties;
-import org.apache.karaf.jaas.modules.BackingEngine;
-import org.apache.karaf.jaas.modules.BackingEngineFactory;
-import org.apache.karaf.jaas.modules.encryption.EncryptionSupport;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Map;
-
-public class PropertiesBackingEngineFactory implements BackingEngineFactory {
-
-    private final Logger logger = LoggerFactory.getLogger(PropertiesBackingEngineFactory.class);
-
-    private static final String USER_FILE = "users";
-
-    /**
-     * Builds the Backing Engine
-     *
-     * @param options
-     * @return
-     */
-    public BackingEngine build(Map options) {
-        PropertiesBackingEngine engine = null;
-        String usersFile = (String) options.get(USER_FILE);
-
-        File f = new File(usersFile);
-        Properties users;
-        try {
-            users = new Properties(f);
-            EncryptionSupport encryptionSupport = new EncryptionSupport(options);
-            engine = new PropertiesBackingEngine(users, encryptionSupport);
-        } catch (IOException ioe) {
-            logger.warn("Cannot open users file:" + usersFile);
-        } finally {
-            return engine;
-        }
-    }
-
-    /**
-     * Returns the login module class, that this factory can build.
-     *
-     * @return
-     */
-    public String getModuleClass() {
-        return PropertiesLoginModule.class.getName();
-    }
-}
diff --git a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesConverter.java b/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesConverter.java
deleted file mode 100644
index 5be9cfa..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesConverter.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.modules.properties;
-
-import org.osgi.service.blueprint.container.Converter;
-import org.osgi.service.blueprint.container.ReifiedType;
-
-import java.util.Properties;
-
-/**
- * Custom converter to transform a string into a Properties instance.
- * (to avoid removing \ from the values as is done by the default blueprint converter)
- */
-public class PropertiesConverter implements Converter {
-
-    public boolean canConvert(Object from, ReifiedType type) {
-        return String.class.isAssignableFrom(from.getClass())
-                && Properties.class.equals(type.getRawClass());
-    }
-
-    public Object convert(Object from, ReifiedType type) throws Exception {
-        Properties properties = new Properties();
-
-        String text = (String) from;
-        for (String line : text.split("[\\r\\n]+")) {
-            int index = line.indexOf('=');
-            if (index > 0) {
-                String key = line.substring(0, index).trim();
-                String value = line.substring(index + 1).trim();
-                properties.put(key, value.replaceAll("\\\\", "/"));
-            }
-        }
-
-        return properties;
-    }
-}
diff --git a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesLoginModule.java b/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesLoginModule.java
deleted file mode 100644
index 10f79cd..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesLoginModule.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.modules.properties;
-
-import java.io.File;
-import java.io.IOException;
-import java.security.Principal;
-import java.util.HashSet;
-import java.util.Map;
-import javax.security.auth.Subject;
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.NameCallback;
-import javax.security.auth.callback.PasswordCallback;
-import javax.security.auth.callback.UnsupportedCallbackException;
-import javax.security.auth.login.FailedLoginException;
-import javax.security.auth.login.LoginException;
-
-import org.apache.karaf.jaas.boot.principal.RolePrincipal;
-import org.apache.karaf.jaas.boot.principal.UserPrincipal;
-import org.apache.felix.utils.properties.Properties;
-import org.apache.karaf.jaas.modules.AbstractKarafLoginModule;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class PropertiesLoginModule extends AbstractKarafLoginModule {
-
-    private final Logger LOG = LoggerFactory.getLogger(PropertiesLoginModule.class);
-
-    private static final String USER_FILE = "users";
-
-    private String usersFile;
-
-    public void initialize(Subject sub, CallbackHandler handler, Map sharedState, Map options) {
-        super.initialize(sub,handler,options);
-        usersFile = (String) options.get(USER_FILE) + "";
-
-        if (debug) {
-            LOG.debug("Initialized debug=" + debug + " usersFile=" + usersFile);
-        }
-    }
-
-    public boolean login() throws LoginException {
-        File f = new File(usersFile);
-        Properties users;
-        try {
-            users = new Properties(f);
-        } catch (IOException ioe) {
-            throw new LoginException("Unable to load user properties file " + f);
-        }
-
-        Callback[] callbacks = new Callback[2];
-
-        callbacks[0] = new NameCallback("Username: ");
-        callbacks[1] = new PasswordCallback("Password: ", false);
-        try {
-            callbackHandler.handle(callbacks);
-        } catch (IOException ioe) {
-            throw new LoginException(ioe.getMessage());
-        } catch (UnsupportedCallbackException uce) {
-            throw new LoginException(uce.getMessage() + " not available to obtain information from user");
-        }
-        // user callback get value
-        user = ((NameCallback) callbacks[0]).getName();
-        // password callback get value
-        String password = new String(((PasswordCallback) callbacks[1]).getPassword());
-
-        // user infos container read from the users properties file
-        String userInfos = null;
-
-        try {
-            userInfos = (String) users.get(user);
-        } catch (NullPointerException e) {
-            //error handled in the next statement
-        }
-        if (userInfos == null) {
-        	if (!this.detailedLoginExcepion) {
-        		throw new FailedLoginException("login failed");
-        	} else {
-        		throw new FailedLoginException("User " + user + " does not exist");
-        	}
-        }
-        
-        // the password is in the first position
-        String[] infos = userInfos.split(",");
-        String storedPassword = infos[0];
-        
-        // check if the stored password is flagged as encrypted
-        String encryptedPassword = getEncryptedPassword(storedPassword);
-        if (!storedPassword.equals(encryptedPassword)) {
-            if (debug) {
-                LOG.debug("The password isn't flagged as encrypted, encrypt it.");
-            }
-            if (debug) {
-                LOG.debug("Rebuild the user informations string.");
-            }
-            userInfos = encryptedPassword + ",";
-            for (int i = 1; i < infos.length; i++) {
-                if (i == (infos.length - 1)) {
-                    userInfos = userInfos + infos[i];
-                } else {
-                    userInfos = userInfos + infos[i] + ",";
-                }
-            }
-            if (debug) {
-                LOG.debug("Push back the user informations in the users properties.");
-            }
-            if (user.contains("\\")) {
-                users.remove(user);
-                user = user.replace("\\", "\\\\");
-            }
-            users.put(user, userInfos);
-            try {
-                if (debug) {
-                    LOG.debug("Store the users properties file.");
-                }
-                users.save();
-            } catch (IOException ioe) {
-                LOG.warn("Unable to write user properties file " + f, ioe);
-            }
-            storedPassword = encryptedPassword;
-        }
-
-        // check the provided password
-        if (!checkPassword(password, storedPassword)) {
-        	if (!this.detailedLoginExcepion) {
-        		throw new FailedLoginException("login failed");
-        	} else {
-        		throw new FailedLoginException("Password for " + user + " does not match");
-        	}
-        }
-
-        principals = new HashSet<Principal>();
-        principals.add(new UserPrincipal(user));
-        for (int i = 1; i < infos.length; i++) {
-            principals.add(new RolePrincipal(infos[i]));
-        }
-
-        users.clear();
-
-        if (debug) {
-            LOG.debug("Successfully logged in " + user);
-        }
-        return true;
-    }
-
-    public boolean abort() throws LoginException {
-        clear();
-        if (debug) {
-            LOG.debug("abort");
-        }
-        return true;
-    }
-
-    public boolean logout() throws LoginException {
-        subject.getPrincipals().removeAll(principals);
-        principals.clear();
-        if (debug) {
-            LOG.debug("logout");
-        }
-        return true;
-    }
-}
diff --git a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/publickey/PublickeyCallback.java b/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/publickey/PublickeyCallback.java
deleted file mode 100644
index 8beb517..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/publickey/PublickeyCallback.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.modules.publickey;
-
-import java.security.PublicKey;
-import javax.security.auth.callback.Callback;
-
-public class PublickeyCallback implements Callback {
-
-    private PublicKey publicKey;
-
-    public PublicKey getPublicKey() {
-        return publicKey;
-    }
-
-    public void setPublicKey(PublicKey publicKey) {
-        this.publicKey = publicKey;
-    }
-
-}
diff --git a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/publickey/PublickeyLoginModule.java b/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/publickey/PublickeyLoginModule.java
deleted file mode 100644
index eb1a99d..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/publickey/PublickeyLoginModule.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.modules.publickey;
-
-import java.io.ByteArrayOutputStream;
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.Principal;
-import java.security.PublicKey;
-import java.security.interfaces.DSAPublicKey;
-import java.security.interfaces.RSAKey;
-import java.security.interfaces.RSAPublicKey;
-import java.util.HashSet;
-import java.util.Map;
-import javax.security.auth.Subject;
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.NameCallback;
-import javax.security.auth.callback.UnsupportedCallbackException;
-import javax.security.auth.login.FailedLoginException;
-import javax.security.auth.login.LoginException;
-
-import org.apache.felix.utils.properties.Properties;
-import org.apache.karaf.jaas.modules.AbstractKarafLoginModule;
-import org.apache.karaf.jaas.boot.principal.RolePrincipal;
-import org.apache.karaf.jaas.boot.principal.UserPrincipal;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.apache.karaf.jaas.modules.encryption.BasicEncryption.base64Encode;
-
-public class PublickeyLoginModule extends AbstractKarafLoginModule {
-
-    private final Logger LOG = LoggerFactory.getLogger(PublickeyLoginModule.class);
-
-    private static final String USERS_FILE = "users";
-
-    private String usersFile;
-
-    public void initialize(Subject subject, CallbackHandler callbackHandler, Map<String, ?> sharedState, Map<String, ?> options) {
-        super.initialize(subject, callbackHandler, options);
-        usersFile = (String) options.get(USERS_FILE) + "";
-        if (debug) {
-            LOG.debug("Initialized debug=" + debug + " usersFile=" + usersFile);
-        }
-    }
-
-    public boolean login() throws LoginException {
-        File f = new File(usersFile);
-        Properties users;
-        try {
-            users = new Properties(f);
-        } catch (IOException ioe) {
-            throw new LoginException("Unable to load user properties file " + f);
-        }
-
-        Callback[] callbacks = new Callback[2];
-        callbacks[0] = new NameCallback("Username: ");
-        callbacks[1] = new PublickeyCallback();
-        try {
-            callbackHandler.handle(callbacks);
-        } catch (IOException ioe) {
-            throw new LoginException(ioe.getMessage());
-        } catch (UnsupportedCallbackException uce) {
-            throw new LoginException(uce.getMessage() + " not available to obtain information from user");
-        }
-        String user = ((NameCallback) callbacks[0]).getName();
-        if (user == null) {
-            throw new FailedLoginException("Unable to retrieve user name");
-        }
-        PublicKey key = ((PublickeyCallback) callbacks[1]).getPublicKey();
-        if (key == null) {
-            throw new FailedLoginException("Unable to retrieve public key");
-        }
-
-        // user infos container read from the users properties file
-        String userInfos = null;
-
-        try {
-            userInfos = (String) users.get(user);
-        } catch (NullPointerException e) {
-            //error handled in the next statement
-        }
-        if (userInfos == null) {
-            if (!this.detailedLoginExcepion) {
-                throw new FailedLoginException("login failed");
-            } else {
-                throw new FailedLoginException("User " + user + " does not exist");
-            }
-        }
-
-        // the password is in the first position
-        String[] infos = userInfos.split(",");
-        String storedKey = infos[0];
-
-        // check if the stored password is flagged as encrypted
-        String encryptedKey = getEncryptedPassword(storedKey);
-        if (!storedKey.equals(encryptedKey)) {
-            if (debug) {
-                LOG.debug("The key isn't flagged as encrypted, encrypt it.");
-            }
-            if (debug) {
-                LOG.debug("Rebuild the user informations string.");
-            }
-            userInfos = encryptedKey + ",";
-            for (int i = 2; i < infos.length; i++) {
-                if (i == (infos.length - 1)) {
-                    userInfos = userInfos + infos[i];
-                } else {
-                    userInfos = userInfos + infos[i] + ",";
-                }
-            }
-            if (debug) {
-                LOG.debug("Push back the user informations in the users properties.");
-            }
-            users.put(user, userInfos);
-            try {
-                if (debug) {
-                    LOG.debug("Store the users properties file.");
-                }
-                users.save();
-            } catch (IOException ioe) {
-                LOG.warn("Unable to write user properties file " + f, ioe);
-            }
-            storedKey = encryptedKey;
-        }
-
-        // check the provided password
-        if (!checkPassword(getString(key), storedKey)) {
-            if (!this.detailedLoginExcepion) {
-                throw new FailedLoginException("login failed");
-            } else {
-                throw new FailedLoginException("Public key for " + user + " does not match");
-            }
-        }
-
-        principals = new HashSet<Principal>();
-        principals.add(new UserPrincipal(user));
-        for (int i = 1; i < infos.length; i++) {
-            principals.add(new RolePrincipal(infos[i]));
-        }
-
-        users.clear();
-
-        if (debug) {
-            LOG.debug("Successfully logged in " + user);
-        }
-        return true;
-    }
-
-    private String getString(PublicKey key) throws FailedLoginException {
-        try {
-            if (key instanceof DSAPublicKey) {
-                DSAPublicKey dsa = (DSAPublicKey) key;
-                ByteArrayOutputStream baos = new ByteArrayOutputStream();
-                DataOutputStream dos = new DataOutputStream(baos);
-                write(dos, "ssh-dss");
-                write(dos, dsa.getParams().getP());
-                write(dos, dsa.getParams().getQ());
-                write(dos, dsa.getParams().getG());
-                write(dos, dsa.getY());
-                dos.close();
-                return base64Encode(baos.toByteArray());
-            } else if (key instanceof RSAKey) {
-                RSAPublicKey rsa = (RSAPublicKey) key;
-                ByteArrayOutputStream baos = new ByteArrayOutputStream();
-                DataOutputStream dos = new DataOutputStream(baos);
-                write(dos, "ssh-rsa");
-                write(dos, rsa.getPublicExponent());
-                write(dos, rsa.getModulus());
-                dos.close();
-                return base64Encode(baos.toByteArray());
-            } else {
-                throw new FailedLoginException("Unsupported key type " + key.getClass().toString());
-            }
-        } catch (IOException e) {
-            throw new FailedLoginException("Unable to check public key");
-        }
-    }
-
-    private void write(DataOutputStream dos, BigInteger integer) throws IOException {
-        byte[] data = integer.toByteArray();
-        dos.writeInt(data.length);
-        dos.write(data, 0, data.length);
-    }
-
-    private void write(DataOutputStream dos, String str) throws IOException {
-        byte[] data = str.getBytes();
-        dos.writeInt(data.length);
-        dos.write(data);
-    }
-
-    public boolean abort() throws LoginException {
-        clear();
-        if (debug) {
-            LOG.debug("abort");
-        }
-        return true;
-    }
-
-    public boolean logout() throws LoginException {
-        subject.getPrincipals().removeAll(principals);
-        principals.clear();
-        if (debug) {
-            LOG.debug("logout");
-        }
-        return true;
-    }
-
-}
diff --git a/karaf-2.3.x/jaas/modules/src/main/resources/OSGI-INF/blueprint/karaf-jaas-module.xml b/karaf-2.3.x/jaas/modules/src/main/resources/OSGI-INF/blueprint/karaf-jaas-module.xml
deleted file mode 100644
index ecc899f..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/resources/OSGI-INF/blueprint/karaf-jaas-module.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.0.0"
-           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
-           xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0">
-
-    <type-converters>
-        <bean class="org.apache.karaf.jaas.modules.properties.PropertiesConverter"/>
-    </type-converters>
-
-    <!-- Allow usage of System properties, especially the karaf.base property -->
-    <ext:property-placeholder placeholder-prefix="$[" placeholder-suffix="]"/>
-
-    <!-- AdminConfig property place holder for the org.apache.karaf.jaas  -->
-    <cm:property-placeholder persistent-id="org.apache.karaf.jaas" update-strategy="reload">
-        <cm:default-properties>
-            <cm:property name="detailed.login.exception" value="false"/>
-            <cm:property name="encryption.name" value=""/>
-            <cm:property name="encryption.enabled" value="false"/>
-            <cm:property name="encryption.prefix" value="{CRYPT}"/>
-            <cm:property name="encryption.suffix" value="{CRYPT}"/>
-            <cm:property name="encryption.algorithm" value="MD5"/>
-            <cm:property name="encryption.encoding" value="hexadecimal"/>
-        </cm:default-properties>
-    </cm:property-placeholder>
-
-    <jaas:config name="karaf">
-        <jaas:module className="org.apache.karaf.jaas.modules.properties.PropertiesLoginModule" flags="sufficient">
-            users = $[karaf.base]/etc/users.properties
-            detailed.login.exception = ${detailed.login.exception}
-            encryption.name = ${encryption.name}
-            encryption.enabled = ${encryption.enabled}
-            encryption.prefix = ${encryption.prefix}
-            encryption.suffix = ${encryption.suffix}
-            encryption.algorithm = ${encryption.algorithm}
-            encryption.encoding = ${encryption.encoding}
-        </jaas:module>
-        <jaas:module className="org.apache.karaf.jaas.modules.publickey.PublickeyLoginModule" flags="sufficient">
-            users = $[karaf.base]/etc/keys.properties
-            detailed.login.exception = ${detailed.login.exception}
-            encryption.name = ${encryption.name}
-            encryption.enabled = ${encryption.enabled}
-            encryption.prefix = ${encryption.prefix}
-            encryption.suffix = ${encryption.suffix}
-            encryption.algorithm = ${encryption.algorithm}
-            encryption.encoding = ${encryption.encoding}
-        </jaas:module>
-    </jaas:config>
-
-
-    <!-- The Backing Engine Factory Service for the PropertiesLoginModule -->
-    <service interface="org.apache.karaf.jaas.modules.BackingEngineFactory">
-        <bean class="org.apache.karaf.jaas.modules.properties.PropertiesBackingEngineFactory"/>
-    </service>
-
-    <service interface="org.apache.karaf.jaas.modules.EncryptionService" ranking="-1">
-        <service-properties>
-            <entry key="name" value="basic"/>
-        </service-properties>
-        <bean class="org.apache.karaf.jaas.modules.encryption.BasicEncryptionService"/>
-    </service>
-
-</blueprint>
diff --git a/karaf-2.3.x/jaas/modules/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/jaas/modules/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index f65cb6e..0000000
--- a/karaf-2.3.x/jaas/modules/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,20 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides several JAAS modules depending of the target backend that you want to use.
-
-    Currently, Karaf provides login modules for:
-    - JDBC to use a database backend
-    - LDAP to use a LDAP backend
-    - Properties to use a simple properties file
-
-    The default encryption facility is also provided by this bundle.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mSecurity Framework\u001B[0m section of the Karaf Developer Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/jaas/modules/src/test/java/org/apache/karaf/jaas/modules/properties/PropertiesConverterTest.java b/karaf-2.3.x/jaas/modules/src/test/java/org/apache/karaf/jaas/modules/properties/PropertiesConverterTest.java
deleted file mode 100644
index 0156ef8..0000000
--- a/karaf-2.3.x/jaas/modules/src/test/java/org/apache/karaf/jaas/modules/properties/PropertiesConverterTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.jaas.modules.properties;
-
-import junit.framework.TestCase;
-import org.osgi.service.blueprint.container.ReifiedType;
-
-import java.util.Properties;
-import java.util.List;
-
-/**
- * Test cases for {@link org.apache.karaf.jaas.modules.properties.PropertiesConverter}
- */
-public class PropertiesConverterTest extends TestCase {
-
-    private PropertiesConverter converter;
-
-    public void setUp() {
-        converter = new PropertiesConverter();
-    }
-
-    /*
-     * Test the canConvert method
-     */
-    public void testCanConvert() {
-        assertTrue(converter.canConvert("a string", new ReifiedType(Properties.class)));
-        assertFalse(converter.canConvert(new Object(), new ReifiedType(Properties.class)));
-        assertFalse(converter.canConvert("a string", new ReifiedType(List.class)));
-    }
-
-    /*
-     * Test the convert method when dealing with unix paths (no \)
-     */
-    public void testConvertWithUnixPathNames() throws Exception {
-        Properties properties =
-                (Properties) converter.convert("users = /opt/karaf/etc/users.properties",
-                        new ReifiedType(Properties.class));
-        assertNotNull(properties);
-        assertEquals("/opt/karaf/etc/users.properties", properties.get("users"));
-    }
-
-    /*
-     * Test the convert method when dealing with windows paths (avoid escaping \)
-     */
-    public void testConvertWithWindowsPathNames() throws Exception {
-        Properties properties =
-                (Properties) converter.convert("users = c:\\opt\\karaf/etc/users.properties",
-                        new ReifiedType(Properties.class));
-        assertNotNull(properties);
-        assertEquals("c:/opt/karaf/etc/users.properties", properties.get("users"));
-    }
-}
diff --git a/karaf-2.3.x/jaas/pom.xml b/karaf-2.3.x/jaas/pom.xml
deleted file mode 100644
index 7ff6771..0000000
--- a/karaf-2.3.x/jaas/pom.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>karaf</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.jaas</groupId>
-    <artifactId>jaas</artifactId>
-    <packaging>pom</packaging>
-    <name>Apache Karaf :: JAAS</name>
-
-    <modules>
-        <module>boot</module>
-        <module>config</module>
-        <module>modules</module>
-        <module>jasypt</module>
-        <module>command</module>
-    </modules>
-
-</project>
diff --git a/karaf-2.3.x/main/NOTICE b/karaf-2.3.x/main/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/main/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/main/pom.xml b/karaf-2.3.x/main/pom.xml
deleted file mode 100644
index c64ce56..0000000
--- a/karaf-2.3.x/main/pom.xml
+++ /dev/null
@@ -1,241 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>karaf</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.main</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Main</name>
-    <description>This bundle is the main Karaf launcher. It's responsible of the Karaf startup including the console, branding, etc bootstrap.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.eclipse</groupId>
-            <artifactId>osgi</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.framework</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicemix.bundles</groupId>
-            <artifactId>org.apache.servicemix.bundles.junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.swissbox</groupId>
-            <artifactId>pax-swissbox-tinybundles</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>commons-logging</groupId>
-            <artifactId>commons-logging</artifactId>
-            <version>1.1.1</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifest>
-                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
-                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
-                        </manifest>
-                    </archive>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <_donotcopy>(CVS|.svn|config.properties)</_donotcopy>
-                        <Main-Class>org.apache.karaf.main.Main</Main-Class>
-                        <Bundle-Name>Apache Karaf</Bundle-Name>
-                        <Bundle-Description>OSGi R4 framework.</Bundle-Description>
-                        <Export-Package />
-                        <!--
-                        <Private-Package>
-                            org.apache.felix.*;-split-package:=merge-first,
-                            org.eclipse.*;-split-package:=merge-first,
-                            org.osgi.*;-split-package:=merge-first,
-                            META-INF;-split-package:=merge-first
-                        </Private-Package>
-                        <Import-Package>!*</Import-Package>
-                        -->
-                        <Private-Package>
-                            org.apache.karaf.main*,
-                            org.osgi.*;-split-package:=merge-first
-                        </Private-Package>
-                    </instructions>
-                    <unpackBundle>true</unpackBundle>
-                </configuration>
-            </plugin>
-            <!--
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-shade-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>shade</goal>
-                        </goals>
-                        <configuration>
-                            <artifactSet>
-                                <includes>
-                                    <include>org.eclipse:osgi</include>
-                                    <include>org.apache.felix:org.apache.felix.framework</include>
-                                    <include>${project.groupId}:${project.artifactId}</include>
-                                </includes>
-                            </artifactSet>
-                            <filters>
-                                <filter>
-                                    <artifact>org.eclipse:osgi</artifact>
-                                    <includes>
-                                        <include>org/osgi/**</include>
-                                        <include>org/eclipse/**</include>
-                                        <include>hookconfigurators.properties</include>
-                                    </includes>
-                                </filter>
-                                <filter>
-                                    <artifact>org.apache.felix:org.apache.felix.framework</artifact>
-                                    <includes>
-                                        <include>org/apache/felix/**</include>
-                                    </includes>
-                                </filter>
-                            </filters>
-                            <createSourcesJar>${createSourcesJar}</createSourcesJar>
-                            <promoteTransitiveDependencies>true</promoteTransitiveDependencies>
-                            <createDependencyReducedPom>true</createDependencyReducedPom>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        -->
-        </plugins>
-    </build>
-
-    <profiles>
-        <profile>
-            <id>deploy</id>
-            <properties>
-                <createSourcesJar>true</createSourcesJar>
-            </properties>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-dependency-plugin</artifactId>
-                        <executions>
-                            <execution>
-                                <id>unpack-sources</id>
-                                <phase>generate-sources</phase>
-                                <goals>
-                                    <goal>unpack</goal>
-                                </goals>
-                                <configuration>
-                                    <artifactItems>
-                                        <artifactItem>
-                                            <groupId>org.eclipse</groupId>
-                                            <artifactId>osgi</artifactId>
-                                            <classifier>sources</classifier>
-                                        </artifactItem>
-                                        <artifactItem>
-                                            <groupId>org.osgi</groupId>
-                                            <artifactId>org.osgi.core</artifactId>
-                                            <classifier>sources</classifier>
-                                        </artifactItem>
-                                        <artifactItem>
-                                            <groupId>org.apache.felix</groupId>
-                                            <artifactId>org.apache.felix.framework</artifactId>
-                                            <classifier>sources</classifier>
-                                        </artifactItem>
-                                    </artifactItems>
-                                    <outputDirectory>${project.build.directory}/sources</outputDirectory>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-source-plugin</artifactId>
-                        <executions>
-                            <execution>
-                                <id>attach-sources</id>
-                                <phase>process-classes</phase>
-                                <goals>
-                                    <goal>jar</goal>
-                                </goals>
-                            </execution>
-                        </executions>
-                    </plugin>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-javadoc-plugin</artifactId>
-                        <executions>
-                            <execution>
-                                <id>package</id>
-                                <phase>package</phase>
-                                <goals>
-                                    <goal>jar</goal>
-                                </goals>
-                            </execution>
-                        </executions>
-                        <configuration>
-                            <minmemory>128m</minmemory>
-                            <maxmemory>512m</maxmemory>
-                            <sourcepath>${project.build.directory}/sources</sourcepath>
-                        </configuration>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
-
-</project>
diff --git a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Bootstrap.java b/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Bootstrap.java
deleted file mode 100644
index 77c895d..0000000
--- a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Bootstrap.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-/**
- * The Bootstrap class is used by the wrapper shell to bootstrap Karaf.
- * Given JSW is using introspection to launch the main method, it would cause
- * a CNFE on the OSGi related classes.  Using an indirection solves this problem.
- */
-public class Bootstrap {
-
-    public static void main(String[] args) throws Exception {
-        Main.main(args);
-    }
-}
diff --git a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/BootstrapLogManager.java b/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/BootstrapLogManager.java
deleted file mode 100644
index 5bf0b73..0000000
--- a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/BootstrapLogManager.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.Properties;
-import java.util.logging.Handler;
-import java.util.logging.LogRecord;
-import java.util.logging.StreamHandler;
-
-/**
- * Convenience class for configuring java.util.logging to append to
- * the configured log4j log.  This could be used for bootstrap logging
- * prior to start of the framework.
- * 
- */
-public class BootstrapLogManager {
-    private static Handler handler;
-    private static final String KARAF_BOOTSTRAP_LOG = "karaf.bootstrap.log";
-
-    private static Properties configProps;
-
-    public static synchronized Handler getDefaultHandler () throws Exception {
-        if (handler != null) {
-            return handler;
-        }
-        String filename;
-        File log;
-        Properties props = new Properties();
-        filename = configProps.getProperty(KARAF_BOOTSTRAP_LOG);
-
-        if (filename != null) {
-            log = new File(filename);
-        } else {
-            // Make a best effort to log to the default file appender configured for log4j
-            FileInputStream fis = null;
-            try {
-                fis = new FileInputStream(System.getProperty("karaf.base") + "/etc/org.ops4j.pax.logging.cfg");
-                props.load(fis);
-            } catch (IOException e) {
-                props.setProperty("log4j.appender.out.file", "${karaf.data}/log/karaf.log");
-            } finally {
-                if (fis != null) { 
-                    try {
-                        fis.close(); 
-                    } catch (IOException ioe) {
-                        ioe.printStackTrace();
-                    }
-                }
-            }
-
-            if (props.getProperty("log4j.appender.out.file") == null) {
-                // manage if the log4j.appender.out.file property is not present in
-                // the etc/org.ops4j.pax.logging.cfg file
-                props.setProperty("log4j.appender.out.file", "${karaf.data}/log/karaf.log");
-            }
-            filename = Main.substVars(props.getProperty("log4j.appender.out.file"),"log4j.appender.out.file", null, null);
-            log = new File(filename);
-        }
-
-
-        return new BootstrapLogManager.SimpleFileHandler(log);
-
-    }
-
-    public static void setProperties(Properties configProps) {
-        BootstrapLogManager.configProps = configProps;
-    }
-
-
-    /**
-     * Implementation of java.util.logging.Handler that does simple appending
-     * to a named file.  Should be able to use this for bootstrap logging
-     * via java.util.logging prior to startup of pax logging.
-     */
-    public static class SimpleFileHandler extends StreamHandler {
-
-        public SimpleFileHandler (File file) throws IOException {
-            open(file, true);
-        }
-
-        private void open (File logfile, boolean append) throws IOException {
-            if (!logfile.getParentFile().exists()) {
-                try {
-                    logfile.getParentFile().mkdirs();
-                } catch (SecurityException se) {
-                    throw new IOException(se.getMessage());
-                }
-            }
-            FileOutputStream fout = new FileOutputStream(logfile, append);
-            BufferedOutputStream out = new BufferedOutputStream(fout);
-            setOutputStream(out);
-        }
-
-        public synchronized void publish (LogRecord record) {
-            if (!isLoggable(record)) {
-                return;
-            }
-            super.publish(record);
-            flush();
-        }
-    }
-
-
-}
diff --git a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/DefaultJDBCLock.java b/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/DefaultJDBCLock.java
deleted file mode 100644
index 452fbe6..0000000
--- a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/DefaultJDBCLock.java
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.Properties;
-import java.util.logging.Logger;
-
-/**
- * Represents an exclusive lock on a database,
- * used to avoid multiple Karaf instances attempting
- * to become master.
- */
-public class DefaultJDBCLock implements Lock {
-
-    final Logger LOG = Logger.getLogger(this.getClass().getName());
-    
-    private static final String PROPERTY_LOCK_URL               = "karaf.lock.jdbc.url";
-    private static final String PROPERTY_LOCK_JDBC_DRIVER       = "karaf.lock.jdbc.driver";
-    private static final String PROPERTY_LOCK_JDBC_USER         = "karaf.lock.jdbc.user";
-    private static final String PROPERTY_LOCK_JDBC_PASSWORD     = "karaf.lock.jdbc.password";
-    private static final String PROPERTY_LOCK_JDBC_TABLE        = "karaf.lock.jdbc.table";
-    private static final String PROPERTY_LOCK_JDBC_CLUSTERNAME  = "karaf.lock.jdbc.clustername";
-    private static final String PROPERTY_LOCK_JDBC_TIMEOUT      = "karaf.lock.jdbc.timeout";
-    
-    private static final String DEFAULT_PASSWORD = "";
-    private static final String DEFAULT_USER = "";
-    private static final String DEFAULT_TABLE = "KARAF_LOCK";
-    private static final String DEFAULT_CLUSTERNAME = "karaf";
-    private static final String DEFAULT_TIMEOUT = "10"; // in seconds
-
-    final Statements statements;
-    Connection lockConnection;
-    String url;
-    String driver;
-    String user; 
-    String password;
-    String table;
-    String clusterName;
-    int timeout;
-
-    public DefaultJDBCLock(Properties props) {
-        try {
-            LOG.addHandler(BootstrapLogManager.getDefaultHandler());
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-        this.url = props.getProperty(PROPERTY_LOCK_URL);
-        this.driver = props.getProperty(PROPERTY_LOCK_JDBC_DRIVER);
-        this.user = props.getProperty(PROPERTY_LOCK_JDBC_USER, DEFAULT_USER);
-        this.password = props.getProperty(PROPERTY_LOCK_JDBC_PASSWORD, DEFAULT_PASSWORD);
-        this.table = props.getProperty(PROPERTY_LOCK_JDBC_TABLE, DEFAULT_TABLE);
-        this.clusterName = props.getProperty(PROPERTY_LOCK_JDBC_CLUSTERNAME, DEFAULT_CLUSTERNAME);
-        this.timeout = Integer.parseInt(props.getProperty(PROPERTY_LOCK_JDBC_TIMEOUT, DEFAULT_TIMEOUT));
-        
-        this.statements = createStatements();
-        
-        init();
-    }
-    
-    Statements createStatements() {
-        Statements statements = new Statements();
-        statements.setTableName(table);
-        statements.setNodeName(clusterName);
-        return statements;
-    }
-    
-    void init() {
-        try {
-            createDatabase();
-            createSchema();
-        } catch (Exception e) {
-            LOG.severe("Error occured while attempting to obtain connection: " + e);
-        }
-    }
-    
-    void createDatabase() {
-        // do nothing in the default implementation
-    }
-
-    void createSchema() {
-        if (schemaExists()) {
-            return;
-        }
-        
-        String[] createStatments = this.statements.getLockCreateSchemaStatements(getCurrentTimeMillis());
-        Statement statement = null;
-        
-        try {
-            statement = getConnection().createStatement();
-            
-            for (String stmt : createStatments) {
-                statement.execute(stmt);
-            }
-            
-            getConnection().commit();
-        } catch (Exception e) {
-            LOG.severe("Could not create schema: " + e );
-        } finally {
-            closeSafely(statement);
-        }
-    }
-
-    boolean schemaExists() {
-        ResultSet rs = null;
-        boolean schemaExists = false;
-        
-        try {
-            rs = getConnection().getMetaData().getTables(null, null, statements.getFullLockTableName(), new String[] {"TABLE"});
-            schemaExists = rs.next();
-        } catch (Exception ignore) {
-            LOG.severe("Error testing for db table: " + ignore);
-        } finally {
-            closeSafely(rs);
-        }
-        
-        return schemaExists;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.karaf.main.Lock#lock()
-     */
-    public boolean lock() {
-        boolean result = aquireLock();
-        
-        if (result) {
-            result = updateLock();
-        }
-        
-        return result;
-    }
-    
-    boolean aquireLock() {
-        String lockCreateStatement = statements.getLockCreateStatement();
-        PreparedStatement preparedStatement = null;
-        boolean lockAquired = false;
-        
-        try {
-            preparedStatement = getConnection().prepareStatement(lockCreateStatement);
-            preparedStatement.setQueryTimeout(timeout);
-            lockAquired = preparedStatement.execute();
-        } catch (Exception e) {
-            LOG.warning("Failed to acquire database lock: " + e);
-        }finally {
-            closeSafely(preparedStatement);
-        }
-        
-        return lockAquired;
-    }
-
-    boolean updateLock() {
-        String lockUpdateStatement = statements.getLockUpdateStatement(getCurrentTimeMillis());
-        PreparedStatement preparedStatement = null;
-        boolean lockUpdated = false;
-        
-        try {
-            preparedStatement = getConnection().prepareStatement(lockUpdateStatement);
-            preparedStatement.setQueryTimeout(timeout);
-            int rows = preparedStatement.executeUpdate();
-            lockUpdated = (rows == 1);
-        } catch (Exception e) {
-            LOG.warning("Failed to update database lock: " + e);
-        }finally {
-            closeSafely(preparedStatement);
-        }
-        
-        return lockUpdated;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.karaf.main.Lock#release()
-     */
-    public void release() throws Exception {
-        if (isConnected()) {
-            try {
-                getConnection().rollback();
-            } catch (SQLException e) {
-                LOG.severe("Exception while rollbacking the connection on release: " + e);
-            } finally {
-                try {
-                    getConnection().close();
-                } catch (SQLException ignored) {
-                    LOG.fine("Exception while closing connection on release: " + ignored);
-                }
-            }
-        }
-        
-        lockConnection = null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.karaf.main.Lock#isAlive()
-     */
-    public boolean isAlive() throws Exception {
-        if (!isConnected()) { 
-            LOG.severe("Lost lock!");
-            return false; 
-        }
-
-        return updateLock();
-    }
-    
-    boolean isConnected() throws SQLException {
-        return lockConnection != null && !lockConnection.isClosed();
-    }
-    
-    void closeSafely(Statement preparedStatement) {
-        if (preparedStatement != null) {
-            try {
-                preparedStatement.close();
-            } catch (SQLException e) {
-                LOG.severe("Failed to close statement: " + e);
-            }
-        }
-    }
-    
-    void closeSafely(ResultSet rs) {
-        if (rs != null) {
-            try {
-                rs.close();
-            } catch (SQLException e) {
-                LOG.severe("Error occured while releasing ResultSet: " + e);
-            }
-        }
-    }
-    
-    Connection getConnection() throws Exception {
-        if (!isConnected()) {
-            lockConnection = createConnection(driver, url, user, password);
-            lockConnection.setAutoCommit(false);
-        }
-        
-        return lockConnection;
-    }
-
-    /**
-     * Create a new jdbc connection.
-     * 
-     * @param driver
-     * @param url
-     * @param username
-     * @param password
-     * @return a new jdbc connection
-     * @throws Exception 
-     */
-    Connection createConnection(String driver, String url, String username, String password) throws Exception {
-        if (url.toLowerCase().startsWith("jdbc:derby")) {
-            url = (url.toLowerCase().contains("create=true")) ? url : url + ";create=true";
-        }
-        
-        try {
-            return doCreateConnection(driver, url, username, password);
-        } catch (Exception e) {
-            LOG.severe("Error occured while setting up JDBC connection: " + e);
-            throw e; 
-        }
-    }
-
-    /**
-     * This method could be used to inject a mock jdbc connection for testing purposes.
-     * 
-     * @param driver
-     * @param url
-     * @param username
-     * @param password
-     * @return
-     * @throws ClassNotFoundException
-     * @throws SQLException
-     */
-    Connection doCreateConnection(String driver, String url, String username, String password) throws ClassNotFoundException, SQLException {
-        Class.forName(driver);
-        // results in a closed connection in Derby if the update lock table request timed out
-        // DriverManager.setLoginTimeout(timeout);
-        return DriverManager.getConnection(url, username, password);
-    }
-    
-    long getCurrentTimeMillis() {
-        return System.currentTimeMillis();
-    }
-}
diff --git a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/DerbyJDBCLock.java b/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/DerbyJDBCLock.java
deleted file mode 100644
index cd0fbe1..0000000
--- a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/DerbyJDBCLock.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import java.sql.Connection;
-import java.util.Properties;
-
-/**
- * Represents an exclusive lock on a database,
- * used to avoid multiple Karaf instances attempting
- * to become master.
- */
-public class DerbyJDBCLock extends DefaultJDBCLock {
-
-    public DerbyJDBCLock(Properties props) {
-        super(props);
-    }
-
-    @Override
-    Connection createConnection(String driver, String url, String username, String password) throws Exception {
-        url = (url.toLowerCase().contains("create=true")) ? url : url + ";create=true";
-        
-        return super.createConnection(driver, url, username, password);
-    }
-}
diff --git a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Lock.java b/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Lock.java
deleted file mode 100644
index 6c2d84f..0000000
--- a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Lock.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-public interface Lock {
-
-    /**
-     * A KeepAlive function to maintain the lock. 
-     * Indicates whether or not the lock could be aquired.
-     * 
-     * @return true if connection lock retained, false otherwise.
-     * @throws Exception
-     */
-    boolean lock() throws Exception;
-
-    /**
-     * Terminate the lock connection safely.
-     * 
-     * @throws Exception
-     */
-    void release() throws Exception;
-
-    /**
-     * Indicates whether or not the lock still exists.
-     * 
-     * @return true, if the lock still exists, otherwise false.
-     * @throws Exception
-     */
-    boolean isAlive() throws Exception;
-}
diff --git a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Main.java b/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Main.java
deleted file mode 100644
index 45ed309..0000000
--- a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Main.java
+++ /dev/null
@@ -1,1570 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import java.io.*;
-import java.lang.management.ManagementFactory;
-import java.lang.management.RuntimeMXBean;
-import java.net.InetAddress;
-import java.net.MalformedURLException;
-import java.net.ServerSocket;
-import java.net.Socket;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.security.AccessControlException;
-import java.security.Provider;
-import java.security.Security;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Random;
-import java.util.StringTokenizer;
-import java.util.TreeMap;
-import java.util.jar.Manifest;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleException;
-import org.osgi.framework.Constants;
-import org.osgi.framework.FrameworkEvent;
-import org.osgi.framework.FrameworkListener;
-import org.osgi.framework.ServiceReference;
-import org.osgi.framework.launch.Framework;
-import org.osgi.framework.launch.FrameworkFactory;
-import org.osgi.service.startlevel.StartLevel;
-
-/**
- * <p>
- * This class is the default way to instantiate and execute the framework. It is not
- * intended to be the only way to instantiate and execute the framework; rather, it is
- * one example of how to do so. When embedding the framework in a host application,
- * this class can serve as a simple guide of how to do so. It may even be
- * worthwhile to reuse some of its property handling capabilities. This class
- * is completely static and is only intended to start a single instance of
- * the framework.
- * </p>
- */
-public class Main {
-    /**
-     * The default name used for the system properties file.
-     */
-    public static final String SYSTEM_PROPERTIES_FILE_NAME = "system.properties";
-    /**
-     * The default name used for the configuration properties file.
-     */
-    public static final String CONFIG_PROPERTIES_FILE_NAME = "config.properties";
-    /**
-     * The default name used for the startup properties file.
-     */
-    public static final String STARTUP_PROPERTIES_FILE_NAME = "startup.properties";
-    /**
-     * The property name prefix for the launcher's auto-install property.
-     */
-    public static final String PROPERTY_AUTO_INSTALL = "karaf.auto.install";
-    /**
-     * The property for auto-discovering the bundles
-     */
-    public static final String PROPERTY_AUTO_START = "karaf.auto.start";
-    /**
-     * The system property for specifying the Karaf home directory.  The home directory
-     * hold the binary install of Karaf.
-     */
-    public static final String PROP_KARAF_HOME = "karaf.home";
-    /**
-     * The environment variable for specifying the Karaf home directory.  The home directory
-     * hold the binary install of Karaf.
-     */
-    public static final String ENV_KARAF_HOME = "KARAF_HOME";
-    /**
-     * The system property for specifying the Karaf base directory.  The base directory
-     * holds the configuration and data for a Karaf instance.
-     */
-    public static final String PROP_KARAF_BASE = "karaf.base";
-    /**
-     * The environment variable for specifying the Karaf base directory.  The base directory
-     * holds the configuration and data for a Karaf instance.
-     */
-    public static final String ENV_KARAF_BASE = "KARAF_BASE";
-    /**
-     * The system property for specifying the Karaf data directory. The data directory
-     * holds the bundles data and cache for a Karaf instance.
-     */
-    public static final String PROP_KARAF_DATA = "karaf.data";
-    /**
-     * The environment variable for specifying the Karaf data directory. The data directory
-     * holds the bundles data and cache for a Karaf instance.
-     */
-    public static final String ENV_KARAF_DATA = "KARAF_DATA";
-    /**
-     * The system property for specifying the Karaf data directory. The data directory
-     * holds the bundles data and cache for a Karaf instance.
-     */
-    public static final String PROP_KARAF_INSTANCES = "karaf.instances";
-    /**
-     * The system property for specifying the Karaf data directory. The data directory
-     * holds the bundles data and cache for a Karaf instance.
-     */
-    public static final String ENV_KARAF_INSTANCES = "KARAF_INSTANCES";
-    /**
-     * The system property for holding the Karaf version.
-     */
-    public static final String PROP_KARAF_VERSION = "karaf.version";
-
-    /**
-     * Config property which identifies directories which contain bundles to be loaded by SMX
-     */
-    public static final String BUNDLE_LOCATIONS = "bundle.locations";
-
-    /**
-     * Config property that indicates we want to convert bundles locations
-     * to Maven style URLs
-     */
-    public static final String PROPERTY_CONVERT_TO_MAVEN_URL = "karaf.maven.convert";
-
-    /**
-     * If a lock should be used before starting the runtime
-     */
-    public static final String PROPERTY_USE_LOCK = "karaf.lock";
-
-    /**
-     * The lock implementation
-     */
-    public static final String PROPERTY_LOCK_CLASS = "karaf.lock.class";
-
-    public static final String PROPERTY_LOCK_DELAY = "karaf.lock.delay";
-
-    public static final String PROPERTY_LOCK_LEVEL = "karaf.lock.level";
-
-    public static final String DEFAULT_REPO = "karaf.default.repository";
-    
-    public static final String KARAF_FRAMEWORK = "karaf.framework";
-
-    public static final String KARAF_FRAMEWORK_FACTORY = "karaf.framework.factory";
-
-    public static final String KARAF_SHUTDOWN_TIMEOUT = "karaf.shutdown.timeout";
-
-    public static final String KARAF_SHUTDOWN_PORT = "karaf.shutdown.port";
-
-    public static final String KARAF_SHUTDOWN_HOST = "karaf.shutdown.host";
-
-    public static final String KARAF_SHUTDOWN_PORT_FILE = "karaf.shutdown.port.file";
-
-    public static final String KARAF_SHUTDOWN_COMMAND = "karaf.shutdown.command";
-
-    public static final String KARAF_SHUTDOWN_PID_FILE = "karaf.shutdown.pid.file";
-
-    public static final String DEFAULT_SHUTDOWN_COMMAND = "SHUTDOWN";
-
-    public static final String PROPERTY_LOCK_CLASS_DEFAULT = SimpleFileLock.class.getName();
-
-    public static final String INCLUDES_PROPERTY = "${includes}"; // mandatory includes
-
-    public static final String OPTIONALS_PROPERTY = "${optionals}"; // optionals includes
-
-    public static final String KARAF_ACTIVATOR = "Karaf-Activator";
-
-    public static final String SECURITY_PROVIDERS = "org.apache.karaf.security.providers";
-
-    public static final String KARAF_STARTUP_MESSAGE = "karaf.startup.message";
-    
-    private static final String KARAF_DELAY_CONSOLE = "karaf.delay.console";
-
-	public static final String OVERRIDE_PREFIX = "karaf.override.";
-
-    Logger LOG = Logger.getLogger(this.getClass().getName());
-
-    private File karafHome;
-    private File karafBase;
-    private File karafData;
-    private File karafInstances;
-    private Properties configProps = null;
-    private Framework framework = null;
-    private final String[] args;
-    private int exitCode;
-    private Lock lock;
-    private int defaultStartLevel = 100;
-    private int lockStartLevel = 1;
-    private int lockDelay = 1000;
-    private int shutdownTimeout = 5 * 60 * 1000;
-    private boolean exiting = false;
-    private ShutdownCallback shutdownCallback;
-    private List<BundleActivator> karafActivators = new ArrayList<BundleActivator>();
-    private Object startLevelLock = new Object();
-    private StartLevelListener startLevelListener;
-
-    public Main(String[] args) {
-        this.args = args;
-    }
-
-    public void setShutdownCallback(ShutdownCallback shutdownCallback) {
-        this.shutdownCallback = shutdownCallback;
-    }
-
-    public void launch() throws Exception {
-        karafHome = Utils.getKarafHome();
-        karafBase = Utils.getKarafDirectory(Main.PROP_KARAF_BASE, Main.ENV_KARAF_BASE, karafHome, false, true);
-        karafData = Utils.getKarafDirectory(Main.PROP_KARAF_DATA, Main.ENV_KARAF_DATA, new File(karafBase, "data"), true, true);
-        karafInstances = Utils.getKarafDirectory(Main.PROP_KARAF_INSTANCES, Main.ENV_KARAF_INSTANCES, new File(karafHome, "instances"), false, false);
-
-        Package p = Package.getPackage("org.apache.karaf.main");
-        if (p != null && p.getImplementationVersion() != null) {
-            System.setProperty(PROP_KARAF_VERSION, p.getImplementationVersion());
-        }
-        System.setProperty(PROP_KARAF_HOME, karafHome.getPath());
-        System.setProperty(PROP_KARAF_BASE, karafBase.getPath());
-        System.setProperty(PROP_KARAF_DATA, karafData.getPath());
-        System.setProperty(PROP_KARAF_INSTANCES, karafInstances.getPath());
-
-        // Load system properties.
-        loadSystemProperties(karafBase);
-
-        updateInstancePid();
-
-        // Read configuration properties.
-        configProps = loadConfigProperties();
-        BootstrapLogManager.setProperties(configProps);
-        LOG.addHandler(BootstrapLogManager.getDefaultHandler());
-        
-        // Copy framework properties from the system properties.
-        Main.copySystemProperties(configProps);
-
-        boolean delayConsoleStart = Boolean.parseBoolean(configProps.getProperty(KARAF_DELAY_CONSOLE, "false"));
-        System.setProperty(KARAF_DELAY_CONSOLE, new Boolean(delayConsoleStart).toString());
-
-        if (delayConsoleStart) {
-        	System.out.println(configProps.getProperty(KARAF_STARTUP_MESSAGE, "Apache Karaf starting up. Press Enter to open shell now ..."));
-        }
-
-        ClassLoader classLoader = createClassLoader(configProps);
-
-        processSecurityProperties(configProps);
-
-        if (configProps.getProperty(Constants.FRAMEWORK_STORAGE) == null) {
-            File storage = new File(karafData.getPath(), "cache");
-            try {
-                storage.mkdirs();
-            } catch (SecurityException se) {
-                throw new Exception(se.getMessage()); 
-            }
-            configProps.setProperty(Constants.FRAMEWORK_STORAGE, storage.getAbsolutePath());
-        }
-        
-        defaultStartLevel = Integer.parseInt(configProps.getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));
-        System.setProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL, Integer.toString(this.defaultStartLevel));
-        lockStartLevel = Integer.parseInt(configProps.getProperty(PROPERTY_LOCK_LEVEL, Integer.toString(lockStartLevel)));
-        lockDelay = Integer.parseInt(configProps.getProperty(PROPERTY_LOCK_DELAY, Integer.toString(lockDelay)));
-        configProps.setProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL, Integer.toString(lockStartLevel));
-        shutdownTimeout = Integer.parseInt(configProps.getProperty(KARAF_SHUTDOWN_TIMEOUT, Integer.toString(shutdownTimeout)));
-        // Start up the OSGI framework
-
-        String factoryClass = configProps.getProperty(KARAF_FRAMEWORK_FACTORY);
-        if (factoryClass == null) {
-            InputStream is = classLoader.getResourceAsStream("META-INF/services/" + FrameworkFactory.class.getName());
-            BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
-            factoryClass = br.readLine();
-            br.close();
-        }
-        FrameworkFactory factory = (FrameworkFactory) classLoader.loadClass(factoryClass).newInstance();
-        framework = factory.newFramework(new StringMap(configProps, false));
-        framework.init();
-        // Process properties
-        loadStartupProperties(configProps);
-        processAutoProperties(framework.getBundleContext());
-
-        startLevelListener = new StartLevelListener(startLevelLock);
-        framework.getBundleContext().addFrameworkListener(startLevelListener);
-
-        framework.start();
-        // Start custom activators
-        startKarafActivators(classLoader);
-        
-        if (delayConsoleStart) {
-            // Progress bar
-            new StartupListener(framework.getBundleContext());
-        }
-        // Start lock monitor
-        new Thread() {
-            public void run() {
-                lock(configProps);
-            }
-        }.start();
-    }
-
-    private void startKarafActivators(ClassLoader classLoader) throws IOException {
-        Enumeration<URL> urls = classLoader.getResources("META-INF/MANIFEST.MF");
-        while (urls != null && urls.hasMoreElements()) {
-            URL url = urls.nextElement();
-            String className = null;
-            InputStream is = url.openStream();
-            try {
-                Manifest mf = new Manifest(is);
-                className = mf.getMainAttributes().getValue(KARAF_ACTIVATOR);
-                if (className != null) {
-                    BundleActivator activator = (BundleActivator) classLoader.loadClass(className).newInstance();
-                    activator.start(framework.getBundleContext());
-                    karafActivators.add(activator);
-                }
-            } catch (Throwable e) {
-                if (className != null) {
-                    System.err.println("Error starting karaf activator " + className + ": " + e.getMessage());
-                    LOG.log(Level.WARNING, "Error starting karaf activator " + className + " from url " + url, e);
-                }
-            } finally {
-                if (is != null) {
-                    try {
-                        is.close();
-                    } catch (IOException e) {
-                    }
-                }
-            }
-        }
-    }
-
-    private void stopKarafActivators() {
-        for (BundleActivator activator : karafActivators) {
-            try {
-                activator.stop(framework.getBundleContext());
-            } catch (Throwable e) {
-                LOG.log(Level.WARNING, "Error stopping karaf activator " + activator.getClass().getName(), e);
-            }
-        }
-    }
-
-    public void awaitShutdown() throws Exception {
-        if (framework == null) {
-            return;
-        }
-        while (true) {
-            FrameworkEvent event = framework.waitForStop(0);
-            if (event.getType() != FrameworkEvent.STOPPED_UPDATE) {
-                return;
-            }
-        }
-    }
-
-	public boolean destroy() throws Exception {
-        if (framework == null) {
-            return true;
-        }
-        try {
-            int step = 5000;
-
-            // Notify the callback asap
-            if (shutdownCallback != null) {
-                shutdownCallback.waitingForShutdown(step);
-            }
-
-            // Stop the framework in case it's still active
-            exiting = true;
-            if (framework.getState() == Bundle.ACTIVE || framework.getState() == Bundle.STARTING) {
-                new Thread() {
-                    public void run() {
-                        try {
-                            framework.stop();
-                        } catch (BundleException e) {
-                            System.err.println("Error stopping karaf: " + e.getMessage());
-                        }
-                    }
-                }.start();
-            }
-
-            int timeout = shutdownTimeout;
-            if (shutdownTimeout <= 0) {
-                timeout = Integer.MAX_VALUE;
-            }
-            while (timeout > 0) {
-                timeout -= step;
-                if (shutdownCallback != null) {
-                    shutdownCallback.waitingForShutdown(step * 2);
-                }
-                FrameworkEvent event = framework.waitForStop(step);
-                if (event.getType() != FrameworkEvent.WAIT_TIMEDOUT) {
-                    stopKarafActivators();
-                    return true;
-                }
-            }
-            return false;
-        } finally {
-            unlock();
-        }
-    }
-
-    /**
-     * <p>
-     * This method performs the main task of constructing an framework instance
-     * and starting its execution. The following functions are performed
-     * when invoked:
-     * </p>
-     * <ol>
-     *   <li><i><b>Read the system properties file.<b></i> This is a file
-     *       containing properties to be pushed into <tt>System.setProperty()</tt>
-     *       before starting the framework. This mechanism is mainly shorthand
-     *       for people starting the framework from the command line to avoid having
-     *       to specify a bunch of <tt>-D</tt> system property definitions.
-     *       The only properties defined in this file that will impact the framework's
-     *       behavior are the those concerning setting HTTP proxies, such as
-     *       <tt>http.proxyHost</tt>, <tt>http.proxyPort</tt>, and
-     *       <tt>http.proxyAuth</tt>.
-     *   </li>
-     *   <li><i><b>Perform system property variable substitution on system
-     *       properties.</b></i> Any system properties in the system property
-     *       file whose value adheres to <tt>${&lt;system-prop-name&gt;}</tt>
-     *       syntax will have their value substituted with the appropriate
-     *       system property value.
-     *   </li>
-     *   <li><i><b>Read the framework's configuration property file.</b></i> This is
-     *       a file containing properties used to configure the framework
-     *       instance and to pass configuration information into
-     *       bundles installed into the framework instance. The configuration
-     *       property file is called <tt>config.properties</tt> by default
-     *       and is located in the <tt>conf/</tt> directory of the Felix
-     *       installation directory, which is the parent directory of the
-     *       directory containing the <tt>felix.jar</tt> file. It is possible
-     *       to use a different location for the property file by specifying
-     *       the desired URL using the <tt>felix.config.properties</tt>
-     *       system property; this should be set using the <tt>-D</tt> syntax
-     *       when executing the JVM. Refer to the
-     *       <a href="Felix.html#Felix(java.util.Map, java.util.List)">
-     *       <tt>Felix</tt></a> constructor documentation for more
-     *       information on the framework configuration options.
-     *   </li>
-     *   <li><i><b>Perform system property variable substitution on configuration
-     *       properties.</b></i> Any configuration properties whose value adheres to
-     *       <tt>${&lt;system-prop-name&gt;}</tt> syntax will have their value
-     *       substituted with the appropriate system property value.
-     *   </li>
-     *   <li><i><b>Ensure the default bundle cache has sufficient information to
-     *       initialize.</b></i> The default implementation of the bundle cache
-     *       requires either a profile name or a profile directory in order to
-     *       start. The configuration properties are checked for at least one
-     *       of the <tt>felix.cache.profile</tt> or <tt>felix.cache.profiledir</tt>
-     *       properties. If neither is found, the user is asked to supply a profile
-     *       name that is added to the configuration property set. See the
-     *       <a href="cache/DefaultBundleCache.html"><tt>DefaultBundleCache</tt></a>
-     *       documentation for more details its configuration options.
-     *   </li>
-     *   <li><i><b>Creates and starts a framework instance.</b></i> A
-     *       case insensitive
-     *       <a href="util/StringMap.html"><tt>StringMap</tt></a>
-     *       is created for the configuration property file and is passed
-     *       into the framework.
-     *   </li>
-     * </ol>
-     * <p>
-     * It should be noted that simply starting an instance of the framework is not enough
-     * to create an interactive session with it. It is necessary to install
-     * and start bundles that provide an interactive impl; this is generally
-     * done by specifying an "auto-start" property in the framework configuration
-     * property file. If no interactive impl bundles are installed or if
-     * the configuration property file cannot be found, the framework will appear to
-     * be hung or deadlocked. This is not the case, it is executing correctly,
-     * there is just no way to interact with it. Refer to the
-     * <a href="Felix.html#Felix(java.util.Map, java.util.List)">
-     * <tt>Felix</tt></a> constructor documentation for more information on
-     * framework configuration options.
-     * </p>
-     * @param args An array of arguments, all of which are ignored.
-     * @throws Exception If an error occurs.
-     **/
-    public static void main(String[] args) throws Exception {
-        while (true) {
-            boolean restart = false;
-            System.setProperty("karaf.restart", "false");
-            if (Boolean.getBoolean("karaf.restart.clean")) {
-                File karafHome = Utils.getKarafHome();
-                File karafBase = Utils.getKarafDirectory(Main.PROP_KARAF_BASE, Main.ENV_KARAF_BASE, karafHome, false, true);
-                File karafData = Utils.getKarafDirectory(Main.PROP_KARAF_DATA, Main.ENV_KARAF_DATA, new File(karafBase, "data"), true, true);
-                Utils.deleteDirectory(karafData);
-            }
-            final Main main = new Main(args);
-            try {
-                main.launch();
-            } catch (IOException ioe){
-                main.destroy();
-                main.setExitCode(-1);
-                System.err.println("Karaf can't startup, make sure the log file can be accessed and written by the user starting Karaf : " + ioe.getMessage());
-            } catch (Throwable ex) {
-                main.destroy();
-                main.setExitCode(-1);
-                System.err.println("Could not create framework: " + ex);
-                ex.printStackTrace();
-            }
-            try {
-                main.awaitShutdown();
-                boolean stopped = main.destroy();
-                restart = Boolean.getBoolean("karaf.restart");
-                if (!stopped) {
-                    if (restart) {
-                        System.err.println("Timeout waiting for framework to stop.  Restarting now.");
-                    } else {
-                        System.err.println("Timeout waiting for framework to stop.  Exiting VM.");
-                        main.setExitCode(-3);
-                    }
-                }
-            } catch (Throwable ex) {
-                main.setExitCode(-2);
-                System.err.println("Error occurred shutting down framework: " + ex);
-                ex.printStackTrace();
-            } finally {
-                if (!restart) {
-                    System.exit(main.getExitCode());
-                }
-            }
-        }
-    }
-
-    private static void processSecurityProperties(Properties m_configProps) {
-        String prop = m_configProps.getProperty(SECURITY_PROVIDERS);
-        if (prop != null) {
-            String[] providers = prop.split(",");
-            for (String provider : providers) {
-                addProvider(provider);
-            }
-        }
-    }
-
-    private static void addProvider(String provider) {
-        try {
-            Security.addProvider((Provider) Class.forName(provider).newInstance());
-        } catch (Throwable t) {
-            System.err.println("Unable to register security provider: " + t);
-        }
-    }
-
-    private void updateInstancePid() {
-        try {
-            String instanceName = System.getProperty("karaf.name");
-            String pid = ManagementFactory.getRuntimeMXBean().getName();
-            if (pid.indexOf('@') > 0) {
-                pid = pid.substring(0, pid.indexOf('@'));
-            }
-            
-            boolean isRoot = karafHome.equals(karafBase);
-            
-            if (instanceName != null) {
-                String storage = System.getProperty("karaf.instances");
-                if (storage == null) {
-                    throw new Exception("System property 'karaf.instances' is not set. \n" +
-                        "This property needs to be set to the full path of the instance.properties file.");
-                }
-                File storageFile = new File(storage);
-                File propertiesFile = new File(storageFile, "instance.properties");
-                Properties props = new Properties();
-                if (propertiesFile.exists()) {
-                    FileInputStream fis = new FileInputStream(propertiesFile);
-                    props.load(fis);
-                    int count = Integer.parseInt(props.getProperty("count"));
-
-                    // update root name if karaf.name got updated since the last container start
-                    if (isRoot) {
-                        for (int i = 0; i < count; i++) {
-                            //looking for root instance entry
-                            String name = props.getProperty("item." + i + ".name");
-                            boolean root = Boolean.parseBoolean(props.getProperty("item." + i + ".root", "false"));
-                            if (name != null && root && !name.equals(instanceName)) {
-                                props.setProperty("item." + i + ".name", instanceName);
-                            }
-                        }
-                    }
-
-                    for (int i = 0; i < count; i++) {
-                        String name = props.getProperty("item." + i + ".name");
-                        if (name.equals(instanceName)) {
-                            props.setProperty("item." + i + ".pid", pid);
-                            FileOutputStream fos = new FileOutputStream(propertiesFile);
-                            props.store(fos, null);
-                            fis.close();
-                            fos.close();
-                            return;
-                        }
-                    }
-                    fis.close();
-                    if (!isRoot) {
-                        throw new Exception("Instance " + instanceName + " not found");
-                    } 
-                } else if (isRoot) {
-                    if (!propertiesFile.getParentFile().exists()) {
-                        try {
-                            propertiesFile.getParentFile().mkdirs();
-                        } catch (SecurityException se) {
-                            throw new Exception(se.getMessage());
-                        }
-                    }
-                    props.setProperty("count", "1");
-                    props.setProperty("item.0.name", instanceName);
-                    props.setProperty("item.0.loc", karafHome.getAbsolutePath());
-                    props.setProperty("item.0.pid", pid);
-                    props.setProperty("item.0.root", "true");
-                    FileOutputStream fos = new FileOutputStream(propertiesFile);
-                    props.store(fos, null);
-                    fos.close();
-                }
-            }
-        } catch (Exception e) {
-            System.err.println("Unable to update instance pid: " + e.getMessage());
-        }
-    }
-
-    /**
-     * <p/>
-     * Processes the auto-install and auto-start properties from the
-     * specified configuration properties.
-     *
-     * @param context the system bundle context
-     */
-    private void processAutoProperties(BundleContext context) {
-        // Check if we want to convert URLs to maven style
-        boolean convertToMavenUrls = Boolean.parseBoolean(configProps.getProperty(PROPERTY_CONVERT_TO_MAVEN_URL, "true"));
-
-        // Retrieve the Start Level service, since it will be needed
-        // to set the start level of the installed bundles.
-        StartLevel sl = (StartLevel) context.getService(
-                context.getServiceReference(org.osgi.service.startlevel.StartLevel.class.getName()));
-
-        // Set the default bundle start level
-        int ibsl = 60;
-        try {
-            String str = configProps.getProperty("karaf.startlevel.bundle");
-            if (str != null) {
-                ibsl = Integer.parseInt(str);
-            }
-        } catch (Throwable t) {
-        }
-        sl.setInitialBundleStartLevel(ibsl);
-
-        // If we have a clean state, install everything
-        if (framework.getBundleContext().getBundles().length == 1) {
-            // The auto-install property specifies a space-delimited list of
-            // bundle URLs to be automatically installed into each new profile;
-            // the start level to which the bundles are assigned is specified by
-            // appending a ".n" to the auto-install property name, where "n" is
-            // the desired start level for the list of bundles.
-            autoInstall(PROPERTY_AUTO_INSTALL, context, sl, convertToMavenUrls, false);
-
-            // The auto-start property specifies a space-delimited list of
-            // bundle URLs to be automatically installed and started into each
-            // new profile; the start level to which the bundles are assigned
-            // is specified by appending a ".n" to the auto-start property name,
-            // where "n" is the desired start level for the list of bundles.
-            // The following code starts bundles in one pass, installing bundles
-            // for a given level, then starting them, then moving to the next level.
-            autoInstall(PROPERTY_AUTO_START, context, sl, convertToMavenUrls, true);
-        }
-    }
-
-    private List<Bundle> autoInstall(String propertyPrefix, BundleContext context, StartLevel sl, boolean convertToMavenUrls, boolean start) {
-        Map<Integer, String> autoStart = new TreeMap<Integer, String>();
-        List<Bundle> bundles = new ArrayList<Bundle>();
-        for (Object o : configProps.keySet()) {
-            String key = (String) o;
-            // Ignore all keys that are not the auto-start property.
-            if (!key.startsWith(propertyPrefix)) {
-                continue;
-            }
-            // If the auto-start property does not have a start level,
-            // then assume it is the default bundle start level, otherwise
-            // parse the specified start level.
-            int startLevel = sl.getInitialBundleStartLevel();
-            if (!key.equals(propertyPrefix)) {
-                try {
-                    startLevel = Integer.parseInt(key.substring(key.lastIndexOf('.') + 1));
-                } catch (NumberFormatException ex) {
-                    System.err.println("Invalid property: " + key);
-                }
-            }
-            autoStart.put(startLevel, configProps.getProperty(key));
-        }
-        for (Integer startLevel : autoStart.keySet()) {
-            StringTokenizer st = new StringTokenizer(autoStart.get(startLevel), "\" ", true);
-            if (st.countTokens() > 0) {
-                String location;
-                do {
-                    location = nextLocation(st);
-                    if (location != null) {
-                        try {
-                            String[] parts = convertToMavenUrlsIfNeeded(location, convertToMavenUrls);
-                            Bundle b = context.installBundle(parts[0], new URL(parts[1]).openStream());
-                            sl.setBundleStartLevel(b, startLevel);
-                            bundles.add(b);
-                        }
-                        catch (Exception ex) {
-                            System.err.println("Error installing bundle  " + location + ": " + ex);
-                        }
-                    }
-                }
-                while (location != null);
-            }
-        }
-        // Now loop through and start the installed bundles.
-        if (start) {
-            for (Bundle b : bundles) {
-                try {
-                    String fragmentHostHeader = (String) b.getHeaders().get(Constants.FRAGMENT_HOST);
-                    if (fragmentHostHeader == null || fragmentHostHeader.trim().length() == 0) {
-                        b.start();
-                    }
-                }
-                catch (Exception ex) {
-                    System.err.println("Error starting bundle " + b.getSymbolicName() + ": " + ex);
-                }
-            }
-        }
-        return bundles;
-    }
-
-    private static String[] convertToMavenUrlsIfNeeded(String location, boolean convertToMavenUrls) {
-        String[] parts = location.split("\\|");
-        if (convertToMavenUrls) {
-            String[] p = parts[1].split("/");
-            if (p.length >= 4 && p[p.length-1].startsWith(p[p.length-3] + "-" + p[p.length-2])) {
-                String artifactId = p[p.length-3];
-                String version = p[p.length-2];
-                String classifier;
-                String type;
-                String artifactIdVersion = artifactId + "-" + version;
-                StringBuffer sb = new StringBuffer();
-                if (p[p.length-1].charAt(artifactIdVersion.length()) == '-') {
-                    classifier = p[p.length-1].substring(artifactIdVersion.length() + 1, p[p.length-1].lastIndexOf('.'));
-                } else {
-                    classifier = null;
-                }
-                type = p[p.length-1].substring(p[p.length-1].lastIndexOf('.') + 1);
-                sb.append("mvn:");
-                for (int j = 0; j < p.length - 3; j++) {
-                    if (j > 0) {
-                        sb.append('.');
-                    }
-                    sb.append(p[j]);
-                }
-                sb.append('/').append(artifactId).append('/').append(version);
-                if (!"jar".equals(type) || classifier != null) {
-                    sb.append('/');
-                    if (!"jar".equals(type)) {
-                        sb.append(type);
-                    }
-                    if (classifier != null) {
-                        sb.append('/').append(classifier);
-                    }
-                }
-                parts[1] = parts[0];
-                parts[0] = sb.toString();
-            } else {
-                parts[1] = parts[0];
-            }
-        } else {
-            parts[1] = parts[0];
-        }
-        return parts;
-    }
-
-    private static String nextLocation(StringTokenizer st) {
-        String retVal = null;
-
-        if (st.countTokens() > 0) {
-            String tokenList = "\" ";
-            StringBuffer tokBuf = new StringBuffer(10);
-            String tok;
-            boolean inQuote = false;
-            boolean tokStarted = false;
-            boolean exit = false;
-            while ((st.hasMoreTokens()) && (!exit)) {
-                tok = st.nextToken(tokenList);
-                if (tok.equals("\"")) {
-                    inQuote = !inQuote;
-                    if (inQuote) {
-                        tokenList = "\"";
-                    } else {
-                        tokenList = "\" ";
-                    }
-
-                } else if (tok.equals(" ")) {
-                    if (tokStarted) {
-                        retVal = tokBuf.toString();
-                        tokStarted = false;
-                        tokBuf = new StringBuffer(10);
-                        exit = true;
-                    }
-                } else {
-                    tokStarted = true;
-                    tokBuf.append(tok.trim());
-                }
-            }
-
-            // Handle case where end of token stream and
-            // still got data
-            if ((!exit) && (tokStarted)) {
-                retVal = tokBuf.toString();
-            }
-        }
-
-        return retVal;
-    }
-
-    /**
-     * <p>
-     * Loads the properties in the system property file associated with the
-     * framework installation into <tt>System.setProperty()</tt>. These properties
-     * are not directly used by the framework in anyway. By default, the system
-     * property file is located in the <tt>conf/</tt> directory of the Felix
-     * installation directory and is called "<tt>system.properties</tt>". The
-     * installation directory of Felix is assumed to be the parent directory of
-     * the <tt>felix.jar</tt> file as found on the system class path property.
-     * The precise file from which to load system properties can be set by
-     * initializing the "<tt>felix.system.properties</tt>" system property to an
-     * arbitrary URL.
-     * </p>
-     *
-     * @param karafBase the karaf base folder
-     */
-    protected static void loadSystemProperties(File karafBase) {
-        // The system properties file is either specified by a system
-        // property or it is in the same directory as the Felix JAR file.
-        // Try to load it from one of these places.
-
-        // See if the property URL was specified as a property.
-        URL propURL;
-        try {
-            File file = new File(new File(karafBase, "etc"), SYSTEM_PROPERTIES_FILE_NAME);
-            propURL = file.toURI().toURL();
-        }
-        catch (MalformedURLException ex) {
-            System.err.print("Main: " + ex);
-            return;
-        }
-
-        // Read the properties file.
-        Properties props = new Properties();
-        InputStream is = null;
-        try {
-            is = propURL.openConnection().getInputStream();
-            props.load(is);
-            is.close();
-        }
-        catch (FileNotFoundException ex) {
-            // Ignore file not found.
-        }
-        catch (Exception ex) {
-            System.err.println(
-                    "Main: Error loading system properties from " + propURL);
-            System.err.println("Main: " + ex);
-            try {
-                if (is != null) is.close();
-            }
-            catch (IOException ex2) {
-                // Nothing we can do.
-            }
-            return;
-        }
-
-        // Perform variable substitution on specified properties.
-        for (Enumeration e = props.propertyNames(); e.hasMoreElements();) {
-            String name = (String) e.nextElement();
-			if (name.startsWith(OVERRIDE_PREFIX)) {
-				String overrideName = name.substring(OVERRIDE_PREFIX.length());
-				String value = props.getProperty(name);
-				System.setProperty(overrideName, substVars(value, name, null, props));
-			} else {
-				String value = System.getProperty(name, props.getProperty(name));
-				System.setProperty(name, substVars(value, name, null, props));
-			}
-        }
-    }
-
-    /**
-     * <p>
-     * Loads the configuration properties in the configuration property file
-     * associated with the framework installation; these properties
-     * are accessible to the framework and to bundles and are intended
-     * for configuration purposes. By default, the configuration property
-     * file is located in the <tt>conf/</tt> directory of the Felix
-     * installation directory and is called "<tt>config.properties</tt>".
-     * The installation directory of Felix is assumed to be the parent
-     * directory of the <tt>felix.jar</tt> file as found on the system class
-     * path property. The precise file from which to load configuration
-     * properties can be set by initializing the "<tt>felix.config.properties</tt>"
-     * system property to an arbitrary URL.
-     * </p>
-     *
-     * @return A <tt>Properties</tt> instance or <tt>null</tt> if there was an error.
-     * @throws Exception if something wrong occurs
-     */
-    private Properties loadConfigProperties() throws Exception {
-        // See if the property URL was specified as a property.
-        URL configPropURL;
-
-        try {
-            File etcFolder = new File(karafBase, "etc");
-            if (!etcFolder.exists()) {
-                throw new FileNotFoundException("etc folder not found: " + etcFolder.getAbsolutePath());
-            }
-            File file = new File(etcFolder, CONFIG_PROPERTIES_FILE_NAME);
-            configPropURL = file.toURI().toURL();
-        }
-        catch (MalformedURLException ex) {
-            System.err.print("Main: " + ex);
-            return null;
-        }
-
-
-        Properties configProps = loadPropertiesFile(configPropURL, false);
-
-        // Perform variable substitution for system properties.
-        for (Enumeration e = configProps.propertyNames(); e.hasMoreElements();) {
-            String name = (String) e.nextElement();
-            configProps.setProperty(name,
-                    substVars(configProps.getProperty(name), name, null, configProps));
-        }
-
-        return configProps;
-    }
-
-    private void loadStartupProperties(Properties configProps) throws Exception {
-        // The config properties file is either specified by a system
-        // property or it is in the conf/ directory of the Felix
-        // installation directory.  Try to load it from one of these
-        // places.
-
-        List<File> bundleDirs = new ArrayList<File>();
-
-        // See if the property URL was specified as a property.
-        URL startupPropURL;
-
-        File etcFolder = new File(karafBase, "etc");
-        if (!etcFolder.exists()) {
-            throw new FileNotFoundException("etc folder not found: " + etcFolder.getAbsolutePath());
-        }
-        File file = new File(etcFolder, STARTUP_PROPERTIES_FILE_NAME);
-        startupPropURL = file.toURI().toURL();
-        Properties startupProps = loadPropertiesFile(startupPropURL, true);
-
-        String defaultRepo = System.getProperty(DEFAULT_REPO, "system");
-        if (karafBase.equals(karafHome)) {
-            File systemRepo = new File(karafHome, defaultRepo);
-            if (!systemRepo.exists()) {
-                throw new FileNotFoundException("system repo not found: " + systemRepo.getAbsolutePath());
-            }
-            bundleDirs.add(systemRepo);
-        } else {
-            File baseSystemRepo = new File(karafBase, defaultRepo);
-            File homeSystemRepo = new File(karafHome, defaultRepo);
-            if (!baseSystemRepo.exists() && !homeSystemRepo.exists()) {
-                throw new FileNotFoundException("system repos not found: " + baseSystemRepo.getAbsolutePath() + " " + homeSystemRepo.getAbsolutePath());
-            }
-            bundleDirs.add(baseSystemRepo);
-            bundleDirs.add(homeSystemRepo);
-        }
-        String locations = configProps.getProperty(BUNDLE_LOCATIONS);
-        if (locations != null) {
-            StringTokenizer st = new StringTokenizer(locations, "\" ", true);
-            if (st.countTokens() > 0) {
-                String location;
-                do {
-                    location = nextLocation(st);
-                    if (location != null) {
-                        File f;
-                        if (karafBase.equals(karafHome)) {
-                        	f = new File(karafHome, location);
-                        } else {
-                        	f = new File(karafBase, location);
-                        }
-                        if (f.exists() && f.isDirectory()) {
-                            bundleDirs.add(f);
-                        } else {
-                            System.err.println("Bundle location " + location
-                                    + " does not exist or is not a directory.");
-                        }
-                    }
-                }
-
-                while (location != null);
-            }
-        }
-
-        // Mutate properties
-        Main.processConfigurationProperties(configProps, startupProps, bundleDirs);
-    }
-
-    protected static Properties loadPropertiesFile(URL configPropURL, boolean failIfNotFound) throws Exception {
-        // Read the properties file.
-        Properties configProps = new Properties();
-        InputStream is = null;
-        try {
-            is = configPropURL.openConnection().getInputStream();
-            configProps.load(is);
-            is.close();
-        } catch (FileNotFoundException ex) {
-            if (failIfNotFound) {
-                throw ex;
-            } else {
-                System.err.println("WARN: " + configPropURL + " is not found, so not loaded");
-            }
-        } catch (Exception ex) {
-            System.err.println("Error loading config properties from " + configPropURL);
-            System.err.println("Main: " + ex);
-            return configProps;
-        } finally {
-            try {
-                if (is != null) {
-                    is.close();
-                }
-            }
-            catch (IOException ex2) {
-                // Nothing we can do.
-            }
-        }
-        String includes = configProps.getProperty(INCLUDES_PROPERTY);
-        if (includes != null) {
-            StringTokenizer st = new StringTokenizer(includes, "\" ", true);
-            if (st.countTokens() > 0) {
-                String location;
-                do {
-                    location = nextLocation(st);
-                    if (location != null) {
-                        URL url = new URL(configPropURL, location);
-                        Properties props = loadPropertiesFile(url, true);
-                        configProps.putAll(props);
-                    }
-                }
-                while (location != null);
-            }
-            configProps.remove(INCLUDES_PROPERTY);
-        }
-        String optionals = configProps.getProperty(OPTIONALS_PROPERTY);
-        if (optionals != null) {
-            StringTokenizer st = new StringTokenizer(optionals, "\" ", true);
-            if (st.countTokens() > 0) {
-                String location;
-                do {
-                    location = nextLocation(st);
-                    if (location != null) {
-                        URL url = new URL(configPropURL, location);
-                        Properties props = loadPropertiesFile(url, false);
-                        configProps.putAll(props);
-                    }
-                } while (location != null);
-            }
-            configProps.remove(OPTIONALS_PROPERTY);
-        }
-        for (Enumeration e = configProps.propertyNames(); e.hasMoreElements();) {
-            Object key = e.nextElement();
-            if (key instanceof String) {
-                String v = configProps.getProperty((String) key);
-                configProps.put(key, v.trim());
-            }
-        }
-        return configProps;
-    }
-
-    protected static void copySystemProperties(Properties configProps) {
-        for (Enumeration e = System.getProperties().propertyNames();
-             e.hasMoreElements();) {
-            String key = (String) e.nextElement();
-            if (key.startsWith("felix.") ||
-                    key.startsWith("karaf.") ||
-                    key.startsWith("org.osgi.framework.")) {
-                configProps.setProperty(key, System.getProperty(key));
-            }
-        }
-    }
-    
-    private ClassLoader createClassLoader(Properties configProps) throws Exception {
-    	String framework = configProps.getProperty(KARAF_FRAMEWORK);
-        if (framework == null) {
-            throw new IllegalArgumentException("Property " + KARAF_FRAMEWORK + " must be set in the etc/" + CONFIG_PROPERTIES_FILE_NAME + " configuration file");
-        }
-        String bundle = configProps.getProperty(KARAF_FRAMEWORK + "." + framework);
-        if (bundle == null) {
-            throw new IllegalArgumentException("Property " + KARAF_FRAMEWORK + "." + framework + " must be set in the etc/" + CONFIG_PROPERTIES_FILE_NAME + " configuration file");
-        }
-        File bundleFile = new File(karafBase, bundle);
-        if (!bundleFile.exists()) {
-            bundleFile = new File(karafHome, bundle);
-        }
-        if (!bundleFile.exists()) {
-            throw new FileNotFoundException(bundleFile.getAbsolutePath());
-        }
-
-        List<URL> urls = new ArrayList<URL>();
-        urls.add( bundleFile.toURI().toURL() );
-        File[] libs = new File(karafHome, "lib").listFiles();
-        if (libs != null) {
-            for (File f : libs) {
-                if (f.isFile() && f.canRead() && f.getName().endsWith(".jar")) {
-                    urls.add(f.toURI().toURL());
-                }
-            }
-        }
-
-        return new URLClassLoader(urls.toArray(new URL[urls.size()]), Main.class.getClassLoader());
-    }
-
-    /**
-     * Process properties to customize default felix behavior
-     *
-     * @param configProps properties loaded from etc/config.properties
-     * @param startupProps properties loaded from etc/startup.properties
-     * @param bundleDirs location to load bundles from (usually system/)
-     */
-    private static void processConfigurationProperties(Properties configProps, Properties startupProps, List<File> bundleDirs) throws Exception {
-        if (bundleDirs == null) {
-            return;
-        }
-        boolean hasErrors = false;
-        if ("all".equals(configProps.getProperty(PROPERTY_AUTO_START, "").trim())) {
-            configProps.remove(PROPERTY_AUTO_START);
-            ArrayList<File> jars = new ArrayList<File>();
-
-            // We should start all the bundles in the system dir.
-            for (File bundleDir : bundleDirs) {
-                findJars(bundleDir, jars);
-            }
-
-            StringBuffer sb = new StringBuffer();
-
-            for (File jar : jars) {
-                try {
-                    sb.append("\"").append(jar.toURI().toURL().toString()).append("\" ");
-                } catch (MalformedURLException e) {
-                    System.err.print("Ignoring " + jar.toString() + " (" + e + ")");
-                }
-            }
-
-            configProps.setProperty(PROPERTY_AUTO_START, sb.toString());
-
-        } else if (STARTUP_PROPERTIES_FILE_NAME.equals(configProps.getProperty(PROPERTY_AUTO_START, "").trim())) {
-            configProps.remove(PROPERTY_AUTO_START);
-            // We should start the bundles in the startup.properties file.
-            HashMap<Integer, StringBuffer> levels = new HashMap<Integer, StringBuffer>();
-            for (Object o : startupProps.keySet()) {
-                String name = (String) o;
-                File file = findFile(bundleDirs, name);
-
-                if (file != null) {
-                    Integer level;
-                    try {
-                        level = new Integer(startupProps.getProperty(name).trim());
-                    } catch (NumberFormatException e1) {
-                        System.err.print("Ignoring " + file.toString() + " (run level must be an integer)");
-                        continue;
-                    }
-                    StringBuffer sb = levels.get(level);
-                    if (sb == null) {
-                        sb = new StringBuffer(256);
-                        levels.put(level, sb);
-                    }
-                    try {
-                        sb.append("\"").append(file.toURI().toURL().toString()).append("|").append(name).append("\" ");
-                    } catch (MalformedURLException e) {
-                        System.err.print("Ignoring " + file.toString() + " (" + e + ")");
-                    }
-                } else {
-                    System.err.println("Bundle listed in " + STARTUP_PROPERTIES_FILE_NAME + " configuration not found: " + name);
-                    hasErrors = true;
-                }
-            }
-
-            for (Map.Entry<Integer, StringBuffer> entry : levels.entrySet()) {
-                configProps.setProperty(PROPERTY_AUTO_START + "." + entry.getKey(), entry.getValue().toString());
-            }
-        }
-        if (hasErrors) {
-            throw new Exception("Aborting due to missing startup bundles");
-        }
-    }
-
-    private static File findFile(List<File> bundleDirs, String name) {
-        for (File bundleDir : bundleDirs) {
-            File file = findFile(bundleDir, name);
-            if (file != null) {
-                return file;
-            }
-        }
-        return null;
-    }
-
-    private static File findFile(File dir, String name) {
-        File theFile = new File(dir, name);
-
-        if (theFile.exists() && !theFile.isDirectory()) {
-            return theFile;
-        }
-
-        for (File file : dir.listFiles()) {
-            if (file.isDirectory()) {
-                return findFile(file, name);
-            }
-        }
-
-        return null;
-    }
-
-    private static void findJars(File dir, ArrayList<File> jars) {
-        for (File file : dir.listFiles()) {
-            if (file.isDirectory()) {
-                findJars(file, jars);
-            } else {
-                if (file.toString().endsWith(".jar")) {
-                    jars.add(file);
-                }
-            }
-        }
-    }
-
-    private static final String DELIM_START = "${";
-    private static final String DELIM_STOP = "}";
-
-    /**
-     * <p>
-     * This method performs property variable substitution on the
-     * specified value. If the specified value contains the syntax
-     * <tt>${&lt;prop-name&gt;}</tt>, where <tt>&lt;prop-name&gt;</tt>
-     * refers to either a configuration property or a system property,
-     * then the corresponding property value is substituted for the variable
-     * placeholder. Multiple variable placeholders may exist in the
-     * specified value as well as nested variable placeholders, which
-     * are substituted from inner most to outer most. Configuration
-     * properties override system properties.
-     * </p>
-     *
-     * @param val         The string on which to perform property substitution.
-     * @param currentKey  The key of the property being evaluated used to
-     *                    detect cycles.
-     * @param cycleMap    Map of variable references used to detect nested cycles.
-     * @param configProps Set of configuration properties.
-     * @return The value of the specified string after system property substitution.
-     * @throws IllegalArgumentException If there was a syntax error in the
-     *                                  property placeholder syntax or a recursive variable reference.
-     */
-    public static String substVars(String val, String currentKey,
-                                    Map<String, String> cycleMap, Properties configProps)
-            throws IllegalArgumentException {
-        // If there is currently no cycle map, then create
-        // one for detecting cycles for this invocation.
-        if (cycleMap == null) {
-            cycleMap = new HashMap<String, String>();
-        }
-
-        // Put the current key in the cycle map.
-        cycleMap.put(currentKey, currentKey);
-
-        // Assume we have a value that is something like:
-        // "leading ${foo.${bar}} middle ${baz} trailing"
-
-        // Find the first ending '}' variable delimiter, which
-        // will correspond to the first deepest nested variable
-        // placeholder.
-        int stopDelim = val.indexOf(DELIM_STOP);
-
-        // Find the matching starting "${" variable delimiter
-        // by looping until we find a start delimiter that is
-        // greater than the stop delimiter we have found.
-        int startDelim = val.indexOf(DELIM_START);
-        while (stopDelim >= 0) {
-            int idx = val.indexOf(DELIM_START, startDelim + DELIM_START.length());
-            if ((idx < 0) || (idx > stopDelim)) {
-                break;
-            } else if (idx < stopDelim) {
-                startDelim = idx;
-            }
-        }
-
-        // If we do not have a start or stop delimiter, then just
-        // return the existing value.
-        if ((startDelim < 0) && (stopDelim < 0)) {
-            return val;
-        }
-        // At this point, we found a stop delimiter without a start,
-        // so throw an exception.
-        else if (((startDelim < 0) || (startDelim > stopDelim))
-                && (stopDelim >= 0)) {
-            throw new IllegalArgumentException(
-                    "stop delimiter with no start delimiter: "
-                            + val);
-        }
-
-        // At this point, we have found a variable placeholder so
-        // we must perform a variable substitution on it.
-        // Using the start and stop delimiter indices, extract
-        // the first, deepest nested variable placeholder.
-        String variable =
-                val.substring(startDelim + DELIM_START.length(), stopDelim);
-
-        // Verify that this is not a recursive variable reference.
-        if (cycleMap.get(variable) != null) {
-            throw new IllegalArgumentException(
-                    "recursive variable reference: " + variable);
-        }
-
-        // Get the value of the deepest nested variable placeholder.
-        // Try to configuration properties first.
-        String substValue = (configProps != null)
-                ? configProps.getProperty(variable, null)
-                : null;
-        if (substValue == null) {
-            // Ignore unknown property values.
-            substValue = System.getProperty(variable, "");
-        }
-
-        // Remove the found variable from the cycle map, since
-        // it may appear more than once in the value and we don't
-        // want such situations to appear as a recursive reference.
-        cycleMap.remove(variable);
-
-        // Append the leading characters, the substituted value of
-        // the variable, and the trailing characters to get the new
-        // value.
-        val = val.substring(0, startDelim)
-                + substValue
-                + val.substring(stopDelim + DELIM_STOP.length(), val.length());
-
-        // Now perform substitution again, since there could still
-        // be substitutions to make.
-        val = substVars(val, currentKey, cycleMap, configProps);
-
-        // Return the value.
-        return val;
-    }
-
-    /**
-     * Retrieve the arguments used when launching Karaf
-     *
-     * @return the arguments of the main karaf process
-     */
-    public String[] getArgs() {
-        return args;
-    }
-
-    public int getExitCode() {
-        return exitCode;
-    }
-
-    public void setExitCode(int exitCode) {
-        this.exitCode = exitCode;
-    }
-
-    public Framework getFramework() {
-        return framework;
-    }
-    
-    public void lock(Properties props) {
-        try {
-            if (Boolean.parseBoolean(props.getProperty(PROPERTY_USE_LOCK, "true"))) {
-                doLock(props);
-            } else {
-                setStartLevel(defaultStartLevel);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    private void doLock(Properties props) throws Exception {
-        String clz = props.getProperty(PROPERTY_LOCK_CLASS, PROPERTY_LOCK_CLASS_DEFAULT);
-        lock = (Lock) Class.forName(clz).getConstructor(Properties.class).newInstance(props);
-        boolean lockLogged = false;
-        setStartLevel(lockStartLevel);
-        while (!exiting) {
-            if (lock.lock()) {
-                if (lockLogged) {
-                    LOG.info("Lock acquired.");
-                }
-                setupShutdown(props);
-                setStartLevel(defaultStartLevel);
-                for (;;) {
-                    if (!lock.isAlive()) {
-                        break;
-                    }
-                    Thread.sleep(lockDelay);
-                }
-                if (framework.getState() == Bundle.ACTIVE && !exiting) {
-                    LOG.info("Lost the lock, reducing start level to " + lockStartLevel);
-                    synchronized (startLevelLock) {
-                        setStartLevel(lockStartLevel);
-                        
-                        // we have to wait for the start level to be reduced here because
-                        // if the lock is regained before the start level is fully changed
-                        // things may not come up as expected
-                        LOG.fine("Waiting for start level change to complete...");
-                        startLevelLock.wait(shutdownTimeout);
-                    }
-                }
-            } else if (!lockLogged) {
-                LOG.info("Waiting for the lock ...");
-                lockLogged = true;
-            }
-            Thread.sleep(lockDelay);
-        }
-    }
-
-    public void unlock() throws Exception {
-        if (lock != null) {
-            lock.release();
-        }
-    }
-
-    protected void setStartLevel(int level) throws Exception {
-        BundleContext ctx = framework.getBundleContext();
-        ServiceReference[] refs = ctx.getServiceReferences(StartLevel.class.getName(), null);
-        StartLevel sl = (StartLevel) ctx.getService(refs[0]);
-        sl.setStartLevel(level);
-    }
-
-
-    private Random random = null;
-    private ServerSocket shutdownSocket;
-
-    protected void setupShutdown(Properties props) {
-        writePid(props);
-        try {
-            int port = Integer.parseInt(props.getProperty(KARAF_SHUTDOWN_PORT, "0"));
-            String host = props.getProperty(KARAF_SHUTDOWN_HOST, "localhost");
-            String portFile = props.getProperty(KARAF_SHUTDOWN_PORT_FILE);
-            final String shutdown = props.getProperty(KARAF_SHUTDOWN_COMMAND, DEFAULT_SHUTDOWN_COMMAND);
-            if (port >= 0) {
-                shutdownSocket = new ServerSocket(port, 1, InetAddress.getByName(host));
-                if (port == 0) {
-                    port = shutdownSocket.getLocalPort();
-                }
-                if (portFile != null) {
-                    Writer w = new OutputStreamWriter(new FileOutputStream(portFile));
-                    w.write(Integer.toString(port));
-                    w.close();
-                }
-                Thread thread = new ShutdownSocketThread(shutdown);
-                thread.setDaemon(true);
-                thread.start();
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    private void writePid(Properties props) {
-        try {
-            String pidFile = props.getProperty(KARAF_SHUTDOWN_PID_FILE);
-            if (pidFile != null) {
-                RuntimeMXBean rtb = ManagementFactory.getRuntimeMXBean();
-                String processName = rtb.getName();
-                Pattern pattern = Pattern.compile("^([0-9]+)@.+$", Pattern.CASE_INSENSITIVE);
-                Matcher matcher = pattern.matcher(processName);
-                if (matcher.matches()) {
-                    int pid = Integer.parseInt(matcher.group(1));
-                    Writer w = new OutputStreamWriter(new FileOutputStream(pidFile));
-                    w.write(Integer.toString(pid));
-                    w.close();
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    public Lock getLock() {
-        return lock;
-    }
-
-    private class ShutdownSocketThread extends Thread {
-
-        private final String shutdown;
-
-        public ShutdownSocketThread(String shutdown) {
-            this.shutdown = shutdown;
-        }
-
-        public void run() {
-            try {
-                while (true) {
-                    // Wait for the next connection
-                    Socket socket = null;
-                    InputStream stream = null;
-                    try {
-                        socket = shutdownSocket.accept();
-                        socket.setSoTimeout(10 * 1000);  // Ten seconds
-                        stream = socket.getInputStream();
-                    } catch (AccessControlException ace) {
-                        LOG.log(Level.WARNING, "Karaf shutdown socket: security exception: "
-                                           + ace.getMessage(), ace);
-                        continue;
-                    } catch (IOException e) {
-                        LOG.log(Level.SEVERE, "Karaf shutdown socket: accept: ", e);
-                        System.exit(1);
-                    }
-
-                    // Read a set of characters from the socket
-                    StringBuilder command = new StringBuilder();
-                    int expected = 1024; // Cut off to avoid DoS attack
-                    while (expected < shutdown.length()) {
-                        if (random == null) {
-                            random = new Random();
-                        }
-                        expected += (random.nextInt() % 1024);
-                    }
-                    while (expected > 0) {
-                        int ch;
-                        try {
-                            ch = stream.read();
-                        } catch (IOException e) {
-                            LOG.log(Level.WARNING, "Karaf shutdown socket:  read: ", e);
-                            ch = -1;
-                        }
-                        if (ch < 32) {  // Control character or EOF terminates loop
-                            break;
-                        }
-                        command.append((char) ch);
-                        expected--;
-                    }
-
-                    // Close the socket now that we are done with it
-                    try {
-                        socket.close();
-                    } catch (IOException e) {
-                        // Ignore
-                    }
-
-                    // Match against our command string
-                    boolean match = command.toString().equals(shutdown);
-                    if (match) {
-                        LOG.log(Level.INFO, "Karaf shutdown socket: received shutdown command. Stopping framework...");
-                        framework.stop();
-                        break;
-                    } else {
-                        LOG.log(Level.WARNING, "Karaf shutdown socket:  Invalid command '" +
-                                           command.toString() + "' received");
-                    }
-                }
-            } catch (Exception e) {
-                e.printStackTrace();
-            } finally {
-                try {
-                    shutdownSocket.close();
-                } catch (IOException e) {
-                    // Ignore
-                }
-            }
-        }
-    }
-}
diff --git a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/MySQLJDBCLock.java b/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/MySQLJDBCLock.java
deleted file mode 100644
index 780708f..0000000
--- a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/MySQLJDBCLock.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import java.sql.Connection;
-import java.util.Properties;
-
-/**
- * Represents an exclusive lock on a database,
- * used to avoid multiple Karaf instances attempting
- * to become master.
- */
-public class MySQLJDBCLock extends DefaultJDBCLock {
-
-    public MySQLJDBCLock(Properties props) {
-        super(props);
-    }
-
-    Statements createStatements() {
-        Statements statements = new Statements();
-        statements.setTableName(table);
-        statements.setNodeName(clusterName);
-        String[] lockCreateSchemaStatements = statements.getLockCreateSchemaStatements(getCurrentTimeMillis());
-        for (int index = 0; index < lockCreateSchemaStatements.length; index++) {
-            if (lockCreateSchemaStatements[index].toUpperCase().startsWith("CREATE TABLE")) {
-                lockCreateSchemaStatements[index] = lockCreateSchemaStatements[index] + " ENGINE=INNODB";
-            }
-        }
-        return statements;
-    }
-    
-    @Override
-    Connection createConnection(String driver, String url, String username, String password) throws Exception {
-        url = (url.toLowerCase().contains("createDatabaseIfNotExist=true")) ? 
-            url : 
-            ((url.contains("?")) ? 
-                url + "&createDatabaseIfNotExist=true" : 
-                url + "?createDatabaseIfNotExist=true");
-        
-        return super.createConnection(driver, url, username, password);
-    }
-}
diff --git a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/OracleJDBCLock.java b/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/OracleJDBCLock.java
deleted file mode 100644
index 699a025..0000000
--- a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/OracleJDBCLock.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.util.Properties;
-
-/**
- * Represents an exclusive lock on a database,
- * used to avoid multiple Karaf instances attempting
- * to become master.
- */
-public class OracleJDBCLock extends DefaultJDBCLock {
-    
-    private static final String MOMENT_COLUMN_DATA_TYPE = "NUMBER(20)";
-
-    public OracleJDBCLock(Properties props) {
-        super(props);
-    }
-
-    @Override
-    Statements createStatements() {
-        Statements statements = new Statements();
-        statements.setTableName(table);
-        statements.setNodeName(clusterName);
-        statements.setMomentColumnDataType(MOMENT_COLUMN_DATA_TYPE);
-        return statements;
-    }
-    
-    /**
-     * When we perform an update on a long lived locked table, Oracle will save
-     * a copy of the transaction in it's UNDO table space. Eventually this can
-     * cause the UNDO table to become full, disrupting all locks in the DB instance.
-     * A select query just touches the table, ensuring we can still read the DB but
-     * doesn't add to the UNDO. 
-     */
-    @Override
-    public boolean lock() {
-        return aquireLock();
-    }
-    
-    /**
-     * When we perform an update on a long lived locked table, Oracle will save
-     * a copy of the transaction in it's UNDO table space. Eventually this can
-     * cause the UNDO table to become full, disrupting all locks in the DB instance.
-     * A select query just touches the table, ensuring we can still read the DB but
-     * doesn't add to the UNDO. 
-     */
-    @Override
-    boolean updateLock() {
-        return aquireLock();
-    }
-    
-    /**
-     * A SELECT FOR UPDATE does not create a database lock when the SELECT FOR UPDATE is performed
-     * on an empty selection. So a succesfull call to {@link DefaultJDBCLock#aquireLock()} is not sufficient to 
-     * ensure that we are the only one who have acquired the lock.
-     */
-    @Override
-    boolean aquireLock() {
-    	return super.aquireLock() && lockAcquiredOnNonEmptySelection();
-    }
-    
-    //Verify that we have a non empty record set.
-    private boolean lockAcquiredOnNonEmptySelection() {
-        String verifySelectionNotEmpytStatement = statements.getLockVerifySelectionNotEmptyStatement();
-        PreparedStatement preparedStatement = null;
-        boolean lockAquired = false;
-        
-        try {
-            preparedStatement = getConnection().prepareStatement(verifySelectionNotEmpytStatement);
-            preparedStatement.setQueryTimeout(timeout);
-            ResultSet rs = preparedStatement.executeQuery();
-            if (rs.next()) {
-            	lockAquired = rs.getInt(1) > 0;
-            } else {
-            	LOG.warning("Failed to acquire database lock. Missing database lock record.");
-            }
-        } catch (Exception e) {
-            LOG.warning("Failed to acquire database lock: " + e);
-        }finally {
-            closeSafely(preparedStatement);
-        }        
-        return lockAquired;
-    }
-}
diff --git a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/PostgreSQLJDBCLock.java b/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/PostgreSQLJDBCLock.java
deleted file mode 100644
index 2ce7478..0000000
--- a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/PostgreSQLJDBCLock.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import java.util.Properties;
-
-/**
- * Represents an exclusive lock on a database,
- * used to avoid multiple Karaf instances attempting
- * to become master.
- */
-public class PostgreSQLJDBCLock extends DefaultJDBCLock {
-
-    public PostgreSQLJDBCLock(Properties props) {
-        super(props);
-    }
-
-    @Override
-    boolean aquireLock() {
-        this.timeout = 0;
-
-        return super.aquireLock();
-    }
-}
diff --git a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/ShutdownCallback.java b/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/ShutdownCallback.java
deleted file mode 100644
index bd0bf30..0000000
--- a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/ShutdownCallback.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*

- * 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.

- */

-package org.apache.karaf.main;

-

-

-/**

- * <p>

- * This interface is a callback interface for the stoping process. 

- * It's main purpose is to give the ServiceWrapper a way of waiting 

- * for the Framework to gracefully stop the Server. 

- * <p>

- */

-public interface ShutdownCallback {

-

-	/**

-	 * The callback method invoked to inform anyone listening that the 

-	 * Main class is still waiting for the completion of the shutdown. 

-	 */

-	void waitingForShutdown(int delay);

-

-}

diff --git a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/SimpleFileLock.java b/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/SimpleFileLock.java
deleted file mode 100644
index 8f21dc8..0000000
--- a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/SimpleFileLock.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.nio.channels.FileLock;
-import java.util.Properties;
-import java.util.logging.Logger;
-
-public class SimpleFileLock implements Lock {
-
-    private static final Logger LOG = Logger.getLogger(SimpleFileLock.class.getName());
-    private static final String PROPERTY_LOCK_DIR = "karaf.lock.dir";
-    private static final String PROP_KARAF_BASE = "karaf.base";
-    private RandomAccessFile lockFile;
-    private FileLock lock;
-
-    public SimpleFileLock(Properties props) {
-        try {
-
-            LOG.addHandler( BootstrapLogManager.getDefaultHandler() );
-            String lock = props.getProperty(PROPERTY_LOCK_DIR);
-
-            if (lock != null) {
-                File karafLock = getKarafLock(new File(lock), props);
-                props.setProperty(PROPERTY_LOCK_DIR, karafLock.getPath());
-            } else {
-                props.setProperty(PROPERTY_LOCK_DIR, System.getProperty(PROP_KARAF_BASE));
-            }
-
-            File base = new File(props.getProperty(PROPERTY_LOCK_DIR));
-            lockFile = new RandomAccessFile(new File(base, "lock"), "rw");
-        } catch (IOException ioe){
-            throw new RuntimeException("Karaf can't startup, make sure the log file can be accessed and written by the user starting Karaf : " + ioe.getMessage());
-        } catch (Exception e){
-            throw new RuntimeException("Could not create file lock", e);
-        }
-    }
-
-    public boolean lock() throws Exception {
-        LOG.info("locking");
-        if (lock == null) {
-            lock = lockFile.getChannel().tryLock();
-        }
-        return lock != null;
-    }
-
-    public void release() throws Exception {
-        LOG.info("releasing");
-        if (lock != null && lock.isValid()) {
-            lock.release();
-            lock.channel().close();
-        }
-        lock = null;
-    }
- 
-    public boolean isAlive() throws Exception {
-        return lock != null;
-    }
-
-    private static File getKarafLock(File lock,Properties props) {
-        File rc = null;
-
-        String path = lock.getPath();
-        if (path != null) {
-            rc = validateDirectoryExists(path, "Invalid " + PROPERTY_LOCK_DIR + " system property");
-        }
-
-        if (rc == null) {
-            path = props.getProperty(PROP_KARAF_BASE);
-            if (path != null) {
-                rc = validateDirectoryExists(path, "Invalid " + PROP_KARAF_BASE + " property");
-            }
-        }
-
-        if (rc == null) {
-            rc = lock;
-        }
-        return rc;
-    }
-
-    private static File validateDirectoryExists(String path, String errPrefix) {
-        File rc;
-        try {
-            rc = new File(path).getCanonicalFile();
-        } catch (IOException e) {
-            throw new IllegalArgumentException(errPrefix + " '" + path + "' : " + e.getMessage());
-        }
-        if (!rc.exists()) {
-            throw new IllegalArgumentException(errPrefix + " '" + path + "' : does not exist");
-        }
-        if (!rc.isDirectory()) {
-            throw new IllegalArgumentException(errPrefix + " '" + path + "' : is not a directory");
-        }
-        return rc;
-    }
-
-}
diff --git a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/StartLevelListener.java b/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/StartLevelListener.java
deleted file mode 100644
index 5a09152..0000000
--- a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/StartLevelListener.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import java.util.logging.Logger;
-
-import org.osgi.framework.FrameworkEvent;
-import org.osgi.framework.FrameworkListener;
-
-public class StartLevelListener implements FrameworkListener {
-
-    Logger LOG = Logger.getLogger(this.getClass().getName());
-    private Object startLevelLock;
-    
-    public StartLevelListener(Object startLevelLock) {
-        this.startLevelLock = startLevelLock;
-    }
-
-    public void frameworkEvent(FrameworkEvent event) {
-        if (event.getType() == FrameworkEvent.STARTLEVEL_CHANGED) {
-            synchronized (startLevelLock) {
-                LOG.fine("Start level change complete.");
-                startLevelLock.notifyAll();
-            }
-        }
-    }
-}
diff --git a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/StartupListener.java b/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/StartupListener.java
deleted file mode 100644
index 3d4321f..0000000
--- a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/StartupListener.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*

- * 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.

- */

-package org.apache.karaf.main;

-

-import org.osgi.framework.Bundle;

-import org.osgi.framework.BundleContext;

-import org.osgi.framework.BundleEvent;

-import org.osgi.framework.Constants;

-import org.osgi.framework.FrameworkEvent;

-import org.osgi.framework.FrameworkListener;

-import org.osgi.framework.SynchronousBundleListener;

-import org.osgi.framework.startlevel.FrameworkStartLevel;

-

-/**

- * Watches the startup of the framework and displays a progress bar of the number of bundles started / total.

- * The listener will remove itself after the desired start level is reached or the system property karaf.console.started is set to 

- * true. 

- */

-class StartupListener implements FrameworkListener, SynchronousBundleListener {

-    private static final String SYSTEM_PROP_KARAF_CONSOLE_STARTED = "karaf.console.started";

-    private int currentPercentage;

-

-	private final BundleContext context;

-    StartupListener(BundleContext context) {

-        this.context = context;

-        this.currentPercentage = 0;

-        context.addBundleListener(this);

-        context.addFrameworkListener(this);

-    }

-    public synchronized void bundleChanged(BundleEvent bundleEvent) {

-        Bundle[] bundles = context.getBundles();

-        int numActive = 0;

-        int numBundles = bundles.length;

-        for (Bundle bundle : bundles) {

-            if (bundle.getHeaders().get(Constants.FRAGMENT_HOST) != null) {

-                numBundles--;

-            } else if (bundle.getState() == Bundle.ACTIVE) {

-                numActive ++;

-            }

-        }

-        boolean started = Boolean.parseBoolean(System.getProperty(SYSTEM_PROP_KARAF_CONSOLE_STARTED, "false"));

-        if (!started) {

-            showProgressBar(numActive, numBundles);

-        }

-    }

-    public synchronized void frameworkEvent(FrameworkEvent frameworkEvent) {

-        if (frameworkEvent.getType() == FrameworkEvent.STARTLEVEL_CHANGED) {

-            int defStartLevel = Integer.parseInt(System.getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));

-            int startLevel = ((FrameworkStartLevel) context.getBundle(0).adapt(FrameworkStartLevel.class)).getStartLevel();

-            if (startLevel >= defStartLevel) {

-                context.removeBundleListener(this);

-                context.removeFrameworkListener(this);

-            }

-        }

-    }

-    public void showProgressBar(int done, int total) {

-        // progress bar can only have 72 characters so that 80 char wide terminal will display properly

-        int percent = (done * 100) / total;

-        int scaledPercent = (int) (72.0 * (percent / 100.0));

-        // Make sure we do not go backwards with percentage

-        if (percent > currentPercentage) {

-            currentPercentage = percent;

-            StringBuilder sb = new StringBuilder();

-            sb.append(String.format("\r%3d%% [", percent));

-            for (int i = 0; i < 72; i++) {

-                if (i < scaledPercent) {

-                    sb.append('=');

-                } else if (i == scaledPercent) {

-                    sb.append('>');

-                } else {

-                    sb.append(' ');

-                }

-            }

-            sb.append(']');

-            System.out.print(sb.toString());

-            System.out.flush();

-        }

-        if (done == total) {

-            System.out.println();

-        }

-    }

-}

diff --git a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Statements.java b/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Statements.java
deleted file mode 100644
index 04623e4..0000000
--- a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Statements.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-
-public class Statements {
-    
-    protected String tablePrefix = "";
-    protected String tableName = "KARAF_LOCK";
-    protected String nodeName = "karaf";
-    protected String momentColumnDataType = "BIGINT";
-    protected String nodeColumnDataType = "VARCHAR(20)";
-    
-    private String[] lockCreateSchemaStatements;
-    private String lockCreateStatement;
-    private String lockUpdateStatement;
-    private String lockVerifySelectionNotEmptyStatement;
-    
-    public String[] getLockCreateSchemaStatements(long moment) {
-        if (lockCreateSchemaStatements == null) {
-            lockCreateSchemaStatements = new String[] {
-                "CREATE TABLE " + getFullLockTableName() + " (MOMENT " + getMomentColumnDataType() + ", NODE " + getNodeColumnDataType() + ")",
-                "INSERT INTO " + getFullLockTableName() + " (MOMENT, NODE) VALUES (" + moment + ", '" + getNodeName() + "')", 
-            };
-        }
-        return lockCreateSchemaStatements;
-    }
-    
-    public void setLockCreateSchemaStatements(String[] lockCreateSchemaStatements) {
-        this.lockCreateSchemaStatements = lockCreateSchemaStatements;
-    }
-    
-    public String getLockCreateStatement() {
-        if (lockCreateStatement == null) {
-            lockCreateStatement = "SELECT * FROM " + getFullLockTableName() + " FOR UPDATE";
-        }
-        return lockCreateStatement;
-    }
-    
-    public void setLockCreateStatement(String lockCreateStatement) {
-        this.lockCreateStatement = lockCreateStatement;
-    }
-    
-    public String getLockUpdateStatement(long moment) {
-        if (lockUpdateStatement == null) {
-            lockUpdateStatement = "UPDATE " + getFullLockTableName() + " SET MOMENT = " + moment;
-        }
-        return lockUpdateStatement;
-    }
-    
-    public void setLockUpdateStatement(String lockUpdateStatement) {
-        this.lockUpdateStatement = lockUpdateStatement;
-    }
-
-	public void setLockVerifySelectionNotEmptyStatement(String lockVerifySelectionNotEmptyStatement) {
-		this.lockVerifySelectionNotEmptyStatement = lockVerifySelectionNotEmptyStatement;
-	}
-
-	public String getLockVerifySelectionNotEmptyStatement() {
-		if (lockVerifySelectionNotEmptyStatement == null) {
-			 //The lock create and lock update are perfomed on the whole table instead of 
-			 //the cluster. So not taking the node into account for now.
-			lockVerifySelectionNotEmptyStatement = "SELECT COUNT(*) FROM " + getFullLockTableName();
-		}
-		return lockVerifySelectionNotEmptyStatement;
-	}
-    
-    
-    long getCurrentTimeMillis() {
-        return System.currentTimeMillis();
-    }
-
-    public String getFullLockTableName() {
-        return getTablePrefix() + getTableName();
-    }
-    
-    public void setMomentColumnDataType(String momentColumnDataType) {
-        this.momentColumnDataType = momentColumnDataType;
-    }
-    
-    public String getMomentColumnDataType() {
-        return momentColumnDataType;
-    }
-
-    public String getNodeName() {
-        return nodeName;
-    }
-
-    public void setNodeName(String nodeName) {
-        this.nodeName = nodeName;
-    }
-
-    public String getNodeColumnDataType() {
-        return nodeColumnDataType;
-    }
-
-    public void setNodeColumnDataType(String nodeColumnDataType) {
-        this.nodeColumnDataType = nodeColumnDataType;
-    }
-
-    public String getTablePrefix() {
-        return tablePrefix;
-    }
-
-    public void setTablePrefix(String tablePrefix) {
-        this.tablePrefix = tablePrefix;
-    }
-    
-    public String getTableName() {
-        return tableName;
-    }
-
-    public void setTableName(String tableName) {
-        this.tableName = tableName;
-    }
-}
diff --git a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Stop.java b/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Stop.java
deleted file mode 100644
index 2370b20..0000000
--- a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Stop.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStreamReader;
-import java.net.Socket;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.Properties;
-
-/**
- * Main class used to stop the root Karaf instance
- */
-public class Stop {
-
-    public static void main(String[] args) throws Exception {
-        File karafHome = Utils.getKarafHome();
-        File karafBase = Utils.getKarafDirectory(Main.PROP_KARAF_BASE, Main.ENV_KARAF_BASE, karafHome, false, true);
-        File karafData = Utils.getKarafDirectory(Main.PROP_KARAF_DATA, Main.ENV_KARAF_DATA, new File(karafBase.getPath(), "data"), true, true);
-
-        System.setProperty(Main.PROP_KARAF_HOME, karafHome.getPath());
-        System.setProperty(Main.PROP_KARAF_BASE, karafBase.getPath());
-        System.setProperty(Main.PROP_KARAF_DATA, karafData.getPath());
-
-        // Load system properties.
-        Main.loadSystemProperties(karafBase);
-
-        File file = new File(new File(karafBase, "etc"), Main.CONFIG_PROPERTIES_FILE_NAME);
-        URL configPropURL = file.toURI().toURL();
-        Properties props = Main.loadPropertiesFile(configPropURL, false);
-        Main.copySystemProperties(props);
-
-        // Perform variable substitution for system properties.
-        for (Enumeration e = props.propertyNames(); e.hasMoreElements();) {
-            String name = (String) e.nextElement();
-            props.setProperty(name,
-                    Main.substVars(props.getProperty(name), name, null, props));
-        }
-
-        int port = Integer.parseInt(props.getProperty(Main.KARAF_SHUTDOWN_PORT, "0"));
-        String host = props.getProperty(Main.KARAF_SHUTDOWN_HOST, "localhost");
-        String portFile = props.getProperty(Main.KARAF_SHUTDOWN_PORT_FILE);
-        String shutdown = props.getProperty(Main.KARAF_SHUTDOWN_COMMAND, Main.DEFAULT_SHUTDOWN_COMMAND);
-        if (port == 0 && portFile != null) {
-            BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(portFile)));
-            String portStr = r.readLine();
-            port = Integer.parseInt(portStr);
-            r.close();
-        }
-        if (port > 0) {
-            Socket s = new Socket(host, port);
-            s.getOutputStream().write(shutdown.getBytes());
-            s.close();
-        } else {
-            System.err.println("Unable to find port...");
-        }
-
-    }
-}
diff --git a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/StringMap.java b/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/StringMap.java
deleted file mode 100644
index c14f8ea..0000000
--- a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/StringMap.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import java.util.Comparator;
-import java.util.Map;
-import java.util.TreeMap;
-
-/**
- * Simple utility class that creates a map for string-based keys by
- * extending <tt>TreeMap</tt>. This map can be set to use case-sensitive
- * or case-insensitive comparison when searching for the key.
- * Any keys put into this map will be converted to
- * a <tt>String</tt> using the <tt>toString()</tt> method,
- * since it is only intended to compare strings.
-**/
-public class StringMap extends TreeMap
-{
-    public StringMap()
-    {
-        this(true);
-    }
-
-    public StringMap(boolean caseSensitive)
-    {
-        super(new StringComparator(caseSensitive));
-    }
-
-    public StringMap(Map map, boolean caseSensitive)
-    {
-        this(caseSensitive);
-        putAll(map);
-    }
-
-    public Object put(Object key, Object value)
-    {
-        return super.put(key.toString(), value);
-    }
-
-    public boolean isCaseSensitive()
-    {
-        return ((StringComparator) comparator()).isCaseSensitive();
-    }
-
-    public void setCaseSensitive(boolean b)
-    {
-        ((StringComparator) comparator()).setCaseSensitive(b);
-    }
-
-    private static class StringComparator implements Comparator
-    {
-        private boolean m_isCaseSensitive = true;
-
-        public StringComparator(boolean b)
-        {
-            m_isCaseSensitive = b;
-        }
-
-        public int compare(Object o1, Object o2)
-        {
-            if (m_isCaseSensitive)
-            {
-                return o1.toString().compareTo(o2.toString());
-            }
-            else
-            {
-                return o1.toString().compareToIgnoreCase(o2.toString());
-            }
-        }
-
-        public boolean isCaseSensitive()
-        {
-            return m_isCaseSensitive;
-        }
-
-        public void setCaseSensitive(boolean b)
-        {
-            m_isCaseSensitive = b;
-        }
-    }
-}
diff --git a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Utils.java b/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Utils.java
deleted file mode 100644
index f3354a9..0000000
--- a/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Utils.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.net.URL;
-import java.net.JarURLConnection;
-import java.net.URI;
-
-import org.apache.karaf.main.Main;
-
-public class Utils {
-
-    public static File getKarafHome() throws IOException {
-        File rc = null;
-
-        // Use the system property if specified.
-        String path = System.getProperty(Main.PROP_KARAF_HOME);
-        if (path != null) {
-            rc = validateDirectoryExists(path, "Invalid " + Main.PROP_KARAF_HOME + " system property", false, true);
-        }
-
-        if (rc == null) {
-            path = System.getenv(Main.ENV_KARAF_HOME);
-            if (path != null) {
-                rc = validateDirectoryExists(path, "Invalid " + Main.ENV_KARAF_HOME + " environment variable", false, true);
-            }
-        }
-
-        // Try to figure it out using the jar file this class was loaded from.
-        if (rc == null) {
-            // guess the home from the location of the jar
-            URL url = Main.class.getClassLoader().getResource(Main.class.getName().replace(".", "/") + ".class");
-            if (url != null) {
-                try {
-                    JarURLConnection jarConnection = (JarURLConnection) url.openConnection();
-                    url = jarConnection.getJarFileURL();
-                    rc = new File(new URI(url.toString())).getCanonicalFile().getParentFile().getParentFile();
-                } catch (Exception ignored) {
-                }
-            }
-        }
-
-        if (rc == null) {
-            // Dig into the classpath to guess the location of the jar
-            String classpath = System.getProperty("java.class.path");
-            int index = classpath.toLowerCase().indexOf("karaf.jar");
-            int start = classpath.lastIndexOf(File.pathSeparator, index) + 1;
-            if (index >= start) {
-                String jarLocation = classpath.substring(start, index);
-                rc = new File(jarLocation).getCanonicalFile().getParentFile();
-            }
-        }
-        if (rc == null) {
-            throw new IOException("The Karaf install directory could not be determined.  Please set the " + Main.PROP_KARAF_HOME + " system property or the " + Main.ENV_KARAF_HOME + " environment variable.");
-        }
-
-        return rc;
-    }
-
-    public static File validateDirectoryExists(String path, String errPrefix, boolean createDirectory, boolean validate) {
-        File rc;
-        try {
-            rc = new File(path).getCanonicalFile();
-        } catch (IOException e) {
-            throw new IllegalArgumentException(errPrefix + " '" + path + "' : " + e.getMessage());
-        }
-        if (!rc.exists() && !createDirectory && validate) {
-            throw new IllegalArgumentException(errPrefix + " '" + path + "' : does not exist");
-        }
-        if (!rc.exists() && createDirectory) {
-            try {
-                rc.mkdirs();
-            } catch (SecurityException se) {
-                throw new IllegalArgumentException(errPrefix + " '" + path + "' : " + se.getMessage());
-            }
-        }
-        if (rc.exists() && !rc.isDirectory()) {
-            throw new IllegalArgumentException(errPrefix + " '" + path + "' : is not a directory");
-        }
-        return rc;
-    }
-    
-    public static File getKarafDirectory(String directoryProperty, String directoryEnvironmentVariable, File defaultValue, boolean create, boolean validate) {
-        File rc = null;
-        
-        String path = System.getProperty(directoryProperty);
-        if (path != null) {
-            rc = validateDirectoryExists(path, "Invalid " + directoryProperty + " system property", create, validate);
-        }
-        
-        if (rc == null) {
-            path = System.getenv(directoryEnvironmentVariable);
-            if (path != null && validate) {
-                rc = validateDirectoryExists(path, "Invalid " + directoryEnvironmentVariable  + " environment variable", create, validate);
-            }
-        }
-        
-        if (rc == null) {
-            rc = defaultValue;
-        }
-        
-        return rc;
-    }
-
-    //-----------------------------------------------------------------------
-    /**
-     * Recursively delete a directory.
-     * @param directory directory to delete
-     * @throws IOException in case deletion is unsuccessful
-     */
-    public static void deleteDirectory(File directory)
-        throws IOException {
-        if (!directory.exists()) {
-            return;
-        }
-
-        cleanDirectory(directory);
-        if (!directory.delete()) {
-            String message =
-                "Unable to delete directory " + directory + ".";
-            throw new IOException(message);
-        }
-    }
-
-    /**
-     * Clean a directory without deleting it.
-     * @param directory directory to clean
-     * @throws IOException in case cleaning is unsuccessful
-     */
-    public static void cleanDirectory(File directory) throws IOException {
-        if (!directory.exists()) {
-            String message = directory + " does not exist";
-            throw new IllegalArgumentException(message);
-        }
-
-        if (!directory.isDirectory()) {
-            String message = directory + " is not a directory";
-            throw new IllegalArgumentException(message);
-        }
-
-        File[] files = directory.listFiles();
-        if (files == null) {  // null if security restricted
-            throw new IOException("Failed to list contents of " + directory);
-        }
-
-        IOException exception = null;
-        for (int i = 0; i < files.length; i++) {
-            File file = files[i];
-            try {
-                forceDelete(file);
-            } catch (IOException ioe) {
-                exception = ioe;
-            }
-        }
-
-        if (null != exception) {
-            throw exception;
-        }
-    }
-
-    /**
-     * <p>
-     * Delete a file. If file is a directory, delete it and all sub-directories.
-     * </p>
-     * <p>
-     * The difference between File.delete() and this method are:
-     * </p>
-     * <ul>
-     * <li>A directory to be deleted does not have to be empty.</li>
-     * <li>You get exceptions when a file or directory cannot be deleted.
-     *      (java.io.File methods returns a boolean)</li>
-     * </ul>
-     * @param file file or directory to delete.
-     * @throws IOException in case deletion is unsuccessful
-     */
-    public static void forceDelete(File file) throws IOException {
-        if (file.isDirectory()) {
-            deleteDirectory(file);
-        } else {
-            if (!file.exists()) {
-                throw new FileNotFoundException("File does not exist: " + file);
-            }
-            if (!file.delete()) {
-                String message =
-                    "Unable to delete file: " + file;
-                throw new IOException(message);
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/main/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/main/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 9a02230..0000000
--- a/karaf-2.3.x/main/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,15 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle is responsible for the main Karaf startup.
-
-    In particular, it manages the bootstrap of low level Karaf services such as the embedded Derby database, locking
-    facilities, etc.
-
-\u001B[1mSEE ALSO\u001B[0m
diff --git a/karaf-2.3.x/main/src/main/resources/config.properties b/karaf-2.3.x/main/src/main/resources/config.properties
deleted file mode 100644
index 6fe20f9..0000000
--- a/karaf-2.3.x/main/src/main/resources/config.properties
+++ /dev/null
@@ -1,529 +0,0 @@
-# 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.
-
-#
-# Framework config properties.
-#
-org.osgi.framework.system.packages=org.osgi.framework; version=1.4.0, \
- org.osgi.service.packageadmin; version=1.2.0, \
- org.osgi.service.startlevel; version=1.1.0, \
- org.osgi.service.url; version=1.0.0, \
- org.osgi.util.tracker; version=1.3.2 \
- ${jre-${java.specification.version}}
-
-#org.osgi.framework.bootdelegation=sun.*,com.sun.*
-#felix.cache.profile=foo
-felix.auto.start.1= \
- file:bundle/org.apache.felix.shell-1.0.0.jar \
- file:bundle/org.apache.felix.shell.tui-1.0.0.jar \
- file:bundle/org.apache.felix.bundlerepository-1.0.0.jar 
-felix.log.level=4
-felix.startlevel.framework=1
-felix.startlevel.bundle=1
-#framework.service.urlhandlers=false
-
-#
-# Bundle config properties.
-#
-org.osgi.service.http.port=8080
-osgi.shell.telnet=on
-#obr.repository.url=http://bundles.osgi.org/obr/browse?_xml=1&cmd=repository
-
-karaf.default.repository=system
-#list of directories containing bundles to be loaded by SMX
-#bundle.locations=
-
-#
-# Java platform package export properties.
-#
-jre-1.3=, \
- javax.accessibility; \
- javax.accessibility.resources; \
- javax.naming; \
- javax.naming.directory; \
- javax.naming.event; \
- javax.naming.ldap; \
- javax.naming.spi; \
- javax.rmi; \
- javax.rmi.CORBA; \
- javax.sound.midi; \
- javax.sound.midi.spi; \
- javax.sound.sampled; \
- javax.sound.sampled.spi; \
- javax.swing; \
- javax.swing.border; \
- javax.swing.colorchooser; \
- javax.swing.event; \
- javax.swing.filechooser; \
- javax.swing.plaf; \
- javax.swing.plaf.basic; \
- javax.swing.plaf.basic.resources; \
- javax.swing.plaf.metal; \
- javax.swing.plaf.metal.resources; \
- javax.swing.plaf.multi; \
- javax.swing.table; \
- javax.swing.text; \
- javax.swing.text.html; \
- javax.swing.text.html.parser; \
- javax.swing.text.rtf; \
- javax.swing.tree; \
- javax.swing.undo; \
- javax.transaction; \
- org.omg.CORBA; \
- org.omg.CORBA_2_3; \
- org.omg.CORBA_2_3.portable; \
- org.omg.CORBA.DynAnyPackage; \
- org.omg.CORBA.ORBPackage; \
- org.omg.CORBA.portable; \
- org.omg.CORBA.TypeCodePackage; \
- org.omg.CosNaming; \
- org.omg.CosNaming.NamingContextPackage; \
- org.omg.SendingContext; \
- org.omg.stub.java.rmi; \
- version="1.3.0"
-
-jre-1.4=, \
- javax.accessibility; \
- javax.imageio; \
- javax.imageio.event; \
- javax.imageio.metadata; \
- javax.imageio.plugins.jpeg; \
- javax.imageio.spi; \
- javax.imageio.stream; \
- javax.naming; \
- javax.naming.directory; \
- javax.naming.event; \
- javax.naming.ldap; \
- javax.naming.spi; \
- javax.net; \
- javax.net.ssl; \
- javax.print; \
- javax.print.attribute; \
- javax.print.attribute.standard; \
- javax.print.event; \
- javax.rmi; \
- javax.rmi.CORBA; \
- javax.security.auth; \
- javax.security.auth.callback; \
- javax.security.auth.kerberos; \
- javax.security.auth.login; \
- javax.security.auth.spi; \
- javax.security.auth.x500; \
- javax.sound.midi; \
- javax.sound.midi.spi; \
- javax.sound.sampled; \
- javax.sound.sampled.spi; \
- javax.sql; \
- javax.swing; \
- javax.swing.border; \
- javax.swing.colorchooser; \
- javax.swing.event; \
- javax.swing.filechooser; \
- javax.swing.plaf; \
- javax.swing.plaf.basic; \
- javax.swing.plaf.metal; \
- javax.swing.plaf.multi; \
- javax.swing.table; \
- javax.swing.text; \
- javax.swing.text.html; \
- javax.swing.text.html.parser; \
- javax.swing.text.rtf; \
- javax.swing.tree; \
- javax.swing.undo; \
- javax.transaction; \
- javax.transaction.xa; \
- javax.xml.parsers; \
- javax.xml.transform; \
- javax.xml.transform.dom; \
- javax.xml.transform.sax; \
- javax.xml.transform.stream; \
- org.ietf.jgss; \
- org.omg.CORBA; \
- org.omg.CORBA_2_3; \
- org.omg.CORBA_2_3.portable; \
- org.omg.CORBA.DynAnyPackage; \
- org.omg.CORBA.ORBPackage; \
- org.omg.CORBA.portable; \
- org.omg.CORBA.TypeCodePackage; \
- org.omg.CosNaming; \
- org.omg.CosNaming.NamingContextExtPackage; \
- org.omg.CosNaming.NamingContextPackage; \
- org.omg.Dynamic; \
- org.omg.DynamicAny; \
- org.omg.DynamicAny.DynAnyFactoryPackage; \
- org.omg.DynamicAny.DynAnyPackage; \
- org.omg.IOP; \
- org.omg.IOP.CodecFactoryPackage; \
- org.omg.IOP.CodecPackage; \
- org.omg.Messaging; \
- org.omg.PortableInterceptor; \
- org.omg.PortableInterceptor.ORBInitInfoPackage; \
- org.omg.PortableServer; \
- org.omg.PortableServer.CurrentPackage; \
- org.omg.PortableServer.POAManagerPackage; \
- org.omg.PortableServer.POAPackage; \
- org.omg.PortableServer.portable; \
- org.omg.PortableServer.ServantLocatorPackage; \
- org.omg.SendingContext; \
- org.omg.stub.java.rmi; \
- org.w3c.dom; \
- org.w3c.dom.css; \
- org.w3c.dom.events; \
- org.w3c.dom.html; \
- org.w3c.dom.stylesheets; \
- org.w3c.dom.traversal; \
- org.w3c.dom.views; \
- org.xml.sax; \
- org.xml.sax.ext; \
- org.xml.sax.helpers; \
- version="1.4.0"
-
-jre-1.5=, \
- javax.accessibility; \
- javax.activity; \
- javax.imageio; \
- javax.imageio.event; \
- javax.imageio.metadata; \
- javax.imageio.plugins.bmp; \
- javax.imageio.plugins.jpeg; \
- javax.imageio.spi; \
- javax.imageio.stream; \
- javax.management; \
- javax.management.loading; \
- javax.management.modelmbean; \
- javax.management.monitor; \
- javax.management.openmbean; \
- javax.management.relation; \
- javax.management.remote; \
- javax.management.remote.rmi; \
- javax.management.timer; \
- javax.naming; \
- javax.naming.directory; \
- javax.naming.event; \
- javax.naming.ldap; \
- javax.naming.spi; \
- javax.net; \
- javax.net.ssl; \
- javax.print; \
- javax.print.attribute; \
- javax.print.attribute.standard; \
- javax.print.event; \
- javax.rmi; \
- javax.rmi.CORBA; \
- javax.rmi.ssl; \
- javax.security.auth; \
- javax.security.auth.callback; \
- javax.security.auth.kerberos; \
- javax.security.auth.login; \
- javax.security.auth.spi; \
- javax.security.auth.x500; \
- javax.security.sasl; \
- javax.sound.midi; \
- javax.sound.midi.spi; \
- javax.sound.sampled; \
- javax.sound.sampled.spi; \
- javax.sql; \
- javax.sql.rowset; \
- javax.sql.rowset.serial; \
- javax.sql.rowset.spi; \
- javax.swing; \
- javax.swing.border; \
- javax.swing.colorchooser; \
- javax.swing.event; \
- javax.swing.filechooser; \
- javax.swing.plaf; \
- javax.swing.plaf.basic; \
- javax.swing.plaf.metal; \
- javax.swing.plaf.multi; \
- javax.swing.plaf.synth; \
- javax.swing.table; \
- javax.swing.text; \
- javax.swing.text.html; \
- javax.swing.text.html.parser; \
- javax.swing.text.rtf; \
- javax.swing.tree; \
- javax.swing.undo; \
- javax.transaction; \
- javax.transaction.xa; \
- javax.xml; \
- javax.xml.datatype; \
- javax.xml.namespace; \
- javax.xml.parsers; \
- javax.xml.transform; \
- javax.xml.transform.dom; \
- javax.xml.transform.sax; \
- javax.xml.transform.stream; \
- javax.xml.validation; \
- javax.xml.xpath; \
- org.ietf.jgss; \
- org.omg.CORBA; \
- org.omg.CORBA_2_3; \
- org.omg.CORBA_2_3.portable; \
- org.omg.CORBA.DynAnyPackage; \
- org.omg.CORBA.ORBPackage; \
- org.omg.CORBA.portable; \
- org.omg.CORBA.TypeCodePackage; \
- org.omg.CosNaming; \
- org.omg.CosNaming.NamingContextExtPackage; \
- org.omg.CosNaming.NamingContextPackage; \
- org.omg.Dynamic; \
- org.omg.DynamicAny; \
- org.omg.DynamicAny.DynAnyFactoryPackage; \
- org.omg.DynamicAny.DynAnyPackage; \
- org.omg.IOP; \
- org.omg.IOP.CodecFactoryPackage; \
- org.omg.IOP.CodecPackage; \
- org.omg.Messaging; \
- org.omg.PortableInterceptor; \
- org.omg.PortableInterceptor.ORBInitInfoPackage; \
- org.omg.PortableServer; \
- org.omg.PortableServer.CurrentPackage; \
- org.omg.PortableServer.POAManagerPackage; \
- org.omg.PortableServer.POAPackage; \
- org.omg.PortableServer.portable; \
- org.omg.PortableServer.ServantLocatorPackage; \
- org.omg.SendingContext; \
- org.omg.stub.java.rmi; \
- org.omg.stub.javax.management.remote.rmi; \
- org.w3c.dom; \
- org.w3c.dom.bootstrap; \
- org.w3c.dom.css; \
- org.w3c.dom.events; \
- org.w3c.dom.html; \
- org.w3c.dom.ls; \
- org.w3c.dom.ranges; \
- org.w3c.dom.stylesheets; \
- org.w3c.dom.traversal; \
- org.w3c.dom.views; \
- org.xml.sax; \
- org.xml.sax.ext; \
- org.xml.sax.helpers; \
- version="1.5.0"
-
-jre-1.6=, \
- java.applet; \
- java.awt; \
- java.awt.color; \
- java.awt.datatransfer; \
- java.awt.dnd; \
- java.awt.dnd.peer; \
- java.awt.event; \
- java.awt.font; \
- java.awt.geom; \
- java.awt.im; \
- java.awt.image; \
- java.awt.image.renderable; \
- java.awt.im.spi; \
- java.awt.peer; \
- java.awt.print; \
- java.beans; \
- java.beans.beancontext; \
- java.io; \
- java.lang; \
- java.lang.annotation; \
- java.lang.instrument; \
- java.lang.management; \
- java.lang.ref; \
- java.lang.reflect; \
- java.math; \
- java.net; \
- java.nio; \
- java.nio.channels; \
- java.nio.channels.spi; \
- java.nio.charset; \
- java.nio.charset.spi; \
- java.rmi; \
- java.rmi.activation; \
- java.rmi.dgc; \
- java.rmi.registry; \
- java.rmi.server; \
- java.security; \
- java.security.acl; \
- java.security.cert; \
- java.security.interfaces; \
- java.security.spec; \
- java.sql; \
- java.text; \
- java.text.spi; \
- java.util; \
- java.util.concurrent; \
- java.util.concurrent.atomic; \
- java.util.concurrent.locks; \
- java.util.jar; \
- java.util.logging; \
- java.util.prefs; \
- java.util.regex; \
- java.util.spi; \
- java.util.zip; \
- javax.accessibility; \
- javax.activation; \
- javax.activity; \
- javax.annotation; \
- javax.annotation.processing; \
- javax.imageio; \
- javax.imageio.event; \
- javax.imageio.metadata; \
- javax.imageio.plugins.bmp; \
- javax.imageio.plugins.jpeg; \
- javax.imageio.spi; \
- javax.imageio.stream; \
- javax.jws; \
- javax.jws.soap; \
- javax.lang.model; \
- javax.lang.model.element; \
- javax.lang.model.type; \
- javax.lang.model.util; \
- javax.management; \
- javax.management.loading; \
- javax.management.modelmbean; \
- javax.management.monitor; \
- javax.management.openmbean; \
- javax.management.relation; \
- javax.management.remote; \
- javax.management.remote.rmi; \
- javax.management.timer; \
- javax.naming; \
- javax.naming.directory; \
- javax.naming.event; \
- javax.naming.ldap; \
- javax.naming.spi; \
- javax.net; \
- javax.net.ssl; \
- javax.print; \
- javax.print.attribute; \
- javax.print.attribute.standard; \
- javax.print.event; \
- javax.rmi; \
- javax.rmi.CORBA; \
- javax.rmi.ssl; \
- javax.script; \
- javax.security.auth; \
- javax.security.auth.callback; \
- javax.security.auth.kerberos; \
- javax.security.auth.login; \
- javax.security.auth.spi; \
- javax.security.auth.x500; \
- javax.security.sasl; \
- javax.smartcardio; \
- javax.sound.midi; \
- javax.sound.midi.spi; \
- javax.sound.sampled; \
- javax.sound.sampled.spi; \
- javax.sql; \
- javax.sql.rowset; \
- javax.sql.rowset.serial; \
- javax.sql.rowset.spi; \
- javax.swing; \
- javax.swing.border; \
- javax.swing.colorchooser; \
- javax.swing.event; \
- javax.swing.filechooser; \
- javax.swing.plaf; \
- javax.swing.plaf.basic; \
- javax.swing.plaf.metal; \
- javax.swing.plaf.multi; \
- javax.swing.plaf.synth; \
- javax.swing.table; \
- javax.swing.text; \
- javax.swing.text.html; \
- javax.swing.text.html.parser; \
- javax.swing.text.rtf; \
- javax.swing.tree; \
- javax.swing.undo; \
- javax.tools; \
- javax.transaction; \
- javax.transaction.xa; \
- javax.xml; \
- javax.xml.bind; \
- javax.xml.bind.annotation; \
- javax.xml.bind.annotation.adapters; \
- javax.xml.bind.attachment; \
- javax.xml.bind.helpers; \
- javax.xml.bind.util; \
- javax.xml.crypto; \
- javax.xml.crypto.dom; \
- javax.xml.crypto.dsig; \
- javax.xml.crypto.dsig.dom; \
- javax.xml.crypto.dsig.keyinfo; \
- javax.xml.crypto.dsig.spec; \
- javax.xml.datatype; \
- javax.xml.namespace; \
- javax.xml.parsers; \
- javax.xml.soap; \
- javax.xml.stream; \
- javax.xml.stream.events; \
- javax.xml.stream.util; \
- javax.xml.transform; \
- javax.xml.transform.dom; \
- javax.xml.transform.sax; \
- javax.xml.transform.stax; \
- javax.xml.transform.stream; \
- javax.xml.validation; \
- javax.xml.ws; \
- javax.xml.ws.handler; \
- javax.xml.ws.handler.soap; \
- javax.xml.ws.http; \
- javax.xml.ws.soap; \
- javax.xml.ws.spi; \
- javax.xml.xpath; \
- org.ietf.jgss; \
- org.jcp.xml.dsig.internal; \
- org.jcp.xml.dsig.internal.dom; \
- org.omg.CORBA; \
- org.omg.CORBA_2_3; \
- org.omg.CORBA_2_3.portable; \
- org.omg.CORBA.DynAnyPackage; \
- org.omg.CORBA.ORBPackage; \
- org.omg.CORBA.portable; \
- org.omg.CORBA.TypeCodePackage; \
- org.omg.CosNaming; \
- org.omg.CosNaming.NamingContextExtPackage; \
- org.omg.CosNaming.NamingContextPackage; \
- org.omg.Dynamic; \
- org.omg.DynamicAny; \
- org.omg.DynamicAny.DynAnyFactoryPackage; \
- org.omg.DynamicAny.DynAnyPackage; \
- org.omg.IOP; \
- org.omg.IOP.CodecFactoryPackage; \
- org.omg.IOP.CodecPackage; \
- org.omg.Messaging; \
- org.omg.PortableInterceptor; \
- org.omg.PortableInterceptor.ORBInitInfoPackage; \
- org.omg.PortableServer; \
- org.omg.PortableServer.CurrentPackage; \
- org.omg.PortableServer.POAManagerPackage; \
- org.omg.PortableServer.POAPackage; \
- org.omg.PortableServer.portable; \
- org.omg.PortableServer.ServantLocatorPackage; \
- org.omg.SendingContext; \
- org.omg.stub.java.rmi; \
- org.omg.stub.javax.management.remote.rmi; \
- org.w3c.dom; \
- org.w3c.dom.bootstrap; \
- org.w3c.dom.css; \
- org.w3c.dom.events; \
- org.w3c.dom.html; \
- org.w3c.dom.ls; \
- org.w3c.dom.ranges; \
- org.w3c.dom.stylesheets; \
- org.w3c.dom.traversal; \
- org.w3c.dom.views; \
- org.w3c.dom.xpath; \
- org.xml.sax; \
- org.xml.sax.ext; \
- org.xml.sax.helpers; \
- version=\"1.6.0\"
diff --git a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/BaseJDBCLockIntegrationTest.java b/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/BaseJDBCLockIntegrationTest.java
deleted file mode 100644
index c57825e..0000000
--- a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/BaseJDBCLockIntegrationTest.java
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.Properties;
-import java.util.logging.Logger;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-import org.junit.Test;
-
-public abstract class BaseJDBCLockIntegrationTest {
-    
-    private final Logger LOG = Logger.getLogger(this.getClass().getName());
-
-    DefaultJDBCLock lock;
-    Properties props;
-    String user = "root";
-    String password = "";
-    String driver;
-    String url;
-    String tableName = "LOCK_TABLE";
-    String clustername = "karaf_cluster";
-    int timeout = 10;
-    String momentDatatype = "BIGINT";
-    String nodeDatatype = "VARCHAR(20)";
-
-    abstract DefaultJDBCLock createLock(Properties props);
-    
-    @BeforeClass
-    public static void setUpTestSuite() {
-        Properties properties = new Properties();
-        properties.put("karaf.bootstrap.log", "target/karaf.log");
-        BootstrapLogManager.setProperties(properties);        
-    }
-    
-    @Before
-    public void setUp() throws Exception {
-        props = new Properties();
-        props.put("karaf.lock.jdbc.url", url);
-        props.put("karaf.lock.jdbc.driver", driver);
-        props.put("karaf.lock.jdbc.user", user);
-        props.put("karaf.lock.jdbc.password", password);
-        props.put("karaf.lock.jdbc.table", tableName);
-        props.put("karaf.lock.jdbc.clustername", clustername);
-        props.put("karaf.lock.jdbc.timeout", String.valueOf(timeout));
-        
-        try {
-            executeStatement("DROP TABLE " + tableName);
-        } catch (Exception e) {
-            // expected if the table dosn't exist
-        }
-    }
-    
-    @After
-    public void tearDown() throws Exception {
-        if (lock != null) {
-            lock.release();
-        }
-    }
-    
-    @Test
-    @Ignore
-    public void lockShouldRestoreTheLockAfterADbFailure() throws Exception {
-        Lock lock1 = createLock(props);
-        assertTrue(lock1.lock());
-        assertTrue(lock1.isAlive());
-        
-        // shut down the database
-        
-        assertFalse(lock1.isAlive());
-        
-        // start the database
-        
-        assertTrue(lock1.lock());
-        assertTrue(lock1.isAlive());
-    }
-    
-    @Test
-    public void initShouldCreateTheSchemaIfItNotExists() throws Exception {
-        long start = System.currentTimeMillis();
-        lock = createLock(props);
-        long end = System.currentTimeMillis();
-        
-        long moment = queryDatabaseSingleResult("SELECT MOMENT FROM " + tableName);
-    
-        assertTrue(moment >= start);
-        assertTrue(moment <= end);
-    }
-
-    @Test
-    public void initShouldNotCreateTheSchemaIfItAlreadyExists() throws Exception {
-        executeStatement("CREATE TABLE " + tableName + " (MOMENT " + momentDatatype + ", NODE " + nodeDatatype + ")");
-        executeStatement("INSERT INTO " + tableName + " (MOMENT, NODE) VALUES (1, '" + clustername + "')");
-        
-        lock = createLock(props);
-        
-        long moment = queryDatabaseSingleResult("SELECT MOMENT FROM " + tableName);
-    
-        assertEquals(1, moment);
-    }
-
-    @Test
-    public void lockShouldReturnTrueItTheTableIsNotLocked() throws Exception {
-        lock = createLock(props);
-        
-        assertTrue(lock.lock());
-        assertTableIsLocked();
-    }
-
-    @Test
-    public void lockShouldReturnFalseIfAnotherRowIsLocked() throws Exception {
-        Connection connection = null;
-        try {
-            lock = createLock(props);
-            
-            executeStatement("INSERT INTO " + tableName + " (MOMENT, NODE) VALUES (1, '" + clustername + "_2')");
-            connection = lock(tableName, clustername + "_2");
-            
-            // we can't lock only one row for the cluster
-            assertFalse(lock.lock());
-        } finally {
-            close(connection);
-        }
-    }
-    
-    @Test
-    public void lockShouldReturnFalseIfTheRowIsAlreadyLocked() throws Exception {
-        Connection connection = null;
-        try {
-            lock = createLock(props);
-            connection = lock(tableName, clustername);
-            
-            assertFalse(lock.lock());
-        } finally {
-            close(connection);
-        }
-    }
-    
-    @Test
-    public void lockShouldReturnFalseIfTheTableIsEmpty() throws Exception {
-        Connection connection = null;
-        try {
-            lock = createLock(props);
-            truncateTable(); //Empty the table
-            connection = lock(tableName, clustername);
-            
-            assertFalse(lock.lock());
-        } finally {
-            close(connection);
-        }
-    }
-    
-    @Test
-    public void release() throws Exception {
-        lock = createLock(props);
-        
-        assertTrue(lock.lock());
-        
-        lock.release();
-        
-        assertNull(lock.lockConnection);
-        assertTableIsUnlocked();
-    }
-
-    @Test
-    public void releaseShouldSucceedForAnAlreadyClosedConnection() throws Exception {
-        lock = createLock(props);
-        
-        assertTrue(lock.lock());
-        
-        lock.lockConnection.rollback(); // release the lock
-        lock.lockConnection.close();
-        lock.release();
-        
-        assertTableIsUnlocked();
-    }
-
-    @Test
-    public void releaseShouldSucceedForANullConnectionReference() throws Exception {
-        lock = createLock(props);
-        
-        assertTrue(lock.lock());
-        
-        lock.lockConnection.rollback(); // release the lock
-        lock.lockConnection.close();
-        lock.lockConnection = null;
-        lock.release();
-        
-        assertTableIsUnlocked();
-    }
-
-    @Test
-    public void isAliveShouldReturnTrueIfItHoldsTheLock() throws Exception {
-        lock = createLock(props);
-        
-        assertTrue(lock.lock());
-        assertTrue(lock.isAlive());
-    }
-
-    @Test
-    public void isAliveShouldReturnFalseIfTheConnectionIsClosed() throws Exception {
-        lock = createLock(props);
-        
-        assertTrue(lock.lock());
-        
-        lock.lockConnection.rollback(); // release the lock
-        lock.lockConnection.close();
-        
-        assertFalse(lock.isAlive());
-    }
-
-    @Test
-    public void isAliveShouldReturnFalseIfTheConnectionIsNull() throws Exception {
-        lock = createLock(props);
-        
-        assertTrue(lock.lock());
-        
-        lock.lockConnection.rollback(); // release the lock
-        lock.lockConnection.close();
-        lock.lockConnection = null;
-        
-        assertFalse(lock.isAlive());
-    }
-
-    @Test
-    public void isAliveShouldReturnFalseIfItNotHoldsTheLock() throws Exception {
-        Connection connection = null;
-        try {
-            lock = createLock(props);
-            
-            assertTrue(lock.lock());
-            
-            lock.lockConnection.rollback(); // release the lock
-            connection = lock(tableName, clustername); // another connection locks the table
-            
-            assertFalse(lock.isAlive());
-        } finally {
-            close(connection);            
-        }
-    }
-
-    Connection getConnection(String url, String user, String password) throws ClassNotFoundException, SQLException {
-        Class.forName(driver);
-        Connection connection = DriverManager.getConnection(url, user, password);
-        connection.setAutoCommit(false);
-        return connection;
-    }
-
-    void executeStatement(String stmt) throws SQLException, ClassNotFoundException {
-        Connection connection = null;
-        Statement statement = null;
-        
-        try {
-            connection = getConnection(url, user, password);
-            statement = connection.createStatement();
-            statement.setQueryTimeout(timeout);
-            statement.execute(stmt);    
-            connection.commit();
-        } finally {
-            close(statement);
-            close(connection);
-        }
-    }
-
-    Long queryDatabaseSingleResult(String query) throws ClassNotFoundException, SQLException {
-        Connection connection = null;
-        Statement statement = null;
-        ResultSet rs = null;
-        
-        try {
-            connection = getConnection(url, user, password);
-            statement = connection.createStatement();
-            rs = statement.executeQuery(query);
-            rs.next();
-            return rs.getLong(1);
-        } finally {
-            close(rs);
-            close(statement);
-            close(connection);
-        }
-    }
-
-    void assertTableIsLocked() throws ClassNotFoundException, SQLException {
-        try {
-            executeStatement("UPDATE " + tableName + " SET MOMENT = " + System.currentTimeMillis());
-            fail("SQLException for timeout expected because the table should be already locked");
-        } catch (SQLException sqle) {
-            // expected
-        }
-    }
-
-    void assertTableIsUnlocked() throws ClassNotFoundException, SQLException {
-        executeStatement("UPDATE " + tableName + " SET MOMENT = " + System.currentTimeMillis());
-    }
-
-    void truncateTable() throws SQLException, ClassNotFoundException {
-	    executeStatement("TRUNCATE TABLE " + tableName);
-    }
-    
-    
-    Connection lock(String table, String node) throws ClassNotFoundException, SQLException {
-        Connection connection = null;
-        Statement statement = null;
-        
-        try {
-            connection = getConnection(url, user, password);
-            statement = connection.createStatement();
-            //statement.execute("SELECT * FROM " + table + " WHERE NODE = '" + node + "' FOR UPDATE");
-            //statement.execute("UPDATE " + table + " SET MOMENT = " + System.currentTimeMillis() + " WHERE NODE = '" + node + "'");
-            statement.execute("SELECT * FROM " + table + " FOR UPDATE");
-            statement.execute("UPDATE " + table + " SET MOMENT = " + System.currentTimeMillis());
-        } finally {
-            close(statement);
-            // connection must not be closed!
-        }
-        
-        return connection;
-    }
-
-    void close(ResultSet rs) throws SQLException {
-        if (rs != null) {
-            try {
-                rs.close();
-            } catch (Exception e) {
-            }
-        }
-    }
-
-    void close(Statement statement) throws SQLException {
-        if (statement != null) {
-            try {
-                statement.close();
-            } catch (Exception e) {
-                LOG.severe("Can't close the statement: " + e);
-            }
-        }
-    }
-
-    void close(Connection connection) throws SQLException {
-        if (connection != null) {
-            try {
-                connection.rollback();
-            } catch (Exception e) {
-                LOG.severe("Can't rollback the connection: " + e);
-            }
-            try {
-                connection.close();
-            } catch (Exception e) {
-                LOG.severe("Can't close the connection: " + e);
-            }
-        }
-    }
-}
diff --git a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/BaseJDBCLockTest.java b/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/BaseJDBCLockTest.java
deleted file mode 100644
index 6589860..0000000
--- a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/BaseJDBCLockTest.java
+++ /dev/null
@@ -1,334 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import static org.easymock.EasyMock.*;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.Properties;
-
-import org.easymock.EasyMock;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-public abstract class BaseJDBCLockTest {
-    
-    DefaultJDBCLock lock;
-    Properties props;
-    String user = "root";
-    String password = "";
-    String driver;
-    String url;
-    String tableName = "LOCK_TABLE";
-    String clustername = "karaf_cluster";
-    int timeout = 10;
-    String momentDatatype = "BIGINT";
-    String nodeDatatype = "VARCHAR(20)";
-    String createTableStmtSuffix = "";
-    
-    Connection connection;
-    DatabaseMetaData metaData;
-    ResultSet resultSet;
-    PreparedStatement preparedStatement;
-    Statement statement;
-    
-    abstract DefaultJDBCLock createLock(Properties props);
-    
-    @BeforeClass
-    public static void setUpTestSuite() {
-        Properties properties = new Properties();
-        properties.put("karaf.bootstrap.log", "target/karaf.log");
-        BootstrapLogManager.setProperties(properties);        
-    }
-    
-    @Before
-    public void setUp() throws Exception {
-        connection = EasyMock.createMock(Connection.class);
-        metaData = EasyMock.createMock(DatabaseMetaData.class);
-        resultSet = EasyMock.createMock(ResultSet.class);
-        preparedStatement = EasyMock.createMock(PreparedStatement.class);
-        statement = EasyMock.createMock(Statement.class);
-        
-        props = new Properties();
-        props.put("karaf.lock.jdbc.url", url);
-        props.put("karaf.lock.jdbc.driver", driver);
-        props.put("karaf.lock.jdbc.user", user);
-        props.put("karaf.lock.jdbc.password", password);
-        props.put("karaf.lock.jdbc.table", tableName);
-        props.put("karaf.lock.jdbc.clustername", clustername);
-        props.put("karaf.lock.jdbc.timeout", timeout);
-    }
-    
-    @Test
-    public void initShouldCreateTheSchemaIfItNotExists() throws Exception {
-        expect(connection.isClosed()).andReturn(false);
-        connection.setAutoCommit(false);
-        expect(connection.getMetaData()).andReturn(metaData);
-        expect(metaData.getTables((String) isNull(), (String) isNull(), eq("LOCK_TABLE"), aryEq(new String[] {"TABLE"}))).andReturn(resultSet);
-        expect(resultSet.next()).andReturn(false);
-        resultSet.close();
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.createStatement()).andReturn(statement);
-        expect(statement.execute("CREATE TABLE " + tableName + " (MOMENT " + momentDatatype + ", NODE " + nodeDatatype + ")" + createTableStmtSuffix)).andReturn(false);
-        expect(statement.execute("INSERT INTO " + tableName + " (MOMENT, NODE) VALUES (1, '" + clustername + "')")).andReturn(false);
-        statement.close();
-        connection.commit();
-        
-        replay(connection, metaData, statement, preparedStatement, resultSet);
-        
-        lock = createLock(props);
-        
-        verify(connection, metaData, statement, preparedStatement, resultSet);
-    }
-    
-    @Test
-    public void initShouldNotCreateTheSchemaIfItAlreadyExists() throws Exception {
-        connection.setAutoCommit(false);
-        expect(connection.getMetaData()).andReturn(metaData);
-        expect(metaData.getTables((String) isNull(), (String) isNull(), eq("LOCK_TABLE"), aryEq(new String[] {"TABLE"}))).andReturn(resultSet);
-        expect(resultSet.next()).andReturn(true);
-        resultSet.close();
-        
-        replay(connection, metaData, statement, preparedStatement, resultSet);
-        
-        lock = createLock(props);
-        
-        verify(connection, metaData, statement, preparedStatement, resultSet);
-    }
-    
-    @Test
-    public void lockShouldReturnTrueItTheTableIsNotLocked() throws Exception {
-        initShouldNotCreateTheSchemaIfItAlreadyExists();
-        reset(connection, metaData, statement, preparedStatement, resultSet);
-        
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("SELECT * FROM " + tableName + " FOR UPDATE")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(10);
-        expect(preparedStatement.execute()).andReturn(true);
-        preparedStatement.close();
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("UPDATE " + tableName + " SET MOMENT = 1")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(10);
-        expect(preparedStatement.executeUpdate()).andReturn(1);
-        preparedStatement.close();
-        
-        replay(connection, metaData, statement, preparedStatement, resultSet);
-        
-        boolean lockAquired = lock.lock();
-        
-        verify(connection, metaData, statement, preparedStatement, resultSet);
-        assertTrue(lockAquired);
-    }
-    
-    @Test
-    public void lockShouldReturnFalseIfAnotherRowIsLocked() throws Exception {
-        initShouldNotCreateTheSchemaIfItAlreadyExists();
-        reset(connection, metaData, statement, preparedStatement, resultSet);
-        
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("SELECT * FROM " + tableName + " FOR UPDATE")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(10);
-        expect(preparedStatement.execute()).andReturn(true);
-        preparedStatement.close();
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("UPDATE " + tableName + " SET MOMENT = 1")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(10);
-        expect(preparedStatement.executeUpdate()).andThrow(new SQLException());
-        preparedStatement.close();
-        
-        replay(connection, metaData, statement, preparedStatement, resultSet);
-        
-        boolean lockAquired = lock.lock();
-        
-        verify(connection, metaData, statement, preparedStatement, resultSet);
-        assertFalse(lockAquired);
-    }
-    
-    @Test
-    public void lockShouldReturnFalseIfTheRowIsAlreadyLocked() throws Exception {
-        initShouldNotCreateTheSchemaIfItAlreadyExists();
-        reset(connection, metaData, statement, preparedStatement, resultSet);
-        
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("SELECT * FROM " + tableName + " FOR UPDATE")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(10);
-        expect(preparedStatement.execute()).andReturn(true);
-        preparedStatement.close();
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("UPDATE " + tableName + " SET MOMENT = 1")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(10);
-        expect(preparedStatement.executeUpdate()).andThrow(new SQLException());
-        preparedStatement.close();
-        
-        replay(connection, metaData, statement, preparedStatement, resultSet);
-        
-        boolean lockAquired = lock.lock();
-        
-        verify(connection, metaData, statement, preparedStatement, resultSet);
-        assertFalse(lockAquired);
-    }
-    
-    @Test
-    public void release() throws Exception {
-        initShouldNotCreateTheSchemaIfItAlreadyExists();
-        reset(connection, metaData, statement, preparedStatement, resultSet);
-        
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.isClosed()).andReturn(false);
-        connection.rollback();
-        connection.close();
-        
-        replay(connection, metaData, statement, preparedStatement, resultSet);
-        
-        lock.release();
-        
-        verify(connection, metaData, statement, preparedStatement, resultSet);
-    }
-    
-    @Test
-    public void releaseShouldSucceedForAnAlreadyClosedConnection() throws Exception {
-        initShouldNotCreateTheSchemaIfItAlreadyExists();
-        reset(connection, metaData, statement, preparedStatement, resultSet);
-        
-        expect(connection.isClosed()).andReturn(true);
-        
-        replay(connection, metaData, statement, preparedStatement, resultSet);
-        
-        lock.release();
-        
-        verify(connection, metaData, statement, preparedStatement, resultSet);
-    }
-    
-    @Test
-    public void releaseShouldSucceedForANullConnectionReference() throws Exception {
-        initShouldNotCreateTheSchemaIfItAlreadyExists();
-        reset(connection, metaData, statement, preparedStatement, resultSet);
-        
-        lock.lockConnection = null;
-        
-        replay(connection, metaData, statement, preparedStatement, resultSet);
-        
-        lock.release();
-        
-        verify(connection, metaData, statement, preparedStatement, resultSet);
-    }
-    
-    @Test
-    public void isAliveShouldReturnTrueIfItHoldsTheLock() throws Exception {
-        initShouldNotCreateTheSchemaIfItAlreadyExists();
-        reset(connection, metaData, statement, preparedStatement, resultSet);
-        
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("UPDATE " + tableName + " SET MOMENT = 1")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(10);
-        expect(preparedStatement.executeUpdate()).andReturn(1);
-        preparedStatement.close();
-        
-        replay(connection, metaData, statement, preparedStatement, resultSet);
-        
-        boolean alive = lock.isAlive();
-        
-        verify(connection, metaData, statement, preparedStatement, resultSet);
-        assertTrue(alive);
-    }
-    
-    @Test
-    public void isAliveShouldReturnFalseIfTheConnectionIsClosed() throws Exception {
-        initShouldNotCreateTheSchemaIfItAlreadyExists();
-        reset(connection, metaData, statement, preparedStatement, resultSet);
-        
-        expect(connection.isClosed()).andReturn(true);
-        
-        replay(connection, metaData, statement, preparedStatement, resultSet);
-        
-        boolean alive = lock.isAlive();
-        
-        verify(connection, metaData, statement, preparedStatement, resultSet);
-        assertFalse(alive);
-    }
-    
-    @Test
-    public void isAliveShouldReturnFalseIfTheConnectionIsNull() throws Exception {
-        initShouldNotCreateTheSchemaIfItAlreadyExists();
-        reset(connection, metaData, statement, preparedStatement, resultSet);
-        
-        lock.lockConnection = null;
-        
-        replay(connection, metaData, statement, preparedStatement, resultSet);
-        
-        boolean alive = lock.isAlive();
-        
-        verify(connection, metaData, statement, preparedStatement, resultSet);
-        assertFalse(alive);
-    }
-    
-    @Test
-    public void isAliveShouldReturnFalseIfItNotHoldsTheLock() throws Exception {
-        initShouldNotCreateTheSchemaIfItAlreadyExists();
-        reset(connection, metaData, statement, preparedStatement, resultSet);
-        
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("UPDATE " + tableName + " SET MOMENT = 1")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(10);
-        expect(preparedStatement.executeUpdate()).andThrow(new SQLException());
-        preparedStatement.close();
-        
-        replay(connection, metaData, statement, preparedStatement, resultSet);
-        
-        boolean alive = lock.isAlive();
-        
-        verify(connection, metaData, statement, preparedStatement, resultSet);
-        assertFalse(alive);
-    }
-    
-    @Test
-    public void lockShouldReturnFalseIfTableIsEmpty() throws Exception {
-        initShouldNotCreateTheSchemaIfItAlreadyExists();
-        reset(connection, metaData, statement, preparedStatement, resultSet);
-        
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("SELECT * FROM " + tableName + " FOR UPDATE")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(10);
-        expect(preparedStatement.execute()).andReturn(true);
-        preparedStatement.close();
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("UPDATE " + tableName + " SET MOMENT = 1")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(10);
-        expect(preparedStatement.executeUpdate()).andReturn(0);
-        preparedStatement.close();
-        
-        replay(connection, metaData, statement, preparedStatement, resultSet);
-        
-        boolean lockAquired = lock.lock();
-        
-        verify(connection, metaData, statement, preparedStatement, resultSet);
-        assertFalse(lockAquired);
-    }
-}
diff --git a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/DefaultJDBCLockIntegrationTest.java b/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/DefaultJDBCLockIntegrationTest.java
deleted file mode 100644
index 7620528..0000000
--- a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/DefaultJDBCLockIntegrationTest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import static org.junit.Assert.assertTrue;
-
-import java.util.Properties;
-
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-
-
-@Ignore
-public class DefaultJDBCLockIntegrationTest extends BaseJDBCLockIntegrationTest {
-
-    @Before
-    @Override
-    public void setUp() throws Exception {
-        password = "root";
-        driver = "org.apache.derby.jdbc.ClientDriver";
-        url = "jdbc:derby://127.0.0.1:1527/test";
-        
-        super.setUp();
-    }
-    
-    @Override
-    DefaultJDBCLock createLock(Properties props) {
-        return new DefaultJDBCLock(props);
-    }
-    
-    @Test
-    public void initShouldCreateTheDatabaseIfItNotExists() throws Exception {
-        String database = "test" + System.currentTimeMillis();
-        url = "jdbc:derby://127.0.0.1:1527/" + database;
-        props.put("karaf.lock.jdbc.url", url);
-        lock = createLock(props);
-        lock.lock();
-        
-        assertTrue(lock.lockConnection.getMetaData().getURL().contains(database));
-    }
-}
diff --git a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/DefaultJDBCLockTest.java b/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/DefaultJDBCLockTest.java
deleted file mode 100644
index 08b2508..0000000
--- a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/DefaultJDBCLockTest.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import static org.junit.Assert.assertEquals;
-
-import java.sql.Connection;
-import java.util.Properties;
-
-import org.junit.Before;
-import org.junit.Test;
-
-
-public class DefaultJDBCLockTest extends BaseJDBCLockTest {
-    
-    @Before
-    @Override
-    public void setUp() throws Exception {
-        password = "root";
-        driver = "org.apache.derby.jdbc.ClientDriver";
-        url = "jdbc:derby://127.0.0.1:1527/test";
-        
-        super.setUp();
-    }
-    
-    DefaultJDBCLock createLock(Properties props) {
-        return new DefaultJDBCLock(props) {
-            @Override
-            Connection doCreateConnection(String driver, String url, String username, String password) {
-                assertEquals(this.driver, driver);
-                assertEquals(this.url + ";create=true", url);
-                assertEquals(this.user, username);
-                assertEquals(this.password, password);
-                return connection;
-            }
-
-            @Override
-            long getCurrentTimeMillis() {
-                return 1;
-            }
-        };
-    }
-    
-    @Test
-    public void createConnectionShouldConcatinateOptionsCorrect() {
-        props.put("karaf.lock.jdbc.url", this.url + ";dataEncryption=false");
-        
-        lock = new DefaultJDBCLock(props) {
-            @Override
-            Connection doCreateConnection(String driver, String url, String username, String password) {
-                assertEquals(this.driver, driver);
-                assertEquals(this.url + ";create=true", url);
-                assertEquals(this.user, username);
-                assertEquals(this.password, password);
-                return connection;
-            }
-
-            @Override
-            long getCurrentTimeMillis() {
-                return 1;
-            }
-        };
-    }
-}
diff --git a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/DerbyJDBCLockIntegrationTest.java b/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/DerbyJDBCLockIntegrationTest.java
deleted file mode 100644
index 61a0429..0000000
--- a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/DerbyJDBCLockIntegrationTest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import static org.junit.Assert.assertTrue;
-
-import java.util.Properties;
-
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-
-
-@Ignore
-public class DerbyJDBCLockIntegrationTest extends BaseJDBCLockIntegrationTest {
-
-    @Before
-    @Override
-    public void setUp() throws Exception {
-        password = "root";
-        driver = "org.apache.derby.jdbc.ClientDriver";
-        url = "jdbc:derby://127.0.0.1:1527/test";
-        
-        super.setUp();
-    }
-    
-    @Override
-    DefaultJDBCLock createLock(Properties props) {
-        return new DerbyJDBCLock(props);
-    }
-    
-    @Test
-    public void initShouldCreateTheDatabaseIfItNotExists() throws Exception {
-        String database = "test" + System.currentTimeMillis();
-        url = "jdbc:derby://127.0.0.1:1527/" + database;
-        props.put("karaf.lock.jdbc.url", url);
-        lock = createLock(props);
-        lock.lock();
-        
-        assertTrue(lock.lockConnection.getMetaData().getURL().contains(database));
-    }
-}
diff --git a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/DerbyJDBCLockTest.java b/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/DerbyJDBCLockTest.java
deleted file mode 100644
index f041214..0000000
--- a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/DerbyJDBCLockTest.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import static org.junit.Assert.assertEquals;
-
-import java.sql.Connection;
-import java.util.Properties;
-
-import org.junit.Before;
-import org.junit.Test;
-
-
-public class DerbyJDBCLockTest extends BaseJDBCLockTest {
-    
-    @Before
-    @Override
-    public void setUp() throws Exception {
-        password = "root";
-        driver = "org.apache.derby.jdbc.ClientDriver";
-        url = "jdbc:derby://127.0.0.1:1527/test";
-        
-        super.setUp();
-    }
-    
-    DerbyJDBCLock createLock(Properties props) {
-        return new DerbyJDBCLock(props) {
-            @Override
-            Connection doCreateConnection(String driver, String url, String username, String password) {
-                assertEquals(this.driver, driver);
-                assertEquals(this.url + ";create=true", url);
-                assertEquals(this.user, username);
-                assertEquals(this.password, password);
-                return connection;
-            }
-
-            @Override
-            long getCurrentTimeMillis() {
-                return 1;
-            }
-        };
-    }
-    
-    @Test
-    public void createConnectionShouldConcatinateOptionsCorrect() {
-        props.put("karaf.lock.jdbc.url", this.url + ";dataEncryption=false");
-        
-        lock = new DerbyJDBCLock(props) {
-            @Override
-            Connection doCreateConnection(String driver, String url, String username, String password) {
-                assertEquals(this.driver, driver);
-                assertEquals(this.url + ";create=true", url);
-                assertEquals(this.user, username);
-                assertEquals(this.password, password);
-                return connection;
-            }
-
-            @Override
-            long getCurrentTimeMillis() {
-                return 1;
-            }
-        };
-    }
-}
diff --git a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/MainLockingTest.java b/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/MainLockingTest.java
deleted file mode 100644
index c79dbc9..0000000
--- a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/MainLockingTest.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import static org.ops4j.pax.swissbox.tinybundles.core.TinyBundles.withBnd;
-
-import java.io.File;
-
-import junit.framework.Assert;
-
-import org.junit.Test;
-import org.ops4j.pax.swissbox.tinybundles.core.TinyBundles;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-import org.osgi.framework.ServiceReference;
-import org.osgi.framework.launch.Framework;
-import org.osgi.service.startlevel.StartLevel;
-
-public class MainLockingTest {
-    
-    @Test
-    public void testLostMasterLock() throws Exception {
-        File basedir = new File(getClass().getClassLoader().getResource("foo").getPath()).getParentFile();
-        File home = new File(basedir, "test-karaf-home");
-        File data = new File(home, "data");
-
-        Utils.deleteDirectory(data);
-
-        String[] args = new String[0];
-        System.setProperty("karaf.home", home.toString());
-        System.setProperty("karaf.data", data.toString());
-        System.setProperty("karaf.framework.factory", "org.apache.felix.framework.FrameworkFactory");
-        
-        // enable locking
-        System.setProperty("karaf.lock","true");
-        System.setProperty("karaf.lock.delay","1000");
-        System.setProperty("karaf.lock.class","org.apache.karaf.main.MockLock");
-
-        Main main = new Main(args);
-        main.launch();
-        Thread.sleep(1000);
-        
-        Framework framework = main.getFramework();
-        String activatorName = TimeoutShutdownActivator.class.getName().replace('.', '/') + ".class";
-        Bundle bundle = framework.getBundleContext().installBundle("foo",
-                TinyBundles.newBundle()
-                    .set( Constants.BUNDLE_ACTIVATOR, TimeoutShutdownActivator.class.getName() )
-                    .add( activatorName, getClass().getClassLoader().getResourceAsStream( activatorName ) )
-                    .build( withBnd() )
-        );
-        bundle.start();       
-        
-        BundleContext ctx = framework.getBundleContext();
-        ServiceReference[] refs = ctx.getServiceReferences(StartLevel.class.getName(), null);
-        StartLevel sl = (StartLevel) ctx.getService(refs[0]);
-
-        MockLock lock = (MockLock) main.getLock();
-
-        Assert.assertEquals(100, sl.getStartLevel());       
-
-        // simulate losing a lock
-        lock.setIsAlive(false);
-        lock.setLock(false);
-        
-        // lets wait until the start level change is complete
-        lock.waitForLock();
-        Assert.assertEquals(1, sl.getStartLevel());
-
-        Thread.sleep(1000);
-        
-        // get lock back
-        lock.setIsAlive(true);
-        lock.setLock(true);
-
-        // wait for loop to recognize lock
-        lock.waitForLock();
-        
-        Thread.sleep(1000);
-        
-        // exit framework + lock loop
-        main.destroy();
-    }    
-}
diff --git a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/MainStartTest.java b/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/MainStartTest.java
deleted file mode 100644
index 6ccfef8..0000000
--- a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/MainStartTest.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import static org.ops4j.pax.swissbox.tinybundles.core.TinyBundles.withBnd;
-
-import java.io.File;
-import java.net.URI;
-
-import junit.framework.Assert;
-
-import org.junit.Ignore;
-import org.junit.Test;
-import org.ops4j.pax.swissbox.tinybundles.core.TinyBundles;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.Constants;
-import org.osgi.framework.launch.Framework;
-
-public class MainStartTest {
-
-	@Test
-    @Ignore("Unit test for KARAF-334 disabled for now")
-    public void testAutoStart() throws Exception {
-        File basedir = new File(getClass().getClassLoader().getResource("foo").getPath()).getParentFile();
-        File home = new File(basedir, "test-karaf-home");
-        File data = new File(home, "data");
-
-        Utils.deleteDirectory(data);
-
-		String[] args = new String[0];
-		String fileMVNbundle = new File(home, "bundles/pax-url-mvn.jar").toURI().toURL().toExternalForm();
-		String mvnUrl = "mvn:org.osgi/org.osgi.compendium/4.2.0";
-		System.setProperty("karaf.home", home.toString());
-		System.setProperty("karaf.data", data.toString());
-		System.setProperty("karaf.auto.start.1", "\""+fileMVNbundle+"|unused\"");
-		System.setProperty("karaf.auto.start.2", "\""+mvnUrl+"|unused\"");
-		System.setProperty("karaf.maven.convert", "false");
-
-		Main main = new Main(args);
-		main.launch();
-		Thread.sleep(1000);
-		Framework framework = main.getFramework();
-		Bundle[] bundles = framework.getBundleContext().getBundles();
-		Assert.assertEquals(3, bundles.length);
-		Assert.assertEquals(fileMVNbundle, bundles[1].getLocation());
-		Assert.assertEquals(mvnUrl, bundles[2].getLocation());
-		Assert.assertEquals(Bundle.ACTIVE, bundles[1].getState());
-		Assert.assertEquals(Bundle.ACTIVE, bundles[2].getState());
-		main.destroy();
-	}
-
-    @Test
-    public void testStopWithTimeout() throws Exception {
-        File basedir = new File(getClass().getClassLoader().getResource("foo").getPath()).getParentFile();
-        File home = new File(basedir, "test-karaf-home");
-        File data = new File(home, "data");
-
-        Utils.deleteDirectory(data);
-
-        String[] args = new String[0];
-        System.setProperty("karaf.home", home.toString());
-        System.setProperty("karaf.data", data.toString());
-        System.setProperty("karaf.framework.factory", "org.apache.felix.framework.FrameworkFactory");
-
-
-        Main main = new Main(args);
-        main.launch();
-        Thread.sleep(1000);
-        Framework framework = main.getFramework();
-        String activatorName = TimeoutShutdownActivator.class.getName().replace('.', '/') + ".class";
-        Bundle bundle = framework.getBundleContext().installBundle("foo",
-                TinyBundles.newBundle()
-                    .set( Constants.BUNDLE_ACTIVATOR, TimeoutShutdownActivator.class.getName() )
-                    .add( activatorName, getClass().getClassLoader().getResourceAsStream( activatorName ) )
-                    .build( withBnd() )
-        );
-        bundle.start();
-
-        long t0 = System.currentTimeMillis();
-        main.destroy();
-        long t1 = System.currentTimeMillis();
-//        System.err.println("Shutdown duration: " + (t1 - t0) + " ms");
-        Assert.assertTrue((t1 - t0) > TimeoutShutdownActivator.TIMEOUT / 2);
-    }
-}
diff --git a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/MockLock.java b/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/MockLock.java
deleted file mode 100644
index 9e67324..0000000
--- a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/MockLock.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.apache.karaf.main;
-
-import java.util.Properties;
-import java.util.logging.Logger;
-
-/*
- * 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.
- */
-public class MockLock implements Lock {
-
-    private boolean lock = true;
-    private boolean isAlive = true; 
-    private static final Logger LOG = Logger.getLogger(MockLock.class.getName());
-    private Object lockLock = new Object();
-    
-    public MockLock(Properties props) {
-    }
-    
-    public boolean lock() throws Exception {
-        synchronized (lockLock) {
-            LOG.fine("lock = " + lock);        
-            lockLock.notifyAll();
-        }
-        return lock;
-    }
-
-    public void release() throws Exception {
-        LOG.fine("release");
-    }
-
-    public boolean isAlive() throws Exception {
-        LOG.fine("isAlive = " + isAlive);
-        return isAlive;
-    }
-
-    public void setLock(boolean lock) {
-        this.lock = lock;
-    }
-
-    public void setIsAlive(boolean isAlive) {
-        this.isAlive = isAlive;
-    }
-    
-    public void waitForLock() throws InterruptedException {
-        synchronized (lockLock) {
-            lockLock.wait(1000 * 60 * 5);
-        }
-    }
-}
diff --git a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/MySQLJDBCLockIntegrationTest.java b/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/MySQLJDBCLockIntegrationTest.java
deleted file mode 100644
index db5409f..0000000
--- a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/MySQLJDBCLockIntegrationTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-
-import static org.junit.Assert.assertFalse;
-
-import java.sql.Connection;
-import java.util.Properties;
-
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-
-
-@Ignore
-public class MySQLJDBCLockIntegrationTest extends BaseJDBCLockIntegrationTest {
-
-    @Before
-    public void setUp() throws Exception {
-        driver = "com.mysql.jdbc.Driver";
-        url = "jdbc:mysql://127.0.0.1:3306/test";
-        
-        super.setUp();
-    }
-    
-    @Override
-    MySQLJDBCLock createLock(Properties props) {
-        return new MySQLJDBCLock(props);
-    }
-    
-    @Test
-    public void initShouldCreateTheDatabaseIfItNotExists() throws Exception {
-        String database = "test" + System.currentTimeMillis();
-        
-        try {
-            executeStatement("DROP DATABASE " + database);
-        } catch (Exception e) {
-            // expected if table dosn't exist
-        }
-        
-        url = "jdbc:mysql://127.0.0.1:3306/" + database;
-        props.put("karaf.lock.jdbc.url", url);
-        lock = createLock(props);
-        
-        
-        // should throw an exeption, if the database doesn't exists
-        Connection connection = getConnection("jdbc:mysql://127.0.0.1:3306/" + database, user, password);
-        assertFalse(connection.isClosed());
-        
-        executeStatement("DROP DATABASE " + database);
-        close(connection);
-    }
-}
diff --git a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/MySQLJDBCLockTest.java b/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/MySQLJDBCLockTest.java
deleted file mode 100644
index 021c82a..0000000
--- a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/MySQLJDBCLockTest.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import static org.junit.Assert.assertEquals;
-
-import java.sql.Connection;
-import java.util.Properties;
-
-import org.junit.Before;
-import org.junit.Test;
-
-
-public class MySQLJDBCLockTest extends BaseJDBCLockTest {
-    
-    @Before
-    @Override
-    public void setUp() throws Exception {
-        driver = "com.mysql.jdbc.Driver";
-        url = "jdbc:mysql://127.0.0.1:3306/test";
-        createTableStmtSuffix = " ENGINE=INNODB";
-        
-        super.setUp();
-    }
-    
-    MySQLJDBCLock createLock(Properties props) {
-        return new MySQLJDBCLock(props) {
-            @Override
-            Connection doCreateConnection(String driver, String url, String username, String password) {
-                assertEquals(this.driver, driver);
-                assertEquals(this.url + "?createDatabaseIfNotExist=true", url);
-                assertEquals(this.user, username);
-                assertEquals(this.password, password);
-                return connection;
-            }
-
-            @Override
-            long getCurrentTimeMillis() {
-                return 1;
-            }
-        };
-    }
-    
-    @Test
-    public void createConnectionShouldConcatinateOptionsCorrect() {
-        props.put("karaf.lock.jdbc.url", this.url + "?connectTimeout=10000");
-        
-        lock = new MySQLJDBCLock(props) {
-            @Override
-            Connection doCreateConnection(String driver, String url, String username, String password) {
-                assertEquals(this.driver, driver);
-                assertEquals(this.url + "&createDatabaseIfNotExist=true", url);
-                assertEquals(this.user, username);
-                assertEquals(this.password, password);
-                return connection;
-            }
-
-            @Override
-            long getCurrentTimeMillis() {
-                return 1;
-            }
-        };
-    }
-}
diff --git a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/OracleJDBCLockIntegrationTest.java b/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/OracleJDBCLockIntegrationTest.java
deleted file mode 100644
index cd2c55b..0000000
--- a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/OracleJDBCLockIntegrationTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.Properties;
-
-import org.junit.Before;
-import org.junit.Ignore;
-
-
-@Ignore
-public class OracleJDBCLockIntegrationTest extends BaseJDBCLockIntegrationTest {
-    
-    @Before
-    @Override
-    public void setUp() throws Exception {
-        password = "root";
-        driver = "oracle.jdbc.driver.OracleDriver";
-        url = "jdbc:oracle:thin:@172.16.16.133:1521:XE";
-        momentDatatype = "NuMBER(20)";
-        
-        super.setUp();
-    }
-
-    OracleJDBCLock createLock(Properties props) {
-        return new OracleJDBCLock(props);
-    }
-    
-    @Override
-    Connection lock(String table, String node) throws ClassNotFoundException, SQLException {
-        Connection connection = null;
-        Statement statement = null;
-        
-        try {
-            connection = getConnection(url, user, password);
-            statement = connection.createStatement();
-            statement.execute("SELECT * FROM " + table + " FOR UPDATE");
-        } finally {
-            close(statement);
-            // connection must not be closed!
-        }
-        
-        return connection;
-    }
-}
diff --git a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/OracleJDBCLockTest.java b/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/OracleJDBCLockTest.java
deleted file mode 100644
index fa27edf..0000000
--- a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/OracleJDBCLockTest.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.reset;
-import static org.easymock.EasyMock.verify;
-import static org.junit.Assert.*;
-
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.Properties;
-
-import org.junit.Before;
-import org.junit.Test;
-
-
-public class OracleJDBCLockTest extends BaseJDBCLockTest {
-    
-    @Before
-    @Override
-    public void setUp() throws Exception {
-        password = "root";
-        driver = "oracle.jdbc.driver.OracleDriver";
-        url = "jdbc:oracle:thin:@172.16.16.132:1521:XE";
-        momentDatatype = "NUMBER(20)";
-        
-        super.setUp();
-    }
-    
-    OracleJDBCLock createLock(Properties props) {
-        return new OracleJDBCLock(props) {
-            @Override
-            Connection doCreateConnection(String driver, String url, String username, String password) {
-                assertEquals(this.driver, driver);
-                assertEquals(this.url, url);
-                assertEquals(this.user, username);
-                assertEquals(this.password, password);
-                return connection;
-            }
-
-            @Override
-            long getCurrentTimeMillis() {
-                return 1;
-            }
-        };
-    }
-    
-    @Test
-    @Override
-    public void lockShouldReturnTrueItTheTableIsNotLocked() throws Exception {
-        initShouldNotCreateTheSchemaIfItAlreadyExists();
-        reset(connection, metaData, statement, preparedStatement, resultSet);
-
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("SELECT * FROM " + tableName + " FOR UPDATE")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(10);
-        expect(preparedStatement.execute()).andReturn(true);
-        preparedStatement.close();
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("SELECT COUNT(*) FROM " + tableName)).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(10);
-        expect(preparedStatement.executeQuery()).andReturn(resultSet);
-        expect(resultSet.next()).andReturn(Boolean.TRUE);
-        expect(resultSet.getInt(1)).andReturn(1);
-        preparedStatement.close();
-        
-        replay(connection, metaData, statement, preparedStatement, resultSet);
-        
-        boolean lockAquired = lock.lock();
-        
-        verify(connection, metaData, statement, preparedStatement, resultSet);
-        assertTrue(lockAquired);
-    }
-    
-    @Test
-    @Override
-    public void lockShouldReturnFalseIfAnotherRowIsLocked() throws Exception {
-        initShouldNotCreateTheSchemaIfItAlreadyExists();
-        reset(connection, metaData, statement, preparedStatement, resultSet);
-        
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("SELECT * FROM " + tableName + " FOR UPDATE")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(10);
-        expect(preparedStatement.execute()).andThrow(new SQLException());
-        preparedStatement.close();
-        
-        replay(connection, metaData, statement, preparedStatement, resultSet);
-        
-        boolean lockAquired = lock.lock();
-        
-        verify(connection, metaData, statement, preparedStatement, resultSet);
-        assertFalse(lockAquired);
-    }
-    
-    @Test
-    @Override
-    public void lockShouldReturnFalseIfTheRowIsAlreadyLocked() throws Exception {
-        initShouldNotCreateTheSchemaIfItAlreadyExists();
-        reset(connection, metaData, statement, preparedStatement, resultSet);
-        
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("SELECT * FROM " + tableName + " FOR UPDATE")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(10);
-        expect(preparedStatement.execute()).andThrow(new SQLException());
-        preparedStatement.close();
-        
-        replay(connection, metaData, statement, preparedStatement, resultSet);
-        
-        boolean lockAquired = lock.lock();
-        
-        verify(connection, metaData, statement, preparedStatement, resultSet);
-        assertFalse(lockAquired);
-    }
-    
-    @Test
-    public void isAliveShouldReturnTrueIfItHoldsTheLock() throws Exception {
-        initShouldNotCreateTheSchemaIfItAlreadyExists();
-        reset(connection, metaData, statement, preparedStatement, resultSet);
-        
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("SELECT * FROM " + tableName + " FOR UPDATE")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(10);
-        expect(preparedStatement.execute()).andReturn(true);
-        preparedStatement.close();
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("SELECT COUNT(*) FROM " + tableName)).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(10);
-        expect(preparedStatement.executeQuery()).andReturn(resultSet);
-        expect(resultSet.next()).andReturn(Boolean.TRUE);
-        expect(resultSet.getInt(1)).andReturn(1);
-        preparedStatement.close();
-        
-        replay(connection, metaData, statement, preparedStatement, resultSet);
-        
-        boolean alive = lock.isAlive();
-        
-        verify(connection, metaData, statement, preparedStatement, resultSet);
-        assertTrue(alive);
-    }
-    
-    @Test
-    public void isAliveShouldReturnFalseIfItNotHoldsTheLock() throws Exception {
-        initShouldNotCreateTheSchemaIfItAlreadyExists();
-        reset(connection, metaData, statement, preparedStatement, resultSet);
-        
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("SELECT * FROM " + tableName + " FOR UPDATE")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(10);
-        expect(preparedStatement.execute()).andThrow(new SQLException());
-        preparedStatement.close();
-        
-        replay(connection, metaData, statement, preparedStatement, resultSet);
-        
-        boolean alive = lock.isAlive();
-        
-        verify(connection, metaData, statement, preparedStatement, resultSet);
-        assertFalse(alive);
-    }
-    
-    @Test
-    public void lockShouldReturnFalseIfTableIsEmpty() throws Exception {
-        initShouldNotCreateTheSchemaIfItAlreadyExists();
-        reset(connection, metaData, statement, preparedStatement, resultSet);
-        
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("SELECT * FROM " + tableName + " FOR UPDATE")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(10);
-        expect(preparedStatement.execute()).andReturn(true);
-        preparedStatement.close();
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("SELECT COUNT(*) FROM " + tableName)).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(10);
-        expect(preparedStatement.executeQuery()).andReturn(resultSet);
-        expect(resultSet.next()).andReturn(Boolean.TRUE);
-        expect(resultSet.getInt(1)).andReturn(0);
-        preparedStatement.close();
-        
-        replay(connection, metaData, statement, preparedStatement, resultSet);
-        
-        boolean lockAquired = lock.lock();
-        
-        verify(connection, metaData, statement, preparedStatement, resultSet);
-        assertFalse(lockAquired);
-    }
-}
diff --git a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/PostgreSQLJDBCLockIntegrationTest.java b/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/PostgreSQLJDBCLockIntegrationTest.java
deleted file mode 100644
index c374e3e..0000000
--- a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/PostgreSQLJDBCLockIntegrationTest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-
-import java.util.Properties;
-
-import static org.junit.Assert.assertTrue;
-
-
-@Ignore
-public class PostgreSQLJDBCLockIntegrationTest extends BaseJDBCLockIntegrationTest {
-
-    @Before
-    @Override
-    public void setUp() throws Exception {
-        password = "secret";
-        driver = "org.postgresql.Driver";
-        url = "jdbc:postgresql://127.0.0.1:5432/test";
-        
-        super.setUp();
-    }
-    
-    @Override
-    PostgreSQLJDBCLock createLock(Properties props) {
-        return new PostgreSQLJDBCLock(props);
-    }
-    
-    @Test
-    public void initShouldCreateTheDatabaseIfItNotExists() throws Exception {
-        String database = "test" + System.currentTimeMillis();
-        url = "jdbc:postgresql://127.0.0.1:5432/" + database;
-        props.put("karaf.lock.jdbc.url", url);
-        lock = createLock(props);
-        lock.lock();
-        
-        assertTrue(lock.lockConnection.getMetaData().getURL().contains(database));
-    }
-}
diff --git a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/PostgreSQLJDBCLockTest.java b/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/PostgreSQLJDBCLockTest.java
deleted file mode 100644
index 7f72f60..0000000
--- a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/PostgreSQLJDBCLockTest.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.Properties;
-
-import static org.easymock.EasyMock.*;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-
-public class PostgreSQLJDBCLockTest extends BaseJDBCLockTest {
-    
-    @Before
-    @Override
-    public void setUp() throws Exception {
-        password = "secret";
-        driver = "org.postgresql.Driver";
-        url = "jdbc:postgresql://127.0.0.1:5432/test";
-        
-        super.setUp();
-    }
-    
-    DefaultJDBCLock createLock(Properties props) {
-        return new PostgreSQLJDBCLock(props) {
-            @Override
-            Connection doCreateConnection(String driver, String url, String username, String password) {
-                assertEquals(this.driver, driver);
-                assertEquals(this.url , url);
-                assertEquals(this.user, username);
-                assertEquals(this.password, password);
-                return connection;
-            }
-
-            @Override
-            long getCurrentTimeMillis() {
-                return 1;
-            }
-        };
-    }
-    
-    @Test
-    public void createConnectionShouldConcatinateOptionsCorrect() {
-        props.put("karaf.lock.jdbc.url", this.url + ";dataEncryption=false");
-        
-        lock = new PostgreSQLJDBCLock(props) {
-            @Override
-            Connection doCreateConnection(String driver, String url, String username, String password) {
-                assertEquals(this.driver, driver);
-                assertEquals(this.url, url);
-                assertEquals(this.user, username);
-                assertEquals(this.password, password);
-                return connection;
-            }
-
-            @Override
-            long getCurrentTimeMillis() {
-                return 1;
-            }
-        };
-    }
-
-    @Test
-    @Override
-    public void lockShouldReturnTrueItTheTableIsNotLocked() throws Exception {
-        initShouldNotCreateTheSchemaIfItAlreadyExists();
-        reset(connection, metaData, statement, preparedStatement, resultSet);
-
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("SELECT * FROM " + tableName + " FOR UPDATE")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(0);
-        expect(preparedStatement.execute()).andReturn(true);
-        preparedStatement.close();
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("UPDATE " + tableName + " SET MOMENT = 1")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(0);
-        expect(preparedStatement.executeUpdate()).andReturn(1);
-        preparedStatement.close();
-
-        replay(connection, metaData, statement, preparedStatement, resultSet);
-
-        boolean lockAquired = lock.lock();
-
-        verify(connection, metaData, statement, preparedStatement, resultSet);
-        assertTrue(lockAquired);
-    }
-
-    @Test
-    @Override
-    public void lockShouldReturnFalseIfAnotherRowIsLocked() throws Exception {
-        initShouldNotCreateTheSchemaIfItAlreadyExists();
-        reset(connection, metaData, statement, preparedStatement, resultSet);
-
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("SELECT * FROM " + tableName + " FOR UPDATE")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(0);
-        expect(preparedStatement.execute()).andReturn(true);
-        preparedStatement.close();
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("UPDATE " + tableName + " SET MOMENT = 1")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(0);
-        expect(preparedStatement.executeUpdate()).andThrow(new SQLException());
-        preparedStatement.close();
-
-        replay(connection, metaData, statement, preparedStatement, resultSet);
-
-        boolean lockAquired = lock.lock();
-
-        verify(connection, metaData, statement, preparedStatement, resultSet);
-        assertFalse(lockAquired);
-    }
-
-    @Test
-    @Override
-    public void lockShouldReturnFalseIfTheRowIsAlreadyLocked() throws Exception {
-        initShouldNotCreateTheSchemaIfItAlreadyExists();
-        reset(connection, metaData, statement, preparedStatement, resultSet);
-
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("SELECT * FROM " + tableName + " FOR UPDATE")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(0);
-        expect(preparedStatement.execute()).andReturn(true);
-        preparedStatement.close();
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("UPDATE " + tableName + " SET MOMENT = 1")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(0);
-        expect(preparedStatement.executeUpdate()).andThrow(new SQLException());
-        preparedStatement.close();
-
-        replay(connection, metaData, statement, preparedStatement, resultSet);
-
-        boolean lockAquired = lock.lock();
-
-        verify(connection, metaData, statement, preparedStatement, resultSet);
-        assertFalse(lockAquired);
-    }
-
-    @Test
-    @Override
-    public void lockShouldReturnFalseIfTableIsEmpty() throws Exception {
-        initShouldNotCreateTheSchemaIfItAlreadyExists();
-        reset(connection, metaData, statement, preparedStatement, resultSet);
-
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("SELECT * FROM " + tableName + " FOR UPDATE")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(0);
-        expect(preparedStatement.execute()).andReturn(true);
-        preparedStatement.close();
-        expect(connection.isClosed()).andReturn(false);
-        expect(connection.prepareStatement("UPDATE " + tableName + " SET MOMENT = 1")).andReturn(preparedStatement);
-        preparedStatement.setQueryTimeout(0);
-        expect(preparedStatement.executeUpdate()).andReturn(0);
-        preparedStatement.close();
-
-        replay(connection, metaData, statement, preparedStatement, resultSet);
-
-        boolean lockAquired = lock.lock();
-
-        verify(connection, metaData, statement, preparedStatement, resultSet);
-        assertFalse(lockAquired);
-    }
-}
diff --git a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/StatementsTest.java b/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/StatementsTest.java
deleted file mode 100644
index b03e1d3..0000000
--- a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/StatementsTest.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import static org.junit.Assert.*;
-
-import org.junit.Before;
-import org.junit.Test;
-
-public class StatementsTest {
-    
-    private static final String DEFAULT_CREATE_TABLE_STMT = "CREATE TABLE KARAF_LOCK (MOMENT BIGINT, NODE VARCHAR(20))";
-    private static final String DEFAULT_POPULATE_TABLE_STMT = "INSERT INTO KARAF_LOCK (MOMENT, NODE) VALUES (1, 'karaf')";
-    
-    private Statements statements;
-    
-    @Before
-    public void setUp() {
-        statements = new Statements();
-    }
-
-    @Test
-    public void getDefaultLockCreateSchemaStatements() {
-        assertArrayEquals(new String[] {DEFAULT_CREATE_TABLE_STMT, DEFAULT_POPULATE_TABLE_STMT}, statements.getLockCreateSchemaStatements(1));
-    }
-    
-    @Test
-    public void getCustomLockCreateSchemaStatements() {
-        customizeStatements();
-        String[] expectedCreateSchemaStmts = new String[] {
-                "CREATE TABLE test.LOCK_TABLE (MOMENT NUMBER(20), NODE VARCHAR2(30))", 
-                "INSERT INTO test.LOCK_TABLE (MOMENT, NODE) VALUES (2, 'node_1')"};
-        
-        assertArrayEquals(expectedCreateSchemaStmts, statements.getLockCreateSchemaStatements(2));
-    }
-
-    @Test
-    public void getDefaultLockCreateStatement() {
-        assertEquals("SELECT * FROM KARAF_LOCK FOR UPDATE", statements.getLockCreateStatement());
-    }
-    
-    @Test
-    public void getCustomLockCreateStatement() {
-        customizeStatements();
-        
-        assertEquals("SELECT * FROM test.LOCK_TABLE FOR UPDATE", statements.getLockCreateStatement());
-    }
-
-    @Test
-    public void getDefaultLockUpdateStatement() {
-        assertEquals("UPDATE KARAF_LOCK SET MOMENT = 1", statements.getLockUpdateStatement(1));
-    }
-    
-    @Test
-    public void getCustomLockUpdateStatement() {
-        customizeStatements();
-        
-        assertEquals("UPDATE test.LOCK_TABLE SET MOMENT = 2", statements.getLockUpdateStatement(2));
-    }
-    
-    private void customizeStatements() {
-        statements.setTablePrefix("test.");
-        statements.setTableName("LOCK_TABLE");
-        statements.setNodeName("node_1");
-        statements.setMomentColumnDataType("NUMBER(20)");
-        statements.setNodeColumnDataType("VARCHAR2(30)");
-    }
-}
diff --git a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/StringMapTest.java b/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/StringMapTest.java
deleted file mode 100644
index f3c2933..0000000
--- a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/StringMapTest.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import junit.framework.TestCase;
-
-/**
- * Test cased for {@link org.apache.karaf.main.StringMap}
- */
-public class StringMapTest extends TestCase {
-
-    public void testPut() throws Exception {
-        StringMap sm = new StringMap();
-        Object key = new String("key");
-        Object value = new String("value");
-        sm.put(key, value);
-        Object result = sm.get(key);
-        assertFalse(result == null);
-        assertTrue(result.equals(value));
-    }
-
-}
diff --git a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/TimeoutShutdownActivator.java b/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/TimeoutShutdownActivator.java
deleted file mode 100644
index 32d73c2..0000000
--- a/karaf-2.3.x/main/src/test/java/org/apache/karaf/main/TimeoutShutdownActivator.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.main;
-
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-
-public class TimeoutShutdownActivator implements BundleActivator {
-
-    public static int TIMEOUT = 10000;
-
-    public void start(BundleContext context) throws Exception {
-    }
-
-    public void stop(BundleContext context) throws Exception {
-        Thread.sleep(TIMEOUT);
-    }
-}
diff --git a/karaf-2.3.x/main/src/test/resources/foo b/karaf-2.3.x/main/src/test/resources/foo
deleted file mode 100644
index e69de29..0000000
--- a/karaf-2.3.x/main/src/test/resources/foo
+++ /dev/null
diff --git a/karaf-2.3.x/main/src/test/resources/test-karaf-home/bundles/pax-url-mvn.jar b/karaf-2.3.x/main/src/test/resources/test-karaf-home/bundles/pax-url-mvn.jar
deleted file mode 100755
index 54d77bd..0000000
--- a/karaf-2.3.x/main/src/test/resources/test-karaf-home/bundles/pax-url-mvn.jar
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/main/src/test/resources/test-karaf-home/etc/config.properties b/karaf-2.3.x/main/src/test/resources/test-karaf-home/etc/config.properties
deleted file mode 100755
index 4089252..0000000
--- a/karaf-2.3.x/main/src/test/resources/test-karaf-home/etc/config.properties
+++ /dev/null
@@ -1,43 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-#
-# Properties file inclusions (as a space separated list of relative paths)
-# Included files will override the values specified in this file
-#
-${includes} =
-
-#
-# Framework selection properties
-#
-karaf.framework=felix
-
-#
-# Location of the OSGi frameworks
-#
-karaf.framework.felix=${karaf.default.repository}/org/apache/felix/org.apache.felix.framework/3.0.6/org.apache.felix.framework-3.0.6.jar
-
-# To enable the use of the startup.properties file to control the start level:
-karaf.auto.start=
-
-org.osgi.framework.startlevel.beginning=100
-karaf.startlevel.bundle=60
-karaf.name=root
-karaf.default.repository=system
-
diff --git a/karaf-2.3.x/main/src/test/resources/test-karaf-home/etc/startup.properties b/karaf-2.3.x/main/src/test/resources/test-karaf-home/etc/startup.properties
deleted file mode 100644
index f894430..0000000
--- a/karaf-2.3.x/main/src/test/resources/test-karaf-home/etc/startup.properties
+++ /dev/null
@@ -1,25 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-# This file allows you to control the start level of each bundle.
-#
-
-#
-# Startup core services like logging
-#
diff --git a/karaf-2.3.x/main/src/test/resources/test-karaf-home/system/org/apache/felix/org.apache.felix.framework/3.0.6/org.apache.felix.framework-3.0.6.jar b/karaf-2.3.x/main/src/test/resources/test-karaf-home/system/org/apache/felix/org.apache.felix.framework/3.0.6/org.apache.felix.framework-3.0.6.jar
deleted file mode 100755
index 41c3821..0000000
--- a/karaf-2.3.x/main/src/test/resources/test-karaf-home/system/org/apache/felix/org.apache.felix.framework/3.0.6/org.apache.felix.framework-3.0.6.jar
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/management/mbeans/bundles/NOTICE b/karaf-2.3.x/management/mbeans/bundles/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/management/mbeans/bundles/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/management/mbeans/bundles/pom.xml b/karaf-2.3.x/management/mbeans/bundles/pom.xml
deleted file mode 100644
index 50fb6b2..0000000
--- a/karaf-2.3.x/management/mbeans/bundles/pom.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.management.mbeans</groupId>
-        <artifactId>mbeans</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.management.mbeans.bundles</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Management :: MBeans :: Bundles</name>
-    <description>The Bundles MBean bundle provides a JMX MBean to manipulate OSGi bundles.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../../etc/appended-resources/</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                            org.apache.karaf.management.mbeans.bundles;version=${project.version}
-                        </Export-Package>
-                        <Import-Package>
-                            javax.management,
-                            javax.management.loading,
-                            org.apache.karaf.management;version=${project.version},
-                            *
-                        </Import-Package>
-                        <Private-Package>
-                            org.apache.karaf.management.mbeans.bundles.internal,
-                            !*
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/karaf-2.3.x/management/mbeans/bundles/src/main/java/org/apache/karaf/management/mbeans/bundles/BundlesMBean.java b/karaf-2.3.x/management/mbeans/bundles/src/main/java/org/apache/karaf/management/mbeans/bundles/BundlesMBean.java
deleted file mode 100644
index b31e27c..0000000
--- a/karaf-2.3.x/management/mbeans/bundles/src/main/java/org/apache/karaf/management/mbeans/bundles/BundlesMBean.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.management.mbeans.bundles;
-
-import javax.management.openmbean.TabularData;
-
-/**
- * Bundles MBean.
- */
-public interface BundlesMBean {
-
-    /**
-     * List the bundles.
-     *
-     * @return the list of bundles.
-     * @throws Exception
-     */
-    TabularData getBundles() throws Exception;
-
-    /**
-     * @deprecated use getBundles() instead.
-     */
-    TabularData list() throws Exception;
-
-    /**
-     * Get the start level of a given bundle.
-     *
-     * @param bundleId the bundle ID.
-     * @return the start level of the bundle.
-     * @throws Exception
-     */
-    int getStartLevel(String bundleId) throws Exception;
-
-    /**
-     * Set the start level of a given bundle.
-     *
-     * @param bundleId the bundle ID.
-     * @param bundleStartLevel the new start level of the bundle.
-     * @throws Exception
-     */
-    void setStartLevel(String bundleId, int bundleStartLevel) throws Exception;
-
-    /**
-     * Refresh all bundles.
-     *
-     * @throws Exception
-     */
-    void refresh() throws Exception;
-
-    /**
-     * Refresh a given bundle.
-     *
-     * @param bundleId the bundle ID.
-     * @throws Exception
-     */
-    void refresh(String bundleId) throws Exception;
-
-    /**
-     * Update a given bundle from its location.
-     *
-     * @param bundleId the bundle ID.
-     * @throws Exception
-     */
-    void update(String bundleId) throws Exception;
-
-    /**
-     * Update a given bundle from a given location.
-     *
-     * @param bundleId the bundle ID.
-     * @param location the target location.
-     * @throws Exception
-     */
-    void update(String bundleId, String location) throws Exception;
-
-    /**
-     * Resolve the bundle.
-     * @throws Exception
-     */
-    void resolve() throws Exception;
-
-    /**
-     * Resolve a given bundle.
-     *
-     * @param bundleId the bundle ID.
-     * @throws Exception
-     */
-    void resolve(String bundleId) throws Exception;
-
-    /**
-     * Restart the given bundle.
-     *
-     * @param bundleId the bundle ID.
-     * @throws Exception
-     */
-    void restart(String bundleId) throws Exception;
-
-    /**
-     * Install a bundle at a given URL.
-     *
-     * @param url the bundle URL.
-     * @return the bundle ID.
-     * @throws Exception
-     */
-    long install(String url) throws Exception;
-
-    /**
-     * Install a bundle at a given URL and start the bundle.
-     *
-     * @param url the bundle URL.
-     * @param start true to start the bundle, false else.
-     * @return the bundle ID.
-     * @throws Exception
-     */
-    long install(String url, boolean start) throws Exception;
-
-    /**
-     * Start a given bundle.
-     *
-     * @param bundleId the bundle ID.
-     * @throws Exception
-     */
-    void start(String bundleId) throws Exception;
-
-    /**
-     * Stop a given bundle.
-     *
-     * @param bundleId the bundle ID.
-     * @throws Exception
-     */
-    void stop(String bundleId) throws Exception;
-
-    /**
-     * Uninstall a given bundle.
-     *
-     * @param bundleId the bundle ID.
-     * @throws Exception
-     */
-    void uninstall(String bundleId) throws Exception;
-
-}
diff --git a/karaf-2.3.x/management/mbeans/bundles/src/main/java/org/apache/karaf/management/mbeans/bundles/internal/BundlesMBeanImpl.java b/karaf-2.3.x/management/mbeans/bundles/src/main/java/org/apache/karaf/management/mbeans/bundles/internal/BundlesMBeanImpl.java
deleted file mode 100644
index d60bafd..0000000
--- a/karaf-2.3.x/management/mbeans/bundles/src/main/java/org/apache/karaf/management/mbeans/bundles/internal/BundlesMBeanImpl.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.management.mbeans.bundles.internal;
-
-import org.apache.karaf.management.mbeans.bundles.BundlesMBean;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.packageadmin.PackageAdmin;
-import org.osgi.service.startlevel.StartLevel;
-
-import javax.management.NotCompliantMBeanException;
-import javax.management.StandardMBean;
-import javax.management.openmbean.*;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.List;
-
-/**
- * Bundles MBean implementation.
- */
-public class BundlesMBeanImpl extends StandardMBean implements BundlesMBean {
-
-    private BundleContext bundleContext;
-
-    public BundlesMBeanImpl() throws NotCompliantMBeanException {
-        super(BundlesMBean.class);
-    }
-
-    public TabularData getBundles() throws Exception {
-        ServiceReference startLevelReference = bundleContext.getServiceReference(StartLevel.class.getName());
-        StartLevel startLevel = null;
-        if (startLevelReference != null) {
-            startLevel = (StartLevel) bundleContext.getService(startLevelReference);
-        }
-
-        CompositeType bundleType = new CompositeType("Bundle", "OSGi Bundle",
-                new String[]{"ID", "Name", "Version", "Start Level", "State"},
-                new String[]{"ID of the Bundle", "Name of the Bundle", "Version of the Bundle", "Start Level of the Bundle", "Current State of the Bundle"},
-                new OpenType[]{SimpleType.LONG, SimpleType.STRING, SimpleType.STRING, SimpleType.INTEGER, SimpleType.STRING});
-        TabularType tableType = new TabularType("Bundles", "Tables of all Bundles", bundleType, new String[]{"ID"});
-        TabularData table = new TabularDataSupport(tableType);
-
-        Bundle[] bundles = bundleContext.getBundles();
-
-        for (int i = 0; i < bundles.length; i++) {
-            try {
-                int bundleStartLevel = 1;
-                if (startLevel != null) {
-                    bundleStartLevel = startLevel.getBundleStartLevel(bundles[i]);
-                }
-                int bundleState = bundles[i].getState();
-                String bundleStateString;
-                if (bundleState == Bundle.ACTIVE)
-                    bundleStateString = "ACTIVE";
-                else if (bundleState == Bundle.INSTALLED)
-                    bundleStateString = "INSTALLED";
-                else if (bundleState == Bundle.RESOLVED)
-                    bundleStateString = "RESOLVED";
-                else if (bundleState == Bundle.STARTING)
-                    bundleStateString = "STARTING";
-                else if (bundleState == Bundle.STOPPING)
-                    bundleStateString = "STOPPING";
-                else bundleStateString = "UNKNOWN";
-                CompositeData data = new CompositeDataSupport(bundleType,
-                        new String[]{"ID", "Name", "Version", "Start Level", "State"},
-                        new Object[]{bundles[i].getBundleId(), bundles[i].getSymbolicName(), bundles[i].getVersion().toString(), bundleStartLevel, bundleStateString});
-                table.put(data);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-        bundleContext.ungetService(startLevelReference);
-
-        return table;
-    }
-
-    /**
-     * @deprecated use getBundles() instead.
-     */
-    public TabularData list() throws Exception {
-        return getBundles();
-    }
-
-    public int getStartLevel(String bundleId) throws Exception {
-        ServiceReference startLevelReference = bundleContext.getServiceReference(StartLevel.class.getName());
-        if (startLevelReference == null) {
-            throw new IllegalStateException("StartLevel service is not available");
-        }
-        StartLevel startLevel = (StartLevel) bundleContext.getService(startLevelReference);
-        if (startLevel == null) {
-            throw new IllegalStateException("StartLevel service is not available");
-        }
-
-        BundlesSelector selector = new BundlesSelector(bundleContext);
-        List<Bundle> bundles = selector.selectBundles(bundleId);
-
-        if (bundles.size() != 1) {
-            throw new IllegalArgumentException("Provided bundle Id doesn't return any bundle or more than one bundle selected");
-        }
-
-        int bundleStartLevel = startLevel.getBundleStartLevel(bundles.get(0));
-        bundleContext.ungetService(startLevelReference);
-        return bundleStartLevel;
-    }
-
-    public void setStartLevel(String bundleId, int bundleStartLevel) throws Exception {
-        ServiceReference startLevelReference = bundleContext.getServiceReference(StartLevel.class.getName());
-        if (startLevelReference == null) {
-            throw new IllegalStateException("StartLevel service is not available");
-        }
-        StartLevel startLevel = (StartLevel) bundleContext.getService(startLevelReference);
-        if (startLevel == null) {
-            throw new IllegalStateException("StartLevel service is not available");
-        }
-
-        BundlesSelector selector = new BundlesSelector(bundleContext);
-        List<Bundle> bundles = selector.selectBundles(bundleId);
-
-        for (Bundle bundle : bundles) {
-            startLevel.setBundleStartLevel(bundle, bundleStartLevel);
-        }
-
-        bundleContext.ungetService(startLevelReference);
-    }
-
-    public void refresh() throws Exception {
-        ServiceReference packageAdminReference = getBundleContext().getServiceReference(PackageAdmin.class.getName());
-        if (packageAdminReference == null) {
-            throw new IllegalStateException("PackageAdmin service is not available");
-        }
-        PackageAdmin packageAdmin = (PackageAdmin) bundleContext.getService(packageAdminReference);
-        if (packageAdmin == null) {
-            throw new IllegalStateException("PackageAdmin service is not available");
-        }
-        packageAdmin.refreshPackages(null);
-        getBundleContext().ungetService(packageAdminReference);
-    }
-
-    public void refresh(String bundleId) throws Exception {
-        ServiceReference packageAdminReference = getBundleContext().getServiceReference(PackageAdmin.class.getName());
-        if (packageAdminReference == null) {
-            throw new IllegalStateException("PackageAdmin service is not available");
-        }
-        PackageAdmin packageAdmin = (PackageAdmin) bundleContext.getService(packageAdminReference);
-        if (packageAdmin == null) {
-            throw new IllegalStateException("PackageAdmin service is not available");
-        }
-
-        BundlesSelector selector = new BundlesSelector(bundleContext);
-        List<Bundle> bundles = selector.selectBundles(bundleId);
-
-        Bundle[] bundlesArray = new Bundle[bundles.size()];
-        packageAdmin.refreshPackages(bundles.toArray(bundlesArray));
-
-        getBundleContext().ungetService(packageAdminReference);
-    }
-
-    public void update(String bundleId) throws Exception {
-        update(bundleId, null);
-    }
-
-    public void update(String bundleId, String location) throws Exception {
-        BundlesSelector selector = new BundlesSelector(bundleContext);
-        List<Bundle> bundles = selector.selectBundles(bundleId);
-
-        if (location == null) {
-            for (Bundle bundle : bundles) {
-                bundle.update();
-            }
-            return;
-        }
-
-        if (bundles.size() != 1) {
-            throw new IllegalArgumentException("Provided bundle Id doesn't return any bundle or more than one bundle selected");
-        }
-
-        InputStream is = new URL(location).openStream();
-        bundles.get(0).update(is);
-    }
-
-    public void resolve() throws Exception {
-        ServiceReference packageAdminReference = getBundleContext().getServiceReference(PackageAdmin.class.getName());
-        if (packageAdminReference == null) {
-            throw new IllegalStateException("PackageAdmin service is not available");
-        }
-        PackageAdmin packageAdmin = (PackageAdmin) bundleContext.getService(packageAdminReference);
-        if (packageAdmin == null) {
-            throw new IllegalStateException("PackageAdmin service is not available");
-        }
-        packageAdmin.resolveBundles(null);
-        getBundleContext().ungetService(packageAdminReference);
-    }
-
-    public void resolve(String bundleId) throws Exception {
-        ServiceReference packageAdminReference = getBundleContext().getServiceReference(PackageAdmin.class.getName());
-        if (packageAdminReference == null) {
-            throw new IllegalStateException("PackageAdmin service is not available");
-        }
-        PackageAdmin packageAdmin = (PackageAdmin) bundleContext.getService(packageAdminReference);
-        if (packageAdmin == null) {
-            throw new IllegalStateException("PackageAdmin service is not available");
-        }
-
-        BundlesSelector selector = new BundlesSelector(bundleContext);
-        List<Bundle> bundles = selector.selectBundles(bundleId);
-
-        Bundle[] bundlesArray = new Bundle[bundles.size()];
-        packageAdmin.resolveBundles(bundles.toArray(bundlesArray));
-
-        getBundleContext().ungetService(packageAdminReference);
-    }
-
-    public void restart(String bundleId) throws Exception {
-        BundlesSelector selector = new BundlesSelector(bundleContext);
-        List<Bundle> bundles = selector.selectBundles(bundleId);
-
-        for (Bundle bundle : bundles) {
-            bundle.stop();
-            bundle.start();
-        }
-        ;
-    }
-
-    public long install(String url) throws Exception {
-        return install(url, false);
-    }
-
-    public long install(String url, boolean start) throws Exception {
-        Bundle bundle = bundleContext.installBundle(url, null);
-        if (start) {
-            bundle.start();
-        }
-        return bundle.getBundleId();
-    }
-
-    public void start(String bundleId) throws Exception {
-        BundlesSelector selector = new BundlesSelector(bundleContext);
-        List<Bundle> bundles = selector.selectBundles(bundleId);
-
-        for (Bundle bundle : bundles) {
-            bundle.start();
-        }
-    }
-
-    public void stop(String bundleId) throws Exception {
-        BundlesSelector selector = new BundlesSelector(bundleContext);
-        List<Bundle> bundles = selector.selectBundles(bundleId);
-
-        for (Bundle bundle : bundles) {
-            bundle.stop();
-        }
-    }
-
-    public void uninstall(String bundleId) throws Exception {
-        BundlesSelector selector = new BundlesSelector(bundleContext);
-        List<Bundle> bundles = selector.selectBundles(bundleId);
-
-        for (Bundle bundle : bundles) {
-            bundle.uninstall();
-        }
-    }
-
-    public BundleContext getBundleContext() {
-        return this.bundleContext;
-    }
-
-    public void setBundleContext(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-
-}
diff --git a/karaf-2.3.x/management/mbeans/bundles/src/main/java/org/apache/karaf/management/mbeans/bundles/internal/BundlesSelector.java b/karaf-2.3.x/management/mbeans/bundles/src/main/java/org/apache/karaf/management/mbeans/bundles/internal/BundlesSelector.java
deleted file mode 100644
index 91b222e..0000000
--- a/karaf-2.3.x/management/mbeans/bundles/src/main/java/org/apache/karaf/management/mbeans/bundles/internal/BundlesSelector.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.management.mbeans.bundles.internal;
-
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Bundles selector which is able to get a bundle by ID, ID range, name, and version.
- */
-public class BundlesSelector {
-
-    private BundleContext bundleContext;
-
-    public BundlesSelector(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-
-    /**
-     * Select bundles with ID, ID range, name, and version.
-     *
-     * @param bundleId the bundles ID for selection.
-     * @return the corresponding bundles found.
-     * @throws Exception in case of selection
-     */
-    public List<Bundle> selectBundles(String bundleId) throws Exception {
-        List<Bundle> bundles = new ArrayList<Bundle>();
-        if (bundleId != null && bundleId.length() > 0) {
-
-            // bundle ID is a number
-            Pattern pattern = Pattern.compile("^\\d+$");
-            Matcher matcher = pattern.matcher(bundleId);
-            if (matcher.find()) {
-                Bundle bundle = this.getBundleById(bundleId);
-                bundles.add(bundle);
-                return bundles;
-            }
-
-            // bundle is an ID range
-            pattern = Pattern.compile("^(\\d+)-(\\d+)$");
-            matcher = pattern.matcher(bundleId);
-            if (matcher.find()) {
-                int index = bundleId.indexOf('-');
-                long startId = Long.parseLong(bundleId.substring(0, index));
-                long stopId = Long.parseLong(bundleId.substring(index + 1));
-                if (startId < stopId) {
-                    for (long i = startId; i <= stopId; i++) {
-                        Bundle bundle = bundleContext.getBundle(i);
-                        bundles.add(bundle);
-                    }
-                }
-                return bundles;
-            }
-
-            // bundle ID is name/version
-            int index = bundleId.indexOf('/');
-            if (index != -1) {
-                // user has provided name and version
-                return this.getBundleByNameAndVersion(bundleId.substring(0, index), bundleId.substring(index + 1));
-            } else {
-                // user has provided only name
-                return this.getBundleByName(bundleId);
-            }
-
-
-        }
-        return bundles;
-    }
-
-    /**
-     * Get a bundle with the bundle ID.
-     *
-     * @param id the bundle ID.
-     * @return the corresponding bundle.
-     */
-    private Bundle getBundleById(String id) {
-        Bundle bundle = null;
-        try {
-            long idNumber = Long.parseLong(id);
-            bundle = bundleContext.getBundle(idNumber);
-        } catch (Exception e) {
-            // ignore
-        }
-        return bundle;
-    }
-
-    /**
-     * Get a bundles list with the name or symbolic name matching the pattern.
-     *
-     * @param name the bundle name or symbolic name pattern to match.
-     * @return the bundles list.
-     */
-    private List<Bundle> getBundleByName(String name) {
-        return getBundleByNameAndVersion(name, null);
-    }
-
-    /**
-     * Get a bundles list with the name or symbolic name matching the name pattern and version matching the version pattern.
-     *
-     * @param name    the bundle name or symbolic name regex to match.
-     * @param version the bundle version regex to match.
-     * @return the bundles list.
-     */
-    private List<Bundle> getBundleByNameAndVersion(String name, String version) {
-        Bundle[] bundles = bundleContext.getBundles();
-
-        ArrayList<Bundle> result = new ArrayList<Bundle>();
-
-        Pattern namePattern = Pattern.compile(name);
-
-        for (int i = 0; i < bundles.length; i++) {
-
-            String bundleSymbolicName = bundles[i].getSymbolicName();
-            // skip bundles without Bundle-SymbolicName header
-            if (bundleSymbolicName == null) {
-                continue;
-            }
-
-            Matcher symbolicNameMatcher = namePattern.matcher(bundleSymbolicName);
-
-            Matcher nameMatcher = null;
-            String bundleName = (String) bundles[i].getHeaders().get(Constants.BUNDLE_NAME);
-            if (bundleName != null) {
-                nameMatcher = namePattern.matcher(bundleName);
-            }
-
-            if (version != null) {
-                String bundleVersion = (String) bundles[i].getHeaders().get(Constants.BUNDLE_VERSION);
-                if (bundleVersion != null) {
-                    boolean nameMatch = (nameMatcher != null && nameMatcher.find()) || symbolicNameMatcher.find();
-                    if (nameMatch) {
-                        Pattern versionPattern = Pattern.compile(version);
-                        Matcher versionMatcher = versionPattern.matcher(bundleVersion);
-                        if (versionMatcher.find()) {
-                            result.add(bundles[i]);
-                        }
-                    }
-                }
-            } else {
-                boolean nameMatch = (nameMatcher != null && nameMatcher.find()) || symbolicNameMatcher.find();
-                if (nameMatch) {
-                    result.add(bundles[i]);
-                }
-            }
-        }
-        return result;
-    }
-
-}
diff --git a/karaf-2.3.x/management/mbeans/bundles/src/main/resources/OSGI-INF/blueprint/bundles-management.xml b/karaf-2.3.x/management/mbeans/bundles/src/main/resources/OSGI-INF/blueprint/bundles-management.xml
deleted file mode 100644
index dfef065..0000000
--- a/karaf-2.3.x/management/mbeans/bundles/src/main/resources/OSGI-INF/blueprint/bundles-management.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed 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.
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
-    <!-- Reference to the MBean Server -->
-    <reference id="mbeanServer" interface="javax.management.MBeanServer">
-        <reference-listener ref="mbeanRegistrer" bind-method="registerMBeanServer" unbind-method="unregisterMBeanServer"/>
-    </reference>
-
-    <!-- Bundles MBean -->
-    <bean id="bundlesMBean" class="org.apache.karaf.management.mbeans.bundles.internal.BundlesMBeanImpl">
-        <property name="bundleContext" ref="blueprintBundleContext"/>
-    </bean>
-
-    <!-- MBean Registrer -->
-    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer" init-method="init" destroy-method="destroy">
-        <property name="mbeans">
-            <map>
-                <entry value="org.apache.karaf:type=bundles,name=${karaf.name}" key-ref="bundlesMBean"/>
-            </map>
-        </property>
-    </bean>
-
-</blueprint>
\ No newline at end of file
diff --git a/karaf-2.3.x/management/mbeans/bundles/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/management/mbeans/bundles/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index bc836a0..0000000
--- a/karaf-2.3.x/management/mbeans/bundles/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,32 +0,0 @@
-PSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    The bundles mbean management bundle exposes a Bundles MBean that can be used with any JMX client (for instance JConsole).
-
-    The bundles MBean allows quite the same actions that can be performed using osgi:* (and bundles:*) commands:
-    \u001B[36mlist()\u001B[0m
-    \u001B[36mgetStartLevel(bundleId)\u001B[0m
-    \u001B[36msetStartLevel(bundleId, startLevel)\u001B[0m
-    \u001B[36mrefresh()\u001B[0m
-    \u001B[36mrefresh(bundleId)\u001B[0m
-    \u001B[36mupdate(bundleId)\u001B[0m
-    \u001B[36mupdate(bundleId, location)\u001B[0m
-    \u001B[36mresolve()\u001B[0m
-    \u001B[36mresolve(bundleId)\u001B[0m
-    \u001B[36mrestart(bundleId)\u001B[0m
-    \u001B[36minstall(url)\u001B[0m
-    \u001B[36minstall(url, start)\u001B[0m
-    \u001B[36mstart(bundleId)\u001B[0m
-    \u001B[36mstop(bundleId)\u001B[0m
-    \u001B[36muninstall(bundleId)\u001B[0m
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mDiagnostic\u001B[0m and \u001B[36mRemote Management via JMX\u001B[0m for the Karaf User Guide.
-
-
diff --git a/karaf-2.3.x/management/mbeans/config/NOTICE b/karaf-2.3.x/management/mbeans/config/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/management/mbeans/config/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/management/mbeans/config/pom.xml b/karaf-2.3.x/management/mbeans/config/pom.xml
deleted file mode 100644
index 83eab2e..0000000
--- a/karaf-2.3.x/management/mbeans/config/pom.xml
+++ /dev/null
@@ -1,106 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.management.mbeans</groupId>
-        <artifactId>mbeans</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.management.mbeans.config</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Management :: MBeans :: Config</name>
-    <description>This bundle provides a JMX MBean to manipulate the Karaf ConfigAdmin layer.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${project.basedir}/../../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.utils</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.fileinstall</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-        </dependency>
-        
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                            org.apache.karaf.management.mbeans.config*;version=${project.version}
-                        </Export-Package>
-                        <Import-Package>
-                            javax.management,
-                            javax.management.loading,
-                            org.apache.karaf.management;version=${project.version},
-                            *
-                        </Import-Package>
-                        <Private-Package>
-                            org.apache.karaf.management.mbeans.config.internal,
-                            org.apache.felix.utils.properties;-split-package:=merge-first,
-                            !*
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/management/mbeans/config/src/main/java/org/apache/karaf/management/mbeans/config/ConfigMBean.java b/karaf-2.3.x/management/mbeans/config/src/main/java/org/apache/karaf/management/mbeans/config/ConfigMBean.java
deleted file mode 100644
index cb7bf86..0000000
--- a/karaf-2.3.x/management/mbeans/config/src/main/java/org/apache/karaf/management/mbeans/config/ConfigMBean.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Licensed 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.
- */
-
-package org.apache.karaf.management.mbeans.config;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * MBean to manipulate the Config layer.
- */
-public interface ConfigMBean {
-
-    /**
-     * Get the list of all configuration PIDs.
-     *
-     * @return the list of configuration PIDs.
-     * @throws Exception
-     */
-    List<String> getConfigs() throws Exception;
-
-    /**
-     * @deprecated use getConfigs() instead.
-     */
-    List<String> list() throws Exception;
-
-    /**
-     * Create a new configuration for the given PID.
-     *
-     * @param pid the configuration PID.
-     * @throws Exception
-     */
-    void create(String pid) throws Exception;
-
-    /**
-     * Delete a configuration identified by the given PID.
-     *
-     * @param pid the configuration PID to delete.
-     * @throws Exception
-     */
-    void delete(String pid) throws Exception;
-
-    /**
-     * Get the list of properties for a given configuration PID.
-     *
-     * @param pid the configuration PID.
-     * @return the list of properties associated to the PID.
-     * @throws Exception
-     */
-    Map<String, String> listProperties(String pid) throws Exception;
-
-    /**
-     * @deprecated used listProperties() instead.
-     */
-    Map<String, String> proplist(String pid) throws Exception;
-
-    /**
-     * Delete the configuration property identified by the given key.
-     *
-     * @param pid the configuration PID.
-     * @param key the property key.
-     * @throws Exception
-     */
-    void deleteProperty(String pid, String key) throws Exception;
-
-    /**
-     * @deprecated use deleteProperty() instead.
-     */
-    void propdel(String pid, String key) throws Exception;
-
-    /**
-     * Append (or add) a value for the given configuration key.
-     *
-     * @param pid the configuration PID.
-     * @param key the property key.
-     * @param value the value to append to the current property value.
-     * @throws Exception
-     */
-    void appendProperty(String pid, String key, String value) throws Exception;
-
-    /**
-     * @deprecated use appendProperty() instead.
-     */
-    void propappend(String pid, String key, String value) throws Exception;
-
-    /**
-     * Set a configuration property.
-     *
-     * @param pid the configuration PID.
-     * @param key the property key.
-     * @param value the property value.
-     * @throws Exception
-     */
-    void setProperty(String pid, String key, String value) throws Exception;
-
-    /**
-     * @deprecated use setProperty() instead.
-     */
-    void propset(String pid, String key, String value) throws Exception;
-
-}
diff --git a/karaf-2.3.x/management/mbeans/config/src/main/java/org/apache/karaf/management/mbeans/config/internal/ConfigMBeanImpl.java b/karaf-2.3.x/management/mbeans/config/src/main/java/org/apache/karaf/management/mbeans/config/internal/ConfigMBeanImpl.java
deleted file mode 100644
index 4433519..0000000
--- a/karaf-2.3.x/management/mbeans/config/src/main/java/org/apache/karaf/management/mbeans/config/internal/ConfigMBeanImpl.java
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * Licensed 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.
- */
-package org.apache.karaf.management.mbeans.config.internal;
-
-import org.apache.felix.fileinstall.ArtifactInstaller;
-import org.apache.felix.utils.properties.Properties;
-import org.apache.karaf.management.mbeans.config.ConfigMBean;
-import org.osgi.framework.Constants;
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.management.NotCompliantMBeanException;
-import javax.management.StandardMBean;
-import java.io.File;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URL;
-import java.util.*;
-
-/**
- * Implementation of the ConfigMBean.
- */
-public class ConfigMBeanImpl extends StandardMBean implements ConfigMBean {
-    private static final Logger LOG = LoggerFactory.getLogger(ConfigMBeanImpl.class);
-    
-    private final String FELIX_FILEINSTALL_FILENAME = "felix.fileinstall.filename";
-
-    private ConfigurationAdmin configurationAdmin;
-    private List<ArtifactInstaller> artifactInstallers;
-    private File storage;
-
-    public ConfigurationAdmin getConfigurationAdmin() {
-        return this.configurationAdmin;
-    }
-
-    public void setConfigurationAdmin(ConfigurationAdmin configurationAdmin) {
-        this.configurationAdmin = configurationAdmin;
-    }
-
-    public File getStorage() {
-        return this.storage;
-    }
-
-    public void setStorage(File storage) {
-        this.storage = storage;
-    }
-
-    public void setArtifactInstallers(List<ArtifactInstaller> artifactInstallers) {
-        this.artifactInstallers = artifactInstallers;
-    }
-
-    public ConfigMBeanImpl() throws NotCompliantMBeanException {
-        super(ConfigMBean.class);
-    }
-
-    public List<String> getConfigs() throws Exception {
-        Configuration[] configurations = configurationAdmin.listConfigurations(null);
-        List<String> pids = new ArrayList<String>();
-        for (int i = 0; i < configurations.length; i++) {
-            pids.add(configurations[i].getPid());
-        }
-        return pids;
-    }
-
-    /**
-     * @deprecated used getConfigs() instead.
-     */
-    public List<String> list() throws Exception {
-        return getConfigs();
-    }
-
-    public void create(String pid) throws Exception {
-        store(pid, new Hashtable(), false);
-    }
-
-    public void delete(String pid) throws Exception {
-        Configuration configuration = configurationAdmin.getConfiguration(pid);
-        if (configuration == null) {
-            throw new IllegalArgumentException("Configuration PID " + pid + " doesn't exist");
-        }
-        configuration.delete();
-        if (storage != null) {
-            File cfgFile = new File(storage, pid + ".cfg");
-            cfgFile.delete();
-        }
-    }
-
-    public Map<String, String> listProperties(String pid) throws Exception {
-        Configuration configuration = configurationAdmin.getConfiguration(pid);
-        if (configuration == null) {
-            throw new IllegalArgumentException("Configuration PID " + pid + " doesn't exist");
-        }
-        Dictionary dictionary = configuration.getProperties();
-
-        if (dictionary == null) {
-            dictionary = new java.util.Properties();
-        }
-
-        Map<String, String> propertiesMap = new HashMap<String, String>();
-        for (Enumeration e = dictionary.keys(); e.hasMoreElements(); ) {
-            Object key = e.nextElement();
-            Object value = dictionary.get(key);
-            propertiesMap.put(key.toString(), value.toString());
-        }
-        return propertiesMap;
-    }
-
-    /**
-     * @deprecated use listProperties() instead.
-     */
-    public Map<String, String> proplist(String pid) throws Exception {
-        return listProperties(pid);
-    }
-
-    public void deleteProperty(String pid, String key) throws Exception {
-        Configuration configuration = configurationAdmin.getConfiguration(pid);
-        if (configuration == null) {
-            throw new IllegalArgumentException("Configuration PID " + pid + " doesn't exist");
-        }
-        Dictionary dictionary = configuration.getProperties();
-
-        if (dictionary == null) {
-            dictionary = new java.util.Properties();
-        }
-
-        dictionary.remove(key);
-        store(pid, dictionary, false);
-    }
-
-    /**
-     * @deprecated use deleteProperty() instead.
-     */
-    public void propdel(String pid, String key) throws Exception {
-        deleteProperty(pid, key);
-    }
-
-    public void appendProperty(String pid, String key, String value) throws Exception {
-        Configuration configuration = configurationAdmin.getConfiguration(pid);
-        if (configuration == null) {
-            throw new IllegalArgumentException("Configuration PID " + pid + " doesn't exist");
-        }
-        Dictionary dictionary = configuration.getProperties();
-
-        if (dictionary == null) {
-            dictionary = new java.util.Properties();
-        }
-
-        Object currentValue = dictionary.get(key);
-        if (currentValue == null) {
-            dictionary.put(key, value);
-        } else if (currentValue instanceof String) {
-            dictionary.put(key, currentValue + value);
-        } else {
-            throw new IllegalStateException("Current value is not a String");
-        }
-        store(pid, dictionary, false);
-    }
-
-    /**
-     * @deprecated use appendProperty() instead.
-     */
-    public void propappend(String pid, String key, String value) throws Exception {
-        appendProperty(pid, key, value);
-    }
-
-    public void setProperty(String pid, String key, String value) throws Exception {
-        Configuration configuration = configurationAdmin.getConfiguration(pid);
-        if (configuration == null) {
-            throw new IllegalArgumentException("Configuration PID " + pid + " doesn't exist");
-        }
-        Dictionary dictionary = configuration.getProperties();
-
-        if (dictionary == null) {
-            dictionary = new java.util.Properties();
-        }
-
-        dictionary.put(key, value);
-        store(pid, dictionary, false);
-    }
-
-    /**
-     * @deprecated use setProperty() instead.
-     */
-    public void propset(String pid, String key, String value) throws Exception {
-        setProperty(pid, key, value);
-    }
-
-    /**
-     * Store/flush a configuration PID into the configuration file.
-     *
-     * @param pid        the configuration PID.
-     * @param properties the configuration properties.
-     * @throws Exception
-     */
-    private void store(String pid, Dictionary properties, boolean bypassStorage) throws Exception {
-        if (!bypassStorage && storage != null) {
-            File storageFile = new File(storage, pid + ".cfg");
-            Configuration configuration = configurationAdmin.getConfiguration(pid, null);
-            if (configuration != null && configuration.getProperties() != null) {
-                Object val = configuration.getProperties().get(FELIX_FILEINSTALL_FILENAME);
-                try {
-                    if (val instanceof URL) {
-                        storageFile = new File(((URL) val).toURI());
-                    }
-                    if (val instanceof URI) {
-                        storageFile = new File((URI) val);
-                    }
-                    if (val instanceof String) {
-                        storageFile = new File(new URL((String) val).toURI());
-                    }
-                } catch (Exception e) {
-                    throw (IOException) new IOException(e.getMessage()).initCause(e);
-                }
-            }
-            Properties p = new Properties(storageFile);
-            p.clear();
-            for (Enumeration keys = properties.keys(); keys.hasMoreElements(); ) {
-                Object key = keys.nextElement();
-                if (!Constants.SERVICE_PID.equals(key)
-                        && !ConfigurationAdmin.SERVICE_FACTORYPID.equals(key)
-                        && !FELIX_FILEINSTALL_FILENAME.equals(key)) {
-                    p.put((String) key, (String) properties.get(key));
-                }
-            }
-            // remove "removed" properties from the file
-            ArrayList<String> propertiesToRemove = new ArrayList<String>();
-            for (Object key : p.keySet()) {
-                if (properties.get(key) == null
-                        && !Constants.SERVICE_PID.equals(key)
-                        && !ConfigurationAdmin.SERVICE_FACTORYPID.equals(key)
-                        && !FELIX_FILEINSTALL_FILENAME.equals(key)) {
-                    propertiesToRemove.add(key.toString());
-                }
-            }
-            for (String key : propertiesToRemove) {
-                p.remove(key);
-            }
-            // save the cfg file
-            storage.mkdirs();
-            p.save();
-            updateFileInstall(storageFile);
-        } else {
-            Configuration cfg = configurationAdmin.getConfiguration(pid, null);
-            if (cfg.getProperties() == null) {
-                String[] pids = parsePid(pid);
-                if (pids[1] != null) {
-                    cfg = configurationAdmin.createFactoryConfiguration(pids[0], null);
-                }
-            }
-            if (cfg.getBundleLocation() != null) {
-                cfg.setBundleLocation(null);
-            }
-            cfg.update(properties);
-        }
-    }
-    
-    /**
-     * Trigger felix fileinstall to update the config so there is no delay till it polls the file
-     * 
-     * @param storageFile
-     * @throws Exception
-     */
-    private void updateFileInstall(File storageFile) {
-        if (artifactInstallers != null) {
-            for (ArtifactInstaller installer : artifactInstallers) {
-                if (installer.canHandle(storageFile)) {
-                    try {
-                        installer.update(storageFile);
-                    } catch (Exception e) {
-                        LOG.warn("Error updating config " + storageFile + " in felix fileinstall" + e.getMessage(), e);
-                    }
-                }
-            }
-        }
-    }
-
-    private String[] parsePid(String pid) {
-        int n = pid.indexOf('-');
-        if (n > 0) {
-            String factoryPid = pid.substring(n + 1);
-            pid = pid.substring(0, n);
-            return new String[] { pid, factoryPid };
-        } else {
-            return new String[] { pid, null };
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/management/mbeans/config/src/main/resources/OSGI-INF/blueprint/config-management.xml b/karaf-2.3.x/management/mbeans/config/src/main/resources/OSGI-INF/blueprint/config-management.xml
deleted file mode 100644
index 9c4bdbe..0000000
--- a/karaf-2.3.x/management/mbeans/config/src/main/resources/OSGI-INF/blueprint/config-management.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed 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.
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
-           xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0">
-
-    <!-- Reference to the MBean server -->
-    <reference id="mbeanServer" interface="javax.management.MBeanServer">
-        <reference-listener ref="mbeanRegistrer" bind-method="registerMBeanServer" unbind-method="unregisterMBeanServer"/>
-    </reference>
-
-    <!-- Reference to the configuration admin -->
-    <reference id="configurationAdmin" interface="org.osgi.service.cm.ConfigurationAdmin"  />
-
-    <!-- Config MBean -->
-    <bean id="configMBean" class="org.apache.karaf.management.mbeans.config.internal.ConfigMBeanImpl">
-        <property name="configurationAdmin" ref="configurationAdmin"/>
-        <property name="storage" value="${storage}"/>
-        <property name="artifactInstallers" ref="artifactInstallers" />
-    </bean>
-    
-    <reference-list id="artifactInstallers" interface="org.apache.felix.fileinstall.ArtifactInstaller" availability="optional" />
-
-    <!-- Register MBean in the MBeanServer -->
-    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer" init-method="init" destroy-method="destroy">
-        <property name="mbeans">
-            <map>
-                <entry value="org.apache.karaf:type=config,name=${karaf.name}" key-ref="configMBean"/>
-            </map>
-        </property>
-    </bean>
-
-    <ext:property-placeholder placeholder-prefix="$[" placeholder-suffix="]" />
-
-    <cm:property-placeholder persistent-id="org.apache.karaf.management.mbeans.config">
-        <cm:default-properties>
-            <cm:property name="storage" value="$[karaf.base]/etc/"/>
-        </cm:default-properties>
-    </cm:property-placeholder>
-
-</blueprint>
\ No newline at end of file
diff --git a/karaf-2.3.x/management/mbeans/config/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/management/mbeans/config/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 19c54db..0000000
--- a/karaf-2.3.x/management/mbeans/config/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,25 +0,0 @@
-PSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    The config mbean management bundle exposes a Config MBean that can used with any JMX client (for instance JConsole).
-
-    The config MBean allows quite the same actions that can be performed using config:* commands:
-    \u001B[36mlist()\u001B[0m
-    \u001B[36mcreate(pid)\u001B[0m
-    \u001B[36mdelete(pid)\u001B[0m
-    \u001B[36mrproplist(pid)\u001B[0m
-    \u001B[36mrpropdel(pid,key,bypassStorage)\u001B[0m
-    \u001B[36mrpropappend(pid,key,value,bypassStorage)\u001B[0m
-    \u001B[36mrpropset(pid,key,value,bypassStorage)\u001B[0m
-
-    Just as with the config:* commands, the Config MBean is able to flush changes into the etc files.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mDiagnostic\u001B[0m and \u001B[36mRemote Management via JMX\u001B[0m for the Karaf User Guide.
-
diff --git a/karaf-2.3.x/management/mbeans/dev/NOTICE b/karaf-2.3.x/management/mbeans/dev/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/management/mbeans/dev/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/management/mbeans/dev/pom.xml b/karaf-2.3.x/management/mbeans/dev/pom.xml
deleted file mode 100644
index 821fee6..0000000
--- a/karaf-2.3.x/management/mbeans/dev/pom.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.management.mbeans</groupId>
-        <artifactId>mbeans</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.management.mbeans.dev</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Management :: MBeans :: Dev</name>
-    <description>This bundle provides a JMX MBean for dev utils actions.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}../../../etc/appended-resources/</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.utils</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                            org.apache.karaf.management.mbeans.dev;version=${project.version}
-                        </Export-Package>
-                        <Import-Package>
-                            !org.apache.karaf.management.mbeans.dev,
-                            javax.management,
-                            javax.management.loading,
-                            org.apache.karaf.management;version=${project.version},
-                            *
-                        </Import-Package>
-                        <Private-Package>
-                            org.apache.karaf.management.mbeans.dev.internal,
-                            org.apache.felix.utils.properties,
-                            !*
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/karaf-2.3.x/management/mbeans/dev/src/main/java/org/apache/karaf/management/mbeans/dev/DevMBean.java b/karaf-2.3.x/management/mbeans/dev/src/main/java/org/apache/karaf/management/mbeans/dev/DevMBean.java
deleted file mode 100644
index d886019..0000000
--- a/karaf-2.3.x/management/mbeans/dev/src/main/java/org/apache/karaf/management/mbeans/dev/DevMBean.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed 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.
- */
-package org.apache.karaf.management.mbeans.dev;
-
-/**
- * MBean providing dev actions.
- */
-public interface DevMBean {
-
-    /**
-     * Get the current OSGi framework in use.
-     *
-     * @deprecated use SystemMBean#getFramework() instead.
-     * @return the name of the OSGi framework in use.
-     * @throws Exception
-     */
-    String framework() throws Exception;
-
-    /**
-     * OSGi framework options.
-     *
-     * @deprecated use SystemMBean#setFrameworkDebug() instead.
-     * @param debug enable debug of the OSGi framework to use.
-     * @param framework name of the OSGI framework to use.
-     * @throws Exception
-     */
-    void frameworkOptions(boolean debug, String framework) throws Exception;
-
-    /**
-     * Restart Karaf, with eventually a cleanup.
-     *
-     * @deprecated use SystemMBean#reboot() instead.
-     * @param clean if true, Karaf is cleanup, false else.
-     * @throws Exception
-     */
-    void restart(boolean clean) throws Exception;
-
-}
diff --git a/karaf-2.3.x/management/mbeans/dev/src/main/java/org/apache/karaf/management/mbeans/dev/internal/DevMBeanImpl.java b/karaf-2.3.x/management/mbeans/dev/src/main/java/org/apache/karaf/management/mbeans/dev/internal/DevMBeanImpl.java
deleted file mode 100644
index 65c3194..0000000
--- a/karaf-2.3.x/management/mbeans/dev/src/main/java/org/apache/karaf/management/mbeans/dev/internal/DevMBeanImpl.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Licensed 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.
- */
-package org.apache.karaf.management.mbeans.dev.internal;
-
-import org.apache.felix.utils.properties.Properties;
-import org.apache.karaf.management.mbeans.dev.DevMBean;
-import org.osgi.framework.BundleContext;
-
-import javax.management.NotCompliantMBeanException;
-import javax.management.StandardMBean;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.util.Scanner;
-
-/**
- * Implementation of the DevMBean.
- */
-public class DevMBeanImpl extends StandardMBean implements DevMBean {
-
-    private BundleContext bundleContext;
-
-    public DevMBeanImpl() throws NotCompliantMBeanException {
-        super(DevMBean.class);
-    }
-
-    public BundleContext getBundleContext() {
-        return this.bundleContext;
-    }
-
-    public void setBundleContext(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-
-    public String framework() throws Exception {
-        if (bundleContext.getBundle(0).getSymbolicName().contains("felix")) {
-            return "Felix";
-        } else {
-            return "Equinox";
-        }
-    }
-
-    public void frameworkOptions(boolean debug, String framework) throws Exception {
-        Properties properties = new Properties(new File(System.getProperty("karaf.base"), "etc/config.properties"));
-        if (framework != null) {
-            // switch the framework is use
-            if (!framework.equalsIgnoreCase("felix") && !framework.equalsIgnoreCase("equinox")) {
-                throw new IllegalArgumentException("Unsupported framework " + framework);
-            }
-            properties.put("karaf.framework", framework.toLowerCase());
-        }
-        if (debug) {
-            properties.put("felix.log.level", "4");
-            properties.put("osgi.debug", "etc/equinox-debug.properties");
-            // TODO populate the equinox-debug.properties file with the one provided in shell/dev module
-        } else {
-            properties.remove("felix.log.level");
-            properties.remove("osgi.debug");
-        }
-        properties.save();
-    }
-
-    public void restart(boolean clean) throws Exception {
-        System.setProperty("karaf.restart", "true");
-        System.setProperty("karaf.restart.clean", Boolean.toString(clean));
-        bundleContext.getBundle(0).stop();
-    }
-
-}
diff --git a/karaf-2.3.x/management/mbeans/dev/src/main/resources/OSGI-INF/blueprint/dev-management.xml b/karaf-2.3.x/management/mbeans/dev/src/main/resources/OSGI-INF/blueprint/dev-management.xml
deleted file mode 100644
index c6e0472..0000000
--- a/karaf-2.3.x/management/mbeans/dev/src/main/resources/OSGI-INF/blueprint/dev-management.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed 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.
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
-    <!-- Reference to the MBean server -->
-    <reference id="mbeanServer" interface="javax.management.MBeanServer">
-        <reference-listener ref="mbeanRegistrer" bind-method="registerMBeanServer" unbind-method="unregisterMBeanServer"/>
-    </reference>
-
-    <!-- Dev MBean -->
-    <bean id="devMBean" class="org.apache.karaf.management.mbeans.dev.internal.DevMBeanImpl">
-        <property name="bundleContext" ref="blueprintBundleContext"/>
-    </bean>
-
-    <!-- Register Dev MBean in the MBean Server -->
-    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer" init-method="init" destroy-method="destroy">
-        <property name="mbeans">
-            <map>
-                <entry value="org.apache.karaf:type=dev,name=${karaf.name}" key-ref="devMBean"/>
-            </map>
-        </property>
-    </bean>
-
-</blueprint>
\ No newline at end of file
diff --git a/karaf-2.3.x/management/mbeans/dev/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/management/mbeans/dev/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 25423ef..0000000
--- a/karaf-2.3.x/management/mbeans/dev/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,20 +0,0 @@
-PSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    The dev mbean management bundle exposes a Dev MBean that can be used with any JMX client (for instance JConsole).
-
-    The dev MBean allows quite the same actions that can be performed using dev:* commands:
-    \u001B[36mframework()\u001B[0m
-    \u001B[36mframeworkOptions(debug, framework)\u001B[0m
-    \u001B[36mrestart(clean)\u001B[0m
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mDiagnostic\u001B[0m and \u001B[36mRemote Management via JMX\u001B[0m for the Karaf User Guide.
-
-
diff --git a/karaf-2.3.x/management/mbeans/log/NOTICE b/karaf-2.3.x/management/mbeans/log/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/management/mbeans/log/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/management/mbeans/log/pom.xml b/karaf-2.3.x/management/mbeans/log/pom.xml
deleted file mode 100644
index 06f6fbd..0000000
--- a/karaf-2.3.x/management/mbeans/log/pom.xml
+++ /dev/null
@@ -1,102 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.management.mbeans</groupId>
-        <artifactId>mbeans</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.management.mbeans.log</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Management :: MBeans :: Log</name>
-    <description>The log mbean bundle provides a Log JMX MBean which allow you to manipulate the Karaf log layer.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../../etc/appended-resources/</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.ops4j.pax.logging</groupId>
-            <artifactId>pax-logging-service</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.logging</groupId>
-            <artifactId>pax-logging-api</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                            org.apache.karaf.management.mbeans.log;version=${project.version}
-                        </Export-Package>
-                        <Import-Package>
-                            !org.apache.karaf.management.mbeans.log,
-                            javax.management,
-                            javax.management.loading,
-                            org.apache.karaf.management;version=${project.version},
-                            *
-                        </Import-Package>
-                        <Private-Package>
-                            org.apache.karaf.management.mbeans.log.internal,
-                            !*
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/management/mbeans/log/src/main/java/org/apache/karaf/management/mbeans/log/LogMBean.java b/karaf-2.3.x/management/mbeans/log/src/main/java/org/apache/karaf/management/mbeans/log/LogMBean.java
deleted file mode 100644
index cc97d4b..0000000
--- a/karaf-2.3.x/management/mbeans/log/src/main/java/org/apache/karaf/management/mbeans/log/LogMBean.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.management.mbeans.log;
-
-import java.util.List;
-
-/**
- * Log MBean.
- */
-public interface LogMBean {
-
-    /**
-     * Set the level of the root logger.
-     *
-     * @param level the new level value (INFO, ERROR, etc).
-     * @throws Exception
-     */
-    void setLevel(String level) throws Exception;
-
-    /**
-     * Set the level of a given logger.
-     *
-     * @param level the new level value (INFO, ERROR, etc).
-     * @param logger the target logger where to change the level.
-     * @throws Exception
-     */
-    void setLevel(String level, String logger) throws Exception;
-
-    /**
-     * Get the level of the root logger.
-     *
-     * @return the value of the level (INFO, ERROR, etc).
-     * @throws Exception
-     */
-    String getLevel() throws Exception;
-
-    /**
-     * Get the level of a given logger.
-     *
-     * @param logger the target logger.
-     * @return the level of the logger.
-     * @throws Exception
-     */
-    String getLevel(String logger) throws Exception;
-
-    /**
-     * @deprecated please, use setLevel() instead.
-     */
-    void set(String level) throws Exception;
-
-    /**
-     * @deprecated please, use setLevel() instead.
-     */
-    void set(String level, String logger) throws Exception;
-
-    /**
-     * @deprecated please, use getLevel() instead.
-     */
-    String get() throws Exception;
-
-    /**
-     * @deprecated please, use getLevel() instead.
-     */
-    String get(String logger) throws Exception;
-
-}
diff --git a/karaf-2.3.x/management/mbeans/log/src/main/java/org/apache/karaf/management/mbeans/log/internal/LogMBeanImpl.java b/karaf-2.3.x/management/mbeans/log/src/main/java/org/apache/karaf/management/mbeans/log/internal/LogMBeanImpl.java
deleted file mode 100644
index 24ddcd0..0000000
--- a/karaf-2.3.x/management/mbeans/log/src/main/java/org/apache/karaf/management/mbeans/log/internal/LogMBeanImpl.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.management.mbeans.log.internal;
-
-import org.apache.karaf.management.mbeans.log.LogMBean;
-import org.ops4j.pax.logging.spi.PaxLoggingEvent;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
-
-import javax.management.NotCompliantMBeanException;
-import javax.management.StandardMBean;
-import java.io.IOException;
-import java.util.*;
-
-/**
- * Implementation of the Log MBean.
- */
-public class LogMBeanImpl extends StandardMBean implements LogMBean {
-
-    static final String CONFIGURATION_PID = "org.ops4j.pax.logging";
-    static final String ROOT_LOGGER_PREFIX = "log4j.rootLogger";
-    static final String LOGGER_PREFIX = "log4j.logger.";
-    static final String ROOT_LOGGER = "ROOT";
-
-    private BundleContext bundleContext;
-
-    public LogMBeanImpl() throws NotCompliantMBeanException {
-        super(LogMBean.class);
-    }
-
-    public void setLevel(String level) throws Exception {
-        setLevel(level, null);
-    }
-
-    public void setLevel(String level, String logger) throws Exception {
-        if (ROOT_LOGGER.equalsIgnoreCase(logger)) {
-            logger = null;
-        }
-
-        // make sure both uppercase and lowercase levels are supported
-        level = level.toUpperCase();
-
-        if (!level.equals("TRACE") && !level.equals("DEBUG") && !level.equals("INFO")
-                && !level.equals("WARN") && !level.equals("ERROR") && !level.equals("DEFAULT")) {
-            throw new IllegalArgumentException("level must be set to TRACE, DEBUG, INFO, WARN or ERROR (or DEFAULT to unset it)");
-        }
-
-        Configuration cfg = getConfiguration();
-        Dictionary props = cfg.getProperties();
-
-        String val;
-        String prop;
-        if (logger == null) {
-            prop = ROOT_LOGGER_PREFIX;
-        } else {
-            prop = LOGGER_PREFIX + logger;
-        }
-        val = (String) props.get(prop);
-        if (level.equals("DEFAULT")) {
-            if (val != null) {
-                val = val.trim();
-                int idx = val.indexOf(",");
-                if (idx < 0) {
-                    val = null;
-                } else {
-                    val = val.substring(idx);
-                }
-            }
-        } else {
-            if (val == null) {
-                val = level;
-            } else {
-                val = val.trim();
-                int idx = val.indexOf(",");
-                if (idx < 0) {
-                    val = level;
-                } else {
-                    val = level + val.substring(idx);
-                }
-            }
-        }
-        if (val == null) {
-            props.remove(prop);
-        } else {
-            props.put(prop, val);
-        }
-        cfg.update(props);
-    }
-
-    public String getLevel() throws Exception {
-        return getLevel(null);
-    }
-
-    public String getLevel(String logger) throws Exception {
-        ConfigurationAdmin cfgAdmin = getConfigAdmin();
-        Configuration cfg = cfgAdmin.getConfiguration(CONFIGURATION_PID, null);
-        Dictionary props = cfg.getProperties();
-
-        if (ROOT_LOGGER.equalsIgnoreCase(logger)) {
-            logger = null;
-        }
-
-        String val;
-        for (; ; ) {
-            String prop;
-            if (logger == null) {
-                prop = ROOT_LOGGER_PREFIX;
-            } else {
-                prop = LOGGER_PREFIX + logger;
-            }
-            val = (String) props.get(prop);
-            val = getLevelValue(val);
-            if (val != null || logger == null) {
-                break;
-            }
-            int idx = logger.lastIndexOf('.');
-            if (idx < 0) {
-                logger = null;
-            } else {
-                logger = logger.substring(0, idx);
-            }
-        }
-        String st = "Level: " + val;
-        return st;
-    }
-
-    public void set(String level) throws Exception {
-        setLevel(level);
-    }
-
-    public void set(String logger, String level) throws Exception {
-        setLevel(logger, level);
-    }
-
-    public String get() throws Exception {
-        return getLevel();
-    }
-
-    public String get(String logger) throws Exception {
-        return getLevel(logger);
-    }
-
-    private boolean checkIfFromRequestedLog(PaxLoggingEvent event, String logger) {
-        return (event.getLoggerName().lastIndexOf(logger) >= 0) ? true : false;
-    }
-
-    private String render(PaxLoggingEvent event) {
-        StringBuffer sb = new StringBuffer();
-        sb.setLength(0);
-        if (event.getThrowableStrRep() != null) {
-            for (String r : event.getThrowableStrRep()) {
-                sb.append(r).append('\n');
-            }
-        }
-        return sb.toString();
-    }
-
-    private String getLevelValue(String prop) {
-        if (prop == null) {
-            return null;
-        } else {
-            String val = prop.trim();
-            int idx = val.indexOf(",");
-            if (idx == 0) {
-                val = null;
-            } else if (idx > 0) {
-                val = val.substring(0, idx);
-            }
-            return val;
-        }
-    }
-
-    public BundleContext getBundleContext() {
-        return this.bundleContext;
-    }
-
-    public void setBundleContext(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-
-    protected Configuration getConfiguration() throws IOException {
-        Configuration cfg = getConfigAdmin().getConfiguration(CONFIGURATION_PID, null);
-        return cfg;
-    }
-
-    protected ConfigurationAdmin getConfigAdmin() {
-        ServiceReference ref = bundleContext.getServiceReference(ConfigurationAdmin.class.getName());
-        if (ref != null) {
-            return (ConfigurationAdmin) bundleContext.getService(ref);
-        }
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/management/mbeans/log/src/main/resources/OSGI-INF/blueprint/log-management.xml b/karaf-2.3.x/management/mbeans/log/src/main/resources/OSGI-INF/blueprint/log-management.xml
deleted file mode 100644
index edf3a68..0000000
--- a/karaf-2.3.x/management/mbeans/log/src/main/resources/OSGI-INF/blueprint/log-management.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed 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.
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
-    <!-- Reference to the MBean Server -->
-    <reference id="mbeanServer" interface="javax.management.MBeanServer">
-        <reference-listener ref="mbeanRegistrer" bind-method="registerMBeanServer" unbind-method="unregisterMBeanServer"/>
-    </reference>
-
-    <!-- Log MBean -->
-    <bean id="logMBean" class="org.apache.karaf.management.mbeans.log.internal.LogMBeanImpl">
-        <property name="bundleContext" ref="blueprintBundleContext"/>
-    </bean>
-
-    <!-- Register MBean in the MBean Server -->
-    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer" init-method="init" destroy-method="destroy">
-        <property name="mbeans">
-            <map>
-                <entry value="org.apache.karaf:type=log,name=${karaf.name}" key-ref="logMBean"/>
-            </map>
-        </property>
-    </bean>
-
-</blueprint>
\ No newline at end of file
diff --git a/karaf-2.3.x/management/mbeans/log/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/management/mbeans/log/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 4550dcc..0000000
--- a/karaf-2.3.x/management/mbeans/log/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,23 +0,0 @@
-PSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    The log mbean management bundle exposes a Log MBean that can be used with any JMX client (for instance JConsole).
-
-    The Log MBean allows quite the same actions that can performed using log:* commands:
-    \u001B[36mdisplay()\u001B[0m
-    \u001B[36mdisplay(logger)\u001B[0m
-    \u001B[36mget()\u001B[0m
-    \u001B[36mget(logger)\u001B[0m
-    \u001B[36mset(level)\u001B[0m
-    \u001B[36mlist(level, logger)\u001B[0m
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mDiagnostic\u001B[0m and \u001B[36mRemote Management via JMX\u001B[0m for the Karaf User Guide.
-
-
diff --git a/karaf-2.3.x/management/mbeans/obr/NOTICE b/karaf-2.3.x/management/mbeans/obr/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/management/mbeans/obr/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/management/mbeans/obr/pom.xml b/karaf-2.3.x/management/mbeans/obr/pom.xml
deleted file mode 100644
index de97c04..0000000
--- a/karaf-2.3.x/management/mbeans/obr/pom.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.management.mbeans</groupId>
-        <artifactId>mbeans</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.management.mbeans.obr</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Management :: MBeans :: OBR</name>
-    <description>The OBR MBean bundle provides a JMX MBean which allows you to manipulate the Karaf OBR layer.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../../etc/appended-resources/</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.bundlerepository</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                            org.apache.karaf.management.mbeans.obr;version=${project.version}
-                        </Export-Package>
-                        <Import-Package>
-                            !org.apache.karaf.management.mbeans.obr,
-                            javax.management,
-                            javax.management.loading,
-                            org.apache.karaf.management;version=${project.version},
-                            *
-                        </Import-Package>
-                        <Private-Package>
-                            org.apache.karaf.management.mbeans.obr.internal,
-                            !*
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/karaf-2.3.x/management/mbeans/obr/src/main/java/org/apache/karaf/management/mbeans/obr/ObrMBean.java b/karaf-2.3.x/management/mbeans/obr/src/main/java/org/apache/karaf/management/mbeans/obr/ObrMBean.java
deleted file mode 100644
index b64bcc0..0000000
--- a/karaf-2.3.x/management/mbeans/obr/src/main/java/org/apache/karaf/management/mbeans/obr/ObrMBean.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.management.mbeans.obr;
-
-import javax.management.openmbean.TabularData;
-import java.util.List;
-
-/**
- * OBR MBean.
- */
-public interface ObrMBean {
-
-    /**
-     * Get the URLs registered in the OBR service.
-     *
-     * @return the list of URLs in the OBR service.
-     * @throws Exception
-     */
-    List<String> getUrls() throws Exception;
-
-    /**
-     * @deprecated use getUrls() instead.
-     */
-    List<String> listUrls() throws Exception;
-
-    /**
-     * Add a new URL in the OBR service.
-     *
-     * @param url the URL to add in the OBR service
-     * @throws Exception
-     */
-    void addUrl(String url) throws Exception;
-
-    /**
-     * Remove an URL from the OBR service.
-     *
-     * @param url the URL to remove from the OBR service.
-     * @throws Exception
-     */
-    void removeUrl(String url) throws Exception;
-
-    /**
-     * Refresh an URL in the OBR service.
-     *
-     * @param url the URL to refresh in the OBR service.
-     * @throws Exception
-     */
-    void refreshUrl(String url) throws Exception;
-
-    /**
-     * Get the bundles available in the OBR service.
-     *
-     * @return the list of bundles available in the OBR service.
-     * @throws Exception
-     */
-    TabularData getBundles() throws Exception;
-
-    /**
-     * @deprecated use getBundles() instead.
-     */
-    TabularData list() throws Exception;
-
-    /**
-     * Deploy a bundle available in the OBR service.
-     *
-     * @param bundle the bundle to deploy.
-     * @throws Exception
-     */
-    void deploy(String bundle) throws Exception;
-
-    /**
-     * Deploy a bundle available in the OBR service and eventually start it.
-     *
-     * @param bundle the bundle to deploy.
-     * @param start true to start the bundle, false else.
-     * @param deployOptional true to deploy optional bundles, false else.
-     * @throws Exception
-     */
-    void deploy(String bundle, boolean start, boolean deployOptional) throws Exception;
-
-}
diff --git a/karaf-2.3.x/management/mbeans/obr/src/main/java/org/apache/karaf/management/mbeans/obr/internal/ObrMBeanImpl.java b/karaf-2.3.x/management/mbeans/obr/src/main/java/org/apache/karaf/management/mbeans/obr/internal/ObrMBeanImpl.java
deleted file mode 100644
index bb8cf8f..0000000
--- a/karaf-2.3.x/management/mbeans/obr/src/main/java/org/apache/karaf/management/mbeans/obr/internal/ObrMBeanImpl.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.management.mbeans.obr.internal;
-
-import org.apache.felix.bundlerepository.*;
-import org.apache.karaf.management.mbeans.obr.ObrMBean;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.Version;
-
-import javax.management.NotCompliantMBeanException;
-import javax.management.StandardMBean;
-import javax.management.openmbean.*;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Implementation of the OBR MBean.
- */
-public class ObrMBeanImpl extends StandardMBean implements ObrMBean {
-
-    private static final char VERSION_DELIM = ',';
-
-    private BundleContext bundleContext;
-    private RepositoryAdmin repositoryAdmin;
-
-    public ObrMBeanImpl() throws NotCompliantMBeanException {
-        super(ObrMBean.class);
-    }
-
-    public List<String> getUrls() throws Exception {
-        Repository[] repositories = repositoryAdmin.listRepositories();
-        List<String> urls = new ArrayList<String>();
-        for (int i = 0; i < repositories.length; i++) {
-            urls.add(repositories[i].getURI());
-        }
-        return urls;
-    }
-
-    /**
-     * @deprecated use getUrls() instead.
-     */
-    public List<String> listUrls() throws Exception {
-        return getUrls();
-    }
-
-    public void addUrl(String url) throws Exception {
-        repositoryAdmin.addRepository(url);
-    }
-
-    public void removeUrl(String url) throws Exception {
-        repositoryAdmin.removeRepository(url);
-    }
-
-    public void refreshUrl(String url) throws Exception {
-        repositoryAdmin.addRepository(url);
-    }
-
-    public TabularData getBundles() throws Exception {
-        CompositeType bundleType = new CompositeType("OBR Resource", "Bundle available in the OBR",
-                new String[]{"presentationname", "symbolicname", "version"},
-                new String[]{"Presentation Name", "Symbolic Name", "Version"},
-                new OpenType[]{SimpleType.STRING, SimpleType.STRING, SimpleType.STRING});
-        TabularType tableType = new TabularType("OBR Resources", "Table of all resources/bundles available in the OBR",
-                bundleType, new String[]{"presentationname"});
-        TabularData table = new TabularDataSupport(tableType);
-
-        Resource[] resources = repositoryAdmin.discoverResources("(|(presentationname=*)(symbolicname=*))");
-        for (int i = 0; i < resources.length; i++) {
-            try {
-                CompositeData data = new CompositeDataSupport(bundleType,
-                        new String[]{"presentationname", "symbolicname", "version"},
-                        new Object[]{resources[i].getPresentationName(), resources[i].getSymbolicName(), resources[i].getVersion()});
-                table.put(data);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-        return table;
-    }
-
-    /**
-     * @deprecated use getBundles() instead.
-     */
-    public TabularData list() throws Exception {
-        return getBundles();
-    }
-
-    public void deploy(String bundle) throws Exception {
-        deploy(bundle, false, false);
-    }
-
-    public void deploy(String bundle, boolean start, boolean deployOptional) throws Exception {
-        Resolver resolver = repositoryAdmin.resolver();
-        String[] target = getTarget(bundle);
-        Resource resource = selectNewestVersion(searchRepository(repositoryAdmin, target[0], target[1]));
-        if (resource == null) {
-            throw new IllegalArgumentException("Unknown bundle " + target[0]);
-        }
-        resolver.add(resource);
-        if ((resolver.getAddedResources() != null) &&
-                (resolver.getAddedResources().length > 0)) {
-            if (resolver.resolve(deployOptional ? 0 : Resolver.NO_OPTIONAL_RESOURCES)) {
-                try {
-                    resolver.deploy(start ? Resolver.START : 0);
-                } catch (IllegalStateException ex) {
-                    throw new IllegalStateException("Can't deploy using OBR", ex);
-                }
-            }
-        }
-    }
-
-    private Resource[] searchRepository(RepositoryAdmin admin, String targetId, String targetVersion) throws InvalidSyntaxException {
-        // Try to see if the targetId is a bundle ID.
-        try {
-            Bundle bundle = getBundleContext().getBundle(Long.parseLong(targetId));
-            targetId = bundle.getSymbolicName();
-        } catch (NumberFormatException ex) {
-            // It was not a number, so ignore.
-        }
-
-        // The targetId may be a bundle name or a bundle symbolic name,
-        // so create the appropriate LDAP query.
-        StringBuffer sb = new StringBuffer("(|(presentationname=");
-        sb.append(targetId);
-        sb.append(")(symbolicname=");
-        sb.append(targetId);
-        sb.append("))");
-        if (targetVersion != null) {
-            sb.insert(0, "(&");
-            sb.append("(version=");
-            sb.append(targetVersion);
-            sb.append("))");
-        }
-        return admin.discoverResources(sb.toString());
-    }
-
-    private Resource selectNewestVersion(Resource[] resources) {
-        int idx = -1;
-        Version v = null;
-        for (int i = 0; (resources != null) && (i < resources.length); i++) {
-            if (i == 0) {
-                idx = 0;
-                v = resources[i].getVersion();
-            } else {
-                Version vtmp = resources[i].getVersion();
-                if (vtmp.compareTo(v) > 0) {
-                    idx = i;
-                    v = vtmp;
-                }
-            }
-        }
-        return (idx < 0) ? null : resources[idx];
-    }
-
-    private String[] getTarget(String bundle) {
-        String[] target;
-        int idx = bundle.indexOf(VERSION_DELIM);
-        if (idx > 0) {
-            target = new String[]{bundle.substring(0, idx), bundle.substring(idx + 1)};
-        } else {
-            target = new String[]{bundle, null};
-        }
-        return target;
-    }
-
-    public BundleContext getBundleContext() {
-        return this.bundleContext;
-    }
-
-    public void setBundleContext(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-
-    public RepositoryAdmin getRepositoryAdmin() {
-        return this.repositoryAdmin;
-    }
-
-    public void setRepositoryAdmin(RepositoryAdmin repositoryAdmin) {
-        this.repositoryAdmin = repositoryAdmin;
-    }
-
-}
diff --git a/karaf-2.3.x/management/mbeans/obr/src/main/resources/OSGI-INF/blueprint/obr-management.xml b/karaf-2.3.x/management/mbeans/obr/src/main/resources/OSGI-INF/blueprint/obr-management.xml
deleted file mode 100644
index 4669388..0000000
--- a/karaf-2.3.x/management/mbeans/obr/src/main/resources/OSGI-INF/blueprint/obr-management.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed 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.
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
-    <!-- Reference to the MBean Server -->
-    <reference id="mbeanServer" interface="javax.management.MBeanServer">
-        <reference-listener ref="mbeanRegistrer" bind-method="registerMBeanServer" unbind-method="unregisterMBeanServer"/>
-    </reference>
-
-    <!-- OBR MBean -->
-    <bean id="obrMBean" class="org.apache.karaf.management.mbeans.obr.internal.ObrMBeanImpl">
-        <property name="bundleContext" ref="blueprintBundleContext"/>
-        <property name="repositoryAdmin" ref="repositoryAdmin"/>
-    </bean>
-
-    <!-- MBean Registrer -->
-    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer" init-method="init" destroy-method="destroy">
-        <property name="mbeans">
-            <map>
-                <entry value="org.apache.karaf:type=obr,name=${karaf.name}" key-ref="obrMBean"/>
-            </map>
-        </property>
-    </bean>
-
-    <!-- Reference to the OBR RepositoryAdmin service -->
-    <reference id="repositoryAdmin" interface="org.apache.felix.bundlerepository.RepositoryAdmin"/>
-
-</blueprint>
\ No newline at end of file
diff --git a/karaf-2.3.x/management/mbeans/obr/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/management/mbeans/obr/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 3e8431b..0000000
--- a/karaf-2.3.x/management/mbeans/obr/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,24 +0,0 @@
-PSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    The obr mbean management bundle exposes an OBR MBean that can used with any JMX client (for instance JConsole).
-
-    The OBR MBean allows quite the same actions that can performed using obr:* commands:
-    \u001B[36mlistUrls()\u001B[0m
-    \u001B[36maddUrl(url)\u001B[0m
-    \u001B[36mremoveUrl(url)\u001B[0m
-    \u001B[36mrefreshUrl(url)\u001B[0m
-    \u001B[36mlist()\u001B[0m
-    \u001B[36mdeploy(bundle)\u001B[0m
-    \u001B[36mdeploy(bundle, start)\u001B[0m
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mDiagnostic\u001B[0m and \u001B[36mRemote Management via JMX\u001B[0m for the Karaf User Guide.
-
-
diff --git a/karaf-2.3.x/management/mbeans/packages/NOTICE b/karaf-2.3.x/management/mbeans/packages/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/management/mbeans/packages/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/management/mbeans/packages/pom.xml b/karaf-2.3.x/management/mbeans/packages/pom.xml
deleted file mode 100644
index 3ce222c..0000000
--- a/karaf-2.3.x/management/mbeans/packages/pom.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.management.mbeans</groupId>
-        <artifactId>mbeans</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.management.mbeans.packages</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Management :: MBeans :: Packages</name>
-    <description>The Packages MBean bundle provides a Packages MBean to manipulate the PackageAdmin service.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../../etc/appended-resources/</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                            org.apache.karaf.management.mbeans.packages;version=${project.version}
-                        </Export-Package>
-                        <Import-Package>
-                            !org.apache.karaf.management.mbeans.packages,
-                            javax.management,
-                            javax.management.loading,
-                            org.apache.karaf.management;version=${project.version},
-                            *
-                        </Import-Package>
-                        <Private-Package>
-                            org.apache.karaf.management.mbeans.packages.internal,
-                            !*
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/karaf-2.3.x/management/mbeans/packages/src/main/java/org/apache/karaf/management/mbeans/packages/PackagesMBean.java b/karaf-2.3.x/management/mbeans/packages/src/main/java/org/apache/karaf/management/mbeans/packages/PackagesMBean.java
deleted file mode 100644
index bc63086..0000000
--- a/karaf-2.3.x/management/mbeans/packages/src/main/java/org/apache/karaf/management/mbeans/packages/PackagesMBean.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.management.mbeans.packages;
-
-import java.util.List;
-
-public interface PackagesMBean {
-
-    /**
-     * Get the exported packages.
-     *
-     * @return the list of exported packages.
-     * @throws Exception
-     */
-    List<String> getExports() throws Exception;
-
-    /**
-     * Get the exported packages of a given bundle.
-     *
-     * @param bundleId the bundle ID.
-     * @return the exported packages of the bundle.
-     * @throws Exception
-     */
-    List<String> getExports(long bundleId) throws Exception;
-
-    /**
-     * Get the imported packages.
-     *
-     * @return the list of imported packages.
-     * @throws Exception
-     */
-    List<String> getImports() throws Exception;
-
-    /**
-     * Get the imported packages of a given bundle.
-     *
-     * @param bundleId the bundle ID.
-     * @return the list of imported packages of the bundle.
-     * @throws Exception
-     */
-    List<String> getImports(long bundleId) throws Exception;
-
-    /* for backward compatibility */
-
-    /**
-     * @deprecated use getExports() instead
-     */
-    List<String> exportedPackages() throws Exception;
-
-    /**
-     * @deprecated use getExports() instead
-     */
-    List<String> exportedPackages(long bundleId) throws Exception;
-
-    /**
-     * @deprecated use getImports(bundleId) instead
-     */
-    List<String> importedPackages() throws Exception;
-
-    /**
-     * @deprecated use getImports(bundleId) instead
-     */
-    List<String> importedPackages(long bundleId) throws Exception;
-
-}
diff --git a/karaf-2.3.x/management/mbeans/packages/src/main/java/org/apache/karaf/management/mbeans/packages/internal/PackagesMBeanImpl.java b/karaf-2.3.x/management/mbeans/packages/src/main/java/org/apache/karaf/management/mbeans/packages/internal/PackagesMBeanImpl.java
deleted file mode 100644
index e2581d6..0000000
--- a/karaf-2.3.x/management/mbeans/packages/src/main/java/org/apache/karaf/management/mbeans/packages/internal/PackagesMBeanImpl.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.management.mbeans.packages.internal;
-
-import org.apache.karaf.management.mbeans.packages.PackagesMBean;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.packageadmin.ExportedPackage;
-import org.osgi.service.packageadmin.PackageAdmin;
-
-import javax.management.NotCompliantMBeanException;
-import javax.management.StandardMBean;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Packages MBean implementation.
- */
-public class PackagesMBeanImpl extends StandardMBean implements PackagesMBean {
-
-    private BundleContext bundleContext;
-
-    public PackagesMBeanImpl() throws NotCompliantMBeanException {
-        super(PackagesMBean.class);
-    }
-
-    public List<String> getExports() throws Exception {
-        return getExports(-1);
-    }
-
-    public List<String> getExports(long bundleId) throws Exception {
-        List<String> exportPackages = new ArrayList<String>();
-        ServiceReference ref = bundleContext.getServiceReference(PackageAdmin.class.getName());
-        if (ref == null) {
-            throw new IllegalStateException("PackageAdmin is not available");
-        }
-        PackageAdmin packageAdmin = (PackageAdmin) bundleContext.getService(ref);
-        if (packageAdmin == null) {
-            throw new IllegalStateException("PackageAdmin is not available");
-        }
-
-        Bundle[] bundles;
-        if (bundleId >= 0) {
-            bundles = new Bundle[]{ bundleContext.getBundle(bundleId) };
-        } else {
-            bundles = bundleContext.getBundles();
-        }
-
-        for (Bundle bundle : bundles) {
-            ExportedPackage[] packages = packageAdmin.getExportedPackages(bundle);
-            if (packages != null) {
-                for (ExportedPackage exportedPackage : packages) {
-                    exportPackages.add(exportedPackage.getName());
-                }
-            }
-        }
-
-        return exportPackages;
-    }
-
-    public List<String> getImports() throws Exception {
-        return getImports(-1);
-    }
-
-    public List<String> getImports(long bundleId) throws Exception {
-        List<String> importPackages = new ArrayList<String>();
-        ServiceReference ref = bundleContext.getServiceReference(PackageAdmin.class.getName());
-        if (ref == null) {
-            throw new IllegalStateException("PackageAdmin is not available");
-        }
-        PackageAdmin packageAdmin = (PackageAdmin) bundleContext.getService(ref);
-        if (packageAdmin == null) {
-            throw new IllegalStateException("PackageAdmin is not available");
-        }
-
-        ExportedPackage[] exportedPackages;
-        if (bundleId >= 0) {
-            exportedPackages = packageAdmin.getExportedPackages(bundleContext.getBundle(bundleId));
-        } else {
-            exportedPackages = packageAdmin.getExportedPackages((Bundle) null);
-        }
-        if (exportedPackages != null) {
-            for (ExportedPackage exportedPackage : exportedPackages) {
-                Bundle[] bundles = exportedPackage.getImportingBundles();
-                if (bundles != null && bundles.length > 0) {
-                    importPackages.add(exportedPackage.getName());
-                }
-            }
-        }
-
-        return importPackages;
-    }
-
-    /**
-     * @deprecated use getExports() instead.
-     */
-    public List<String> exportedPackages() throws Exception {
-        return getExports();
-    }
-
-    /**
-     * @deprecated use getExports()
-     */
-    public List<String> exportedPackages(long bundleId) throws Exception {
-        return getExports(bundleId);
-    }
-
-    /**
-     * @deprecated use getImports() instead.
-     */
-    public List<String> importedPackages() throws Exception {
-        return getImports();
-    }
-
-    /**
-     * @deprecated use getImports() instead.
-     */
-    public List<String> importedPackages(long bundleId) throws Exception {
-        return getImports(bundleId);
-    }
-
-    public BundleContext getBundleContext() {
-        return this.bundleContext;
-    }
-
-    public void setBundleContext(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-
-}
diff --git a/karaf-2.3.x/management/mbeans/packages/src/main/resources/OSGI-INF/blueprint/packages-management.xml b/karaf-2.3.x/management/mbeans/packages/src/main/resources/OSGI-INF/blueprint/packages-management.xml
deleted file mode 100644
index e62b658..0000000
--- a/karaf-2.3.x/management/mbeans/packages/src/main/resources/OSGI-INF/blueprint/packages-management.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed 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.
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
-    <!-- Reference to the MBean Server -->
-    <reference id="mbeanServer" interface="javax.management.MBeanServer">
-        <reference-listener ref="mbeanRegistrer" bind-method="registerMBeanServer" unbind-method="unregisterMBeanServer"/>
-    </reference>
-
-    <!-- Packages MBean -->
-    <bean id="packagesMBean" class="org.apache.karaf.management.mbeans.packages.internal.PackagesMBeanImpl">
-        <property name="bundleContext" ref="blueprintBundleContext"/>
-    </bean>
-
-    <!-- MBean Registrer -->
-    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer" init-method="init" destroy-method="destroy">
-        <property name="mbeans">
-            <map>
-                <entry value="org.apache.karaf:type=packages,name=${karaf.name}" key-ref="packagesMBean"/>
-            </map>
-        </property>
-    </bean>
-
-</blueprint>
\ No newline at end of file
diff --git a/karaf-2.3.x/management/mbeans/packages/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/management/mbeans/packages/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index f669f36..0000000
--- a/karaf-2.3.x/management/mbeans/packages/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,21 +0,0 @@
-PSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    The Packages MBean management bundle exposes a Package MBean that can be used with any JMX client (for instance JConsole).
-
-    The Packages MBean allows quite the same action that can be performed using packages:* commands:
-    \u001B[36mexportPackages()\u001B[0m
-    \u001B[36mexportPackages(bundleId)\u001B[0m
-    \u001B[36mimportPackages()\u001B[0m
-    \u001B[36mimportPackages(bundleId)\u001B[0m
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mDiagnostic\u001B[0m and \u001B[36mRemote Management via JMX\u001B[0m for the Karaf User Guide.
-
-
diff --git a/karaf-2.3.x/management/mbeans/pom.xml b/karaf-2.3.x/management/mbeans/pom.xml
deleted file mode 100644
index 3f5fde8..0000000
--- a/karaf-2.3.x/management/mbeans/pom.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.management</groupId>
-        <artifactId>management</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.management.mbeans</groupId>
-    <artifactId>mbeans</artifactId>
-    <packaging>pom</packaging>
-    <name>Apache Karaf :: Management :: MBeans</name>
-
-    <modules>
-        <module>bundles</module>
-        <module>services</module>
-        <module>system</module>
-        <module>packages</module>
-        <module>config</module>
-        <module>dev</module>
-        <module>log</module>
-        <module>obr</module>
-        <module>scr</module>
-        <module>web</module>
-    </modules>
-
-</project>
\ No newline at end of file
diff --git a/karaf-2.3.x/management/mbeans/scr/NOTICE b/karaf-2.3.x/management/mbeans/scr/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/management/mbeans/scr/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/management/mbeans/scr/pom.xml b/karaf-2.3.x/management/mbeans/scr/pom.xml
deleted file mode 100644
index e561504..0000000
--- a/karaf-2.3.x/management/mbeans/scr/pom.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.management.mbeans</groupId>
-        <artifactId>mbeans</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.management.mbeans.scr</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Management :: MBeans :: Services</name>
-    <description>This bundle provides MBeans to manipulate Service Components via JMX.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.scr</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>biz.aQute</groupId>
-            <artifactId>bndlib</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.management</groupId>
-            <artifactId>org.apache.karaf.management.server</artifactId>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                            org.apache.karaf.management.mbeans.scr
-                        </Export-Package>
-                        <Private-Package>
-                            org.apache.karaf.management.mbeans.scr.internal
-                        </Private-Package>
-                        <Service-Component>*</Service-Component>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/management/mbeans/scr/src/main/java/org/apache/karaf/management/mbeans/scr/ScrServiceMBean.java b/karaf-2.3.x/management/mbeans/scr/src/main/java/org/apache/karaf/management/mbeans/scr/ScrServiceMBean.java
deleted file mode 100644
index ba04820..0000000
--- a/karaf-2.3.x/management/mbeans/scr/src/main/java/org/apache/karaf/management/mbeans/scr/ScrServiceMBean.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.management.mbeans.scr;
-
-/**
- * The management interface for SCR Components.
- */
-public interface ScrServiceMBean {
-    
-    
-    /**
-     * Presents a {@ String} array of components currently registered with the SCR.
-     * 
-     * @return String[]
-     * @throws Exception
-     */
-    String[] listComponents() throws Exception;
-
-    /**
-     * Verifies if the named component is currently in an ACTIVE state.
-     * 
-     * @param componentName the components name
-     * @return true if ACTIVE, otherwise false
-     * @throws Exception
-     */
-    boolean isComponentActive(String componentName) throws Exception;
-
-    /**
-     * Returns the named components state
-     * 
-     * @param componentName the components name
-     * @return
-     * @throws Exception
-     */
-    int componentState(String componentName) throws Exception;
-
-    /**
-     * Activates a component that is currently in a DISABLED state.
-     * 
-     * @param componentName the components name
-     * @throws Exception
-     */
-    void activateComponent(String componentName) throws Exception;
-
-    /**
-     * Disables a component that is not in an ACTIVE state.
-     * 
-     * @param componentName the components name
-     * @throws Exception
-     */
-    void deactiveateComponent(String componentName) throws Exception;
-}
diff --git a/karaf-2.3.x/management/mbeans/scr/src/main/java/org/apache/karaf/management/mbeans/scr/internal/ScrServiceMBeanImpl.java b/karaf-2.3.x/management/mbeans/scr/src/main/java/org/apache/karaf/management/mbeans/scr/internal/ScrServiceMBeanImpl.java
deleted file mode 100644
index 362117e..0000000
--- a/karaf-2.3.x/management/mbeans/scr/src/main/java/org/apache/karaf/management/mbeans/scr/internal/ScrServiceMBeanImpl.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.management.mbeans.scr.internal;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.locks.ReadWriteLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import javax.management.MBeanServer;
-import javax.management.NotCompliantMBeanException;
-import javax.management.ObjectName;
-import javax.management.StandardMBean;
-
-import aQute.bnd.annotation.component.Activate;
-import aQute.bnd.annotation.component.Deactivate;
-import aQute.bnd.annotation.component.Reference;
-
-import org.apache.felix.scr.Component;
-import org.apache.felix.scr.ScrService;
-import org.apache.karaf.management.mbeans.scr.ScrServiceMBean;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@aQute.bnd.annotation.component.Component(name = ScrServiceMBeanImpl.COMPONENT_NAME, enabled = true, immediate = true)
-public class ScrServiceMBeanImpl extends StandardMBean implements ScrServiceMBean {
-
-    public static final String OBJECT_NAME = "org.apache.karaf:type=scr,name=" + System.getProperty("karaf.name", "root");
-
-    public static final String COMPONENT_NAME = "ScrServiceMBean";
-
-    public static final String COMPONENT_LABEL = "Apache Karaf SCR Service MBean";
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(ScrServiceMBeanImpl.class);
-
-    private MBeanServer mBeanServer;
-
-    private ScrService scrService;
-
-    private ReadWriteLock lock = new ReentrantReadWriteLock();
-
-    /**
-     * Creates new Declarative Services mbean.
-     * 
-     * @throws NotCompliantMBeanException
-     */
-    public ScrServiceMBeanImpl() throws NotCompliantMBeanException {
-        super(ScrServiceMBean.class);
-    }
-
-
-    /**
-     * Service component activation call back. Called when all dependencies are
-     * satisfied.
-     * 
-     * @throws Exception
-     */
-    @Activate
-    public void activate() throws Exception {
-        LOGGER.info("Activating the " + COMPONENT_LABEL);
-        Map<Object, String> mbeans = new HashMap<Object, String>();
-        mbeans.put(this, "org.apache.karaf:type=scr,name=${karaf.name}");
-        try {
-            lock.writeLock().lock();
-            if (mBeanServer != null) {
-                mBeanServer.registerMBean(this, new ObjectName(OBJECT_NAME));
-            }
-        } catch (Exception e) {
-            LOGGER.error("Exception registering the SCR Management MBean: " + e.getLocalizedMessage(), e);
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-
-    /**
-     * Service component deactivation call back. Called after the component is
-     * in an active state when any dependencies become unsatisfied.
-     * 
-     * @throws Exception
-     */
-    @Deactivate
-    public void deactivate() throws Exception {
-        LOGGER.info("Deactivating the " + COMPONENT_LABEL);
-        try {
-            lock.writeLock().lock();
-            if (mBeanServer != null) {
-                mBeanServer.unregisterMBean(new ObjectName(OBJECT_NAME));
-            }
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    /*
-     * @see org.apache.karaf.management.mbeans.scr.ScrServiceMBean#listComponents()
-     *
-     * @return
-     * @throws Exception
-     */
-    public String[] listComponents() throws Exception {
-        Component[] components = safe(scrService.getComponents());
-        String[] componentNames = new String[components.length];
-        for (int i = 0; i < componentNames.length; i++) {
-            componentNames[i] = components[i].getName();
-        }
-        return componentNames;
-    }
-
-    /*
-     * @see org.apache.karaf.management.mbeans.scr.ScrServiceMBean#isComponentActive(java.lang.String)
-     *
-     * @param componentName
-     * @return
-     * @throws Exception
-     */
-    public boolean isComponentActive(String componentName) throws Exception {
-        return (componentState(componentName) == Component.STATE_ACTIVE) ? true : false;
-    }
-
-    /*
-     * @see org.apache.karaf.management.mbeans.scr.ScrServiceMBean#componentState(java.lang.String)
-     *
-     * @param componentName
-     * @return
-     * @throws Exception
-     */
-    public int componentState(String componentName) throws Exception {
-        int state = -1;
-        final Component component = findComponent(componentName);
-        if (component != null)
-            state = component.getState();
-        else
-            LOGGER.warn("No component found for name: " + componentName);
-        return state;
-    }
-
-    /*
-     * @see org.apache.karaf.management.mbeans.scr.ScrServiceMBean#activateComponent(java.lang.String)
-     *
-     * @param componentName
-     * @throws Exception
-     */
-    public void activateComponent(String componentName) throws Exception {
-        final Component component = findComponent(componentName);
-        if (component != null)
-            component.enable();
-        else
-            LOGGER.warn("No component found for name: " + componentName);
-    }
-
-    /*
-     * @see org.apache.karaf.management.mbeans.scr.ScrServiceMBean#deactiveateComponent(java.lang.String)
-     *
-     * @param componentName
-     * @throws Exception
-     */
-    public void deactiveateComponent(String componentName) throws Exception {
-        final Component component = findComponent(componentName);
-        if (component != null)
-            component.disable();
-        else
-            LOGGER.warn("No component found for name: " + componentName);
-    }
-
-    private Component findComponent(String componentName) {
-        Component answer = null;
-        if (scrService.getComponents(componentName) != null) {
-            Component[] components = scrService.getComponents(componentName);
-            for (Component component : safe(components)) {
-                answer = component;
-            }
-        }
-        return answer;
-    }
-
-    private Component[] safe(Component[] components) {
-        return components == null ? new Component[0] : components;
-    }
-
-    /**
-     * @param mBeanServer the mBeanServer to set
-     */
-    @Reference
-    public void setmBeanServer(MBeanServer mBeanServer) {
-        this.mBeanServer = mBeanServer;
-    }
-
-    public void unsetmBeanServer(MBeanServer mBeanServer) {
-        this.mBeanServer = null;
-    }
-
-    /**
-     * @param scrService the scrService to set
-     */
-    @Reference
-    public void setScrService(ScrService scrService) {
-        this.scrService = scrService;
-    }
-
-    public void unsetScrService(ScrService scrService) {
-        this.scrService = null;
-    }
-
-}
diff --git a/karaf-2.3.x/management/mbeans/scr/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/management/mbeans/scr/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index e8eba83..0000000
--- a/karaf-2.3.x/management/mbeans/scr/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,20 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provide MBean to manage Declarative Service Components in Karaf features via JMX.
-
-    Especially, it provides the ScrServiceMBean supporting the following operations:
-    \u001B[36mlistComponents()\u001B[0m Gets the list of the currently available components.
-    \u001B[36mactivateComponent(String)\u001B[0m Activates a component for the given component name.
-    \u001B[36mdeactiveateComponent(String)\u001B[0m Deactivates a component for the given component name.
-    \u001B[36misComponentActive(String)\u001B[0m Check to see if a given component is in an ACTIVE state.
-    
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mDeclarative Services\u001B[0m and \u001B[Remote Management via JMX\u001B[0m sections of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/management/mbeans/services/NOTICE b/karaf-2.3.x/management/mbeans/services/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/management/mbeans/services/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/management/mbeans/services/pom.xml b/karaf-2.3.x/management/mbeans/services/pom.xml
deleted file mode 100644
index 09f8020..0000000
--- a/karaf-2.3.x/management/mbeans/services/pom.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.management.mbeans</groupId>
-        <artifactId>mbeans</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.management.mbeans.services</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Management :: MBeans :: Services</name>
-    <description>The Services MBean bundle provides a JMX MBean to manipulate the OSGi services.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../../etc/appended-resources/</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                            org.apache.karaf.management.mbeans.services;version=${project.version}
-                        </Export-Package>
-                        <Import-Package>
-                            !org.apache.karaf.management.mbeans.services,
-                            javax.management,
-                            javax.management.loading,
-                            org.apache.karaf.management;version=${project.version},
-                            *
-                        </Import-Package>
-                        <Private-Package>
-                            org.apache.karaf.management.mbeans.services.internal,
-                            !*
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/management/mbeans/services/src/main/java/org/apache/karaf/management/mbeans/services/ServicesMBean.java b/karaf-2.3.x/management/mbeans/services/src/main/java/org/apache/karaf/management/mbeans/services/ServicesMBean.java
deleted file mode 100644
index 6326ec5..0000000
--- a/karaf-2.3.x/management/mbeans/services/src/main/java/org/apache/karaf/management/mbeans/services/ServicesMBean.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.management.mbeans.services;
-
-import javax.management.openmbean.TabularData;
-
-/**
- * Services MBean.
- */
-public interface ServicesMBean {
-
-    /**
-     * Get the list of services.
-     *
-     * @return the list of services.
-     * @throws Exception
-     */
-    TabularData getServices() throws Exception;
-
-    /**
-     * Get the list of services, eventually currently in use.
-     *
-     * @param inUse true to list only the services in use, false else.
-     * @return the list of services.
-     * @throws Exception
-     */
-    TabularData getServices(boolean inUse) throws Exception;
-
-    /**
-     * Get the list of services provided by a given bundle.
-     *
-     * @param bundleId the bundle ID.
-     * @return the list of services provided by the given bundle.
-     * @throws Exception
-     */
-    TabularData getServices(long bundleId) throws Exception;
-
-    /**
-     * Get the list of services provided by a given bundle and eventually in use.
-     *
-     * @param bundleId the bundle ID.
-     * @param inUse true to list only the services in use, false else.
-     * @return the list of services.
-     * @throws Exception
-     */
-    TabularData getServices(long bundleId, boolean inUse) throws Exception;
-
-    /**
-     * @deprecated use the Services attribute instead
-     */
-    TabularData list() throws Exception;
-
-    /**
-     * @deprecated use getServices() instead
-     */
-    TabularData list(boolean inUse) throws Exception;
-
-    /**
-     * @deprecated use getServices() instead
-     */
-    TabularData list(long bundleId) throws Exception;
-
-    /**
-     * @deprecated use getServices() instead
-     */
-    TabularData list(long bundleId, boolean inUse) throws Exception;
-
-}
diff --git a/karaf-2.3.x/management/mbeans/services/src/main/java/org/apache/karaf/management/mbeans/services/internal/ServicesMBeanImpl.java b/karaf-2.3.x/management/mbeans/services/src/main/java/org/apache/karaf/management/mbeans/services/internal/ServicesMBeanImpl.java
deleted file mode 100644
index 9089b3c..0000000
--- a/karaf-2.3.x/management/mbeans/services/src/main/java/org/apache/karaf/management/mbeans/services/internal/ServicesMBeanImpl.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.management.mbeans.services.internal;
-
-import org.apache.karaf.management.mbeans.services.ServicesMBean;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-
-import javax.management.NotCompliantMBeanException;
-import javax.management.StandardMBean;
-import javax.management.openmbean.*;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Implementation of the Services MBean.
- */
-public class ServicesMBeanImpl extends StandardMBean implements ServicesMBean {
-
-    private BundleContext bundleContext;
-
-    public ServicesMBeanImpl() throws NotCompliantMBeanException {
-        super(ServicesMBean.class);
-    }
-
-    public TabularData getServices() throws Exception {
-        return getServices(-1, false);
-    }
-
-    public TabularData getServices(boolean inUse) throws Exception {
-        return getServices(-1, inUse);
-    }
-
-    public TabularData getServices(long bundleId) throws Exception {
-        return getServices(bundleId, false);
-    }
-
-    public TabularData getServices(long bundleId, boolean inUse) throws Exception {
-        CompositeType serviceType = new CompositeType("Service", "OSGi Service",
-                new String[]{"Interfaces", "Properties"},
-                new String[]{"Interfaces class name of the service", "Properties of the service"},
-                new OpenType[]{new ArrayType(1, SimpleType.STRING), new ArrayType(1, SimpleType.STRING)});
-        TabularType tableType = new TabularType("Services", "Table of OSGi Services", serviceType,
-                new String[]{"Interfaces"});
-        TabularData table = new TabularDataSupport(tableType);
-
-        Bundle[] bundles;
-        if (bundleId >= 0) {
-            bundles = new Bundle[]{bundleContext.getBundle(bundleId)};
-        } else {
-            bundles = bundleContext.getBundles();
-        }
-        for (Bundle bundle : bundles) {
-            try {
-                ServiceReference[] serviceReferences;
-                if (inUse) {
-                    serviceReferences = bundle.getServicesInUse();
-                } else {
-                    serviceReferences = bundle.getRegisteredServices();
-                }
-                if (serviceReferences != null) {
-                    for (ServiceReference reference : serviceReferences) {
-                        String[] interfaces = (String[]) reference.getProperty("objectClass");
-                        List<String> properties = new ArrayList<String>();
-                        for (String key : reference.getPropertyKeys()) {
-                            properties.add(key + " = " + reference.getProperty(key));
-                        }
-                        CompositeData data = new CompositeDataSupport(serviceType,
-                                new String[]{"Interfaces", "Properties"},
-                                new Object[]{interfaces, properties.toArray(new String[0])});
-                        table.put(data);
-                    }
-                }
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-        return table;
-    }
-
-    /* for backward compatibility */
-
-    public TabularData list() throws Exception {
-        return getServices();
-    }
-
-    public TabularData list(boolean inUse) throws Exception {
-        return getServices(inUse);
-    }
-
-    public TabularData list(long bundleId) throws Exception {
-        return getServices(bundleId);
-    }
-
-    public TabularData list(long bundleId, boolean inUse) throws Exception {
-        return getServices(bundleId, inUse);
-    }
-
-    public BundleContext getBundleContext() {
-        return this.bundleContext;
-    }
-
-    public void setBundleContext(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-
-}
diff --git a/karaf-2.3.x/management/mbeans/services/src/main/resources/OSGI-INF/blueprint/services-management.xml b/karaf-2.3.x/management/mbeans/services/src/main/resources/OSGI-INF/blueprint/services-management.xml
deleted file mode 100644
index cb2d853..0000000
--- a/karaf-2.3.x/management/mbeans/services/src/main/resources/OSGI-INF/blueprint/services-management.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed 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.
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
-    <!-- Reference to the MBean Server -->
-    <reference id="mbeanServer" interface="javax.management.MBeanServer">
-        <reference-listener ref="mbeanRegistrer" bind-method="registerMBeanServer" unbind-method="unregisterMBeanServer"/>
-    </reference>
-
-    <!-- Services MBean -->
-    <bean id="servicesMBean" class="org.apache.karaf.management.mbeans.services.internal.ServicesMBeanImpl">
-        <property name="bundleContext" ref="blueprintBundleContext"/>
-    </bean>
-
-    <!-- MBean Registrer -->
-    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer" init-method="init" destroy-method="destroy">
-        <property name="mbeans">
-            <map>
-                <entry value="org.apache.karaf:type=services,name=${karaf.name}" key-ref="servicesMBean"/>
-            </map>
-        </property>
-    </bean>
-
-</blueprint>
\ No newline at end of file
diff --git a/karaf-2.3.x/management/mbeans/services/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/management/mbeans/services/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 5f52639..0000000
--- a/karaf-2.3.x/management/mbeans/services/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,18 +0,0 @@
-PSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    The services mbean management bundle exposes a Services MBean that can used with any JMX client (for instance JConsole).
-
-    The Services MBean allows quite the same action that can be performed using osgi:ls (and services:*) commands:
-    \u001B[36mlist()\u001B[0m
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mDiagnostic\u001B[0m and \u001B[36mRemote Management via JMX\u001B[0m for the Karaf User Guide.
-
-
diff --git a/karaf-2.3.x/management/mbeans/system/NOTICE b/karaf-2.3.x/management/mbeans/system/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/management/mbeans/system/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/management/mbeans/system/pom.xml b/karaf-2.3.x/management/mbeans/system/pom.xml
deleted file mode 100644
index ec51d1b..0000000
--- a/karaf-2.3.x/management/mbeans/system/pom.xml
+++ /dev/null
@@ -1,102 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.management.mbeans</groupId>
-        <artifactId>mbeans</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.management.mbeans.system</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Management :: MBeans :: System</name>
-    <description>The System MBean bundle provides a JMX MBean to manipulate the Karaf system container.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../../etc/appended-resources/</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.utils</artifactId>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                            org.apache.karaf.management.mbeans.system;version=${project.version}
-                        </Export-Package>
-                        <Import-Package>
-                            !org.apache.karaf.management.mbeans.system,
-                            javax.management,
-                            javax.management.loading,
-                            org.apache.karaf.management;version=${project.version},
-                            *
-                        </Import-Package>
-                        <Private-Package>
-                            org.apache.karaf.management.mbeans.system.internal,
-                            org.apache.felix.utils*,
-                            !*
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/karaf-2.3.x/management/mbeans/system/src/main/java/org/apache/karaf/management/mbeans/system/SystemMBean.java b/karaf-2.3.x/management/mbeans/system/src/main/java/org/apache/karaf/management/mbeans/system/SystemMBean.java
deleted file mode 100644
index dc6f0be..0000000
--- a/karaf-2.3.x/management/mbeans/system/src/main/java/org/apache/karaf/management/mbeans/system/SystemMBean.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.management.mbeans.system;
-
-/**
- * System MBean.
- */
-public interface SystemMBean {
-
-    /**
-     * Shutdown the Karaf instance.
-     *
-     * @throws Exception
-     */
-    void halt() throws Exception;
-
-    /**
-     * Shutdown the Karaf instance at a certain time.
-     *
-     * @param time the time when to shutdown the Karaf instance.
-     * @throws Exception
-     */
-    void halt(String time) throws Exception;
-
-    /**
-     * Reboot the Karaf instance.
-     *
-     * @throws Exception
-     */
-    void reboot() throws Exception;
-
-    /**
-     * Reboot the Karaf instance at a certain time and eventually cleanup the instance files.
-     *
-     * @param time the time when to reboot the Karaf instance.
-     * @param clean true to clean the instance files, false else.
-     * @throws Exception
-     */
-    void reboot(String time, boolean clean) throws Exception;
-
-    /**
-     * Get the name of the Karaf instance.
-     *
-     * @return the Karaf instance name.
-     */
-    String getName();
-
-    /**
-     * Set the name of the Karaf instance.
-     *
-     * @param name the new Karaf instance name. NB: the change require an instance reboot.
-     */
-    void setName(String name);
-
-    /**
-     * Get the Karaf version used by the Karaf instance.
-     *
-     * @return the Karaf version.
-     */
-    String getVersion();
-
-    /**
-     * Get the current OSGi framework in use.
-     *
-     * @return the name of the OSGi framework in use.
-     */
-    String getFramework();
-
-    /**
-     * Change the OSGi framework to run Karaf.
-     *
-     * @param framework the name of the framework to use (felix or equinox).
-     */
-    void setFramework(String framework) throws Exception;
-
-    /**
-     * Enable or disable the debug option on the OSGi framework.
-     *
-     * @param debug true to enable debug, false else.
-     */
-    void setFrameworkDebug(boolean debug) throws Exception;
-
-    /**
-     * Get the system start level.
-     *
-     * @return the current system start level.
-     */
-    int getStartLevel();
-
-    /**
-     * Set the system start level.
-     *
-     * @param startLevel the new system start level.
-     */
-    void setStartLevel(int startLevel);
-
-    /* for backward compatibility */
-
-    /**
-     * @deprecated use halt() instead.
-     */
-    void shutdown() throws Exception;
-
-}
diff --git a/karaf-2.3.x/management/mbeans/system/src/main/java/org/apache/karaf/management/mbeans/system/internal/SystemMBeanImpl.java b/karaf-2.3.x/management/mbeans/system/src/main/java/org/apache/karaf/management/mbeans/system/internal/SystemMBeanImpl.java
deleted file mode 100644
index e625d2a..0000000
--- a/karaf-2.3.x/management/mbeans/system/src/main/java/org/apache/karaf/management/mbeans/system/internal/SystemMBeanImpl.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.management.mbeans.system.internal;
-
-import org.apache.felix.utils.properties.Properties;
-import org.apache.karaf.management.mbeans.system.SystemMBean;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.startlevel.FrameworkStartLevel;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.management.NotCompliantMBeanException;
-import javax.management.StandardMBean;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-
-/**
- * System MBean implementation.
- */
-public class SystemMBeanImpl extends StandardMBean implements SystemMBean {
-
-    private final static transient Logger LOGGER = LoggerFactory.getLogger(SystemMBeanImpl.class);
-
-    private BundleContext bundleContext;
-
-    public SystemMBeanImpl() throws NotCompliantMBeanException {
-        super(SystemMBean.class);
-    }
-
-    public String getName() {
-        return bundleContext.getProperty("karaf.name");
-    }
-
-    public void setName(String name) {
-        try {
-            String karafBase = bundleContext.getProperty("karaf.base");
-            File etcDir = new File(karafBase, "etc");
-            File syspropsFile = new File(etcDir, "system.properties");
-            FileInputStream fis = new FileInputStream(syspropsFile);
-            Properties props = new Properties();
-            props.load(fis);
-            fis.close();
-            props.setProperty("karaf.name", name);
-            FileOutputStream fos = new FileOutputStream(syspropsFile);
-            props.store(fos, "");
-            fos.close();
-        } catch (Exception e) {
-            throw new RuntimeException(e.getMessage(), e);
-        }
-    }
-
-    public String getVersion() {
-        return System.getProperty("karaf.version");
-    }
-
-    public void halt() throws Exception {
-        halt(null);
-    }
-
-    public void halt(String time) throws Exception {
-        shutdown(timeToSleep(time));
-    }
-
-    public void reboot() throws Exception {
-        reboot(null, false);
-    }
-
-    public void reboot(String time, boolean cleanup) throws Exception {
-        reboot(timeToSleep(time), cleanup);
-    }
-
-    public void setFrameworkDebug(boolean debug) throws Exception {
-        Properties properties = new Properties(new File(System.getProperty("karaf.base"), "etc/config.properties"));
-        if (debug) {
-            properties.put("felix.log.level", "4");
-            properties.put("osgi.debug", "etc/equinox-debug.properties");
-            // TODO populate the equinox-debug.properties file with the one provided in shell/dev module
-        } else {
-            properties.remove("felix.log.level");
-            properties.remove("osgi.debug");
-        }
-        properties.save();
-    }
-
-    public String getFramework() {
-        if (bundleContext.getBundle(0).getSymbolicName().contains("felix")) {
-            return "felix";
-        } else {
-            return "equinox";
-        }
-    }
-
-    public void setFramework(String framework) throws Exception {
-        Properties properties = new Properties(new File(System.getProperty("karaf.base"), "etc/config.properties"));
-        if (!framework.equals("felix") || !framework.equals("equinox"))
-            throw new IllegalArgumentException("Framework name is not supported. Only felix or equinox are supported.");
-        properties.put("karaf.framework", framework);
-        properties.save();
-    }
-
-    public void setStartLevel(int startLevel) {
-        Bundle b = getBundleContext().getBundle(0);
-        FrameworkStartLevel fsl = (FrameworkStartLevel) b.adapt(FrameworkStartLevel.class);
-        fsl.setStartLevel(startLevel, null);
-    }
-
-    public int getStartLevel() {
-        Bundle b = getBundleContext().getBundle(0);
-        FrameworkStartLevel fsl = (FrameworkStartLevel) b.adapt(FrameworkStartLevel.class);
-        return fsl.getStartLevel();
-    }
-
-    /* for backward compatibility */
-
-    /**
-     * @deprecated use halt() instead.
-     */
-    public void shutdown() throws Exception {
-        halt();
-    }
-
-    public BundleContext getBundleContext() {
-        return this.bundleContext;
-    }
-
-    public void setBundleContext(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-
-    private void shutdown(final long sleep) {
-        new Thread() {
-            public void run() {
-                try {
-                    sleepWithMsg(sleep, "Shutdown in " + sleep / 1000 / 60 + " minute(s)");
-                    getBundleContext().getBundle(0).stop();
-                } catch (Exception e) {
-                    LOGGER.error("Halt error", e);
-                }
-            }
-        }.start();
-    }
-
-    private void reboot(final long sleep, final boolean clean) {
-        new Thread() {
-            public void run() {
-                try {
-                    sleepWithMsg(sleep, "Reboot in " + sleep / 1000 / 60 + " minute(s)");
-                    System.setProperty("karaf.restart", "true");
-                    System.setProperty("karaf.restart.clean", Boolean.toString(clean));
-                    bundleContext.getBundle(0).stop();
-                } catch (Exception e) {
-                    LOGGER.error("Reboot error", e);
-                }
-            }
-        }.start();
-    }
-
-    private void sleepWithMsg(final long sleep, String msg)
-            throws InterruptedException {
-        if (sleep > 0) {
-            LOGGER.info(msg);
-            System.err.println(msg);
-        }
-        Thread.sleep(sleep);
-    }
-
-    /**
-     * Convert a time string to sleep period (in millisecond).
-     *
-     * @param time the time string.
-     * @return the corresponding sleep period in millisecond.
-     */
-    private long timeToSleep(String time) throws Exception {
-        long sleep = 0;
-        if (time != null) {
-            if (!time.equals("now")) {
-                if (time.startsWith("+")) {
-                    // delay in number of minutes provided
-                    time = time.substring(1);
-                    try {
-                        sleep = Long.parseLong(time) * 60 * 1000;
-                    } catch (Exception e) {
-                        throw new IllegalArgumentException("Time " + time + " is not valid");
-                    }
-                } else {
-                    // try to parse the date in hh:mm
-                    String[] strings = time.split(":");
-                    if (strings.length != 2) {
-                        throw new IllegalArgumentException("Time " + time + " is not valid");
-                    }
-                    GregorianCalendar currentDate = new GregorianCalendar();
-                    GregorianCalendar shutdownDate = new GregorianCalendar(currentDate.get(Calendar.YEAR), currentDate.get(Calendar.MONTH), currentDate.get(Calendar.DATE), Integer.parseInt(strings[0]), Integer.parseInt(strings[1]));
-                    if (shutdownDate.before(currentDate)) {
-                        shutdownDate.set(Calendar.DATE, shutdownDate.get(Calendar.DATE) + 1);
-                    }
-                    sleep = shutdownDate.getTimeInMillis() - currentDate.getTimeInMillis();
-                }
-            }
-        }
-        return sleep;
-    }
-
-}
diff --git a/karaf-2.3.x/management/mbeans/system/src/main/resources/OSGI-INF/blueprint/system-management.xml b/karaf-2.3.x/management/mbeans/system/src/main/resources/OSGI-INF/blueprint/system-management.xml
deleted file mode 100644
index 6396ec5..0000000
--- a/karaf-2.3.x/management/mbeans/system/src/main/resources/OSGI-INF/blueprint/system-management.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed 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.
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
-    <!-- Reference to the MBean Server -->
-    <reference id="mbeanServer" interface="javax.management.MBeanServer">
-        <reference-listener ref="mbeanRegistrer" bind-method="registerMBeanServer" unbind-method="unregisterMBeanServer"/>
-    </reference>
-
-    <!-- System MBean -->
-    <bean id="systemMBean" class="org.apache.karaf.management.mbeans.system.internal.SystemMBeanImpl">
-        <property name="bundleContext" ref="blueprintBundleContext"/>
-    </bean>
-
-    <!-- MBean Registrer -->
-    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer" init-method="init" destroy-method="destroy">
-        <property name="mbeans">
-            <map>
-                <entry value="org.apache.karaf:type=system,name=${karaf.name}" key-ref="systemMBean"/>
-            </map>
-        </property>
-    </bean>
-
-</blueprint>
\ No newline at end of file
diff --git a/karaf-2.3.x/management/mbeans/system/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/management/mbeans/system/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 8c96394..0000000
--- a/karaf-2.3.x/management/mbeans/system/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,19 +0,0 @@
-PSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    The System MBean management bundle exposes a System MBean that can used with any JMX client (for instance JConsole).
-
-    The System MBean allows quite the same action that can be performed using osgi:shutdown, etc commands:
-    \u001B[36mshutdown()\u001B[0m
-    \u001B[36mshutdown(time)\u001B[0m
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mDiagnostic\u001B[0m and \u001B[36mRemote Management via JMX\u001B[0m for the Karaf User Guide.
-
-
diff --git a/karaf-2.3.x/management/mbeans/web/NOTICE b/karaf-2.3.x/management/mbeans/web/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/management/mbeans/web/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/management/mbeans/web/pom.xml b/karaf-2.3.x/management/mbeans/web/pom.xml
deleted file mode 100644
index 9112293..0000000
--- a/karaf-2.3.x/management/mbeans/web/pom.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.management.mbeans</groupId>
-        <artifactId>mbeans</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.management.mbeans.web</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Management :: MBeans :: Web</name>
-    <description>The Web MBean bundle provides a JMX MBean to manipulate to manipulate web application bundles.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../../etc/appended-resources/</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                            org.apache.karaf.management.mbeans.web;version=${project.version}
-                        </Export-Package>
-                        <Import-Package>
-                            javax.management,
-                            javax.management.loading,
-                            org.apache.karaf.management;version=${project.version},
-                            *
-                        </Import-Package>
-                        <Private-Package>
-                            org.apache.karaf.management.mbeans.web.internal,
-                            !*
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/karaf-2.3.x/management/mbeans/web/src/main/java/org/apache/karaf/management/mbeans/web/WebMBean.java b/karaf-2.3.x/management/mbeans/web/src/main/java/org/apache/karaf/management/mbeans/web/WebMBean.java
deleted file mode 100644
index 7e353df..0000000
--- a/karaf-2.3.x/management/mbeans/web/src/main/java/org/apache/karaf/management/mbeans/web/WebMBean.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.management.mbeans.web;
-
-import javax.management.openmbean.TabularData;
-
-/**
- * Web MBean.
- */
-public interface WebMBean {
-
-    TabularData list() throws Exception;
-
-}
diff --git a/karaf-2.3.x/management/mbeans/web/src/main/java/org/apache/karaf/management/mbeans/web/internal/WebMBeanImpl.java b/karaf-2.3.x/management/mbeans/web/src/main/java/org/apache/karaf/management/mbeans/web/internal/WebMBeanImpl.java
deleted file mode 100644
index 5009f77..0000000
--- a/karaf-2.3.x/management/mbeans/web/src/main/java/org/apache/karaf/management/mbeans/web/internal/WebMBeanImpl.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.management.mbeans.web.internal;
-
-import org.apache.karaf.management.mbeans.web.WebMBean;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-
-import javax.management.NotCompliantMBeanException;
-import javax.management.StandardMBean;
-import javax.management.openmbean.*;
-
-/**
- * Web MBean implementation.
- */
-public class WebMBeanImpl extends StandardMBean implements WebMBean {
-
-    private BundleContext bundleContext;
-
-    public WebMBeanImpl() throws NotCompliantMBeanException {
-        super(WebMBean.class);
-    }
-
-    public TabularData list() throws Exception {
-        CompositeType webType = new CompositeType("Web Bundle", "An OSGi Web bundle",
-                new String[]{"ID", "Name", "Context"},
-                new String[]{"ID of the bundle", "Name of the bundle", "Web Context"},
-                new OpenType[]{SimpleType.STRING, SimpleType.STRING, SimpleType.STRING});
-        TabularType tableType = new TabularType("Web Bundles", "Table of web bundles", webType,
-                new String[]{"ID"});
-        TabularData table = new TabularDataSupport(tableType);
-        for (Bundle bundle : bundleContext.getBundles()) {
-            try {
-                String webContext = (String) bundle.getHeaders().get("Web-ContextPath");
-                if (webContext == null)
-                    webContext = (String) bundle.getHeaders().get("Webapp-Context");
-                if (webContext == null)
-                    continue;
-
-                webContext.trim();
-                if (!webContext.startsWith("/")) {
-                    webContext = "/" + webContext;
-                }
-
-                String name = (String) bundle.getHeaders().get(Constants.BUNDLE_NAME);
-                name = (name == null) ? bundle.getSymbolicName() : name;
-                // If there is no symbolic name, resort to location.
-                name = (name == null) ? bundle.getLocation() : name;
-
-                CompositeData data = new CompositeDataSupport(webType,
-                        new String[]{"ID", "Name", "Context"},
-                        new Object[]{bundle.getBundleId(), name, webContext});
-                table.put(data);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-        return table;
-    }
-
-    public BundleContext getBundleContext() {
-        return this.bundleContext;
-    }
-
-    public void setBundleContext(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-
-}
diff --git a/karaf-2.3.x/management/mbeans/web/src/main/resources/OSGI-INF/blueprint/web-management.xml b/karaf-2.3.x/management/mbeans/web/src/main/resources/OSGI-INF/blueprint/web-management.xml
deleted file mode 100644
index 0d112e9..0000000
--- a/karaf-2.3.x/management/mbeans/web/src/main/resources/OSGI-INF/blueprint/web-management.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed 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.
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
-    <!-- Reference to the MBean Server -->
-    <reference id="mbeanServer" interface="javax.management.MBeanServer">
-        <reference-listener ref="mbeanRegistrer" bind-method="registerMBeanServer" unbind-method="unregisterMBeanServer"/>
-    </reference>
-
-    <!-- Web MBean -->
-    <bean id="webMBean" class="org.apache.karaf.management.mbeans.web.internal.WebMBeanImpl">
-        <property name="bundleContext" ref="blueprintBundleContext"/>
-    </bean>
-
-    <!-- MBean Registrer -->
-    <bean id="mbeanRegistrer" class="org.apache.karaf.management.MBeanRegistrer" init-method="init" destroy-method="destroy">
-        <property name="mbeans">
-            <map>
-                <entry value="org.apache.karaf:type=web,name=${karaf.name}" key-ref="webMBean"/>
-            </map>
-        </property>
-    </bean>
-
-</blueprint>
\ No newline at end of file
diff --git a/karaf-2.3.x/management/mbeans/web/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/management/mbeans/web/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 40e7dc9..0000000
--- a/karaf-2.3.x/management/mbeans/web/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,18 +0,0 @@
-PSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    The Web MBean management bundle exposes a Web MBean that can be used with any JMX client (for instance JConsole).
-
-    The Web MBean allows quite the same action that can be performed using web:* commands:
-    \u001B[36mlist()\u001B[0m
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mDiagnostic\u001B[0m and \u001B[36mRemote Management via JMX\u001B[0m for the Karaf User Guide.
-
-
diff --git a/karaf-2.3.x/management/pom.xml b/karaf-2.3.x/management/pom.xml
deleted file mode 100644
index 1410b87..0000000
--- a/karaf-2.3.x/management/pom.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>karaf</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.management</groupId>
-    <artifactId>management</artifactId>
-    <packaging>pom</packaging>
-    <name>Apache Karaf :: Management</name>
-
-    <modules>
-        <module>server</module>
-        <module>mbeans</module>
-    </modules>
-
-</project>
\ No newline at end of file
diff --git a/karaf-2.3.x/management/server/NOTICE b/karaf-2.3.x/management/server/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/management/server/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/management/server/pom.xml b/karaf-2.3.x/management/server/pom.xml
deleted file mode 100644
index 25f47f1..0000000
--- a/karaf-2.3.x/management/server/pom.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.management</groupId>
-        <artifactId>management</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.management.server</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Management</name>
-    <description>This bundle starts the Karaf embedded MBean server and RMI registry allowing users to use JMX to manage Karaf.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.jaas</groupId>
-            <artifactId>org.apache.karaf.jaas.config</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicemix.bundles</groupId>
-            <artifactId>org.apache.servicemix.bundles.junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymock</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymockclassextension</artifactId>
-            <version>${easymock.version}</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                            org.apache.karaf.management;version=${project.version}
-                        </Export-Package>
-                        <Import-Package>
-                            javax.management,
-                            *
-                        </Import-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-       </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/management/server/src/main/java/org/apache/karaf/management/ConnectorServerFactory.java b/karaf-2.3.x/management/server/src/main/java/org/apache/karaf/management/ConnectorServerFactory.java
deleted file mode 100644
index 6e45587..0000000
--- a/karaf-2.3.x/management/server/src/main/java/org/apache/karaf/management/ConnectorServerFactory.java
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.management;
-
-import org.apache.karaf.jaas.config.KeystoreManager;
-
-import java.io.IOException;
-import java.net.BindException;
-import java.net.ServerSocket;
-import java.rmi.server.RMIClientSocketFactory;
-import java.rmi.server.RMIServerSocketFactory;
-import java.security.GeneralSecurityException;
-import java.util.Map;
-
-import javax.management.JMException;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-import javax.management.remote.JMXConnectorServer;
-import javax.management.remote.JMXConnectorServerFactory;
-import javax.management.remote.JMXServiceURL;
-import javax.management.remote.rmi.RMIConnectorServer;
-import javax.net.ssl.KeyManagerFactory;
-import javax.net.ssl.SSLServerSocket;
-import javax.net.ssl.SSLServerSocketFactory;
-import javax.rmi.ssl.SslRMIClientSocketFactory;
-
-public class ConnectorServerFactory {
-
-    private enum AuthenticatorType { NONE, PASSWORD, CERTIFICATE };
-
-    private MBeanServer server;
-    private String serviceUrl;
-    private Map environment;
-    private ObjectName objectName;
-    private boolean threaded = false;
-    private boolean daemon = false;
-    private JMXConnectorServer connectorServer;
-
-    private long keyStoreAvailabilityTimeout = 5000;
-    private AuthenticatorType authenticatorType = AuthenticatorType.PASSWORD;
-    private boolean secured;
-    private KeystoreManager keystoreManager;
-    private String algorithm;
-    private String secureProtocol;
-    private String keyStore;
-    private String trustStore;
-    private String keyAlias;
-
-    public MBeanServer getServer() {
-        return server;
-    }
-
-    public void setServer(MBeanServer server) {
-        this.server = server;
-    }
-
-    public String getServiceUrl() {
-        return serviceUrl;
-    }
-
-    public void setServiceUrl(String serviceUrl) {
-        this.serviceUrl = serviceUrl;
-    }
-
-    public Map getEnvironment() {
-        return environment;
-    }
-
-    public void setEnvironment(Map environment) {
-        this.environment = environment;
-    }
-
-    public ObjectName getObjectName() {
-        return objectName;
-    }
-
-    public void setObjectName(ObjectName objectName) {
-        this.objectName = objectName;
-    }
-
-    public boolean isThreaded() {
-        return threaded;
-    }
-
-    public void setThreaded(boolean threaded) {
-        this.threaded = threaded;
-    }
-
-    public boolean isDaemon() {
-        return daemon;
-    }
-
-    public void setDaemon(boolean daemon) {
-        this.daemon = daemon;
-    }
-
-    public String getAuthenticatorType() {
-        return this.authenticatorType.name().toLowerCase();
-    }
-
-    /**
-     * Authenticator type to use. Acceptable values are "none", "password", and "certificate".
-     *
-     * @param value the authenticator type to use.
-     */
-    public void setAuthenticatorType(String value) {
-        this.authenticatorType = AuthenticatorType.valueOf(value.toUpperCase());
-    }
-
-    /**
-     * Use this param to allow the KeystoreManager to wait for expected keystores to be loaded by other bundle
-     *
-     * @param keyStoreAvailabilityTimeout the keystore availability timeout in milliseconds
-     */
-    public void setKeyStoreAvailabilityTimeout(long keyStoreAvailabilityTimeout) {
-        this.keyStoreAvailabilityTimeout = keyStoreAvailabilityTimeout;
-    }
-
-    public boolean isSecured() {
-        return this.secured;
-    }
-
-    public void setSecured(boolean secured) {
-        this.secured = secured;
-    }
-
-    public void setKeystoreManager(KeystoreManager keystoreManager) {
-        this.keystoreManager = keystoreManager;
-    }
-
-    public KeystoreManager getKeystoreManager() {
-        return this.keystoreManager;
-    }
-
-    public String getKeyStore() {
-        return this.keyStore;
-    }
-
-    public void setKeyStore(String keyStore) {
-        this.keyStore = keyStore;
-    }
-
-    public String getTrustStore() {
-        return this.trustStore;
-    }
-
-    public void setTrustStore(String trustStore) {
-        this.trustStore = trustStore;
-    }
-
-    public String getKeyAlias() {
-        return this.keyAlias;
-    }
-
-    public void setKeyAlias(String keyAlias) {
-        this.keyAlias = keyAlias;
-    }
-
-    public String getAlgorithm() {
-        return this.algorithm;
-    }
-
-    /**
-     * Algorithm to use.
-     * As different JVMs have different implementation available, the default algorithm can be used by supplying the value "Default".
-     *
-     * @param algorithm the algorithm to use, or "Default" to use the default from {@link javax.net.ssl.KeyManagerFactory#getDefaultAlgorithm()}
-     */
-    public void setAlgorithm(String algorithm) {
-        if ("default".equalsIgnoreCase(algorithm)) {
-            this.algorithm = KeyManagerFactory.getDefaultAlgorithm();
-        } else {
-            this.algorithm = algorithm;
-        }
-    }
-
-    public String getSecureProtocol() {
-        return this.secureProtocol;
-    }
-
-    public void setSecureProtocol(String secureProtocol) {
-        this.secureProtocol = secureProtocol;
-    }
-
-    private boolean isClientAuth() {
-        return this.authenticatorType.equals(AuthenticatorType.CERTIFICATE);
-    }
-
-    public void init() throws Exception {
-        if (this.server == null) {
-            throw new IllegalArgumentException("server must be set");
-        }
-        JMXServiceURL url = new JMXServiceURL(this.serviceUrl);
-
-        if (isClientAuth()) {
-            this.secured = true;
-        }
-
-        if (this.secured) {
-            this.setupSsl();
-        }
-
-        if (!AuthenticatorType.PASSWORD.equals(this.authenticatorType)) {
-            this.environment.remove("jmx.remote.authenticator");
-        }
-
-        this.connectorServer = JMXConnectorServerFactory.newJMXConnectorServer(url, this.environment, this.server);
-        if (this.objectName != null) {
-            this.server.registerMBean(this.connectorServer, this.objectName);
-        }
-
-        try {
-            if (this.threaded) {
-                Thread connectorThread = new Thread() {
-                    public void run() {
-                        try {
-                            Thread.currentThread().setContextClassLoader(ConnectorServerFactory.class.getClassLoader());
-                            connectorServer.start();
-                        } catch (IOException ex) {
-                            if (ex.getCause() instanceof BindException){
-                                // we want just the port message
-                                int endIndex = ex.getMessage().indexOf("nested exception is");
-                                // check to make sure we do not get an index out of range
-                                if (endIndex > ex.getMessage().length() || endIndex < 0){
-                                    endIndex = ex.getMessage().length();
-                                }
-                                throw new RuntimeException("\n" + ex.getMessage().substring(0, endIndex) +
-                                        "\nYou may have started two containers.  If you need to start a second container or the default ports are already in use " +
-                                        "update the config file etc/org.apache.karaf.management.cfg and change the Registry Port and Server Port to unused ports");
-                            }
-                            throw new RuntimeException("Could not start JMX connector server", ex);
-                        }
-                    }
-                };
-                connectorThread.setName("JMX Connector Thread [" + this.serviceUrl + "]");
-                connectorThread.setDaemon(this.daemon);
-                connectorThread.start();
-            }
-            else {
-                this.connectorServer.start();
-            }
-        } catch (Exception ex) {
-            doUnregister(this.objectName);
-            throw ex;
-        }
-    }
-
-    public void destroy() throws Exception {
-        try {
-            this.connectorServer.stop();
-        } finally {
-            doUnregister(this.objectName);
-        }
-    }
-
-    protected void doUnregister(ObjectName objectName) {
-        try {
-            if (this.objectName != null && this.server.isRegistered(objectName)) {
-                this.server.unregisterMBean(objectName);
-            }
-        }
-        catch (JMException ex) {
-            // Ignore
-        }
-    }
-
-    private void setupSsl() throws GeneralSecurityException {
-        SSLServerSocketFactory sslServerSocketFactory = keystoreManager.createSSLServerFactory(null, secureProtocol, algorithm, keyStore, keyAlias, trustStore, keyStoreAvailabilityTimeout);
-        RMIServerSocketFactory rmiServerSocketFactory = new KarafSslRMIServerSocketFactory(sslServerSocketFactory, this.isClientAuth());
-        RMIClientSocketFactory rmiClientSocketFactory = new SslRMIClientSocketFactory();
-        environment.put(RMIConnectorServer.RMI_SERVER_SOCKET_FACTORY_ATTRIBUTE, rmiServerSocketFactory);
-        environment.put(RMIConnectorServer.RMI_CLIENT_SOCKET_FACTORY_ATTRIBUTE, rmiClientSocketFactory);
-        // TODO secure RMI connector as well ?
-        // environment.put("com.sun.jndi.rmi.factory.socket", rmiClientSocketFactory);
-    }
-
-    private static class KarafSslRMIServerSocketFactory implements RMIServerSocketFactory {
-        private SSLServerSocketFactory sslServerSocketFactory;
-        private boolean clientAuth;
-
-        public KarafSslRMIServerSocketFactory(SSLServerSocketFactory sslServerSocketFactory, boolean clientAuth) {
-            this.sslServerSocketFactory = sslServerSocketFactory;
-            this.clientAuth = clientAuth;
-        }
-
-        public ServerSocket createServerSocket(int port) throws IOException {
-            SSLServerSocket sslServerSocket = (SSLServerSocket) sslServerSocketFactory.createServerSocket(port);
-            sslServerSocket.setNeedClientAuth(clientAuth);
-            return sslServerSocket;
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/management/server/src/main/java/org/apache/karaf/management/JaasAuthenticator.java b/karaf-2.3.x/management/server/src/main/java/org/apache/karaf/management/JaasAuthenticator.java
deleted file mode 100644
index 428b877..0000000
--- a/karaf-2.3.x/management/server/src/main/java/org/apache/karaf/management/JaasAuthenticator.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.management;
-
-import java.io.IOException;
-import java.security.Principal;
-
-import javax.management.remote.JMXAuthenticator;
-import javax.security.auth.Subject;
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.NameCallback;
-import javax.security.auth.callback.PasswordCallback;
-import javax.security.auth.callback.UnsupportedCallbackException;
-import javax.security.auth.login.FailedLoginException;
-import javax.security.auth.login.LoginContext;
-import javax.security.auth.login.LoginException;
-
-public class JaasAuthenticator implements JMXAuthenticator {
-
-    private String realm;
-    private String role;
-
-    public String getRealm() {
-        return realm;
-    }
-
-    public void setRealm(String realm) {
-        this.realm = realm;
-    }
-
-    public String getRole() {
-        return role;
-    }
-
-    public void setRole(String role) {
-        this.role = role;
-    }
-
-    public Subject authenticate(Object credentials) throws SecurityException {
-        if (!(credentials instanceof String[])) {
-            throw new IllegalArgumentException("Expected String[2], got "
-                            + (credentials != null ? credentials.getClass().getName() : null));
-        }
-        final String[] params = (String[]) credentials;
-        if (params.length != 2) {
-            throw new IllegalArgumentException("Expected String[2] but length was " + params.length);
-        }
-        try {
-            Subject subject = new Subject();
-            LoginContext loginContext = new LoginContext(realm, subject, new CallbackHandler() {
-                public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
-                    for (int i = 0; i < callbacks.length; i++) {
-                        if (callbacks[i] instanceof NameCallback) {
-                            ((NameCallback) callbacks[i]).setName(params[0]);
-                        } else if (callbacks[i] instanceof PasswordCallback) {
-                            ((PasswordCallback) callbacks[i]).setPassword((params[1].toCharArray()));
-                        } else {
-                            throw new UnsupportedCallbackException(callbacks[i]);
-                        }
-                    }
-                }
-            });
-            loginContext.login();
-            if (role != null && role.length() > 0) {
-            	String clazz = "org.apache.karaf.jaas.boot.principal.RolePrincipal";
-                String name = role;
-                int idx = role.indexOf(':');
-                if (idx > 0) {
-                    clazz = role.substring(0, idx);
-                    name = role.substring(idx + 1);
-                }
-                boolean found = false;
-                for (Principal p : subject.getPrincipals()) {
-                    if (p.getClass().getName().equals(clazz)
-                            && p.getName().equals(name)) {
-                        found = true;
-                        break;
-                    }
-                }
-                if (!found) {
-                    throw new FailedLoginException("User does not have the required role " + role);
-                }
-            }
-            return subject;
-        } catch (LoginException e) {
-            throw new SecurityException("Authentication failed", e);
-        }
-    }
-}
diff --git a/karaf-2.3.x/management/server/src/main/java/org/apache/karaf/management/MBeanRegistrer.java b/karaf-2.3.x/management/server/src/main/java/org/apache/karaf/management/MBeanRegistrer.java
deleted file mode 100644
index e4dc90e..0000000
--- a/karaf-2.3.x/management/server/src/main/java/org/apache/karaf/management/MBeanRegistrer.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.management;
-
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import javax.management.JMException;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-
-public class MBeanRegistrer {
-
-    private MBeanServer mbeanServer;
-
-    private Map<Object, String> mbeans;
-    private Set<String> registered = new HashSet<String>();
-
-    public void setMbeans(Map<Object, String> mbeans) {
-        this.mbeans = mbeans;
-    }
-
-    public void registerMBeanServer(MBeanServer mbeanServer) throws JMException {
-        if (this.mbeanServer != mbeanServer) {
-            unregisterMBeans();
-        }
-        this.mbeanServer = mbeanServer;
-        registerMBeans();
-    }
-
-    public void unregisterMBeanServer(MBeanServer mbeanServer) throws JMException {
-        unregisterMBeans();
-        this.mbeanServer = null;
-    }
-
-    public void init() throws Exception {
-        registerMBeans();
-    }
-
-    public void destroy() throws Exception {
-        unregisterMBeans();
-    }
-
-    protected void registerMBeans() throws JMException {
-        if (mbeanServer != null && mbeans != null) {
-            for (Map.Entry<Object, String> entry : mbeans.entrySet()) {
-                String value = parseProperty(entry.getValue());
-                mbeanServer.registerMBean(entry.getKey(), new ObjectName(value));
-                registered.add(value);
-            }
-        }
-    }
-
-    protected void unregisterMBeans() throws JMException {
-        if (mbeanServer != null && mbeans != null) {
-            while (!registered.isEmpty()) {
-                String name = registered.iterator().next();
-                mbeanServer.unregisterMBean(new ObjectName(name));
-                registered.remove(name);
-            }
-        }
-    }
-
-    protected String parseProperty(String raw) {
-        if (raw.indexOf("${") > -1 && raw.indexOf("}", raw.indexOf("${")) > -1) {
-            String var = raw.substring(raw.indexOf("${") + 2, raw.indexOf("}"));
-            String val = System.getProperty(var);
-            if (val != null) {
-                raw = raw.replace("${" + var + "}", val);
-            }
-        }
-        return raw;
-    }
-}
diff --git a/karaf-2.3.x/management/server/src/main/java/org/apache/karaf/management/MBeanServerFactory.java b/karaf-2.3.x/management/server/src/main/java/org/apache/karaf/management/MBeanServerFactory.java
deleted file mode 100644
index f89aa09..0000000
--- a/karaf-2.3.x/management/server/src/main/java/org/apache/karaf/management/MBeanServerFactory.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.management;
-
-import java.lang.management.ManagementFactory;
-import java.util.List;
-
-import javax.management.MBeanServer;
-
-public class MBeanServerFactory {
-
-    private boolean locateExistingServerIfPossible = false;
-    private String agentId;
-    private String defaultDomain;
-    private boolean registerWithFactory = true;
-    private MBeanServer server;
-    private boolean newlyRegistered = false;
-
-    public boolean isLocateExistingServerIfPossible() {
-        return locateExistingServerIfPossible;
-    }
-
-    public void setLocateExistingServerIfPossible(boolean locateExistingServerIfPossible) {
-        this.locateExistingServerIfPossible = locateExistingServerIfPossible;
-    }
-
-    public String getAgentId() {
-        return agentId;
-    }
-
-    public void setAgentId(String agentId) {
-        this.agentId = agentId;
-    }
-
-    public String getDefaultDomain() {
-        return defaultDomain;
-    }
-
-    public void setDefaultDomain(String defaultDomain) {
-        this.defaultDomain = defaultDomain;
-    }
-
-    public boolean isRegisterWithFactory() {
-        return registerWithFactory;
-    }
-
-    public void setRegisterWithFactory(boolean registerWithFactory) {
-        this.registerWithFactory = registerWithFactory;
-    }
-
-    public boolean isNewlyRegistered() {
-        return newlyRegistered;
-    }
-
-    public void setNewlyRegistered(boolean newlyRegistered) {
-        this.newlyRegistered = newlyRegistered;
-    }
-
-    public MBeanServer getServer() throws Exception {
-        if (this.server == null) {
-            init();
-        }
-        return server;
-    }
-
-    public void init() throws Exception {
-        if (this.locateExistingServerIfPossible || this.agentId != null) {
-            try {
-                List servers = javax.management.MBeanServerFactory.findMBeanServer(agentId);
-                MBeanServer server = null;
-                if (servers != null && servers.size() > 0) {
-                    this.server = (MBeanServer) servers.get(0);
-                }
-                if (server == null && agentId == null) {
-                    this.server = ManagementFactory.getPlatformMBeanServer();
-                }
-                if (this.server == null) {
-                    throw new Exception("Unable to locate MBeanServer");
-                }
-            } catch (Exception ex) {
-                if (this.agentId != null) {
-                    throw ex;
-                }
-            }
-        }
-        if (this.server == null) {
-            if (this.registerWithFactory) {
-                this.server = javax.management.MBeanServerFactory.createMBeanServer(this.defaultDomain);
-            } else {
-                this.server = javax.management.MBeanServerFactory.newMBeanServer(this.defaultDomain);
-            }
-            this.newlyRegistered = this.registerWithFactory;
-        }
-    }
-
-    public void destroy() throws Exception {
-        if (this.newlyRegistered) {
-            javax.management.MBeanServerFactory.releaseMBeanServer(this.server);
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/management/server/src/main/java/org/apache/karaf/management/RmiRegistryFactory.java b/karaf-2.3.x/management/server/src/main/java/org/apache/karaf/management/RmiRegistryFactory.java
deleted file mode 100644
index 75ce54c..0000000
--- a/karaf-2.3.x/management/server/src/main/java/org/apache/karaf/management/RmiRegistryFactory.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*

- * 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.

- */

-package org.apache.karaf.management;

-

-import java.io.IOException;

-import java.net.InetAddress;

-import java.net.ServerSocket;

-import java.net.UnknownHostException;

-import java.rmi.RemoteException;

-import java.rmi.registry.LocateRegistry;

-import java.rmi.registry.Registry;

-import java.rmi.server.RMIClientSocketFactory;

-import java.rmi.server.RMIServerSocketFactory;

-import java.rmi.server.RMISocketFactory;

-import java.rmi.server.UnicastRemoteObject;

-

-public class RmiRegistryFactory {

-

-    private int port = Registry.REGISTRY_PORT;

-    private String host;

-    private Registry registry;

-    private boolean locate;

-    private boolean create = true;

-    private boolean locallyCreated;

-    

-    /**

-     * @return the create

-     */

-    public boolean isCreate() {

-        return create;

-    }

-

-    /**

-     * @param create the create to set

-     */

-    public void setCreate(boolean create) {

-        this.create = create;

-    }

-

-    /**

-     * @return the locate

-     */

-    public boolean isLocate() {

-        return locate;

-    }

-

-    /**

-     * @param locate the locate to set

-     */

-    public void setLocate(boolean locate) {

-        this.locate = locate;

-    }

-

-    /**

-     * @return the port

-     */

-    public int getPort() {

-        return port;

-    }

-

-    /**

-     * @param port the port to set

-     */

-    public void setPort(int port) {

-        this.port = port;

-    }

-

-    public String getHost() {

-        return host;

-    }

-

-    public void setHost(String host) {

-        this.host = host;

-    }

-

-    public Object getObject() throws Exception {

-        return registry;

-    }

-

-    public void init() throws RemoteException, UnknownHostException {

-        if (registry == null && locate) {

-            try {

-                Registry reg = LocateRegistry.getRegistry(host, getPort());

-                reg.list();

-                registry = reg;

-            } catch (RemoteException e) {

-                // ignore

-            }

-        }

-        if (registry == null && create) {

-            if (host != null && !host.isEmpty()) {

-                RMIClientSocketFactory socketFactory = RMISocketFactory.getDefaultSocketFactory();

-                InetAddress addr = InetAddress.getByName(host);

-                RMIServerSocketFactory serverSocketFactory = new KarafServerSocketFactory(addr, port);

-

-                registry = LocateRegistry.createRegistry(getPort(), socketFactory, serverSocketFactory);

-            } else {

-                registry = LocateRegistry.createRegistry(getPort());

-            }

-            locallyCreated = true;

-        }

-    }

-

-    public void destroy() throws RemoteException {

-        if (registry != null && locallyCreated) {

-            Registry reg = registry;

-            registry = null;

-            UnicastRemoteObject.unexportObject(reg, true);

-        }

-    }

-

-    private static class KarafServerSocketFactory implements RMIServerSocketFactory {

-        private final int port;

-        private final InetAddress addr;

-

-        private KarafServerSocketFactory(InetAddress addr, int port) {

-            this.addr = addr;

-            this.port = port;

-        }

-

-        public ServerSocket createServerSocket(int i) throws IOException {

-            return new ServerSocket(port, 0, addr);

-        }

-    }

-

-}

diff --git a/karaf-2.3.x/management/server/src/main/resources/OSGI-INF/blueprint/karaf-management.xml b/karaf-2.3.x/management/server/src/main/resources/OSGI-INF/blueprint/karaf-management.xml
deleted file mode 100644
index df23fe77..0000000
--- a/karaf-2.3.x/management/server/src/main/resources/OSGI-INF/blueprint/karaf-management.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-<?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.

-

--->

-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"

-           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"

-           xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"

-           xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.0.0">

-

-    <!-- Allow the use of system properties -->

-    <ext:property-placeholder placeholder-prefix="$[" placeholder-suffix="]">

-        <ext:default-properties>

-            <ext:property name="karaf.admin.role" value="admin" />

-        </ext:default-properties>

-    </ext:property-placeholder>

-

-    <!-- Property place holder -->

-    <cm:property-placeholder persistent-id="org.apache.karaf.management" update-strategy="reload">

-        <cm:default-properties>

-            <cm:property name="rmiRegistryHost" value="0.0.0.0"/>

-            <cm:property name="rmiRegistryPort" value="1099"/>

-            <cm:property name="rmiServerPort" value="44444"/>

-            <cm:property name="jmxRealm" value="karaf"/>

-            <cm:property name="jmxRole" value="$[karaf.admin.role]"/>

-            <cm:property name="serviceUrl" value="service:jmx:rmi://localhost:44444/jndi/rmi://localhost:1099/karaf-$[karaf.name]"/>

-            <cm:property name="daemon" value="true"/>

-            <cm:property name="threaded" value="true"/>

-            <cm:property name="objectName" value="connector:name=rmi"/>

-            <!-- SSL support -->

-            <cm:property name="keyStoreAvailabilityTimeout" value="5000"/>

-            <cm:property name="authenticatorType" value="password"/>

-            <cm:property name="secured" value="false"/>

-            <cm:property name="secureAlgorithm" value="default"/>

-            <cm:property name="secureProtocol" value="TLS"/>

-            <cm:property name="keyStore" value="karaf.ks"/>

-            <cm:property name="keyAlias" value="karaf"/>

-            <cm:property name="trustStore" value="karaf.ts"/>

-            <cm:property name="clientAuth" value="false"/>

-        </cm:default-properties>

-    </cm:property-placeholder>

-

-    <!-- MBeanServer bean -->

-    <bean id="mbeanServerFactory" class="org.apache.karaf.management.MBeanServerFactory" init-method="init"

-          destroy-method="destroy" depends-on="rmiRegistryFactory">

-        <property name="locateExistingServerIfPossible" value="true"/>

-    </bean>

-    <bean id="mbeanServer" factory-ref="mbeanServerFactory" factory-method="getServer"/>

-

-    <!-- Export the MBeanServer as an OSGi service -->

-    <service ref="mbeanServer" interface="javax.management.MBeanServer"/>

-

-    <!-- Create a RMI registry -->

-    <bean id="rmiRegistryFactory" class="org.apache.karaf.management.RmiRegistryFactory" init-method="init"

-          destroy-method="destroy">

-        <property name="create" value="true"/>

-        <property name="locate" value="true"/>

-        <property name="host" value="${rmiRegistryHost}"/>

-        <property name="port" value="${rmiRegistryPort}"/>

-    </bean>

-

-    <!-- Create a JMX connector ServiceFactory -->

-    <reference id="keystoreManager" interface="org.apache.karaf.jaas.config.KeystoreManager"/>

-

-    <bean id="connectorFactory" class="org.apache.karaf.management.ConnectorServerFactory" init-method="init"

-          destroy-method="destroy">

-        <property name="server" ref="mbeanServer"/>

-        <property name="serviceUrl" value="${serviceUrl}"/>

-        <property name="daemon" value="${daemon}"/>

-        <property name="threaded" value="${threaded}"/>

-        <property name="objectName" value="${objectName}"/>

-        <property name="environment">

-            <map>

-                <entry key="jmx.remote.authenticator" value-ref="jaasAuthenticator"/>

-            </map>

-        </property>

-        <property name="keyStoreAvailabilityTimeout" value="${keyStoreAvailabilityTimeout}"/>

-        <property name="authenticatorType" value="${authenticatorType}"/>

-        <property name="secured" value="${secured}"/>

-        <property name="algorithm" value="${secureAlgorithm}"/>

-        <property name="secureProtocol" value="${secureProtocol}"/>

-        <property name="keyStore" value="${keyStore}"/>

-        <property name="keyAlias" value="${keyAlias}"/>

-        <property name="trustStore" value="${trustStore}"/>

-        <property name="keystoreManager" ref="keystoreManager"/>

-    </bean>

-

-    <!-- JAAS authenticator -->

-    <bean id="jaasAuthenticator" class="org.apache.karaf.management.JaasAuthenticator">

-        <property name="realm" value="${jmxRealm}"/>

-        <property name="role" value="${jmxRole}"/>

-    </bean>

-

-</blueprint>

-

diff --git a/karaf-2.3.x/management/server/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/management/server/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 44745cb..0000000
--- a/karaf-2.3.x/management/server/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,15 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle starts JMX required resources such as MBean server and RMI registry.
-
-    It allows end users to manage Karaf using any JMX client such as JConsole.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mManagement\u001B[0m section of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/management/server/src/main/resources/OSGI-INF/metatype/metatype.properties b/karaf-2.3.x/management/server/src/main/resources/OSGI-INF/metatype/metatype.properties
deleted file mode 100644
index caa3780..0000000
--- a/karaf-2.3.x/management/server/src/main/resources/OSGI-INF/metatype/metatype.properties
+++ /dev/null
@@ -1,73 +0,0 @@
-#
-#  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.
-#
-
-#
-# This file contains localization strings for configuration labels and
-# descriptions as used in the metatype.xml descriptor
-
-management.name = Apache Karaf JMX Management
-management.description = Configuration of Apache Karaf JMX Management
-
-rmiRegistryHost.name = RMI Registry Host
-rmiRegistryHost.description = host of the registry for the exported RMI service. Blank for all interfaces
-
-rmiRegistryPort.name = RMI Registry Port
-rmiRegistryPort.description = port of the registry for the exported RMI service
-
-rmiServerPort.name = RMI Server Port
-rmiServerPort.description = port of the server for the exported RMI objects
-
-jmxRealm.name = Realm
-jmxRealm.description = name of the JAAS realm used for authentication
-
-serviceUrl.name = Service Url
-serviceUrl.description = the service URL for the JMXConnectorServer
-
-daemon.name = Daemon
-daemon.description = whether any threads started for the JMXConnectorServer should be started as daemon threads
-
-threaded.name = Threaded
-threaded.description = whether the JMXConnectorServer should be started in a separate thread
-
-objectName.name = ObjectName
-objectName.description = the ObjectName used to register the JMXConnectorServer
-
-secured.name = Secured
-secured.description = whether to start MBean server with SSL
-
-keyStoreAvailabilityTimeout.name = KeyStore Availability Timeout
-keyStoreAvailabilityTimeout.description = Number of milliseconds waiting for keystore to be loaded.
-
-secureAlgorithm.name = Secure Algorithm
-secureAlgorithm.description = Algorithm to use
-
-secureProtocol.name = Secure Protocol
-secureProtocol.description = Protocol to use
-
-keyStore.name = Keystore Name
-keyStore.description = Keystore name from keystore manager
-
-keyAlias.name = Key Alias
-keyAlias.description = Key alias to be used with secured connector
-
-trustStore.name = Truststore Name
-trustStore.description = Truststore name from keystore manager
-
-authenticatorType.name = Authenticator Type
-authenticatorType.description = Authenticator to use. Available values are "none", "password", and "certificate".
diff --git a/karaf-2.3.x/management/server/src/main/resources/OSGI-INF/metatype/metatype.xml b/karaf-2.3.x/management/server/src/main/resources/OSGI-INF/metatype/metatype.xml
deleted file mode 100644
index e67bde6..0000000
--- a/karaf-2.3.x/management/server/src/main/resources/OSGI-INF/metatype/metatype.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?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.
-
--->
-<metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.0.0" localization="OSGI-INF/metatype/metatype">
-    <OCD id="org.apache.karaf.management" name="%management.name" description="%management.description">
-        <AD id="rmiRegistryHost" type="String" default="" name="%rmiRegistryHost.name"
-            description="%rmiRegistryHost.description"/>
-        <AD id="rmiRegistryPort" type="Integer" default="1099" name="%rmiRegistryPort.name"
-            description="%rmiRegistryPort.description"/>
-        <AD id="rmiServerPort" type="Integer" default="44444" name="%rmiServerPort.name"
-            description="%rmiServerPort.description"/>
-        <AD id="jmxRealm" type="String" default="karaf" name="%jmxRealm.name"
-            description="%jmxRealm.description"/>
-        <AD id="serviceUrl" type="String" default="service:jmx:rmi://localhost:44444/jndi/rmi://localhost:1099/jmxrmi" name="%serviceUrl.name"
-            description="%serviceUrl.description"/>
-        <AD id="daemon" type="Boolean" default="true" name="%daemon.name" description="%daemon.description"/>
-        <AD id="threaded" type="Boolean" default="true" name="%threaded.name" description="%threaded.description"/>
-        <AD id="objectName" type="String" default="connector:name=rmi" name="%objectName.name" description="%objectName.description"/>
-        <AD id="secured" type="Boolean" default="false" name="%secured.name" description="%secured.description"/>
-        <AD id="keyStoreAvailabilityTimeout" type="Boolean" default="false" name="%keyStoreAvailabilityTimeout.name" description="%keyStoreAvailabilityTimeout.description"/>
-        <AD id="secureAlgorithm" type="String" default="default" name="%secureAlgorithm.name" description="%secureAlgorithm.description"/>
-        <AD id="secureProtocol" type="String" default="TLS" name="%secureProtocol.name" description="%secureProtocol.description"/>
-        <AD id="keyStore" type="String" default="karaf.ks" name="%keyStore.name" description="%keyStore.description"/>
-        <AD id="keyAlias" type="String" default="karaf" name="%keyAlias.name" description="%keyAlias.description"/>
-        <AD id="trustStore" type="String" default="karaf.ts" name="%trustStore.name" description="%trustStore.description"/>
-        <AD id="authenticatorType" type="String" default="password" name="%authenticatorType.name" description="%authenticatorType.description"/>
-    </OCD>
-    <Designate pid="org.apache.karaf.management">
-        <Object ocdref="org.apache.karaf.management"/>
-    </Designate>
-</metatype:MetaData>
diff --git a/karaf-2.3.x/management/server/src/test/configs/factories/management.properties b/karaf-2.3.x/management/server/src/test/configs/factories/management.properties
deleted file mode 100644
index 0357bf2..0000000
--- a/karaf-2.3.x/management/server/src/test/configs/factories/management.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-service.pid=org.apache.karaf.management.JmxConnectorServiceFactory
-instances=1
-keys=objectName,serviceUrl,threaded,daemon,
-objectName.1=connector:name=rmi
-serviceUrl.1=service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
-threaded.1=true
-daemon.1=true
diff --git a/karaf-2.3.x/management/server/src/test/configs/services/org.ops4j.pax.logging.properties b/karaf-2.3.x/management/server/src/test/configs/services/org.ops4j.pax.logging.properties
deleted file mode 100644
index d1f34a6..0000000
--- a/karaf-2.3.x/management/server/src/test/configs/services/org.ops4j.pax.logging.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-# 
-# 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.
-#
-#
-log4j.rootLogger=DEBUG, out
-
-log4j.logger.org.springframework=DEBUG
-
-# CONSOLE appender not used by default
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} | %-5.5p | %-16.16t | %-32.32c{1} | %-32.32C %4L | %m%n
-
-# File appender
-log4j.appender.out=org.apache.log4j.FileAppender
-log4j.appender.out.layout=org.apache.log4j.PatternLayout
-log4j.appender.out.layout.ConversionPattern=%d{ABSOLUTE} | %-5.5p | %-16.16t | %-32.32c{1} | %-32.32C %4L | %m%n
-log4j.appender.out.file=target/shell.log
-log4j.appender.out.append=true
diff --git a/karaf-2.3.x/management/server/src/test/java/org/apache/karaf/management/MBeanRegistererTest.java b/karaf-2.3.x/management/server/src/test/java/org/apache/karaf/management/MBeanRegistererTest.java
deleted file mode 100644
index e02f127..0000000
--- a/karaf-2.3.x/management/server/src/test/java/org/apache/karaf/management/MBeanRegistererTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.management;
-
-import java.util.Map;
-import java.util.HashMap;
-
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-
-import static org.easymock.classextension.EasyMock.*;
-import org.easymock.classextension.IMocksControl;
-
-import junit.framework.TestCase;
-
-public class MBeanRegistererTest extends TestCase {
-    public void testRegistration() throws Exception {
-        IMocksControl control = createNiceControl();
-        MBeanServer mbeanServer = control.createMock(MBeanServer.class);
-        String rawName = "org.apache.karaf:type=admin,name=${karaf.name}";
-        AdminServiceMBean mbean = control.createMock(AdminServiceMBean.class);
-        ObjectName name = new ObjectName("org.apache.karaf:type=admin,name=foobar");
-        expect(mbeanServer.registerMBean(isA(AdminServiceMBean.class), eq(name))).andReturn(null);
-        mbeanServer.unregisterMBean(eq(name));
-        expectLastCall();
-        control.replay();
-
-        String old = System.getProperty("karaf.name");
-        System.setProperty("karaf.name", "foobar");
-        MBeanRegistrer registerer = new MBeanRegistrer();
-        Map<Object, String> mbeans = new HashMap<Object, String>();
-        mbeans.put(mbean, rawName);
-        registerer.setMbeans(mbeans);
-        registerer.registerMBeanServer(mbeanServer);
-        registerer.unregisterMBeanServer(mbeanServer);
-
-        restoreProperties(old);
-        control.verify();
-    }
-
-    private void restoreProperties(String old) {
-        if (old != null) {
-           System.setProperty("karaf.name", old);
-        } else { 
-           System.getProperties().remove("karaf.name");
-        }
-    }
-
-	public static interface AdminServiceMBean {
-	    int createInstance(String name) throws Exception;
-	}
-}
diff --git a/karaf-2.3.x/manual/pom.xml b/karaf-2.3.x/manual/pom.xml
deleted file mode 100644
index da3686d..0000000
--- a/karaf-2.3.x/manual/pom.xml
+++ /dev/null
@@ -1,415 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>karaf</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>manual</artifactId>
-    <name>Apache Karaf :: Manual</name>
-    <packaging>war</packaging>
-
-    <properties>
-        <manual.dir>${project.build.directory}/manual</manual.dir>
-        <manual>${manual.dir}/manual-${project.version}</manual>
-        <netbeans.hint.deploy.server>Tomcat60</netbeans.hint.deploy.server>
-        <jetty-port>8080</jetty-port>
-        <jetty-war-dir>${project.build.directory}/webapp/</jetty-war-dir>
-        <scalate.version>1.4.0</scalate.version>
-        <wikitext.version>1.3</wikitext.version>
-        <scalate.editor>${env.SCALATE_EDITOR}</scalate.editor>
-        <scalate.mode>production</scalate.mode>
-        <scalate.workdir>${project.build.directory}/scalateWorkDir</scalate.workdir>
-        <karaf.version>${project.version}</karaf.version>
-        <maven.wagon.version>1.0-beta-6</maven.wagon.version>
-    </properties>
-
-    <repositories>
-        <repository>
-            <id>fusesource</id>
-            <name>Fusesource Maven Repository</name>
-            <url>http://repo.fusesource.com/nexus/content/repositories/snapshots/</url>
-            <releases>
-                <enabled>false</enabled>
-            </releases>
-            <snapshots>
-                <enabled>true</enabled>
-            </snapshots>
-        </repository>
-    </repositories>
-
-    <pluginRepositories>
-        <pluginRepository>
-            <id>fusesource</id>
-            <name>Fusesource Maven Repository</name>
-            <url>http://repo.fusesource.com/nexus/content/repositories/snapshots/</url>
-            <releases>
-                <enabled>false</enabled>
-            </releases>
-            <snapshots>
-                <enabled>true</enabled>
-            </snapshots>
-        </pluginRepository>
-    </pluginRepositories>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.fusesource.scalate</groupId>
-            <artifactId>scalate-wikitext</artifactId>
-            <version>${scalate.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>0.9.24</version>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <version>1.6.0</version>
-        </dependency>
-        <dependency>
-            <groupId>org.scala-lang</groupId>
-            <artifactId>scala-library</artifactId>
-            <version>2.8.1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.scala-lang</groupId>
-            <artifactId>scala-compiler</artifactId>
-            <version>2.8.1</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-                <configuration>
-                    <useDefaultDelimiters>false</useDefaultDelimiters>
-                    <delimiters>
-                        <delimiter>${*}</delimiter>
-                    </delimiters>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>filter</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>copy-resources</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>${project.build.directory}/webapp</outputDirectory>
-                            <resources>
-                                <resource>
-                                    <directory>src/main/webapp</directory>
-                                    <filtering>true</filtering>
-                                </resource>
-                            </resources>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>build-helper-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>add-source</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>add-source</goal>
-                        </goals>
-                        <configuration>
-                            <sources>
-                                <source>${project.build.directory}/webapp</source>
-                            </sources>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.karaf.tooling</groupId>
-                <artifactId>cmdhelp-maven-plugin</artifactId>
-                <version>${project.version}</version>
-                <executions>
-                    <execution>
-                        <id>generate-commands</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>cmdhelp</goal>
-                        </goals>
-                        <configuration>
-                            <format>conf</format>
-                            <targetFolder>${project.build.directory}/webapp/commands/</targetFolder>
-                            <classLoader>plugin</classLoader>
-                        </configuration>
-                    </execution>
-                </executions>
-                <dependencies>
-                    <!-- Commands for help generation -->
-                    <dependency>
-                        <groupId>org.apache.karaf.shell</groupId>
-                        <artifactId>org.apache.karaf.shell.commands</artifactId>
-                        <version>${project.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.apache.karaf.shell</groupId>
-                        <artifactId>org.apache.karaf.shell.config</artifactId>
-                        <version>${project.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.apache.karaf.shell</groupId>
-                        <artifactId>org.apache.karaf.shell.console</artifactId>
-                        <version>${project.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.apache.karaf.shell</groupId>
-                        <artifactId>org.apache.karaf.shell.dev</artifactId>
-                        <version>${project.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.apache.karaf.shell</groupId>
-                        <artifactId>org.apache.karaf.shell.log</artifactId>
-                        <version>${project.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.apache.karaf.shell</groupId>
-                        <artifactId>org.apache.karaf.shell.obr</artifactId>
-                        <version>${project.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.apache.karaf.shell</groupId>
-                        <artifactId>org.apache.karaf.shell.osgi</artifactId>
-                        <version>${project.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.apache.karaf.shell</groupId>
-                        <artifactId>org.apache.karaf.shell.packages</artifactId>
-                        <version>${project.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.apache.karaf.shell</groupId>
-                        <artifactId>org.apache.karaf.shell.ssh</artifactId>
-                        <version>${project.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.apache.karaf.shell</groupId>
-                        <artifactId>org.apache.karaf.shell.web</artifactId>
-                        <version>${project.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.apache.karaf.shell</groupId>
-                        <artifactId>org.apache.karaf.shell.wrapper</artifactId>
-                        <version>${project.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.apache.karaf.admin</groupId>
-                        <artifactId>org.apache.karaf.admin.command</artifactId>
-                        <version>${project.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.apache.karaf.diagnostic</groupId>
-                        <artifactId>org.apache.karaf.diagnostic.command</artifactId>
-                        <version>${project.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.apache.karaf.features</groupId>
-                        <artifactId>org.apache.karaf.features.command</artifactId>
-                        <version>${project.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.apache.karaf.jaas</groupId>
-                        <artifactId>org.apache.karaf.jaas.command</artifactId>
-                        <version>${project.version}</version>
-                    </dependency>
-                </dependencies>
-            </plugin>
-            <plugin>
-                <groupId>org.fusesource.scalate</groupId>
-                <artifactId>maven-scalate-plugin</artifactId>
-                <version>${scalate.version}</version>
-                <executions>
-                    <execution>
-                        <id>generate-htmls</id>
-                        <phase>prepare-package</phase>
-                        <goals>
-                            <goal>sitegen-no-fork</goal>
-                        </goals>
-                        <configuration>
-                            <warSourceDirectory>${project.build.directory}/webapp</warSourceDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-                <configuration>
-                    <remoteServerId>people.apache.org</remoteServerId>
-                    <remoteServerUrl>scp://people.apache.org/www/karaf.apache.org/manual/${karaf.version}</remoteServerUrl>
-                </configuration>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.apache.maven.wagon</groupId>
-                        <artifactId>wagon-ssh</artifactId>
-                        <version>${maven.wagon.version}</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.fusesource.wikitext</groupId>
-                        <artifactId>confluence-core</artifactId>
-                        <version>${wikitext.version}</version>
-                    </dependency>
-                </dependencies>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>create-manual</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>run</goal>
-                        </goals>
-                        <configuration>
-                            <tasks>
-                                <mkdir dir="${manual.dir}" />
-                                <move file="${project.build.directory}/sitegen/manual.html" tofile="${manual}.html" />
-                                <echo message="Generating PDF using Prince XML (http://www.princexml.com/)" />
-                                <exec executable="prince">
-                                    <arg value="${manual}.html" />
-                                    <arg value="${manual}.pdf" />
-                                    <arg value="--log" />
-                                    <arg value="${project.build.directory}/prince.log" />
-                                </exec>
-                                <attachartifact file="${manual}.html" type="html" />
-                                <attachartifact file="${manual}.pdf" type="pdf" />
-                            </tasks>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <configuration>
-                    <webResources>
-                        <resource>
-                            <directory>${project.build.directory}/webapp/</directory>
-                        </resource>
-                    </webResources>
-                    <archive>
-                        <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
-                    </archive>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.mortbay.jetty</groupId>
-                <artifactId>jetty-maven-plugin</artifactId>
-                <version>7.1.5.v20100705</version>
-                <configuration>
-                    <!-- When editing the conf files, you can comment this line to run
-                        mvn jetty:run
-                       to have a live web site
-                    -->
-                    <webAppSourceDirectory>${jetty-war-dir}</webAppSourceDirectory>
-
-                    <systemProperties>
-                        <systemProperty>
-                            <name>scalate.editor</name>
-                            <value>${scalate.editor}</value>
-                        </systemProperty>
-                        <systemProperty>
-                            <name>scalate.workdir</name>
-                            <value>${scalate.workdir}</value>
-                        </systemProperty>
-                        <systemProperty>
-                            <name>scalate.mode</name>
-                            <value>${scalate.mode}</value>
-                        </systemProperty>
-                    </systemProperties>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>bundle-manifest</id>
-                        <phase>process-classes</phase>
-                        <goals>
-                            <goal>manifest</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <supportedProjectTypes>
-                        <supportedProjectType>jar</supportedProjectType>
-                        <supportedProjectType>bundle</supportedProjectType>
-                        <supportedProjectType>war</supportedProjectType>
-                    </supportedProjectTypes>
-                    <instructions>
-                        <Import-Package>
-                            javax.servlet,
-                            javax.servlet.http,
-                            org.osgi.framework,
-                            org.osgi.service.packageadmin,
-                            javax.swing.tree,
-                            org.apache.commons.logging;provider=paxlogging;resolution:=optional,
-                            org.apache.log4j;provider=paxlogging;resolution:=optional,
-                            org.slf4j;provider=paxlogging;resolution:=optional;version="[1.5,2)",
-                            *
-                        </Import-Package>
-                        <Bundle-ClassPath>.,WEB-INF/classes</Bundle-ClassPath>
-                        <Embed-Directory>WEB-INF/lib</Embed-Directory>
-                        <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
-                        <Embed-Transitive>true</Embed-Transitive>
-                        <Webapp-Context>/karaf-doc</Webapp-Context>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-    <reporting>
-        <plugins>
-            <plugin>
-                <groupId>org.fusesource.scalate</groupId>
-                <artifactId>maven-scalate-plugin</artifactId>
-                <version>${scalate.version}</version>
-            </plugin>
-        </plugins>
-    </reporting>
-
-    <profiles>
-        <profile>
-            <id>live</id>
-            <properties>
-                <jetty-war-dir>${basedir}/src/main/webapp/</jetty-war-dir>
-                <scalate.mode>development</scalate.mode>
-            </properties>
-        </profile>
-    </profiles>
-
-</project>
-
diff --git a/karaf-2.3.x/manual/src/fallback/manual.html b/karaf-2.3.x/manual/src/fallback/manual.html
deleted file mode 100644
index 4aa3dbd..0000000
--- a/karaf-2.3.x/manual/src/fallback/manual.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!--
-
-    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.
--->
-<div class="wiki-content">
-    Unable to generate manual.
-</div>
\ No newline at end of file
diff --git a/karaf-2.3.x/manual/src/fallback/manual.pdf b/karaf-2.3.x/manual/src/fallback/manual.pdf
deleted file mode 100644
index 72f3d80..0000000
--- a/karaf-2.3.x/manual/src/fallback/manual.pdf
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/manual/src/main/webapp/.livereload b/karaf-2.3.x/manual/src/main/webapp/.livereload
deleted file mode 100644
index b185045..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/.livereload
+++ /dev/null
@@ -1,19 +0,0 @@
-# Lines starting with pound sign (#) are ignored.
-
-# additional extensions to monitor
-#config.exts << 'haml'
-
-# exclude files with NAMES matching this mask
-#config.exclusions << '~*'
-# exclude files with PATHS matching this mask (if the mask contains a slash)
-#config.exclusions << '/excluded_dir/*'
-# exclude files with PATHS matching this REGEXP
-#config.exclusions << /somedir.*(ab){2,4}.(css|js)$/
-
-# reload the whole page when .js changes
-#config.apply_js_live = false
-# reload the whole page when .css changes
-#config.apply_css_live = false
-
-# wait 100ms for more changes before reloading a page
-#config.grace_period = 0.1
diff --git a/karaf-2.3.x/manual/src/main/webapp/WEB-INF/scalate/layouts/default.scaml b/karaf-2.3.x/manual/src/main/webapp/WEB-INF/scalate/layouts/default.scaml
deleted file mode 100644
index c88ba58..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/WEB-INF/scalate/layouts/default.scaml
+++ /dev/null
@@ -1,116 +0,0 @@
--#
--# Copyright (C) 2009-2010 the original author or authors.
--# See the notice.md file distributed with this work for additional
--# information regarding copyright ownership.
--#
--# Licensed 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.
--#
-
--@ var body: String
--@ var title : String = "Apache Karaf ${karaf.version} Guides"
-- response.setContentType("text/html")
-
--# Only include the console if it's available and the engine is in dev mode.
-- val include_console = engine.isDevelopmentMode && engine.resourceLoader.exists("/org/fusesource/scalate/console/console_head.scaml")
-
-!!! Basic
-%html(lang="en")
-  %head
-    %meta(http-equiv="Content-Type" content="text/html; charset=utf-8")
-    %meta(name="description" content="description goes here")
-    %meta(name="keywords" content="keywords,goes,here")
-    %meta(name="author" content="The Apache Karaf Team")
-
-    - if (include_console)
-      = include("/org/fusesource/scalate/console/console_head.scaml")
-
-    %link(href={uri("/css/style.css")} rel="stylesheet" type="text/css")
-    %link(href={uri("/css/pygmentize.css")} rel="stylesheet" type="text/css")
-
-    - if (include_console)
-      %link(href={uri("/css/scalate/console.css")} rel="stylesheet" type="text/css")
-
-    %title
-      = title
-  
-  %body
-    %table{:width => "100%", :cellpadding => "0", :cellspacing => "0"}
-      %tr{:width => "100%"}
-        %td#cell-0-0{:colspan => "2"}
-          &nbsp;
-        %td#cell-0-1
-          &nbsp;
-        %td#cell-0-2{:colspan => "2"}
-          &nbsp;
-      %tr{:width => "100%"}
-        %td#cell-1-0
-          &nbsp;
-        %td#cell-1-1
-          &nbsp;
-        %td#cell-1-2
-          %div{:style => "padding: 5px;"}
-            #banner
-              = include("/_banner.ssp")
-            #top-menu
-              %table{:border => "0", :cellpadding => "1", :cellspacing => "0", :width => "100%"}
-                %tr
-                  %td
-                    %div{:align => "left"}
-                  %td
-                    %div{:align => "right"}
-                      = include("/_quicklinks.ssp")
-        %td#cell-1-3
-          &nbsp;
-        %td#cell-1-4
-          &nbsp;
-      %tr{:width => "100%"}
-        %td#cell-2-0{:colspan => "2"}
-          &nbsp;
-        %td#cell-2-1
-          %table
-            %tr{:height => "100%", :valign => "top"}
-              %td{:height => "100%"}
-                #wrapper-menu-page-right
-                  #wrapper-menu-page-top
-                    #wrapper-menu-page-bottom
-                      #menu-page
-                        = include("/_navigation.conf")
-              %td{:height =>"100%", :width => "100%"}
-                .wiki-content
-                  !~~ body
-        %td#cell-2-2{:colspan => "2"}
-          &nbsp;
-      %tr{:width => "100%"}
-        %td#cell-3-0
-          &nbsp;
-        %td#cell-3-1
-          &nbsp;
-        %td#cell-3-2
-          #footer
-            #site-footer
-              &copy; 2008-2011 The Apache Software Foundation
-              %br
-              Apache Karaf, Karaf, Apache, the Apache feather logo, and the Apache Karaf project logo are trademarks of The Apache Software Foundation.
-        %td#cell-3-3
-          &nbsp;
-        %td#cell-3-4
-          &nbsp;
-      %tr{:width => "100%"}
-        %td#cell-4-0{:colspan => "2"}
-          &nbsp;
-        %td#cell-4-1
-          &nbsp;
-        %td#cell-4-2{:colspan => "2"}
-          &nbsp;
-    - if (include_console)
-      = include("/org/fusesource/scalate/console/console.scaml")
diff --git a/karaf-2.3.x/manual/src/main/webapp/WEB-INF/scalate/layouts/print.ssp b/karaf-2.3.x/manual/src/main/webapp/WEB-INF/scalate/layouts/print.ssp
deleted file mode 100644
index 5888547..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/WEB-INF/scalate/layouts/print.ssp
+++ /dev/null
@@ -1,817 +0,0 @@
-<%--
-Copyright (C) 2009-2010 the original author or authors.
-See the notice.md file distributed with this work for additional
-information regarding copyright ownership.
-
-Licensed 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.
---%>
-<%@ var body: String %>
-<%@ var title: String = "Apache Karaf ${karaf.version} Guides" %>
-<% escapeMarkup = false %>
-<!DOCTYPE html>
-<html>
-<head>
-  <style type="text/css">
-/*
-
-Copyright (c) 2005 Hakon Wium Lie and Bert Bos
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-*/
-html {
-  margin: 0; padding: 0;
-  font: 10pt/1.26 "Gill Sans", sans-serif;
-}
-
-h1, h2, h3, h4, h5, h6 {
-  font-family: "Gill Sans", sans-serif;
-  margin: 2em 0 0.5em 0;
-  page-break-after: avoid;
-}
-
-h1 {
-  font-size: 2.0em;
-  font-weight: 900;
-
-  margin: 0;
-  margin-left:-2cm;
-  margin-top:-1cm;
-  margin-bottom:1.5cm;
-  top: 0cm;
-  left: 0cm;
-  padding: 2cm;
-  padding-top: 0cm;
-  padding-bottom: 1cm;
-  background: #888;
-  border-bottom-right-radius: 2cm;
-  page-break-before: always;
-  page-break-inside: avoid;
-}
-
-@media screen, handheld {
-h1 {
-  margin-top:1cm;
-  background-image: url("chapter-rounded-bottom.png");
-  background-repeat: no-repeat;
-  background-position: bottom right;
-}
-div.page-reset > h1 {
-  margin-top:0cm;
-}
-}
-
-
-h2 {
-  font-size: 1.2em;
-  text-transform: uppercase;
-  font-weight: bold;
-}
-
-h3 {
-  font-size: 1em;
-  font-weight: bold;
-}
-
-q::before {
-  content: "\201C";
-}
-
-q::after {
-  content: "\201D";
-}
-
-p { margin: 0 }
-p + p { text-indent: 1.3em ; margin-top: 0.2em; }
-p.sidenote + p, p.caption, p.art { text-indent: 0 }
-
-p.author {
-  margin-top: 2em;
-  text-indent: 0;
-  text-align: right;
-}
-
-a { text-decoration: none; color: black }
-
-/* cross-references */
-
-a.pageref::after { content: " on page " target-counter(attr(href), page); }
-a.chapref::before { content: " Chapter " target-counter(attr(href), chapter) ", "; }
-a.figref { content: " Figure " target-counter(attr(href), figure); }
-a.tableref { content: " Table " target-counter(attr(href), figure); }
-a.listingref { content: " Listing " target-counter(attr(href), listing); }
-
-/* sidenotes */
-
-.sidenote {
-  float: left;
-  clear: left;
-  margin: 0 0 1em -41%;
-  width: 37%;
-  font-size: 0.9em;
-  font-style: normal;
-  text-indent: 0;
-  text-align: right;
-  page-break-inside: avoid;
-}
-
-/* sidebars */
-
-div.sidebar {
-  float: top-next;
-  margin: 1.2em 0 1.2em 0;
-  border: thin solid;
-  background: #CCC;
-  padding: 0.5em 1em;
-  page-break-inside: avoid;
-  column-count: 2;
-  column-gap: 1.5em;
-}
-
-div.sidebar h2 {
-  margin-top: 0;
-}
-
-/* frontpage */
-
-.title p{
-	font-size:22pt;
-  	font-family: "Gill Sans", sans-serif;
-  	text-align: center;
-}
-
-.copyright-section {
-	text-align: center;
-	font-size: 9pt;
-	page-break-after: always;
-	margin-top: 50pt;
-	margin-bottom: 20pt;
-}
-
-.toc-title {
-	font-size:18pt;
-  	font-family: "Gill Sans", sans-serif;
-  	text-align: left;
-  	margin-left:20pt;
-  	margin-bottom: 40pt;
-
-}
-
-/* figures, tables, and listings */
-
-div.confluenceTableSmall th.confluenceTh {
-  font-size: 11px;
-}
-
-div.confluenceTableSmall td.confluenceTd {
-  font-size: 7px;
-}
-
-div.figure {
-  margin: 1em 0;
-  counter-increment: figure;
-}
-
-div.figure .caption, div.table .caption {
-  font-size: 0.9em;
-  font-style: italic;
-}
-
-div.figure .caption::before {
-  content: "Figure " counter(figure) ". ";
-  font-weight: bold;
-  font-style: normal;
-}
-
-div.table .caption::before {
-  content: "Table " counter(table) ". ";
-  font-weight: bold;
-  font-style: normal;
-}
-
-div.table {
-  margin: 1em 0;
-  counter-increment: table;
-}
-
-div.table th {
-  text-align: left;
-}
-
-table th, table td {
-  text-align: left;
-  padding-right: 1em;
-  page-break-inside: avoid;
-}
-
-table th {
-  border-top: thin solid;
-  border-bottom: thin solid;
-  padding-top: 0.2em;
-  padding-bottom: 0.2em;
-}
-table td {
-  border-top: none;
-  border-bottom: thin dotted;
-  padding-top: 0.2em;
-  padding-bottom: 0.2em;
-}
-
-div.Scrollbar {
-	display: none;
-}
-
-
-/* Weird div.codeHeader a b::before would be a better selection
-   but prince does not properly match it.. Firefox does. */
-div.codeHeader::before {
-  content: "Listing " counter(listing) ". ";
-  font-weight: bold;
-  font-style: normal;
-}
-div.codeHeader a b {
-  font-style: italic;
-  font-weight: normal;
-}
-div.codeHeader {
-  font-size: 0.9em;
-  counter-increment: listing;
-}
-div.code {
-	border: 1px dashed #c0c0c0;
-    font-size: 12px;
-	font-family: Courier;
-    margin: 5px;
-	line-height: 13px;
-	padding: 3px;
-	background-color: #f8f8f8;
-
-}
-
-
-@page {
-  margin: 2cm;
-  size: 7in 9.25in;
-
-  @footnotes {
-    border-top: thin solid black;
-    padding-top: 0.3em;
-    margin-top: 0.6em;
-  }
-}
-
-
-/* define default page and names pages: cover, blank, frontmatter */
-div.page-reset {
-    counter-reset: page 1;
-}
-
-@page :left {
-  @top-left-corner {
-    font-weight: 900; font: 9pt "Gill Sans", serif;
-    content: counter(page);
-    text-align: left;
-    margin-left: 1cm;
-    visibility: hidden;
-  }
-  @top-left {
-    font-weight: 900;
-    font: 9pt "Gill Sans", serif; white-space: pre; text-transform: uppercase; letter-spacing: 0.1em;
-    content: string(header, first);
-    visibility: hidden;
-  }
-  @bottom-left-corner {
-    font-weight: 900; font: 9pt "Gill Sans", serif;
-    content: counter(page);
-    text-align: left;
-    margin-left: 1cm;
-  }
-  @bottom-left {
-    font-weight: 900;
-    font: 9pt "Gill Sans", serif; white-space: pre; text-transform: uppercase; letter-spacing: 0.1em;
-    content: string(header, first);
-  }
-}
-
-@page :right {
-  @top-right-corner {
-    font-weight: 900; font: 9pt "Gill Sans", serif;
-    content: counter(page);
-    text-align: left;
-    margin-left: 1cm;
-    visibility: hidden;
-  }
-  @top-right {
-    font-weight: 900;
-    font: 9pt "Gill Sans", serif; white-space: pre; text-transform: uppercase; letter-spacing: 0.1em;
-    content: string(header, first)
-    visibility: hidden;
-  }
-  @bottom-right-corner {
-    font-weight: 900; font: 9pt "Gill Sans", serif;
-    content: counter(page);
-    text-align: right;
-    margin-right: 1cm;
-  }
-  @bottom-right {
-    font-weight: 900; font: 9pt "Gill Sans", serif;
-    white-space: pre; text-transform: uppercase; letter-spacing: 0.1em;
-    content: string(header, first)
-  }
-}
-
-/*
-  In theory we should be able to use the :first selector so taht
-  we can put the page numbering on the bottom of the first page of the chapter
-  but have the rest of the pages number at the top.  But this does not seem
-  to work.  See http://www.princexml.com/doc/6.0/page-selectors/
-
-  So for now just always number at the bottom :(
-*/
-/*
-div.chapter { page: bottom-number; }
-@page bottom-number :first {
-  @top-left {
-    visibility: hidden;
-  }
-  @bottom-left {
-    visibility: visible;
-  }
-  @top-right {
-    visibility: hidden;
-  }
-  @bottom-right {
-    visibility: visible;
-  }
-}
-*/
-
-@page cover { margin: 0; }
-
-@page frontmatter :left {
-  @bottom-left-corner {
-    content: counter(page, lower-roman);
-  }
-  @bottom-left-corner {
-    content: counter(page, lower-roman);
-  }
-}
-
-@page frontmatter :right {
-  @bottom-right-corner {
-    content: counter(page, lower-roman);
-  }
-  @bottom-right-corner {
-    content: counter(page, lower-roman);
-  }
-}
-
-@page blank :left {
-  @top-left { visibility: hidden; }
-  @bottom-left { visibility: hidden; }
-  @top-left-corner { visibility: hidden; }
-  @bottom-left-corner { visibility: hidden; }
-}
-
-@page blank :right {
-  @top-right { visibility: hidden; }
-  @bottom-right { visibility: hidden; }
-  @top-right-corner { visibility: hidden; }
-  @bottom-right-corner { visibility: hidden; }
-}
-
-/* footnotes */
-.footnote {
-  display: none;                   /* default rule */
-
-  display: prince-footnote;        /* prince-specific rules */
-  position: footnote;
-  footnote-style-position: inside;
-
-  counter-increment: footnote;
-  margin-left: 1.4em;
-  font-size: 90%;
-  line-height: 1.4;
-}
-
-.footnote::footnote-call {
-  vertical-align: super;
-  font-size: 80%;
-}
-
-.footnote::footnote-marker {
-  vertical-align: super;
-  color: green;
-  padding-right: 0.4em;
-}
-
-/* Confluence contents to hide */
-#labels-section {
-	display: none;
-}
-#comments-section {
-	display: none;
-}
-#footer {
-	display: none;
-}
-.hidden {
-	display: none;
-}
-
-/*
-   A book consists of different types of sections. We propose to use
-   DIV elements with these class names:
-
-    frontcover
-    halftitlepage: contains the title of the book
-    titlepage: contains the title of the book, name of author(s) and publisher
-    imprint: left page with copyright, publisher, library printing information
-    dedication: right page with short dedication
-    foreword: written by someone other than the author(s)
-    toc: table of contents
-    preface: preface, including acknowledgements
-    chapter: each chapter is given its own DIV element
-    references: contains list of references
-    appendix: each appendix is given its own
-    bibliography
-    glossary
-    index
-    colophon: describes how the book was produced
-    backcover
-
-   A book will use several of the types listed above, but few books
-   will use all of them.
-*/
-
-/* which section uses which named page */
-
-div.halftitlepage, div.titlepage, div.imprint, div.dedication { page: blank }
-div.foreword, div.toc, div.preface { page: frontmatter }
-
-
-/* page breaks */
-div.frontcover, div.halftitlepage, div.titlepage { page-break-before: right }
-div.imprint { page-break-before: always; }
-div.chapter { page-break-before: always; }
-div.dedication, div.foreword, div.toc, div.preface, div.reference,
-div.appendix, div.bibliography, div.glossary, div.index, div.colophon {
-  page-break-before: always
-}
-div.backcover { page-break-before: left }
-
-/* titlepage, halftitlepage */
-
-div.titlepage h1, div.halftitlepage h1 { margin-bottom: 2em; }
-div.titlepage h2, div.halftitlepage h2 { font-size: 1.2em; margin-bottom: 3em; }
-div.titlepage h3, div.halftitlepage h3 { font-size: 1em; margin-bottom: 3em; }
-div.titlepage p, div.halftitlepage p {
-  font-size: 1.4em;
-  font-weight: bold;
-  margin: 0; padding: 0;
-}
-
-
-/* TOC */
-
-ul.toc, ul.toc ul {
-  list-style-type: none;
-  margin: 0; padding: 0;
-  margin-left: 3cm;
-}
-ul.toc ul {
-  margin-left: 1em;
-  font-weight: normal;
-}
-ul.toc > li {
-  font-weight: bold;
-  margin-bottom: 0.5em;
-}
-ul.toc a::after {
-  content: leader('.') target-counter(attr(href), page);
-  font-style: normal;
-}
-ul.toc > li.frontmatter a::after {
-  content: leader('.') target-counter(attr(href), page, lower-roman);
-  font-style: normal;
-}
-ul.toc > li.endmatter a::after {
-  content: leader('.') target-counter(attr(href), page);
-  font-style: normal;
-}
-ul.toc > li.chapter::before {
-  content: "Chapter " counter(toc-chapter, decimal);
-  display: block;
-  margin: 1em 0 0.1em -2.5cm;
-  font-weight: normal;
-  counter-increment: toc-chapter;
-  page-break-after: avoid;
-}
-
-/* chapter numbers */
-
-div.chapter { counter-increment: chapter; }
-div.chapter h1::before {
-  text-transform: uppercase;
-  letter-spacing: 0.15em;
-  content: "Chapter  " counter(chapter) " \A\B0 \B0 \B0 \B0\A";
-  white-space: pre;
-  font-size: 50%;
-}
-
-div.frontcover h1::before, div.titlepage h1::before, div.halftitlepage h1::before {
-  content: normal; /* that is, none */
-}
-
-h1 { string-set: header content();}
-div.chapter h1 { string-set: header "Chapter " counter(chapter) " - " content(); }
-
-/* index */
-
-ul.index {
-  list-style-type: none;
-  margin: 0; padding: 0;
-  column-count: 2;
-  column-gap: 1em;
-}
-
-ul.index a::after { content: ", " target-counter(attr(href), page); }
-
-
-span.element, span.attribute {
-  text-transform: uppercase;
-  font-weight: bold;
-  font-size: 80%;
-}
-span.property { font-weight: bold }
-code, span.css, span.value, span.declaration {
-  font: 90% "Lucida Console", "Lucida Sans Typewriter", monospace;
-}
-
-
-@media screen, handheld {
-  html {font: 14px "Gill Sans", sans-serif; }
-  h1 { margin-bottom: 0.5em }
-  div.frontcover, div.halftitlepage, div.titlepage, div.imprint,
-  div.dedication, div.foreword, div.toc, div.index { display: none }
-  body {
-      margin: 0cm;
-      margin-left: 2cm;
-      margin-right: 2cm;
-  }
-}
-
-/*
- * Enhancements to the take advantage of some of the style markup that
- * Confluence generates
- */
-a sup img { visibility: hidden; position: absolute;}
-
-img {
-  prince-image-resolution:150dpi;
-}
-
-table {
-  font: "Lucida Console", "Lucida Sans Typewriter", monospace;
-}
-
-table td {
-  font-size: 10pt;
-}
-
-pre {
-   white-space: pre-wrap;
-}
-
-.codeContent {
-  font-size: 80%;
-}
-.code {
-}
-.code-keyword {
-  color: #000091;
-  background-color: inherit;
-}
-
-.code-object {
-  color: #910091;
-  background-color: inherit;
-}
-
-.code-quote {
-  color: #009100;
-  background-color: inherit;
-}
-
-.code-comment {
-  color: #808080;
-  background-color: inherit;
-}
-
-
-.code-xml .code-keyword {
-  color: inherit;
-  font-weight: bold;
-}
-
-.code-tag {
-  color: #000091;
-  background-color: inherit;
-}
-
-.noteMacro { border-color: #F0C000; background-color: #FFFFCE;}
-.warningMacro { border-color: #CC0000; background-color: #FFCCCC }
-.infoMacro { border-color: #3c78b5; background-color: #D8E4F1; }
-.tipMacro { border-color: #090; background-color: #dfd;}
-.noteMacro, .warningMacro, .infoMacro, .tipMacro, .informationMacroPadding {
-  border: thin solid;
-  float: top-next;
-  margin: 1em 0 1.2em 0;
-  padding: 0.5em;
-  column-count: 2;
-  column-gap: 1.5em;
-  width: 100%;
-}
-table.infoMacro td, table.warningMacro td, table.tipMacro td, table.noteMacro td, table.sectionMacro td {
-    border: none;
-}
-table.infoMacro p, table.warningMacro p, table.tipMacro p, table.noteMacro p, table.sectionMacro p {
-    font-size:x-small;
-    margin-top: 1em;
-}
-  </style>
-  <style type="text/css">
-.syntax .hll { background-color: #ffffcc }
-.syntax  { background: #f0f0f0; }
-.syntax .c { color: #60a0b0; font-style: italic } /* Comment */
-.syntax .err { border: 1px solid #FF0000 } /* Error */
-.syntax .k { color: #007020; font-weight: bold } /* Keyword */
-.syntax .o { color: #666666 } /* Operator */
-.syntax .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */
-.syntax .cp { color: #007020 } /* Comment.Preproc */
-.syntax .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */
-.syntax .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */
-.syntax .gd { color: #A00000 } /* Generic.Deleted */
-.syntax .ge { font-style: italic } /* Generic.Emph */
-.syntax .gr { color: #FF0000 } /* Generic.Error */
-.syntax .gh { color: #000080; font-weight: bold } /* Generic.Heading */
-.syntax .gi { color: #00A000 } /* Generic.Inserted */
-.syntax .go { color: #808080 } /* Generic.Output */
-.syntax .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
-.syntax .gs { font-weight: bold } /* Generic.Strong */
-.syntax .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
-.syntax .gt { color: #0040D0 } /* Generic.Traceback */
-.syntax .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
-.syntax .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
-.syntax .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
-.syntax .kp { color: #007020 } /* Keyword.Pseudo */
-.syntax .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
-.syntax .kt { color: #902000 } /* Keyword.Type */
-.syntax .m { color: #40a070 } /* Literal.Number */
-.syntax .s { color: #4070a0 } /* Literal.String */
-.syntax .na { color: #4070a0 } /* Name.Attribute */
-.syntax .nb { color: #007020 } /* Name.Builtin */
-.syntax .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
-.syntax .no { color: #60add5 } /* Name.Constant */
-.syntax .nd { color: #555555; font-weight: bold } /* Name.Decorator */
-.syntax .ni { color: #d55537; font-weight: bold } /* Name.Entity */
-.syntax .ne { color: #007020 } /* Name.Exception */
-.syntax .nf { color: #06287e } /* Name.Function */
-.syntax .nl { color: #002070; font-weight: bold } /* Name.Label */
-.syntax .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
-.syntax .nt { color: #062873; font-weight: bold } /* Name.Tag */
-.syntax .nv { color: #bb60d5 } /* Name.Variable */
-.syntax .ow { color: #007020; font-weight: bold } /* Operator.Word */
-.syntax .w { color: #bbbbbb } /* Text.Whitespace */
-.syntax .mf { color: #40a070 } /* Literal.Number.Float */
-.syntax .mh { color: #40a070 } /* Literal.Number.Hex */
-.syntax .mi { color: #40a070 } /* Literal.Number.Integer */
-.syntax .mo { color: #40a070 } /* Literal.Number.Oct */
-.syntax .sb { color: #4070a0 } /* Literal.String.Backtick */
-.syntax .sc { color: #4070a0 } /* Literal.String.Char */
-.syntax .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
-.syntax .s2 { color: #4070a0 } /* Literal.String.Double */
-.syntax .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
-.syntax .sh { color: #4070a0 } /* Literal.String.Heredoc */
-.syntax .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
-.syntax .sx { color: #c65d09 } /* Literal.String.Other */
-.syntax .sr { color: #235388 } /* Literal.String.Regex */
-.syntax .s1 { color: #4070a0 } /* Literal.String.Single */
-.syntax .ss { color: #517918 } /* Literal.String.Symbol */
-.syntax .bp { color: #007020 } /* Name.Builtin.Pseudo */
-.syntax .vc { color: #bb60d5 } /* Name.Variable.Class */
-.syntax .vg { color: #bb60d5 } /* Name.Variable.Global */
-.syntax .vi { color: #bb60d5 } /* Name.Variable.Instance */
-.syntax .il { color: #40a070 } /* Literal.Number.Integer.Long */
-
-
-/* don't highlight errors */
-.syntax .err {
-  border: none;
-}
-
-.syntax {
-  font-size: .9em;
-  font-family:Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace;
-  background-color: #F8F8FF;
-
-  overflow:auto;
-  -moz-background-clip:border;
-  -moz-background-inline-policy:continuous;
-  -moz-background-origin:padding;
-  margin: 1em 0 1em 0;
-  border:1px solid #DDDDDD;
-
-  border-top-left-radius: 8px; -webkit-border-top-left-radius: 8px; -moz-border-radius-topleft: 8px;
-  border-top-right-radius: 8px; -webkit-border-top-right-radius: 8px; -moz-border-radius-topright: 8px;
-  border-style: solid;  border-width: 1px; border-color: #dedede !important;
-  padding: 1em;
-}
-.syntax .linenodiv  {
-  background-color:#ECECEC;
-  border-right:1px solid #DDDDDD;
-  color:#AAAAAA;
-  padding: .5em;
-  text-align:right;
-}
-.syntax .highlight  {
-}
-.syntax pre {
-  margin:0;
-}
-
-pre.syntax {
-  padding: .5em;
-  background-color: #F8F8FF; overflow:auto;
-}
-
-.syntax code {
-  font-family:Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace;
-  font-size: 10pt;
-}
-
-div.compare { width: 700px; }
-div.compare div.compare-left { float:left; width:340px; padding:5px; margin-top: 15px; }
-div.compare div.compare-right { float:right; width:340px; padding:5px; margin-top: 15px; }
-div.compare div h3 {
-  margin-left: 15px;
-  padding: 5px 15px;
-  display: inline;
-  font-size: .8em;
-  color: #666;
-
-  border-top: 1px solid #ccc; -moz-border-top-colors: #ccc white white #e5e5e5;
-  border-left: 1px solid #ccc; -moz-border-left-colors: #ccc white white #e5e5e5;
-  border-right: 1px solid #ccc;-moz-border-right-colors: #ccc white white #e5e5e5;
-  border-top-left-radius: 8px; -webkit-border-top-left-radius: 8px;  -moz-border-radius-topleft: 8px;
-  border-top-right-radius: 8px; -webkit-border-top-right-radius: 8px; -moz-border-radius-topright: 8px;
-}
-div.compare div div {
-  margin: 5px 0px 0px 0px;
-}
-.clear {
-  clear:both;
-}
-.wide div.compare div.compare-left { float:none; width:700px; }
-.wide div.compare div.compare-right { float:none; width:700px; }
-
-  </style>
-
-  <title>${title}</title>
-</head>
-<body>
-  <div id="titlepage">
-    <div id="title">Apache Karaf</div>
-    <div id="subtitle">Version ${karaf.version}</div>
-  </div>
-  <div id="main">
-    <%= body %>
-  </div>
-</body>
-</html>
diff --git a/karaf-2.3.x/manual/src/main/webapp/WEB-INF/web.xml b/karaf-2.3.x/manual/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index d461465..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (C) 2009-2010 the original author or authors.
-    See the notice.md file distributed with this work for additional
-    information regarding copyright ownership.
-
-    Licensed 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.
-
--->
-
-<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
-	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
-	version="2.5">
-
-  <display-name>Apache Karaf Documentation</display-name>
-
-  <description>
-    Apache Karaf Documentation
-  </description>
-
-  <filter>
-    <filter-name>TemplateEngineFilter</filter-name>
-    <filter-class>org.fusesource.scalate.servlet.TemplateEngineFilter</filter-class>
-  </filter>
-  <filter-mapping>
-    <filter-name>TemplateEngineFilter</filter-name>
-    <url-pattern>/*</url-pattern>
-  </filter-mapping>
-
-  <welcome-file-list>
-    <welcome-file>index.conf</welcome-file>
-  </welcome-file-list>
-
-  <error-page>
-    <error-code>500</error-code>
-    <location>/WEB-INF/scalate/errors/500.scaml</location>
-  </error-page>
-</web-app>
diff --git a/karaf-2.3.x/manual/src/main/webapp/_banner.ssp b/karaf-2.3.x/manual/src/main/webapp/_banner.ssp
deleted file mode 100644
index 1f9c27d..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/_banner.ssp
+++ /dev/null
@@ -1,14 +0,0 @@
-      <table border="0" cellpadding="0" cellspacing="0" width="100%">
-        <tr>
-          <td align="left" class="topbardiv" nowrap="">
-<a href="http://karaf.apache.org/" title="A server side OSGi distribution">
-            <img border="0" src="${uri("/images/karaf-logo.png")}" width="400px"></img>
-</a>
-          </td>
-          <td align="right" nowrap="">
-<a href="http://www.apache.org/" title="The Apache Sofware Foundation">
-            <img border="0" src="${uri("/images/asf-logo.png")}">
-</a>
-          </td>
-        </tr>
-      </table>
diff --git a/karaf-2.3.x/manual/src/main/webapp/_navigation.conf b/karaf-2.3.x/manual/src/main/webapp/_navigation.conf
deleted file mode 100644
index 4ecf08f..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/_navigation.conf
+++ /dev/null
@@ -1,43 +0,0 @@
-h3. [Home|/index]
-
-- [Overview]
-- [Quick Start]
-
-h3. [Users Guide|/users-guide/index]
-
-- [Installing Karaf|/users-guide/installation]
-- [Directory Structure|/users-guide/directory-structure]
-- [Starting and stopping Karaf|/users-guide/start-stop]
-- [OS integration|/users-guide/wrapper]
-- [Using the console|/users-guide/using-console]
-- [Remote console|/users-guide/remote-console]
-- [Web console|/users-guide/web-console]
-- [Child instances|/users-guide/child-instances]
-- [Security|/users-guide/security]
-- [Failover Deployments|/users-guide/failover]
-- [Logging system|/users-guide/logging-system]
-- [Deployer|/users-guide/deployer]
-- [Provisioning|/users-guide/provisioning]
-- [KAR archive|/users-guide/kar]
-- [Configuration|/users-guide/configuration]
-- [HTTP service|/users-guide/http]
-- [Web applications|/users-guide/web-applications]
-- [JRE tuning|/users-guide/jre-tuning]
-- [JMX for administration and monitoring|jmx]
-
-h3. [Developers Guide|/developers-guide/index]
-
-- [Maven Archetypes|/developers-guide/archetypes]
-- [Branding the Console|/developers-guide/branding-console]
-- [Extending the Console|/developers-guide/extending-console]
-- [Custom Distribution|/developers-guide/custom-distribution]
-- [Security Framework|/developers-guide/security-framework]
-- [Using the features-maven-plugin|/developers-guide/features-maven-plugin]
-- [Troubleshooting, Debugging and Profiling|/developers-guide/debugging]
-- [Programmatically connect to the console|/developers-guide/connect-console]
-- [Writing integration tests|/developers-guide/writing-tests]
-- [Creating bundles|/developers-guide/creating-bundles]
-- [Shell syntax|/developers-guide/shell-syntax]
-- [Github Contributions|/developers-guide/github-contributions]
-
-h3. [Commands|/commands/commands]
diff --git a/karaf-2.3.x/manual/src/main/webapp/_quicklinks.ssp b/karaf-2.3.x/manual/src/main/webapp/_quicklinks.ssp
deleted file mode 100644
index 1594d7e..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/_quicklinks.ssp
+++ /dev/null
@@ -1,8 +0,0 @@
-<p>
-<a href="${uri("/index.html")}" title="Home">Home</a>
-&#124;
-<a href="${uri("/users-guide/index.html")}" title="Users Guide">Users Guide</a>
-&#124;
-<a href="${uri("/developers-guide/index.html")}" title="Developers Guide">Developers Guide</a>
-</p>
-
diff --git a/karaf-2.3.x/manual/src/main/webapp/css/pygmentize.css b/karaf-2.3.x/manual/src/main/webapp/css/pygmentize.css
deleted file mode 100644
index 80efdcd..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/css/pygmentize.css
+++ /dev/null
@@ -1,134 +0,0 @@
-.syntax .hll { background-color: #ffffcc }
-.syntax  { background: #f0f0f0; }
-.syntax .c { color: #60a0b0; font-style: italic } /* Comment */
-.syntax .err { border: 1px solid #FF0000 } /* Error */
-.syntax .k { color: #007020; font-weight: bold } /* Keyword */
-.syntax .o { color: #666666 } /* Operator */
-.syntax .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */
-.syntax .cp { color: #007020 } /* Comment.Preproc */
-.syntax .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */
-.syntax .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */
-.syntax .gd { color: #A00000 } /* Generic.Deleted */
-.syntax .ge { font-style: italic } /* Generic.Emph */
-.syntax .gr { color: #FF0000 } /* Generic.Error */
-.syntax .gh { color: #000080; font-weight: bold } /* Generic.Heading */
-.syntax .gi { color: #00A000 } /* Generic.Inserted */
-.syntax .go { color: #808080 } /* Generic.Output */
-.syntax .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
-.syntax .gs { font-weight: bold } /* Generic.Strong */
-.syntax .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
-.syntax .gt { color: #0040D0 } /* Generic.Traceback */
-.syntax .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
-.syntax .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
-.syntax .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
-.syntax .kp { color: #007020 } /* Keyword.Pseudo */
-.syntax .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
-.syntax .kt { color: #902000 } /* Keyword.Type */
-.syntax .m { color: #40a070 } /* Literal.Number */
-.syntax .s { color: #4070a0 } /* Literal.String */
-.syntax .na { color: #4070a0 } /* Name.Attribute */
-.syntax .nb { color: #007020 } /* Name.Builtin */
-.syntax .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
-.syntax .no { color: #60add5 } /* Name.Constant */
-.syntax .nd { color: #555555; font-weight: bold } /* Name.Decorator */
-.syntax .ni { color: #d55537; font-weight: bold } /* Name.Entity */
-.syntax .ne { color: #007020 } /* Name.Exception */
-.syntax .nf { color: #06287e } /* Name.Function */
-.syntax .nl { color: #002070; font-weight: bold } /* Name.Label */
-.syntax .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
-.syntax .nt { color: #062873; font-weight: bold } /* Name.Tag */
-.syntax .nv { color: #bb60d5 } /* Name.Variable */
-.syntax .ow { color: #007020; font-weight: bold } /* Operator.Word */
-.syntax .w { color: #bbbbbb } /* Text.Whitespace */
-.syntax .mf { color: #40a070 } /* Literal.Number.Float */
-.syntax .mh { color: #40a070 } /* Literal.Number.Hex */
-.syntax .mi { color: #40a070 } /* Literal.Number.Integer */
-.syntax .mo { color: #40a070 } /* Literal.Number.Oct */
-.syntax .sb { color: #4070a0 } /* Literal.String.Backtick */
-.syntax .sc { color: #4070a0 } /* Literal.String.Char */
-.syntax .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
-.syntax .s2 { color: #4070a0 } /* Literal.String.Double */
-.syntax .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
-.syntax .sh { color: #4070a0 } /* Literal.String.Heredoc */
-.syntax .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
-.syntax .sx { color: #c65d09 } /* Literal.String.Other */
-.syntax .sr { color: #235388 } /* Literal.String.Regex */
-.syntax .s1 { color: #4070a0 } /* Literal.String.Single */
-.syntax .ss { color: #517918 } /* Literal.String.Symbol */
-.syntax .bp { color: #007020 } /* Name.Builtin.Pseudo */
-.syntax .vc { color: #bb60d5 } /* Name.Variable.Class */
-.syntax .vg { color: #bb60d5 } /* Name.Variable.Global */
-.syntax .vi { color: #bb60d5 } /* Name.Variable.Instance */
-.syntax .il { color: #40a070 } /* Literal.Number.Integer.Long */
-
-
-/* don't highlight errors */
-.syntax .err {
-  border: none;
-}
-
-.syntax {
-  font-size: .9em;
-  font-family:Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace;
-  background-color: #F8F8FF; 
-  
-  overflow:auto;
-  -moz-background-clip:border;
-  -moz-background-inline-policy:continuous;
-  -moz-background-origin:padding;
-  margin: 1em 0 1em 0;
-  border:1px solid #DDDDDD;
-  
-  border-top-left-radius: 8px; -webkit-border-top-left-radius: 8px; -moz-border-radius-topleft: 8px;  
-  border-top-right-radius: 8px; -webkit-border-top-right-radius: 8px; -moz-border-radius-topright: 8px;
-  border-style: solid;  border-width: 1px; border-color: #dedede !important; 
-  padding: 1em;
-}
-.syntax .linenodiv  {
-  background-color:#ECECEC;
-  border-right:1px solid #DDDDDD;
-  color:#AAAAAA;
-  padding: .5em;
-  text-align:right;
-}
-.syntax .highlight  {
-}
-.syntax pre {
-  margin:0;
-}
-
-pre.syntax {
-  padding: .5em;
-  background-color: #F8F8FF; overflow:auto;
-}
-
-.syntax code {
-  font-family:Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace;
-  font-size: 10pt;
-}
-
-div.compare { width: 700px; }
-div.compare div.compare-left { float:left; width:340px; padding:5px; margin-top: 15px; }
-div.compare div.compare-right { float:right; width:340px; padding:5px; margin-top: 15px; }
-div.compare div h3 {
-  margin-left: 15px;
-  padding: 5px 15px;
-  display: inline;
-  font-size: .8em;
-  color: #666;
-
-  border-top: 1px solid #ccc; -moz-border-top-colors: #ccc white white #e5e5e5;
-  border-left: 1px solid #ccc; -moz-border-left-colors: #ccc white white #e5e5e5;
-  border-right: 1px solid #ccc;-moz-border-right-colors: #ccc white white #e5e5e5;
-  border-top-left-radius: 8px; -webkit-border-top-left-radius: 8px;  -moz-border-radius-topleft: 8px;
-  border-top-right-radius: 8px; -webkit-border-top-right-radius: 8px; -moz-border-radius-topright: 8px; 
-}
-div.compare div div {
-  margin: 5px 0px 0px 0px;
-}
-.clear {
-  clear:both;
-}
-.wide div.compare div.compare-left { float:none; width:700px; }
-.wide div.compare div.compare-right { float:none; width:700px; }
-
diff --git a/karaf-2.3.x/manual/src/main/webapp/css/scalate/console.css b/karaf-2.3.x/manual/src/main/webapp/css/scalate/console.css
deleted file mode 100644
index 4b2dfe7..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/css/scalate/console.css
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * Copyright (C) 2009-2010 the original author or authors.
- * See the notice.md file distributed with this work for additional
- * information regarding copyright ownership.
- *
- * Licensed 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.
- */
-
-#scalate-console {
-  position:fixed;
-  top:40px;
-  right:10px;
-  background: #FDFCAD;
-  padding:10px;
-  border: 1px solid #BDBD81;
-  font-family:Arial,Verdana,Helvetica,sans-serif;
-  font-size: 80%;
-  max-width: 400px;
-}
-
-#scalate-console .archetypes ul, #scalate-console .templates ul, #scalate-console .resources ul, #scalate-console .layouts ul   {
-  padding-left:20px;
-  overflow: auto;
-}
-
-#scalate-console .toggle {
-  text-align: right;
-}
-
-#scalate-console .toggle img {
-  vertical-align: middle;
-}
-
-#scalate-console div.attributes {
-  margin: 10px;
-  overflow: auto;
-  background: white;
-}
-
-#scalate-console div.attributes table th {
-  text-align: left;
-  color: #993333;
-}
-#scalate-console div.attributes table td {
-  padding:2px;
-  border-top: 1px solid #BDBD81;
-}
-
-#scalate-console div.body {
-  margin: 10px;
-  overflow: auto;
-  max-height: 300px;
-  background: white;
-}
-
-#scalate-console div.systemProperties {
-  margin: 10px;
-  overflow: auto;
-  max-height: 300px;
-  background: white;
-}
diff --git a/karaf-2.3.x/manual/src/main/webapp/css/style.css b/karaf-2.3.x/manual/src/main/webapp/css/style.css
deleted file mode 100644
index 496901e..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/css/style.css
+++ /dev/null
@@ -1,1588 +0,0 @@
-/**
- * Copyright (C) 2009-2010 the original author or authors.
- * See the notice.md file distributed with this work for additional
- * information regarding copyright ownership.
- *
- * Licensed 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.
- */
-body {
-  margin: 0;
-  padding: 0;
-}
-
-#cell-0-0 { background: white url( '../images/bg02-white-left-nogr.png' ) repeat-y right top; }
-#cell-0-1 { height: 1em; width: 85%; }
-#cell-0-2 { background: transparent url( '../images/bg02-white-right-nogr.png' ) repeat-y left top; }
-#cell-1-0 { background: transparent url( '../images/bg.png' ) repeat-x top; }
-#cell-1-1 { background: transparent url( '../images/bg02-blue-left.png' ) no-repeat right top; width:13px; }
-#cell-1-2 { background: transparent url( '../images/bg.png' ) repeat-x top; width:85%; }
-#banner { height: 80px; }
-#cell-1-3 { background: transparent url( '../images/bg02-blue-right.png' ) no-repeat left top; width:13px; }
-#cell-1-4 { background: transparent url( '../images/bg.png' ) repeat-x top; }
-#cell-2-0 { background: white url( '../images/bg02-white-left-nogr.png' ) repeat-y right top; }
-#cell-2-1 { height: 1em; width: 85%; }
-#cell-2-2 { background: white url( '../images/bg02-white-right-nogr.png' ) repeat-y left top; }
-#cell-3-0 { background: transparent url( '../images/bg.png' ) repeat-x top; }
-#cell-3-1 { background: transparent url( '../images/bg02-blue-left.png' ) no-repeat right top; width:13px; }
-#cell-3-2 { background: transparent url( '../images/bg.png' ) repeat-x top; width:85%; }
-#cell-3-3 { background: transparent url( '../images/bg02-blue-right.png' ) no-repeat left top; width:13px; }
-#cell-3-4 { background: transparent url( '../images/bg.png' ) repeat-x top; }
-#cell-4-0 { background: white url( '../images/bg02-white-left-nogr.png' ) repeat-y right top; }
-#cell-4-1 { height: 1em; width: 85%; }
-#cell-4-2 { background: transparent url( '../images/bg02-white-right-nogr.png' ) repeat-y left top; }
-
-#banner {
-  margin: 0px 20px;
-  padding: 0px 50px 0px 50px;
-  font-size: 200%;
-  text-align: center;
-  background: transparent;
-}
-#top-menu {
-  margin: 0px 25px;
-  padding: 2px;
-  line-height: 100%;
-  font-family: Verdana, arial, sans-serif;
-  font-weight: bold;
-  font-size: 11px;
-  color: white;
-  line-height: 13px;
-  overflow: none;
-}
-#top-menu a:link, #top-menu a:visited {
-  color: #ffffff;
-  text-decoration: none;
-}
-#top-menu a:active, #top-menu a:hover {
-  color: #5b8fbe;
-  text-decoration: underline;
-}
-#top-menu sup img {
-  height: 0px;
-  width: 0px;
-}
-
-#footer {
-  padding: 0px 50px 0px 50px;
-  min-height: 0em;
-  text-align: center;
-  color: white;
-  font-size: 65%;
-  font-family: Verdana, arial, sans-serif;
-}
-#site-footer {
-  margin: 5px;
-}
-#footer a:link, #footer a:visited {
-  color: white;
-  text-decoration: none;
-}
-#footer a:hover {
-  color: white;
-  text-decoration: underline;
-}
-
-#wrapper-menu-page-right {
-  background: transparent url( '../images/left-box-right.png' ) repeat-y right;
-}
-
-#wrapper-menu-page-bottom {
-  background: transparent url( '../images/left-box-bottom.png' ) no-repeat right bottom;
-}
-
-#wrapper-menu-page-top {
-  background: transparent url( '../images/left-box-top.png' ) no-repeat right top;
-}
-
-#menu-page {
-  width: 200px;
-  color: #5b8fbe;
-  font-family: Verdana, arial, sans-serif;
-  font-weight: bold;
-  margin: 0px;
-  padding: 17px 11px 17px 0px;
-  text-align: left;
-  margin-left: 0px;
-  line-height: 1em;
-}
-
-#menu-page ul {
-  margin: 0;
-  padding: 0;
-  padding-left: 35px;
-  font-size: 75%;
-}
-
-#menu-page h3 {
-  font-size: 75%;
-  text-transform: uppercase;
-  margin: 1em 0 0.3em 0;
-  color: #5b8fbe;
-  font-weight: normal;
-  letter-spacing: 0.15em;
-  background: url('../images/big-bullet.png') no-repeat 0pt;
-  background-position:left center;
-  margin-left:15px;
-  padding-left: 20px;
-  font-family: Verdana, arial, sans-serif;
-  font-weight: bold;
-}
-
-#menu-page a:link, #menu-page a:visited {
-  color: black;
-}
-
-#menu-page a:hover {
-  color: #5b8fbe;
-}
-
-#content {
-  padding: 20px 0px 0px 0px;
-  display: block;
-  text-align: left;
-  height: 100%;
-  width: 100%;
-  color: black;
-}
-
-h2 {
-  font-size: 110%;
-}
-
-h3 {
-  font-size: 100%;
-}
-
-a:link, a:visited {
-  color: #5b8fbe;
-  text-decoration: none;
-}
-
-a:hover {
-  color: #666;
-  text-decoration: none;
-}
-
-
-table.align {
-  padding: 0px;
-  border: none;
-}
-
-td.align {
-  padding: 0px;
-  border: none;
-}
-
-/*********************************************************************
- CSS Elements that are part of the confluence rendered xhtml
- *********************************************************************/
-.wiki-content {
-	font-family: Verdana, arial, sans-serif;
-	font-size: 11px;
-	line-height: 16px;
-	color: #000000;
-	font-weight: normal;
-	padding-top: 10px;
-	padding-bottom: 10px;
-}
-
-/*
-** when this stylesheet is used for the Tiny MCE Wysiwyg editor's edit area, we can't
-** use an id=PageContent or class=wiki-content, so we must
-** set the body style to that used for PageContent, and p to that used for wiki-content.
-*/
-
-.monospaceInput {
-    font:12px monospace
-}
-
-.wiki-content p, .commentblock p {
-    margin: 16px 0px 16px 0px;
-    padding: 0px;
-}
-
-.wiki-content-preview {
-    padding: 5px;
-    border-left: 1px solid #3c78b5;
-    border-right: 1px solid #3c78b5;
-}
-
-ul, ol {
-    margin-top: 2px;
-    margin-bottom: 2px;
-    padding-top: 0px;
-    padding-bottom: 0px;
-}
-
-pre {
-    padding: 0px;
-    margin-top: 5px;
-    margin-left: 15px;
-    margin-bottom: 5px;
-    margin-right: 5px;
-    text-align: left;
-}
-
-.helpheading {
-    font-weight: bold;
-    background-color: #D0D9BD;
-        border-bottom: 1px solid #3c78b5;
-        padding: 4px 4px 4px 4px;
-        margin: 0px;
-        margin-top: 10px;
-}
-.helpcontent {
-        padding: 4px 4px 20px 4px;
-    background-color: #f5f7f1;
-}
-
-.code {
- 	border: 1px dashed #3c78b5;
-    font-size: 11px;
-	font-family: Courier;
-    margin: 10px;
-	line-height: 13px;
-}
-
-.focusedComment {
-    background: #ffffce;
-}
-
-.commentBox, .focusedComment {
-    padding: 10px;
-    margin: 5px 0 5px 0;
-    border: 1px #bbb solid;
-}
-
-.codeHeader {
-    background-color: #f0f0f0;
- 	border-bottom: 1px dashed #3c78b5;
-    padding: 3px;
-	text-align: center;
-}
-
-.codeContent {
-    text-align: left;
-    background-color: #f0f0f0;
-    padding: 3px;
-}
-
-.preformatted {
- 	border: 1px dashed #3c78b5;
-    font-size: 11px;
-	font-family: Courier;
-    margin: 10px;
-	line-height: 13px;
-}
-
-.preformattedHeader {
-    background-color: #f0f0f0;
- 	border-bottom: 1px dashed #3c78b5;
-    padding: 3px;
-	text-align: center;
-}
-
-.preformattedContent {
-    background-color: #f0f0f0;
-    padding: 3px;
-}
-
-.panel {
- 	border: 1px dashed #3c78b5;
-    margin: 10px;
-    margin-top: 0px;
-}
-
-.panelHeader {
-    background-color: #f0f0f0;
- 	border-bottom: 1px dashed #3c78b5;
-    padding: 3px;
-	text-align: center;
-}
-
-.panelContent {
-    background-color: #f0f0f0;
-    padding: 5px;
-}
-
-.anonymousAlert {
-    background-color: #f0f0f0;
- 	border: 1px dashed red;
-    font-size: 11px;
-    padding: 10px 5px 10px 5px;
-    margin: 4px;
-	line-height: 13px;
-}
-
-.lockAlert {
-    background-color: #f0f0f0;
-    width: 50%;
- 	border: 1px dashed red;
-    font-size: 11px;
-    padding: 10px 5px 10px 5px;
-    margin: 4px;
-	line-height: 13px;
-}
-
-
-.code-keyword {
-  color: #000091;
-  background-color: inherit;
-}
-
-.code-object {
-  color: #910091;
-  background-color: inherit;
-}
-
-.code-quote {
-  color: #009100;
-  background-color: inherit;
-}
-
-.code-comment {
-  color: #808080;
-  background-color: inherit;
-}
-
-
-.code-xml .code-keyword {
-  color: inherit;
-  font-weight: bold;
-}
-
-.code-tag {
-  color: #000091;
-  background-color: inherit;
-}
-
-.breadcrumbs {
-    background-color: #f0f0f0;
- 	border-color: #3c78b5;
-	border-width: 1px 0px 1px 0px;
-	border-style: solid;
-    font-size: 11px;
-    padding: 3px 0px 3px 0px;
-}
-
-.navmenu {
-    border: 1px solid #ccc;
-}
-
-.menuheading {
-    font-weight: bold;
-    background-color: #f0f0f0;
- 	border-bottom: 1px solid #3c78b5;
-	padding: 4px 4px 2px 4px;
-}
-
-.menuitems {
-	padding: 4px 4px 20px 4px;
-}
-
-.rightpanel {
-    border-left: 1px solid #ccc;
-    border-bottom: 1px solid #ccc;
-}
-
-#helpheading {
-    text-align: left;
-    font-weight: bold;
-    background-color: #D0D9BD;
- 	border-bottom: 1px solid #3c78b5;
-	padding: 4px 4px 4px 4px;
-	margin: 0px;
-}
-#helpcontent {
-	padding: 4px 4px 4px 4px;
-    background-color: #f5f7f1;
-}
-.helptab-unselected {
-    font-weight: bold;
-	padding: 5px;
-    background-color: #f5f7f1;
-}
-.helptab-selected {
-    font-weight: bold;
-    background-color: #D0D9BD;
-	padding: 5px;
-}
-.helptabs {
-    margin: 0px;
-    background-color: #f5f7f1;
-	padding: 5px;
-}
-.infopanel-heading {
-    font-weight: bold;
-	padding: 4px 0px 2px 0px;
-}
-
-.pagebody {
-}
-
-.pageheader {
-	padding: 5px 5px 5px 0px;
- 	border-bottom: 1px solid #3c78b5;
-}
-
-.steptitle {
-	font-size: 18px;
-	font-weight: bold;
-	font-family: Arial, sans-serif;
-	color: #003366;
-	margin-bottom: 7px;
-}
-
-.substeptitle {
-    font-size: 12px;
-    font-weight: bold;
-    font-family: Arial, sans-serif;
-    color: #003366;
-    margin: 2px 4px 4px 4px;
-    padding: 2px 4px 1px 4px;
-}
-
-.stepdesc {
-    font-family: Verdana, arial, sans-serif;
-	font-size: 11px;
-	line-height: 16px;
-	font-weight: normal;
-    color: #666666;
-    margin-top: 7px;
-    margin-bottom: 7px;
-}
-
-.steplabel {
-    font-weight: bold;
-    margin-right: 4px;
-    color: black;
-    float: left;
-    width: 15%;
-    text-align: right;
-}
-
-.stepfield {
-    background: #f0f0f0;
-    padding: 5px;
-}
-
-.submitButtons{
-    margin-top:5px;
-    text-align:right;
-}
-
-.formtitle {
-	font-size: 12px;
-	font-weight: bold;
-	font-family: Arial, sans-serif;
-	color: #003366;
-}
-
-.sectionbottom {
-    border-bottom: 1px solid #3c78b5;
-}
-
-.topRow {
-    border-top: 2px solid #3c78b5;
-}
-
-.tabletitle {
-	font-size: 14px;
-	font-weight: bold;
-	font-family: Arial, sans-serif;
-    padding: 3px 0px 2px 0px;
-    margin: 8px 4px 2px 0px;
-	color: #003366;
-	border-bottom: 2px solid #3c78b5;
-}
-.pagesubheading {
-    color: #666666;
-    font-size: 10px;
-    padding: 0px 0px 5px 0px;
-}
-
-HR {
-	color: 3c78b5;
-	height: 1;
-}
-
-A:link, A:visited, A:active, A:hover {
-  color: #5b8fbe;
-}
-
-A:hover {
-  text-decoration: underline;
-}
-
-h1 A:link, h1 A:visited, h1 A:active {
-	text-decoration: none;
-}
-
-h1 A:hover {
-    border-bottom: 1px dotted #003366;
-}
-
-.wiki-content > :first-child, .commentblock > :first-child {
-    margin-top: 3px;
-}
-
-.logocell {
-    padding: 10px;
-}
-
-input {
-	font-family: verdana, geneva, arial, sans-serif;
-	font-size: 11px;
-	color: #000000;
-}
-
-textarea, textarea.editor {
-	font-family: verdana, geneva, arial, sans-serif;
-	font-size: 11px;
-	color: #333333;
-}
-
-/* use logoSpaceLink instead.
-.spacenametitle {
-	font: 21px/31px Impact, Arial, Helvetica;
-    font-weight: 100;
-    color: #999999;
-	margin: 0px;
-}
-.spacenametitle img {
-  margin: 0 0 -4px 0;
-}
-.spacenametitle a {
-    text-decoration: none;
-    color: #999999;
-}
-.spacenametitle a:visited {
-    text-decoration: none;
-    color: #999999;
-}*/
-
-.spacenametitle-printable {
-	font: 20px/25px Impact, Arial, Helvetica;
-    font-weight: 100;
-    color: #999999;
-	margin: 0px;
-}
-.spacenametitle-printable a {
-    text-decoration: none;
-    color: #999999;
-}
-.spacenametitle-printable a:visited {
-    text-decoration: none;
-    color: #999999;
-}
-
-.blogDate {
-	font-weight: bold;
-	text-decoration: none;
-	color: black;
-}
-
-.blogSurtitle {
-    background: #f0f0f0;
- 	border: 1px solid #ddd;
-	padding: 3px;
-	margin: 1px 1px 10px 1px;
-}
-
-.blogHeading {
-    font-size: 20px;
-    line-height: normal;
-    font-weight: bold;
-    padding: 0px;
-    margin: 0px;
-}
-
-.blogHeading a {
-   text-decoration: none;
-   color: black;
-}
-
-.endsection {
-	align: right;
-	color: #666666;
-	margin-top: 10px;
-}
-.endsectionleftnav {
-	align: right;
-	color: #666666;
-	margin-top: 10px;
-}
-
-h1 {
-	font-size: 24px;
-	line-height: normal;
-	font-weight: bold;
-	background-color: #f0f0f0;
-	color: #003366;
- 	border-bottom: 1px solid #3c78b5;
-	padding: 2px;
-	margin: 36px 0px 4px 0px;
-}
-
-h2 {
-	font-size: 18px;
-	line-height: normal;
-	font-weight: bold;
-	background-color: #f0f0f0;
- 	border-bottom: 1px solid #3c78b5;
-	padding: 2px;
-	margin: 27px 0px 4px 0px;
-}
-
-h3 {
-	font-size: 14px;
-	line-height: normal;
-	font-weight: bold;
-	background-color: #f0f0f0;
-	padding: 2px;
-	margin: 21px 0px 4px 0px;
-}
-
-h4 {
-	font-size: 12px;
-	line-height: normal;
-	font-weight: bold;
-	background-color: #f0f0f0;
-	padding: 2px;
-	margin: 18px 0px 4px 0px;
-}
-
-h4.search {
-	font-size: 12px;
-	line-height: normal;
-	font-weight: normal;
-	background-color: #f0f0f0;
-	padding: 4px;
-	margin: 18px 0px 4px 0px;
-}
-
-h5 {
-	font-size: 10px;
-	line-height: normal;
-	font-weight: bold;
-	background-color: #f0f0f0;
-	padding: 2px;
-	margin: 14px 0px 4px 0px;
-}
-
-h6 {
-	font-size: 8px;
-	line-height: normal;
-	font-weight: bold;
-	background-color: #f0f0f0;
-	padding: 2px;
-	margin: 14px 0px 4px 0px;
-}
-
-.smallfont {
-    font-size: 10px;
-}
-.descfont {
-    font-size: 10px;
-    color: #666666;
-}
-.smallerfont {
-    font-size: 9px;
-}
-.smalltext {
-    color: #666666;
-    font-size: 10px;
-}
-.smalltext a {
-    color: #666666;
-}
-.smalltext-blue {
-    color: #3c78b5;
-    font-size: 10px;
-}
-.surtitle {
-    margin-left: 1px;
-    margin-bottom: 5px;
-    font-size: 14px;
-    color: #666666;
-}
-
-/* css hack found here:  http://www.fo3nix.pwp.blueyonder.co.uk/tutorials/css/hacks/ */
-.navItemOver { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #003366; cursor: hand; voice-family: '\'}\''; voice-family:inherit; cursor: pointer;}
-.navItemOver a { color: #ffffff; background-color:#003366; text-decoration: none; }
-.navItemOver a:visited { color: #ffffff; background-color:#003366; text-decoration: none; }
-.navItemOver a:hover { color: #ffffff; background-color:#003366; text-decoration: none; }
-.navItem { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #3c78b5; }
-.navItem a { color: #ffffff; text-decoration: none; }
-.navItem a:hover { color: #ffffff; text-decoration: none; }
-.navItem a:visited { color: #ffffff; text-decoration: none; }
-
-div.padded { padding: 4px; }
-div.thickPadded { padding: 10px; }
-h3.macrolibrariestitle {
-    margin: 0px 0px 0px 0px;
-}
-
-div.centered { text-align: center; margin: 10px; }
-div.centered table {margin: 0px auto; text-align: left; }
-
-.tableview table {
-    margin: 0;
-}
-
-.tableview th {
-    text-align: left;
-    color: #003366;
-    font-size: 12px;
-    padding: 5px 0px 0px 5px;
-    border-bottom: 2px solid #3c78b5;
-}
-.tableview td {
-    text-align: left;
-    border-color: #ccc;
-    border-width: 0px 0px 1px 0px;
-    border-style: solid;
-    margin: 0;
-    padding: 4px 10px 4px 5px;
-}
-
-.grid {
-    margin: 2px 0px 5px 0px;
-    border-collapse: collapse;
-}
-.grid th  {
-    border: 1px solid #ccc;
-    padding: 2px 4px 2px 4px;
-    background: #f0f0f0;
-    text-align: center;
-}
-.grid td  {
-    border: 1px solid #ccc;
-    padding: 3px 4px 3px 4px;
-}
-.gridHover {
-	background-color: #f9f9f9;
-}
-
-td.infocell {
-    background-color: #f0f0f0;
-}
-.label {
-	font-weight: bold;
-	color: #003366;
-}
-.error {
-	background-color: #fcc;
-}
-
-.errorBox {
-	background-color: #fcc;
-    border: 1px solid #c00;
-    padding: 5px;
-    margin: 5px;
-}
-
-.errorMessage {
-	color: #c00;
-}
-
-.success {
-	background-color: #dfd;
-}
-
-.successBox {
-	background-color: #dfd;
-    border: 1px solid #090;
-    padding: 5px;
-    margin-top:5px;
-    margin-bottom:5px;
-}
-
-blockquote {
-	padding-left: 10px;
-	padding-right: 10px;
-	margin-left: 5px;
-	margin-right: 0px;
-	border-left: 1px solid #3c78b5;
-}
-
-table.confluenceTable
-{
-    margin: 5px;
-    border-collapse: collapse;
-}
-
-/* Added as a temporary fix for CONF-4223. The table elements appear to be inheriting the border: none attribute from the sectionMacro class */
-table.confluenceTable td.confluenceTd
-{
-    border-width: 1px;
-    border-style: solid;
-    border-color: #ccc;
-    padding: 3px 4px 3px 4px;
-}
-
-/* Added as a temporary fix for CONF-4223. The table elements appear to be inheriting the border: none attribute from the sectionMacro class */
-table.confluenceTable th.confluenceTh
-{
-    border-width: 1px;
-    border-style: solid;
-    border-color: #ccc;
-    padding: 3px 4px 3px 4px;
-    background-color: #f0f0f0;
-    text-align: center;
-}
-
-td.confluenceTd
-{
-    border-width: 1px;
-    border-style: solid;
-    border-color: #ccc;
-    padding: 3px 4px 3px 4px;
-}
-
-th.confluenceTh
-{
-    border-width: 1px;
-    border-style: solid;
-    border-color: #ccc;
-    padding: 3px 4px 3px 4px;
-    background-color: #f0f0f0;
-    text-align: center;
-}
-
-DIV.small {
-	font-size: 9px;
-}
-
-H1.pagename {
-	margin-top: 0px;
-}
-
-IMG.inline  {}
-
-.loginform {
-    margin: 5px;
-    border: 1px solid #ccc;
-}
-
-/* The text how the "This is a preview" comment should be shown. */
-.previewnote { text-align: center;
-                font-size: 11px;
-                    color: red; }
-
-/* How the preview content should be shown */
-.previewcontent { background: #E0E0E0; }
-
-/* How the system messages should be shown (DisplayMessage.jsp) */
-.messagecontent { background: #E0E0E0; }
-
-/* How the "This page has been modified..." -comment should be shown. */
-.conflictnote { }
-
-.createlink {
-    color: maroon;
-}
-a.createlink {
-    color: maroon;
-}
-.templateparameter {
-    font-size: 9px;
-    color: darkblue;
-}
-
-.diffadded {
-    background: #ddffdd;
-    padding: 1px 1px 1px 4px;
-	border-left: 4px solid darkgreen;
-}
-.diffdeleted {
-    color: #999;
-    background: #ffdddd;
-    padding: 1px 1px 1px 4px;
-	border-left: 4px solid darkred;
-}
-.diffnochange {
-    padding: 1px 1px 1px 4px;
-	border-left: 4px solid lightgrey;
-}
-.differror {
-    background: brown;
-}
-.diff {
-    font-family: lucida console, courier new, fixed-width;
-	font-size: 12px;
-	line-height: 14px;
-}
-.diffaddedchars {
-    background-color:#99ff99;
-    font-weight:bolder;
-}
-.diffremovedchars {
-    background-color:#ff9999;
-    text-decoration: line-through;
-    font-weight:bolder;
-}
-
-.greybackground {
-    background: #f0f0f0
-}
-
-.greybox {
- 	border: 1px solid #ddd;
-	padding: 3px;
-	margin: 1px 1px 10px 1px;
-}
-
-.borderedGreyBox {
-    border: 1px solid #cccccc;
-    background-color: #f0f0f0;
-    padding: 10px;
-}
-
-.greyboxfilled {
- 	border: 1px solid #ddd;
-	padding: 5px;
-	margin: 10px 1px 10px 1px;
-	background: #f0f0f0;
-}
-
-.navBackgroundBox {
-    padding: 5px 5px 5px 5px;
-    font-size: 22px;
-	font-weight: bold;
-	font-family: Arial, sans-serif;
-	color: white;
-    background: #3c78b5;
-    text-decoration: none;
-}
-
-.previewBoxTop {
-	background-color: #f0f0f0;
-    border-width: 1px 1px 0px 1px;
-    border-style: solid;
-    border-color: #3c78b5;
-    padding: 5px;
-    margin: 5px 0px 0px 0px;
-    text-align: center;
-}
-.previewContent {
-    background-color: #fff;
- 	border-color: #3c78b5;
-	border-width: 0px 1px 0px 1px;
-	border-style: solid;
-	padding: 10px;
-	margin: 0px;
-}
-.previewBoxBottom {
-	background-color: #f0f0f0;
-    border-width: 0px 1px 1px 1px;
-    border-style: solid;
-    border-color: #3c78b5;
-    padding: 5px;
-    margin: 0px 0px 5px 0px;
-    text-align: center;
-}
-
-.functionbox {
-    background-color: #f0f0f0;
- 	border: 1px solid #3c78b5;
-	padding: 3px;
-	margin: 1px 1px 10px 1px;
-}
-
-.functionbox-greyborder {
-    background-color: #f0f0f0;
- 	border: 1px solid #ddd;
-	padding: 3px;
-	margin: 1px 1px 10px 1px;
-}
-
-.search-highlight {
-    background-color: #ffffcc;
-}
-
-/* normal (white) background */
-.rowNormal {
-    background-color: #ffffff;
- }
-
-/* alternate (pale yellow) background */
-.rowAlternate {
-    background-color: #f7f7f7;
-}
-
-/* used in the list attachments table */
-.rowAlternateNoBottomColor {
-    background-color: #f7f7f7;
-}
-
-.rowAlternateNoBottomNoColor {
-}
-
-.rowAlternateNoBottomColor td {
-    border-bottom: 0px;
-}
-
-.rowAlternateNoBottomNoColor td {
-    border-bottom: 0px;
-}
-
-/* row highlight (grey) background */
-.rowHighlight {
-    background-color: #f0f0f0;
-
-}
-
-TD.greenbar {FONT-SIZE: 2px; BACKGROUND: #00df00; BORDER: 1px solid #9c9c9c; PADDING: 0px; }
-TD.redbar {FONT-SIZE: 2px; BACKGROUND: #df0000; BORDER: 1px solid #9c9c9c; PADDING: 0px; }
-TD.darkredbar {FONT-SIZE: 2px; BACKGROUND: #af0000; BORDER: 1px solid #9c9c9c; PADDING: 0px; }
-
-TR.testpassed {FONT-SIZE: 2px; BACKGROUND: #ddffdd; PADDING: 0px; }
-TR.testfailed {FONT-SIZE: 2px; BACKGROUND: #ffdddd; PADDING: 0px; }
-
-.toolbar  {
-    margin: 0px;
-    border-collapse: collapse;
-}
-
-.toolbar td  {
-    border: 1px solid #ccc;
-    padding: 2px 2px 2px 2px;
-    color: #ccc;
-}
-
-td.noformatting {
-    border-width: 0px;
-    border-style: none;
-    text-align: center;
-	padding: 0px;
-}
-
-.commentblock {
-    margin: 12px 0 12px 0;
-}
-
-/*
- * Divs displaying the license information, if necessary.
- */
-.license-eval, .license-none, .license-nonprofit {
-    border-top: 1px solid #bbbbbb;
-    text-align: center;
-    font-size: 10px;
-    font-family: Verdana, Arial, Helvetica, sans-serif;
-}
-
-.license-eval, .license-none {
-    background-color: #ffcccc;
-}
-
-.license-eval b, .license-none b {
-    color: #990000
-}
-
-.license-nonprofit {
-    background-color: #ffffff;
-}
-
-/*
- * The shadow at the bottom of the page between the main content and the
- * "powered by" section.
- */
-.bottomshadow {
-    height: 12px;
-    background-image: url("$req.contextPath/images/border/border_bottom.gif");
-    background-repeat: repeat-x;
-}
-
-/*
- * Styling of the operations box
- */
-.navmenu .operations li, .navmenu .operations ul {
-    list-style: none;
-    margin-left: 0;
-    padding-left: 0;
-}
-
-.navmenu .operations ul {
-    margin-bottom: 9px;
-}
-
-.navmenu .label {
-    font-weight: inherit;
-}
-
-/*
- * Styling of ops as a toolbar
- */
-.toolbar div {
-    display: none;
-}
-
-.toolbar .label {
-    display: none;
-}
-
-.toolbar .operations {
-    display: block;
-}
-
-.toolbar .operations ul {
-    display: inline;
-    list-style: none;
-    margin-left: 10px;
-    padding-left: 0;
-}
-
-.toolbar .operations li {
-    list-style: none;
-    display: inline;
-}
-
-/* list page navigational tabs */
-#foldertab {
-padding: 3px 0px 3px 8px;
-margin-left: 0;
-border-bottom: 1px solid #3c78b5;
-font: bold 11px Verdana, sans-serif;
-}
-
-#foldertab li {
-list-style: none;
-margin: 0;
-display: inline;
-}
-
-#foldertab li a {
-padding: 3px 0.5em;
-margin-left: 3px;
-border: 1px solid #3c78b5;
-border-bottom: none;
-background: #3c78b5;
-text-decoration: none;
-}
-
-#foldertab li a:link { color: #ffffff; }
-#foldertab li a:visited { color: #ffffff; }
-
-#foldertab li a:hover {
-color: #ffffff;
-background: #003366;
-border-color: #003366;
-}
-
-#foldertab li a.current {
-background: white;
-border-bottom: 1px solid white;
-color: black;
-}
-
-#foldertab li a.current:link { color: black; }
-#foldertab li a.current:visited { color: black; }
-#foldertab li a.current:hover {
-background: white;
-border-bottom: 1px solid white;
-color: black;
-}
-
-/* alphabet list */
-ul#squaretab {
-margin-left: 0;
-padding-left: 0;
-white-space: nowrap;
-font: bold 8px Verdana, sans-serif;
-}
-
-#squaretab li {
-display: inline;
-list-style-type: none;
-}
-
-#squaretab a {
-padding: 2px 6px;
-border: 1px solid #3c78b5;
-}
-
-#squaretab a:link, #squaretab a:visited {
-color: #fff;
-background-color: #3c78b5;
-text-decoration: none;
-}
-
-#squaretab a:hover {
-color: #ffffff;
-background-color: #003366;
-border-color: #003366;
-text-decoration: none;
-}
-
-#squaretab li a#current {
-background: white;
-color: black;
-}
-
-.blogcalendar * {
-    font-family:verdana, arial, sans-serif;
-    font-size:x-small;
-    font-weight:normal;
-    line-height:140%;
-    padding:2px;
-}
-
-
-table.blogcalendar {
-    border: 1px solid #3c78b5;
-}
-
-.blogcalendar th.calendarhead, a.calendarhead {
-    font-size:x-small;
-    font-weight:bold;
-    padding:2px;
-    text-transform:uppercase;
-    background-color: #3c78b5;
-    color: #ffffff;
-    letter-spacing: .3em;
-    text-transform: uppercase;
-}
-
-.calendarhead:visited {color: white;}
-.calendarhead:active {color: white;}
-.calendarhead:hover {color: white;}
-
-.blogcalendar th {
-    font-size:x-small;
-    font-weight:bold;
-    padding:2px;
-    background-color:#f0f0f0;
-}
-
-.blogcalendar td {
-    font-size:x-small;
-    font-weight:normal;
-}
-
-.searchGroup { padding: 0 0 10px 0; background: #f0f0f0; }
-.searchGroupHeading { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #3c78b5; padding: 2px 4px 1px 4px; }
-.searchItem { padding: 1px 4px 1px 4px; }
-.searchItemSelected { padding: 1px 4px 1px 4px; font-weight: bold; background: #ddd; }
-
-/* permissions page styles */
-.permissionHeading {
-    border-bottom: #bbb; border-width: 0 0 1px 0; border-style: solid; font-size: 16px; text-align: left;
-}
-.permissionTab {
-    border-width: 0 0 0 1px; border-style: solid; background: #3c78b5; color: #ffffff; font-size: 10px;
-}
-.permissionSuperTab {
-    border-width: 0 0 0 1px; border-style: solid; background: #003366; color: #ffffff;
-}
-.permissionCell {
-    border-left: #bbb; border-width: 0 0 0 1px; border-style: solid;
-}
-
-/* warning panel */
-.warningPanel { background: #FFFFCE; border:#F0C000 1px solid; padding: 8px; margin: 10px; }
-/* alert panel */
-.alertPanel { background: #FFCCCC; border:#C00 1px solid; padding: 8px; margin: 10px; }
-
-/* side menu highlighting (e.g. space content screen) */
-.optionPadded { padding: 2px; }
-.optionSelected { background-color: #ffffcc; padding: 2px; border: 1px solid #ddd; margin: -1px; }
-.optionSelected a { font-weight: bold; text-decoration: none; color: black; }
-
-/* information macros */
-.noteMacro { border-style: solid; border-width: 1px; border-color: #F0C000; background-color: #FFFFCE; text-align:left; margin-top: 5px; margin-bottom: 5px}
-.warningMacro { border-style: solid; border-width: 1px; border-color: #c00; background-color: #fcc; text-align:left; margin-top: 5px; margin-bottom: 5px}
-.infoMacro { border-style: solid; border-width: 1px; border-color: #3c78b5; background-color: #D8E4F1; text-align:left; margin-top: 5px; margin-bottom: 5px}
-.tipMacro { border-style: solid; border-width: 1px; border-color: #090; background-color: #dfd; text-align:left; margin-top: 5px; margin-bottom: 5px}
-.informationMacroPadding { padding: 5px 0 0 5px; }
-
-table.infoMacro td, table.warningMacro td, table.tipMacro td, table.noteMacro td, table.sectionMacro td {
-    border: none;
-}
-
-table.sectionMacroWithBorder td.columnMacro { border-style: dashed; border-width: 1px; border-color: #cccccc;}
-
-/* styles for links in the top bar */
-.topBarDiv a:link {color: #ffffff;}
-.topBarDiv a:visited {color: #ffffff;}
-.topBarDiv a:active {color: #ffffff;}
-.topBarDiv a:hover {color: #ffffff;}
-.topBarDiv {color: #ffffff;}
-
-.topBar {
-    background-color: #003366;
-}
-
-
-/* styles for extended operations */
-.greyLinks a:link {color: #666666; text-decoration:underline;}
-.greyLinks a:visited {color: #666666; text-decoration:underline;}
-.greyLinks a:active {color: #666666; text-decoration:underline;}
-.greyLinks a:hover {color: #666666; text-decoration:underline;}
-.greyLinks {color: #666666; display:block; padding: 10px}
-
-.logoSpaceLink {color: #999999; text-decoration: none}
-.logoSpaceLink a:link {color: #999999; text-decoration: none}
-.logoSpaceLink a:visited {color: #999999; text-decoration: none}
-.logoSpaceLink a:active {color: #999999; text-decoration: none}
-.logoSpaceLink a:hover {color: #003366; text-decoration: none}
-
-/* basic panel (basicpanel.vmd) style */
-.basicPanelContainer {border: 1px solid #3c78b5; margin-top: 2px; margin-bottom: 8px; width: 100%}
-.basicPanelTitle {padding: 5px; margin: 0px; background-color: #f0f0f0; color: black; font-weight: bold;}
-.basicPanelBody {padding: 5px; margin: 0px}
-
-.separatorLinks a:link {color: white}
-.separatorLinks a:visited {color: white}
-.separatorLinks a:active {color: white}
-
-.greynavbar {background-color: #f0f0f0; border-top: 1px solid #3c78b5; margin-top: 2px}
-
-div.headerField {
-    float: left;
-    width: auto;
-    height: 100%;
-}
-
-.headerFloat {
-    margin-left: auto;
-    width: 50%;
-}
-
-.headerFloatLeft {
-    float: left;
-    margin-right: 20px;
-    margin-bottom: 10px;
-}
-
-#headerRow {
-    padding: 10px;
-}
-
-div.license-personal {
-   background-color: #003366;
-   color: #ffffff;
-}
-
-div.license-personal a {
-   color: #ffffff;
-}
-
-.greyFormBox {
-    border: 1px solid #cccccc;
-    padding: 5px;
-}
-
-/* IE automatically adds a margin before and after form tags. Use this style to remove that */
-.marginlessForm {
-    margin: 0px;
-}
-
-.openPageHighlight {
-    background-color: #ffffcc;
-    padding: 2px;
-    border: 1px solid #ddd;
-}
-
-.editPageInsertLinks, .editPageInsertLinks a
-{
-    color: #666666;
-    font-weight: bold;
-    font-size: 10px;
-}
-
-/* Style for label heatmap. */
-.top10 a {
-    font-weight: bold;
-    font-size: 2em;
-    color: #003366;
-}
-.top25 a {
-    font-weight: bold;
-    font-size: 1.6em;
-    color: #003366;
-}
-.top50 a {
-    font-size: 1.4em;
-    color: #003366;
-}
-.top100 a {
-    font-size: 1.2em;
-    color: #003366;
-}
-
-.heatmap {
-    list-style:none;
-    width: 95%;
-    margin: 0px auto;
-}
-
-.heatmap a {
-    text-decoration:none;
-}
-
-.heatmap a:hover {
-    text-decoration:underline;
-}
-
-.heatmap li {
-    display: inline;
-}
-
-.minitab {
-padding: 3px 0px 3px 8px;
-margin-left: 0;
-margin-top: 1px;
-margin-bottom: 0px;
-border-bottom: 1px solid #3c78b5;
-font: bold 9px Verdana, sans-serif;
-text-decoration: none;
-float:none;
-}
-.selectedminitab {
-padding: 3px 0.5em;
-margin-left: 3px;
-margin-top: 1px;
-border: 1px solid #3c78b5;
-background: white;
-border-bottom: 1px solid white;
-color: #000000;
-text-decoration: none;
-}
-.unselectedminitab {
-padding: 3px 0.5em;
-margin-left: 3px;
-margin-top: 1px;
-border: 1px solid #3c78b5;
-border-bottom: none;
-background: #3c78b5;
-color: #ffffff;
-text-decoration: none;
-}
-
-a.unselectedminitab:hover {
-color: #ffffff;
-background: #003366;
-border-color: #003366;
-}
-
-a.unselectedminitab:link { color: white; }
-a.unselectedminitab:visited { color: white; }
-
-a.selectedminitab:link { color: black; }
-a.selectedminitab:visited { color: black; }
-
-.linkerror { background-color: #fcc;}
-
-a.labelOperationLink:link {text-decoration: underline}
-a.labelOperationLink:active {text-decoration: underline}
-a.labelOperationLink:visited {text-decoration: underline}
-a.labelOperationLink:hover {text-decoration: underline}
-
-a.newLabel:link {background-color: #ddffdd}
-a.newLabel:active {background-color: #ddffdd}
-a.newLabel:visited {background-color: #ddffdd}
-a.newLabel:hover {background-color: #ddffdd}
-
-ul.square {list-style-type: square}
-
-.inline-control-link {
-    background: #ffc;
-    font-size: 9px;
-    color: #666;
-    padding: 2px;
-    text-transform: uppercase;
-    text-decoration: none;
-}
-
-
-.inline-control-link a:link {text-decoration: none}
-.inline-control-link a:active {text-decoration: none}
-.inline-control-link a:visited {text-decoration: none}
-.inline-control-link a:hover {text-decoration: none}
-
-.inline-control-link {
-    background: #ffc;
-    font-size: 9px;
-    color: #666;
-    padding: 2px;
-    text-transform: uppercase;
-    text-decoration: none;
-    cursor: pointer;
-}
-
-div.auto_complete {
-    width: 350px;
-    background: #fff;
-}
-div.auto_complete ul {
-    border: 1px solid #888;
-    margin: 0;
-    padding: 0;
-    width: 100%;
-    list-style-type: none;
-}
-div.auto_complete ul li {
-    margin: 0;
-    padding: 3px;
-}
-div.auto_complete ul li.selected {
-    background-color: #ffb;
-}
-div.auto_complete ul strong.highlight {
-    color: #800;
-    margin: 0;
-    padding: 0;
-}
-
-/******* Edit Page Styles *******/
-.toogleFormDiv{
-    border:1px solid #A7A6AA;
-    background-color:white;
-    padding:5px;
-    margin-top: 5px;
-}
-
-.toogleInfoDiv{
-    border:1px solid #A7A6AA;
-    background-color:white;
-    display:none;
-    padding:5px;
-    margin-top: 10px;
-}
-
-.inputSection{
-    margin-bottom:20px;
-}
-
-#editBox{
-   border:1px solid lightgray;
-   background-color:#F0F0F0;
-}
-
-/******* Left Navigation Theme Styles ********/
-.leftnav li a {
-    text-decoration:none;
-    color:white;
-    margin:0px;
-    display:block;
-    padding:2px;
-    padding-left:5px;
-    background-color: #3c78b5;
-    border-top:1px solid #3c78b5;
-}
-
-.leftnav li a:active {color:white;}
-.leftnav li a:visited {color:white;}
-.leftnav li a:hover {background-color: #003366; color:white;}
diff --git a/karaf-2.3.x/manual/src/main/webapp/developers-guide/archetypes.conf b/karaf-2.3.x/manual/src/main/webapp/developers-guide/archetypes.conf
deleted file mode 100644
index 24291c5..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/developers-guide/archetypes.conf
+++ /dev/null
@@ -1,361 +0,0 @@
-
-
-
-h1. Archetypes
-
-Karaf provides archetypes to easily create commands, manage [features or repository and create a kar archive.
-This section describes each of them and explain How to use it.
-
-h2. Create a command (karaf-command-archetype)
-
-This archetype creates a Maven skeleton project that you will use to develop new Karaf commands.
-
-h3. Command line
-
-Using the command line, we can create our project:
-{code}
-mvn archetype:generate \
-  -DarchetypeGroupId=org.apache.karaf.archetypes \
-  -DartifactId=karaf-command-archetype \
-  -DarchetypeVersion=${project.version} \
-  -DgroupId=com.mycompany \
-  -DartifactId=com.mycompany.command \
-  -Dversion=1.0-SNAPSHOT \
-  -Dpackage=com.mycompany.package
-{code}
-
-h3. Additional parameters
-
-During the maven creation process, additional questions will be asked on the console :
-
-** Define value for property 'command':
-   The name of the command (list, add-item, ...)
-** Define value for property 'description':
-   Provide a description of the command that you want to create. This description will be displayed in the Karaf console when
-   the parameter --help is used
-** Define value for property 'scope':
-   This value represents the family name to which the command belongs (features, osgi, admin, jaas, ...)
-
-h3. Result of Maven command execution
-
-{code}
-[INFO] Scanning for projects...
-[INFO]
-[INFO] ------------------------------------------------------------------------
-[INFO] Building Maven Stub Project (No POM) 1
-[INFO] ------------------------------------------------------------------------
-[INFO]
-[INFO] >>> maven-archetype-plugin:2.1:generate (default-cli) @ standalone-pom >>>
-[INFO]
-[INFO] <<< maven-archetype-plugin:2.1:generate (default-cli) @ standalone-pom <<<
-[INFO]
-[INFO] --- maven-archetype-plugin:2.1:generate (default-cli) @ standalone-pom ---
-[INFO] Generating project in Interactive mode
-[INFO] Archetype repository missing. Using the one from [org.apache.karaf.archetypes:karaf-command-archetype:${project.version}] found in catalog local
-[INFO] Using property: groupId = com.mycompany
-[INFO] Using property: artifactId = com.mycompany.command
-[INFO] Using property: version = 1.0-SNAPSHOT
-[INFO] Using property: package = com.mycompany.package
-Define value for property 'command': : list
-Define value for property 'description': : List sample command
-Define value for property 'scope': : my
-Confirm properties configuration:
-groupId: com.mycompany
-artifactId: com.mycompany.command
-version: 1.0-SNAPSHOT
-package: com.mycompany.package
-command: list
-description: List sample command
-scope: my
- Y: :
-[INFO] ----------------------------------------------------------------------------
-[INFO] Using following parameters for creating project from Archetype: karaf-command-archetype:${project.version}
-[INFO] ----------------------------------------------------------------------------
-[INFO] Parameter: groupId, Value: com.mycompany
-[INFO] Parameter: artifactId, Value: com.mycompany.command
-[INFO] Parameter: version, Value: 1.0-SNAPSHOT
-[INFO] Parameter: package, Value: com.mycompany.package
-[INFO] Parameter: packageInPathFormat, Value: com/mycompany/package
-[INFO] Parameter: package, Value: com.mycompany.package
-[INFO] Parameter: version, Value: 1.0-SNAPSHOT
-[INFO] Parameter: groupId, Value: com.mycompany
-[INFO] Parameter: scope, Value: my
-[INFO] Parameter: description, Value: List sample command
-[INFO] Parameter: command, Value: list
-[INFO] Parameter: artifactId, Value: com.mycompany.command
-[WARNING] Don't override file /home/jbonofre/workspace/karaf/test/com.mycompany.command/pom.xml
-[INFO] project created from Archetype in dir: /home/jbonofre/workspace/karaf/test/com.mycompany.command
-[INFO] ------------------------------------------------------------------------
-[INFO] BUILD SUCCESS
-[INFO] ------------------------------------------------------------------------
-[INFO] Total time: 27.204s
-[INFO] Finished at: Mon Dec 19 09:38:49 CET 2011
-[INFO] Final Memory: 7M/111M
-[INFO] ------------------------------------------------------------------------
-{code}
-
-Next, you can import your project in Eclipse/IntelliJ and developp the karaf command.
-
-h2. Create an OSGi bundle (karaf-bundle-archetype)
-
-This archetype creates a Maven skeleton to create an OSGi bundle, including a bundle Activator (a special callback class for bundle start/stop).
-
-h3. Command line
-
-Using the command line, we can create our project:
-{code}
-mvn archetype:generate \
-    -DarchetypeGroupId=org.apache.karaf.archetypes \
-    -DarchetypeArtifactId=karaf-bundle-archetype \
-    -DarchetypeVersion=${project.version} \
-    -DgroupId=com.mycompany \
-    -DartifactId=com.mycompany.bundle \
-    -Dversion=1.0-SNAPSHOT \
-    -Dpackage=com.mycompany.package
-{code}
-
-h3. Result of Maven command execution
-
-{code}
-[INFO] Scanning for projects...
-[INFO]
-[INFO] ------------------------------------------------------------------------
-[INFO] Building Maven Stub Project (No POM) 1
-[INFO] ------------------------------------------------------------------------
-[INFO]
-[INFO] >>> maven-archetype-plugin:2.1:generate (default-cli) @ standalone-pom >>>
-[INFO]
-[INFO] <<< maven-archetype-plugin:2.1:generate (default-cli) @ standalone-pom <<<
-[INFO]
-[INFO] --- maven-archetype-plugin:2.1:generate (default-cli) @ standalone-pom ---
-[INFO] Generating project in Interactive mode
-[INFO] Archetype repository missing. Using the one from [org.apache.karaf.archetypes:karaf-bundle-archetype:3.0.0-SNAPSHOT] found in catalog local
-[INFO] Using property: groupId = com.mycompany
-[INFO] Using property: artifactId = com.mycompany.bundle
-[INFO] Using property: version = 1.0-SNAPSHOT
-[INFO] Using property: package = com.mycompany.package
-Confirm properties configuration:
-groupId: com.mycompany
-artifactId: com.mycompany.bundle
-version: 1.0-SNAPSHOT
-package: com.mycompany.package
- Y: :
-[INFO] ----------------------------------------------------------------------------
-[INFO] Using following parameters for creating project from Archetype: karaf-bundle-archetype:3.0.0-SNAPSHOT
-[INFO] ----------------------------------------------------------------------------
-[INFO] Parameter: groupId, Value: com.mycompany
-[INFO] Parameter: artifactId, Value: com.mycompany.bundle
-[INFO] Parameter: version, Value: 1.0-SNAPSHOT
-[INFO] Parameter: package, Value: com.mycompany.package
-[INFO] Parameter: packageInPathFormat, Value: com/mycompany/package
-[INFO] Parameter: package, Value: com.mycompany.package
-[INFO] Parameter: version, Value: 1.0-SNAPSHOT
-[INFO] Parameter: groupId, Value: com.mycompany
-[INFO] Parameter: artifactId, Value: com.mycompany.bundle
-[INFO] project created from Archetype in dir: /home/jbonofre/workspace/karaf/test/com.mycompany.bundle
-[INFO] ------------------------------------------------------------------------
-[INFO] BUILD SUCCESS
-[INFO] ------------------------------------------------------------------------
-[INFO] Total time: 7.895s
-[INFO] Finished at: Mon Dec 19 11:41:44 CET 2011
-[INFO] Final Memory: 8M/111M
-[INFO] ------------------------------------------------------------------------
-{code}
-
-h2. Create an OSGi blueprint bundle (karaf-blueprint-archetype)
-
-This archetype creates a Maven skeleton project to create an OSGi blueprint bundle, including a sample bean exposed as an OSGi service in the blueprint XML descriptor.
-
-h3. Command line
-
-Using the command line, we can create our project:
-{code}
-mvn archetype:generate \
-    -DarchetypeGroupId=org.apache.karaf.archetypes \
-    -DarchetypeArtifactId=karaf-blueprint-archetype \
-    -DarchetypeVersion=${project.version} \
-    -DgroupId=com.mycompany \
-    -DartifactId=com.mycompany.blueprint \
-    -Dversion=1.0-SNAPSHOT \
-    -Dpackage=com.mycompany.blueprint
-{code}
-
-h3. Result of Maven command execution
-
-{code}
-[INFO] Scanning for projects...
-[INFO]
-[INFO] ------------------------------------------------------------------------
-[INFO] Building Maven Stub Project (No POM) 1
-[INFO] ------------------------------------------------------------------------
-[INFO]
-[INFO] >>> maven-archetype-plugin:2.1:generate (default-cli) @ standalone-pom >>>
-[INFO]
-[INFO] <<< maven-archetype-plugin:2.1:generate (default-cli) @ standalone-pom <<<
-[INFO]
-[INFO] --- maven-archetype-plugin:2.1:generate (default-cli) @ standalone-pom ---
-[INFO] Generating project in Interactive mode
-[INFO] Archetype repository missing. Using the one from [org.apache.karaf.archetypes:karaf-blueprint-archetype:3.0.0-SNAPSHOT] found in catalog local
-[INFO] Using property: groupId = com.mycompany
-[INFO] Using property: artifactId = com.mycompany.blueprint
-[INFO] Using property: version = 1.0-SNAPSHOT
-[INFO] Using property: package = com.mycompany.package
-Confirm properties configuration:
-groupId: com.mycompany
-artifactId: com.mycompany.blueprint
-version: 1.0-SNAPSHOT
-package: com.mycompany.package
- Y: :
-[INFO] ----------------------------------------------------------------------------
-[INFO] Using following parameters for creating project from Archetype: karaf-blueprint-archetype:3.0.0-SNAPSHOT
-[INFO] ----------------------------------------------------------------------------
-[INFO] Parameter: groupId, Value: com.mycompany
-[INFO] Parameter: artifactId, Value: com.mycompany.blueprint
-[INFO] Parameter: version, Value: 1.0-SNAPSHOT
-[INFO] Parameter: package, Value: com.mycompany.package
-[INFO] Parameter: packageInPathFormat, Value: com/mycompany/package
-[INFO] Parameter: package, Value: com.mycompany.package
-[INFO] Parameter: version, Value: 1.0-SNAPSHOT
-[INFO] Parameter: groupId, Value: com.mycompany
-[INFO] Parameter: artifactId, Value: com.mycompany.blueprint
-[INFO] project created from Archetype in dir: /home/jbonofre/workspace/karaf/test/com.mycompany.blueprint
-[INFO] ------------------------------------------------------------------------
-[INFO] BUILD SUCCESS
-[INFO] ------------------------------------------------------------------------
-[INFO] Total time: 1:06:36.741s
-[INFO] Finished at: Mon Dec 19 13:04:43 CET 2011
-[INFO] Final Memory: 7M/111M
-[INFO] ------------------------------------------------------------------------
-{code}
-
-h2. Create a features XML (karaf-feature-archetype)
-
-This archetype creates a Maven skeleton project which create a features XML file, using the dependencies that you define in the POM.
-
-h3. Command line
-
-Using the command line, we can create our project:
-{code}
-mvn archetype:generate \
-    -DarchetypeGroupId=org.apache.karaf.archetypes \
-    -DarchetypeArtifactId=karaf-feature-archetype \
-    -DarchetypeVersion=${project.version} \
-    -DgroupId=my.company \
-    -DartifactId=my.company.feature \
-    -Dversion=1.0-SNAPSHOT \
-    -Dpackage=my.company.package
-{code}
-
-h3. Result of maven command execution
-
-{code}
-[INFO] Scanning for projects...
-[INFO]
-[INFO] ------------------------------------------------------------------------
-[INFO] Building Maven Stub Project (No POM) 1
-[INFO] ------------------------------------------------------------------------
-[INFO]
-[INFO] >>> maven-archetype-plugin:2.1:generate (default-cli) @ standalone-pom >>>
-[INFO]
-[INFO] <<< maven-archetype-plugin:2.1:generate (default-cli) @ standalone-pom <<<
-[INFO]
-[INFO] --- maven-archetype-plugin:2.1:generate (default-cli) @ standalone-pom ---
-[INFO] Generating project in Interactive mode
-[INFO] Archetype repository missing. Using the one from [org.apache.karaf.archetypes:karaf-feature-archetype:3.0.0-SNAPSHOT] found in catalog local
-[INFO] Using property: groupId = com.mycompany
-[INFO] Using property: artifactId = com.mycompany.feature
-[INFO] Using property: version = 1.0-SNAPSHOT
-[INFO] Using property: package = com.mycompany.package
-Confirm properties configuration:
-groupId: com.mycompany
-artifactId: com.mycompany.feature
-version: 1.0-SNAPSHOT
-package: com.mycompany.package
- Y: :
-[INFO] ----------------------------------------------------------------------------
-[INFO] Using following parameters for creating project from Archetype: karaf-feature-archetype:3.0.0-SNAPSHOT
-[INFO] ----------------------------------------------------------------------------
-[INFO] Parameter: groupId, Value: com.mycompany
-[INFO] Parameter: artifactId, Value: com.mycompany.feature
-[INFO] Parameter: version, Value: 1.0-SNAPSHOT
-[INFO] Parameter: package, Value: com.mycompany.package
-[INFO] Parameter: packageInPathFormat, Value: com/mycompany/package
-[INFO] Parameter: package, Value: com.mycompany.package
-[INFO] Parameter: version, Value: 1.0-SNAPSHOT
-[INFO] Parameter: groupId, Value: com.mycompany
-[INFO] Parameter: artifactId, Value: com.mycompany.feature
-[INFO] project created from Archetype in dir: /home/jbonofre/workspace/karaf/test/com.mycompany.feature
-[INFO] ------------------------------------------------------------------------
-[INFO] BUILD SUCCESS
-[INFO] ------------------------------------------------------------------------
-[INFO] Total time: 7.262s
-[INFO] Finished at: Mon Dec 19 13:20:00 CET 2011
-[INFO] Final Memory: 7M/111M
-[INFO] ------------------------------------------------------------------------
-{code}
-
-h2. Create a KAR file (karaf-kar-archetype)
-
-This archetype creates a Maven skeleton project including a features XML sample, used to generate a KAR file.
-
-h3. Command line
-
-Using the command line, we can create our project:
-{code}
-mvn archetype:generate \
-    -DarchetypeGroupId=org.apache.karaf.archetypes \
-    -DarchetypeArtifactId=karaf-kar-archetype \
-    -DarchetypeVersion=${project.version} \
-    -DgroupId=com.mycompany \
-    -DartifactId=com.mycompany.kar \
-    -Dversion=1.0-SNAPSHOT \
-    -Dpackage=com.mycompany.package
-{code}
-
-h3. Result of maven command execution
-
-{code}
-[INFO] Scanning for projects...
-[INFO]
-[INFO] ------------------------------------------------------------------------
-[INFO] Building Maven Stub Project (No POM) 1
-[INFO] ------------------------------------------------------------------------
-[INFO]
-[INFO] >>> maven-archetype-plugin:2.1:generate (default-cli) @ standalone-pom >>>
-[INFO]
-[INFO] <<< maven-archetype-plugin:2.1:generate (default-cli) @ standalone-pom <<<
-[INFO]
-[INFO] --- maven-archetype-plugin:2.1:generate (default-cli) @ standalone-pom ---
-[INFO] Generating project in Interactive mode
-[INFO] Archetype repository missing. Using the one from [org.apache.karaf.archetypes:karaf-kar-archetype:3.0.0-SNAPSHOT] found in catalog local
-[INFO] Using property: groupId = com.mycompany
-[INFO] Using property: artifactId = com.mycompany.kar
-[INFO] Using property: version = 1.0-SNAPSHOT
-[INFO] Using property: package = com.mycompany.package
-Confirm properties configuration:
-groupId: com.mycompany
-artifactId: com.mycompany.kar
-version: 1.0-SNAPSHOT
-package: com.mycompany.package
- Y: :
-[INFO] ----------------------------------------------------------------------------
-[INFO] Using following parameters for creating project from Archetype: karaf-kar-archetype:3.0.0-SNAPSHOT
-[INFO] ----------------------------------------------------------------------------
-[INFO] Parameter: groupId, Value: com.mycompany
-[INFO] Parameter: artifactId, Value: com.mycompany.kar
-[INFO] Parameter: version, Value: 1.0-SNAPSHOT
-[INFO] Parameter: package, Value: com.mycompany.package
-[INFO] Parameter: packageInPathFormat, Value: com/mycompany/package
-[INFO] Parameter: package, Value: com.mycompany.package
-[INFO] Parameter: version, Value: 1.0-SNAPSHOT
-[INFO] Parameter: groupId, Value: com.mycompany
-[INFO] Parameter: artifactId, Value: com.mycompany.kar
-[INFO] project created from Archetype in dir: /home/jbonofre/workspace/karaf/test/com.mycompany.kar
-[INFO] ------------------------------------------------------------------------
-[INFO] BUILD SUCCESS
-[INFO] ------------------------------------------------------------------------
-[INFO] Total time: 7.465s
-[INFO] Finished at: Mon Dec 19 13:30:15 CET 2011
-[INFO] Final Memory: 8M/157M
-[INFO] ------------------------------------------------------------------------
-{code}
diff --git a/karaf-2.3.x/manual/src/main/webapp/developers-guide/branding-console.conf b/karaf-2.3.x/manual/src/main/webapp/developers-guide/branding-console.conf
deleted file mode 100644
index 68b29d3..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/developers-guide/branding-console.conf
+++ /dev/null
@@ -1,114 +0,0 @@
-
-
-h1. Branding the Console
-
-This chapter will show you how to customize the user interface of the Karaf console, making  
-changes such as a new welcome message and console prompt.  This is what we refer to as "branding" Karaf.
-
-h2. Create your branding bundle
-
-At startup, Karaf is looking for a bundle which exports the {{org.apache.karaf.branding}} package containing a {{branding.properties}}
-file.
-
-So you need to create a very simple bundle containing just a {{org/apache/karaf/branding/branding.properties}} file.
-
-The Maven POM of your branding bundle should look like this:
-
-{code:lang=xml}
-<?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/xsd/maven-4.0.0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>your.group.id</groupId>
-    <artifactId>your.branding.artifact.id</artifactId>
-    <version>1.0-SNAPSHOT</version>
-    <packaging>bundle</packaging>
-    <name>Your Branding Bundle Name</name>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <version>2.2</version>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Bundle-SymbolicName>${project.artifactId}</bundle-SymbolicName>
-                        <Import-Package>*</Import-Package>
-                        <Private-Package>!*</Private-Package>
-                        <Export-Package>
-                            org.apache.karaf.branding
-                        </Export-Package>
-                        <Spring-Context>*;public-context:=false</Spring-Context>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
-{code}
-
-Now, add a {{src/main/resources/org/apache/karaf/branding/branding.properties}} similar to:
-
-{{code}}
-welcome = \
-\u001B[36m        __ __                  ____      \u001B[0m\r\n\
-\u001B[36m       / //_/____ __________ _/ __/      \u001B[0m\r\n\
-\u001B[36m      / ,<  / __ `/ ___/ __ `/ /_        \u001B[0m\r\n\
-\u001B[36m     / /| |/ /_/ / /  / /_/ / __/        \u001B[0m\r\n\
-\u001B[36m    /_/ |_|\\__,_/_/   \\__,_/_/         \u001B[0m\r\n\
-\r\n\
-\u001B[1m  Apache Karaf\u001B[0m (${project.version})\r\n\
-\r\n\
-Hit '\u001B[1m<tab>\u001B[0m' for a list of available commands\r\n\
-   and '\u001B[1m[cmd] --help\u001B[0m' for help on a specific command.\r\n\
-Hit '\u001B[1m<ctrl-d>\u001B[0m' or '\u001B[1mosgi:shutdown\u001B[0m' to shutdown Karaf.\r\n
-
-prompt = \u001B[1m${USER}@${APPLICATION}\u001B[0m>
-{{code}}
-
-As you can see, the {{branding.properties}} contains two properties:
-* welcome is the welcome message displayed when you start Karaf.
-* prompt is the string used to display the console prompt. This string supports variables:
-** ${USER}} defines the user name of the prompt. Caveat -- the user name is presently static and hardcoded to "karaf",
-however you can override here with your own static user name.
-** ${{APPLICATION}} defines the Karaf instance name.
-
-As you can see, both strings support ASCII escaped format. For instance \u001B[1m switches the foreground to bold and \u001B[0m
-switches it back to normal.
-
-Some examples of customized prompts:
-
-{code}
-# Define a user with fancy colors
-prompt = \u001B[36mmy-karaf-user\u001B[0m\u001B[1m@\u001B[0m\u001B[34m${APPLICATION}\u001B[0m>
-{code}
-
-{code}
-# Static sober prompt
-prompt = my-user@my-karaf>
-{code}
-
-h2. Configuring Karaf to use the branding bundle
-
-In order for Karaf to pick up the branding jar please edit the 
-$KARAF_HOME/etc/custom.properties file to include the following: 
-
-  org.osgi.framework.system.packages.extra = \ 
-    org.apache.karaf.branding
-
-
-h2. Installing the branding bundle
-
-Build your branding bundle:
-
-{code}
-mvn install
-{code}
-
-and simply drop the generated jar file into the Karaf lib directory.
-
-Start Karaf and you will see your branded Karaf console.
diff --git a/karaf-2.3.x/manual/src/main/webapp/developers-guide/connect-console.conf b/karaf-2.3.x/manual/src/main/webapp/developers-guide/connect-console.conf
deleted file mode 100644
index 0253960..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/developers-guide/connect-console.conf
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-h1. Programmatically connect to the console
-
-A connection to the Karaf console can also be done programmatically.
-The following code is a simplified version of the code from the client library.
-
-{pygmentize:java}
-import org.apache.sshd.ClientChannel;
-import org.apache.sshd.ClientSession;
-import org.apache.sshd.SshClient;
-import org.apache.sshd.client.future.ConnectFuture;
-
-public class Main {
-
-    public static void main(String[] args) throws Exception {
-        String host = "localhost";
-        int port = 8101;
-        String user = "karaf";
-        String password = "karaf";
-
-        SshClient client = null;
-        try {
-            client = SshClient.setUpDefaultClient();
-            client.start();
-            ConnectFuture future = client.connect(host, port);
-            future.await();
-            ClientSession session = future.getSession();
-            session.authPassword(user, password);
-            ClientChannel channel = session.createChannel("shell");
-            channel.setIn(System.in);
-            channel.setOut(System.out);
-            channel.setErr(System.err);
-            channel.open();
-            channel.waitFor(ClientChannel.CLOSED, 0);
-        } catch (Throwable t) {
-            t.printStackTrace();
-            System.exit(1);
-        } finally {
-            try {
-                client.stop();
-            } catch (Throwable t) { }
-        }
-        System.exit(0);
-    }
-
-}
-{pygmentize}
-
-You can find a more complete example at the [following location|http://svn.apache.org/repos/asf/karaf/trunk/client/src/main/java/org/apache/karaf/client/Main.java].
-
-
-
diff --git a/karaf-2.3.x/manual/src/main/webapp/developers-guide/creating-bundles.conf b/karaf-2.3.x/manual/src/main/webapp/developers-guide/creating-bundles.conf
deleted file mode 100644
index e3fd1a4..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/developers-guide/creating-bundles.conf
+++ /dev/null
@@ -1,185 +0,0 @@
-h1. Add extended information to bundles
-
-Karaf supports a OSGI-INF/bundle.info file in a bundle.
-
-This file is extended description of the bundle. It supports ASCII character declarations (for adding color, formatting, etc).
-
-For instance, you can define a bundle like this (using Apache Felix maven-bundle-plugin):
-
-{code:lang=xml}
-<?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/xsd/maven-4.0.0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>my.groupId</groupId>
-    <artifactId>my.bundle</artifactId>
-    <version>1.0-SNAPSHOT</version>
-    <name>My Bundle</name>
-    <description>My bundle short description</description>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <version>2.2.0</version>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
-                        ...
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
-{code}
-
-And simply add a src/main/resources/OSGI-INF/bundle.info file containing, for instance:
-
-{code}
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.description}
-
-\u001B[1mDESCRIPTION\u001B[0m
-    Long description of your bundle, including usage, etc.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mhttp://yourside\u001B[0m
-    \u001B[36mhttp://yourside/docs\u001B[0m
-
-{code}
-
-You can display this extended information using:
-
-{code}
-root@karaf> osgi:info
-{code}
-
-h1. Creating bundles for third party dependencies
-
-Karaf supports the wrap: protocol execution.
-
-It allows for directly deploying third party dependencies, like Apache Commons Lang:
-
-{code}
-root@karaf> osgi:install wrap:mvn:commons-lang/commons-lang/2.4
-{code}
-
-You can specify OSGi statements in the wrap URL:
-
-from the shell
-{code}
-root@karaf> osgi:install -s 'wrap:mvn:commons-lang/commons-lang/2.4$Bundle-SymbolicName=commons-lang&Bundle-Version=2.4'
-{code}
-
-from features.xml
-{code}
-<bundle>wrap:mvn:commons-lang/commons-lang/2.4$Bundle-SymbolicName=commons-lang&amp;Bundle-Version=2.4</bundle>
-{code}
-
-You can also create a wrap bundle for a third party dependency.
-This bundle is simply a Maven POM that shades an existing jar and package into a jar bundle.
-
-For instance, to create an OSGi bundle that wraps Apache Commons Lang, you can simply define the following Maven POM:
-
-{code:lang=xml}
-<?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/xsd/maven-4.0.0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>osgi.commons-lang</groupId>
-    <artifactId>osgi.commons-lang</artifactId>
-    <version>2.4</version>
-    <packaging>bundle</packaging>
-    <name>commons-lang OSGi Bundle</name>
-    <description>This OSGi bundle simply wraps commons-lang-2.4.jar artifact.</description>
-
-    <dependencies>
-        <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
-            <version>2.4</version>
-            <optional>true</optional>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <defaultGoal>install</defaultGoal>
-
-        <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-shade-plugin</artifactId>
-            <version>1.1</version>
-            <executions>
-                <execution>
-                    <phase>package</phase>
-                    <goals>
-                        <goal>shade</goal>
-                    </goals>
-                    <configuration>
-                        <artifactSet>
-                            <includes>
-                                <include>commons-lang:commons-lang</include>
-                            </includes>
-                        </artifactSet>
-                        <filters>
-                            <filter>
-                                <artifact>commons-lang:commons-lang</artifact>
-                                <excludes>
-                                    <exclude>**</exclude>
-                                </excludes>
-                            </filter>
-                        </filters>
-                        <promoteTransitiveDependencies>true</promoteTransitiveDependencies>
-                        <createDependencyReducedPom>true</createDependencyReducedPom>
-                    </configuration>
-                </execution>
-            </executions>
-        </plugin>
-        <plugin>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>maven-bundle-plugin</artifactId>
-            <version>2.1.0</version>
-            <extensions>true</extensions>
-            <configuration>
-                <instructions>
-                    <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
-                    <Export-Package>*</Export-Package>
-                    <Import-Package></Import-Package>
-                    <_versionpolicy>[$(version;==;$(@)),$(version;+;$(@)))</_versionpolicy>
-                    <_removeheaders>Ignore-Package,Include-Resource,Private-Package,Embed-Dependency</_removeheaders>
-                </instructions>
-                <unpackBundle>true</unpackBundle>
-            </configuration>
-        </plugin>
-    </build>
-
-</project>
-{code}
-
-You have now a OSGi bundle for commons-lang that you can deploy directly:
-
-{code}
-root@karaf> osgi:install -s mvn:osgi.commons-lang/osgi.commons-lang/2.4
-{code}
-
-Some more information is available at [http://gnodet.blogspot.com/2008/09/id-like-to-talk-bit-about-third-party.html], [http://blog.springsource.com/2008/02/18/creating-osgi-bundles/] and [http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html].
-
diff --git a/karaf-2.3.x/manual/src/main/webapp/developers-guide/custom-distribution.conf b/karaf-2.3.x/manual/src/main/webapp/developers-guide/custom-distribution.conf
deleted file mode 100644
index 1d6cd56..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/developers-guide/custom-distribution.conf
+++ /dev/null
@@ -1,412 +0,0 @@
-
-
-h1. Custom distributions
-
-As Karaf is an OSGi container, it's heavily used as an application and middleware kernel.
-
-You may wish to construct your own Karaf distribution preconfigured to your requirements.
-This custom distribution could contain:
-- branding to change the Karaf console look-and-feel
-- configuration files (in the etc folder) altered to your requirements
-- pre-packaged artifacts in the deploy folder
-- a pre-populated system repository (containing your own bundle and features descriptor)
-- renamed or specific scripts in the bin folder
-- system documentation files
-
-h2. Maven assembly
-
-Basically a Karaf custom distribution involves:
-1. Uncompressing a standard Karaf distribution in a given directory.
-2. Populating the system repo with your features.
-3. Populating the lib directory with your branding or other system bundle jar files.
-4. Overriding the configuration files in the etc folder.
-
-These tasks could be performed using scripting, or more easily and portable, using Apache Maven and a set of Maven plugins.
-
-For instance, the Maven POM could look like:
-
-{code}
-<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-  <groupId>my.company</groupId>
-  <artifactId>mycustom-karaf</artifactId>
-  <version>1.0</version>
-  <packaging>pom</packaging>
-  <name>My Unix Custom Karaf Distribution</name>
-
-  <properties>
-    <karaf.version>2.2.2</karaf.version>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.karaf</groupId>
-      <artifactId>apache-karaf</artifactId>
-      <version>${karaf.version}</version>
-      <type>tar.gz</type>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.karaf.assemblies.features</groupId>
-      <artifactId>standard</artifactId>
-      <version>${karaf.version}</version>
-      <type>xml</type>
-      <classifier>features</classifier>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <resources>
-      <resource>
-        <directory>${project.basedir}/src/main/filtered-resources</directory>
-        <filtering>true</filtering>
-        <includes>
-          <include>**/*</include>
-        </includes>
-      </resource>
-    </resources>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-resources-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>filter</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>resources</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.karaf.tooling</groupId>
-        <artifactId>features-maven-plugin</artifactId>
-        <version>${karaf.version}</version>
-        <executions>
-          <execution>
-           <id>add-features-to-repo</id>
-           <phase>generate-resources</phase>
-           <goals>
-             <goal>add-features-to-repo</goal>
-           </goals>
-           <configuration>
-              <descriptors>
-                <descriptor>mvn:org.apache.karaf.assemblies.features/standard/${karaf.version}/xml/features</descriptor>
-                <descriptor>file:${project.basedir}/target/classes/my-features.xml</descriptor>
-              </descriptors>
-              <features>
-                <feature>my-feature</feature>
-              </features>
-           </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>copy</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>copy</goal>
-            </goals>
-            <configuration>
-               <!-- Define here the artifacts which should be considered in the assembly -->
-               <!-- For instance, the branding jar -->
-               <artifactItems>
-                 <artifactItem>
-                    <groupId>my.groupId</groupId>
-                    <artifactId>my.branding.id</artifactId>
-                    <version>1.0</version>
-                    <outputDirectory>target/dependencies</outputDirectory>
-                    <destFileName>mybranding.jar</destFileName>
-                 </artifactItem>
-               </artifactItems>
-            </configuration>
-          </execution>
-          <execution>
-            <!-- Uncompress the standard Karaf distribution -->
-            <id>unpack</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>unpack</goal>
-            </goals>
-            <configuration>
-              <artifactItems>
-                <artifactItem>
-                  <groupId>org.apache.karaf</groupId>
-                  <artifactId>apache-karaf</artifactId>
-                  <type>tar.gz</type>
-                  <outputDirectory>target/dependencies</outputDirectory>
-                </artifactItem>
-              </artifactItems>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-assembly-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>bin</id>
-            <phase>package</phase>
-            <goals>
-              <goal>single</goal>
-            </goals>
-            <configuration>
-              <descriptors>
-                <descriptor>src/main/descriptors/bin.xml</descriptor>
-              </descriptors>
-              <appendAssemblyId>false</appendAssemblyId>
-              <tarLongFileMode>gnu</tarLongFileMode>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-</project>
-{code}
-
-The Maven POM will download the Karaf standard distribution and prepare resources to be processed by the Maven assembly plugin.
-
-Your Maven project structure should look like:
-
-* pom.xml: the previous POM file
-* src/main/descriptors/bin.xml: the assembly maven plugin descriptor (see below)
-* src/main/filtered-resources: contains all resource files that have Maven property values to be filtered/replaced. Typically, this will include features descriptor and configuration files.
-* src/main/distribution: contains all raw files which will be copied as-is into your custom distribution.
-
-For instance, {{src/main/filtered-resources}} could contain:
-* {{my-features.xml}} where maven properties will be replaced
-* {{etc/org.apache.karaf.features.cfg}} file containing your my-features descriptor:
-{code}
-#
-# Comma separated list of features repositories to register by default
-#
-featuresRepositories=mvn:org.apache.karaf/apache-karaf/${karaf.version}/xml/features,mvn:my.groupId/my-features/${project.version}/xml/features
-
-#
-# Comma separated list of features to install at startup
-#
-featuresBoot=config,ssh,management,my-feature
-{code}
-
-The {{src/main/distribution}} contains all your custom Karaf configuration files and scripts, as, for examples:
-
-* etc/org.ops4j.pax.logging.cfg
-{code}
-# Root logger
-log4j.rootLogger=INFO, out, osgi:VmLogAppender
-log4j.throwableRenderer=org.apache.log4j.OsgiThrowableRenderer
-
-# CONSOLE appender not used by default
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} | %-5.5p | %-16.16t | %-32.32C %4L | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n
-
-# File appender
-log4j.appender.out=org.apache.log4j.RollingFileAppender
-log4j.appender.out.layout=org.apache.log4j.PatternLayout
-log4j.appender.out.layout.ConversionPattern=%d{ABSOLUTE} | %-5.5p | %-16.16t | %-32.32C %4L | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n
-log4j.appender.out.file=${karaf.home}/log/my-customer-distribution.log
-log4j.appender.out.append=true
-log4j.appender.out.maxFileSize=1MB
-log4j.appender.out.maxBackupIndex=10
-
-# Sift appender
-log4j.appender.sift=org.apache.log4j.sift.MDCSiftingAppender
-log4j.appender.sift.key=bundle.name
-log4j.appender.sift.default=my-custom
-log4j.appender.sift.appender=org.apache.log4j.FileAppender
-log4j.appender.sift.appender.layout=org.apache.log4j.PatternLayout
-log4j.appender.sift.appender.layout.ConversionPattern=%d{ABSOLUTE} | %-5.5p | %-16.16t | %-32.32c{1} | %-32.32C %4L | %m%n
-log4j.appender.sift.appender.file=${karaf.data}/log/$\\{bundle.name\\}.log
-log4j.appender.sift.appender.append=true
-{code}
-* etc/system.properties
-{code}
-#
-# The properties defined in this file will be made available through system
-# properties at the very beginning of the FAS boot process.
-#
-
-# Log level when the pax-logging service is not available
-# This level will only be used while the pax-logging service bundle
-# is not fully available.
-# To change log levels, please refer to the org.ops4j.pax.logging.cfg file
-# instead.
-org.ops4j.pax.logging.DefaultServiceLog.level=ERROR
-
-#
-# Name of this custom instance.
-#
-karaf.name=my-custom
-
-#
-# Default repository where bundles will be loaded from before using
-# other maven repositories. For the full Maven configuration, see the
-# org.ops4j.pax.url.mvn.cfg file.
-#
-karaf.default.repository=system
-
-#
-# Location of a shell script that will be run when starting a shell
-# session. This script can be used to create aliases and define
-# additional commands.
-#
-karaf.shell.init.script=${karaf.home}/etc/shell.init.script
-
-#
-# Set this empty property to avoid errors when validating xml documents.
-#
-xml.catalog.files=
-
-#
-# Suppress the bell in the console when hitting backspace to many times
-# for example
-#
-jline.nobell=true
-
-#
-# Default port for the OSGi HTTP Service
-#
-org.osgi.service.http.port=8181
-
-#
-# Allow usage of ${custom.home} as an alias for ${karaf.home}
-#
-custom.home=${karaf.home}
-{code}
-* etc/users.properties
-{code}
-admin=admin,admin
-{code}
-* You can add a {{etc/custom.properties}}, it's a placeholder for any override you may need. For instance:
-{code}
-karaf.systemBundlesStartLevel=50
-obr.repository.url=http://svn.apache.org/repos/asf/servicemix/smx4/obr-repo/repository.xml
-org.osgi.framework.system.packages.extra = \
-  org.apache.karaf.branding; \
-  com.sun.org.apache.xalan.internal.xsltc.trax; \
-  com.sun.org.apache.xerces.internal.dom; \
-  com.sun.org.apache.xerces.internal.jaxp; \
-  com.sun.org.apache.xerces.internal.xni; \
-  com.sun.jndi.ldap
-{code}
-
-Now, we can "assemble" our custom distribution using the Maven assembly plugin. The Maven assembly plugin uses an assembly descriptor, configured in POM above to be {{src/main/descriptors/bin.xml}}:
-
-{code}
-<assembly>
-
-    <id>bin</id>
-
-    <formats>
-        <format>tar.gz</format>
-    </formats>
-
-    <fileSets>
-
-        <!-- Expanded Karaf Standard Distribution -->
-        <fileSet>
-            <directory>target/dependencies/apache-karaf-${karaf.version}</directory>
-            <outputDirectory>/</outputDirectory>
-            <excludes>
-                <exclude>**/demos/**</exclude>
-                <exclude>bin/**</exclude>
-                <exclude>etc/system.properties</exclude>
-                <exclude>etc/users.properties</exclude>
-                <exclude>etc/org.apache.karaf.features.cfg</exclude>
-                <exclude>etc/org.ops4j.pax.logging.cfg</exclude>
-                <exclude>LICENSE</exclude>
-                <exclude>NOTICE</exclude>
-                <exclude>README</exclude>
-                <exclude>RELEASE-NOTES</exclude>
-                <exclude>karaf-manual*.html</exclude>
-                <exclude>karaf-manual*.pdf</exclude>
-            </excludes>
-        </fileSet>
-
-        <!-- Copy over bin/* separately to get the correct file mode -->
-        <fileSet>
-            <directory>target/dependencies/apache-karaf-${karaf.version}</directory>
-            <outputDirectory>/</outputDirectory>
-            <includes>
-                <include>bin/admin</include>
-                <include>bin/karaf</include>
-                <include>bin/start</include>
-                <include>bin/stop</include>
-            </includes>
-            <fileMode>0755</fileMode>
-        </fileSet>
-
-        <!-- Copy over jar files -->
-        <fileSet>
-            <directory>target/dependencies</directory>
-            <includes>
-                <include>my-custom.jar</include>
-            </includes>
-            <outputDirectory>/lib/</outputDirectory>
-        </fileSet>
-
-        <fileSet>
-            <directory>src/main/distribution</directory>
-            <outputDirectory>/</outputDirectory>
-            <fileMode>0644</fileMode>
-        </fileSet>
-        <fileSet>
-            <directory>target/classes/etc</directory>
-            <outputDirectory>/etc/</outputDirectory>
-            <lineEnding>unix</lineEnding>
-            <fileMode>0644</fileMode>
-        </fileSet>
-
-        <fileSet>
-            <directory>target/features-repo</directory>
-            <outputDirectory>/system</outputDirectory>
-        </fileSet>
-
-    </fileSets>
-
-    <files>
-        <file>
-            <source>${basedir}/target/dependencies/apache-karaf-${karaf.version}/bin/karaf</source>
-            <outputDirectory>/bin/</outputDirectory>
-            <destName>my-custom</destName>
-            <fileMode>0755</fileMode>
-            <lineEnding>unix</lineEnding>
-        </file>
-        <file>
-            <source>${basedir}/target/classes/features.xml</source>
-            <outputDirectory>/system/my.groupid/my-features/${project.version}</outputDirectory>
-            <destName>my-features-${project.version}-features.xml</destName>
-            <fileMode>0644</fileMode>
-            <lineEnding>unix</lineEnding>
-        </file>
-    </files>
-
-</assembly>
-{code}
-
-To build your custom Karaf distribution, just run:
-
-{code}
-mvn install
-{code}
-
-You will find your Karaf custom distribution tar.gz in the target directory.
-
-h2. Roadmap
-
-A distribution goal is in preparation in the next Karaf
-
-h2. Custom distribution examples
-
-* [Apache ServiceMix 4|http://svn.apache.org/repos/asf/servicemix/smx4/features/trunk/assemblies/]
-* [Apache ServiceMix NMR|http://svn.apache.org/repos/asf/servicemix/smx4/nmr/trunk/bundle/]
-* [BuildProcess BuildEraser|http://buildprocess.svn.sourceforge.net/viewvc/buildprocess/builderaser/trunk/assembly/]
diff --git a/karaf-2.3.x/manual/src/main/webapp/developers-guide/debugging.conf b/karaf-2.3.x/manual/src/main/webapp/developers-guide/debugging.conf
deleted file mode 100644
index 5d45753..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/developers-guide/debugging.conf
+++ /dev/null
@@ -1,139 +0,0 @@
-
-
-h1. Troubleshooting, Debugging, Profiling, and Monitoring
-
-h2. Troubleshooting
-
-h3. Logging
-
-Logging is easy to control through the console, with commands grouped under _log_ shell. To learn about the available logging commands type:
-
-{code}
-karaf@root> log<tab>
-
-log:display              log:display-exception    log:get                  log:set
-karaf@root>
-{code}
-
-Typical usage is:
- 
- # Use {{log:set}} to dynamically change the global log level
- # Execute the problematic operation
- # Use {{log:display}} (or {{log:display-exception}} to display the log 
-
- 
-
-h3. Worst Case Scenario
-
-If you end up with a Karaf in a really bad state (i.e. you can not boot it anymore) or you just want to revert to a clean state quickly, you can safely remove the {{data}} directory in the installation directory.  This folder contains transient data and will be recreated if removed when you relaunch Karaf.
-You may also want to remove the files in the {{deploy}} folder to avoid them being automatically installed when Karaf is started the first time.
-
-h2. Debugging
-
-Usually, the easiest way to debug Karaf or any application deployed onto it is to use remote debugging.
-Remote debugging can be easily activated by using the {{debug}} parameter on the command line.
-
-{noformat}
-> bin/karaf debug
-{noformat
-or on Windows
-{noformat}
-> bin\karaf.bat debug
-{noformat
-
-Another option is to set the {{KARAF_DEBUG}} environment variable to {{TRUE}}.
-
-This can be done using the following command on Unix systems:
-{noformat}
-export KARAF_DEBUG=true
-{noformat}
-
-On Windows, use the following command
-{noformat}
-set KARAF_DEBUG=true
-{noformat}
-
-Then, you can launch Karaf using the usual way:
-{noformat}
-bin/karaf
-{noformat}
-or
-{noformat}
-bin\karaf.bat
-{noformat}
-
-Last, inside your IDE, connect to the remote application (the default port to connect to is 5005).
-
-This option works fine when it is needed to debug a project deployed top of Apache Karaf. Nevertheless, you will be blocked 
-if you would like to debug the server Karaf. In this case, you can change the following parameter suspend=y in the 
-karaf.bat script file. That will cause the JVM to pause just before running main() until you attach a debugger then it 
-will resume the execution.  This way you can set your breakpoints anywhere in the code and you should be able to hit them
-no matter how early in the startup they are.  
-
-{code}
-export DEFAULT_JAVA_DEBUG_OPTS='-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005'
-{code}
-and on Windows,
-{code}
-set DEFAULT_JAVA_DEBUG_OPTS='-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005'
-{code}
-
-h2. Profiling
-
-h3. YourKit
-
-You need a few steps to be able to profile Karaf using YourKit.
-The first one is to edit the {{etc/config.properties}} configuration file and add the following property:
-{noformat}
-org.osgi.framework.bootdelegation=com.yourkit.*
-{noformat}
-
-Then, set the {{JAVA_OPTS}} environment variable:
-{noformat}
-export JAVA_OPTS='-Xmx512M -agentlib:yjpagent'
-{noformat}
-
-or, on Windows
-
-{noformat}
-set JAVA_OPTS='-Xmx512M -agentlib:yjpagent'
-{noformat}
-
-Run Karaf from the console, and you should now be able to connect using YourKit standalone or from your favorite IDE.
-
-h2. Monitoring
-
-Karaf uses JMX for monitoring and management of all Karaf components.
-
-The JMX connection could be:
-* local using the process id
-
-!/images/jconsole_connect.jpg|border=1!
-
-* remote using the {{rmiRegistryPort}} property defined in {{etc/org.apache.karaf.management.cfg}} file.
-
-Using JMX, you can have a clean overview of the running Karaf instance:
-
-* A overview with graphics displaying the load in terms of thread, heap/GC, etc:
-
-!/images/jconsole_overview.jpg|border=1!
-
-* A thread overview:
-
-!/images/jconsole_threads.jpg|border=1!
-
-* A memory heap consumption, including "Perform GC" button:
-
-!/images/jconsole_memory.jpg|border=1!
-
-* A complete JVM summary, with all number of threads, etc:
-
-!/images/jconsole_summary.jpg|border=1!
-
-You can manage Karaf features like you are in the shell. For example, you have access to the Admin service MBean, allowing you to create, rename, destroy, change SSH port, etc. Karaf instances:
-
-!/images/jconsole_admin.jpg|border=1!
-
-You can also manage Karaf features MBean to list, install, and uninstall Karaf features:
-
-!/images/jconsole_features.jpg|border=1!
\ No newline at end of file
diff --git a/karaf-2.3.x/manual/src/main/webapp/developers-guide/developer-commands.conf b/karaf-2.3.x/manual/src/main/webapp/developers-guide/developer-commands.conf
deleted file mode 100644
index f10230a..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/developers-guide/developer-commands.conf
+++ /dev/null
@@ -1,152 +0,0 @@
-
-
-h1. Developer commands
-
-Karaf provides a set of commands specific for developer use.
-
-They allow for getting detailed detailed information about the Karaf instance and the applications running in them.
-
-h2. Diagnostic dump command
-
-Karaf provides a {{dev:create-dump}} command which creates a dump files containing diagnostic information. The dumps can be
-packaged in a zip archive (default) or directly into a given directory.
-
-{code}
-karaf@root> dev:create-dump
-Diagnostic dump created.
-{code}
-
-The previous command generates a zip archive in the KARAF_HOME (by default the name is the generation timestamp).
-
-The following dumps are available in the zip archive:
-* {{features.txt}} provides an overview of the features. It means:
-** the repository list
-** the feature list including bundles URL
-* {{bundles.txt}} provides an overview of the installed bundles, with the ID and the state of each bundle.
-* {{threads.txt}} provides a complete threads dump. It describe all threads running in Karaf and their current state (blocked,
-waiting, etc) with the associated class hierarchy.
-
-These dumps are very helpful when you would like to take a snapshot of a current Karaf running instance.
-
-h2. Dynamic import
-
-The {{dev:dynamic-import}} command allows you to enable or disable the dynamic import of a given bundle:
-
-{code}
-karaf@root> dev:dynamic-import 41
-Enabling dynamic imports on bundle org.apache.karaf.shell.config [41]
-{code}
-
-h2. OSGi framework
-
-The {{dev:framework}} command shows you the current OSGi framework in use, and enables debugging of the underlying OSGi framework.
-
-{code}
-karaf@root> dev:framework
-Current OSGi framework is Felix
-karaf@root> dev:framework -debug
-Enabling debug for OSGi framework (Felix)
-- set felix.log.level=4 in etc/config.properties
-
-Restart Karaf now to enable Felix debug logging
-karaf@root> dev:framework -nodebug
-Disabling debug for OSGi framework (Felix)
-- removed felix.log.level from etc/config.properties
-
-Restart Karaf now to disable Felix debug logging
-{code}
-
-h2. Print stack trace
-
-The {{dev:print-stack-traces}} command prints the full stack trace in the console when the execution of a command
-throws an exception.
-
-You can enable or disable this behavior by passing true (to enable) or false (to disable) on the command on the fly:
-
-{code}
-karaf@root> dev:print-stack-traces
-karaf@root> osgi:start
-Error executing command osgi:start: argument ids is required
-org.apache.felix.gogo.commands.CommandException: Argument ids is required
-        at org.apache.felix.gogo.commands.basic.DefaultActionPreparator.prepare(DefaultActionPreparator.java:284)
-        at org.apache.felix.gogo.commands.basic.AbstractCommand.execute(AbstractCommand.java:34)
-        at org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:78)
-        at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:474)
-        at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:400)
-        at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
-        at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:183)
-        at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:120)
-        at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:79)
-        at org.apache.karaf.shell.console.jline.Console.run(Console.java:180)
-        at java.lang.Thread.run(Thread.java:619)
-karaf@root> dev:print-stack-traces false
-karaf@root> osgi:start
-Error executing command osgi:start: argument ids is required
-{code}
-
-h2. Karaf restart
-
-The {{dev:restart}} command allows you to restart the running Karaf instance:
-
-{code}
-karaf@root> dev:restart
-karaf@root>
-        __ __                  ____
-       / //_/____ __________ _/ __/
-      / ,<  / __ `/ ___/ __ `/ /_
-     / /| |/ /_/ / /  / /_/ / __/
-    /_/ |_|\__,_/_/   \__,_/_/
-
-  Apache Karaf (2.1.99-SNAPSHOT)
-
-Hit '<tab>' for a list of available commands
-and '[cmd] --help' for help on a specific command.
-Hit '<ctrl-d>' or 'osgi:shutdown' to shutdown Karaf.
-
-karaf@root>
-{code}
-
-h2. Bundle tree
-
-The {{dev:show-tree}} command shows the bundle dependency tree based on the wiring information of a given single bundle ID.
-
-{code}
-karaf@root> dev:show-tree 40
-Bundle org.apache.karaf.diagnostic.command [40] is currently ACTIVE
-
-org.apache.karaf.diagnostic.command [40]
-+- org.apache.aries.blueprint [10]
-|  +- org.apache.aries.util [8]
-|  +- org.apache.felix.configadmin [5]
-|  +- org.apache.aries.proxy [7]
-|  |  +- org.apache.aries.util [8]
-|  |  +- org.apache.servicemix.bundles.asm [9]
-|  |  +- org.ops4j.pax.logging.pax-logging-api [3]
-|  +- org.ops4j.pax.logging.pax-logging-api [3]
-+- org.apache.karaf.shell.console [22]
-|  +- org.apache.aries.blueprint [10]
-|  +- org.ops4j.pax.logging.pax-logging-api [3]
-|  +- org.apache.karaf.jaas.modules [13]
-|     +- org.apache.aries.blueprint [10]
-|     +- org.apache.felix.configadmin [5]
-|     +- org.apache.karaf.jaas.config [29]
-|     |  +- org.apache.aries.blueprint [10]
-|     |  +- org.ops4j.pax.logging.pax-logging-api [3]
-|     +- org.ops4j.pax.logging.pax-logging-api [3]
-+- org.apache.karaf.diagnostic.core [23]
-{code}
-
-h2. Watching and updating bundle
-
-The {{dev:watch}} watches and updates bundles. It's especially helpful in development mode.
-
-It allows you to configure a set of URLs that will be monitored. All bundles whose location matches the given URL will be
-automatically updated. This avoids needing to manually update the bundles or even copy the bundles to the system folder.
-
-Note that only Maven based URLs and Maven SNAPSHOTs will actually be updated automatically, so if you do:
-
-{code}
-karaf@root> dev:watch *
-{code}
-
-it will actually monitor all bundles that have a location matching mvn:* that have '-SNAPSHOT' in their URL.
diff --git a/karaf-2.3.x/manual/src/main/webapp/developers-guide/extending-console.conf b/karaf-2.3.x/manual/src/main/webapp/developers-guide/extending-console.conf
deleted file mode 100644
index f6bfbd0..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/developers-guide/extending-console.conf
+++ /dev/null
@@ -1,306 +0,0 @@
-
-
-h1. Extending the console
-
-This chapter will guide you through the steps needed to extend the console and create a new shell.  
-We will leverage Maven, Blueprint and OSGi, so you will need some knowledge of those products.
-
-You may also find some information about the console at [http://felix.apache.org/site/rfc-147-overview.html].
-
-h2. Create the project using maven
-
-We first need to create a project using Maven.  Let's leverage Maven archetypes for that.
-
-h3. Command line
-
-Using the command line, we can create our project:
-{code}
-mvn archetype:create \
-  -DarchetypeArtifactId=maven-archetype-quickstart \
-  -DgroupId=org.apache.karaf.shell.samples \
-  -DartifactId=shell-sample-commands \
-  -Dversion=1.0-SNAPSHOT
-{code}
-
-This generate the main {{pom.xml}} and some additional packages.
-
-h3. Interactive shell
-
-You can also use the interactive mode for creating the skeleton project:
-{code}
-mvn archetype:generate
-{code}
-Use the following values when prompted:
-{code}
-Choose a number:  (1/2/3/4/5/6/7/.../32/33/34/35/36) 15: : 15
-Define value for groupId: : org.apache.karaf.shell.samples
-Define value for artifactId: : shell-sample-commands
-Define value for version:  1.0-SNAPSHOT: : 
-Define value for package: : org.apache.karaf.shell.samples
-{code}
-
-h3. Manual creation
-
-Alternatively, you can simply create the directory {{shell-sample-commands}} and create the {{pom.xml}} file inside it:
-
-{pygmentize:xml}
-<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>
-
-  <groupId>org.apache.karaf.shell.samples</groupId>
-  <artifactId>shell-sample-commands<artifactId>
-  <packaging>bundle</packaging>
-  <version>1.0-SNAPSHOT</version>
-  <name>shell-sample-commmands</name>
-
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.karaf.shell</groupId>
-      <artifactId>org.apache.karaf.shell.console</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>3.8.1</version>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>maven-bundle-plugin</artifactId>
-        <version>${felix.plugin.version}</version>
-        <configuration>
-          <instructions>
-            <Import-Package>
-              org.apache.felix.service.command,
-              org.apache.felix.gogo.commands,
-              org.apache.karaf.shell.console,
-              *
-            </Import-Package>
-          </instructions>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
-</project>
-{pygmentize}
-
-h2. Configuring for Java 5
-
-We are using annotations to define commands, so we need to ensure Maven will actually use JDK 1.5 to compile the jar.
-Just add the following snippet after the {{dependencies}} section.
-
-{pygmentize:xml}
-<build>
-  <plugins>
-    <plugin>
-      <groupId>org.apache.maven.plugins</groupId>
-      <artifactId>maven-compiler-plugin</artifactId>
-      <configuration>
-        <target>1.5</target>
-        <source>1.5</source>
-      </configuration>
-    </plugin>
-  </plugins>
-</build>
-{pygmentize}
-
-h2. Loading the project in your IDE
-
-We can use Maven to generate the needed files for your IDE:
-
-Inside the project, run the following command
-{code}
-mvn eclipse:eclipse
-{code}
-or
-{code}
-mvn idea:idea
-{code}
-
-The project files for your IDE should now be created.  Just open the IDE and load the project.
-
-h2. Creating a basic command class
-
-We can now create the command class {{HelloShellCommand.java}}
-
-{pygmentize:java}
-package org.apache.karaf.shell.samples;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-
-@Command(scope = "test", name = "hello", description="Says hello")
-public class HelloShellCommand extends OsgiCommandSupport {
-
-    @Override
-    protected Object doExecute() throws Exception {
-        System.out.println("Executing Hello command");
-        return null;
-    }
-}
-{pygmentize}
-
-h2. Creating the associated blueprint configuration files
-
-The blueprint configuration file will be used to create the command and register it in the OSGi registry, which is the way to make the command available to Karaf console.  This blueprint file must be located in the {{OSGI-INF/blueprint/}} directory inside the bundle.
-
-If you don't have the {{src/main/resources}} directory yet, create it.
-
-{code}
-mkdir src/main/resources
-{code}
-
-Then, re-generate the IDE project files and reload it so that this folder is now recognized as a source folder.
-
-Inside this directory, create the {{OSGI-INF/blueprint/}} directory and put the following file inside (the name of this file has no impact at all):
-
-{pygmentize:xml}
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.0.0">
-        <command name="test/hello">
-            <action class="org.apache.karaf.shell.samples.HelloShellCommand"/>
-        </command>
-    </command-bundle>
-
-</blueprint>
-{pygmentize}
-
-h2. Compiling the jar
-
-Let's try to build the jar.  Remove the test classes and sample classes if you used the artifact, then from the command line, run:
-
-{code}
-mvn install
-{code}
-
-The end of the maven output should look like:
-{code}
-[INFO] ------------------------------------------------------------------------
-[INFO] BUILD SUCCESSFUL
-[INFO] ------------------------------------------------------------------------
-{code}
-
-h2. Test in Karaf
-
-Launch a Karaf instance and run the following command to install the newly created bundle:
-{code}
-karaf@root> osgi:install -s mvn:org.apache.karaf.shell.samples/shell-sample-commands/1.0-SNAPSHOT
-{code}
-
-Let's try running the command:
-
-{code}
-karaf@root> test:hello
-Executing Hello command
-{code}
-
-h1. Command completer
-
-A completer allows you to automatically complete a command argument using <tab>. A completer is simply a bean which is injected to a command.
-
-Of course to be able to complete it, the command should require an argument.
-
-h2. Command argument
-
-We add an argument to the HelloCommand:
-
-{code}
-package org.apache.karaf.shell.samples;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-
-@Command(scope = "test", name = "hello", description="Says hello")
-public class HelloShellCommand extends OsgiCommandSupport {
-
-    @Argument(index = 0, name = "arg", description = "The command argument", required = false, multiValued = false)
-    String arg = null;
-
-    @Override
-    protected Object doExecute() throws Exception {
-        System.out.println("Executing Hello command");
-        return null;
-    }
-}
-{code}
-
-The Blueprint configuration file is the same as previously.
-
-h2. Completer bean
-
-A completer is a bean which implements the Completer interface:
-
-{code}
-package org.apache.karaf.shell.samples;
-
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.apache.karaf.shell.console.Completer;
-
-/**
- * <p>
- * A very simple completer.
- * </p>
- */
-public class SimpleCompleter implements Completer {
-
- /**
-  * @param buffer the beginning string typed by the user
-  * @param cursor the position of the cursor
-  * @param candidates the list of completions proposed to the user
-  */
- public int complete(String buffer, int cursor, List candidates) {
-    StringsCompleter delegate = new StringsCompleter();
-    delegate.getStrings().add("one");
-    delegate.getStrings().add("two");
-    delegate.getStrings().add("three");
-    return delegate.complete(buffer, cursor, candidates);
- }
-
-}
-{code}
-
-h2. Blueprint configuration file
-
-Using Blueprint, you can "inject" the completer linked to your command. The same completer could be used for several commands and a command can have several completers:
-
-{code:lang=xml}
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.0.0">
-        <command name="test/hello">
-            <action class="org.apache.karaf.shell.samples.HelloShellCommand"/>
-            <completers>
-                <ref component-id="simpleCompleter"/>
-                <null/>
-            </completers>
-        </command>
-    </command-bundle>
-
-    <bean id="simpleCompleter" class="org.apache.karaf.shell.samples.SimpleCompleter"/>
-
-</blueprint>
-{code}
-
-h2. Test in Karaf
-
-Launch a Karaf instance and run the following command to install the newly created bundle:
-{code}
-karaf@root> osgi:install -s mvn:org.apache.karaf.shell.samples/shell-sample-commands/1.0-SNAPSHOT
-{code}
-
-Let's try running the command:
-
-{code}
-karaf@root> test:hello <tab>
- one    two    three
-{code}
diff --git a/karaf-2.3.x/manual/src/main/webapp/developers-guide/features-maven-plugin-add.conf b/karaf-2.3.x/manual/src/main/webapp/developers-guide/features-maven-plugin-add.conf
deleted file mode 100644
index 60291d4..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/developers-guide/features-maven-plugin-add.conf
+++ /dev/null
@@ -1,50 +0,0 @@
-h2. Goal {{features:add-features-to-repo}}
-
-The {{features:add-features-to-repo}} goal adds all the required bundles for a given set of features into directory.  You can use this goal to create a {{/system}} directory for building your own Karaf-based distribution.
-
-By default, the Karaf core features descriptors (standard and enterprise) are automatically included in the descriptors set.
-
-h3. Example
-The example below copies the bundles for the {{spring}} and {{war}} features defined in the Karaf features XML descriptor into the {{target/features-repo}} directory.
-{pygmentize:xml}
-<project>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.karaf.tooling</groupId>
-        <artifactId>features-maven-plugin</artifactId>
-        <version>${project.version}</version>
-
-        <executions>
-          <execution>
-            <id>add-features-to-repo</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>add-features-to-repo</goal>
-            </goals>
-            <configuration>
-              <descriptors>
-                <descriptor>mvn:my.groupid/my.artifactid/1.0.0/xml/features</descriptor>
-              </descriptors>
-              <features>
-                <feature>spring</feature>
-                <feature>war</feature>
-                <feature>my</feature>
-                <feature>other/1.0-SNAPSHOT</feature>
-              </features>
-              <repository>target/features-repo</repository>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>  
-</project>
-{pygmentize}
-
-h3. Parameters
-|| Name || Type || Description ||
-| {{descriptors}} | {{String[]}} | List of features XML descriptors where the features are defined \\ NB: Karaf core features descriptors (standard and enterprise) are automatically added in this list |
-| {{features}} | {{String[]}} | List of features that bundles should be copied to the repository directory. A feature could be just a feature name or a name/version. If it's just a name, the features-maven-plugin will take the first feature with the given name, whatever the version is. |
-| {{repository}} | {{File}} | The directory where the bundles will be copied by the plugin goal |
-| {{karafVersion}} | {{String}} | Target Karaf version to use to resolve the Karaf core features descriptors (standard and enterprise) |
\ No newline at end of file
diff --git a/karaf-2.3.x/manual/src/main/webapp/developers-guide/features-maven-plugin-create-kar.conf b/karaf-2.3.x/manual/src/main/webapp/developers-guide/features-maven-plugin-create-kar.conf
deleted file mode 100644
index 24d6e3e..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/developers-guide/features-maven-plugin-create-kar.conf
+++ /dev/null
@@ -1,39 +0,0 @@
-h2. Goal {{features:create-kar}}
-
-The {{features:create-kar}} goal creates a kar file from a given features XML.
-A kar file is a zip archive shipping all bundles and configuration files containing in features of a features XML, and the features XML itself.
-You can deploy a kar file just by copying it in the deploy folder, all resources will be loaded from the kar file.
-
-h3. Example
-The example below generates a kar file from a given features XML. The generated kar will be in the target folder with the ${artifactId}-${version}.kar name.
-{pygmentize:xml}
-<project>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.karaf.tooling</groupId>
-        <artifactId>features-maven-plugin</artifactId>
-        <version>${project.version}</version>
-          <executions>
-            <execution>
-              <id>create-kar</id>
-              <goals>
-                <goal>create-kar</goal>
-              </goals>
-              <configuration>
-                <featuresFile>${project.basedir}/src/main/resources/features.xml</featuresFile>
-              </configuration>
-            </execution>
-          </executions>
-        </plugin>
-    </plugins>
-  </build>
-</project>
-{pygmentize}
-
-h3. Parameters
-|| Name || Type || Description ||
-| {{featuresFile}} | {{File}} | The features XML used to generate the KAR file \\ Default value: {{${project.build.directory}/feature/feature.xml}} |
-| {{resourcesDir} | {{File}} | Location of resources directory for additional content to include in the KAR. Note that it includes everything under classes so as to include maven-remote-resources \\ Default value: ${project.build.directory}/classes}} |
-| {{finalName}} | {{String}} | Name of the generated kar \\ Default value: {{${project.build.finalName}}} |
-| {{outputDirectory}} | {{File}} | Directory containing the generated archive \\ Default value: {{${project.build.directory}}} |
diff --git a/karaf-2.3.x/manual/src/main/webapp/developers-guide/features-maven-plugin-generate.conf b/karaf-2.3.x/manual/src/main/webapp/developers-guide/features-maven-plugin-generate.conf
deleted file mode 100644
index dc36c2c..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/developers-guide/features-maven-plugin-generate.conf
+++ /dev/null
@@ -1,53 +0,0 @@
-h2. Goal {{features:generate}}
-
-The {{features:generate-features-xml}} goal generates a features XML file for every bundle listed in the project's dependencies.  In order to satisfy the required imports in these bundles, the plugin will add bundles:
-- bundles provided by Apache Karaf
-- a explicit list of bundles
-- bundles discovered in the POM's transitive dependencies
-
-Afterwards, the generated file will be attached to the build as an additional build artifact (by default as {{group:artifact:version:xml:features}}).
-
-h3. Example
-The example below generates one feature that installs bundle {{mvn:org.apache:bundle1:1.0}} in a features XML file called {{target/features.xml}}.  It will find bundle in Apache Karaf ${project.version}, the transitive dependencies for this POM and the bundles listed in {{src/main/resources/bundles.properties}}. 
-{pygmentize:xml}
-<project>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache</groupId>
-      <artifactId>bundle1</artifactId>
-      <version>1.0</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.karaf.tooling</groupId>
-        <artifactId>features-maven-plugin</artifactId>
-        <version>${project.version}</version>
-          <executions>
-            <execution>
-              <id>generate</id>
-              <phase>generate-resources</phase>
-              <goals>
-                <goal>generate-features-xml</goal>
-              </goals>
-              <configuration>
-                <bundles>src/main/resources/bundles.properties</bundles>
-                <kernelVersion>${project.version}</kernelVersion>
-                <outputFile>target/features.xml</outputFile>
-              </configuration>
-            </execution>
-          </executions>
-        </plugin>
-    </plugins>
-  </build>  
-</project>
-{pygmentize}
-
-h3. Parameters
-|| Name || Type || Description ||
-| {{outputFile}} | {{File}} | Name of the features XML file that is being generated \\ Default value: {{${project.build.directory}/classes/feature.xml}} |
-| {{attachmentArtifactType}} | {{String}} | The artifact type for attaching the generated file to the project \\ Default value: {{xml}) |
-| {{attachmentArtifactClassifier}} | {{String}} | The artifact classifier for attaching the generated file to the project \\ Default value: {{features}} |
-| {{kernelVersion}} | {{String}} | The version of Karaf that is used to determine system bundles and default provided features |
-| {{bundles}} | {{File}} | A properties file that contains a list of bundles that will be used to generate the features.xml file |
diff --git a/karaf-2.3.x/manual/src/main/webapp/developers-guide/features-maven-plugin-validate.conf b/karaf-2.3.x/manual/src/main/webapp/developers-guide/features-maven-plugin-validate.conf
deleted file mode 100644
index 2c74edb..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/developers-guide/features-maven-plugin-validate.conf
+++ /dev/null
@@ -1,50 +0,0 @@
-h2. Goal {{features:validate}}
-
-The {{features:validate}} goal validates a features XML descriptor by checking if all the required imports for the bundles defined in the features can be matched to a provided export.
-
-By default, the plugin tries to add the Karaf standard features (standard and enterprise) in the repositories set.
-It means that it's not necessary to explicitly define the Karaf features descriptor in the repository section of your features descriptor.
-
-h3. Example
-The example below validates the features defined in the {{target/features.xml}} by checking all the imports and exports.  It reads the definition for the packages that are exported by the system bundle from the {{src/main/resources/config.properties}} file.
-{pygmentize:xml}
-<project>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.karaf.tooling</groupId>
-        <artifactId>features-maven-plugin</artifactId>
-        <version>${project.version}</version>
-          <executions>
-            <execution>
-              <id>validate</id>
-              <phase>process-resources</phase>
-              <goals>
-                <goal>validate</goal>
-              </goals>
-              <configuration>
-                <file>target/features.xml</file>
-                <karafConfig>src/main/resources/config.properties</karafConfig>
-              </configuration>
-            </execution>
-          </executions>
-          <dependencies>
-            <dependency>
-              <groupId>org.slf4j</groupId>
-              <artifactId>slf4j-simple</artifactId>
-              <version>1.4.3</version>
-	        </dependency>
-          </dependencies>
-        </plugin>
-    </plugins>
-  </build>  
-</project>
-{pygmentize}
-
-h3. Parameters
-|| Name || Type || Description ||
-| {{file}} | {{File}} | The features XML descriptor file to validate. \\ Default value: {{${project.build.directory}/classes/features.xml}} |
-| {{karafConfig}} | {{String}} | The Karaf {{config.properties}} file to use during the validation process \\ Default value: {{config.properties}} |
-| {{jreVersion}} | {{String}} | The JRE version that is used during the validation process \\ Default value: {{jre-1.5}) |
-| {{karafVersion}} | {{String}} | The target Karaf version used to get the Karaf core features (standard and enterprise) \\ Default value is the version of the plugin |
-| {{repositories}} | {{String[]}} | Additional features XML descriptors that will be used during the validation process |
\ No newline at end of file
diff --git a/karaf-2.3.x/manual/src/main/webapp/developers-guide/features-maven-plugin.conf b/karaf-2.3.x/manual/src/main/webapp/developers-guide/features-maven-plugin.conf
deleted file mode 100644
index 14d2f11..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/developers-guide/features-maven-plugin.conf
+++ /dev/null
@@ -1,30 +0,0 @@
-h1. Using the features-maven-plugin
-
-The {{features-maven-plugin}} provides several goals to help you create and validate features XML descriptors as well as leverage your features to create a custom Karaf distribution.
-
-|| Goal || Description ||
-| {{[features:add-features-to-repo|features-maven-plugin-add]}} | Copies all the bundles required for a given set of features into a directory \\ (e.g. for creating your own Karaf-based distribution) |
-| {{features:generate-features-file}} | Deprecated - use {{[features:generate-features-xml|features-maven-plugin-generate]}} instead |
-| {{[features:generate-features-xml|features-maven-plugin-generate]}} | Generates a features XML descriptor for a set of bundles |
-| {{[features:validate|features-maven-plugin-validate]}} | Validate a features XML descriptor by checking if all the required imports can be matched to exports |
-| {{|features:create-kar|features-maven-plugin-create-kar]}} | Create a KAR file from a features XML |
-
-h2. Configure the features-maven-plugin
-In order to use the {{features-maven-plugin}}, you have to define the plugin in your project's {{pom.xml}} file:
-{pygmentize:xml}
-<project>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.karaf.tooling</groupId>
-        <artifactId>features-maven-plugin</artifactId>
-        <version>${project.version}</version>
-
-        <executions>
-          <!-- add execution definitions here -->
-        </executions>
-      </plugin>
-    </plugins>
-  </build>  
-</project>
-{pygmentize}
diff --git a/karaf-2.3.x/manual/src/main/webapp/developers-guide/github-contributions.conf b/karaf-2.3.x/manual/src/main/webapp/developers-guide/github-contributions.conf
deleted file mode 100644
index d278f0d..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/developers-guide/github-contributions.conf
+++ /dev/null
@@ -1,73 +0,0 @@
-h1. Github Contributions
-
-Some people prefer to make contributions to karaf source via github. If you are one of them, this is for you!
-
-
-h2. Introduction
-
-Apache Karaf is available as a periodically replicated mirror on: [https://github.com/apache/karaf] 
-
-
-h2. Suggested Workflow
-
-# make a fork of karaf repo github mirror
-# do all your new work on your own karaf fork
-# when ready, file a jira issue [https://issues.apache.org/jira/browse/KARAF], attach the link to your github pull request, and ask for a review
-# one of karaf committers will discuss your pull request on github; and at some point your pull request will be accepted 
-# when your pull request is accepted, squash it into a single commit and attach single patch file to the original jira, with ASF grant check box selected  
-# now pray to your favorite ASF committer to really accept the patch :-)
-# when your patch is committed to the svn, and you can verify it in the latest karaf snapshot, close your pull request on github 
-
-
-h2. License Reminder
-
-in order for your contributions to be accepted:
-
-* all files must contain ASL license grant header
-
-* you must select ASF grant check box when attaching patch to the jira
-
-
-h2. How to Generate a One-File-Patch Via Throw-Away Branch
-
-here is one way to generate squash of your commits:
-
-[http://stackoverflow.com/questions/616556/how-do-you-squash-commits-into-one-patch-with-git-format-patch]
-
-{code}
-
-#
-# 'archon' referers to karaf mirror
-# 'origin' referers to your own fork
-#
-
-# attach karaf mirror as remote, if not done yet
-git remote add archon https://github.com/apache/karaf
-
-# fetch latest karaf mirror
-git fetch archon 
-
-# ensure you are on your fork trunk
-git checkout origin/trunk
-
-# kill previous patch delivery, if you had one
-git branch -D delivery
-
-# make new delivery throw-away branch, based on latest karaf mirror
-git branch delivery archon/trunk
-
-# use it
-git checkout delivery
-
-# squash all your local development into a single commit
-git merge --squash trunk
-
-# commit it to the delivery branch
-git commit -m "delivery"
-
-# generate a patch file against the mirror
-git format-patch archon/trunk
-
-{code}
-
-root of your karaf source now contains a file named "0001-delivery.patch.txt" (please attach the .txt ending;this will allow commiters to open your patch directly in the browser and give it a short look there) which you should attach to your karaf jira, and ask to commit to the svn trunk
diff --git a/karaf-2.3.x/manual/src/main/webapp/developers-guide/index.conf b/karaf-2.3.x/manual/src/main/webapp/developers-guide/index.conf
deleted file mode 100644
index 99fe708..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/developers-guide/index.conf
+++ /dev/null
@@ -1,15 +0,0 @@
-h1. Developers Guide
-
-* [Maven Archetypes|archetypes]
-* [Branding the Console|branding-console]
-* [Extending the Console|extending-console]
-* [Custom Distribution|custom-distribution]
-* [Security Framework|security-framework]
-* [Using the features-maven-plugin|features-maven-plugin]
-* [Troubleshooting, Debugging, Profiling, and Monitoring|debugging]
-* [Developer Commands|developer-commands]
-* [Programmatically connect to the console|connect-console]
-* [Writing integration tests|writing-tests]
-* [Creating bundles|creating-bundles]
-* [Shell syntax|shell-syntax]
-* [Github Contributions|github-contributions]
diff --git a/karaf-2.3.x/manual/src/main/webapp/developers-guide/security-framework.conf b/karaf-2.3.x/manual/src/main/webapp/developers-guide/security-framework.conf
deleted file mode 100644
index c6cbb96..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/developers-guide/security-framework.conf
+++ /dev/null
@@ -1,416 +0,0 @@
-h1. Security framework
-
-Karaf supports [JAAS|http://download.oracle.com/javase/6/docs/technotes/guides/security/jaas/JAASRefGuide.html] with some enhancements to allow JAAS to work nicely in an OSGi environment.  This framework also features an OSGi keystore manager with the ability to deploy new keystores or truststores at runtime.  
-
-h2. Overview
-
-This feature allows runtime deployment of JAAS based configuration for use in various parts of the application. This includes the remote console login, which uses the {{karaf}} realm, but which is configured with a dummy login module by default.  These realms can also be used by the NMR, JBI components or the JMX server to authenticate users logging in or sending messages into the bus.
-
-In addition to JAAS realms, you can also deploy keystores and truststores to secure the remote shell console, setting up HTTPS connectors or using certificates for WS-Security.
-
-A very simple XML schema for spring has been defined, allowing the deployment of a new realm or a new keystore very easily.
-
-h2. Schema
-
-To override or deploy a new realm, you can use the following XSD which is supported by a Spring namespace handler and can thus be defined in a Spring xml configuration file.
-
-Following is the XML Schema to use when defining Karaf realms:
-{snippet:url=../jaas/config/src/main/resources/org/apache/karaf/jaas/config/karaf-jaas-1.1.0.xsd|lang=xml|pygmentize=true}
-{snippet}
-
-You can find the schema at the following [location|http://karaf.apache.org/xmlns/jaas/v1.1.0].
-
-Here are two examples using this schema:
-{pygmentize:xml}
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.0.0"
-           xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0">
-
-    <!-- Bean to allow the $[karaf.base] property to be correctly resolved -->
-    <ext:property-placeholder placeholder-prefix="$[" placeholder-suffix="]"/>
-
-    <jaas:config name="myrealm">
-        <jaas:module className="org.apache.karaf.jaas.modules.properties.PropertiesLoginModule" 
-                     flags="required">
-            users = $[karaf.base]/etc/users.properties
-        </jaas:module>
-    </jaas:config>
-
-    <service interface="org.apache.karaf.jaas.modules.BackingEngineFactory">
-        <bean class="org.apache.karaf.jaas.modules.properties.PropertiesBackingEngineFactory"/>
-    </service>
-
-</blueprint>
-{pygmentize}
-
-NB: Don't forge to expose the BackingEngine as an OSGi service.
-
-{pygmentize:xml}
-<jaas:keystore xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.1.0"
-               name="ks"
-               rank="1"
-               path="classpath:privatestore.jks"
-               keystorePassword="keyStorePassword"
-               keyPasswords="myalias=myAliasPassword">
-</jaas:keystore>
-{pygmentize}
-
-The {{id}} attribute is the blueprint id of the bean, but it will be used by default as the name of the realm if no {{name}} attribute is specified.   Additional attributes on the {{config}} elements are a {{rank}}, which is an integer.  When the LoginContext looks for a realm for authenticating a given user, the realms registered in the OSGi registry are matched against the required name.  If more than one realm is found, the one with the highest rank will be used, thus allowing the override of some realms with new values.  The last attribute is {{publish}} which can be set to false to not publish the realm in the OSGi registry, thereby disabling the use of this realm.
-
-Each realm can contain one or more module definitions.  Each module identifies a LoginModule and the {{className}} attribute must be set to the class name of the login module to use.   Note that this login module must be available from the bundle classloader, so either it has to be defined in the bundle itself, or the needed package needs to be correctly imported. The {{flags}} attribute can take one of four values that are explained on the [JAAS documentation|http://svn.apache.org/repos/asf/karaf/tags/karaf-2.0.0/jaas/boot/src/main/java/org/apache/karaf/jaas/boot/ProxyLoginModule.java].
-The content of the {{module}} element is parsed as a properties file and will be used to further configure the login module.
-
-Deploying such a code will lead to a [JaasRealm|http://svn.apache.org/repos/asf/karaf/tags/karaf-2.0.0/jaas/config/src/main/java/org/apache/karaf/jaas/config/JaasRealm.java] object in the OSGi registry, which will then be used when using the JAAS login module.
-
-h3. Configuration override and use of the {{rank}} attribute
-
-The {{rank}} attribute on the {{config}} element is tied to the ranking of the underlying OSGi service.  When the JAAS framework performs an authentication, it will use the realm name to find a matching JAAS configuration.  If multiple configurations are used, the one with the highest {{rank}} attribute will be used.
-So if you want to override the default security configuration in Karaf (which is used by the ssh shell, web console and JMX layer), you need to deploy a JAAS configuration with the name {{name="karaf"}} and {{rank="1"}}.
-
-{pygmentize:xml}
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.1.0"
-           xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0">
-
-    <!-- Bean to allow the $[karaf.base] property to be correctly resolved -->
-    <ext:property-placeholder placeholder-prefix="$[" placeholder-suffix="]"/>
-
-    <jaas:config name="karaf" rank="1">
-        <jaas:module className="org.apache.karaf.jaas.modules.properties.PropertiesLoginModule"
-                     flags="required">
-            users = $[karaf.base]/etc/users.properties
-            ...
-        </jaas:module>
-    </jaas:config>
-
-</blueprint>
-{pygmentize}
-
-
-h2. Architecture
-
-Due to constraints in the JAAS specification, one class has to be available for all bundles.  This class is called [ProxyLoginModule|http://svn.apache.org/repos/asf/karaf/tags/karaf-2.0.0/jaas/boot/src/main/java/org/apache/karaf/jaas/boot/ProxyLoginModule.java] and is a LoginModule that acts as a proxy for an OSGi defines LoginModule.  If you plan to integrate this feature into another OSGi runtime, this class must be made available from the system classloader and the related package be part of the boot delegation classpath (or be deployed as a fragment attached to the system bundle).
-
-The xml schema defined above allows the use of a simple xml (leveraging spring xml extensibility) to configure and register a JAAS configuration for a given realm.  This configuration will be made available into the OSGi registry as a [JaasRealm|http://svn.apache.org/repos/asf/karaf/tags/karaf-2.0.0/jaas/config/src/main/java/org/apache/karaf/jaas/config/JaasRealm.java] and the OSGi specific Configuration will look for such services.  Then the proxy login module will be able to use the information provided by the realm to actually load the class from the bundle containing the real login module.
-
-h2. Available realms
-
-Karaf comes with several login modules to handle authentication needs for your environment.
-
-h3. PropertiesLoginModule
-
-| LoginModule           | org.apache.karaf.jaas.modules.properties.PropertiesLoginModule            |
-| BackingEngineFactory  | org.apache.karaf.jaas.modules.properties.PropertiesBackingEngineFactory   |
-
-This login module is the one configured by default.  It uses a properties text file to load the users, passwords and roles.  
-
-|| Name             || Description |
-| {{users}}          | location of the properties file |
-
-This file uses the [properties file format|http://download.oracle.com/javase/6/docs/api/java/util/Properties.html#load(java.io.Reader)].
-The format of the properties is as follows, with each line defining a user, its password and associated roles:
-{code}
-user=password[,role][,role]...
-{code}
-
-{pygmentize:xml}
-<jaas:config name="karaf">
-    <jaas:module className="org.apache.karaf.jaas.modules.properties.PropertiesLoginModule" 
-                 flags="required">
-        users = $[karaf.base]/etc/users.properties
-    </jaas:module>
-</jaas:config>
-{pygmentize}
-
-h3. OsgiConfigLoginModule
-
-| LoginModule           | org.apache.karaf.jaas.modules.osgi.OsgiConfigLoginModule            |
-| BackingEngineFactory  |                                                                     |
-
-The OsgiConfigLoginModule uses the OSGi ConfigurationAdmin service to provide the users, passwords and roles.
-
-|| Name           || Description |
-| {{pid}}          | the PID of the configuration containing user definitions |
-
-The format of the configuration is the same than for the {{PropertiesLoginModule}}.
-
-h3. JDBCLoginModule
-
-| LoginModule           | org.apache.karaf.jaas.modules.jdbc.JDBCLoginModule            |
-| BackingEngineFactory  | org.apache.karaf.jaas.modules.jdbc.JDBCBackingEngineFactory   |
-
-The JDBCLoginModule uses a database to load the users, passwords and roles from a provided data source _(normal or XA)_. The data source and the queries for password and role retrieval are configurable using the following parameters.
-
-|| Name                   || Description ||
-| {{datasource}}           | The datasource as on OSGi ldap filter or as JDNI name|
-| {{query.password}}       | The SQL query that retries the password of the user |
-| {{query.role}}           | The SQL query that retries the roles of the user |
-
-
-+Passing a data source as an OSGi ldap filter+
-
-To use an OSGi ldap filter, the prefix osgi: needs to be provided, as shown below:
-
-{pygmentize:xml}
-<jaas:config name="karaf">
-    <jaas:module className="org.apache.karaf.jaas.modules.jdbc.JDBCLoginModule" 
-                 flags="required">
-        datasource = osgi:javax.sql.DataSource/(osgi.jndi.service.name=jdbc/karafdb)
-        query.password = SELECT PASSWORD FROM USERS WHERE USERNAME=?
-        query.role = SELECT ROLE FROM ROLES WHERE USERNAME=?
-    </jaas:module>
-</jaas:config>
-{pygmentize}
-
-+Passing a data source as a JNDI name+
-
-To use an JNDI name, the prefix jndi: needs to be provided. The example below assumes the use of Aries JNDI to expose services via JNDI.
-
-{pygmentize:xml}
-<jaas:config name="karaf">
-    <jaas:module className="org.apache.karaf.jaas.modules.jdbc.JDBCLoginModule" 
-                 flags="required">
-        datasource = jndi:aries:services/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/karafdb)
-        query.password = SELECT PASSWORD FROM USERS WHERE USERNAME=?
-        query.role = SELECT ROLE FROM ROLES WHERE USERNAME=?
-    </jaas:module>
-</jaas:config>
-{pygmentize}
-
-h3. LDAPLoginModule
-
-| LoginModule           | org.apache.karaf.jaas.modules.ldap.LDAPLoginModule            |
-| BackingEngineFactory  |                                                               |
-
-The LDAPLoginModule uses LDAP to load the users and roles and bind the users on the LDAP to check passwords.
-
-The LDAPLoginModule supports the following parameters:
-
-|| Name                      || Description ||
-| {{connection.url}}          | The LDAP connection URL, e.g. ldap://hostname |
-| {{connection.username}}     | Admin username to connect to the LDAP. This parameter is optional, if it's not provided, the LDAP connection will be anonymous. |
-| {{connection.password}}     | Admin password to connect to the LDAP. Only used if the {{connection.username}} is specified. |
-| {{user.base.dn}}            | The LDAP base DN used to looking for user, e.g. ou=user,dc=apache,dc=org |
-| {{user.filter}}             | The LDAP filter used to looking for user, e.g. (uid=%u) where %u will be replaced by the username. |
-| {{user.search.subtree}}     | If "true", the user lookup will be recursive (SUBTREE). If "false", the user lookup will be performed only at the first level (ONELEVEL). |
-| {{role.base.dn}}            | The LDAP base DN used to looking for roles, e.g. ou=role,dc=apache,dc=org |
-| {{role.filter}}             | The LDAP filter used to looking for user's role, e.g. (member:=uid=%u) |
-| {{role.name.attribute}}     | The LDAP role attribute containing the role string used by Karaf, e.g. cn |
-| {{role.search.subtree}}     | If "true", the role lookup will be recursive (SUBTREE). If "false", the role lookup will be performed only at the first level (ONELEVEL). |
-| {{authentication}}          | Define the authentication backend used on the LDAP server. The default is simple. |
-| {{initial.context.factory}} | Define the initial context factory used to connect to the LDAP server. The default is com.sun.jndi.ldap.LdapCtxFactory |
-| {{ssl}}                     | If "true" or if the protocol on the {{connection.url}} is {{ldaps}}, an SSL connection will be used |
-| {{ssl.provider}}            | The provider name to use for SSL |
-| {{ssl.protocol}}            | The protocol name to use for SSL (SSL for example)|
-| {{ssl.algorithm}}           | The algorithm to use for the KeyManagerFactory and TrustManagerFactory  (PKIX for example) |
-| {{ssl.keystore}}            | The key store name to use for SSL.  The key store must be deployed using a {{jaas:keystore}} configuration.  |
-| {{ssl.keyalias}}            | The key alias to use for SSL |
-| {{ssl.truststore}}          | The trust store name to use for SSL.  The trust store must be deployed using a {{jaas:keystore}} configuration.  |
-
-A example of LDAPLoginModule usage follows:
-
-{pygmentize:xml}
-<jaas:config name="karaf">
-  <jaas:module className="org.apache.karaf.jaas.modules.ldap.LDAPLoginModule" flags="required">
-        connection.url = ldap://localhost:389
-        user.base.dn = ou=user,dc=apache,dc=org
-        user.filter = (cn=%u)
-        user.search.subtree = true
-        role.base.dn = ou=group,dc=apache,dc=org
-        role.filter = (member:=uid=%u)
-        role.name.attribute = cn
-        role.search.subtree = true
-        authentication = simple
-  </jaas:module>
-</jaas:config>
-{pygmentize}
-
-If you wish to use an SSL connection, the following configuration can be used as an example:
-{pygmentize:xml}
-<ext:property-placeholder />
-
-<jaas:config name="karaf" rank="1">
-    <jaas:module className="org.apache.karaf.jaas.modules.ldap.LDAPLoginModule" flags="required">
-        connection.url = ldaps://localhost:10636
-        user.base.dn = ou=users,ou=system
-        user.filter = (uid=%u)
-        user.search.subtree = true
-        role.base.dn = ou=groups,ou=system
-        role.filter = (uniqueMember=uid=%u)
-        role.name.attribute = cn
-        role.search.subtree = true
-        authentication = simple
-        ssl.protocol=SSL
-        ssl.truststore=ks
-        ssl.algorithm=PKIX
-    </jaas:module>
-</jaas:config>
-
-<jaas:keystore name="ks"
-               path="file:///${karaf.home}/etc/trusted.ks"
-               keystorePassword="secret" />
-{pygmentize}
-
-
-h2. Encryption service
-
-The [EncryptionService|http://svn.apache.org/repos/asf/karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/EncryptionService.java] is a service registered in the OSGi registry providing means to encrypt and check encrypted passwords.  This service acts as a factory for [Encryption|http://svn.apache.org/repos/asf/karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/Encryption.java] objects actually performing the encryption.
-
-This service is used in all Karaf login modules to support encrypted passwords.
-
-h3. Configuring properties
-
-Each login module supports the following additional set of properties:
-|| Name                   || Description ||
-| {{encryption.name}}      | Name of the encryption service registered in OSGi (cf. paragraph [below|#Jasypt]) |
-| {{encryption.enabled}}   | Boolean used to turn on encryption |
-| {{encryption.prefix}}    | Prefix for encrypted passwords |
-| {{encryption.suffix}}    | Suffix for encrypted passwords |
-| {{encryption.algorithm}} | Name of an algorithm to be used for hashing, like "MD5" or "SHA-1" |
-| {{encryption.encoding}}  | Encrypted passwords encoding (can be {{hexadecimal}} or {{base64}}) |
-| {{role.policy}}          | A policy for identifying roles (can be {{prefix}} or {{group}}) [below|#Role discovery policies]) |
-| {{role.discriminator}}   | A discriminator value to be used by the role policy |
-
-A simple example follows:
-{pygmentize:xml}
-<jaas:config name="karaf">
-    <jaas:module className="org.apache.karaf.jaas.modules.properties.PropertiesLoginModule" 
-                 flags="required">
-        users = $[karaf.base]/etc/users.properties
-        encryption.enabled = true
-        encryption.algorithm = MD5
-        encryption.encoding = hexadecimal
-    </jaas:module>
-</jaas:config>
-{pygmentize}
-
-h3. Prefix and suffix
-
-The login modules have the ability to support both encrypted and plain passwords at the same time.  In some cases, some login modules may be able to encrypt the passwords on the fly and save them back in an encrypted form.
-
-h3. Jasypt
-
-Karaf default installation comes with a simple encryption service which usually fulfills simple needs.  However, in some cases, you may need to install the [Jasypt|http://www.jasypt.org/] library which provides stronger encryption algorithms and more control over them.
-
-To install the Jasypt library, the easiest way is to install the available feature:
-{code}
-karaf@root> features:install jasypt-encryption
-{code}
-
-It will download and install the required bundles and also register an {{EncryptionService}} for Jasypt in the OSGi registry.
-
-When configuring a login module to use Jasypt, you need to specify the {{encryption.name}} property and set it to a value of {{jasypt}} to make sure the Jasypt encryption service will be used. 
-
-In addition to the standard properties above, the Jasypt service provides the following parameters:
-
-|| Name                     || Description ||
-| {{providerName}}           | Name of the {{java.security.Provider}} name to use for obtaining the digest algorithm |
-| {{providerClassName}}      | Class name for the security provider to be used for obtaining the digest algorithm |
-| {{iterations}}             | Number of times the hash function will be applied recursively |
-| {{saltSizeBytes}}          | Size of the salt to be used to compute the digest |
-| {{saltGeneratorClassName}} | Class name of the salt generator |
-
-A typical realm definition using Jasypt encryption service would look like:
-{pygmentize:xml}
-<jaas:config name="karaf">
-    <jaas:module className="org.apache.karaf.jaas.modules.properties.PropertiesLoginModule" 
-                 flags="required">
-        users = $[karaf.base]/etc/users.properties
-        encryption.enabled = true
-        encryption.name = jasypt
-        encryption.algorithm = SHA-256
-        encryption.encoding = base64
-        encryption.iterations = 100000
-        encryption.saltSizeBytes = 16
-    </jaas:module>
-</jaas:config>
-{pygmentize}
-
-
-h2. Role discovery policies
-
-The JAAS specification does not provide means to distinguish between User and Role Principals without referring to the specification classes. In order to provide means to the application developer to decouple the application from Karaf JAAS implementation role policies have been created.
-
-A role policy is a convention that can be adopted by the application in order to identify Roles, without depending from the implementation. Each role policy can be cofigured by setting a "role.policy" and "role.discriminator" property to the login module configuration. Currently, Karaf provides two policies that can be applied to all Karaf Login Modules.
-
-# Prefixed Roles
-# Grouped Roles
-
-+Prefixed Roles+
-When the prefixed role policy is used the login module applies a configurable prefix _(property role.discriminator)_ to the role, so that the application can identify the role's principals by its prefix. Example:
-
-{pygmentize:xml}
-<jaas:config name="karaf">
-    <jaas:module className="org.apache.karaf.jaas.modules.properties.PropertiesLoginModule" 
-                 flags="required">
-        users = $[karaf.base]/etc/users.properties
-        role.policy = prefix
-        role.discriminator = ROLE_
-    </jaas:module>
-</jaas:config>
-{pygmentize}
-
-The application can identify the role principals using a snippet like this:
-
-{pygmentize:java}
-LoginContext ctx = new LoginContext("karaf", handler);
-ctx.login();
-authenticated = true;
-subject = ctx.getSubject();
-for (Principal p : subject.getPrincipals()) {
-   	if (p.getName().startsWith("ROLE_")) {
-   	   	roles.add((p.getName().substring("ROLE_".length())));
-   	}
-}
-{pygmentize}
-
-+Grouped Roles+
-When the group role policy is used the login module provides all roles as members of a group with a configurable name _(property role.discriminator)_. Example:
-
-{pygmentize:xml}
-<jaas:config name="karaf">
-    <jaas:module className="org.apache.karaf.jaas.modules.properties.PropertiesLoginModule" 
-                 flags="required">
-        users = $[karaf.base]/etc/users.properties
-        role.policy = group
-        role.discriminator = ROLES
-    </jaas:module>
-</jaas:config>
-{pygmentize}
-
-{pygmentize:java}
-LoginContext ctx = new LoginContext("karaf", handler);
-ctx.login();
-authenticated = true;
-subject = ctx.getSubject();
-for (Principal p : subject.getPrincipals()) {
-    if ((p instanceof Group) && ("ROLES".equalsIgnoreCase(p.getName()))) {
-        Group g = (Group) p;
-        Enumeration<? extends Principal> members = g.members();
-        while (members.hasMoreElements()) {
-            Principal member = members.nextElement();
-            roles.add(member.getName());
-        }
-    }
-}
-{pygmentize}
-
-h2. Default role policies
-
-The previous section describes how to leverage role policies. However, Karaf provides a default role policy, based on the following class names:
-
-* org.apache.karaf.jaas.modules.UserPrincipal
-* org.apache.karaf.jaas.modules.RolePrincipal
-* org.apache.karaf.jaas.modules.GroupPrincipal
-
-It allows you to directly handling the role class:
-
-{pygmentize:java}
-String rolePrincipalClass = "org.apache.karaf.jaas.modules.RolePrincipal";
-
-for (Principal p : subject.getPrincipals()) {
-	if (p.getClass().getName().equals(rolePrincipalClass)) {
-		roles.add(p.getName());
-	}
-}
-{pygmentize}
diff --git a/karaf-2.3.x/manual/src/main/webapp/developers-guide/shell-syntax.conf b/karaf-2.3.x/manual/src/main/webapp/developers-guide/shell-syntax.conf
deleted file mode 100644
index 3b74180..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/developers-guide/shell-syntax.conf
+++ /dev/null
@@ -1,92 +0,0 @@
-h1. Shell syntax
-
-h2. Easy to use interactively - no unnecessary syntax
-
-{code}
-// simple command
-karaf@root> echo hello world
-hello world
-
-// session variables
-karaf@root> msg = "hello world"
-hello world
-karaf@root> echo $msg
-hello world
-
-// execution quotes () - similar to bash backquotes
-karaf@root> (bundle 1) location
-mvn:org.ops4j.pax.url/pax-url-mvn/1.1.3
-{code}
-
-h2. List, maps, pipes and closures
-
-{code}
-// lists - []
-karaf@root> list = [1 2 a b]
-1
-2
-a
-b
-
-karaf@root> map = [Jan=1 Feb=2 Mar=3]
-Jan                 1
-Feb                 2
-Mar                 3
-
-// pipes
-karaf@root> bundles | grep felix
-000000 ACT org.apache.felix.framework-3.0.2
-000005 ACT org.apache.felix.configadmin-1.2.4
-000006 ACT org.apache.felix.fileinstall-3.0.2
-
-// closures - {}
-karaf@root> echo2 = { echo xxx $args yyy }
-org.apache.felix.gogo.runtime.shell.Closure@2ffb36c2
-karaf@root> echo2 hello world
-xxx hello world yyy
-{code}
-
-h2. Leverages existing Java capabilities, via reflection
-
-{code}
-// exception handling - console shows summary, but full context available
-karaf@root> start xxx
-Error executing command osgi:start: unable to convert argument ids with value '[xxx]' to type java.util.List<java.lang.Long>
-karaf@root> $karaf.lastException printStackTrace
-org.apache.felix.gogo.commands.CommandException: Unable to convert argument ids with value '[xxx]' to type java.util.List<java.lang.Long>
-	at org.apache.felix.gogo.commands.basic.DefaultActionPreparator.prepare(DefaultActionPreparator.java:347)
-	at org.apache.felix.gogo.commands.basic.AbstractCommand.execute(AbstractCommand.java:34)
-	at org.apache.felix.gogo.runtime.shell.CommandProxy.execute(CommandProxy.java:50)
-	at org.apache.felix.gogo.runtime.shell.Closure.execute(Closure.java:229)
-	at org.apache.felix.gogo.runtime.shell.Closure.executeStatement(Closure.java:162)
-	at org.apache.felix.gogo.runtime.shell.Pipe.run(Pipe.java:101)
-	at org.apache.felix.gogo.runtime.shell.Closure.execute(Closure.java:79)
-	at org.apache.felix.gogo.runtime.shell.CommandSessionImpl.execute(CommandSessionImpl.java:71)
-	at org.apache.karaf.shell.console.jline.Console.run(Console.java:169)
-	at java.lang.Thread.run(Thread.java:637)
-Caused by: java.lang.Exception: Unable to convert from [xxx] to java.util.List<java.lang.Long>(error converting collection entry)
-	at org.apache.aries.blueprint.container.AggregateConverter.convertToCollection(AggregateConverter.java:318)
-	at org.apache.aries.blueprint.container.AggregateConverter.convert(AggregateConverter.java:159)
-	at org.apache.karaf.shell.console.commands.BlueprintCommand$BlueprintActionPreparator.convert(BlueprintCommand.java:73)
-	at org.apache.felix.gogo.commands.basic.DefaultActionPreparator.prepare(DefaultActionPreparator.java:344)
-	... 9 more
-Caused by: java.lang.NumberFormatException: For input string: "xxx"
-	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
-	at java.lang.Long.parseLong(Long.java:410)
-	at java.lang.Long.valueOf(Long.java:525)
-	at org.apache.aries.blueprint.container.AggregateConverter.convertFromString(AggregateConverter.java:261)
-	at org.apache.aries.blueprint.container.AggregateConverter.convert(AggregateConverter.java:151)
-	at org.apache.aries.blueprint.container.AggregateConverter.convertToCollection(AggregateConverter.java:316)
-	... 12 more
-
-// add all public methods on java.lang.System as commands:
-karaf@root> addcommand system (loadClass java.lang.System)
-karaf@root> system:getproperty karaf.name
-root
-
-// create new objects
-karaf@root> map = (new java.util.HashMap)
-karaf@root> $map put 0 0
-karaf@root> $map
-0                   0
-{code}
diff --git a/karaf-2.3.x/manual/src/main/webapp/developers-guide/writing-tests.conf b/karaf-2.3.x/manual/src/main/webapp/developers-guide/writing-tests.conf
deleted file mode 100644
index c125188..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/developers-guide/writing-tests.conf
+++ /dev/null
@@ -1,327 +0,0 @@
-h1. Writing integration tests
-
-We recommend using [PAX Exam|http://team.ops4j.org/wiki/display/paxexam/Pax+Exam] to write integration tests when developing applications using Karaf.
-
-Starting with Karaf 2.3.0 and 3.0 we've also included a component briding between Karaf and Pax Exam making it easier to write integration tests for Karaf or Karaf based Distributions such as [Servicemix|http://servicemix.apache.org] or [Geronimo|http://geronimo.apache.org].
-
-h2. Introduction
-
-To make use of this new framework simply add the following dependencies into your integration tests pom.xml:
-
-{pygmentize:xml}
-<!-- Karaf Test Framework Version -->
-<dependency>
-  <groupId>org.apache.karaf.tooling.exam</groupId>
-  <artifactId>org.apache.karaf.tooling.exam.container</artifactId>
-  <version>${project.version}</version>
-  <scope>test</scope>
-</dependency>
-<!-- Pax Exam version you would like to use. At least 2.2.x is required. -->
-<dependency>
-  <groupId>org.ops4j.pax.exam</groupId>
-  <artifactId>pax-exam-junit4</artifactId>
-  <version>${pax.exam.version}</version>
-  <scope>test</scope>
-</dependency>
-{pygmentize}
-
-As a next step you need to reference the distribution you want to run your tests on. For example, if you want to run your tests on Karaf the following section would be required in the integration tests pom.xml:
-
-{pygmentize:xml}
-<dependency>
-  <groupId>org.apache.karaf</groupId>
-  <artifactId>apache-karaf</artifactId>
-  <version>${project.version}</version>
-  <type>zip</type>
-  <scope>test</scope>
-</dependency>
-{pygmentize}
-
-If you want to make use of Exams "versionAsInProject" feature you also need to add the following section:
-
-{pygmentize:xml}
-<build>
-  <plugins>
-    <plugin>
-      <groupId>org.apache.servicemix.tooling</groupId>
-      <artifactId>depends-maven-plugin</artifactId>
-      <version>${plugin.depends.version}</version>
-      <executions>
-        <execution>
-          <id>generate-depends-file</id>
-          <goals>
-            <goal>generate-depends-file</goal>
-          </goals>
-        </execution>
-      </executions>
-    </plugin>
-  </plugins>
-</build>
-{pygmentize}
-
-With this done we can start writing our first test case:
-
-{pygmentize:java}
-import static junit.framework.Assert.assertTrue;
-import static org.apache.karaf.tooling.exam.options.KarafDistributionOption.karafDistributionConfiguration;
-import static org.ops4j.pax.exam.CoreOptions.maven;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.Option;
-import org.ops4j.pax.exam.junit.Configuration;
-import org.ops4j.pax.exam.junit.ExamReactorStrategy;
-import org.ops4j.pax.exam.junit.JUnit4TestRunner;
-import org.ops4j.pax.exam.spi.reactors.AllConfinedStagedReactorFactory;
-
-@RunWith(JUnit4TestRunner.class)
-@ExamReactorStrategy(AllConfinedStagedReactorFactory.class)
-public class VersionAsInProjectKarafTest {
-
-    @Configuration
-    public Option[] config() {
-        return new Option[]{ karafDistributionConfiguration().frameworkUrl(
-            maven().groupId("org.apache.karaf").artifactId("apache-karaf").type("zip").versionAsInProject())
-            .karafVersion("2.2.4").name("Apache Karaf")};
-    }
-
-    @Test
-    public void test() throws Exception {
-        assertTrue(true);
-    }
-}
-{pygmentize}
-
-h2. Commands
-
-Basically the Pax Exam - Karaf bridge introduced with 3.0 should support all commands you know from Pax Exam 2.x. In addition we've added various additional commands to make your life easier. Those commands are listed and explained in this sub section.
-
-As a small remark: All of the Options explained here are also accessible via the static methods in the KarafDistributionOption class in the options package automatically on your classpath when you reference the container package.
-
-h3. KarafDistributionConfigurationOption
-
-The framework itself is non of the typical runtimes you define normally in PAXEXAM. Instead you define a packed distribution as zip or tar.gz. Those distributions have to follow the Karaf packaging style. Therefore instead of Karaf you can also enter Servicemix or Geronimo.
-
-{pygmentize:java}
-new KarafDistributionConfigurationOption(
-  "mvn:org.apache.karaf/apache-karaf/2.2.4/zip", // artifact to unpack and use
-  "karaf", // name; display only
-  "2.2.4") // the karaf version; this one is relevant since the startup script differs between versions
-{pygmentize}
-
-or for Servicemix e.g.
-
-{pygmentize:java}
-new KarafDistributionConfigurationOption(
-  "mvn:org.apache.servicemix/apache-servicemix/4.4.0/zip", // artifact to unpack and use
-  "servicemix", // name; display only
-  "2.2.4") // the karaf version; this one is relevant since the startup script differs between versions
-{pygmentize}
-
-As an alternative you can also use the maven url resolvers. Please keep in mind that this only works starting with karaf-3.0.0 since there will be problems with the pax-url version. In addition, if you want to make use of the versionAsInProject part you also need to define the following maven-plugin in the pom file of your integration tests:
-
-{pygmentize:xml}
-...
-<dependency>
-  <groupId>org.apache.karaf</groupId>
-  <artifactId>apache-karaf</artifactId>
-  <type>zip</type>
-  <classifier>bin</classifier>
-  <scope>test</scope>
-</dependency>
-...
-<plugin>
-  <groupId>org.apache.servicemix.tooling</groupId>
-  <artifactId>depends-maven-plugin</artifactId>
-  <executions>
-    <execution>
-      <id>generate-depends-file</id>
-      <goals>
-        <goal>generate-depends-file</goal>
-      </goals>
-    </execution>
-  </executions>
-</plugin>
-{pygmentize}
-
-{pygmentize:java}
-@Configuration
-    public Option[] config() {
-        return new Option[]{ karafDistributionConfiguration().frameworkUrl(
-            maven().groupId("org.apache.karaf").artifactId("apache-karaf").type("zip")
-                .classifier("bin").versionAsInProject()) };
-    }
-{pygmentize}
-
-In addition to the framework specification options this option also includes various additional configuration options. Those options are used to configure the internal properties of the runtime environment.
-
-h4. Unpack Directory
-Paxexam-Karaf Testframework extracts the distribution you specify by default into the paxexam config directory. If you would like to unpack them into your target directory simply extend the KarafDistributionConfigurationOption with the unpackDirectoryFile like shown in the next example:
-
-{pygmentize:java}
-@Configuration
-public Option[] config() {
-    return new Option[]{ karafDistributionConfiguration("mvn:org.apache.karaf/apache-karaf/${project.version}/zip")
-        .unpackDirectory(new File("target/paxexam/unpack/")) };
-}
-{pygmentize}
-
-h4. Use Deploy Folder
-
-Karaf distributions come by default with a deploy folder where you can simply drop artifacts to be deployed. In some distributions this folder might have been removed. To still be able to deploy your additional artifacts using default Pax Exam ProvisionOptions you can configure PaxExam Karaf to use a features.xml (which is directly added to your etc/org.apache.karaf.features.cfg) for those deploys. To use it instead of the deploy folder simply do the following:
-
-{pygmentize:java}
-@Configuration
-public Option[] config() {
-    return new Option[]{ karafDistributionConfiguration("mvn:org.apache.karaf/apache-karaf/${project.version}/zip")
-        .useDeployFolder(false)) };
-}
-{pygmentize}
-
-h3. KarafDistributionKitConfigurationOption
-
-The KarafDistributionKitConfigurationOption is almost equal to all variations of the KarafDistributionConfigurationOption with the exception that it requires to have set a platform and optionally the executable and the files which should be made executable additionally. By default it is bin/karaf for nix platforms and bin\karaf.bat for windows platforms. The executable option comes in handy if you like to e.g. embed an own java runtime. You should add a windows AND a linux Kit definition. The framework automatically takes the correct one then. The following shows a simple example for karaf:
-
-{pygmentize:java}
-@Configuration
-public Option[] config() {
-    return new Option[]{
-        new KarafDistributionKitConfigurationOption("mvn:org.apache.karaf/apache-karaf/${project.version}/zip",
-            Platform.WINDOWS).executable("bin\\karaf.bat").filesToMakeExecutable("bin\\admin.bat"),
-        new KarafDistributionKitConfigurationOption("mvn:org.apache.karaf/apache-karaf/${project.version}/tar.gz", "karaf",
-            Platform.NIX).executable("bin/karaf").filesToMakeExecutable("bin/admin") };
-}
-{pygmentize}
-
-h3. KarafDistributionConfigurationFilePutOption
-
-The option replaces or adds an option to one of Karaf's configuration files:
-
-{pygmentize:java}
-new KarafDistributionConfigurationFilePutOption(
-  "etc/config.properties", // config file to modify based on karaf.base
-  "karaf.framework", // key to add or change
-  "equinox") // value to add or change
-{pygmentize}
-
-This option could also be used in "batch-mode" via a property file. Therefore use the KarafDistributionOption#editConfigurationFilePut(final String configurationFilePath, File source, String... keysToUseFromSource) method. This option allows you to add all properties found in the file as KarafDistributionConfigurationFilePutOption. If you configure the "keysToUseFromSource" array only the keys specified there will be used. That way you can easily put an entire range of properties.
-
-h3. KarafDistributionConfigurationFileExtendOption
-
-This one does the same as the KarafDistributionConfigurationFilePutOption option with the one difference that it either adds or appends a specific property. This is especially useful if you do not want to store the entire configuration in the line in your code.
-
-This option could also be extended in "batch-mode" via a property file. Therefore use the KarafDistributionOption#editConfigurationFileExtend(final String configurationFilePath, File source, String... keysToUseFromSource) method. This option allows you to extend all properties found in the file as KarafDistributionConfigurationFileExtendOption. If you configure the "keysToUseFromSource" array only the keys specified there will be used. That way you can easily extend an entire range of properties.
-
-h3. KarafDistributionConfigurationFileReplacementOption
-
-The file replacement option allows you to simply replace a file in you Karaf distribution with a different file:
-
-{pygmentize:java}
-new KarafDistributionConfigurationFileReplacementOption("etc/tests.cfg", new File(
-    "src/test/resources/BaseKarafDefaultFrameworkDuplicatedPropertyEntryTestSecondKey"));
-{pygmentize}
-
-h3. ProvisionOption
-
-The new test container fully supports the provision option. Feel free to use any option provided here by paxexam itself (e.g. Maven resolver). All those artifacts are copied into the deploy folder of your Karaf distribution before it is started. Therefore they all will be available after startup.
-
-h3. KarafDistributionConfigurationConsoleOption
-
-The test container supports options to configure if the localConsole and/or the remote shell should be started. Possible options to do so are shown in the following two examples:
-
-{pygmentize:java}
-@Configuration
-public Option[] config() {
-    return new Option[]{ karafDistributionConfiguration("mvn:org.apache.karaf/apache-karaf/${project.version}/zip"), 
-        configureConsole().ignoreLocalConsole().startRemoteShell() };
-}
-{pygmentize}
-
-{pygmentize:java}
-@Configuration
-public Option[] config() {
-    return new Option[]{ karafDistributionConfiguration("mvn:org.apache.karaf/apache-karaf/${project.version}/zip"), 
-        configureConsole().startLocalConsole(), configureConsole().ignoreRemoteShell() };
-}
-{pygmentize}
-
-h3. VMOption
-
-The Karaf container passes the vmOptions now through to the Karaf environment. They are directly passed to the startup of the container. In addition the KarafDistributionOption helper has two methods (debugConfiguration() and debugConfiguration(String port, boolean hold)) to activate debugging quickly.
-
-h3. LogLevelOption
-
-The Paxexam-Karaf specific log-level option allows an easy way to set a specific log-level for the Karaf based distribution. For example simply add the following to your Option[] array to get TRACE logging:
-
-{pygmentize:java}
-import static org.openengsb.labs.paxexam.karaf.options.KarafDistributionOption.logLevel;
-...
-@Configuration
-public Option[] config() {
-    return new Option[]{ karafDistributionConfiguration("mvn:org.apache.karaf/apache-karaf/${project.version}/zip"), 
-        logLevel(LogLevel.TRACE) };
-}
-{pygmentize}
-
-h3. DoNotModifyLogOption
-
-The option to modify the logging behavior requires that the container automatically modifies the logging configuration file. If you would like to suppress this behavior simply set the doNotModifyLogConfiguration option as shown in the next example:
-
-{pygmentize:java}
-@Configuration
-public Option[] config() {
-    return new Option[]{ karafDistributionConfiguration("mvn:org.apache.karaf/apache-karaf/${project.version}/zip"), 
-        doNotModifyLogConfiguration() };
-}
-{pygmentize}
-
-h3. KeepRuntimeFolderOption
-
-Per default the test container removes all test runner folders. If you want to keep them for any reasons (e.g. check why a test fails) set the following option:
-
-{pygmentize:java}
-@Configuration
-public Option[] config() {
-    return new Option[]{ karafDistributionConfiguration("mvn:org.apache.karaf/apache-karaf/${project.version}/zip"), 
-        keepRuntimeFolder() };
-}
-{pygmentize}
-
-h3. FeaturesScannerProvisionOption
-
-The FeaturesScannerProvisionOption (e.g. CoreOption.scanFeature()) are directly supported by the Paxexam Karaf Testframework.
-
-h3. BootDelegationOption
-
-The BootDelegationOption as known from PaxExam is also supported added the boot delegation string directly into the correct property files.
-
-h3. SystemPackageOption
-
-The Standard Exam SystemPackageOption is implemented by adding those packages to "org.osgi.framework.system.packages.extra" of the config.properties file.
-
-h3. BootClasspathLibraryOption
-
-The BootClasspathLibraryOption is honored by copying the urls into the lib directory where they are automatically taken and worked on.
-
-h3. ExamBundlesStartLevel
-
-The ExamBundlesStartLevel can be used to configure the start lvl of the bundles provided by the test-frameworks features.xml. Simply use it as a new option like:
-
-{pygmentize:java}
-@Configuration
-public Option[] config() {
-    return new Option[]{ karafDistributionConfiguration("mvn:org.apache.karaf/apache-karaf/${project.version}/zip"),
-            useOwnExamBundlesStartLevel(4) };
-}
-{pygmentize}
-
-h2. Driver
-
-Drivers are the parts of the framework responsible for running the Karaf Based Distribution. By default the already in the overview explained KarafDistributionConfigurationOption uses a JavaRunner starting the distribution platform independent but not using the scripts in the distribution. If you like to test those scripts too an option is to to use the ScriptRunner via the KarafDistributionKitConfigurationOption instead.
-
-h3. JavaRunner
-
-The JavaRunner builds the entire command itself and executes Karaf in a new JVM. This behavior is more or less exactly what the default runner does. Simply use the KarafDistributionConfigurationOption as explained in the Commands section to use this.
-
-h3. ScriptRunner
-The script runner has the disadvantage over the java runner that it is also platform dependent. The advantage though is that you can also test your specific scripts. To use it follow the explanation of the KarafDistributionKitConfigurationOption in the Commands section.
diff --git a/karaf-2.3.x/manual/src/main/webapp/images/asf-logo.png b/karaf-2.3.x/manual/src/main/webapp/images/asf-logo.png
deleted file mode 100644
index d824fab..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/images/asf-logo.png
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/manual/src/main/webapp/images/bg.png b/karaf-2.3.x/manual/src/main/webapp/images/bg.png
deleted file mode 100644
index 878a84f..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/images/bg.png
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/manual/src/main/webapp/images/bg02-blue-left.png b/karaf-2.3.x/manual/src/main/webapp/images/bg02-blue-left.png
deleted file mode 100644
index 057efdf..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/images/bg02-blue-left.png
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/manual/src/main/webapp/images/bg02-blue-right.png b/karaf-2.3.x/manual/src/main/webapp/images/bg02-blue-right.png
deleted file mode 100644
index edf9a9d..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/images/bg02-blue-right.png
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/manual/src/main/webapp/images/bg02-white-left-nogr.png b/karaf-2.3.x/manual/src/main/webapp/images/bg02-white-left-nogr.png
deleted file mode 100644
index 1c5186c..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/images/bg02-white-left-nogr.png
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/manual/src/main/webapp/images/bg02-white-right-nogr.png b/karaf-2.3.x/manual/src/main/webapp/images/bg02-white-right-nogr.png
deleted file mode 100644
index 9734def..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/images/bg02-white-right-nogr.png
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/manual/src/main/webapp/images/big-bullet.png b/karaf-2.3.x/manual/src/main/webapp/images/big-bullet.png
deleted file mode 100644
index f036db5..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/images/big-bullet.png
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/manual/src/main/webapp/images/deployer.png b/karaf-2.3.x/manual/src/main/webapp/images/deployer.png
deleted file mode 100644
index 505eb3c..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/images/deployer.png
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/manual/src/main/webapp/images/jconsole_admin.jpg b/karaf-2.3.x/manual/src/main/webapp/images/jconsole_admin.jpg
deleted file mode 100644
index 93e8d0e..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/images/jconsole_admin.jpg
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/manual/src/main/webapp/images/jconsole_connect.jpg b/karaf-2.3.x/manual/src/main/webapp/images/jconsole_connect.jpg
deleted file mode 100644
index 6041ee1..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/images/jconsole_connect.jpg
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/manual/src/main/webapp/images/jconsole_features.jpg b/karaf-2.3.x/manual/src/main/webapp/images/jconsole_features.jpg
deleted file mode 100644
index 233e5fa..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/images/jconsole_features.jpg
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/manual/src/main/webapp/images/jconsole_memory.jpg b/karaf-2.3.x/manual/src/main/webapp/images/jconsole_memory.jpg
deleted file mode 100644
index c9fbb29..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/images/jconsole_memory.jpg
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/manual/src/main/webapp/images/jconsole_overview.jpg b/karaf-2.3.x/manual/src/main/webapp/images/jconsole_overview.jpg
deleted file mode 100644
index b41a72b..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/images/jconsole_overview.jpg
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/manual/src/main/webapp/images/jconsole_summary.jpg b/karaf-2.3.x/manual/src/main/webapp/images/jconsole_summary.jpg
deleted file mode 100644
index 7245d12..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/images/jconsole_summary.jpg
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/manual/src/main/webapp/images/jconsole_threads.jpg b/karaf-2.3.x/manual/src/main/webapp/images/jconsole_threads.jpg
deleted file mode 100644
index b4c0cb2..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/images/jconsole_threads.jpg
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/manual/src/main/webapp/images/karaf-logo.png b/karaf-2.3.x/manual/src/main/webapp/images/karaf-logo.png
deleted file mode 100644
index 066ab86..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/images/karaf-logo.png
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/manual/src/main/webapp/images/karaf.png b/karaf-2.3.x/manual/src/main/webapp/images/karaf.png
deleted file mode 100644
index f9fb4a4..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/images/karaf.png
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/manual/src/main/webapp/images/karaf2.png b/karaf-2.3.x/manual/src/main/webapp/images/karaf2.png
deleted file mode 100644
index f9fb4a4..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/images/karaf2.png
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/manual/src/main/webapp/images/left-box-bottom.png b/karaf-2.3.x/manual/src/main/webapp/images/left-box-bottom.png
deleted file mode 100644
index 0495248..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/images/left-box-bottom.png
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/manual/src/main/webapp/images/left-box-right.png b/karaf-2.3.x/manual/src/main/webapp/images/left-box-right.png
deleted file mode 100644
index 2698074..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/images/left-box-right.png
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/manual/src/main/webapp/images/left-box-top.png b/karaf-2.3.x/manual/src/main/webapp/images/left-box-top.png
deleted file mode 100644
index e1fc26e..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/images/left-box-top.png
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/manual/src/main/webapp/index.conf b/karaf-2.3.x/manual/src/main/webapp/index.conf
deleted file mode 100644
index 1575417..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/index.conf
+++ /dev/null
@@ -1,10 +0,0 @@
-h1. Apache Karaf
-
-This project contains documentation about Apache Karaf.
-
-* [Karaf Overview|overview]
-* [Quick Start|quick-start]
-* [Users Guide|users-guide/index]
-* [Developers Guide|developers-guide/index]
-* [Commands Reference|commands/commands]
-
diff --git a/karaf-2.3.x/manual/src/main/webapp/manual.conf b/karaf-2.3.x/manual/src/main/webapp/manual.conf
deleted file mode 100644
index b6c3050..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/manual.conf
+++ /dev/null
@@ -1,73 +0,0 @@
-{attributes:layout=/WEB-INF/scalate/layouts/print.ssp}
-
-{div:class=title}
-!/images/karaf-logos.png!
-\\
-\\
-\\
-\\
-Apache Karaf
-Users' Guide
-\\
-\\
-\\
-\\
-{div}
-
-{div:class=copyright-section}
-Copyright 2011 The Apache Software Foundation
-
-The PDF format of the Karaf Manual has been generated by Prince XML (http://www.princexml.com).
-{div}
-
-
-{div:class=toc-title}
-Table of contents
-{div}
-
-{toc:maxLevel=2}
-
-h1. Overview
-{include:overview.conf}
-
-h1. Quick Start
-{include:quick-start.conf}
-
-h1. Users Guide
-{include:users-guide/installation.conf}
-{include:users-guide/directory-structure.conf}
-{include:users-guide/start-stop.conf}
-{include:users-guide/wrapper.conf}
-{include:users-guide/using-console.conf}
-{include:users-guide/remote-console.conf}
-{include:users-guide/web-console.conf}
-{include:users-guide/child-instances.conf}
-{include:users-guide/security.conf}
-{include:users-guide/failover.conf}
-{include:users-guide/logging-system.conf}
-{include:users-guide/deployer.conf}
-{include:users-guide/provisioning.conf}
-{include:users-guide/provisioning-schema.conf}
-{include:users-guide/kar.conf}
-{include:users-guide/configuration.conf}
-{include:users-guide/http.conf}
-{include:users-guide/web-applications.conf}
-{include:users-guide/jre-tuning.conf}
-{include:users-guide/jmx.conf}
-
-h1. Developers Guide
-{include:developers-guide/archetypes.conf}
-{include:developers-guide/branding-console.conf}
-{include:developers-guide/extending-console.conf}
-{include:developers-guide/custom-distribution.conf}
-{include:developers-guide/security-framework.conf}
-{include:developers-guide/features-maven-plugin.conf}
-{include:developers-guide/features-maven-plugin-add.conf}
-{include:developers-guide/features-maven-plugin-generate.conf}
-{include:developers-guide/features-maven-plugin-validate.conf}
-{include:developers-guide/debugging.conf}
-{include:developers-guide/connect-console.conf}
-{include:developers-guide/writing-tests.conf}
-{include:developers-guide/creating-bundles.conf}
-{include:developers-guide/shell-syntax.conf}
-
diff --git a/karaf-2.3.x/manual/src/main/webapp/overview.conf b/karaf-2.3.x/manual/src/main/webapp/overview.conf
deleted file mode 100644
index 30c7ad3..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/overview.conf
+++ /dev/null
@@ -1,18 +0,0 @@
-h1. Karaf Overview
-
-Apache Karaf is a small OSGi based runtime which provides a lightweight container onto which various components and applications can be deployed.
-
-Here is a short list of features supported by the Karaf:
-
-* *Hot deployment*: Karaf supports hot deployment of OSGi bundles by monitoring jar files inside the {{deploy}} directory.  Each time a jar is copied in this folder, it will be installed inside the runtime.  You can then update or delete it and changes will be handled automatically.  In addition, Karaf also supports exploded bundles and custom deployers (Blueprint and Spring ones are included by default).
-* *Dynamic configuration*: Services are usually configured through the ConfigurationAdmin OSGi service.  Such configuration can be defined in Karaf using property files inside the {{etc}} directory.  These configurations are monitored and changes on the properties files will be propagated to the services.
-* *Logging System*: using a centralized logging back end supported by Log4J, Karaf supports a number of different APIs (JDK 1.4, JCL, SLF4J, Avalon, Tomcat, OSGi)
-* *Provisioning*: Provisioning of libraries or applications can be done through a number of different ways, by which they will be downloaded locally, installed and started.
-* *Native OS integration*: Karaf can be integrated into your own Operating System as a service so that the lifecycle will be bound to your Operating System.
-* *Extensible Shell console*: Karaf features a nice text console where you can manage the services, install new applications or libraries and manage their state.  This shell is easily extensible by deploying new commands dynamically along with new features or applications.
-* *Remote access*: use any SSH client to connect to Karaf and issue commands in the console
-* *Security framework* based on JAAS
-* *Managing instances*: Karaf provides simple commands for managing multiple instances. You can easily create, delete, start and stop instances of Karaf through the console.
-* Supports the latest OSGi 4.2 containers: Apache Felix Framework 3.0 and Eclipse Equinox 3.6
-
-!/images/karaf.png!
diff --git a/karaf-2.3.x/manual/src/main/webapp/quick-start.conf b/karaf-2.3.x/manual/src/main/webapp/quick-start.conf
deleted file mode 100644
index c45f773..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/quick-start.conf
+++ /dev/null
@@ -1,169 +0,0 @@
-
-
-h1. 1. Quick Start
-
-If you are in a hurry to have Apache Karaf up and running right away, this section will provide you with some basic steps for downloading, building (when needed) and running the server in no time. This is clearly not a complete guide so you may want to check other sections of this guide for further information.
-
-All you need is 5 to 10 minutes and to follow these basic steps.
-* Background
-* Getting the software
-* Start the server
-* Deploy a sample application
-
-h2. Background
-
-Apache Karaf is a small and lightweight OSGi based runtime.  This provides a small lightweight container onto which various bundles can be deployed.
-
-Apache Karaf started life as the [Apache ServiceMix|http://servicemix.apache.org] kernel and then moved as a [Apache Felix|http://felix.apache.org] subproject before becoming a top level project.
-
-h2. Getting the software
-
-At this time you have one option to get the software. The fastest and easiest way is to get the binary directly from the Apache site. Since this article is intended to help you to have Apache Karaf up and running in the fastest way only the binary download will be covered at this time.
-
-h3. Prerequisites
-
-Although this installation path is the fastest one, you will still need to install some software before installing Karaf.
-
-Karaf requires a Java SE 5 environment to run. Refer to [http://www.oracle.com/technetwork/java/javase/] for details on how to download and install Java SE 1.5 or greater.
-
-h3. Download binaries
-
-You will need to select the appropriate installation image for the platform you're using to run Karaf. Open a Web browser and access the following URL, there you will find the available packages for download (binaries and source code).
-
-[http://karaf.apache.org/index/community/download.html]
-
-Select the file compression format compatible with your system (zip for windows, tar.gz for unixes) by clicking directly on the link, download it and expand the binary to your hard drive in a new directory; for example in z:\karaf - from now on this directory will be referenced as <KARAF_HOME>. Please remember the restrictions concerning illegal characters in Java paths, e.g. \!, % etc.
-
-The installation of Karaf is as simple as uncompressing the .zip or .tar.gz files. The next step is to start the server.
-
-
-h2. Start the server
-
-With Karaf already installed, open a command line console and change directory to <KARAF_HOME>. To start the server, run the following command in Windows:
-{code}
-bin\karaf.bat
-{code}
-respectively on Unix:
-{code}
-bin/karaf
-{code}
-You should see the following information on the command line console:
-{include:Karaf welcome screen}
-You can now run your first command.  Simply type the {{<tab>}} key in the console.
-{code:borderStyle=solid}
-karaf@root> 
-
-admin:change-port         admin:connect             admin:create              admin:destroy
-admin:list                admin:start               admin:stop                config:cancel
-config:edit               config:list               config:propappend         config:propdel
-config:proplist           config:propset            config:update             dev:dynamic-import
-dev:framework             dev:print-stack-traces    dev:show-tree             features:addUrl
-features:info             features:install          features:list             features:listUrl
-features:refreshUrl       features:removeUrl        features:uninstall        log:display
-log:display-exception     log:get                   log:set                   osgi:bundle-level
-osgi:headers              osgi:install              osgi:list                 osgi:ls
-osgi:refresh              osgi:resolve              osgi:restart              osgi:shutdown
-osgi:start                osgi:start-level          osgi:stop                 osgi:uninstall
-osgi:update               packages:exports          packages:imports          shell:cat
-shell:clear               shell:each                shell:echo                shell:exec
-shell:grep                shell:history             shell:if                  shell:info
-shell:java                shell:logout              shell:new                 shell:printf
-shell:sleep               shell:sort                shell:tac                 ssh:ssh
-ssh:sshd                  cat                       clear                     each
-echo                      exec                      grep                      history
-if                        info                      java                      logout
-new                       printf                    sleep                     sort
-tac                       bundle-level              headers                   install
-list                      ls                        refresh                   resolve
-restart                   shutdown                  start                     start-level
-stop                      uninstall                 update
-karaf@root> 
-{code}
-
-You can then grab more specific help for a given command using the {{--help}} option for this command:
-
-{code:borderStyle=solid}
-karaf@root> admin:create --help
-DESCRIPTION
-	admin:create
-
-	Create a new instance.
-
-SYNTAX
-	admin:create [options] name
-
-ARGUMENTS
-        name
-                The name of the new container instance
-
-OPTIONS
-        --help
-                Display this help message
-        -f, --feature
-                Initial features. This option can be specified multiple times to enable multiple initial 
-                features
-        -p, --port
-                Port number for remote shell connection
-        -l, --location
-                Location of the new container instance in the file system
-        -furl, --featureURL
-                Additional feature descriptor URLs. This option can be specified multiple times to add 
-                multiple URLs
-
-karaf@root> 
-{code}
-
-Note that the console supports tab completion, so you just need to enter {{ad <tab> cr <tab>}} instead of {{admin:create}}.
-
-h2. Deploy a sample application
-
-While you will learn in the Karaf user's guide how to fully use and leverage Apache Karaf, let's install a sample [Apache Camel|http://camel.apache.org] application for now:
-
-In the console, run the following commands:
-{code}
-features:addurl mvn:org.apache.camel/camel-example-osgi/2.10.0/xml/features
-features:install camel-example-osgi
-{code}
-
-The example installed is using Camel to start a timer every 2 seconds and output a message on the console.
-The previous commands download the Camel features descriptor and install the example feature.
-{code}
->>>> SpringDSL set body:  Fri Jan 07 11:59:51 CET 2011
->>>> SpringDSL set body:  Fri Jan 07 11:59:53 CET 2011
->>>> SpringDSL set body:  Fri Jan 07 11:59:55 CET 2011
-
-{code}
-
-h3. Stopping and uninstalling the sample application
-
-To stop this demo, run the following command:
-{code}
-features:uninstall camel-example-osgi
-{code}
-
-h3. Common Problems
-
-# Launching Karaf can result in a deadlock in Felix during module dependency resolution.
-This is often a result of sending a SIGINT (control-C) to the process when it will not cleanly exit.
-This can corrupt the caches and cause startup problems in the very next launch. It is fixed by emptying the component cache:
-{code}
-rm -rf data/cache/*
-{code}
-
-h2. Stopping Karaf
-
-To stop Karaf from the console, enter {{^D}} in the console:
-{code}
-^D
-{code}
-Alternatively, you can also run the following command:
-{code}
-system:shutdown
-{code}
-
-h2. Summary
-
-This document showed how simple it is to have Apache Karaf up and running. The overall time for getting the server running should be less than five
-minutes if you have the prerequisite (Java 1.5) already installed. Additionally, this article also showed you how to deploy and test a simple
-Apache Camel application.
-
diff --git a/karaf-2.3.x/manual/src/main/webapp/users-guide/child-instances.conf b/karaf-2.3.x/manual/src/main/webapp/users-guide/child-instances.conf
deleted file mode 100644
index f59d527..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/users-guide/child-instances.conf
+++ /dev/null
@@ -1,130 +0,0 @@
-h1. Managing child instances
-
-A child instance of Karaf is a copy that you can launch separately and deploy applications into.  An instance does not contain the full copy of Karaf, but only a copy of the configuration files and data folder which contains all the runtime information, logs and temporary files.
-
-h2. Using the admin console commands
-
-The *admin* console commands allow you to create and manage instances of Karaf on the same machine.  Each new runtime is a child instance of the runtime that created it.  You can easily manage the children using names instead of network addresses.   For details on the *admin* commands, see the [{{admin}}|/commands/admin] commands.
- 
-h2. Creating child instances
-
-You create a new runtime instance by typing [{{admin:create}}|/commands/admin-create] in the Karaf console.
-
-As shown in the following example, {{admin:create}} causes the runtime to create a new runtime installation in the active runtime's {{instances/name}} directory.  The new instance is a new Karaf instance and is assigned an SSH port number based on an incremental count starting at 8101 and a RMI registry port number based on an incremental count starting at 1099/44444.
-
-{code}
-karaf@root> admin:create alpha 
-Creating new instance on SSH port 8102 and RMI ports 1100/44445 at: /x3/karaf/test/apache-karaf-2.2.4/instances/alpha
-Creating dir:  /x3/karaf/test/apache-karaf-2.2.4/instances/alpha/bin
-Creating dir:  /x3/karaf/test/apache-karaf-2.2.4/instances/alpha/etc
-Creating dir:  /x3/karaf/test/apache-karaf-2.2.4/instances/alpha/system
-Creating dir:  /x3/karaf/test/apache-karaf-2.2.4/instances/alpha/deploy
-Creating dir:  /x3/karaf/test/apache-karaf-2.2.4/instances/alpha/data
-Creating file: /x3/karaf/test/apache-karaf-2.2.4/instances/alpha/etc/config.properties
-Creating file: /x3/karaf/test/apache-karaf-2.2.4/instances/alpha/etc/jre.properties
-Creating file: /x3/karaf/test/apache-karaf-2.2.4/instances/alpha/etc/custom.properties
-Creating file: /x3/karaf/test/apache-karaf-2.2.4/instances/alpha/etc/java.util.logging.properties
-Creating file: /x3/karaf/test/apache-karaf-2.2.4/instances/alpha/etc/org.apache.felix.fileinstall-deploy.cfg
-Creating file: /x3/karaf/test/apache-karaf-2.2.4/instances/alpha/etc/org.apache.karaf.log.cfg
-Creating file: /x3/karaf/test/apache-karaf-2.2.4/instances/alpha/etc/org.apache.karaf.features.cfg
-Creating file: /x3/karaf/test/apache-karaf-2.2.4/instances/alpha/etc/org.ops4j.pax.logging.cfg
-Creating file: /x3/karaf/test/apache-karaf-2.2.4/instances/alpha/etc/org.ops4j.pax.url.mvn.cfg
-Creating file: /x3/karaf/test/apache-karaf-2.2.4/instances/alpha/etc/startup.properties
-Creating file: /x3/karaf/test/apache-karaf-2.2.4/instances/alpha/etc/users.properties
-Creating file: /x3/karaf/test/apache-karaf-2.2.4/instances/alpha/etc/system.properties
-Creating file: /x3/karaf/test/apache-karaf-2.2.4/instances/alpha/etc/org.apache.karaf.shell.cfg
-Creating file: /x3/karaf/test/apache-karaf-2.2.4/instances/alpha/etc/org.apache.karaf.management.cfg
-Creating file: /x3/karaf/test/apache-karaf-2.2.4/instances/alpha/bin/karaf
-Creating file: /x3/karaf/test/apache-karaf-2.2.4/instances/alpha/bin/start
-Creating file: /x3/karaf/test/apache-karaf-2.2.4/instances/alpha/bin/stop
-karaf@root>
-{code}
-
-h2. Changing a child's ports
-
-You can change the SSH port number assigned to a child instance using the [{{admin:change-ssh-port}}|/commands/admin-change-port] command.  The syntax for the command is:
-{code}
-admin:change-ssh-port instance port
-{code}
-Note that the child instance has to be stopped in order to run this command.
-
-In the same way, you can change the RMI registry port number assigned to a child instance using the [{{admin:change-rmi-registry-port}}|/commands/admin-change-rmi-registry-port] command. The syntax for the command is:
-{code}
-admin:change-rmi-registry-port instance port
-{code}
-Note that the child instance has to be stopped in order to run this command.
-
-h2. Starting child instances
-
-New instances are created in a stopped state.  To start a child instance and make it ready to host applications, use the [{{admin:start}}|/commands/admin-start] command.  This command takes a single argument {{[instance-name]}} that identifies the child you want started.
-
-h2. Listing all container instances
-
-To see a list of all Karaf instances running under a particular installation, use the [{{admin:list}}|/commands/admin-list] command.
-
-{code}
-karaf@root>admin:list
-  SSH Port   RMI Port   State       Pid  Name
-[    8107] [      1106] [Started ] [10628] harry
-[    8101] [      1099] [Started ] [20076] root
-[    8106] [      1105] [Stopped ] [15924] dick
-[    8105] [      1104] [Started ] [18224] tom
-karaf@root>
-{code}
-
-h2. Connecting to a child instance
-
-You can connect to a started child instance's remote console using the [{{admin:connect}}|/commands/admin-connect] command which takes three arguments:
-
-{code}
-admin:connect [-u username] instance [command]
-{code}
-
-NB: the password will be prompted.
-
-NB: you can directly execute shell command on the target instance.
-
-Once you are connected to the child instance, the Karaf prompt changes to display the name of the current instance, as shown:
-
-{code}
-karaf@harry>
-{code}
-
-h2. Stopping a child instance
-
-To stop a child instance from within the instance itself, type {{osgi:shutdown}} or simply {{shutdown}}.
-
-To stop a child instance remotely, in other words, from a parent or sibling instance, use the [{{admin:stop}}|/commands/admin-stop]:
-{code}
-admin:stop instance
-{code}
-
-h2. Destroying a child instance
-
-You can permanently delete a stopped child instance using the [{{admin:destroy}}|/commands/admin-destroy] command:
-{code}
-admin:destroy instance
-{code}
-Note that only stopped instances can be destroyed.
-
-h2. Using the admin script
-
-You can also manage the local instances of Karaf.  The {{admin}} script in the {{bin}} directory provides the same commands as the {{admin}} console commands, apart from [{{admin:connect}}|/commands/admin-connect].
- 
-{code}
-bin/admin
-Available commands:
-  change-ssh-port - Changes the secure shell port of an existing container instance.
-  change-rmi-registry-port - Changes the RMI registry port (used by management layer) of an existing container instance.
-  create - Creates a new container instance.
-  destroy - Destroys an existing container instance.
-  list - List all existing container instances.
-  start - Starts an existing container instance.
-  stop - Stops an existing container instance.
-Type 'command --help' for more help on the specified command.
-{code}
-
-For example, to list all the instances of Karaf on the local machine, type:
-{code}
-bin/admin list
-{code}
diff --git a/karaf-2.3.x/manual/src/main/webapp/users-guide/configuration.conf b/karaf-2.3.x/manual/src/main/webapp/users-guide/configuration.conf
deleted file mode 100644
index 38ddf8c..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/users-guide/configuration.conf
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-h1. Configuration
-
-The files in the {{etc}} directory are used to set the startup configuration.  
-
-For dynamic configuration, Karaf provides a suite of command to administer the configuration service grouped under {{config}}. To learn about all currently supported configuration commands type:
-
-|| Command                                || Description   ||
-| [{{cancel}}|/commands/config-cancel]     | Change the changes to the configuration being edited. |
-| [{{edit}}|/commands/config-edit]         | Create or edit a configuration. |
-| [{{list}}|/commands/config-list]         | List existing configurations. |
-| [{{propdel}}|/commands/config-propdel]   | Delete a property from the edited configuration. |
-| [{{proplist}}|/commands/config-proplist] | List properties from the edited configuration. |
-| [{{propset}}|/commands/config-propset]   | Set a property on the edited configuration. |
-| [{{update}}|/commands/config-update]     | Save and propagate changes from the configuration being edited. |
-
-
-h2. Editing
-
-h3. Select Configuration To Edit
-
-For example to edit configuration {{foo.bar}}:
-
-{code}
-karaf@root> config:edit foo.bar
-{code}
-
-h3. Modify Properties
-
-Use:
- 
- * [{{config:proplist}}|/commands/config-proplist] to list existing properties
- * [{{config:propdel}}|/commands/config-propdel] to delete existing properties
- * [{{config:propset}}|/commands/config-propset] to set a new value for a property
-
-Any number of properties can be modified within a single editing session. 
-
-h3. Commit Or Rollback Changes
-
-Use
-
- * [{{config:update}}|/commands/config-update] to commit all changes made in the current session
- * [{{config:cancel}}|/commands/config-cancel] to roll back any changes made in the current session
-
-
diff --git a/karaf-2.3.x/manual/src/main/webapp/users-guide/deployer.conf b/karaf-2.3.x/manual/src/main/webapp/users-guide/deployer.conf
deleted file mode 100644
index ed33b17..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/users-guide/deployer.conf
+++ /dev/null
@@ -1,226 +0,0 @@
-
-
-h1. Deployer
-
-The following picture describes the architecture of the deployer.
-
-!/images/deployer.png!
-
-h2. Blueprint deployer
-
-Karaf includes a deployer that is able to deploy plain blueprint configuration files.
-The deployer will transform on the fly any spring configuration file dropped into the {{deploy}} folder into a valid OSGi bundle.
-
-The generated OSGi manifest will contain the following headers:
-
-{code}
-Manifest-Version: 2
-Bundle-SymbolicName: [name of the file]
-Bundle-Version: [version of the file]
-Import-Package: [required packages]
-DynamicImport-Package: *
-{code}
-
-The {{name}} and {{version}} of the file are extracted using a heuristic that will match common patterns.  For example {{my-config-1.0.1.xml}} will lead to {{name = my-config}} and {{version = 1.0.1}}.
-The default imported packages are extracted from the spring file definition and includes all classes referenced directly.
-
-If you need to customize the generated manifest, you can do so by including an xml element in your blueprint configuration:
-
-{code:lang=xml}
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-  <manifest xmlns="http://karaf.apache.org/xmlns/deployer/blueprint/v1.0.0">
-    Require-Bundle= my-bundle
-  </manifest>
-{code}
-
-h2. Spring deployer
-
-Similar to the blueprint deployer, you can deploy spring-dm configuration files.
-
-The generated OSGi manifest will contain the following headers:
-
-{code}
-Manifest-Version: 2
-Bundle-SymbolicName: [name of the file]
-Bundle-Version: [version of the file]
-Spring-Context: *;publish-context:=false;create-asynchronously:=true
-Import-Package: [required packages]
-DynamicImport-Package: *
-{code}
-
-If you need to customize the generated manifest, you can do so by including an xml element in your spring configuration:
-
-{code:lang=xml}
-<spring:beans ...>
-  <manifest xmlns="http://karaf.apache.org/xmlns/deployer/spring/v1.0.0">
-    Require-Bundle= my-bundle
-  </manifest>
-{code}
-
-h2. Features deployer
-
-To be able to hot deploy features from the deploy folder, you can just drop a feature descriptor on that folder.  A bundle will be created and its installation (automatic) will trigger the installation of all features contained in the descriptor.  Removing the file from the deploy folder will uninstall the features.
-If you want to install a single feature, you can do so by writing a feature descriptor like the following:
-
-{code:lang=xml}
-<features>
-  <repository>mvn:org.apache.servicemix.nmr/apache-servicemix-nmr/1.0.0/xml/features</repository>
-  <feature name="nmr-only">
-    <feature>nmr</feature>
-  </feature>
-</features>
-{code}
-
-For more informations about features, see the [provisioning section|provisioning].
-
-h2. War deployer
-
-To be able to hot deploy web application (war) from the deploy folder, you have to install the war feature:
-
-{code}
-karaf@root> features:install war
-{code}
-
-NB: you can use the -v or --verbose option to see exactly what is performed by the feature deployer.
-
-{code}
-karaf@root> features:install -v war
-Installing feature war 2.1.99-SNAPSHOT
-Installing feature http 2.1.99-SNAPSHOT
-Installing feature jetty 7.2.2.v20101205
-Installing bundle mvn:org.apache.geronimo.specs/geronimo-servlet_2.5_spec/1.1.2
-Found installed bundle: org.apache.servicemix.bundles.asm [9]
-Installing bundle mvn:org.eclipse.jetty/jetty-util/7.2.2.v20101205
-Installing bundle mvn:org.eclipse.jetty/jetty-io/7.2.2.v20101205
-Installing bundle mvn:org.eclipse.jetty/jetty-http/7.2.2.v20101205
-Installing bundle mvn:org.eclipse.jetty/jetty-continuation/7.2.2.v20101205
-Installing bundle mvn:org.eclipse.jetty/jetty-server/7.2.2.v20101205
-Installing bundle mvn:org.eclipse.jetty/jetty-security/7.2.2.v20101205
-Installing bundle mvn:org.eclipse.jetty/jetty-servlet/7.2.2.v20101205
-Installing bundle mvn:org.eclipse.jetty/jetty-xml/7.2.2.v20101205
-Checking configuration file mvn:org.apache.karaf/apache-karaf/2.1.99-SNAPSHOT/xml/jettyconfig
-Installing bundle mvn:org.ops4j.pax.web/pax-web-api/1.0.0
-Installing bundle mvn:org.ops4j.pax.web/pax-web-spi/1.0.0
-Installing bundle mvn:org.ops4j.pax.web/pax-web-runtime/1.0.0
-Installing bundle mvn:org.ops4j.pax.web/pax-web-jetty/1.0.0
-Installing bundle mvn:org.apache.karaf.shell/org.apache.karaf.shell.web/2.1.99-SNAPSHOT
-Installing bundle mvn:org.ops4j.pax.web/pax-web-jsp/1.0.0
-Installing bundle mvn:org.ops4j.pax.web/pax-web-extender-war/1.0.0
-Installing bundle mvn:org.ops4j.pax.web/pax-web-extender-whiteboard/1.0.0
-Installing bundle mvn:org.ops4j.pax.web/pax-web-deployer/1.0.0
-Installing bundle mvn:org.ops4j.pax.url/pax-url-war/1.2.5
-{code}
-
-As you can see, the war feature uses PAX Web as war deployer.
-
-You should now be able to see the PAX Web war deployer:
-
-{code}
-karaf@root> osgi:list |grep -i war
-[  57] [Active     ] [            ] [   60] OPS4J Pax Web - Extender - WAR (1.0.0)
-[  60] [Active     ] [            ] [   60] OPS4J Pax Url - war:, war-i: (1.2.5)
-{code}
-
-You can deploy a web application packaged in war or exploded in a directory.
-
-Your web application should at least contain a WEB-INF/web.xml file.
-
-h2. Wrap deployer
-
-The wrap deployer allows you to hot deploy non-OSGi jar files ("classical" jar files) from the deploy folder.
-
-It's a standard deployer (you don't need to install additional Karaf features):
-
-{code}
-karaf@root> la|grep -i wrap
-[   1] [Active     ] [            ] [    5] OPS4J Pax Url - wrap: (1.2.5)
-[  32] [Active     ] [Created     ] [   30] Apache Karaf :: Deployer :: Wrap Non OSGi Jar (2.1.99.SNAPSHOT)
-{code}
-
-Karaf wrap deployer looks for jar files in the deploy folder. The jar files is considered as non-OSGi if the MANIFEST
-doesn't contain the Bundle-SymbolicName and Bundle-Version attributes, or if there is no MANIFEST at all.
-
-The non-OSGi jar file is transformed into an OSGi bundle.
-
-The deployer tries to populate the Bundle-SymbolicName and Bundle-Version extracted from the jar file path.
-
-For example, if you simply copy commons-lang-2.3.jar (which is not an OSGi bundle) into the deploy folder, you
-will see:
-
-{code}
-karaf@root> la|grep -i commons-lang
-[  41] [Active     ] [            ] [   60] commons-lang (2.3)
-{code}
-
-If you take a look on the commons-lang headers, you can see that the bundle exports all packages with optional resolution
-and that Bundle-SymbolicName and Bundle-Version have been populated:
-
-{code}
-karaf@root> osgi:headers 41
-
-commons-lang (41)
------------------
-Specification-Title = Commons Lang
-Tool = Bnd-0.0.357
-Specification-Version = 2.3
-Specification-Vendor = Apache Software Foundation
-Implementation-Version = 2.3
-Generated-By-Ops4j-Pax-From = wrap:file:/home/onofreje/workspace/karaf/assembly/target/apache-karaf-2.99.99-SNAPSHOT/deploy/commons-lang-2.3.jar$Bundle-SymbolicName=commons-lang&Bundle-Version=2.3
-Implementation-Vendor-Id = org.apache
-Created-By = 1.6.0_21 (Sun Microsystems Inc.)
-Implementation-Title = Commons Lang
-Manifest-Version = 1.0
-Bnd-LastModified = 1297248243231
-X-Compile-Target-JDK = 1.1
-Originally-Created-By = 1.3.1_09-85 ("Apple Computer, Inc.")
-Ant-Version = Apache Ant 1.6.5
-Package = org.apache.commons.lang
-X-Compile-Source-JDK = 1.3
-Extension-Name = commons-lang
-Implementation-Vendor = Apache Software Foundation
-
-Bundle-Name = commons-lang
-Bundle-SymbolicName = commons-lang
-Bundle-Version = 2.3
-Bundle-ManifestVersion = 2
-
-Import-Package =
-        org.apache.commons.lang;resolution:=optional,
-        org.apache.commons.lang.builder;resolution:=optional,
-        org.apache.commons.lang.enum;resolution:=optional,
-        org.apache.commons.lang.enums;resolution:=optional,
-        org.apache.commons.lang.exception;resolution:=optional,
-        org.apache.commons.lang.math;resolution:=optional,
-        org.apache.commons.lang.mutable;resolution:=optional,
-        org.apache.commons.lang.text;resolution:=optional,
-        org.apache.commons.lang.time;resolution:=optional
-Export-Package =
-        org.apache.commons.lang;uses:="org.apache.commons.lang.builder,org.apache.commons.lang.math,org.apache.commons.lang.exception",
-        org.apache.commons.lang.builder;uses:="org.apache.commons.lang.math,org.apache.commons.lang",
-        org.apache.commons.lang.enum;uses:=org.apache.commons.lang,
-        org.apache.commons.lang.enums;uses:=org.apache.commons.lang,
-        org.apache.commons.lang.exception;uses:=org.apache.commons.lang,
-        org.apache.commons.lang.math;uses:=org.apache.commons.lang,
-        org.apache.commons.lang.mutable;uses:="org.apache.commons.lang,org.apache.commons.lang.math",
-        org.apache.commons.lang.text;uses:=org.apache.commons.lang,
-        org.apache.commons.lang.time;uses:=org.apache.commons.lang
-
-
-{code}
-
-
-You may set the manifest headers by specifying them as URL parameters, '$' is used separate the hierarch path and query parts of the URL, with standard URL syntax for query parameters of key=value pairs joined by '&'.
-
-On the command line you must use single quotes around the URL to prevent the shell from attempting variable expansion, and if present, you must escape exclamation marks with a backslash.
-
-{code}
-install -s 'wrap:mvn:jboss/jbossall-client/4.2.3.GA/$Bundle-SymbolicName=jbossall-client&Bundle-Version=4.2.3.GA&Export-Package=org.jboss.remoting;version="4.2.3.GA",\!*'
-{code}
-
-When defined in a features.xml file, it's necessary to escape any ampersands and quotes, or use a CDATA tag.
-
-{code:lang=xml}
-<bundle>wrap:mvn:jboss/jbossall-client/4.3.2.GA/$Bundle-SymbolicName=jbossall-client&amp;Bundle-Version=4.3.2.GA&amp;Export-Package=org.jboss.remoting;version=&quot;4.3.2.GA&quot;,!*</bundle>
-{code}
-
-
diff --git a/karaf-2.3.x/manual/src/main/webapp/users-guide/directory-structure.conf b/karaf-2.3.x/manual/src/main/webapp/users-guide/directory-structure.conf
deleted file mode 100644
index 3848832..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/users-guide/directory-structure.conf
+++ /dev/null
@@ -1,21 +0,0 @@
-h1. Directory structure
-
-The directory layout of a Karaf installation is as follows:
-* {{/bin}}: startup scripts
-* {{/etc}}: configuration files
-* {{/data}}: working directory 
-** {{/cache}}: OSGi framework bundle cache
-** {{/generated-bundles}}: temporary folder used by the deployer
-** {{/log}}: log files
-* {{/deploy}}: hot deploy directory
-* {{/instances}}: directory containing [child instances|child-instances]
-* {{/lib}}: contains the bootstrap libraries
-** {{/lib/ext}}: directory for JRE extensions
-** {{/lib/endorsed}}: directory for endorsed libraries
-* {{/system}}: OSGi bundles repository, laid out as a Maven 2 repository
-
-{tip}
-The {{data}} folder contains all the working and temporary files for Karaf.  If you want to restart from a clean state, you can wipe out this directory, which has the same effect as [using the clean option|start-stop#Starting Karaf from clean].
-{tip}
-
-	
diff --git a/karaf-2.3.x/manual/src/main/webapp/users-guide/failover.conf b/karaf-2.3.x/manual/src/main/webapp/users-guide/failover.conf
deleted file mode 100644
index aaa55de..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/users-guide/failover.conf
+++ /dev/null
@@ -1,160 +0,0 @@
-h1. Failover Deployments
-
-Karaf provides failover capability using either a simple lock file system or a JDBC locking mechanism. In both cases, a container-level lock system allows bundles to be preloaded into the slave Karaf instance in order to provide faster failover performance.
-
-h2. Simple lock file
-
-The simple lock file mechanism is intended for failover configurations where instances reside on the same host machine.
-
-To use this feature, edit the {{$KARAF_HOME/etc/system.properties}} file as follows on each system in the master/slave setup:
-
-{noformat}
-karaf.lock=true
-karaf.lock.class=org.apache.karaf.main.SimpleFileLock
-karaf.lock.dir=<PathToLockFileDirectory>
-karaf.lock.delay=10
-{noformat}
-
-*Note*: Ensure that the {{karaf.lock.dir}} property points to the same directory for both the master and slave instance, so that the slave can acquire the lock only when the master releases it.
-
-
-h2. JDBC locking
-
-The JDBC locking mechanism is intended for failover configurations where instances exist on separate machines. In this deployment, the master instance holds a lock on a Karaf locking table hosted on a database. If the master loses the lock, a waiting slave process gains access to the locking table and fully starts its container. 
-
-To use this feature, do the following on each system in the master/slave setup:
-
-* Update the classpath to include the JDBC driver
-* Update the {{$KARAF_HOME/bin/karaf}} script to have a unique JMX remote port set if instances reside on the same host
-* Update the {{$KARAF_HOME/etc/system.properties}} file as follows:
-
-{noformat}
-karaf.lock=true
-karaf.lock.class=org.apache.karaf.main.DefaultJDBCLock
-karaf.lock.level=50
-karaf.lock.delay=10
-karaf.lock.jdbc.url=jdbc:derby://dbserver:1527/sample
-karaf.lock.jdbc.driver=org.apache.derby.jdbc.ClientDriver
-karaf.lock.jdbc.user=user
-karaf.lock.jdbc.password=password
-karaf.lock.jdbc.table=KARAF_LOCK
-karaf.lock.jdbc.clustername=karaf
-karaf.lock.jdbc.timeout=30
-{noformat}
-
-*Note*:
-
-* This process will fail if a JDBC driver is not on the classpath.
-* The "sample" database referred to above will be created if it does not exist.
-* The first Karaf instance to acquire the locking table is the master instance.
-* If the connection to the database is lost, the master instance tries to gracefully shutdown, allowing a slave instance to become master when the database service is restored. The former master will require a manual restart.
-
-h3. JDBC locking on Oracle
-
-If you are using Oracle as your database for JDBC locking, the {{karaf.lock.class}} property in the {{$KARAF_HOME/etc/system.properties}} file must point to {{org.apache.karaf.main.OracleJDBCLock}}.
-
-Otherwise, configure the system.properties file as normal for your setup, for example:
-
-{noformat}
-karaf.lock=true
-karaf.lock.class=org.apache.karaf.main.OracleJDBCLock
-karaf.lock.jdbc.url=jdbc:oracle:thin:@hostname:1521:XE
-karaf.lock.jdbc.driver=oracle.jdbc.OracleDriver
-karaf.lock.jdbc.user=user
-karaf.lock.jdbc.password=password
-karaf.lock.jdbc.table=KARAF_LOCK
-karaf.lock.jdbc.clustername=karaf
-karaf.lock.jdbc.timeout=30
-{noformat}
-
-As with the default JDBC locking setup, the Oracle JDBC driver JAR file must be in your classpath. You can ensure this by copying the {{ojdbc14.jar}} into Karaf's {{lib}} folder before starting Karaf.
-
-*Note*: The {{karaf.lock.jdbc.url}} requires an active SID, which means you must manually create a database instance before using this particular lock.
-
-h3. Derby
-
-The same rules apply when using derby.  Make sure you have the driver jar file in the Karaf {{lib}} folder before starting Karaf.
-
-Then make you update the properties in {{$KARAF_HOME/etc/system.properties}} to look something like this example:
-
-{noformat}
-karaf.lock=true
-karaf.lock.class=org.apache.karaf.main.DerbyJDBCLock
-karaf.lock.jdbc.url=jdbc:derby://127.0.0.1:1527/dbname
-karaf.lock.jdbc.driver=org.apache.derby.jdbc.ClientDriver
-karaf.lock.jdbc.user=user
-karaf.lock.jdbc.password=password
-karaf.lock.jdbc.table=KARAF_LOCK
-karaf.lock.jdbc.clustername=karaf
-karaf.lock.jdbc.timeout=30
-{noformat}
-
-h3. MySQL
-
-Make sure you have the MySQL driver jar file in the Karaf {{lib}} folder before starting Karaf.
-
-*NOTE*: for 2.2.x, 2.3.x you need to rename the MySQL Driver jar to prefix with 'karaf-' in order for karaf to pick it up, otherwise you will see karaf just hang on startup and the log will show you that it could not find the driver.
-
-Then make you update the properties in {{$KARAF_HOME/etc/system.properties}} to look something like this example:
-
-{noformat}
-karaf.lock=true
-karaf.lock.class=org.apache.karaf.main.MySQLJDBCLock
-karaf.lock.jdbc.url=jdbc:mysql://127.0.0.1:3306/dbname
-karaf.lock.jdbc.driver=com.mysql.jdbc.Driver
-karaf.lock.jdbc.user=user
-karaf.lock.jdbc.password=password
-karaf.lock.jdbc.table=KARAF_LOCK
-karaf.lock.jdbc.clustername=karaf
-karaf.lock.jdbc.timeout=30
-{noformat}
-
-h3. PostgreSQL
-
-Make sure you have the PostgreSQL driver jar file in the Karaf {{lib}} folder before starting Karaf.
-
-*NOTE*: for 2.2.x, 2.3.x you need to rename the PostgreSQL Driver jar to prefix with 'karaf-' in order for karaf to pick it up, otherwise you will see karaf just hang on startup and the log will show you that it could not find the driver.
-
-Then make you update the properties in {{$KARAF_HOME/etc/system.properties}} to look something like this example:
-
-{noformat}
-karaf.lock=true
-karaf.lock.class=org.apache.karaf.main.PostgreSQLJDBCLock
-karaf.lock.jdbc.url=jdbc:postgresql://127.0.0.1:5432/dbname
-karaf.lock.jdbc.driver=org.postgresql.Driver
-karaf.lock.jdbc.user=user
-karaf.lock.jdbc.password=password
-karaf.lock.jdbc.table=KARAF_LOCK
-karaf.lock.jdbc.clustername=karaf
-karaf.lock.jdbc.timeout=0
-{noformat}
-
-{anchor:locklevel}
-
-h2. Container-level locking
-
-Container-level locking allows bundles to be preloaded into the slave kernel instance in order to provide faster failover performance. Container-level locking is supported in both the simple file and JDBC locking mechanisms.
-
-To implement container-level locking, add the following to the {{$KARAF_HOME/etc/system.properties}} file on each system in the master/slave setup:
-
-{noformat}
-karaf.lock=true
-karaf.lock.level=50
-karaf.lock.delay=10
-{noformat}
-
-The {{karaf.lock.level}} property tells the Karaf instance how far into the boot process to bring the OSGi container. All bundles with an ID equal or lower to this start level will be started in that Karaf instance.
-
-Bundle start levels are specified in {{$KARAF_HOME/etc/startup.properties}}, in the format {{jar.name=level}}. The core system bundles have levels below 50, where user bundles have levels greater than 50.
-
-|| Level || Behavior ||
-| 1 | A 'cold' standby instance. Core bundles are not loaded into container. Slaves will wait until lock acquired to start server. |
-| <50 | A 'hot' standby instance. Core bundles are loaded into the container. Slaves will wait until lock acquired to start user level bundles. The console will be accessible for each slave instance at this level. |
-| >50 | This setting is not recommended as user bundles will end up being started. |
-
-*Note*: When using a 'hot' spare on the same host you need to set the JMX remote port to a unique value to avoid bind conflicts. You can edit the Karaf start script to include the following:
-
-{noformat}
-DEFAULT_JAVA_OPTS="-server $DEFAULT_JAVA_OPTS -Dcom.sun.management.jmxremote.port=1100 -Dcom.sun.management.jmxremote.authenticate=false"
-{noformat}
-
diff --git a/karaf-2.3.x/manual/src/main/webapp/users-guide/http.conf b/karaf-2.3.x/manual/src/main/webapp/users-guide/http.conf
deleted file mode 100644
index 750de9c..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/users-guide/http.conf
+++ /dev/null
@@ -1,55 +0,0 @@
-h1. Pax Web (OSGi HttpService)
-
-The Karaf http feature enables the Pax Web implementation of the OSGi HTTP service.
-
-h2. Installing the HTTP feature
-
-{code}
-root@karaf> features:install http
-{code}
-
-Create a file {{etc/org.ops4j.pax.web.cfg}} with the following content:
-
-{code}
-org.osgi.service.http.port=8080
-{code}
-
-This tells Pax Web to listen to the port 8080. As soon as the http feature is installed and the config
-file is present, the following URL will be reachable:
-
-{code}
-http://localhost:8080/
-{code}
-
-h2. Registering a servlet with the HttpService manually
-
-See [Apache Felix HTTP Service|http://felix.apache.org/site/apache-felix-http-service.html].
-
-h2. Using the Pax Web whiteboard extender
-
-The Pax Web whiteboard extender is part of the war feature. So use the following command to install:
-
-{code}
-root@karaf> features:install war
-{code}
-
-The [Pax Web whiteboard|http://wiki.ops4j.org/display/ops4j/Pax+Web+Extender+-+Whiteboard] extender listens to services
-of interface type HttpServlet and Filter.
-It will register each of these interfaces with the HttpService and remove them as soon as the service goes down.
-So it is much more convenient than registering with the HttpService directly.
-
-{code}
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-    <service interface="javax.servlet.http.HttpServlet">
-        <service-properties>
-            <entry key="alias" value="/myservlet"/>
-        </service-properties>
-        <bean id="myServlet" class="com.example.MyServlet"/>
-    </service>
-</blueprint>
-{code}
-
-The above snippet publishes the Servlet MyServlet on http://localhost:8080/myServlet.
-
-Please keep in mind that the Whiteboard pattern for Servlets is not standardized and only works with Pax Web.
-
diff --git a/karaf-2.3.x/manual/src/main/webapp/users-guide/index.conf b/karaf-2.3.x/manual/src/main/webapp/users-guide/index.conf
deleted file mode 100644
index da38151..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/users-guide/index.conf
+++ /dev/null
@@ -1,23 +0,0 @@
-h1. Karaf Users Guide
-
-* [Installing Karaf|/users-guide/installation]
-* [Directory Structure|/users-guide/directory-structure]
-* [Starting and stopping Karaf|/users-guide/start-stop]
-* [Using the console|/users-guide/using-console]
-* [Service Wrapper|/users-guide/wrapper]
-* [Web console|/users-guide/web-console]
-* [Remote console|/users-guide/remote-console]
-* [Child instances|/users-guide/child-instances]
-* [Security|/users-guide/security]
-* [Failover Deployments|/users-guide/failover]
-* [Logging system|/users-guide/logging-system]
-* [Deployer|/users-guide/deployer]
-* [Provisioning|/users-guide/provisioning]
-* [Provisioning Schema|/users-guide/provisioning-schema]
-* [Karaf Archive|/users-guide/kar]
-* [Configuration|/users-guide/configuration]
-* [Pax Web (OSGi HttpService)|/users-guide/http]
-* [Web applications|/users-guide/web-applications]
-* [OS integration|/users-guide/wrapper]
-* [JRE packages tuning|/users-guide/jre-tuning]
-* [Monitoring and Administration using JMX|/users-guide/jmx]
diff --git a/karaf-2.3.x/manual/src/main/webapp/users-guide/installation.conf b/karaf-2.3.x/manual/src/main/webapp/users-guide/installation.conf
deleted file mode 100644
index bc6d2f0..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/users-guide/installation.conf
+++ /dev/null
@@ -1,118 +0,0 @@
-h1. Installation
-
-This chapter describes how to install Apache Karaf for both Unix and Windows platforms, including
-prerequisite software and necessary download links.
-
-h2. Pre-Installation Requirements
-
-*Hardware:*
-* 20 MB of free disk space for the Apache Karaf x.y binary distribution.
-
-*Operating Systems:*
-* Windows: Windows Vista, Windows XP SP2, Windows 2000.
-* Unix: Ubuntu Linux, Powerdog Linux, MacOS, AIX, HP-UX, Solaris, any Unix platform that supports Java.
-
-*Environment:*
-* Java SE Development Kit 1.5.x or greater ([http://www.oracle.com/technetwork/java/javase/]).
-* The JAVA_HOME environment variable must be set to the directory where the Java runtime is installed, e.g., {{c:\Program Files\jdk.1.5.0_06}}. To accomplish that, press Windows key and Break key together, switch to "Advanced" tab and click on "Environment Variables". Here, check for the variable and, if necessary, add it.
-
-h2. Building from Sources
-
-If you intend to build Karaf from the sources, the requirements are a bit different:
-
-*Hardware:*
-* 200 MB of free disk space for the Apache Karaf x.y source distributions or SVN checkout, the Maven build and the dependencies Maven downloads.
-
-*Environment:*
-* Java SE Developement Kit 1.5.x or greater ([http://www.oracle.com/technetwork/java/javase/]).
-* Apache Maven 2.2.1 ([http://maven.apache.org/download.html]).
-
-h3. Building on Windows
-
-This procedure explains how to download and install the source distribution on a Windows system. *NOTE:* Karaf requires Java 5 is compile, build and run.
-# From a browser, navigate to [http://karaf.apache.org/index/community/download.html].
-# Scroll down to the "Apache Karaf" section and select the desired distribution.
-For a source distribution, the filename will be similar to: {{apache-karaf-x.y-src.zip}}.
-# Extract Karaf from the ZIP file into a directory of your choice. Please remember the restrictions concerning illegal characters in Java paths, e.g. \!, % etc.
-# {anchor:Windows Source Installation} Build Karaf using Maven 2.2.1 or greater and Java 5.
-The recommended method of building Karaf is the following:
-{code}
-cd [karaf_install_dir]\src
-{code}
- where {{karaf_install_dir}} is the directory in which Karaf was installed.
-{code}
-mvn
-{code}
-Both steps take around 10 to 15 minutes.
-# Unzip the distribution using your favorite zip tool. The windows distribution is available at
-{code}
-[karaf_install_dir]\assembly\target\apache-karaf-x.y.zip
-{code}
-# Proceed to the [Starting Karaf|start-stop#Starting Karaf] chapter.
-
-h3. Building on Unix
-
-This procedure explains how to download and install the source distribution on a Unix system. This procedure assumes the Unix machine has a browser. Please see the previous [#Unix Binary Installation] section for ideas on how to install Karaf without a browser. *NOTE:* Karaf requires Java 5 to compile, build and run.
-# From a browser, navigate to [http://karaf.apache.org/download.html].
-# Scroll down to the "Apache Karaf" section and select the desired distribution.
-For a source distribution, the filename will be similar to: {{apache-karaf-x.y-src.tar.gz}}.
-# Extract the files from the ZIP file into a directory of your choice. For example:
-{code}
-gunzip apache-karaf-x.y-src.tar.gz
-tar xvf apache-karaf-x.y-src.tar
-{code}
-Please remember the restrictions concerning illegal characters in Java paths, e.g. \!, % etc.
-# Build Karaf using Maven:
-The preferred method of building Karaf is the following:
-{code}
-cd [karaf_install_dir]/src
-{code}
- where {{karaf_install_dir}} is the directory in which Karaf was installed.
-{code}
-mvn
-{code}
-# Uncompress the distribution that has just been created
-{code}
-cd [karaf_install_dir]/assembly/target
-gunzip apache-karaf-x.y.tar.gz
-tar xvf apache-karaf-x.y.tar
-{code}
-# Proceed to the [Starting Karaf|start-stop#Starting Karaf] chapter.
-
-h2. Installation Procedure for Windows
-
-This procedure explains how to download and install the binary distribution on a Windows system.
-# From a browser, navigate to [http://karaf.apache.org/index/community/download.html].
-# Scroll down to the "Apache Karaf" section and select the desired distribution.
-For a binary distribution, the filename will be similar to: {{apache-karaf-x.y.zip}}.
-# Extract the files from the ZIP file into a directory of your choice. Please remember the restrictions concerning illegal characters in Java paths, e.g. \!, % etc.
-# Proceed to the [Starting Karaf|start-stop#Starting Karaf] chapter.
-# Optional: see [enabling Colorized Console Output On Windows|colorized-console]
-
-{tip:title=Handy Hint}
-In case you have to install Karaf into a very deep path or a path containing illegal characters for Java paths, e.g. \!, % etc., you may add a bat file to _start \-> startup_ that executes
-{noformat}
-subst S: "C:\your very % problematic path!\KARAF"
-{noformat}
-so your Karaf root directory is S: --- which works for sure and is short to type.
-{tip}
-
-h2. Installation Procedure For Unix
-
-This procedure explains how to download and install the binary distribution on a Unix system.
-# From a browser, navigate to [http://karaf.apache.org/download.html].
-# Scroll down to the "Apache Karaf" section and select the desired distribution.
-For a binary Unix distribution, the filename will be similar to: apache-karaf-x.y.tar.gz.
-# Extract the files from the gzip file into a directory of your choice. For example:
-{code}
-gunzip apache-karaf-x.y.tar.gz
-tar xvf apache-karaf-x.y.tar
-{code}
-Please remember the restrictions concerning illegal characters in Java paths, e.g. \!, % etc.
-# Proceed to the [Starting Karaf|start-stop#Starting Karaf] chapter.
-
-h2. Post-Installation steps
-
-Thought it is not always required, it is strongly advised to set up the {{JAVA_HOME}} environment property to point to the JDK you want Karaf to use before starting it.
-This property is used to locate the {{java}} executable and should be configured to point to the home directory of the Java SE 5 or 6 installation.
-
diff --git a/karaf-2.3.x/manual/src/main/webapp/users-guide/jmx.conf b/karaf-2.3.x/manual/src/main/webapp/users-guide/jmx.conf
deleted file mode 100644
index 0a0932a..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/users-guide/jmx.conf
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-h1. Monitoring and Administration using JMX
-
-Apache Karaf provides a large set of MBeans that allow you to fully monitore and administrate Karaf using any JMX client
-(like jconsole for instance).
-
-You can find more or less the same actions that you can do using the shell commands on the JMX layer.
-
-Apache Karaf provides the following MBeans:
-
-* org.apache.karaf:type=admin to administrate the child instances
-* org.apache.karaf:type=bundles to manipulate the OSGi bundles
-* org.apache.karaf:type=config to manipulate the Karaf configuration files (in the etc folder) and the ConfigAdmin layer
-* org.apache.karaf:type=dev to get information and manipulate the OSGi framework
-* org.apache.karaf:type=diagnostic to create information file (dump) about Karaf activity
-* org.apache.karaf:type=features to manipulate the Karaf features
-* org.apache.karaf:type=log to manipulate to logging layer
-* org.apache.karaf:type=packages to manipulate to PackageAdmin layer and get information about exported and imported packages
-* org.apache.karaf:type=services to get information about the OSGi services
-* org.apache.karaf:type=system to shutdown the Karaf container itself
-* org.apache.karaf:type=web to get information about the Web bundles (installed with the war feature)
-* org.apache.karaf:type=obr to manipulate the OBR layer (installed with the obr feature)
\ No newline at end of file
diff --git a/karaf-2.3.x/manual/src/main/webapp/users-guide/jre-tuning.conf b/karaf-2.3.x/manual/src/main/webapp/users-guide/jre-tuning.conf
deleted file mode 100644
index f6a592d..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/users-guide/jre-tuning.conf
+++ /dev/null
@@ -1,333 +0,0 @@
-
-
-h1. JRE and system packages tuning
-
-Some packages are part of the JRE, but could be provided by tier libraries.
-
-Some examples of package in this case are:
-* {{javax.xml.stream}} package is provided by the JRE, but also by Apache Geronimo Spec bundles (and the implementation of provided by Woodstox).
-* {{com.sun.org.apache.xerces.internal.dom}} package is provided by the JRE, but also by Apache Xerces.
-* {{javax.activation}} package is provided by the JRE, but also by Apache Geronimo Spec bundles.
-* {{javax.annotation}} package is provided by the JRE, but also by Apache Geronimo Spec bundles.
-* etc ...
-
-We should define in the Karaf instance which packages should be provided by the JRE or by tier bundles.
-
-Moreover, we should manage the exported packages of JRE depending of the JRE version: the JRE 1.6 provides more packages
-than the 1.5 one.
-
-To customize this in Karaf, you can tune the {{etc/jre.properties}} file.
-
-In the {{etc/jre.properties}} file, you have two properties {{jre-1.5}} and {{jre-1.6}}.
-
-They allow you to define the packages exported by the JRE (in function of the runtime version).
-Each property provide the exhaustive list of packages provided by the JRE (and so part of the sytem packages).
-
-For instance, a "standard" Karaf distribution provides the following {{etc/jre.properties}}:
-
-{code}
-#
-# Java platform package export properties.
-#
-
-# Standard package set.  Note that:
-#   - javax.transaction* is exported with a mandatory attribute
-jre-1.5= \
- javax.accessibility, \
- javax.activity, \
- javax.crypto, \
- javax.crypto.interfaces, \
- javax.crypto.spec, \
- javax.imageio, \
- javax.imageio.event, \
- javax.imageio.metadata, \
- javax.imageio.plugins.bmp, \
- javax.imageio.plugins.jpeg, \
- javax.imageio.spi, \
- javax.imageio.stream, \
- javax.management, \
- javax.management.loading, \
- javax.management.modelmbean, \
- javax.management.monitor, \
- javax.management.openmbean, \
- javax.management.relation, \
- javax.management.remote, \
- javax.management.remote.rmi, \
- javax.management.timer, \
- javax.naming, \
- javax.naming.directory, \
- javax.naming.event, \
- javax.naming.ldap, \
- javax.naming.spi, \
- javax.net, \
- javax.net.ssl, \
- javax.print, \
- javax.print.attribute, \
- javax.print.attribute.standard, \
- javax.print.event, \
- javax.rmi, \
- javax.rmi.CORBA, \
- javax.rmi.ssl, \
- javax.security.auth, \
- javax.security.auth.callback, \
- javax.security.auth.kerberos, \
- javax.security.auth.login, \
- javax.security.auth.spi, \
- javax.security.auth.x500, \
- javax.security.cert, \
- javax.security.sasl, \
- javax.sound.midi, \
- javax.sound.midi.spi, \
- javax.sound.sampled, \
- javax.sound.sampled.spi, \
- javax.sql, \
- javax.sql.rowset, \
- javax.sql.rowset.serial, \
- javax.sql.rowset.spi, \
- javax.swing, \
- javax.swing.border, \
- javax.swing.colorchooser, \
- javax.swing.event, \
- javax.swing.filechooser, \
- javax.swing.plaf, \
- javax.swing.plaf.basic, \
- javax.swing.plaf.metal, \
- javax.swing.plaf.multi, \
- javax.swing.plaf.synth, \
- javax.swing.table, \
- javax.swing.text, \
- javax.swing.text.html, \
- javax.swing.text.html.parser, \
- javax.swing.text.rtf, \
- javax.swing.tree, \
- javax.swing.undo, \
- javax.transaction; javax.transaction.xa; partial=true; mandatory:=partial, \
- javax.xml, \
- javax.xml.datatype, \
- javax.xml.namespace, \
- javax.xml.parsers, \
- javax.xml.transform, \
- javax.xml.transform.dom, \
- javax.xml.transform.sax, \
- javax.xml.transform.stream, \
- javax.xml.validation, \
- javax.xml.xpath, \
- org.ietf.jgss, \
- org.omg.CORBA, \
- org.omg.CORBA_2_3, \
- org.omg.CORBA_2_3.portable, \
- org.omg.CORBA.DynAnyPackage, \
- org.omg.CORBA.ORBPackage, \
- org.omg.CORBA.portable, \
- org.omg.CORBA.TypeCodePackage, \
- org.omg.CosNaming, \
- org.omg.CosNaming.NamingContextExtPackage, \
- org.omg.CosNaming.NamingContextPackage, \
- org.omg.Dynamic, \
- org.omg.DynamicAny, \
- org.omg.DynamicAny.DynAnyFactoryPackage, \
- org.omg.DynamicAny.DynAnyPackage, \
- org.omg.IOP, \
- org.omg.IOP.CodecFactoryPackage, \
- org.omg.IOP.CodecPackage, \
- org.omg.Messaging, \
- org.omg.PortableInterceptor, \
- org.omg.PortableInterceptor.ORBInitInfoPackage, \
- org.omg.PortableServer, \
- org.omg.PortableServer.CurrentPackage, \
- org.omg.PortableServer.POAManagerPackage, \
- org.omg.PortableServer.POAPackage, \
- org.omg.PortableServer.portable, \
- org.omg.PortableServer.ServantLocatorPackage, \
- org.omg.SendingContext, \
- org.omg.stub.java.rmi, \
- org.omg.stub.javax.management.remote.rmi, \
- org.w3c.dom, \
- org.w3c.dom.bootstrap, \
- org.w3c.dom.css, \
- org.w3c.dom.events, \
- org.w3c.dom.html, \
- org.w3c.dom.ls, \
- org.w3c.dom.ranges, \
- org.w3c.dom.stylesheets, \
- org.w3c.dom.traversal, \
- org.w3c.dom.views, \
- org.xml.sax, \
- org.xml.sax.ext, \
- org.xml.sax.helpers
-
-# Standard package set.  Note that:
-#   - javax.transaction* is exported with a mandatory attribute
-jre-1.6= \
- javax.accessibility, \
- javax.activation, \
- javax.activity, \
- javax.annotation, \
- javax.annotation.processing, \
- javax.crypto, \
- javax.crypto.interfaces, \
- javax.crypto.spec, \
- javax.imageio, \
- javax.imageio.event, \
- javax.imageio.metadata, \
- javax.imageio.plugins.bmp, \
- javax.imageio.plugins.jpeg, \
- javax.imageio.spi, \
- javax.imageio.stream, \
- javax.jws, \
- javax.jws.soap, \
- javax.lang.model, \
- javax.lang.model.element, \
- javax.lang.model.type, \
- javax.lang.model.util, \
- javax.management, \
- javax.management.loading, \
- javax.management.modelmbean, \
- javax.management.monitor, \
- javax.management.openmbean, \
- javax.management.relation, \
- javax.management.remote, \
- javax.management.remote.rmi, \
- javax.management.timer, \
- javax.naming, \
- javax.naming.directory, \
- javax.naming.event, \
- javax.naming.ldap, \
- javax.naming.spi, \
- javax.net, \
- javax.net.ssl, \
- javax.print, \
- javax.print.attribute, \
- javax.print.attribute.standard, \
- javax.print.event, \
- javax.rmi, \
- javax.rmi.CORBA, \
- javax.rmi.ssl, \
- javax.script, \
- javax.security.auth, \
- javax.security.auth.callback, \
- javax.security.auth.kerberos, \
- javax.security.auth.login, \
- javax.security.auth.spi, \
- javax.security.auth.x500, \
- javax.security.cert, \
- javax.security.sasl, \
- javax.sound.midi, \
- javax.sound.midi.spi, \
- javax.sound.sampled, \
- javax.sound.sampled.spi, \
- javax.sql, \
- javax.sql.rowset, \
- javax.sql.rowset.serial, \
- javax.sql.rowset.spi, \
- javax.swing, \
- javax.swing.border, \
- javax.swing.colorchooser, \
- javax.swing.event, \
- javax.swing.filechooser, \
- javax.swing.plaf, \
- javax.swing.plaf.basic, \
- javax.swing.plaf.metal, \
- javax.swing.plaf.multi, \
- javax.swing.plaf.synth, \
- javax.swing.table, \
- javax.swing.text, \
- javax.swing.text.html, \
- javax.swing.text.html.parser, \
- javax.swing.text.rtf, \
- javax.swing.tree, \
- javax.swing.undo, \
- javax.tools, \
- javax.transaction; javax.transaction.xa; partial=true; mandatory:=partial, \
- javax.xml, \
- javax.xml.bind, \
- javax.xml.bind.annotation, \
- javax.xml.bind.annotation.adapters, \
- javax.xml.bind.attachment, \
- javax.xml.bind.helpers, \
- javax.xml.bind.util, \
- javax.xml.crypto, \
- javax.xml.crypto.dom, \
- javax.xml.crypto.dsig, \
- javax.xml.crypto.dsig.dom, \
- javax.xml.crypto.dsig.keyinfo, \
- javax.xml.crypto.dsig.spec, \
- javax.xml.datatype, \
- javax.xml.namespace, \
- javax.xml.parsers, \
- javax.xml.soap, \
- javax.xml.stream, \
- javax.xml.stream.events, \
- javax.xml.stream.util, \
- javax.xml.transform, \
- javax.xml.transform.dom, \
- javax.xml.transform.sax, \
- javax.xml.transform.stax, \
- javax.xml.transform.stream, \
- javax.xml.validation, \
- javax.xml.ws, \
- javax.xml.ws.handler, \
- javax.xml.ws.handler.soap, \
- javax.xml.ws.http, \
- javax.xml.ws.soap, \
- javax.xml.ws.spi, \
- javax.xml.ws.wsaddressing, \
- javax.xml.xpath, \
- org.ietf.jgss, \
- org.omg.CORBA, \
- org.omg.CORBA_2_3, \
- org.omg.CORBA_2_3.portable, \
- org.omg.CORBA.DynAnyPackage, \
- org.omg.CORBA.ORBPackage, \
- org.omg.CORBA.portable, \
- org.omg.CORBA.TypeCodePackage, \
- org.omg.CosNaming, \
- org.omg.CosNaming.NamingContextExtPackage, \
- org.omg.CosNaming.NamingContextPackage, \
- org.omg.Dynamic, \
- org.omg.DynamicAny, \
- org.omg.DynamicAny.DynAnyFactoryPackage, \
- org.omg.DynamicAny.DynAnyPackage, \
- org.omg.IOP, \
- org.omg.IOP.CodecFactoryPackage, \
- org.omg.IOP.CodecPackage, \
- org.omg.Messaging, \
- org.omg.PortableInterceptor, \
- org.omg.PortableInterceptor.ORBInitInfoPackage, \
- org.omg.PortableServer, \
- org.omg.PortableServer.CurrentPackage, \
- org.omg.PortableServer.POAManagerPackage, \
- org.omg.PortableServer.POAPackage, \
- org.omg.PortableServer.portable, \
- org.omg.PortableServer.ServantLocatorPackage, \
- org.omg.SendingContext, \
- org.omg.stub.java.rmi, \
- org.omg.stub.javax.management.remote.rmi, \
- org.w3c.dom, \
- org.w3c.dom.bootstrap, \
- org.w3c.dom.css, \
- org.w3c.dom.events, \
- org.w3c.dom.html, \
- org.w3c.dom.ls, \
- org.w3c.dom.ranges, \
- org.w3c.dom.stylesheets, \
- org.w3c.dom.traversal, \
- org.w3c.dom.views, \
- org.w3c.dom.xpath, \
- org.xml.sax, \
- org.xml.sax.ext, \
- org.xml.sax.helpers
-{code}
-
-For instance, if we deploy the Apache Geronimo Specs bundle providing the {{javax.xml.stream}} package, we have to comment
-the {{javax.xml.stream}} package in the the jre-1.6 definition. Indeed, jre-1.5 doesn't provide {{javax.xml.stream}}, it's
-new in the JRE 1.6:
-
-{code}
-jre-1.6= \
-[...]
-# javax.xml.stream, \
-# javax.xml.stream.events, \
-# javax.xml.stream.util, \
-[...]
-{code}
\ No newline at end of file
diff --git a/karaf-2.3.x/manual/src/main/webapp/users-guide/kar.conf b/karaf-2.3.x/manual/src/main/webapp/users-guide/kar.conf
deleted file mode 100644
index 95af036..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/users-guide/kar.conf
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-h1. Karaf Archives (KAR)
-
-Karaf provides a specific archive format named the KAR (Karaf ARchive).
-
-Basically, the kar format is a jar (so a zip file) which contains a set of feature descriptor and bundle jar files.
-
-For instance, a kar looks like:
-* my-features-1.xml
-* bundle1.jar
-* bundle2.jar
-* bundle3.jar
-
-all packaged in zip format.
-
-h2. Create a kar archive
-
-You can create a kar file by hand, just by zip compressing a directory representing the kar content.
-
-You can also use the Karaf features maven plugin. The features maven plugin provides an create-kar goal.
-
-The kar-archive goal:
-1. Reads all features specified in the features descriptor.
-2. For each feature, it resolves the bundles defined in the feature.
-3. All bundles are packaged into the kar archive.
-
-For instance, you can use the following POM to create a kar:
-
-{code}
-<?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/xsd/maven-4.0.0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>my.groupId</groupId>
-    <artifactId>my-kar</artifactId>
-    <version>1.0</version>
-    <packaging>pom</packaging>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.karaf.tooling</groupId>
-                <artifactId>features-maven-plugin</artifactId>
-                <version>2.2.8</version>
-                <executions>
-                    <execution>
-                        <id>create-kar</id>
-                        <goals>
-                            <goal>create-kar</goal>
-                        </goals>
-                        <configuration>
-                            <featuresFile>src/main/resources/features.xml</featuresFile>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
-{code}
-
-For the example, the features descriptor is very simple:
-
-{code}
-<?xml version="1.0" encoding="UTF-8"?>
-<features>
-
-   <feature name="my" version="1.0">
-      <bundle>mvn:commons-collections/commons-collections/3.2.1</bundle>
-   </feature>
-
-</features>
-{code}
-
-To create the kar archive, simply type:
-
-{code}
-mvn install
-{code}
-
-and you will have your kar in the {{target}} directory.
-
-h2. Deploy a kar archive
-
-Karaf provides a KAR deployer:
-
-{code}
-karaf@root> la|grep -i archive
-[  12] [Active     ] [Created     ] [   30] Apache Karaf :: Deployer :: Karaf Archive (.kar) (2.2.4)
-{code}
-
-It's a core deployer (you don't need to install additional features).
-
-To deploy a kar, simply drop the kar into the deploy directory. The KAR Deployer will deploy all the kar content starting
-from the features descriptor.
-
-The KAR Deployer uncompress KAR archives in the system repository and register the features descriptor.
-All features contained in a KAR archive will be automatically installed at deployment time.
-You can now see your features installed:
-
-{code}
-karaf@root> features:list|grep -i my
-[  installed] [1.0             ] my                            repo-0
-{code}
diff --git a/karaf-2.3.x/manual/src/main/webapp/users-guide/logging-system.conf b/karaf-2.3.x/manual/src/main/webapp/users-guide/logging-system.conf
deleted file mode 100644
index df89931..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/users-guide/logging-system.conf
+++ /dev/null
@@ -1,177 +0,0 @@
-h1. Logging system
-
-Karaf provides a powerful logging system based on [OPS4j Pax Logging|http://team.ops4j.org/wiki/display/paxlogging/Pax+Logging]. 
-
-In addition to being a standard OSGi Log service, it supports the following APIs:
-* Apache Commons Logging
-* SLF4J
-* Apache Log4j
-* Java Util Logging
-
-Karaf also comes with a set of console commands that can be used to display, view and change the log levels.
-
-h2. Configuration
-
-h3. Configuration file
-
-The configuration of the logging system uses a [standard Log4j configuration file|http://logging.apache.org/log4j/1.2/manual.html] at the following location:
-{code}
-[karaf_install_dir]/etc/org.ops4j.pax.logging.cfg
-{code}
-You can edit this file at runtime and any change will be reloaded and be effective immediately.
-
-h3. Configuring the appenders
-
-The default logging configuration defines three appenders:
-* the {{stdout}} console appender is disabled by default.  If you plan to run Karaf in server mode only (i.e. with the locale console disabled), you can turn on this appender on by adding it to the list of configured appenders using the {{log4j.rootLogger}} property
-* the {{out}} appender is the one enabled by default. It logs events to a number of rotating log files of a fixed size.  You can easily change the parameters to control the number of files using {{maxBackupIndex}} and their size size {{maxFileSize}}
-* the {{sift}} appender can be used instead to provide a per-bundle log file.  The default configuration uses the bundle symbolic name as the file name to log to
-
-h3. Changing the log levels
-
-The default logging configuration sets the logging levels so that the log file will provide enough information to monitor the behavior of the runtime and provide clues about what caused a problem. However, the default configuration will not provide enough information to debug most problems.
-
-The most useful logger to change when trying to debug an issue with Karaf is the root logger. You will want to set its logging level to {{DEBUG}} in the {{org.ops4j.pax.logging.cfg}} file.
-{pygmentize:text}
-log4j.rootLogger=DEBUG, out, osgi:VmLogAppender
-...
-{pygmentize}
-
-When debugging a problem in Karaf you may want to change the level of logging information that is displayed on the console. The example below shows how to set the root logger to {{DEBUG}} but limiting the information displayed on the console to WARN.
-{pygmentize:text}
-log4j.rootLogger=DEBUG, out, stdout, osgi:VmLogAppender
-log4j.appender.stdout.threshold=WARN
-...
-{pygmentize}
-
-h2. Console Log Commands
-
-The log subshell comes with the following commands:
-* [{{log:clear}}|/commands/log-clear]: clear the log
-* [{{log:display}}|/commands/log-display]: display the last log entries
-* [{{log:display-exception}}|/commands/log-display-exception]: display the last exception from the log
-* [{{log:get}}|/commands/log-get]: show the log levels
-* [{{log:set}}|/commands/log-set]: set the log levels
-* [{{log:tail}}|/commands/log-tail]: continuous display of the log entries
-
-For example, if you want to debug something, you might want to run the following commands:
-{code}
-> log:set DEBUG
-... do something ...
-> log:display
-{code}
-
-Note that the log levels set using the {{log:set}} commands are not persistent and will be lost upon restart.
-To configure those in a persistent way, you should edit the configuration file mentioned above using the config commands or directly using a text editor of your choice.
-
-The log commands has a separate configure file:
-{code}
-[karaf_install_dir]/etc/org.apache.karaf.log.cfg
-{code}
-
-h2. Advanced configuration
-
-The logging backend uses Log4j, but offer a number of additional features.
-
-h3. Nested filters, appenders and error handlers
-
-h4. Filters
-
-Appender filters can be added using the following syntax:
-{pygmentize:text}
-log4j.appender.[appender-name].filter.[filter-name]=[filter-class]
-log4j.appender.[appender-name].filter.[filter-name].[option]=[value]
-{pygmentize}
-
-Below is a real example:
-{pygmentize:text}
-log4j.appender.out.filter.f1=org.apache.log4j.varia.LevelRangeFilter
-log4j.appender.out.filter.f1.LevelMax=FATAL
-log4j.appender.out.filter.f1.LevelMin=DEBUG
-{pygmentize}
-
-h4. Nested appenders
-
-Nested appenders can be added using the following syntax:
-{pygmentize:text}
-log4j.appender.[appender-name].appenders=[comma-separated-list-of-appender-names]
-{pygmentize}
-
-Below is a real example:
-{pygmentize:text}
-log4j.appender.async=org.apache.log4j.AsyncAppender
-log4j.appender.async.appenders=jms
-
-log4j.appender.jms=org.apache.log4j.net.JMSAppender
-...
-{pygmentize}
-
-h4. Error handlers
-
-Error handlers can be added using the following syntax:
-{pygmentize:text}
-log4j.appender.[appender-name].errorhandler=[error-handler-class]
-log4j.appender.[appender-name].errorhandler.root-ref=[true|false]
-log4j.appender.[appender-name].errorhandler.logger-ref=[logger-ref]
-log4j.appender.[appender-name].errorhandler.appender-ref=[appender-ref]
-{pygmentize}
-
-h3. OSGi specific MDC attributes
-
-Pax-Logging provides the following attributes by default:
-* {{bundle.id}}: the id of the bundle from which the class is loaded
-* {{bundle.name}}: the symbolic-name of the bundle
-* {{bundle.version}}: the version of the bundle
-
-An MDC sifting appender is available to split the log events based on MDC attributes.  Below is a configuration example for this appender:
-{pygmentize:text}
-log4j.appender.sift=org.apache.log4j.sift.MDCSiftingAppender
-log4j.appender.sift.key=bundle.name
-log4j.appender.sift.default=karaf
-log4j.appender.sift.appender=org.apache.log4j.FileAppender
-log4j.appender.sift.appender.layout=org.apache.log4j.PatternLayout
-log4j.appender.sift.appender.layout.ConversionPattern=%d{ABSOLUTE} | %-5.5p | %-16.16t | %-32.32c{1} | %-32.32C %4L | %m%n
-log4j.appender.sift.appender.file=${karaf.data}/log/$\\{bundle.name\\}.log
-log4j.appender.sift.appender.append=true
-{pygmentize}
-
-h3. Enhanced OSGi stack trace renderer
-
-This renderer is configured by default in Karaf and will give additional informations when printing stack traces.
-For each line of the stack trace, it will display OSGi specific informations related to the class on that line: the bundle id, the bundle symbolic name and the bundle version.  This information can greatly help diagnosing problems in some cases.
-The information is appended at the end of each line in the following format {{[id:name:version]}} as shown below
-{pygmentize:text}
-java.lang.IllegalArgumentException: Command not found:  *:foo
-	at org.apache.felix.gogo.runtime.shell.Closure.execute(Closure.java:225)[21:org.apache.karaf.shell.console:2.1.0]
-	at org.apache.felix.gogo.runtime.shell.Closure.executeStatement(Closure.java:162)[21:org.apache.karaf.shell.console:2.1.0]
-	at org.apache.felix.gogo.runtime.shell.Pipe.run(Pipe.java:101)[21:org.apache.karaf.shell.console:2.1.0]
-	at org.apache.felix.gogo.runtime.shell.Closure.execute(Closure.java:79)[21:org.apache.karaf.shell.console:2.1.0]
-	at org.apache.felix.gogo.runtime.shell.CommandSessionImpl.execute(CommandSessionImpl.java:71)[21:org.apache.karaf.shell.console:2.1.0]
-	at org.apache.karaf.shell.console.jline.Console.run(Console.java:169)[21:org.apache.karaf.shell.console:2.1.0]
-	at java.lang.Thread.run(Thread.java:637)[:1.6.0_20]
-{pygmentize}
-
-h3. Using your own appenders
-
-If you plan to use your own appenders, you need to create an OSGi bundle and attach it as a fragment to the bundle with a symbolic name of 
-{{org.ops4j.pax.logging.pax-logging-service}}.  This way, the underlying logging system will be able to see and use your appenders.
-
-So for example you write a log4j appender:
-class MyAppender extends AppenderSkeleton {
-...
-}
-
-Then you need to package the appender in a jar with a Manifest like this:
-
-Manifest:
-Bundle-SymbolicName: org.mydomain.myappender       
-Fragment-Host: org.ops4j.pax.logging.pax-logging-service
-...
-
-Copy the new appender fragment into the ${karaf.home}/system directory. Karaf uses a virtual maven repository to access resources in the system
-directory, so the jar path should use the standard maven groupId/artifactId/version/ convention, where the groupId is a directory structure.
-
-Edit ${karaf.home}/etc/startup.properties and add the new fragment bundle to the list before the pax-logging-service bundle.
-
-Restart karaf with a clean run to reload the system bundles, and now you can use the appender in your log4j config file like shown in the config
-examples above.
diff --git a/karaf-2.3.x/manual/src/main/webapp/users-guide/provisioning-schema.conf b/karaf-2.3.x/manual/src/main/webapp/users-guide/provisioning-schema.conf
deleted file mode 100644
index 17610d7..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/users-guide/provisioning-schema.conf
+++ /dev/null
@@ -1,9 +0,0 @@
-

-

-h1. XML Schema for provisioning

-

-The following schema can be found in Karaf sources. It is also available publicly at url http://karaf.apache.org/xmlns/features/v1.0.0.

-

-{snippet:url=../features/core/src/main/resources/org/apache/karaf/features/karaf-features-1.0.0.xsd|lang=xml|pygmentize=true}

-{snippet}

-

diff --git a/karaf-2.3.x/manual/src/main/webapp/users-guide/provisioning.conf b/karaf-2.3.x/manual/src/main/webapp/users-guide/provisioning.conf
deleted file mode 100644
index c8092fc..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/users-guide/provisioning.conf
+++ /dev/null
@@ -1,300 +0,0 @@
-
-
-h1. Provisioning
-
-Karaf provides a simple, yet flexible, way to provision applications or "features".  Such a mechanism is mainly provided by a set of commands available in the {{features}} shell.  The provisioning system uses xml "repositories" that define a set of features.
-
-h2. Repositories
-
-The complete xml schema for feature descriptor are available on [Features XML Schema|provisioning-schema] page. We recommend using this XML schema. It will allow Karaf to validate your repository before parsing. You may also verify your descriptor before adding it to Karaf by simply validation, even from IDE level.
-
-
-Here is an example of such a repository:
-{code:lang=xml}
-<features xmlns="http://karaf.apache.org/xmlns/features/v1.0.0">
-    <feature name="spring" version="3.0.4.RELEASE">
-        <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.aopalliance/1.0_1</bundle>
-        <bundle>mvn:org.springframework/spring-core/3.0.4.RELEASE</bundle>
-        <bundle>mvn:org.springframework/spring-beans/3.0.4.RELEASE</bundle>
-        <bundle>mvn:org.springframework/spring-aop/3.0.4.RELEASE</bundle>
-        <bundle>mvn:org.springframework/spring-context/3.0.4.RELEASE</bundle>
-        <bundle>mvn:org.springframework/spring-context-support/3.0.4.RELEASE</bundle>
-    </feature>
-</features>
-{code}
-
-A repository includes a list of {{feature}} elements, each one representing an application that can be installed.  The feature is identified by its {{name}} which must be unique amongst all the repositories used and consists of a set of bundles that need to be installed along with some optional dependencies on other features and some optional configurations for the Configuration Admin OSGi service.
-
-References to features define in other repositories are allow and can be achieved by adding a list of repository.
-
-{code:xml}
-<features xmlns="http://karaf.apache.org/xmlns/features/v1.0.0">
-  <repository>mvn:org.apache.servicemix.nmr/apache-servicemix-nmr/1.3.0/xml/features</repository>
-  <repository>mvn:org.apache.camel.karaf/apache-camel/2.5.0/xml/features</repository>
-  <repository>mvn:org.apache.karaf/apache-karaf/2.1.2/xml/features</repository>
-  ...
-{code}
-
-{warning}
-Be careful when you define them as there is a risk of 'cycling' dependencies.
-{warning}
-
-Remark: By default, all the features defined in a repository are not installed at the launch of Apache Karaf (see section hereafter 'h2. Service configuration' for more info).
-
-h3. Bundles
-
-The main information provided by a feature is the set of OSGi bundles that defines the application.  Such bundles are URLs pointing to the actual bundle jars.  For example, one would write the following definition:
-{code:lang=xml}
-<bundle>http://repo1.maven.org/maven2/org/apache/servicemix/nmr/org.apache.servicemix.nmr.api/1.0.0-m2/org.apache.servicemix.nmr.api-1.0.0-m2.jar</bundle>
-{code}
-Doing this will make sure the above bundle is installed while installing the feature.
-
-However, Karaf provides several URL handlers, in addition to the usual ones (file, http, etc...). One of these is the Maven URL handler, which allow reusing Maven repositories to point to the bundles.
-
-h4. Maven URL Handler
-
-The equivalent of the above bundle would be:
-{code}
-<bundle>mvn:org.apache.servicemix.nmr/org.apache.servicemix.nmr.api/1.0.0-m2</bundle>
-{code}
-In addition to being less verbose, the Maven url handlers can also resolve snapshots and can use a local copy of the jar if one is available in your Maven local repository.
-
-The {{org.ops4j.pax.url.mvn}} bundle resolves {{mvn}} URLs. This flexible tool can be configured through the configuration service. For example, to find the current repositories type:
-
-{code}
-karaf@root:/> config:list
-...
-----------------------------------------------------------------
-Pid:            org.ops4j.pax.url.mvn
-BundleLocation: mvn:org.ops4j.pax.url/pax-url-mvn/0.3.3
-Properties:
-   service.pid = org.ops4j.pax.url.mvn
-   org.ops4j.pax.url.mvn.defaultRepositories = file:/opt/development/karaf/assembly/target/apache-felix-karaf-1.2.0-SNAPSHOT/system@snapshots
-   org.ops4j.pax.url.mvn.repositories = http://repo1.maven.org/maven2, 
-                                         http://svn.apache.org/repos/asf/servicemix/m2-repo 
-   below = list of repositories and even before the local repository
-{code}
-
-The repositories checked are controlled by these configuration properties. 
-
-For example, {{org.ops4j.pax.url.mvn.repositories}} is a comma separate list of repository URLs specifying those remote repositories to be checked. So, to replace the defaults with a new repository at {{http://www.example.org/repo}} on the local machine:
-
-{code}
-karaf@root:/> config:edit org.ops4j.pax.url.mvn
-karaf@root:/> config:proplist                  
-   service.pid = org.ops4j.pax.url.mvn
-   org.ops4j.pax.url.mvn.defaultRepositories = file:/opt/development/karaf/assembly/target/apache-felix-karaf-1.2.0-SNAPSHOT/system@snapshots
-   org.ops4j.pax.url.mvn.repositories = http://repo1.maven.org/maven2,
-                                        http://svn.apache.org/repos/asf/servicemix/m2-repo
-   below = list of repositories and even before the local repository
-karaf@root:/> config:propset org.ops4j.pax.url.mvn.repositories http://www.example.org/repo
-karaf@root:/> config:update
-{code}
-
-By default, snapshots are disabled. To enable an URL for snapshots append @snapshots. For example
-
-{code}
-http://www.example.org/repo@snapshots
-{code}
-
-Repositories on the local machine are supported through {{file:/}} URLs
-
-h4. Bundle start-level
-
-*Available since Karaf 2.0*
-
-By default, the bundles deployed through the feature mechanism will have a start-level equals to the value defined in the configuration file {{config.properties}}
-with the variable {{karaf.startlevel.bundle=80}}. This value can be changed using the xml attribute start-level. 
-
-{code:xml}
-  <feature name='my-project' version='1.0.0'>
-    <feature version='2.4.0'>camel-spring</feature>
-    <bundle start-level='80'>mvn:com.mycompany.myproject/myproject-dao</bundle>    
-    <bundle start-level='85'>mvn:com.mycompany.myproject/myproject-service</bundle>
-    <bundle start-level='85'>mvn:com.mycompany.myproject/myproject-camel-routing</bundle>
-  </feature> 
-{code}  
-
-The advantage in defining the bundle start-level is that you can deploy all your bundles including any required 'infrastructure' bundles (e.g Camel, ActiveMQ)
-at the same time and you will have the guarantee when using Spring Dynamic Modules or Blueprint that the Spring context will not be
-created without all the required services installed.
-
-h4. Bundle 'stop/start'
-
-The OSGI specification allows for installing a bundle without starting it. To use this functionality, simply add the following attribute in your <bundle> definition
-
-{code:xml}
-  <feature name='my-project' version='1.0.0'>
-    <feature version='2.4.0'>camel-spring</feature>
-    <bundle start-level='80' start='false'>mvn:com.mycompany.myproject/myproject-dao</bundle>    
-    <bundle start-level='85' start='false'>mvn:com.mycompany.myproject/myproject-service</bundle>
-    <bundle start-level='85' start='false'>mvn:com.mycompany.myproject/myproject-camel-routing</bundle>
-  </feature> 
-{code}
-
-{warning}
-Before Karaf 3.0 the start-level was NOT considered during the feature startup, but only the order in which bundles are defined in your feature.xml. Starting with 3.0 the start-level is no considered correctly. If you need to use the old behavior you can uncomment and change the respectStartLvlDuringFeatureStartup variable in org.apache.karaf.features.xml to false. But please be aware that it will be removed in 4.0 and should therefore be used only temporarily.
-{warning}
-
-h4. Bundle 'dependency'
-
-A bundle can be flagged as being a dependency.  Such information can be used by resolvers to compute the full list of bundles to be installed.
-
-h3. Dependent features
-
-Dependent features are useful when a given feature depends on another feature to be installed.  Such a dependency can be expressed easily in the feature definition:
-{code:lang=xml}
-<feature name="jbi">
-  <feature>nmr</feature>
-  ...
-</feature>
-{code}
-
-The effect of such a dependency is to automatically install the required {{nmr}} feature when the {{jbi}} feature is installed.
-
-A version range can be specified on the feature dependency:
-{code:lang=xml}
-<feature name="spring-dm">
-  <feature version="[2.5.6,4)">spring</feature>
-  ...
-</feature>
-{code}
-In such a case, if no matching feature is already installed, the feature with the highest version available in the range will be installed.  If a single version is specified, this version will be chosen.  If nothing is specified, the highest available will be installed.
-
-h3. Configurations
-
-The configuration section allows for declaring deployment configuration of the OSGi Configuration Admin service along a set of bundles.
-Here is an example of such a configuration:
-
-{code:lang=xml}
-<config name="com.foo.bar">
-  myProperty = myValue
-</config>
-{code}
-
-The {{name}} attribute of the {{configuration}} element will be used as the ManagedService PID for the configuration set in the Configuration Admin service.  When using a ManagedServiceFactory, the {{name}} attribute is _servicePid_-_aliasId_, where _servicePid_ is the PID of the ManagedServiceFactory and _aliasId_ is a label used to uniquely identify a particular service (an alias to the factory generated service PID).
-
-Deploying such a configuration has the same effect as dropping a file named {{com.foo.bar.cfg}} into the {{etc}} folder.
-
-The content of the {{configuration}} element is set of properties parsed using the [standard java property mechanism|http://java.sun.com/j2se/1.5.0/docs/api/java/util/Properties.html#load(java.io.InputStream)].
-
-Such configuration as usually used with Spring-DM or Blueprint support for the Configuration Admin service, as in the following example, but using plain OSGi APIs will of course work the same way:
-
-{code:lang=xml}
-<bean ...>
-    <property name="propertyName" value="${myProperty}" />
-</bean>
-
-<osgix:cm-properties id="cmProps" persistent-id="com.foo.bar">
-    <prop key="myProperty">myValue</prop>
-</osgix:cm-properties>
-<ctx:property-placeholder properties-ref="cmProps" />
-{code}
-
-There may also be cases where you want to make the properties from multiple configuration files available to your bundle context. This is something you may
-want to do if you have a multi-bundle application where there are application properties used by multiple bundles, and each bundle has its own specific
-properties. In that case, {{<ctx:property-placeholder>}} won't work as it was designed to make only one configuration file available to a bundle context.
- To make more than one configuration file available to your bundle-context you would do something like this:
-
-{code:lang=xml}
-<beans:bean id="myBundleConfigurer"
-            class="org.springframework.beans.factory.config.PropertyPlaceholderConfig">
-    <beans:property name="ignoreUnresolvablePlaceholders" value="true"/>
-    <beans:property name="propertiesArray">
-        <osgix:cm-properties id="myAppProps" persistent-id="myApp.props"/>
-        <osgix:cm-properties id="myBundleProps" persistent-id="my.bundle.props"/>
-    </beans:property>
-</beans:bean>
-{code}
-
-In this example, we are using SpringDM with osgi as the primary namespace. Instead of using ctx:context-placeholder we are using the "PropertyPlaceholderConfig"
-class. Then we are passing in a beans array and inside of that array is where we set our osgix:cm-properties elements. This element "returns" a properties bean.
-
-For more information about using the Configuration Admin service in Spring-DM, see the [Spring-DM documentation|http://static.springframework.org/osgi/docs/1.2.0-m2/reference/html/compendium.html#compendium:cm:props].
-
-h3. Configuration files
-
-In certain cases it is needed not only to provide configurations for the configuration admin service but to add additional
-configuration files e.g. a configuration file for jetty (jetty.xml). It even might be helpful to deploy a configuration
-file instead of a configuration for the config admin service since. To achieve this the attribute {{finalname}} shows the
-final destination of the {{configfile}}, while the value references the Maven artifact to deploy.
-
-{code}
-<configfile finalname="/etc/jetty.xml">mvn:org.apache.karaf/apache-karaf/${project.version}/xml/jettyconfig</configfile>
-{code}
-
-
-h3. Feature resolver
-
-The resolver attribute on a feature can be set to force the use of a given resolver instead of the default resolution process.  A resolver will be use to obtain the list of bundles to actually install for a given feature.
-The default resolver will simply return the list of bundles provided in the feature description.
-The OBR resolver can be installed and used instead of the standard one.  In that case, the resolver will use the OBR service
-to determine the list of bundles to install (bundles flagged as dependency will only be used as possible candidates to solve
-various constraints).
-
-h2. Commands
-
-h3. Repository management
-
-The following commands can be used to manage the list of descriptors known by Karaf.  They use URLs pointing to features descriptors.  These URLs can use any protocol known to the Apache Karaf, the most common ones being http, file and mvn.
-
-{code}
-features:addUrl      Add a list of repository URLs to the features service
-features:removeUrl   Remove a list of repository URLs from the features service
-features:listUrl     Display the repository URLs currently associated with the features service.
-features:refreshUrl  Reload the repositories to obtain a fresh list of features
-{code}
-
-Karaf maintains a persistent list of these repositories so that if you add one URL and restart Karaf, the features will still be available.
-
-The {{refreshUrl}} command is mostly used when developing features descriptors: when changing the descriptor, it can be
-handy to reload it in the Kernel without having to restart it or to remove then add the URL again.
-
-h3. Features management
-
-{code}
-features:install
-features:uninstall
-features:list
-{code}
-
-h3. Examples
-
-1. Install features using mvn handler
-{code}
-features:addUrl mvn:org.apache.servicemix.nmr/apache-servicemix-nmr/1.0.0-m2/xml/features
-features:install nmr
-{code}
-
-2. Use file handler to deploy features file
-{code}
-features:addUrl file:base/features/features.xml
-{code}
-
-Note: The path is relative to the Apache Karaf installation directory
-
-3. Deploy bundles from file system without using Maven
-
-As we can use file:// as protocol handler to deploy bundles, you can use the following syntax to deploy bundles when they are 
-located in a directory which is not available using Maven
-
-{code:xml}
-<features xmlns="http://karaf.apache.org/xmlns/features/v1.0.0">
-   <feature name="spring-web" version="2.5.6.SEC01">
-      <bundle>file:base/bundles/spring-web-2.5.6.SEC01.jar</bundle>
-   </feature>
-</features>
-{code}
-
-Note: The path is relative to the Apache Karaf installation directory
-
-h2. Service configuration
-
-A simple configuration file located in {{etc/org.apache.karaf.features.cfg}} can be modified to customize the behavior when starting the Kernel for the first time.
-This configuration file contains two properties:
-* {{featuresBoot}}: a comma separated list of features to install at startup
-* {{featuresRepositories}}: a comma separated list of feature repositories to load at startup
-
-This configuration file is of interest if you plan to distribute a customized Karaf distribution having pre-installed features.  Such a process is detailed in the [building custom distributions|customer-distribution] section.
-
-
diff --git a/karaf-2.3.x/manual/src/main/webapp/users-guide/remote-console.conf b/karaf-2.3.x/manual/src/main/webapp/users-guide/remote-console.conf
deleted file mode 100644
index 8f737f1..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/users-guide/remote-console.conf
+++ /dev/null
@@ -1,115 +0,0 @@
-h1. Using remote instances
-
-h2. Configuring remote instances
-
-It does not always make sense to manage an instance of Karaf using its local console. You can manage Karaf remotely using a remote console.
-
-When you start Karaf, it enables a remote console that can be accessed over SSH from any other Karaf console or plain SSH client.  The remote console provides all the features of the local console and gives a remote user complete control over the container and services running inside of it.
-
-The SSH hostname and port number is configured in the {{etc/org.apache.karaf.shell.cfg}} configuration file with the following default values:
-
-{code}
-sshPort=8101
-sshHost=0.0.0.0
-sshRealm=karaf
-hostKey=${karaf.base}/etc/host.key
-{code}
-
-You can change this configuration using the [config commands|configuration] or by editing the above file, but you'll need to restart the ssh console in order for it to use the new parameters.
-
-{code}
-# define helper functions
-bundle-by-sn = { bm = new java.util.HashMap ;  each (bundles) { $bm put ($it symbolicName) $it } ; $bm get $1 }
-bundle-id-by-sn = { b = (bundle-by-sn $1) ; if { $b } { $b bundleId } { -1 } }
-# edit config
-config:edit org.apache.karaf.shell
-config:propset sshPort 8102
-config:update 
-# force a restart
-osgi:restart --force (bundle-id-by-sn org.apache.karaf.shell.ssh)
-{code}
-
-h2. Connecting and disconnecting remotely
-
-h3. Using the {{ssh:ssh}} command
-
-You can connect to a remote Karaf's console using the [{{ssh:ssh}}|/commands/ssh-ssh] command.
-
-{code}
-karaf@root> ssh:ssh -l karaf -P karaf -p 8101 hostname
-{code}
-
-{warning}
-The default password is {{karaf}} but we recommend changing it. See the [security] section for more informations.
-{warning}
-
-To confirm that you have connected to the correct Karaf instance, type [{{shell:info}}|/commands/shell-info] at the {{karaf>}} prompt. Information about the currently connected instance is returned, as shown.
-
-{code}
-Karaf
-  Karaf home                  /local/apache-karaf-2.0.0
-  Karaf base                  /local/apache-karaf-2.0.0
-  OSGi Framework              org.eclipse.osgi - 3.5.1.R35x_v20090827
-JVM
-  Java Virtual Machine        Java HotSpot(TM) Server VM version 14.1-b02
-  ...
-{code}
-
-h3. Using the Karaf client
-
-The Karaf client allows you to securely connect to a remote Karaf instance without having to launch a Karaf instance locally.
-
-For example, to quickly connect to a Karaf instance running in server mode on the same machine, run the following command:
-{code}
-bin/client
-{code}
-
-More commonly, you would provide a hostname, port, username and password to connect to a remote instance.  And, if you were using the client within a larger script, you could append console commands as follows:
-{code}
-bin/client -a 8101 -h hostname -u karaf -p karaf features:install wrapper
-{code}
-
-To display the available options for the client, type:
-{code}
-> bin/client --help
-Apache Karaf client
-  -a [port]     specify the port to connect to
-  -h [host]     specify the host to connect to
-  -u [user]     specify the user name
-  -p [password] specify the password
-  --help        shows this help message
-  -v            raise verbosity
-  -r [attempts] retry connection establishment (up to attempts times)
-  -d [delay]    intra-retry delay (defaults to 2 seconds)
-  [commands]    commands to run
-If no commands are specified, the client will be put in an interactive mode
-{code}
-
-h3. Using a plain SSH client
-
-You can also connect using a plain SSH client from your *nix system or Windows SSH client like Putty.
-{code}
-~$ ssh -p 8101 karaf@localhost
-karaf@localhost's password: 
-{code}
-
-h3. Disconnecting from a remote console
-
-To disconnect from a remote console, press {{Ctrl+D}}, {{shell:logout}} or simply {{logout}} at the Karaf prompt.
-
-h2. Stopping a remote instance
-
-h3. Using the remote console 
-
-If you have connected to a remote console using the [{{ssh:ssh}}|/commands/ssh-ssh] command or the Karaf client, you can stop the remote instance using the [{{osgi:shutdown}}|/commands/osgi-shutdown] command.
-
-{info}
-Pressing {{Ctrl+D}} in a remote console simply closes the remote connection and returns you to the local shell.
-{info}
-
-h3. Using the Karaf client
-
-To stop a remote instance using the Karaf client, run the following from the {{lib}} directory:
-{code}
-bin/client -u karaf -p karaf -a 8101 hostname osgi:shutdown
-{code}
diff --git a/karaf-2.3.x/manual/src/main/webapp/users-guide/security.conf b/karaf-2.3.x/manual/src/main/webapp/users-guide/security.conf
deleted file mode 100644
index 482f633..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/users-guide/security.conf
+++ /dev/null
@@ -1,83 +0,0 @@
-h1. Security
-
-h2. Managing users and passwords
-
-The default security configuration uses a property file located at {{etc/users.properties}} to store authorized users and their passwords.
-
-The default user name is {{karaf}} and the associated password is {{karaf}} too.  We strongly encourage you to change the default password by editing the above file before moving Karaf into production.
-
-The users are currently used in three different places in Karaf:
-* access to the SSH console
-* access to the JMX management layer
-* access to the Web console
-Those three ways all delegate to the same JAAS based security authentication.
-
-The {{users.properties}} file contains one or more lines, each line defining a user, its password and the associated roles.
-
-{code}
-user=password[,role][,role]...
-{code}
-
-h2. Managing roles
-
-JAAS roles can be used by various components. The three management layers (SSH, JMX and WebConsole) all use a global role based authorization system. The default role name is configured in the {{etc/system.properties}} using the {{karaf.admin.role}} system property and the default value is {{admin}}. All users authenticating for the management layer must have this role defined.
-
-The syntax for this value is the following:
-{code}
-[classname:]principal
-{code}
-where classname is the class name of the principal object (defaults to org.apache.karaf.jaas.modules.RolePrincipal) and principal is the name of the principal of that class (defaults to admin).
-
-Note that roles can be changed for a given layer using ConfigAdmin in the following configurations:
-|| Layer || PID                        || Value  ||
-| SSH     | org.apache.karaf.shell      | sshRole |
-| JMX     | org.apache.karaf.management | jmxRole |
-| Web     | org.apache.karaf.webconsole | role    |
-
-h2. Enabling password encryption
-
-In order to not keep the passwords in plain text, the passwords can be stored encrypted in the configuration file.
-This can be easily enabled using the following commands:
-
-{code}
-# edit config
-config:edit org.apache.karaf.jaas
-config:propset encryption.enabled true
-config:update 
-# force a restart
-dev:restart
-{code}
-
-The passwords will be encrypted automatically in the {{etc/users.properties}} configuration file the first time the user logs in.
-Encrypted passwords are prepended with {{\{CRYPT\}}} so that are easy to recognize.
-
-h2. Managing realms
-
-More information about modifying the default realm or deploying new realms is provided in the [developers guide|/developers-guide/security-framework].
-
-h2. Deploying security providers
-
-Some applications require specific security providers to be available, such as [BouncyCastle|http://www.bouncycastle.org].  The JVM impose some restrictions about the use of such jars: they have to be signed and be available on the boot classpath.  One way to deploy those providers is to put them in the JRE folder at {{$JAVA_HOME/jre/lib/ext}} and modify the security policy configuration ({{$JAVA_HOME/jre/lib/security/java.security}}) in order to register such providers.
-
-While this approach works fine, it has a global effect and requires you to configure all your servers accordingly.
-
-Karaf offers a simple way to configure additional security providers:
-* put your provider jar in {{lib/ext}}
-* modify the {{etc/config.properties}} configuration file to add the following property
-
-{code}
-org.apache.karaf.security.providers = xxx,yyy
-{code}
-
-The value of this property is a comma separated list of the provider class names to register.
-For example:
-{code}
-org.apache.karaf.security.providers = org.bouncycastle.jce.provider.BouncyCastleProvider
-{code}
-
-In addition, you may want to provide access to the classes from those providers from the system bundle so that all bundles can access those.  It can be done by modifying the {{org.osgi.framework.bootdelegation}} property in the same configuration file:
-{code}
-org.osgi.framework.bootdelegation = ...,org.bouncycastle*
-{code}
-
-
diff --git a/karaf-2.3.x/manual/src/main/webapp/users-guide/start-stop.conf b/karaf-2.3.x/manual/src/main/webapp/users-guide/start-stop.conf
deleted file mode 100644
index 250dd19..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/users-guide/start-stop.conf
+++ /dev/null
@@ -1,107 +0,0 @@
-h1. Starting and Stopping Karaf
-
-This chapter describes how to start and stop Apache Karaf and the various options that are available.
-
-h2. Starting Karaf
-
-h3. On Windows
-
-From a console window, change to the installation directory and run {{Karaf}}. For the binary distribution, go to
-{code}
-cd [karaf_install_dir]
-{code}
-where {{karaf_install_dir}} is the directory in which Karaf was installed, e.g., {{c:\Program Files\apache-karaf-x.y}}.
-
-Then type:
-{code}
-bin\karaf.bat
-{code}
-
-h3. On Unix
-
-From a command shell, change to the installation directory and run {{Karaf}}. For the binary distribution, go to
-{code}
-cd [karaf_install_dir]
-{code}
-where {{karaf_install_dir}} is the directory in which Karaf was installed, e.g., {{/usr/local/apache-karaf-x.y}}.
-
-Then type:
-{code}
-bin/karaf
-{code}
-
-{warning:title=Warning}
-Do NOT close the console or shell in which Karaf was started, as that will terminate Karaf (unless Karaf was started with nohup).
-{warning}
-
-h2. Starting Karaf without console
-
-Karaf can be started without the console if you don't intend to use it (one can always connect using the remote ssh access) using the following command:
-{code}
-bin\karaf.bat server
-{code}
-or, on Unix:
-{code}
-bin\karaf server
-{code}
-
-h2. Starting Karaf in the background
-
-Karaf can be easily started as a background process using the following command:
-{code}
-bin\start.bat
-{code}
-or, on Unix:
-{code}
-bin\start
-{code}
-
-h2. Starting Karaf from clean
-
-Karaf can be reset to a clean state by simply deleting the {{data}} folder.
-For convenience, a parameter on the {{karaf}} and {{start}} scripts is available:
-{code}
-bin/start clean
-{code}
-
-h2. Stopping Karaf
-
-For both Windows and Unix installations, you can perform a clean shutdown of Karaf by using the following command when inside a Karaf console:
-{code}
-system:shutdown
-{code}
-or simply:
-{code}
-shutdown
-{code}
-
-The shutdown command asks you to confirm that you really want to shutdown. If you are sure about the shutdown and avoid the confirmation message, you can use the -f or --force option:
-
-{code}
-system:shutdown -f
-{code}
-
-It's also possible to delay the shutdown using the time argument. The time argument can have different formats. First, it can be an absolute time in the format hh:mm, in which hh is the hour (1 or 2 digits) and mm is the minute of the hour (in two digits). Second, it can be in the format +m, in which m is the number of minutes to wait. The work now is an alias for +0.
-
-The following command will shutdown Karaf at 10:35am:
-
-{code}
-system:shutdown 10:35
-{code}
-
-The following command will shutdown Karaf in 10 minutes:
-
-{code}
-system:shutdown +10
-{code}
-
-If you're running from the main console, exiting the shell using {{logout}} or {{Ctrl+D}} will also terminate the Karaf instance.
-
-From a command shell, you can run the following command:
-{code}
-bin\stop.bat
-{code}
-or, on Unix:
-{code}
-bin/stop
-{code}
diff --git a/karaf-2.3.x/manual/src/main/webapp/users-guide/using-console.conf b/karaf-2.3.x/manual/src/main/webapp/users-guide/using-console.conf
deleted file mode 100644
index 09b4072..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/users-guide/using-console.conf
+++ /dev/null
@@ -1,99 +0,0 @@
-h1. Using the console
-
-h2. Viewing available commands
-
-To see a list of the available commands in the console press the {{<tab>}} key at the prompt.
-
-{code}
-root@root> Display all 182 possibilities? (y or n)
-*:help                           addurl                           admin:change-opts
-admin:change-rmi-registry-port   admin:change-ssh-port            admin:connect
-admin:create                     admin:destroy                    admin:list
-admin:rename                     admin:start                      admin:stop
-bundle-level                     cancel                           cat
-change-opts                      change-rmi-registry-port         change-ssh-port
-clear                            commandlist                      config:cancel
-config:edit                      config:list                      config:propappend
-config:propdel                   config:proplist                  config:propset
-config:update                    connect                          create
-create-dump                      destroy                          dev:create-dump
-dev:dynamic-import               dev:framework                    dev:print-stack-traces
-dev:restart                      dev:show-tree                    dev:watch
-display                          display-exception                dynamic-import
-each                             echo                             edit
-exec                             exports                          features:addurl
-features:info                    features:install                 features:list
-features:listrepositories        features:listurl                 features:listversions
-features:refreshurl              features:removerepository        features:removeurl
-features:uninstall               framework                        get
-grep                             head                             headers
-help                             history                          if
-imports                          info                             install
-jaas:cancel                      jaas:commandlist                 jaas:list
-jaas:manage                      jaas:roleadd                     jaas:roledel
-jaas:update                      jaas:useradd                     jaas:userdel
-jaas:userlist                    java                             list
-listrepositories                 listurl                          listversions
-log:clear                        log:display                      log:display-exception
-log:get                          log:set                          log:tail
-logout                           ls                               manage
-more                             new                              osgi:bundle-level
-osgi:headers                     osgi:info                        osgi:install
-osgi:list                        osgi:ls                          osgi:refresh
-osgi:resolve                     osgi:restart                     osgi:shutdown
-osgi:start                       osgi:start-level                 osgi:stop
-osgi:uninstall                   osgi:update                      packages:exports
-packages:imports                 print-stack-traces               printf
-propappend                       propdel                          proplist
-propset                          refresh                          refreshurl
-removerepository                 removeurl                        rename
-resolve                          restart                          roleadd
-roledel                          set                              shell:cat
-shell:clear                      shell:each                       shell:echo
-shell:exec                       shell:grep                       shell:head
-shell:history                    shell:if                         shell:info
-shell:java                       shell:logout                     shell:more
-shell:new                        shell:printf                     shell:sleep
-shell:sort                       shell:tac                        shell:tail
-show-tree                        shutdown                         sleep
-sort                             ssh                              ssh:ssh
-ssh:sshd                         sshd                             start
-start-level                      stop                             tac
-tail                             uninstall                        update
-useradd                          userdel                          userlist
-watch
-root@root>
-{code}
-
-The {{<tab>}} key toggles autocompletion anywhere on the line, so if you want to see the commands in the {{osgi}} group, type the first letters and hit {{<tab>}}.  Depending on the commands, autocompletion may be available for options and arguments too.
-
-h2. Getting help for a command
-
-To view help on a particular command, type the command followed by {{--help}} or use the {{help}} command followed by the name of the command:
-
-{code}
-karaf@root> features:list --help
-DESCRIPTION
-        features:list
-
-        Lists all existing features available from the defined repositories.
-
-SYNTAX
-        features:list [options]
-
-OPTIONS
-        --help
-                       Display this help message
-        -i, --installed
-                       Display a list of all installed features only
-{code}
-
-
-h2. More...
-
-The list of all available commands and their usage is also available in a [dedicated section|/commands/commands].
-
-You'll find a more in-depth guide to the shell syntax in the [developers guide|/developers-guide/shell-syntax].
-
-The console can also be easily extended by creating new commands as explained in the [developers guide|/developers-guide/extending-console].
-
diff --git a/karaf-2.3.x/manual/src/main/webapp/users-guide/web-applications.conf b/karaf-2.3.x/manual/src/main/webapp/users-guide/web-applications.conf
deleted file mode 100644
index 3f4fbb4..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/users-guide/web-applications.conf
+++ /dev/null
@@ -1,99 +0,0 @@
-
-h1. Web applications
-
-h2. Installing war support
-
-The following steps will install the "war" feature (support for deploying WAR files with Servlet and JSPs into a Jetty server) into your Karaf instance.
-# List the available features -
-{noformat}
-karaf@root> features:list 
- State        Name
-. . .
-[uninstalled] [2.2.0] obr        karaf-2.2.0
-[uninstalled] [2.2.0] config     karaf-2.2.0
-[uninstalled] [2.2.0] http       karaf-2.2.0
-[uninstalled] [2.2.0] war        karaf-2.2.0
-[uninstalled] [2.2.0] webconsole karaf-2.2.0
-[installed  ] [2.2.0] ssh        karaf-2.2.0
-. . .
-{noformat}
-# Install the war feature (and the sub-features it requires) -
-{noformat}
-karaf@root> features:install war 
-{noformat}
-Note: you can use the -v or --verbose to see exactly what Karaf does
-{noformat}
-karaf@root> features:install -v war
-Installing feature war 2.1.99-SNAPSHOT
-Installing feature http 2.1.99-SNAPSHOT
-Installing feature jetty 7.1.6.v20100715
-Installing bundle mvn:org.apache.geronimo.specs/geronimo-servlet_2.5_spec/1.1.2
-Found installed bundle: org.apache.servicemix.bundles.asm [10]
-Installing bundle mvn:org.eclipse.jetty/jetty-util/7.1.6.v20100715
-Installing bundle mvn:org.eclipse.jetty/jetty-io/7.1.6.v20100715
-Installing bundle mvn:org.eclipse.jetty/jetty-http/7.1.6.v20100715
-Installing bundle mvn:org.eclipse.jetty/jetty-continuation/7.1.6.v20100715
-Installing bundle mvn:org.eclipse.jetty/jetty-server/7.1.6.v20100715
-Installing bundle mvn:org.eclipse.jetty/jetty-security/7.1.6.v20100715
-Installing bundle mvn:org.eclipse.jetty/jetty-servlet/7.1.6.v20100715
-Installing bundle mvn:org.eclipse.jetty/jetty-xml/7.1.6.v20100715
-Checking configuration file mvn:org.apache.karaf/apache-karaf/2.1.99-SNAPSHOT/xml/jettyconfig
-Installing bundle mvn:org.ops4j.pax.web/pax-web-api/0.8.2-SNAPSHOT
-Installing bundle mvn:org.ops4j.pax.web/pax-web-spi/0.8.2-SNAPSHOT
-Installing bundle mvn:org.ops4j.pax.web/pax-web-runtime/0.8.2-SNAPSHOT
-Installing bundle mvn:org.ops4j.pax.web/pax-web-jetty/0.8.2-SNAPSHOT
-Installing bundle mvn:org.ops4j.pax.web/pax-web-jsp/0.8.2-SNAPSHOT
-Installing bundle mvn:org.ops4j.pax.web/pax-web-extender-war/0.8.2-SNAPSHOT
-Installing bundle mvn:org.ops4j.pax.web/pax-web-extender-whiteboard/0.8.2-SNAPSHOT
-Installing bundle mvn:org.ops4j.pax.web/pax-web-deployer/0.8.2-SNAPSHOT
-Installing bundle mvn:org.ops4j.pax.url/pax-url-war/1.2.4
-{noformat}
-# Verify the features were installed
-{noformat}
-servicemix> features/list
- State        Name
-. . .
-[installed ] [2.2.0] http karaf-2.2.0
-[installed ] [2.2.0] war  karaf-2.2.0
-. . .
-{noformat}
-# Verify the installed bundles were started
-{noformat}
-karaf@root> osgi:list 
-START LEVEL 100
-   ID   State         Level  Name
-. . .
-[ 32] [Active ] [ ] [ 60] geronimo-servlet_2.5_spec (1.1.2) 
-[ 33] [Active ] [ ] [ 60] Apache ServiceMix :: Bundles :: jetty (6.1.22.2) 
-[ 34] [Active ] [ ] [ 60] OPS4J Pax Web - API (1.0.0)
-[ 35] [Active ] [ ] [ 60] OPS4J Pax Web - Service SPI (1.0.0)
-[ 36] [Active ] [ ] [ 60] OPS4J Pax Web - Runtime (1.0.0)
-[ 37] [Active ] [ ] [ 60] OPS4J Pax Web - Jetty (1.0.0)
-[ 38] [Active ] [ ] [ 60] OPS4J Pax Web - Jsp Support (1.0.0)
-[ 39] [Active ] [ ] [ 60] OPS4J Pax Web - Extender - WAR (1.0.0)
-[ 40] [Active ] [ ] [ 60] OPS4J Pax Web - Extender - Whiteboard (1.0.0)
-[ 42] [Active ] [ ] [ 60] OPS4J Pax Web - FileInstall Deployer (1.0.0)
-[ 41] [Active ] [ ] [ 60] OPS4J Pax Url - war:, war-i: (1.2.4)
-. . .
-{noformat}
-# The Jetty server should now be listening on http://localhost:8181/, but with no published applications available.
-{noformat}
-HTTP ERROR: 404
-NOT_FOUND
-RequestURI=/
-Powered by jetty://
-{noformat}
-
-h2. Deploying a WAR to the installed web feature
-
-The following steps will describe how to install a simple WAR file (with JSPs or Servlets) to the just installed web feature.
-# To deploy a WAR (JSP or Servlet) to Jetty, update its MANIFEST.MF to include the required OSGi headers as described here - \\
-[http://team.ops4j.org/wiki/display/ops4j/Pax+Web+Extender+-+War+-+OSGi-fy]
-# Copy the updated WAR (archive or extracted files) to the _deploy_ directory.
-
-If you want to deploy a sample web application into Karaf, you could use the following command:
-{code}
-karaf@root> osgi:install -s webbundle:http://tomcat.apache.org/tomcat-5.5-doc/appdev/sample/sample.war?Bundle-SymbolicName=tomcat-sample&Webapp-Context=/sample
-{code}
-
-Then open your web browser and point to {{http://localhost:8181/sample/index.html}}.
diff --git a/karaf-2.3.x/manual/src/main/webapp/users-guide/web-console.conf b/karaf-2.3.x/manual/src/main/webapp/users-guide/web-console.conf
deleted file mode 100644
index dce1abe..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/users-guide/web-console.conf
+++ /dev/null
@@ -1,35 +0,0 @@
-h1. Web console
-
-The Karaf web console provides a graphical overview of the runtime.
-You can use it to:
-* install and uninstall features
-* start, stop, install bundles
-* create child instances
-* configure Karaf
-* view logging informations
-
-h2. Installing the web console
-
-The web console is not installed by default.  To install it, run the following command from the Karaf prompt:
-
-{code}
-root@karaf> features:install webconsole
-{code}
-
-h2. Accessing the web console
-
-To access the console for an instance of Karaf running locally, enter the following address in your web browser:
-
-{code}
-http://localhost:8181/system/console
-{code}
-
-Log in with the username {{karaf}} and the password {{karaf}}.  If you have changed the default user or password, use the one you have configured.
-
-h2. Changing the web console port number
-
-By default, the console runs on port 8181. You can change the port number by creating the properties file, {{etc/org.ops4j.pax.web.cfg}}, and adding the following property setting (changing the port number to whatever value desired):
-
-{code}
-org.osgi.service.http.port=8181
-{code}
diff --git a/karaf-2.3.x/manual/src/main/webapp/users-guide/wrapper.conf b/karaf-2.3.x/manual/src/main/webapp/users-guide/wrapper.conf
deleted file mode 100644
index 53821e2..0000000
--- a/karaf-2.3.x/manual/src/main/webapp/users-guide/wrapper.conf
+++ /dev/null
@@ -1,126 +0,0 @@
-h1. Service Wrapper
-
-h2. Introduction
-
-The Karaf Wrapper (for service wrapper) makes it possible to install Karaf as a Windows Service. Likewise, the scripts shipped with Karaf also make it very easy to install Karaf as a daemon process on Unix systems.
-
-The Wrapper correctly handles "user's log outs" under Windows, service dependencies, and the ability to run services which interact with the desktop.
-
-h2. Supported platforms
-
-The following platforms are supported by the Karaf Wrapper:
-* AIX
-* FreeBSD
-* HP-UX, 32-bit and 64-bit versions
-* SGI Irix
-* Linux kernels 2.2.x, 2.4.x, 2.6.x. Known to work with Debian, Ubuntu, and Red Hat, but should work with any distribution. Currently supported on both 32-bit and 64-bit x86, Itanium, and PPC systems.
-* Macintosh OS X
-* Sun OS, Solaris 9 and 10. Currently supported on both 32-bit and 64-bit sparc, and x86 systems.
-* Windows - Windows 2000, XP, 2003, Vista, 2008 and Windows 7. Currently supported on both 32-bit and 64-bit x86 and Itanium systems. Also known to run on Windows 98 and ME, however due the lack of support for services in the OS, the Wrapper can be run only in console mode.
-
-h2. Installation
-
-Karaf Wrapper is an optional feature. To install it, simply type:
-
-{code}
-karaf@root> features:install wrapper
-{code}
-
-Once installed, wrapper feature will provide {{wrapper:install}} new command in the Karaf shell:
-
-{code}
-karaf@root> wrapper:install --help
-DESCRIPTION
-        wrapper:install
-
-        Install the container as a system service in the OS.
-
-SYNTAX
-        wrapper:install [options]
-
-OPTIONS
-        -s, --start-type
-                Mode in which the service is installed. AUTO_START or DEMAND_START (Default: AUTO_START)
-                (defaults to AUTO_START)
-        --help
-                Display this help message
-        -n, --name
-                The service name that will be used when installing the service. (Default: karaf)
-                (defaults to karaf)
-        -d, --display
-                The display name of the service.
-        -D, --description
-                The description of the service.
-                (defaults to )
-{code}
-
-Using {{wrapper:install}}, you can install Karaf as a service.
-
-For instance, to register Karaf as a service (depending of the running OS), in automatic start mode, simply type:
-
-{code}
-karaf@root> wrapper:install -s AUTO_START -n KARAF -d Karaf -D "Karaf Service"
-{code}
-
-For instance, on Linux, {{wrapper:install}} command will do:
-
-{code}
-karaf@root> wrapper:install -s AUTO_START -n KARAF -d Karaf -D "Karaf Service"
-Creating file: /home/onofreje/apache-karaf-2.1.3/bin/KARAF-wrapper
-Creating file: /home/onofreje/apache-karaf-2.1.3/bin/KARAF-service
-Creating file: /home/onofreje/apache-karaf-2.1.3/etc/KARAF-wrapper.conf
-Creating file: /home/onofreje/apache-karaf-2.1.3/lib/libwrapper.so
-Creating file: /home/onofreje/apache-karaf-2.1.3/lib/karaf-wrapper.jar
-Creating file: /home/onofreje/apache-karaf-2.1.3/lib/karaf-wrapper-main.jar
-
-Setup complete.  You may wish to tweak the JVM properties in the wrapper configuration file:
-        /home/onofreje/apache-karaf-2.1.3/etc/KARAF-wrapper.conf
-before installing and starting the service.
-
-The way the service is installed depends upon your flavor of Linux.
-
-On Redhat/Fedora/CentOS Systems:
-  To install the service:
-    $ ln -s /home/onofreje/apache-karaf-2.1.3/bin/KARAF-service /etc/init.d/
-    $ chkconfig KARAF-service --add
-
-  To start the service when the machine is rebooted:
-    $ chkconfig KARAF-service on
-
-  To disable starting the service when the machine is rebooted:
-    $ chkconfig KARAF-service off
-
-  To start the service:
-    $ service KARAF-service start
-
-  To stop the service:
-    $ service KARAF-service stop
-
-  To uninstall the service :
-    $ chkconfig KARAF-service --del
-    $ rm /etc/init.d/KARAF-service
-
-On Ubuntu/Debian Systems:
-  To install the service:
-    $ ln -s /home/onofreje/apache-karaf-2.1.3/bin/KARAF-service /etc/init.d/
-
-  To start the service when the machine is rebooted:
-    $ update-rc.d KARAF-service defaults
-
-  To disable starting the service when the machine is rebooted:
-    $ update-rc.d -f KARAF-service remove
-
-  To start the service:
-    $ /etc/init.d/KARAF-service start
-
-  To stop the service:
-    $ /etc/init.d/KARAF-service stop
-
-  To uninstall the service :
-    $ rm /etc/init.d/KARAF-service
-
-h2. Configuration Hints
-
-If you need to append parameters to the "java" invoke (like memory configurations) you add those in the KARAF-wrapper file using "wrapper.java.additional.n=PARAMETER" where "n" is the number of the additional config (typically you simply look for the last entry and use n+1) and PARAMTER is any JVM parameter you would like to append, such as "-XX:MaxPermSize=1024m".
-
-{code}
diff --git a/karaf-2.3.x/pom.xml b/karaf-2.3.x/pom.xml
deleted file mode 100644
index b42d7fd..0000000
--- a/karaf-2.3.x/pom.xml
+++ /dev/null
@@ -1,1716 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache</groupId>
-        <artifactId>apache</artifactId>
-        <version>12</version>
-        <relativePath />
-    </parent>
-
-    <groupId>org.apache.karaf</groupId>
-    <artifactId>karaf</artifactId>
-    <packaging>pom</packaging>
-    <version>2.3.1</version>
-    <name>Apache Karaf</name>
-    <inceptionYear>2007</inceptionYear>
-
-    <modules>
-        <module>util</module>
-        <module>main</module>
-        <module>features</module>
-        <module>admin</module>
-        <module>deployer</module>
-        <module>shell</module>
-        <module>jaas</module>
-        <module>client</module>
-        <module>management</module>
-        <module>webconsole</module>
-        <module>exception</module>
-        <module>assemblies</module>
-        <module>demos</module>
-        <module>tooling</module>
-        <module>archetypes</module>
-        <module>diagnostic</module>
-        <module>itests</module>
-    </modules>
-
-    <scm>
-        <connection>scm:svn:http://svn.apache.org/repos/asf/karaf/tags/karaf-2.3.1</connection>
-        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/karaf/tags/karaf-2.3.1</developerConnection>
-        <url>http://svn.apache.org/viewvc/karaf/tags/karaf-2.3.1</url>
-    </scm>
-
-    <issueManagement>
-        <system>jira</system>
-        <url>https://issues.apache.org/jira/browse/KARAF</url>
-    </issueManagement>
-
-    <mailingLists>
-        <mailingList>
-            <name>Karaf Dev</name>
-            <subscribe>dev-subscribe@karaf.apache.org</subscribe>
-            <unsubscribe>dev-unsubscribe@karaf.apache.org</unsubscribe>
-            <post>-</post>
-            <archive>http://www.mail-archive.com/dev%karaf.apache.org/</archive>
-        </mailingList>
-        <mailingList>
-            <name>Karaf User</name>
-            <subscribe>user-subscribe@karaf.apache.org</subscribe>
-            <unsubscribe>user-unsubscribe@karaf.apache.org</unsubscribe>
-            <post>-</post>
-            <archive>http://www.mail-archive.com/user%40karaf.apache.org/</archive>
-        </mailingList>
-        <mailingList>
-            <name>Karaf Commits</name>
-            <subscribe>commits-subscribe@karaf.apache.org</subscribe>
-            <unsubscribe>commits-unsubscribe@karaf.apache.org</unsubscribe>
-            <post>-</post>
-            <archive>http://www.mail-archive.com/commits%40karaf.apache.org/</archive>
-        </mailingList>
-        <mailingList>
-            <name>Karaf Issues</name>
-            <subscribe>issues-subscribe@karaf.apache.org</subscribe>
-            <unsubscribe>issues-unsubscribe@karaf.apache.org</unsubscribe>
-            <post>-</post>
-            <archive>http://www.mail-archive.com/issues%40karaf.apache.org/</archive>
-        </mailingList>
-    </mailingLists>
-
-    <prerequisites>
-        <maven>2.2.1</maven>
-    </prerequisites>
-
-    <properties>
-        <aopalliance.bundle.version>1.0_6</aopalliance.bundle.version>
-        <asm.version>4.1</asm.version>
-        <bndlib.version>1.50.0</bndlib.version>
-        <cglib.bundle.version>2.2.2_1</cglib.bundle.version>
-        <commons-beanutils.version>1.8.3</commons-beanutils.version>
-        <commons-codec.version>1.7</commons-codec.version>
-        <commons-collections.version>3.2.1</commons-collections.version>
-        <commons-compress.version>1.4.1</commons-compress.version>
-        <commons-fileupload.version>1.2.2</commons-fileupload.version>
-        <commons-io.version>2.4</commons-io.version>
-        <commons-lang.version>2.6</commons-lang.version>
-        <injection.bundle.version>1.0</injection.bundle.version>
-        <jasypt.bundle.version>1.9.0_1</jasypt.bundle.version>
-        <jetty.version>7.6.8.v20121106</jetty.version>
-        <junit.version>4.10</junit.version>
-        <junit.bundle.version>4.10_1</junit.bundle.version>
-        <geronimo.jms-spec.version>1.1.1</geronimo.jms-spec.version>
-        <geronimo.jpa-spec.version>1.1</geronimo.jpa-spec.version>
-        <geronimo.jta-spec.version>1.1.1</geronimo.jta-spec.version>
-        <geronimo.servlet.version>1.2</geronimo.servlet.version>
-        <easymock.version>3.1</easymock.version>
-        <equinox.version>3.8.0.v20120529-1548</equinox.version>
-        <felix.bundlerepository.version>1.6.6</felix.bundlerepository.version>
-        <felix.configadmin.version>1.6.0</felix.configadmin.version>
-        <felix.fileinstall.version>3.2.6</felix.fileinstall.version>
-        <felix.framework.version>4.0.3</felix.framework.version>
-        <felix.gogo.version>0.10.0</felix.gogo.version>
-        <felix.plugin.version>2.3.7</felix.plugin.version>
-        <felix.utils.version>1.2.0</felix.utils.version>
-        <felix.webconsole.version>4.0.0</felix.webconsole.version>
-        <felix.metatype.version>1.0.6</felix.metatype.version>
-        <felix.eventadmin.version>1.3.2</felix.eventadmin.version>
-        <felix.eventadmin-plugin.version>1.0.2</felix.eventadmin-plugin.version>
-        <felix.obr.version>1.0.2</felix.obr.version>
-        <felix.scr.version>1.6.2</felix.scr.version>
-        <aries.application.version>1.0.0</aries.application.version>
-        <aries.application.api.version>1.0.0</aries.application.api.version>
-        <aries.application.management.version>1.0.0</aries.application.management.version>
-        <aries.blueprint.version>1.0.1</aries.blueprint.version>
-        <aries.blueprint.api.version>1.0.0</aries.blueprint.api.version>
-        <aries.blueprint.core.version>1.1.0</aries.blueprint.core.version>
-        <aries.blueprint.cm.version>1.0.1</aries.blueprint.cm.version>
-        <aries.jmx.api.version>1.1.0</aries.jmx.api.version>
-        <aries.jmx.core.version>1.1.1</aries.jmx.core.version>
-        <aries.jmx.blueprint.api.version>1.1.0</aries.jmx.blueprint.api.version>
-        <aries.jmx.blueprint.core.version>1.1.0</aries.jmx.blueprint.core.version>
-        <aries.jpa.version>1.0.1</aries.jpa.version>
-        <aries.jpa.api.version>1.0.0</aries.jpa.api.version>
-        <aries.jpa.container.version>1.0.0</aries.jpa.container.version>
-        <aries.jpa.container.context.version>1.0.1</aries.jpa.container.context.version>
-        <aries.jpa.blueprint.version>1.0.1</aries.jpa.blueprint.version>
-        <aries.jndi.version>1.0.0</aries.jndi.version>
-        <aries.jndi.api.version>1.0.0</aries.jndi.api.version>
-        <aries.proxy.version>1.0.1</aries.proxy.version>
-        <aries.proxy.api.version>1.0.0</aries.proxy.api.version>
-        <aries.transaction.version>1.0.1</aries.transaction.version>
-        <aries.transaction.manager.version>1.0.1</aries.transaction.manager.version>
-        <aries.transaction.blueprint.version>1.0.0</aries.transaction.blueprint.version>
-        <aries.transaction.jdbc.version>1.0.0</aries.transaction.jdbc.version>
-        <aries.util.version>1.1.0</aries.util.version>
-        <jansi.version>1.9</jansi.version>
-        <jline.version>2.9</jline.version>
-        <jsw.version>3.2.3</jsw.version>
-        <log4j.version>1.2.17</log4j.version>
-        <maven.version>2.0.9</maven.version>
-        <mina.version>2.0.7</mina.version>
-        <osgi.version>4.3.1</osgi.version>
-        <pax.base.version>1.4.0</pax.base.version>
-        <pax.exam.version>2.6.0</pax.exam.version>
-        <pax.logging.version>1.7.0</pax.logging.version>
-        <pax.runner.version>1.7.6</pax.runner.version>
-        <pax.url.version>1.3.5</pax.url.version>
-        <pax.web.version>1.1.12</pax.web.version>
-        <pax.swissbox.version>1.5.1</pax.swissbox.version>
-        <pax.tinybundles.version>1.3.0</pax.tinybundles.version>
-        <plexus.utils.version>2.1</plexus.utils.version>
-        <portlet-api.version>2.0</portlet-api.version>
-        <servicemix.specs.version>2.2.0</servicemix.specs.version>
-        <servlet.api.version>2.5</servlet.api.version>
-        <slf4j.version>1.7.2</slf4j.version>
-        <spring.osgi.version>1.2.1</spring.osgi.version>
-        <spring2.version>2.5.6.SEC03</spring2.version>
-        <spring30.version>3.0.7.RELEASE</spring30.version>
-        <spring31.version>3.1.4.RELEASE</spring31.version>
-        <sshd.version>0.8.0</sshd.version>
-        <struts.bundle.version>1.3.10_1</struts.bundle.version>
-        <xbean.version>3.12</xbean.version>
-        <javax.mail.version>1.4.5</javax.mail.version>
-        <http.feature.version>[2,3)</http.feature.version>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <appendedResourcesDirectory>${basedir}/etc/appended-resources</appendedResourcesDirectory>
-        <bnd.version.policy>[$(version;==;$(@)),$(version;+;$(@)))</bnd.version.policy>
-    </properties>
-
-    <repositories>
-        <!-- ServiceMix repo -->
-        <repository>
-            <id>servicemix</id>
-            <name>Apache ServiceMix Repository</name>
-            <url>http://svn.apache.org/repos/asf/servicemix/m2-repo</url>
-            <releases>
-                <enabled>true</enabled>
-            </releases>
-            <snapshots>
-                <enabled>false</enabled>
-            </snapshots>
-        </repository>
-        <repository>
-            <id>fusesource.snapshots</id>
-            <name>FuseSource snapshot repository</name>
-            <url>http://repo.fusesource.com/nexus/content/repositories/snapshots</url>
-            <releases>
-                <enabled>false</enabled>
-            </releases>
-            <snapshots>
-                <enabled>true</enabled>
-            </snapshots>
-        </repository>
-        <!-- OPS4J SNAPSHOT repository -->
-        <repository>
-            <id>ops4j.sonatype.snapshots.deploy</id>
-            <name>OPS4J snapshot repository</name>
-            <url>https://oss.sonatype.org/content/repositories/ops4j-snapshots/</url>
-            <releases>
-                <enabled>false</enabled>
-            </releases>
-            <snapshots>
-                <enabled>true</enabled>
-            </snapshots>
-        </repository>
-    </repositories>
-
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>org.apache.karaf</groupId>
-                <artifactId>manual</artifactId>
-                <type>pdf</type>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf</groupId>
-                <artifactId>manual</artifactId>
-                <type>html</type>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf</groupId>
-                <artifactId>org.apache.karaf.main</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf</groupId>
-                <artifactId>org.apache.karaf.util</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf</groupId>
-                <artifactId>org.apache.karaf.exception</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf</groupId>
-                <artifactId>org.apache.karaf.client</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.deployer</groupId>
-                <artifactId>org.apache.karaf.deployer.spring</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.deployer</groupId>
-                <artifactId>org.apache.karaf.deployer.blueprint</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.deployer</groupId>
-                <artifactId>org.apache.karaf.deployer.features</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.deployer</groupId>
-                <artifactId>org.apache.karaf.deployer.kar</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.deployer</groupId>
-                <artifactId>org.apache.karaf.deployer.wrap</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.management</groupId>
-                <artifactId>org.apache.karaf.management.server</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.management.mbeans</groupId>
-                <artifactId>org.apache.karaf.management.mbeans.config</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.demos</groupId>
-                <artifactId>demos</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.features</groupId>
-                <artifactId>org.apache.karaf.features.core</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.features</groupId>
-                <artifactId>org.apache.karaf.features.command</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.features</groupId>
-                <artifactId>org.apache.karaf.features.management</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.features</groupId>
-                <artifactId>org.apache.karaf.features.obr</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.diagnostic</groupId>
-                <artifactId>org.apache.karaf.diagnostic.core</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.diagnostic</groupId>
-                <artifactId>org.apache.karaf.diagnostic.common</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.diagnostic</groupId>
-                <artifactId>org.apache.karaf.diagnostic.command</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.diagnostic</groupId>
-                <artifactId>org.apache.karaf.diagnostic.management</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.admin</groupId>
-                <artifactId>org.apache.karaf.admin.core</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.admin</groupId>
-                <artifactId>org.apache.karaf.admin.command</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.admin</groupId>
-                <artifactId>org.apache.karaf.admin.management</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.shell</groupId>
-                <artifactId>org.apache.karaf.shell.console</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.shell</groupId>
-                <artifactId>org.apache.karaf.shell.obr</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.shell</groupId>
-                <artifactId>org.apache.karaf.shell.osgi</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.shell</groupId>
-                <artifactId>org.apache.karaf.shell.log</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.shell</groupId>
-                <artifactId>org.apache.karaf.shell.config</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.shell</groupId>
-                <artifactId>org.apache.karaf.shell.packages</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.shell</groupId>
-                <artifactId>org.apache.karaf.shell.ssh</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.shell</groupId>
-                <artifactId>org.apache.karaf.shell.commands</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.shell</groupId>
-                <artifactId>org.apache.karaf.shell.dev</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.shell</groupId>
-                <artifactId>org.apache.karaf.shell.wrapper</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.jaas</groupId>
-                <artifactId>org.apache.karaf.jaas.boot</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.jaas</groupId>
-                <artifactId>org.apache.karaf.jaas.config</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.jaas</groupId>
-                <artifactId>org.apache.karaf.jaas.modules</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.jaas</groupId>
-                <artifactId>org.apache.karaf.jaas.command</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.webconsole</groupId>
-                <artifactId>org.apache.karaf.webconsole.admin</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.webconsole</groupId>
-                <artifactId>org.apache.karaf.webconsole.branding</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.webconsole</groupId>
-                <artifactId>org.apache.karaf.webconsole.console</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.webconsole</groupId>
-                <artifactId>org.apache.karaf.webconsole.features</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.webconsole</groupId>
-                <artifactId>org.apache.karaf.webconsole.gogo</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.demos</groupId>
-                <artifactId>web</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf</groupId>
-                <artifactId>apache-karaf</artifactId>
-                <version>${project.version}</version>
-                <type>pom</type>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf</groupId>
-                <artifactId>apache-karaf</artifactId>
-                <type>tar.gz</type>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf</groupId>
-                <artifactId>apache-karaf</artifactId>
-                <type>zip</type>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.assemblies.features</groupId>
-                <artifactId>standard</artifactId>
-                <type>xml</type>
-                <classifier>features</classifier>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.assemblies.features</groupId>
-                <artifactId>enterprise</artifactId>
-                <type>xml</type>
-                <classifier>features</classifier>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.karaf.tooling</groupId>
-                <artifactId>org.apache.karaf.tooling.testing</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>org.apache.felix.framework</artifactId>
-                <version>${felix.framework.version}</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>org.apache.felix</groupId>
-                        <artifactId>org.osgi.compendium</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>org.osgi</groupId>
-                <artifactId>org.osgi.core</artifactId>
-                <version>${osgi.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.osgi</groupId>
-                <artifactId>org.osgi.compendium</artifactId>
-                <version>${osgi.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>org.apache.felix.configadmin</artifactId>
-                <version>${felix.configadmin.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>org.apache.felix.bundlerepository</artifactId>
-                <version>${felix.bundlerepository.version}</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>org.apache.felix</groupId>
-                        <artifactId>org.osgi.service.obr</artifactId>
-                    </exclusion>
-                    <exclusion>
-                        <groupId>org.apache.felix</groupId>
-                        <artifactId>org.apache.felix.shell</artifactId>
-                    </exclusion>
-                    <exclusion>
-                        <groupId>net.sf.kxml</groupId>
-                        <artifactId>kxml2</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>org.apache.felix.metatype</artifactId>
-                <version>${felix.metatype.version}</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>org.apache.felix</groupId>
-                        <artifactId>org.osgi.core</artifactId>
-                    </exclusion>
-                    <exclusion>
-                        <groupId>org.apache.felix</groupId>
-                        <artifactId>org.osgi.compendium</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>org.apache.felix.utils</artifactId>
-                <version>${felix.utils.version}</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>org.osgi</groupId>
-                        <artifactId>org.osgi.core</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>org.apache.felix.webconsole</artifactId>
-                <version>${felix.webconsole.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>org.apache.felix.fileinstall</artifactId>
-                <version>${felix.fileinstall.version}</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>org.osgi</groupId>
-                        <artifactId>org.osgi.core</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>org.apache.felix.eventadmin</artifactId>
-                <version>${felix.eventadmin.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>org.apache.felix.scr</artifactId>
-                <version>${felix.scr.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>biz.aQute</groupId>
-                <artifactId>bndlib</artifactId>
-                <version>${bndlib.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <version>${felix.plugin.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.maven</groupId>
-                <artifactId>maven-plugin-api</artifactId>
-                <version>${maven.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.maven</groupId>
-                <artifactId>maven-project</artifactId>
-                <version>${maven.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework</groupId>
-                <artifactId>spring-aop</artifactId>
-                <version>${spring30.version}</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>org.aopalliance</groupId>
-                        <artifactId>com.springsource.org.aopalliance</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework</groupId>
-                <artifactId>spring-beans</artifactId>
-                <version>${spring30.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework</groupId>
-                <artifactId>spring-core</artifactId>
-                <version>${spring30.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework</groupId>
-                <artifactId>spring-context</artifactId>
-                <version>${spring30.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework</groupId>
-                <artifactId>spring-test</artifactId>
-                <version>${spring30.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework.osgi</groupId>
-                <artifactId>spring-osgi-core</artifactId>
-                <version>${spring.osgi.version}</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>org.springframework</groupId>
-                        <artifactId>org.springframework.aop</artifactId>
-                    </exclusion>
-                    <exclusion>
-                        <groupId>org.springframework</groupId>
-                        <artifactId>org.springframework.beans</artifactId>
-                    </exclusion>
-                    <exclusion>
-                        <groupId>org.springframework</groupId>
-                        <artifactId>org.springframework.context</artifactId>
-                    </exclusion>
-                    <exclusion>
-                        <groupId>org.springframework</groupId>
-                        <artifactId>org.springframework.core</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework.osgi</groupId>
-                <artifactId>spring-osgi-io</artifactId>
-                <version>${spring.osgi.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework.osgi</groupId>
-                <artifactId>spring-osgi-extender</artifactId>
-                <version>${spring.osgi.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework.osgi</groupId>
-                <artifactId>spring-osgi-annotation</artifactId>
-                <version>${spring.osgi.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework.osgi</groupId>
-                <artifactId>spring-osgi-test</artifactId>
-                <version>${spring.osgi.version}</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>org.springframework.osgi</groupId>
-                        <artifactId>asm.osgi</artifactId>
-                    </exclusion>
-                    <exclusion>
-                        <groupId>org.junit</groupId>
-                        <artifactId>com.springsource.junit</artifactId>
-                    </exclusion>
-                    <exclusion>
-                        <groupId>org.objectweb.asm</groupId>
-                        <artifactId>com.springsource.org.objectweb.asm</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.servicemix.bundles</groupId>
-                <artifactId>org.apache.servicemix.bundles.ant</artifactId>
-                <version>1.8.4_1</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>commons-logging</groupId>
-                        <artifactId>commons-logging-api</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.servicemix.bundles</groupId>
-                <artifactId>org.apache.servicemix.bundles.junit</artifactId>
-                <version>${junit.bundle.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-util</artifactId>
-                <version>${jetty.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-io</artifactId>
-                <version>${jetty.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-http</artifactId>
-                <version>${jetty.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-continuation</artifactId>
-                <version>${jetty.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-server</artifactId>
-                <version>${jetty.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-security</artifactId>
-                <version>${jetty.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-servlet</artifactId>
-                <version>${jetty.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-xml</artifactId>
-                <version>${jetty.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ow2.asm</groupId>
-                <artifactId>asm-all</artifactId>
-                <version>${asm.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>log4j</groupId>
-                <artifactId>log4j</artifactId>
-                <version>${log4j.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>jline</groupId>
-                <artifactId>jline</artifactId>
-                <version>${jline.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.fusesource.jansi</groupId>
-                <artifactId>jansi</artifactId>
-                <version>${jansi.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.maven.artifact</groupId>
-                <artifactId>maven-artifact</artifactId>
-                <version>3.0-alpha-1</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.mina</groupId>
-                <artifactId>mina-core</artifactId>
-                <version>${mina.version}</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>org.easymock</groupId>
-                        <artifactId>easymock</artifactId>
-                    </exclusion>
-                    <exclusion>
-                        <groupId>org.easymock</groupId>
-                        <artifactId>easymockclassextension</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>org.slf4j</groupId>
-                <artifactId>slf4j-api</artifactId>
-                <version>${slf4j.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.slf4j</groupId>
-                <artifactId>slf4j-jdk14</artifactId>
-                <version>${slf4j.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.slf4j</groupId>
-                <artifactId>slf4j-nop</artifactId>
-                <version>${slf4j.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.slf4j</groupId>
-                <artifactId>slf4j-simple</artifactId>
-                <version>${slf4j.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>com.google.guava</groupId>
-                <artifactId>guava</artifactId>
-                <version>13.0.1</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.base</groupId>
-                <artifactId>ops4j-base-lang</artifactId>
-                <version>${pax.base.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.base</groupId>
-                <artifactId>ops4j-base-net</artifactId>
-                <version>${pax.base.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.logging</groupId>
-                <artifactId>pax-logging-api</artifactId>
-                <version>${pax.logging.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.logging</groupId>
-                <artifactId>pax-logging-service</artifactId>
-                <version>${pax.logging.version}</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>log4j</groupId>
-                        <artifactId>log4j</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.url</groupId>
-                <artifactId>pax-url-mvn</artifactId>
-                <version>${pax.url.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.url</groupId>
-                <artifactId>pax-url-wrap</artifactId>
-                <version>${pax.url.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.url</groupId>
-                <artifactId>pax-url-war</artifactId>
-                <version>${pax.url.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.geronimo.specs</groupId>
-                <artifactId>geronimo-servlet_2.5_spec</artifactId>
-                <version>${geronimo.servlet.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.easymock</groupId>
-                <artifactId>easymock</artifactId>
-                <version>${easymock.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.servicemix.specs</groupId>
-                <artifactId>org.apache.servicemix.specs.activator</artifactId>
-                <version>${servicemix.specs.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.servicemix.specs</groupId>
-                <artifactId>org.apache.servicemix.specs.locator</artifactId>
-                <version>${servicemix.specs.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.servicemix.specs</groupId>
-                <artifactId>org.apache.servicemix.specs.activation-api-1.1</artifactId>
-                <version>${servicemix.specs.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.servicemix.specs</groupId>
-                <artifactId>org.apache.servicemix.specs.jaxp-api-1.4</artifactId>
-                <version>${servicemix.specs.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.servicemix.specs</groupId>
-                <artifactId>org.apache.servicemix.specs.jaxb-api-2.2</artifactId>
-                <version>${servicemix.specs.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.servicemix.specs</groupId>
-                <artifactId>org.apache.servicemix.specs.jaxws-api-2.2</artifactId>
-                <version>${servicemix.specs.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.servicemix.specs</groupId>
-                <artifactId>org.apache.servicemix.specs.saaj-api-1.3</artifactId>
-                <version>${servicemix.specs.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.servicemix.specs</groupId>
-                <artifactId>org.apache.servicemix.specs.stax-api-1.2</artifactId>
-                <version>${servicemix.specs.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.sshd</groupId>
-                <artifactId>sshd-core</artifactId>
-                <version>${sshd.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.exam</groupId>
-                <artifactId>pax-exam</artifactId>
-                <version>${pax.exam.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.exam</groupId>
-                <artifactId>pax-exam-container-remote</artifactId>
-                <version>${pax.exam.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.exam</groupId>
-                <artifactId>pax-exam-spi</artifactId>
-                <version>${pax.exam.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.exam</groupId>
-                <artifactId>pax-exam-invoker-junit</artifactId>
-                <version>${pax.exam.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.exam</groupId>
-                <artifactId>pax-exam-container-rbc</artifactId>
-                <version>${pax.exam.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.exam</groupId>
-                <artifactId>pax-exam-container-rbc-client</artifactId>
-                <version>${pax.exam.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.exam</groupId>
-                <artifactId>pax-exam-junit4</artifactId>
-                <version>${pax.exam.version}</version>
-                <scope>test</scope>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.exam</groupId>
-                <artifactId>pax-exam-extender-service</artifactId>
-                <version>${pax.exam.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.exam</groupId>
-                <artifactId>pax-exam-inject</artifactId>
-                <version>${pax.exam.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.geronimo.specs</groupId>
-                <artifactId>geronimo-atinject_1.0_spec</artifactId>
-                <version>${injection.bundle.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>org.ops4j.pax.swissbox</groupId>
-                <artifactId>pax-swissbox-bnd</artifactId>
-                <version>${pax.swissbox.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.swissbox</groupId>
-                <artifactId>pax-swissbox-lifecycle</artifactId>
-                <version>${pax.swissbox.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.swissbox</groupId>
-                <artifactId>pax-swissbox-property</artifactId>
-                <version>${pax.swissbox.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.swissbox</groupId>
-                <artifactId>pax-swissbox-tracker</artifactId>
-                <version>${pax.swissbox.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>org.ops4j.pax.swissbox</groupId>
-                <artifactId>pax-swissbox-tinybundles</artifactId>
-                <version>${pax.tinybundles.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>org.eclipse</groupId>
-                <artifactId>osgi</artifactId>
-                <version>${equinox.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>javax.servlet</groupId>
-                <artifactId>servlet-api</artifactId>
-                <version>${servlet.api.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.aries.blueprint</groupId>
-                <artifactId>org.apache.aries.blueprint.api</artifactId>
-                <version>${aries.blueprint.api.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.aries.blueprint</groupId>
-                <artifactId>org.apache.aries.blueprint.core</artifactId>
-                <version>${aries.blueprint.core.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.aries.blueprint</groupId>
-                <artifactId>org.apache.aries.blueprint.cm</artifactId>
-                <version>${aries.blueprint.cm.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.aries.proxy</groupId>
-                <artifactId>org.apache.aries.proxy.api</artifactId>
-                <version>${aries.proxy.api.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.aries.proxy</groupId>
-                <artifactId>org.apache.aries.proxy.impl</artifactId>
-                <version>${aries.proxy.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.aries</groupId>
-                <artifactId>org.apache.aries.util</artifactId>
-                <version>${aries.util.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.aries.jmx</groupId>
-                <artifactId>org.apache.aries.jmx.api</artifactId>
-                <version>${aries.jmx.api.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.aries.jmx</groupId>
-                <artifactId>org.apache.aries.jmx.core</artifactId>
-                <version>${aries.jmx.core.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.aries.jmx</groupId>
-                <artifactId>org.apache.aries.jmx.blueprint.api</artifactId>
-                <version>${aries.jmx.blueprint.api.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.aries.jmx</groupId>
-                <artifactId>org.apache.aries.jmx.blueprint.core</artifactId>
-                <version>${aries.jmx.blueprint.core.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.aries.jndi</groupId>
-                <artifactId>org.apache.aries.jndi.api</artifactId>
-                <version>${aries.jndi.api.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.aries.jndi</groupId>
-                <artifactId>org.apache.aries.jndi.core</artifactId>
-                <version>${aries.jndi.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.aries.jndi</groupId>
-                <artifactId>org.apache.aries.jndi.url</artifactId>
-                <version>${aries.jndi.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>org.apache.felix.gogo.runtime</artifactId>
-                <version>${felix.gogo.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>org.apache.felix.gogo.commands</artifactId>
-                <version>${felix.gogo.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.runner</groupId>
-                <artifactId>pax-runner-no-jcl</artifactId>
-                <version>${pax.runner.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.web</groupId>
-                <artifactId>pax-web-api</artifactId>
-                <version>${pax.web.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.web</groupId>
-                <artifactId>pax-web-spi</artifactId>
-                <version>${pax.web.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.web</groupId>
-                <artifactId>pax-web-runtime</artifactId>
-                <version>${pax.web.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.web</groupId>
-                <artifactId>pax-web-jetty</artifactId>
-                <version>${pax.web.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.web</groupId>
-                <artifactId>pax-web-jsp</artifactId>
-                <version>${pax.web.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.web</groupId>
-                <artifactId>pax-web-deployer</artifactId>
-                <version>${pax.web.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.web</groupId>
-                <artifactId>pax-web-extender-war</artifactId>
-                <version>${pax.web.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.ops4j.pax.web</groupId>
-                <artifactId>pax-web-extender-whiteboard</artifactId>
-                <version>${pax.web.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.xbean</groupId>
-                <artifactId>xbean-finder-shaded</artifactId>
-                <version>${xbean.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.xbean</groupId>
-                <artifactId>xbean-blueprint</artifactId>
-                <version>${xbean.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>tanukisoft</groupId>
-                <artifactId>wrapper</artifactId>
-                <version>${jsw.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>commons-codec</groupId>
-                <artifactId>commons-codec</artifactId>
-                <version>${commons-codec.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>commons-collections</groupId>
-                <artifactId>commons-collections</artifactId>
-                <version>${commons-collections.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.commons</groupId>
-                <artifactId>commons-compress</artifactId>
-                <version>${commons-compress.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>commons-io</groupId>
-                <artifactId>commons-io</artifactId>
-                <version>${commons-io.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>commons-lang</groupId>
-                <artifactId>commons-lang</artifactId>
-                <version>${commons-lang.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.servicemix.bundles</groupId>
-                <artifactId>org.apache.servicemix.bundles.jasypt</artifactId>
-                <version>${jasypt.bundle.version}</version>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
-
-    <dependencies>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>4.10</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymock</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <defaultGoal>install</defaultGoal>
-
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-compiler-plugin</artifactId>
-                    <version>2.5.1</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-deploy-plugin</artifactId>
-                    <version>2.7</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-javadoc-plugin</artifactId>
-                    <version>2.8.1</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-jar-plugin</artifactId>
-                    <version>2.4</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-enforcer-plugin</artifactId>
-                    <version>1.1</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-gpg-plugin</artifactId>
-                    <version>1.4</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-eclipse-plugin</artifactId>
-                    <version>2.9</version>
-                    <configuration>
-                        <outputDirectory>${basedir}/eclipse-classes</outputDirectory>
-                        <downloadSources>true</downloadSources>
-                        <downloadJavadocs>true</downloadJavadocs>
-                    </configuration>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-release-plugin</artifactId>
-                    <version>2.3.2</version>
-                    <configuration>
-                        <useReleaseProfile>false</useReleaseProfile>
-                        <preparationGoals>clean install</preparationGoals>
-                        <goals>deploy</goals>
-                        <arguments>-Prelease,deploy,src,manual</arguments>
-                        <autoVersionSubmodules>true</autoVersionSubmodules>
-                    </configuration>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.felix</groupId>
-                    <artifactId>maven-bundle-plugin</artifactId>
-                    <version>${felix.plugin.version}</version>
-                    <extensions>true</extensions>
-                    <configuration>
-                        <instructions>
-                            <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
-                            <Export-Package>${project.artifactId}*;version=${project.version}</Export-Package>
-                            <_versionpolicy>${bnd.version.policy}</_versionpolicy>
-                        </instructions>
-                    </configuration>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-idea-plugin</artifactId>
-                    <version>2.2</version>
-                    <configuration>
-                        <downloadSources>true</downloadSources>
-                        <downloadJavadocs>true</downloadJavadocs>
-                    </configuration>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-surefire-plugin</artifactId>
-                    <version>2.12</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-shade-plugin</artifactId>
-                    <version>1.7</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-resources-plugin</artifactId>
-                    <version>2.5</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.servicemix.tooling</groupId>
-                    <artifactId>depends-maven-plugin</artifactId>
-                    <version>1.2</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-source-plugin</artifactId>
-                    <version>2.1.2</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-assembly-plugin</artifactId>
-                    <version>2.2.1</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-antrun-plugin</artifactId>
-                    <version>1.7</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.codehaus.mojo</groupId>
-                    <artifactId>exec-maven-plugin</artifactId>
-                    <version>1.2.1</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-dependency-plugin</artifactId>
-                    <version>2.4</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.codehaus.mojo</groupId>
-                    <artifactId>build-helper-maven-plugin</artifactId>
-                    <version>1.7</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-remote-resources-plugin</artifactId>
-                    <version>1.3</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-war-plugin</artifactId>
-                    <version>2.2</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.eclipse.m2e</groupId>
-                    <artifactId>lifecycle-mapping</artifactId>
-                    <version>1.0.0</version>
-                    <configuration>
-                        <lifecycleMappingMetadata>
-                            <pluginExecutions>
-                                <pluginExecution>
-                                    <pluginExecutionFilter>
-                                        <groupId>org.apache.felix</groupId>
-                                        <artifactId>maven-bundle-plugin</artifactId>
-                                        <versionRange>[2.3.7,)</versionRange>
-                                        <goals>
-                                            <goal>cleanVersions</goal>
-                                        </goals>
-                                    </pluginExecutionFilter>
-                                    <action>
-                                        <ignore />
-                                    </action>
-                                </pluginExecution>
-                                <pluginExecution>
-                                    <pluginExecutionFilter>
-                                        <groupId>org.apache.maven.plugins</groupId>
-                                        <artifactId>maven-dependency-plugin</artifactId>
-                                        <versionRange>[2.4,)</versionRange>
-                                        <goals>
-                                            <goal>copy</goal>
-                                            <goal>unpack</goal>
-                                        </goals>
-                                    </pluginExecutionFilter>
-                                    <action>
-                                        <ignore />
-                                    </action>
-                                </pluginExecution>
-                                <pluginExecution>
-                                    <pluginExecutionFilter>
-                                        <groupId>org.fusesource.scalate</groupId>
-                                        <artifactId>maven-scalate-plugin</artifactId>
-                                        <versionRange>[1.4.0,)</versionRange>
-                                        <goals>
-                                            <goal>sitegen</goal>
-                                        </goals>
-                                    </pluginExecutionFilter>
-                                    <action>
-                                        <ignore />
-                                    </action>
-                                </pluginExecution>
-                                <pluginExecution>
-                                    <pluginExecutionFilter>
-                                        <groupId>org.apache.servicemix.tooling</groupId>
-                                        <artifactId>depends-maven-plugin</artifactId>
-                                        <versionRange>[1.2,)</versionRange>
-                                        <goals>
-                                            <goal>generate-depends-file</goal>
-                                        </goals>
-                                    </pluginExecutionFilter>
-                                    <action>
-                                        <ignore />
-                                    </action>
-                                </pluginExecution>
-                            </pluginExecutions>
-                        </lifecycleMappingMetadata>
-                    </configuration>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>1.5</source>
-                    <target>1.5</target>
-                    <maxmem>256M</maxmem>
-                    <fork>${compiler.fork}</fork>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-remote-resources-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>process</goal>
-                        </goals>
-                        <configuration>
-                            <appendedResourcesDirectory>${appendedResourcesDirectory}</appendedResourcesDirectory>
-                            <resourceBundles>
-                                <resourceBundle>org.apache:apache-jar-resource-bundle:1.4</resourceBundle>
-                            </resourceBundles>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>copy-notice</id>
-                        <phase>generate-resources</phase>
-                        <configuration>
-                            <target>
-                                <copy file="NOTICE" todir="target/maven-shared-archive-resources/META-INF" failonerror="false" overwrite="true" />
-                            </target>
-                        </configuration>
-                        <goals>
-                            <goal>run</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <inherited>true</inherited>
-                <executions>
-                    <execution>
-                        <id>cleanVersions</id>
-                        <phase>generate-sources</phase>
-                        <goals>
-                            <goal>cleanVersions</goal>
-                        </goals>
-                        <configuration>
-                            <versions>
-                                <karaf.osgi.version>${project.version}</karaf.osgi.version>
-                            </versions>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-    <reporting>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-javadoc-plugin</artifactId>
-                <version>2.8.1</version>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jxr-plugin</artifactId>
-                <version>2.3</version>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-site-plugin</artifactId>
-                <version>3.1</version>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-report-plugin</artifactId>
-                <version>2.12</version>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-project-info-reports-plugin</artifactId>
-                <version>2.4</version>
-            </plugin>
-        </plugins>
-    </reporting>
-
-    <profiles>
-        <profile>
-            <id>fastinstall</id>
-            <properties>
-                <maven.test.skip>true</maven.test.skip>
-            </properties>
-        </profile>
-        <profile>
-            <id>manual</id>
-            <modules>
-                <module>manual</module>
-            </modules>
-        </profile>
-        <profile>
-            <id>rat</id>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.apache.rat</groupId>
-                        <artifactId>apache-rat-plugin</artifactId>
-                        <version>0.8</version>
-                        <executions>
-                            <execution>
-                                <phase>verify</phase>
-                                <goals>
-                                    <goal>check</goal>
-                                </goals>
-                            </execution>
-                        </executions>
-                        <configuration>
-                            <reportFile>${project.build.directory}/${project.build.finalName}.rat</reportFile>
-                            <excludeSubProjects>false</excludeSubProjects>
-                            <excludes>
-                                <exclude>**/target/**/*</exclude>
-                                <!-- GIT files -->
-                                <exclude>**/.git/**/*</exclude>
-                                <!-- IDEA files -->
-                                <exclude>**/.idea/**/*</exclude>
-                                <exclude>**/*.iml</exclude>
-                                <exclude>**/*.ipr</exclude>
-                                <exclude>**/*.iws</exclude>
-                                <!-- Eclipse files -->
-                                <exclude>**/.*</exclude>
-                                <exclude>**/eclipse-classes/**/*</exclude>
-                                <exclude>**/dependency-reduced-pom.xml</exclude>
-                                <!-- Resources files -->
-                                <exclude>**/bundle.info</exclude>
-                                <exclude>**/*.txt</exclude>
-                                <exclude>**/foo</exclude>
-                                <exclude>**/pom.properties</exclude>
-                                <exclude>**/*.rat</exclude>
-                                <exclude>**/build-main.xml</exclude>
-                                <!-- Manual files -->
-                                <exclude>manual/**/*.css</exclude>
-                                <exclude>manual/**/*.ssp</exclude>
-                                <exclude>manual/**/*.conf</exclude>
-                            </excludes>
-                        </configuration>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-        <profile>
-            <id>release</id>
-            <modules>
-                <module>manual</module>
-            </modules>
-            <build>
-                <plugins>
-                    <!-- We check the Maven and JDK during the release -->
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-enforcer-plugin</artifactId>
-                        <executions>
-                            <execution>
-                                <id>enforce-versions</id>
-                                <goals>
-                                    <goal>enforce</goal>
-                                </goals>
-                                <configuration>
-                                    <rules>
-                                        <requireMavenVersion>
-                                            <version>[2.2.1,3)</version>
-                                        </requireMavenVersion>
-                                        <requireJavaVersion>
-                                            <version>[1.5,1.7.1)</version>
-                                        </requireJavaVersion>
-                                    </rules>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                    <!-- We want to deploy the artifact to a staging location for perusal -->
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-deploy-plugin</artifactId>
-                        <inherited>true</inherited>
-                        <configuration>
-                            <altDeploymentRepository>${deploy.altRepository}</altDeploymentRepository>
-                            <updateReleaseInfo>true</updateReleaseInfo>
-                        </configuration>
-                    </plugin>
-                    <!-- We want to sign the artifact, the POM, and all attached artifacts -->
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-gpg-plugin</artifactId>
-                        <executions>
-                            <execution>
-                                <id>sign-artifacts</id>
-                                <phase>verify</phase>
-                                <goals>
-                                    <goal>sign</goal>
-                                </goals>
-                            </execution>
-                        </executions>
-                    </plugin>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-assembly-plugin</artifactId>
-                        <executions>
-                            <execution>
-                                <id>make-assembly</id>
-                                <phase>none</phase>
-                            </execution>
-                        </executions>
-                    </plugin>
-                    <plugin>
-                        <groupId>org.codehaus.mojo</groupId>
-                        <artifactId>build-helper-maven-plugin</artifactId>
-                        <executions>
-                            <execution>
-                                <id>attach-assemblies</id>
-                                <phase>none</phase>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-        <profile>
-            <id>setup.eclipse</id>
-            <modules>
-                <module>assemblies</module>
-            </modules>
-            <properties>
-                <eclipse.workspace.dir>${basedir}/../workspace</eclipse.workspace.dir>
-            </properties>
-            <build>
-                <defaultGoal>eclipse:eclipse</defaultGoal>
-                <plugins>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-eclipse-plugin</artifactId>
-                        <inherited>false</inherited>
-                        <executions>
-                            <execution>
-                                <id>setup.eclipse.workspace</id>
-                                <phase>process-test-sources</phase>
-                                <goals>
-                                    <goal>add-maven-repo</goal>
-                                </goals>
-                                <configuration>
-                                    <workspace>${eclipse.workspace.dir}</workspace>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-        <profile>
-            <id>deploy</id>
-            <properties>
-                <createSourcesJar>true</createSourcesJar>
-            </properties>
-            <build>
-                <defaultGoal>deploy</defaultGoal>
-                <plugins>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-source-plugin</artifactId>
-                        <version>2.0.4</version>
-                        <executions>
-                            <execution>
-                                <id>attach-sources</id>
-                                <goals>
-                                    <goal>jar</goal>
-                                </goals>
-                            </execution>
-                        </executions>
-                    </plugin>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-javadoc-plugin</artifactId>
-                        <version>2.8.1</version>
-                        <configuration>
-                            <source>1.5</source>
-                        </configuration>
-                        <executions>
-                            <execution>
-                                <id>attach-javadocs</id>
-                                <goals>
-                                    <goal>jar</goal>
-                                </goals>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
-
-</project>
diff --git a/karaf-2.3.x/shell/commands/NOTICE b/karaf-2.3.x/shell/commands/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/shell/commands/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/shell/commands/pom.xml b/karaf-2.3.x/shell/commands/pom.xml
deleted file mode 100644
index 76053e8..0000000
--- a/karaf-2.3.x/shell/commands/pom.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.shell</groupId>
-        <artifactId>shell</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.shell.commands</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Shell :: Various Commands</name>
-    <description>This bundles provides basic Karaf shell commands.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf</groupId>
-            <artifactId>org.apache.karaf.util</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-simple</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            org.apache.felix.service.command,
-                            org.apache.felix.gogo.commands,
-                            org.apache.karaf.shell.console,
-                            *
-                        </Import-Package>
-                        <Private-Package>
-                            org.apache.karaf.util.process;-split-package:=merge-first
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/CatAction.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/CatAction.java
deleted file mode 100644
index 8bcce82..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/CatAction.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import java.io.IOException;
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.File;
-import java.io.InputStreamReader;
-import java.net.URL;
-import java.net.MalformedURLException;
-import java.util.List;
-
-import org.apache.karaf.shell.console.AbstractAction;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.gogo.commands.Command;
-
-/**
- * Concatenate and print files and/or URLs.
- */
-@Command(scope = "shell", name = "cat", description = "Displays the content of a file or URL.")
-public class CatAction extends AbstractAction {
-
-    @Option(name = "-n", aliases = {}, description = "Number the output lines, starting at 1.", required = false, multiValued = false)
-    private boolean displayLineNumbers;
-
-    @Argument(index = 0, name = "paths or urls", description = "A list of file paths or urls to display separated by whitespace (use - for STDIN)", required = true, multiValued = true)
-    private List<String> paths;
-
-    protected Object doExecute() throws Exception {
-        //
-        // Support "-" if length is one, and read from io.in
-        // This will help test command pipelines.
-        //
-        if (paths.size() == 1 && "-".equals(paths.get(0))) {
-            log.info("Printing STDIN");
-            cat(new BufferedReader(new InputStreamReader(System.in)));
-        }
-        else {
-            for (String filename : paths) {
-                BufferedReader reader;
-
-                // First try a URL
-                try {
-                    URL url = new URL(filename);
-                    log.info("Printing URL: " + url);
-                    reader = new BufferedReader(new InputStreamReader(url.openStream()));
-                }
-                catch (MalformedURLException ignore) {
-                    // They try a file
-                    File file = new File(filename);
-                    log.info("Printing file: " + file);
-                    reader = new BufferedReader(new FileReader(file));
-                }
-
-                try {
-                    cat(reader);
-                }
-                finally {
-                    try {
-                        reader.close();
-                    } catch (IOException e) {
-                        // Ignore
-                    }
-                }
-            }
-        }
-
-        return null;
-    }
-
-    private void cat(final BufferedReader reader) throws IOException
-    {
-        String line;
-        int lineno = 1;
-
-        while ((line = reader.readLine()) != null) {
-            if (displayLineNumbers) {
-                System.out.print(String.format("%6d  ", lineno++));
-            }
-            System.out.println(line);
-        }
-    }
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/ClearAction.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/ClearAction.java
deleted file mode 100644
index 2cebeb7..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/ClearAction.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.shell.console.AbstractAction;
-
-/**
- * A command to clear the console buffer
- */
-@Command(scope = "shell", name = "clear", description = "Clears the console buffer.")
-public class ClearAction extends AbstractAction {
-
-	protected Object doExecute() throws Exception {
-		System.out.print("\33[2J");
-		System.out.flush();
-		System.out.print("\33[1;1H");
-		System.out.flush();
-		return null;
-	}	
-
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/DateAction.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/DateAction.java
deleted file mode 100644
index 29df1e8..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/DateAction.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.shell.console.AbstractAction;
-
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-@Command(scope = "shell", name = "date", description = "Display the current time in the given FORMAT")
-public class DateAction extends AbstractAction {
-
-    @Option(name = "-d", aliases = { "--date" }, description = "Display time described, not now", multiValued = false, required = false)
-    private String date;
-
-    @Argument(index = 0, name = "format", description = "Output format", multiValued = false, required = false)
-    private String format;
-
-    protected Object doExecute() throws Exception {
-        Date d;
-        if (date == null || date.equalsIgnoreCase("now")) {
-            d = new Date();
-        } else {
-            if (date.startsWith("@")) {
-                d = new Date(Long.parseLong(date.substring(1)));
-            } else {
-                d = new Date(date);
-            }
-        }
-        if (format == null) {
-            System.out.println(d);
-        } else {
-            // transform Unix format to Java SimpleDateFormat (if required)
-            format = format.replaceAll("%a","EEE");
-            format = format.replaceAll("%A", "EEEEEEE");
-            format = format.replaceAll("%b", "MMM");
-            format = format.replaceAll("%B", "MMMMMMM");
-            format = format.replaceAll("%c", "MMM EEE d HH:mm:ss yyyy");
-            format = format.replaceAll("%C","yy");
-            format = format.replaceAll("%d", "dd");
-            format = format.replaceAll("%D", "MM/dd/yy");
-            format = format.replaceAll("%e", "dd");
-            format = format.replaceAll("%F", "yyyy-MM-dd");
-            format = format.replaceAll("%g", "YY");
-            format = format.replaceAll("%G", "YYYY");
-            format = format.replaceAll("%h", "MMM");
-            format = format.replaceAll("%H", "HH");
-            format = format.replaceAll("%I", "hh");
-            format = format.replaceAll("%j", "DDD");
-            format = format.replaceAll("%k", "HH");
-            format = format.replaceAll("%l", "hh");
-            format = format.replaceAll("%m", "MM");
-            format = format.replaceAll("%M", "mm");
-            format = format.replaceAll("%n", "\n");
-            format = format.replaceAll("%N", "S");
-            format = format.replaceAll("%p", "aa");
-            format = format.replaceAll("%P", "aa");
-            format = format.replaceAll("%r", "hh:mm:ss aa");
-            format = format.replaceAll("%R", "HH:mm");
-            format = format.replaceAll("%s", "S");
-            format = format.replaceAll("%S", "ss");
-            format = format.replaceAll("%t", "\t");
-            format = format.replaceAll("%T", "HH:mm:ss");
-            format = format.replaceAll("%u", "u");
-            format = format.replaceAll("%U", "w");
-            format = format.replaceAll("%V", "W");
-            format = format.replaceAll("%w", "u");
-            format = format.replaceAll("%W", "w");
-            format = format.replaceAll("%x", "MM/dd/yy");
-            format = format.replaceAll("%X", "HH:mm:ss");
-            format = format.replaceAll("%y", "yy");
-            format = format.replaceAll("%Y", "yyyy");
-            format = format.replaceAll("%z", "X");
-            format = format.replaceAll("%:z", "XXX");
-            format = format.replaceAll("%::z", "XXXX");
-            format = format.replaceAll("%:::z", "XXXX");
-            format = format.replaceAll("%Z", "z");
-            DateFormat df = new SimpleDateFormat(format);
-            System.out.println(df.format(d));
-        }
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/EachAction.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/EachAction.java
deleted file mode 100644
index 8fb9b18..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/EachAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.service.command.Function;
-import org.apache.karaf.shell.console.AbstractAction;
-
-/**
- * Execute a closure on a list of arguments.
- */
-@Command(scope = "shell", name = "each", description = "Execute a closure on a list of arguments.")
-public class EachAction extends AbstractAction {
-
-    @Argument(name = "values", index = 0, multiValued = false, required = true, description = "The collection of arguments to iterate on")
-    Collection<Object> values;
-
-    @Argument(name = "function", index = 1, multiValued = false, required = true, description = "The function to execute")
-    Function function;
-
-    @Override
-    protected Object doExecute() throws Exception {
-        for (Object v : values) {
-            function.execute(session, Collections.singletonList(v));
-        }
-        return null;
-    }
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/EchoAction.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/EchoAction.java
deleted file mode 100644
index 69fe0e7..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/EchoAction.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.karaf.shell.console.AbstractAction;
-
-@Command(scope = "shell", name = "echo", description="Echoes or prints arguments to STDOUT.")
-public class EchoAction extends AbstractAction
-{
-    @Option(name = "-n", aliases = {}, description = "Do not print the trailing newline character", required = false, multiValued = false)
-    private boolean noTrailingNewline = false;
-
-    @Argument(index = 0, name = "arguments", description="Arguments to display separated by whitespaces", required = false, multiValued = true)
-    private List<String> args;
-
-    protected Object doExecute() throws Exception {
-        if (args != null) {
-            boolean first = true;
-            for (String arg : args) {
-                if (first) {
-                    first = false;
-                } else {
-                    System.out.print(" ");
-                }
-                System.out.print(arg);
-            }
-        }
-
-        if (!noTrailingNewline) {
-            System.out.println();
-        }
-
-        return null;
-    }
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/ExecuteAction.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/ExecuteAction.java
deleted file mode 100644
index 27eae6f..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/ExecuteAction.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.shell.console.AbstractAction;
-import org.apache.karaf.util.process.PumpStreamHandler;
-
-/**
- * Execute system processes.
- */
-@Command(scope = "shell", name = "exec", description = "Executes system processes.")
-public class ExecuteAction extends AbstractAction {
-
-    @Argument(index = 0, name = "command", description = "Execution command with arguments", required = true, multiValued = true)
-    private List<String> args;
-
-    protected Object doExecute() throws Exception {
-        ProcessBuilder builder = new ProcessBuilder(args);
-
-        PumpStreamHandler handler = new PumpStreamHandler(System.in, System.out, System.err, "Command" + args.toString());
-
-        log.info("Executing: {}", builder.command());
-        Process p = builder.start();
-
-        handler.attach(p);
-        handler.start();
-
-        log.debug("Waiting for process to exit...");
-
-        int status = p.waitFor();
-
-
-        log.info("Process exited w/status: {}", status);
-
-        handler.stop();
-
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/GrepAction.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/GrepAction.java
deleted file mode 100644
index 9414149..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/GrepAction.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.karaf.shell.console.AbstractAction;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.gogo.commands.Command;
-import org.fusesource.jansi.Ansi;
-
-
-@Command(scope = "shell", name="grep", description="Prints lines matching the given pattern.", detailedDescription="classpath:grep.txt")
-public class GrepAction extends AbstractAction {
-
-    public static enum ColorOption {
-        never,
-        always,
-        auto
-    }
-
-    @Argument(index = 0, name = "pattern", description = "Regular expression", required = true, multiValued = false)
-    private String regex;
-
-    @Option(name = "-n", aliases = { "--line-number" }, description = "Prefixes each line of output with the line number within its input file.", required = false, multiValued = false)
-    private boolean lineNumber;
-
-    @Option(name = "-v", aliases = { "--invert-match" }, description = "Inverts the sense of matching, to select non-matching lines.", required = false, multiValued = false)
-    private boolean invertMatch;
-
-    @Option(name = "-w", aliases = { "--word-regexp" }, description = "Selects only those lines containing matches that form whole " +
-                                                                      "words.  The test is that the matching substring must either be " +
-                                                                      "at  the beginning of the line, or preceded by a non-word constituent " +
-                                                                      "character.  Similarly, it must be either at the end of " +
-                                                                      "the line or followed by a non-word constituent character.  " +
-                                                                      "Word-constituent characters are letters, digits, and the underscore.", required = false, multiValued = false)
-    private boolean wordRegexp;
-
-    @Option(name = "-x", aliases = { "--line-regexp" }, description = "Selects only those matches that exactly match the whole line.", required = false, multiValued = false)
-    private boolean lineRegexp;
-
-    @Option(name = "-i", aliases = { "--ignore-case" }, description = "Ignores case distinctions in both the PATTERN and the input files.", required = false, multiValued = false)
-    private boolean ignoreCase;
-
-    @Option(name = "-c", aliases = { "--count" }, description = "only print a count of matching lines per FILE", required = false, multiValued = false)
-    private boolean count;
-
-    @Option(name = "--color", aliases = { "--colour" }, description = "use markers to distinguish the matching string. WHEN may be `always', `never' or `auto'", required = false, multiValued = false)
-    private ColorOption color = ColorOption.auto;
-
-    @Option(name = "-B", aliases = { "--before-context" }, description = "Print NUM lines of leading context before matching lines.  Places a line containing -- between contiguous groups of matches.", required = false, multiValued = false)
-    private int before = -1;
-
-    @Option(name = "-A", aliases = { "--after-context" }, description = "Print NUM lines of trailing context after matching lines.  Places a line containing -- between contiguous groups of matches.", required = false, multiValued = false)
-    private int after = -1;
-
-    @Option(name = "-C", aliases = { "--context" }, description = "Print NUM lines of output context.  Places a line containing -- between contiguous groups of matches.", required = false, multiValued = false)
-    private int context = 0;
-
-
-    protected Object doExecute() throws Exception {
-        if (after < 0) {
-            after = context;
-        }
-        if (before < 0) {
-            before = context;
-        }
-        List<String> lines = new ArrayList<String>();
-
-        String regexp = regex;
-        if (wordRegexp) {
-            regexp = "\\b" + regexp + "\\b";
-        }
-        if (lineRegexp) {
-            regexp = "^" + regexp + "$";
-        } else {
-            regexp = ".*" + regexp + ".*";
-        }
-        Pattern p;
-        Pattern p2;
-        if (ignoreCase) {
-            p = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE);
-            p2 = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
-        } else {
-            p = Pattern.compile(regexp);
-            p2 = Pattern.compile(regex);
-        }
-        try {
-            boolean firstPrint = true;
-            int nb = 0;
-            int lineno = 1;
-            String line;
-            int lineMatch = 0;
-            BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
-            while ((line = r.readLine()) != null) {
-                if (line.length() == 1 && line.charAt(0) == '\n') {
-                    break;
-                }
-                if (p.matcher(line).matches() ^ invertMatch) {
-                    Matcher matcher2 = p2.matcher(line);
-                    StringBuffer sb = new StringBuffer();
-                    while (matcher2.find()) {
-                        if (!invertMatch && color != ColorOption.never) {
-                            int index = matcher2.start(0);
-                            String prefix = line.substring(0,index);
-                            matcher2.appendReplacement(sb, Ansi.ansi()
-                                .bg(Ansi.Color.YELLOW)
-                                .fg(Ansi.Color.BLACK)
-                                .a(matcher2.group())
-                                 .reset()
-                                .a(lastEscapeSequence(prefix))
-                                .toString());
-                        } else {
-                            matcher2.appendReplacement(sb, matcher2.group());
-                        }
-                        nb++;
-                    }
-                    matcher2.appendTail(sb);
-                    sb.append(Ansi.ansi().reset().toString());
-                    if (!count && lineNumber) {
-                        lines.add(String.format("%6d  ", lineno) + sb.toString());
-                    } else {
-                        lines.add(sb.toString());
-                    }
-					lineMatch = lines.size();
-                } else {
-                    if (lineMatch != 0 & lineMatch + after + before <= lines.size()) {
-                        if (!count) {
-                            if (!firstPrint && before + after > 0) {
-                                System.out.println("--");
-                            } else {
-                                firstPrint = false;
-                            }
-                            for (int i = 0; i < lineMatch + after; i++) {
-                                System.out.println(lines.get(i));
-                            }
-                        }
-                        while (lines.size() > before) {
-                            lines.remove(0);
-                        }
-                        lineMatch = 0;
-                    }
-                    lines.add(line);
-                    while (lineMatch == 0 && lines.size() > before) {
-                        lines.remove(0);
-                    }
-                }
-                lineno++;
-            }
-            if (!count && lineMatch > 0) {
-                if (!firstPrint && before + after > 0) {
-                    System.out.println("--");
-                } else {
-                    firstPrint = false;
-                }
-                for (int i = 0; i < lineMatch + after && i < lines.size(); i++) {
-                    System.out.println(lines.get(i));
-                }
-            }
-            if (count) {
-                System.out.println(nb);
-            }
-        } catch (IOException e) {
-        }
-        return null;
-    }
-
-
-    /**
-     * Returns the last escape pattern found inside the String.
-     * This method is used to restore the formating after highliting the grep pattern.
-     * If no pattern is found just returns the reset String.
-     * @param str
-     * @return
-     */
-    private String lastEscapeSequence(String str) {
-        String escapeSequence=Ansi.ansi().reset().toString();
-        String escapePattern = "(\\\u001B\\[[0-9;]*[0-9]+m)+";
-        Pattern pattern =  Pattern.compile(escapePattern);
-        Matcher matcher = pattern.matcher(str);
-        while(matcher.find()) {
-            escapeSequence = matcher.group();
-        }
-        return escapeSequence;
-    }
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/HeadAction.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/HeadAction.java
deleted file mode 100644
index 19b598c..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/HeadAction.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.shell.console.AbstractAction;
-
-@Command(scope = "shell", name = "head", description = "Displays the first lines of a file.")
-public class HeadAction extends AbstractAction {
-
-    private static final int DEFAULT_NUMBER_OF_LINES = 10;
-
-    @Option(name = "-n", aliases = {}, description = "The number of lines to display, starting at 1.", required = false, multiValued = false)
-    private int numberOfLines;
-
-    @Argument(index = 0, name = "paths or urls", description = "A list of file paths or urls to display separated by whitespaces.", required = false, multiValued = true)
-    private List<String> paths;
-
-    protected Object doExecute() throws Exception {
-        //If no paths provided assume standar input
-        if (paths == null || paths.size() == 0) {
-            if (log.isDebugEnabled()) {
-                log.debug("Heading STDIN");
-            }
-
-            head(new BufferedReader(new InputStreamReader(System.in)));
-        } else {
-            for (String filename : paths) {
-                BufferedReader reader;
-
-                // First try a URL
-                try {
-                    URL url = new URL(filename);
-                    if (log.isDebugEnabled()) {
-                        log.debug("Heading URL: " + url);
-                    }
-                    reader = new BufferedReader(new InputStreamReader(url.openStream()));
-                }
-                catch (MalformedURLException ignore) {
-                    // They try a file
-                    File file = new File(filename);
-                    if (log.isDebugEnabled()) {
-                        log.debug("Heading file: " + file);
-                    }
-                    reader = new BufferedReader(new FileReader(file));
-                }
-
-                try {
-                    head(reader);
-                }
-                finally {
-                    try {
-                        reader.close();
-                    } catch (IOException e) {
-                        // Ignore
-                    }
-                }
-            }
-        }
-        return null;
-    }
-
-    private void head(final BufferedReader reader) throws IOException {
-        String line;
-        int lineno = 1;
-
-        if (numberOfLines < 1) {
-            numberOfLines = DEFAULT_NUMBER_OF_LINES;
-        }
-
-        while ((line = reader.readLine()) != null && lineno <= numberOfLines) {
-            System.out.println(line);
-            lineno++;
-        }
-    }
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/HistoryAction.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/HistoryAction.java
deleted file mode 100644
index a3aeb3c..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/HistoryAction.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import jline.console.history.History;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.shell.console.AbstractAction;
-import org.fusesource.jansi.Ansi;
-
-/**
- * History command
- */
-@Command(scope = "shell", name="history", description="Prints command history.")
-public class HistoryAction extends AbstractAction {
-
-    @Override
-    protected Object doExecute() throws Exception {
-        History history = (History) session.get(".jline.history");
-
-        for (History.Entry element : history) {
-            System.out.println(
-                    Ansi.ansi()
-                        .a("  ")
-                        .a(Ansi.Attribute.INTENSITY_BOLD).render("%3d", element.index()).a(Ansi.Attribute.INTENSITY_BOLD_OFF)
-                        .a("  ")
-                        .a(element.value())
-                        .toString());
-        }
-        return null;
-    }
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/IfAction.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/IfAction.java
deleted file mode 100644
index 3016294..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/IfAction.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.service.command.Function;
-import org.apache.karaf.shell.console.AbstractAction;
-
-/**
- * Execute a closure on a list of arguments.
- */
-@Command(scope = "shell", name = "if", description = "If/Then/Else block.")
-public class IfAction extends AbstractAction {
-
-    @Argument(name = "condition", index = 0, multiValued = false, required = true, description = "The condition")
-    Function condition;
-
-    @Argument(name = "ifTrue", index = 1, multiValued = false, required = true, description = "The function to execute if the condition is true")
-    Function ifTrue;
-
-    @Argument(name = "ifFalse", index = 2, multiValued = false, required = false, description = "The function to execute if the condition is false")
-    Function ifFalse;
-
-    @Override
-    protected Object doExecute() throws Exception {
-        Object result = condition.execute(session, null);
-        if (isTrue(result)) {
-            return ifTrue.execute(session, null);
-        } else {
-            if (ifFalse != null) {
-                return ifFalse.execute(session, null);
-            }
-        }
-        return null;
-    }
-
-    private boolean isTrue(Object result) {
-        if (result == null) {
-            return false;
-        }
-        if (result instanceof String && ((String) result).equals("")) {
-            return false;
-        }
-        if (result instanceof Boolean) {
-            return ((Boolean) result).booleanValue();
-        }
-        return true;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/InfoAction.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/InfoAction.java
deleted file mode 100644
index 662ad8f..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/InfoAction.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import java.lang.management.ClassLoadingMXBean;
-import java.lang.management.GarbageCollectorMXBean;
-import java.lang.management.ManagementFactory;
-import java.lang.management.MemoryMXBean;
-import java.lang.management.OperatingSystemMXBean;
-import java.lang.management.RuntimeMXBean;
-import java.lang.management.ThreadMXBean;
-import java.lang.reflect.Method;
-import java.text.DecimalFormat;
-import java.text.DecimalFormatSymbols;
-import java.text.NumberFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Properties;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.shell.commands.info.InfoProvider;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.fusesource.jansi.Ansi;
-
-@Command(scope = "shell", name = "info", description = "Prints system information.")
-public class InfoAction extends OsgiCommandSupport {
-
-    private NumberFormat fmtI = new DecimalFormat("###,###", new DecimalFormatSymbols(Locale.ENGLISH));
-    private NumberFormat fmtD = new DecimalFormat("###,##0.000", new DecimalFormatSymbols(Locale.ENGLISH));
-
-    private List<InfoProvider> infoProviders = new LinkedList<InfoProvider>();
-
-    protected Object doExecute() throws Exception {
-        int maxNameLen;
-
-        RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
-        OperatingSystemMXBean os = ManagementFactory.getOperatingSystemMXBean();
-        ThreadMXBean threads = ManagementFactory.getThreadMXBean();
-        MemoryMXBean mem = ManagementFactory.getMemoryMXBean();
-        ClassLoadingMXBean cl = ManagementFactory.getClassLoadingMXBean();
-
-        //
-        // print Karaf informations
-        //
-        maxNameLen = 25;
-        System.out.println("Karaf");
-        printValue("Karaf version", maxNameLen, System.getProperty("karaf.version"));
-        printValue("Karaf home", maxNameLen, System.getProperty("karaf.home"));
-        printValue("Karaf base", maxNameLen, System.getProperty("karaf.base"));
-        printValue("OSGi Framework", maxNameLen, bundleContext.getBundle(0).getSymbolicName() + " - " +
-                bundleContext.getBundle(0).getVersion());
-        System.out.println();
-
-        System.out.println("JVM");
-        printValue("Java Virtual Machine", maxNameLen, runtime.getVmName() + " version " + runtime.getVmVersion());
-        printValue("Version", maxNameLen, System.getProperty("java.version"));
-        printValue("Vendor", maxNameLen, runtime.getVmVendor());
-        printValue("Uptime", maxNameLen, printDuration(runtime.getUptime()));
-        try {
-            printValue("Process CPU time", maxNameLen, printDuration(getSunOsValueAsLong(os, "getProcessCpuTime") / 1000000));
-        } catch (Throwable t) {
-        }
-        printValue("Total compile time", maxNameLen, printDuration(ManagementFactory.getCompilationMXBean().getTotalCompilationTime()));
-
-        System.out.println("Threads");
-        printValue("Live threads", maxNameLen, Integer.toString(threads.getThreadCount()));
-        printValue("Daemon threads", maxNameLen, Integer.toString(threads.getDaemonThreadCount()));
-        printValue("Peak", maxNameLen, Integer.toString(threads.getPeakThreadCount()));
-        printValue("Total started", maxNameLen, Long.toString(threads.getTotalStartedThreadCount()));
-
-        System.out.println("Memory");
-        printValue("Current heap size", maxNameLen, printSizeInKb(mem.getHeapMemoryUsage().getUsed()));
-        printValue("Maximum heap size", maxNameLen, printSizeInKb(mem.getHeapMemoryUsage().getMax()));
-        printValue("Committed heap size", maxNameLen, printSizeInKb(mem.getHeapMemoryUsage().getCommitted()));
-        printValue("Pending objects", maxNameLen, Integer.toString(mem.getObjectPendingFinalizationCount()));
-        for (GarbageCollectorMXBean gc : ManagementFactory.getGarbageCollectorMXBeans()) {
-            String val = "Name = '" + gc.getName() + "', Collections = " + gc.getCollectionCount() + ", Time = " + printDuration(gc.getCollectionTime());
-            printValue("Garbage collector", maxNameLen, val);
-        }
-
-        System.out.println("Classes");
-        printValue("Current classes loaded", maxNameLen, printLong(cl.getLoadedClassCount()));
-        printValue("Total classes loaded", maxNameLen, printLong(cl.getTotalLoadedClassCount()));
-        printValue("Total classes unloaded", maxNameLen, printLong(cl.getUnloadedClassCount()));
-
-        System.out.println("Operating system");
-        printValue("Name", maxNameLen, os.getName() + " version " + os.getVersion());
-        printValue("Architecture", maxNameLen, os.getArch());
-        printValue("Processors", maxNameLen, Integer.toString(os.getAvailableProcessors()));
-        try {
-            printValue("Total physical memory", maxNameLen, printSizeInKb(getSunOsValueAsLong(os, "getTotalPhysicalMemorySize")));
-            printValue("Free physical memory", maxNameLen, printSizeInKb(getSunOsValueAsLong(os, "getFreePhysicalMemorySize")));
-            printValue("Committed virtual memory", maxNameLen, printSizeInKb(getSunOsValueAsLong(os, "getCommittedVirtualMemorySize")));
-            printValue("Total swap space", maxNameLen, printSizeInKb(getSunOsValueAsLong(os, "getTotalSwapSpaceSize")));
-            printValue("Free swap space", maxNameLen, printSizeInKb(getSunOsValueAsLong(os, "getFreeSwapSpaceSize")));
-        } catch (Throwable t) {
-        }
-
-        //Display Information from external information providers.
-        Map<String, Map<Object, Object>> properties = new HashMap<String, Map<Object, Object>>();
-        if (infoProviders != null) {
-
-            // dump all properties to Map, KARAF-425
-            for (InfoProvider provider : infoProviders) {
-                if (!properties.containsKey(provider.getName())) {
-                    properties.put(provider.getName(), new Properties());
-                }
-                properties.get(provider.getName()).putAll(provider.getProperties());
-            }
-
-            List<String> sections = new ArrayList<String>(properties.keySet());
-            Collections.sort(sections);
-            for (String section : sections) {
-                List<Object> keys = new ArrayList<Object>(properties.get(section).keySet());
-                if (keys.size() > 0) {
-                    System.out.println(section);
-
-                    Collections.sort(keys, new Comparator<Object>() {
-                        public int compare(Object o1, Object o2) {
-                            return String.valueOf(o1).compareTo(String.valueOf(o2));
-                        }
-                    });
-
-                    for (Object key : keys) {
-                        printValue(String.valueOf(key), maxNameLen, String.valueOf(properties.get(section).get(key)));
-                    }
-                }
-            }
-        }
-
-        return null;
-    }
-
-    private long getSunOsValueAsLong(OperatingSystemMXBean os, String name) throws Exception {
-        Method mth = os.getClass().getMethod(name);
-        return (Long) mth.invoke(os);
-    }
-
-    private String printLong(long i) {
-        return fmtI.format(i);
-    }
-
-    private String printSizeInKb(double size) {
-        return fmtI.format((long) (size / 1024)) + " kbytes";
-    }
-
-    private String printDuration(double uptime) {
-        uptime /= 1000;
-        if (uptime < 60) {
-            return fmtD.format(uptime) + " seconds";
-        }
-        uptime /= 60;
-        if (uptime < 60) {
-            long minutes = (long) uptime;
-            String s = fmtI.format(minutes) + (minutes > 1 ? " minutes" : " minute");
-            return s;
-        }
-        uptime /= 60;
-        if (uptime < 24) {
-            long hours = (long) uptime;
-            long minutes = (long) ((uptime - hours) * 60);
-            String s = fmtI.format(hours) + (hours > 1 ? " hours" : " hour");
-            if (minutes != 0) {
-                s += " " + fmtI.format(minutes) + (minutes > 1 ? " minutes" : " minute");
-            }
-            return s;
-        }
-        uptime /= 24;
-        long days = (long) uptime;
-        long hours = (long) ((uptime - days) * 24);
-        String s = fmtI.format(days) + (days > 1 ? " days" : " day");
-        if (hours != 0) {
-            s += " " + fmtI.format(hours) + (hours > 1 ? " hours" : " hour");
-        }
-        return s;
-    }
-
-    void printSysValue(String prop, int pad) {
-        printValue(prop, pad, System.getProperty(prop));
-    }
-
-    void printValue(String name, int pad, String value) {
-        System.out.println(Ansi.ansi().a("  ")
-                .a(Ansi.Attribute.INTENSITY_BOLD).a(name).a(spaces(pad - name.length())).a(Ansi.Attribute.RESET)
-                .a("   ").a(value).toString());
-    }
-
-    String spaces(int nb) {
-        StringBuilder sb = new StringBuilder();
-        for (int i = 0; i < nb; i++) {
-            sb.append(' ');
-        }
-        return sb.toString();
-    }
-
-    public List<InfoProvider> getInfoProviders() {
-        return infoProviders;
-    }
-
-    public void setInfoProviders(List<InfoProvider> infoProviders) {
-        this.infoProviders = infoProviders;
-    }
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/JavaAction.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/JavaAction.java
deleted file mode 100644
index 118493b..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/JavaAction.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import java.lang.reflect.Method;
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.shell.console.AbstractAction;
-
-/**
- * Execute a Java standard application.
- *
- * <p>By default looks for static main(String[]) to execute, but
- * you can specify a different static method that takes a String[]
- * to execute instead.
- */
-@Command(scope = "shell", name = "java", description = "Executes a Java standard application.")
-public class JavaAction extends AbstractAction {
-
-    @Option(name = "-m", aliases = {"--method"}, description = "Invoke a named method", required = false, multiValued = false)
-    private String methodName = "main";
-
-    @Argument(index = 0, name = "className", description="The name of the class to invoke", required = true, multiValued = false)
-    private String className;
-
-    @Argument(index = 1, name = "arguments", description="Arguments to pass to the method of the given class", required = false, multiValued = false)
-    private List<String> args;
-
-    protected Object doExecute() throws Exception {
-        boolean info = log.isInfoEnabled();
-
-        Class type = Thread.currentThread().getContextClassLoader().loadClass(className);
-        if (info) {
-            log.info("Using type: " + type);
-        }
-
-        Method method = type.getMethod(methodName, String[].class);
-        if (info) {
-            log.info("Using method: " + method);
-        }
-
-        if (info) {
-            log.info("Invoking w/arguments: {}", args);
-        }
-
-        Object result = method.invoke(null, args);
-
-        if (info) {
-            log.info("Result: " + result);
-        }
-
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/LogoutAction.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/LogoutAction.java
deleted file mode 100644
index b3738fc..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/LogoutAction.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.shell.console.AbstractAction;
-import org.apache.karaf.shell.console.CloseShellException;
-
-@Command(scope = "shell", name = "logout", description = "Disconnects shell from current session.")
-public class LogoutAction extends AbstractAction {
-
-    protected Object doExecute() throws Exception {
-        log.info("Disconnecting from current session...");
-        throw new CloseShellException();
-    }
-
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/MoreAction.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/MoreAction.java
deleted file mode 100644
index 192b0ff..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/MoreAction.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.lang.reflect.Method;
-import java.util.LinkedList;
-import java.util.List;
-
-import jline.Terminal;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.shell.console.AbstractAction;
-
-@Command(scope = "shell", name = "more", description = "File pager.")
-public class MoreAction extends AbstractAction {
-
-    @Option(name = "--lines", description = "stop after N lines")
-    int lines;
-
-    @Override
-    protected Object doExecute() throws Exception {
-        Terminal term = (Terminal) session.get(".jline.terminal");
-        if (term == null || !isTty(System.out)) {
-            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
-            String line;
-            while ((line = reader.readLine()) != null) {
-                System.out.println(line);
-            }
-            return null;
-        } else {
-            boolean echo = term.isEchoEnabled();
-            term.setEchoEnabled(false);
-            try {
-                if (lines == 0) {
-                    lines = term.getHeight();
-                }
-                LineSplitter reader = new LineSplitter(new BufferedReader(new InputStreamReader(System.in)), term.getWidth());
-                int count = 0;
-                int c;
-                do {
-                    do {
-                        String line;
-                        if ((line = reader.readLine()) == null) {
-                            return null;
-                        }
-                        System.out.println(line);
-                    } while (++count < lines - 2);
-                    c = -1;
-                    while (c == -1) {
-                        System.out.flush();
-                        System.out.print("--More--");
-                        System.out.flush();
-                        c = session.getKeyboard().read();
-                        switch (c) {
-                            case 'q':
-                            case -1:
-                                c = 'q';
-                                break;
-                            case '\r':
-                            case '\n':
-                            case 14: // Down arrow
-                                count--;
-                                System.out.print("\r          \r");
-                                break;
-                            case ' ':
-                                count = 0;
-                                System.out.print("\r          \r");
-                                break;
-                            case 16: // Up arrow
-                                // fall through
-                            default:
-                                c = -1;
-                                System.out.print("\r          \r");
-                                break;
-                        }
-                        if (c == 'q') {
-                            break;
-                        }
-                    }
-                } while (c != 'q');
-                return null;
-            } finally {
-                term.setEchoEnabled(echo);
-            }
-        }
-    }
-
-    public static class LineSplitter {
-
-        private final BufferedReader reader;
-        private final int width;
-        private final List<String> lines = new LinkedList<String>();
-
-        public LineSplitter(BufferedReader reader, int width) {
-            this.reader = reader;
-            this.width = width;
-        }
-
-        public String readLine() throws IOException {
-            if (lines.isEmpty()) {
-                String str = reader.readLine();
-                if (str == null) {
-                    return null;
-                }
-                while (str.length() > width) {
-                    lines.add(str.substring(0, width));
-                    str = str.substring(width);
-                }
-                lines.add(str);
-            }
-            return lines.remove(0);
-        }
-    }
-
-    protected boolean isTty(OutputStream out) {
-        try {
-            Method mth = out.getClass().getDeclaredMethod("getCurrent");
-            mth.setAccessible(true);
-            Object current = mth.invoke(out);
-            return current == session.getConsole();
-        } catch (Throwable t) {
-            return false;
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/NewAction.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/NewAction.java
deleted file mode 100644
index c898b36..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/NewAction.java
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.converter.DefaultConverter;
-import org.apache.felix.gogo.commands.converter.ReifiedType;
-import org.apache.felix.gogo.commands.converter.GenericType;
-import org.apache.karaf.shell.console.AbstractAction;
-
-import java.lang.reflect.Array;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Instantiate a new object
- */
-@Command(scope = "shell", name = "new", description = "Creates a new java object.")
-public class NewAction extends AbstractAction {
-
-    @Argument(name = "class", index = 0, multiValued = false, required = true, description = "The object class")
-    Class clazz;
-
-    @Argument(name = "args", index = 1, multiValued = true, required = false, description = "Constructor arguments")
-    List<Object> args;
-
-    boolean reorderArguments;
-
-    protected DefaultConverter converter = new DefaultConverter(getClass().getClassLoader());
-
-    @Override
-    protected Object doExecute() throws Exception {
-        if (args == null) {
-            args = Collections.emptyList();
-        }
-        // Handle arrays
-        if (clazz.isArray()) {
-            Object obj = Array.newInstance(clazz.getComponentType(), args.size());
-            for (int i = 0; i < args.size(); i++) {
-                Array.set(obj, i, convert(args.get(i), clazz.getComponentType()));
-            }
-            return obj;
-        }
-        // Map of matching constructors
-        Map<Constructor, List<Object>> matches = findMatchingConstructors(clazz, args, Arrays.asList(new ReifiedType[args.size()]));
-        if (matches.size() == 1) {
-            try {
-                Map.Entry<Constructor, List<Object>> match = matches.entrySet().iterator().next();
-                return newInstance(match.getKey(), match.getValue().toArray());
-            } catch (Throwable e) {
-                throw new Exception("Error when instantiating object of class " + clazz.getName(), getRealCause(e));
-            }
-        } else if (matches.size() == 0) {
-            throw new Exception("Unable to find a matching constructor on class " + clazz.getName() + " for arguments " + args + " when instantiating object.");
-        } else {
-            throw new Exception("Multiple matching constructors found on class " + clazz.getName() + " for arguments " + args + " when instantiating object: " + matches.keySet());
-        }
-    }
-
-
-    //
-    // Code below comes from Aries blueprint implementation.  Given this code is not available
-    // from a public API it has been copied here.
-    //
-
-    private Object newInstance(Constructor constructor, Object... args) throws Exception {
-        return constructor.newInstance(args);
-    }
-
-    private Map<Constructor, List<Object>> findMatchingConstructors(Class type, List<Object> args, List<ReifiedType> types) {
-        Map<Constructor, List<Object>> matches = new HashMap<Constructor, List<Object>>();
-        // Get constructors
-        List<Constructor> constructors = new ArrayList<Constructor>(Arrays.asList(type.getConstructors()));
-        // Discard any signature with wrong cardinality
-        for (Iterator<Constructor> it = constructors.iterator(); it.hasNext();) {
-            if (it.next().getParameterTypes().length != args.size()) {
-                it.remove();
-            }
-        }
-        // Find a direct match with assignment
-        if (matches.size() != 1) {
-            Map<Constructor, List<Object>> nmatches = new HashMap<Constructor, List<Object>>();
-            for (Constructor cns : constructors) {
-                boolean found = true;
-                List<Object> match = new ArrayList<Object>();
-                for (int i = 0; i < args.size(); i++) {
-                    ReifiedType argType = new GenericType(cns.getGenericParameterTypes()[i]);
-                    if (types.get(i) != null && !argType.getRawClass().equals(types.get(i).getRawClass())) {
-                        found = false;
-                        break;
-                    }
-                    if (!isAssignable(args.get(i), argType)) {
-                        found = false;
-                        break;
-                    }
-                    try {
-                        match.add(convert(args.get(i), cns.getGenericParameterTypes()[i]));
-                    } catch (Throwable t) {
-                        found = false;
-                        break;
-                    }
-                }
-                if (found) {
-                    nmatches.put(cns, match);
-                }
-            }
-            if (nmatches.size() > 0) {
-                matches = nmatches;
-            }
-        }
-        // Find a direct match with conversion
-        if (matches.size() != 1) {
-            Map<Constructor, List<Object>> nmatches = new HashMap<Constructor, List<Object>>();
-            for (Constructor cns : constructors) {
-                boolean found = true;
-                List<Object> match = new ArrayList<Object>();
-                for (int i = 0; i < args.size(); i++) {
-                    ReifiedType argType = new GenericType(cns.getGenericParameterTypes()[i]);
-                    if (types.get(i) != null && !argType.getRawClass().equals(types.get(i).getRawClass())) {
-                        found = false;
-                        break;
-                    }
-                    try {
-                        Object val = convert(args.get(i), argType);
-                        match.add(val);
-                    } catch (Throwable t) {
-                        found = false;
-                        break;
-                    }
-                }
-                if (found) {
-                    nmatches.put(cns, match);
-                }
-            }
-            if (nmatches.size() > 0) {
-                matches = nmatches;
-            }
-        }
-        // Start reordering with assignment
-        if (matches.size() != 1 && reorderArguments && args.size() > 1) {
-            Map<Constructor, List<Object>> nmatches = new HashMap<Constructor, List<Object>>();
-            for (Constructor cns : constructors) {
-                ArgumentMatcher matcher = new ArgumentMatcher(cns.getGenericParameterTypes(), false);
-                List<Object> match = matcher.match(args, types);
-                if (match != null) {
-                    nmatches.put(cns, match);
-                }
-            }
-            if (nmatches.size() > 0) {
-                matches = nmatches;
-            }
-        }
-        // Start reordering with conversion
-        if (matches.size() != 1 && reorderArguments && args.size() > 1) {
-            Map<Constructor, List<Object>> nmatches = new HashMap<Constructor, List<Object>>();
-            for (Constructor cns : constructors) {
-                ArgumentMatcher matcher = new ArgumentMatcher(cns.getGenericParameterTypes(), true);
-                List<Object> match = matcher.match(args, types);
-                if (match != null) {
-                    nmatches.put(cns, match);
-                }
-            }
-            if (nmatches.size() > 0) {
-                matches = nmatches;
-            }
-        }
-        return matches;
-    }
-
-    protected Object convert(Object obj, Type type) throws Exception {
-        return converter.convert(obj, new GenericType(type));
-    }
-
-    protected Object convert(Object obj, ReifiedType type) throws Exception {
-        return converter.convert(obj, type);
-    }
-
-    public static boolean isAssignable(Object source, ReifiedType target) {
-        return source == null
-                || (target.size() == 0
-                    && unwrap(target.getRawClass()).isAssignableFrom(unwrap(source.getClass())));
-    }
-
-    private static Class unwrap(Class c) {
-        Class u = primitives.get(c);
-        return u != null ? u : c;
-    }
-
-    private static final Map<Class, Class> primitives;
-    static {
-        primitives = new HashMap<Class, Class>();
-        primitives.put(byte.class, Byte.class);
-        primitives.put(short.class, Short.class);
-        primitives.put(char.class, Character.class);
-        primitives.put(int.class, Integer.class);
-        primitives.put(long.class, Long.class);
-        primitives.put(float.class, Float.class);
-        primitives.put(double.class, Double.class);
-        primitives.put(boolean.class, Boolean.class);
-    }
-
-
-    private static Object UNMATCHED = new Object();
-
-    private class ArgumentMatcher {
-
-        private List<TypeEntry> entries;
-        private boolean convert;
-
-        public ArgumentMatcher(Type[] types, boolean convert) {
-            entries = new ArrayList<TypeEntry>();
-            for (Type type : types) {
-                entries.add(new TypeEntry(new GenericType(type)));
-            }
-            this.convert = convert;
-        }
-
-        public List<Object> match(List<Object> arguments, List<ReifiedType> forcedTypes) {
-            if (find(arguments, forcedTypes)) {
-                return getArguments();
-            }
-            return null;
-        }
-
-        private List<Object> getArguments() {
-            List<Object> list = new ArrayList<Object>();
-            for (TypeEntry entry : entries) {
-                if (entry.argument == UNMATCHED) {
-                    throw new RuntimeException("There are unmatched types");
-                } else {
-                    list.add(entry.argument);
-                }
-            }
-            return list;
-        }
-
-        private boolean find(List<Object> arguments, List<ReifiedType> forcedTypes) {
-            if (entries.size() == arguments.size()) {
-                boolean matched = true;
-                for (int i = 0; i < arguments.size() && matched; i++) {
-                    matched = find(arguments.get(i), forcedTypes.get(i));
-                }
-                return matched;
-            }
-            return false;
-        }
-
-        private boolean find(Object arg, ReifiedType forcedType) {
-            for (TypeEntry entry : entries) {
-                Object val = arg;
-                if (entry.argument != UNMATCHED) {
-                    continue;
-                }
-                if (forcedType != null) {
-                    if (!forcedType.equals(entry.type)) {
-                        continue;
-                    }
-                } else if (arg != null) {
-                    if (convert) {
-                        try {
-                            // TODO: call canConvert instead of convert()
-                            val = convert(arg, entry.type);
-                        } catch (Throwable t) {
-                            continue;
-                        }
-                    } else {
-                        if (!isAssignable(arg, entry.type)) {
-                            continue;
-                        }
-                    }
-                }
-                entry.argument = val;
-                return true;
-            }
-            return false;
-        }
-
-    }
-
-    private static class TypeEntry {
-
-        private final ReifiedType type;
-        private Object argument;
-
-        public TypeEntry(ReifiedType type) {
-            this.type = type;
-            this.argument = UNMATCHED;
-        }
-
-    }
-
-    public static Throwable getRealCause(Throwable t) {
-        if (t instanceof InvocationTargetException && t.getCause() != null) {
-            return t.getCause();
-        }
-        return t;
-    }
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/PrintfAction.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/PrintfAction.java
deleted file mode 100644
index 3e95dc9..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/PrintfAction.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import java.util.Collection;
-
-import org.apache.karaf.shell.console.AbstractAction;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-
-@Command(scope = "shell", name = "printf", description = "Formats and prints arguments.")
-public class PrintfAction extends AbstractAction {
-
-    @Argument(index = 0, name = "format", description = "The format pattern to use", required = true, multiValued = false)
-    private String format;
-
-    @Argument(index = 1, name = "arguments", description = "The arguments for the given format pattern", required = true, multiValued = true)
-    private Collection<Object> arguments = null;
-
-    protected Object doExecute() throws Exception {
-        System.out.printf(format, arguments.toArray());
-        return null;
-    }
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/SleepAction.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/SleepAction.java
deleted file mode 100644
index 9b200c4..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/SleepAction.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.shell.console.AbstractAction;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-
-@Command(scope = "shell", name = "sleep", description = "Sleeps for a bit then wakes up.")
-public class SleepAction extends AbstractAction {
-
-    @Argument(index = 0, name = "duration", description = "The amount of time to sleep. The default time unit is millisecond, use -s option to use second instead.", required = true, multiValued = false)
-    private long time = -1;
-    
-    @Option(name = "-s", aliases = { "--second" }, description = "Use a duration time in seconds instead of milliseconds.", required = false, multiValued = false)
-    private boolean second = false;
-
-    protected Object doExecute() throws Exception {
-        if (second) {
-            log.info("Sleeping for {} second(s)", time);
-            time = time * 1000;
-        } else {
-            log.info("Sleeping for {} millisecond(s)", time);
-        }
-
-        try {
-            Thread.sleep(time);
-        }
-        catch (InterruptedException ignore) {
-            log.debug("Sleep was interrupted... :-(");
-        }
-
-        log.info("Awake now");
-        return null;
-    }
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/SortAction.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/SortAction.java
deleted file mode 100644
index 3166355..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/SortAction.java
+++ /dev/null
@@ -1,399 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.PrintStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.shell.console.AbstractAction;
-
-/**
- * Sort lines of text
- */
-@Command(scope = "shell", name = "sort", description = "Writes sorted concatenation of all files to standard output.")
-public class SortAction extends AbstractAction {
-
-    @Option(name = "-f", aliases = { "-ignore-case" }, description = "fold lower case to upper case characters", required = false, multiValued = false)
-    private boolean caseInsensitive;
-
-    @Option(name = "-r", aliases = { "--reverse" }, description = "reverse the result of comparisons", required = false, multiValued = false)
-    private boolean reverse;
-
-    @Option(name = "-u", aliases = { "--unique" }, description = "output only the first of an equal run", required = false, multiValued = false)
-    private boolean unique;
-
-    @Option(name = "-t", aliases = { "--field-separator" }, description = "use SEP instead of non-blank to blank transition", required = false, multiValued = false)
-    private String separator;
-
-    @Option(name = "-b", aliases = { "--ignore-leading-blanks" }, description = "ignore leading blanks", required = false, multiValued = false)
-    private boolean ignoreBlanks;
-
-    @Option(name = "-k", aliases = { "--key" }, description = "Fields to use for sorting separated by whitespaces", required = false, multiValued = true)
-    private List<String> sortFields;
-
-    @Option(name = "-n", aliases = { "--numeric-sort" }, description = "compare according to string numerical value", required = false, multiValued = false)
-    private boolean numeric;
-
-    @Argument(index = 0, name = "files", description = "A list of files separated by whitespaces", required = false, multiValued = true)
-    private List<String> paths;
-
-
-    public Object doExecute() throws Exception {
-        if (paths != null && paths.size() > 0) {
-            List<String> lines = new ArrayList<String>();
-            for (String filename : paths) {
-                BufferedReader reader;
-
-                // First try a URL
-                try {
-                    URL url = new URL(filename);
-                    log.info("Printing URL: " + url);
-                    reader = new BufferedReader(new InputStreamReader(url.openStream()));
-                }
-                catch (MalformedURLException ignore) {
-                    // They try a file
-                    File file = new File(filename);
-                    log.info("Printing file: " + file);
-                    reader = new BufferedReader(new FileReader(file));
-                }
-
-                try {
-                    read(reader, lines);
-                }
-                finally {
-                    try {
-                        reader.close();
-                    } catch (IOException e) {
-                        // Ignore
-                    }
-                }
-            }
-            sort(lines, System.out);
-        }
-        else {
-            sort(System.in, System.out);
-        }
-        return null;
-    }
-
-    protected void read(BufferedReader r, List<String> lines) throws Exception {
-        for (String s = r.readLine(); s != null; s = r.readLine()) {
-            lines.add(s);
-        }
-    }
-
-    protected void sort(InputStream input, PrintStream out) throws Exception {
-        List<String> strings = new ArrayList<String>();
-        BufferedReader r = new BufferedReader(new InputStreamReader(input));
-        read(r, strings);
-        sort(strings, out);
-    }
-
-    protected void sort(List<String> strings, PrintStream out) throws Exception {
-        char sep = (separator == null || separator.length() == 0) ? '\0' : separator.charAt(0);
-        Collections.sort(strings, new SortComparator(caseInsensitive, reverse, ignoreBlanks, numeric, sep, sortFields));
-        String last = null;
-        for (String s : strings) {
-            if (last == null) {
-                last = s;
-            } else if (!unique || !s.equals(last)) {
-                out.println(s);
-            }
-        }
-    }
-
-    public static class SortComparator implements Comparator<String> {
-
-        private boolean caseInsensitive;
-        private boolean reverse;
-        private boolean ignoreBlanks;
-        private boolean numeric;
-        private char separator;
-        private List<Key> sortKeys;
-
-        private static Pattern fpPattern;
-        static {
-            final String Digits     = "(\\p{Digit}+)";
-            final String HexDigits  = "(\\p{XDigit}+)";
-            final String Exp        = "[eE][+-]?" + Digits;
-            final String fpRegex    = "([\\x00-\\x20]*[+-]?(NaN|Infinity|(((" + Digits + "(\\.)?(" + Digits + "?)(" + Exp + ")?)|(\\.(" + Digits + ")(" + Exp + ")?)|(((0[xX]" + HexDigits + "(\\.)?)|(0[xX]" + HexDigits + "?(\\.)" + HexDigits + "))[pP][+-]?" + Digits + "))" + "[fFdD]?))[\\x00-\\x20]*)(.*)";
-            fpPattern = Pattern.compile(fpRegex);
-        }
-
-        public SortComparator(boolean caseInsensitive,
-                              boolean reverse,
-                              boolean ignoreBlanks,
-                              boolean numeric,
-                              char separator,
-                              List<String> sortFields) {
-            this.caseInsensitive = caseInsensitive;
-            this.reverse = reverse;
-            this.separator = separator;
-            this.ignoreBlanks = ignoreBlanks;
-            this.numeric = numeric;
-            if (sortFields == null || sortFields.size() == 0) {
-                sortFields = new ArrayList<String>();
-                sortFields.add("1");
-            }
-            sortKeys = new ArrayList<Key>();
-            for (String f : sortFields) {
-                sortKeys.add(new Key(f));
-            }
-        }
-
-        public int compare(String o1, String o2) {
-            int res = 0;
-
-            List<Integer> fi1 = getFieldIndexes(o1);
-            List<Integer> fi2 = getFieldIndexes(o2);
-            for (Key key : sortKeys) {
-                int[] k1 = getSortKey(o1, fi1, key);
-                int[] k2 = getSortKey(o2, fi2, key);
-                if (key.numeric) {
-                    Double d1 = getDouble(o1, k1[0], k1[1]);
-                    Double d2 = getDouble(o2, k2[0], k2[1]);
-                    res = d1.compareTo(d2);
-                } else {
-                    res = compareRegion(o1, k1[0], k1[1], o2, k2[0], k2[1], key.caseInsensitive);
-                }
-                if (res != 0) {
-                    if (key.reverse) {
-                        res = - res;
-                    }
-                    break;
-                }
-            }
-            return res;
-        }
-
-        protected Double getDouble(String s, int start, int end) {
-            Matcher m = fpPattern.matcher(s.substring(start, end));
-            m.find();
-            return new Double(s.substring(0, m.end(1)));
-        }
-
-        protected int compareRegion(String s1, int start1, int end1, String s2, int start2, int end2, boolean caseInsensitive) {
-            int n1 = end1, n2 = end2;
-            for (int i1 = start1, i2 = start2; i1 < end1 && i2 < n2; i1++, i2++) {
-                char c1 = s1.charAt(i1);
-                char c2 = s2.charAt(i2);
-                if (c1 != c2) {
-                    if (caseInsensitive) {
-                        c1 = Character.toUpperCase(c1);
-                        c2 = Character.toUpperCase(c2);
-                        if (c1 != c2) {
-                            c1 = Character.toLowerCase(c1);
-                            c2 = Character.toLowerCase(c2);
-                            if (c1 != c2) {
-                                return c1 - c2;
-                            }
-                        }
-                    } else {
-                        return c1 - c2;
-                    }
-                }
-            }
-            return n1 - n2;
-        }
-
-        protected int[] getSortKey(String str, List<Integer> fields, Key key) {
-            int start;
-            int end;
-            if (key.startField * 2 <= fields.size()) {
-                start = fields.get((key.startField - 1) * 2);
-                if (key.ignoreBlanksStart) {
-                    while (start < fields.get((key.startField - 1) * 2 + 1) && Character.isWhitespace(str.charAt(start))) {
-                        start++;
-                    }
-                }
-                if (key.startChar > 0) {
-                    start = Math.min(start + key.startChar - 1, fields.get((key.startField - 1) * 2 + 1));
-                }
-            } else {
-                start = 0;
-            }
-            if (key.endField > 0 && key.endField * 2 <= fields.size()) {
-                end =  fields.get((key.endField - 1) * 2);
-                if (key.ignoreBlanksEnd) {
-                    while (end < fields.get((key.endField - 1) * 2 + 1) && Character.isWhitespace(str.charAt(end))) {
-                        end++;
-                    }
-                }
-                if (key.endChar > 0) {
-                    end = Math.min(end + key.endChar - 1, fields.get((key.endField - 1) * 2 + 1));
-                }
-            } else {
-                end = str.length();
-            }
-            return new int[] { start, end };
-        }
-
-        protected List<Integer> getFieldIndexes(String o) {
-            List<Integer> fields = new ArrayList<Integer>();
-            if (o.length() > 0) {
-                if (separator == '\0') {
-                    int i = 0;
-                    fields.add(0);
-                    for (int idx = 1; idx < o.length(); idx++) {
-                        if (Character.isWhitespace(o.charAt(idx)) && !Character.isWhitespace(o.charAt(idx - 1))) {
-                            fields.add(idx - 1);
-                            fields.add(idx);
-                        }
-                    }
-                    fields.add(o.length() - 1);
-                } else {
-                    int last = -1;
-                    for (int idx = o.indexOf(separator); idx >= 0; idx = o.indexOf(separator, idx + 1)) {
-                        if (last >= 0) {
-                            fields.add(last);
-                            fields.add(idx - 1);
-                        } else if (idx > 0) {
-                            fields.add(0);
-                            fields.add(idx - 1);
-                        }
-                        last = idx + 1;
-                    }
-                    if (last < o.length()) {
-                        fields.add(last < 0 ? 0 : last);
-                        fields.add(o.length() - 1);
-                    }
-                }
-            }
-            return fields;
-        }
-
-        public class Key {
-            int startField;
-            int startChar;
-            int endField;
-            int endChar;
-            boolean ignoreBlanksStart;
-            boolean ignoreBlanksEnd;
-            boolean caseInsensitive;
-            boolean reverse;
-            boolean numeric;
-
-            public Key(String str) {
-                boolean modifiers = false;
-                boolean startPart = true;
-                boolean inField = true;
-                boolean inChar = false;
-                for (char c : str.toCharArray()) {
-                    switch (c) {
-                        case '0':
-                        case '1':
-                        case '2':
-                        case '3':
-                        case '4':
-                        case '5':
-                        case '6':
-                        case '7':
-                        case '8':
-                        case '9':
-                            if (!inField && !inChar) {
-                                throw new IllegalArgumentException("Bad field syntax: " + str);
-                            }
-                            if (startPart) {
-                                if (inChar) {
-                                    startChar = startChar * 10 + (c - '0');
-                                } else {
-                                    startField = startField * 10 + (c - '0');
-                                }
-                            } else {
-                                if (inChar) {
-                                    endChar = endChar * 10 + (c - '0');
-                                } else {
-                                    endField = endField * 10 + (c - '0');
-                                }
-                            }
-                            break;
-                        case '.':
-                            if (!inField) {
-                                throw new IllegalArgumentException("Bad field syntax: " + str);
-                            }
-                            inField = false;
-                            inChar = true;
-                            break;
-                        case 'n':
-                            inField = false;
-                            inChar = false;
-                            modifiers = true;
-                            numeric = true;
-                            break;
-                        case 'f':
-                            inField = false;
-                            inChar = false;
-                            modifiers = true;
-                            caseInsensitive = true;
-                            break;
-                        case 'r':
-                            inField = false;
-                            inChar = false;
-                            modifiers = true;
-                            reverse = true;
-                            break;
-                        case 'b':
-                            inField = false;
-                            inChar = false;
-                            modifiers = true;
-                            if (startPart) {
-                                ignoreBlanksStart = true;
-                            } else {
-                                ignoreBlanksEnd = true;
-                            }
-                            break;
-                        case ',':
-                            inField = true;
-                            inChar = false;
-                            startPart = false;
-                            break;
-                        default:
-                            throw new IllegalArgumentException("Bad field syntax: " + str);
-                    }
-                }
-                if (!modifiers) {
-                    ignoreBlanksStart = ignoreBlanksEnd = SortComparator.this.ignoreBlanks;
-                    reverse = SortComparator.this.reverse;
-                    caseInsensitive = SortComparator.this.caseInsensitive;
-                    numeric = SortComparator.this.numeric;
-                }
-                if (startField < 1) {
-                    throw new IllegalArgumentException("Bad field syntax: " + str);
-                }
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/SourceAction.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/SourceAction.java
deleted file mode 100644
index 0c8eb6c..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/SourceAction.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import java.io.BufferedReader;
-import java.io.CharArrayWriter;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.shell.console.AbstractAction;
-
-/**
- * TODO
- */
-@Command(scope = "shell", name = "source", description = "Run a script")
-public class SourceAction extends AbstractAction {
-
-    @Argument(index = 0, name = "script", description = "A URI pointing to the script", required = true, multiValued = false)
-    private String script;
-
-    @Argument(index = 1, name = "args", description = "Arguments for the script", required = false, multiValued = true)
-    private List<Object> args;
-
-    @Override
-    protected Object doExecute() throws Exception {
-        BufferedReader reader = null;
-        Object arg0 = session.get("0");
-        try {
-            // First try a URL
-            try {
-                URL url = new URL(script);
-                log.info("Printing URL: " + url);
-                reader = new BufferedReader(new InputStreamReader(url.openStream()));
-            }
-            catch (MalformedURLException ignore) {
-                // They try a file
-                File file = new File(script);
-                log.info("Printing file: " + file);
-                reader = new BufferedReader(new FileReader(file));
-            }
-
-            CharArrayWriter w = new CharArrayWriter();
-            int n;
-            char[] buf = new char[8192];
-            while ((n = reader.read(buf)) > 0) {
-                w.write(buf, 0, n);
-            }
-
-            for (int i = 0; args != null && i < args.size(); i++) {
-                session.put( Integer.toString(i+1), args.get(i) );
-            }
-
-            return session.execute(w.toString());
-        } finally {
-            for (int i = 0; args != null && i < args.size(); i++) {
-                session.put( Integer.toString(i+1), null );
-            }
-            session.put("0", arg0);
-            if (reader != null) {
-                try {
-                    reader.close();
-                } catch (IOException e) {
-                    // Ignore
-                }
-            }
-        }
-    }
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/TacAction.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/TacAction.java
deleted file mode 100644
index 14c4517..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/TacAction.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import java.io.StringWriter;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.io.File;
-import java.io.OutputStream;
-import java.io.BufferedWriter;
-import java.io.BufferedOutputStream;
-import java.io.FileOutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-
-import org.apache.karaf.shell.console.AbstractAction;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-
-/**
- * Grab the text from the standard input and return it as a string.
- * Also write this text to a file if specified
- */
-@Command(scope = "shell", name = "tac", description = "Captures the STDIN and returns it as a string. Optionally writes the content to a file.")
-public class TacAction extends AbstractAction {
-
-    @Option(name = "-f", aliases = {}, description = "Outputs the content to the given file", required = false, multiValued = false)
-    private File file;
-
-    protected Object doExecute() throws Exception {
-        StringWriter sw = new StringWriter();
-        Writer[] writers;
-        if (file != null) {
-            writers = new Writer[] { sw, new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))) };
-        } else {
-            writers = new Writer[] { sw };
-        }
-        BufferedReader rdr = new BufferedReader(new InputStreamReader(System.in));
-        String s = rdr.readLine();
-        boolean first = true;
-        while (s != null)
-        {
-            for (Writer w : writers) {
-                if (!first) {
-                    w.write("\n");
-                }
-                w.write(s);
-            }
-            first = false;
-            s = rdr.readLine();
-        }
-        for (Writer w : writers) {
-            w.close();
-        }
-        return sw.toString();
-    }
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/TailAction.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/TailAction.java
deleted file mode 100644
index 89b79b8..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/TailAction.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.InterruptedIOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.LinkedList;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.shell.console.AbstractAction;
-
-@Command(scope = "shell", name = "tail", description = "Displays the last lines of a file.")
-public class TailAction extends AbstractAction {
-
-    private static final int DEFAULT_NUMBER_OF_LINES = 10;
-
-    private static final int DEFAULT_SLEEP_INTERVAL = 200;
-
-    @Option(name = "-n", aliases = {}, description = "The number of lines to display, starting at 1.", required = false, multiValued = false)
-    private int numberOfLines;
-
-    @Option(name = "-f", aliases = {}, description = "Follow file changes", required = false, multiValued = false)
-    private boolean continuous;
-
-    @Option(name = "-s", aliases = {}, description = "Sleep interval (used for follow)", required = false, multiValued = false)
-    private long sleepInterval;
-
-    @Argument(index = 0, name = "path or url", description = "A file path or url to display.", required = false, multiValued = false)
-    private String path;
-
-    protected Object doExecute() throws Exception {
-        //If no paths provided assume standar input
-        if (path == null || path.trim().length() == 0) {
-            if (log.isDebugEnabled()) {
-                log.debug("Tailing STDIN");
-            }
-            tail(new BufferedReader(new InputStreamReader(System.in)));
-        } else {
-            BufferedReader reader;
-
-            // First try a URL
-            try {
-                URL url = new URL(path);
-                if (log.isDebugEnabled()) {
-                    log.debug("Tailing URL: " + url);
-                }
-                reader = new BufferedReader(new InputStreamReader(url.openStream()));
-            }
-            catch (MalformedURLException ignore) {
-                // They try a file
-                File file = new File(path);
-                if (log.isDebugEnabled()) {
-                    log.debug("Tailing file: " + file);
-                }
-                reader = new BufferedReader(new FileReader(file));
-            }
-
-            try {
-                tail(reader);
-            }
-            finally {
-                try {
-                    reader.close();
-                } catch (IOException e) {
-                    // Ignore
-                }
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * prints the tail of the file / url
-     * 
-     * @param reader
-     * @throws IOException
-     */
-    private void tail(final BufferedReader reader) throws InterruptedException, IOException {
-        
-        if (numberOfLines < 1) {
-            numberOfLines = DEFAULT_NUMBER_OF_LINES;
-        }
-        if (sleepInterval < 1) {
-            sleepInterval = DEFAULT_SLEEP_INTERVAL;
-        }
-        
-        LinkedList<String> lines = new LinkedList<String>();
-        String line;
-        while ((line = reader.readLine()) != null) {
-            lines.add(line);
-            if (lines.size() > numberOfLines) {
-                lines.removeFirst();
-            }
-        }
-
-        for (String l : lines) {
-            System.out.println(l);
-        }
-
-        //If command is running as continuous
-        while (continuous) {
-            Thread.sleep(sleepInterval);
-            while ((line = reader.readLine()) != null) {
-                System.out.println(line);
-            }
-        }
-    }
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/WatchAction.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/WatchAction.java
deleted file mode 100644
index 90d5503..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/WatchAction.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.service.command.CommandProcessor;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.karaf.shell.console.AbstractAction;
-
-@Command(scope = "shell", name = "watch", description = "Watches & refreshes the output of a command")
-public class WatchAction extends AbstractAction {
-
-    @Option(name = "-n", aliases = {"--interval"}, description = "The interval between executions of the command in seconds", required = false, multiValued = false)
-    private long interval = 1;
-
-    @Argument(index = 0, name = "command", description = "The command to watch / refresh", required = true, multiValued = true)
-    private String[] arguments;
-
-    CommandProcessor commandProcessor;
-    private ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
-
-    @Override
-    protected Object doExecute() throws Exception {
-        if (arguments == null || arguments.length == 0) {
-            System.err.println("Argument expected");
-            return null;
-        } else {
-            StringBuilder command = new StringBuilder();
-            for (String arg:arguments) {
-                command.append(arg).append(" ");
-            }
-            WatchTask watchTask = new WatchTask(commandProcessor, command.toString().trim());
-            executorService.scheduleAtFixedRate(watchTask, 0, interval, TimeUnit.SECONDS);
-            try {
-                session.getKeyboard().read();
-                watchTask.abort();
-            } finally {
-                executorService.shutdownNow();
-                watchTask.close();
-                return null;
-            }
-        }
-    }
-
-    public class WatchTask implements Runnable {
-
-        private final CommandProcessor processor;
-        private final String command;
-
-        CommandSession session;
-        ByteArrayOutputStream byteArrayOutputStream = null;
-        PrintStream printStream = null;
-        boolean doDisplay = true;
-
-        public WatchTask(CommandProcessor processor, String command) {
-            this.processor = processor;
-            this.command = command;
-        }
-
-        public void run() {
-            try {
-                byteArrayOutputStream = new ByteArrayOutputStream();
-                printStream = new PrintStream(byteArrayOutputStream);
-                session = commandProcessor.createSession(null, printStream, printStream);
-                session.put("SCOPE", "shell:osgi:*");
-                String output = "";
-                session.execute(command);
-                output = byteArrayOutputStream.toString();
-                // make sure before displaying that this is not a forgotten long running task
-                if (doDisplay) {
-                    System.out.print("\33[2J");
-                    System.out.print("\33[1;1H");
-                    System.out.print(output);
-                    System.out.flush();
-                }
-                byteArrayOutputStream.close();
-                session.close();
-            } catch (Exception e) {
-                //Ingore
-            }
-        }
-
-        /**
-         * Aborts the task that it currently running.
-         * It will prevent it from displaying anything.
-         */
-        public void abort() {
-            doDisplay = false;
-        }
-
-        /**
-         * Closes the {@CommandSession} and the streams for I/O.
-         *
-         * @throws IOException
-         */
-        public void close() throws IOException {
-            if (this.session != null) {
-                this.session.close();
-            }
-            if (this.byteArrayOutputStream != null) {
-                this.byteArrayOutputStream.close();
-            }
-            if (this.printStream != null) {
-                printStream.close();
-            }
-        }
-    }
-
-    public CommandProcessor getCommandProcessor() {
-        return commandProcessor;
-    }
-
-    public void setCommandProcessor(CommandProcessor commandProcessor) {
-        this.commandProcessor = commandProcessor;
-    }
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/info/InfoBundleTrackerCustomizer.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/info/InfoBundleTrackerCustomizer.java
deleted file mode 100644
index bca1be6..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/info/InfoBundleTrackerCustomizer.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands.info;
-
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleEvent;
-import org.osgi.framework.ServiceRegistration;
-import org.osgi.util.tracker.BundleTrackerCustomizer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Dictionary;
-import java.util.Properties;
-import java.util.StringTokenizer;
-
-/**
- *  Bundle tracker which check manifest headers for information.
- */
-public class InfoBundleTrackerCustomizer implements BundleTrackerCustomizer {
-
-    /**
-     * Logger.
-     */
-    private Logger logger = LoggerFactory.getLogger(InfoBundleTrackerCustomizer.class);
-
-    /**
-     * Bundle context.
-     */
-    private final BundleContext context;
-
-    public InfoBundleTrackerCustomizer(BundleContext context) {
-        this.context = context;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @SuppressWarnings("unchecked")
-    public Object addingBundle(Bundle bundle, BundleEvent event) {
-        Dictionary headers = bundle.getHeaders();
-        String headerEntry = (String) headers.get("Karaf-Info");
-
-        InfoProvider provider = createInfo(headerEntry);
-        if (provider == null) {
-            if (logger.isDebugEnabled()) {
-                logger.debug("Ignore incorrect info {} provided by bundle {}",
-                        headerEntry, bundle.getSymbolicName());
-            }
-            return null;
-        }
-        return bundle.getBundleContext().registerService(InfoProvider.class.getName(),
-                provider, null);
-    }
-
-    public void modifiedBundle(Bundle bundle, BundleEvent event, Object object) {
-    }
-
-    public void removedBundle(Bundle bundle, BundleEvent event, Object object) {
-        if (object instanceof ServiceRegistration) {
-            ServiceRegistration service = (ServiceRegistration) object;
-            service.unregister();
-        }
-    }
-
-    private InfoProvider createInfo(String entry) {
-        if (entry == null) {
-            return null;
-        }
-
-        StringTokenizer tokenizer = new StringTokenizer(entry, ";=");
-        if (tokenizer.countTokens() < 3) {
-            return null;
-        }
-
-        String name = tokenizer.nextToken();
-        Properties properties = new Properties();
-
-        do {
-            String property = tokenizer.nextToken();
-            if (tokenizer.hasMoreTokens()) {
-                properties.put(property, tokenizer.nextElement());
-            } else {
-                if (logger.isDebugEnabled()) {
-                    logger.debug("Ignore property {} without value", property);
-                }
-            }
-        } while (tokenizer.hasMoreTokens());
-
-        return new PojoInfoProvider(name, properties);
-    }
-
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/info/InfoProvider.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/info/InfoProvider.java
deleted file mode 100644
index 0460f29..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/info/InfoProvider.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands.info;
-
-import java.util.Properties;
-
-public interface InfoProvider {
-
-	public String getName();
-
-	public Properties getProperties();
-
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/info/PojoInfoProvider.java b/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/info/PojoInfoProvider.java
deleted file mode 100644
index c4b66d3..0000000
--- a/karaf-2.3.x/shell/commands/src/main/java/org/apache/karaf/shell/commands/info/PojoInfoProvider.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands.info;
-
-import java.util.Properties;
-
-public class PojoInfoProvider implements InfoProvider {
-
-	private String name;
-	private Properties properties;
-
-	public PojoInfoProvider() {
-	}
-
-	public PojoInfoProvider(String name, Properties properties) {
-		this.name = name;
-		this.properties = properties;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public Properties getProperties() {
-		return properties;
-	}
-
-	public void setProperties(Properties properties) {
-		this.properties = properties;
-	}
-}
diff --git a/karaf-2.3.x/shell/commands/src/main/resources/META-INF/services/org/apache/karaf/shell/commands b/karaf-2.3.x/shell/commands/src/main/resources/META-INF/services/org/apache/karaf/shell/commands
deleted file mode 100644
index 2047f27..0000000
--- a/karaf-2.3.x/shell/commands/src/main/resources/META-INF/services/org/apache/karaf/shell/commands
+++ /dev/null
@@ -1,35 +0,0 @@
-##---------------------------------------------------------------------------
-##  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.DateAction
-org.apache.karaf.shell.commands.EachAction
-org.apache.karaf.shell.commands.EchoAction
-org.apache.karaf.shell.commands.ExecuteAction
-org.apache.karaf.shell.commands.GrepAction
-org.apache.karaf.shell.commands.HistoryAction
-org.apache.karaf.shell.commands.HeadAction
-org.apache.karaf.shell.commands.IfAction
-org.apache.karaf.shell.commands.JavaAction
-org.apache.karaf.shell.commands.LogoutAction
-org.apache.karaf.shell.commands.MoreAction
-org.apache.karaf.shell.commands.NewAction
-org.apache.karaf.shell.commands.PrintfAction
-org.apache.karaf.shell.commands.SleepAction
-org.apache.karaf.shell.commands.SortAction
-org.apache.karaf.shell.commands.TacAction
-org.apache.karaf.shell.commands.TailAction
diff --git a/karaf-2.3.x/shell/commands/src/main/resources/OSGI-INF/blueprint/shell-commands.xml b/karaf-2.3.x/shell/commands/src/main/resources/OSGI-INF/blueprint/shell-commands.xml
deleted file mode 100644
index b0b6913..0000000
--- a/karaf-2.3.x/shell/commands/src/main/resources/OSGI-INF/blueprint/shell-commands.xml
+++ /dev/null
@@ -1,118 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.0.0">
-        <command name="shell/cat">
-            <action class="org.apache.karaf.shell.commands.CatAction"/>
-        </command>
-        <command name="shell/clear">
-            <action class="org.apache.karaf.shell.commands.ClearAction"/>
-        </command>
-        <command name="shell/date">
-            <action class="org.apache.karaf.shell.commands.DateAction"/>
-        </command>
-        <command name="shell/each">
-            <action class="org.apache.karaf.shell.commands.EachAction"/>
-        </command>
-        <command name="shell/echo">
-            <action class="org.apache.karaf.shell.commands.EchoAction"/>
-        </command>
-        <command name="shell/exec">
-            <action class="org.apache.karaf.shell.commands.ExecuteAction"/>
-        </command>
-        <command name="shell/grep">
-            <action class="org.apache.karaf.shell.commands.GrepAction"/>
-        </command>
-        <command name="shell/history">
-            <action class="org.apache.karaf.shell.commands.HistoryAction"/>
-        </command>
-        <command name="shell/head">
-            <action class="org.apache.karaf.shell.commands.HeadAction"/>
-        </command>
-        <command name="shell/if">
-            <action class="org.apache.karaf.shell.commands.IfAction"/>
-        </command>
-        <command name="shell/info">
-            <action class="org.apache.karaf.shell.commands.InfoAction">
-                <property name="infoProviders" ref="infoProviders"/>
-            </action>
-        </command>
-        <command name="shell/java">
-            <action class="org.apache.karaf.shell.commands.JavaAction"/>
-        </command>
-        <command name="shell/more">
-            <action class="org.apache.karaf.shell.commands.MoreAction"/>
-        </command>
-        <command name="shell/new">
-            <action class="org.apache.karaf.shell.commands.NewAction"/>
-        </command>
-        <command name="shell/logout">
-            <action class="org.apache.karaf.shell.commands.LogoutAction"/>
-        </command>
-        <command name="shell/printf">
-            <action class="org.apache.karaf.shell.commands.PrintfAction"/>
-        </command>
-        <command name="shell/sleep">
-            <action class="org.apache.karaf.shell.commands.SleepAction"/>
-        </command>
-        <command name="shell/sort">
-            <action class="org.apache.karaf.shell.commands.SortAction"/>
-        </command>
-        <command name="shell/source">
-            <action class="org.apache.karaf.shell.commands.SourceAction"/>
-        </command>
-        <command name="shell/tac">
-            <action class="org.apache.karaf.shell.commands.TacAction"/>
-        </command>
-        <command name="shell/tail">
-            <action class="org.apache.karaf.shell.commands.TailAction"/>
-        </command>
-        <command name="shell/watch">
-            <action class="org.apache.karaf.shell.commands.WatchAction">
-                <property name="commandProcessor" ref="commandProcessor"/>
-            </action>
-            <completers>
-                <ref component-id="commandCompleter" />
-                <null/>
-            </completers>
-        </command>
-    </command-bundle>
-
-   <bean id="commandCompleter" class="org.apache.karaf.shell.console.completer.CommandsCompleter"/>
-
-   <bean class="org.osgi.util.tracker.BundleTracker" init-method="open"
-        destroy-method="close">
-        <argument ref="blueprintBundleContext" />
-        <argument value="32" />
-        <argument>
-            <bean class="org.apache.karaf.shell.commands.info.InfoBundleTrackerCustomizer">
-                <argument ref="blueprintBundleContext" />
-            </bean>
-        </argument>
-    </bean>
-
-    <reference-list id="infoProviders" interface="org.apache.karaf.shell.commands.info.InfoProvider"
-        availability="optional">
-    </reference-list>
-
-    <reference id="commandProcessor" interface="org.apache.felix.service.command.CommandProcessor"/>
- 
-</blueprint>
diff --git a/karaf-2.3.x/shell/commands/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/shell/commands/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 8831206..0000000
--- a/karaf-2.3.x/shell/commands/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,35 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides various shell commands.
-
-    The following commands are available:
-    \u001B[36mshell:cat\u001B[0m Displays the content of a file or url.
-    \u001B[36mshell:clear\u001B[0m Clears the console buffer.
-    \u001B[36mshell:date\u001B[0m Display the current time in the given FORMAT
-    \u001B[36mshell:each\u001B[0m Execute a closure on a list of arguments.
-    \u001B[36mshell:echo\u001B[0m Echoes or prints arguments to STDOUT.
-    \u001B[36mshell:exec\u001B[0m Executes system processes.
-    \u001B[36mshell:grep\u001B[0m Prints lines matching the given pattern.
-    \u001B[36mshell:head\u001B[0m Displays the first lines of a file.
-    \u001B[36mshell:history\u001B[0m Prints command history.
-    \u001B[36mshell:if\u001B[0m If/Then/Else block.
-    \u001B[36mshell:info\u001B[0m Prints system information.
-    \u001B[36mshell:java\u001B[0m Executes a Java standard application.
-    \u001B[36mshell:logout\u001B[0m Disconnects shell from current session.
-    \u001B[36mshell:more\u001B[0m File pager.
-    \u001B[36mshell:new\u001B[0m Creates a new java object.
-    \u001B[36mshell:printf\u001B[0m Formats and prints arguments.
-    \u001B[36mshell:sleep\u001B[0m Sleeps for a bit then wakes up.
-    \u001B[36mshell:sort\u001B[0m Writes sorted concatenation of all files to standard output.
-    \u001B[36mshell:tac\u001B[0m Captures the STDIN and returns it as a string. Optionally writes the content to a file.
-    \u001B[36mshell:tail\u001B[0m Displays the last lines of a file.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mCommands\u001B[0m and \u001B[36mUsing the console\u001B[0m sections of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/shell/commands/src/main/resources/org/apache/karaf/shell/commands/grep.txt b/karaf-2.3.x/shell/commands/src/main/resources/org/apache/karaf/shell/commands/grep.txt
deleted file mode 100644
index 1ada069..0000000
--- a/karaf-2.3.x/shell/commands/src/main/resources/org/apache/karaf/shell/commands/grep.txt
+++ /dev/null
@@ -1 +0,0 @@
-Grep uses Java regular expressions for pattern matching.  For more informations, see http://download.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html
diff --git a/karaf-2.3.x/shell/commands/src/test/java/org/apache/karaf/shell/commands/GrepTest.java b/karaf-2.3.x/shell/commands/src/test/java/org/apache/karaf/shell/commands/GrepTest.java
deleted file mode 100644
index 7b341bc..0000000
--- a/karaf-2.3.x/shell/commands/src/test/java/org/apache/karaf/shell/commands/GrepTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.util.Arrays;
-
-import junit.framework.TestCase;
-import org.apache.felix.gogo.commands.basic.DefaultActionPreparator;
-
-public class GrepTest extends TestCase {
-
-    public void testGrep() throws Exception {
-        InputStream input = System.in;
-        try {
-            ByteArrayInputStream bais = new ByteArrayInputStream("1\n2\n3\n4\n5\n6\n7\n8\n9\n".getBytes());
-            System.setIn(bais);
-
-            GrepAction grep = new GrepAction();
-            DefaultActionPreparator preparator = new DefaultActionPreparator();
-            preparator.prepare(grep, null, Arrays.<Object>asList("-C", "100", "2"));
-            grep.doExecute();
-        } finally {
-            System.setIn(input);
-        }
-    }
-}
diff --git a/karaf-2.3.x/shell/commands/src/test/java/org/apache/karaf/shell/commands/SortTest.java b/karaf-2.3.x/shell/commands/src/test/java/org/apache/karaf/shell/commands/SortTest.java
deleted file mode 100644
index 11a1a61..0000000
--- a/karaf-2.3.x/shell/commands/src/test/java/org/apache/karaf/shell/commands/SortTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.commands;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Collections;
-
-import junit.framework.TestCase;
-
-public class SortTest extends TestCase {
-
-    public void testFieldIndexesDefaultSep() {
-        SortAction.SortComparator comparator = new SortAction.SortComparator(false, false, false, false, '\0', null);
-        List<Integer> indexes = comparator.getFieldIndexes(" ad  re  t ");
-        assertTrue(Arrays.asList(0, 2, 3, 6, 7, 9, 10, 10).equals(indexes));
-    }
-
-    public void testFieldIndexesWithSep() {
-        SortAction.SortComparator comparator = new SortAction.SortComparator(false, false, false, false, '[', null);
-        List<Integer> indexes = comparator.getFieldIndexes("[  10] [Active     ] [       ] [    8] OPS4J Pax Logging - Service (1.3.0)");
-        assertTrue(Arrays.asList(1, 6, 8, 20, 22, 30, 32, 73 ).equals(indexes));
-
-        indexes = comparator.getFieldIndexes(" ad  re  t ");
-        assertTrue(Arrays.asList(0, 10).equals(indexes));
-    }
-
-    public void testSort() {
-        String s0 = "0321   abcd  ddcba   a";
-        String s1 = " 57t   bcad  ddacb   b";
-        String s2 = "  128  cab   ddbac   c";
-        List<String> strings = Arrays.asList(s0, s1, s2);
-
-        Collections.sort(strings, new SortAction.SortComparator(false, false, false, false, '\0', Arrays.asList("2")));
-        assertTrue(Arrays.asList(s0, s1, s2).equals(strings));
-
-        Collections.sort(strings, new SortAction.SortComparator(false, false, false, false, '\0', Arrays.asList("2.2b")));
-        assertTrue(Arrays.asList(s2, s0, s1).equals(strings));
-
-        Collections.sort(strings, new SortAction.SortComparator(false, false, false, true, '\0', null));
-        assertTrue(Arrays.asList(s1, s2, s0).equals(strings));
-
-        Collections.sort(strings, new SortAction.SortComparator(false, true, false, false, '\0', Arrays.asList("4")));
-        assertTrue(Arrays.asList(s2, s1, s0).equals(strings));
-    }
-
-}
diff --git a/karaf-2.3.x/shell/config/NOTICE b/karaf-2.3.x/shell/config/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/shell/config/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/shell/config/pom.xml b/karaf-2.3.x/shell/config/pom.xml
deleted file mode 100644
index dde9540..0000000
--- a/karaf-2.3.x/shell/config/pom.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.shell</groupId>
-        <artifactId>shell</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.shell.config</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Shell :: ConfigAdmin Commands</name>
-    <description>This bundle provides Karaf shell commands to manipulate the ConfigAdmin service.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.utils</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.fileinstall</artifactId>
-        </dependency>
-        
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-jdk14</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            org.apache.felix.service.command,
-                            org.apache.felix.gogo.commands,
-                            org.apache.karaf.shell.console,
-                            *
-                        </Import-Package>
-                        <Private-Package>
-                            org.apache.felix.utils*;-split-package:=merge-first,
-                            !*
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/CancelCommand.java b/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/CancelCommand.java
deleted file mode 100644
index 80c47cf..0000000
--- a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/CancelCommand.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.config;
-
-import org.osgi.service.cm.ConfigurationAdmin;
-import org.apache.felix.gogo.commands.Command;
-
-@Command(scope = "config", name = "cancel", description = "Cancels the changes to the configuration being edited.")
-public class CancelCommand extends ConfigCommandSupport {
-
-    protected void doExecute(ConfigurationAdmin admin) throws Exception {
-        session.put(PROPERTY_CONFIG_PID, null);
-        session.put(PROPERTY_CONFIG_PROPS, null);
-    }
-
-}
diff --git a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/ConfigCommandSupport.java b/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/ConfigCommandSupport.java
deleted file mode 100644
index c972033..0000000
--- a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/ConfigCommandSupport.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.config;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.List;
-
-import org.apache.felix.fileinstall.ArtifactInstaller;
-import org.apache.felix.utils.properties.Properties;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.osgi.framework.Constants;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
-
-/**
- * Abstract class from which all commands related to the ConfigurationAdmin
- * service should derive.
- * This command retrieves a reference to the ConfigurationAdmin service before
- * calling another method to actually process the command.
- */
-public abstract class ConfigCommandSupport extends OsgiCommandSupport {
-
-    public static final String PROPERTY_CONFIG_PID = "ConfigCommand.PID";
-    public static final String PROPERTY_CONFIG_PROPS = "ConfigCommand.Props";
-    private static final String PID_FILTER = "(service.pid=%s*)";
-    private static final String CONFIG_SUFFIX = ".cfg";
-    private static final String FACTORY_SEPARATOR = "-";
-    private static final String FILEINSTALL_FILE_NAME = "felix.fileinstall.filename";
-
-    protected File storage;
-    private List<ArtifactInstaller> artifactInstallers;
-
-    protected Object doExecute() throws Exception {
-        // Get config admin service.
-        ServiceReference ref = getBundleContext().getServiceReference(ConfigurationAdmin.class.getName());
-        if (ref == null) {
-            System.out.println("ConfigurationAdmin service is unavailable.");
-            return null;
-        }
-        ConfigurationAdmin admin = getConfigurationAdmin();
-        if (admin == null) {
-            System.out.println("ConfigAdmin service is unavailable.");
-            return null;
-        }
-
-        doExecute(admin);
-        return null;
-    }
-
-    protected Dictionary getEditedProps() throws Exception {
-        return (Dictionary) this.session.get(PROPERTY_CONFIG_PROPS);
-    }
-
-    protected ConfigurationAdmin getConfigurationAdmin() {
-        ServiceReference ref = getBundleContext().getServiceReference(ConfigurationAdmin.class.getName());
-        if (ref == null) {
-            return null;
-        }
-        try {
-            ConfigurationAdmin admin = (ConfigurationAdmin) getBundleContext().getService(ref);
-            if (admin == null) {
-                return null;
-            } else {
-                return admin;
-            }
-        } finally {
-            getBundleContext().ungetService(ref);
-        }
-    }
-
-    protected abstract void doExecute(ConfigurationAdmin admin) throws Exception;
-
-    /**
-     * <p>
-     * Returns the Configuration object of the given (felix fileinstall) file name.
-     * </p>
-     *
-     * @param fileName
-     * @return
-     */
-    public Configuration findConfigurationByFileName(ConfigurationAdmin admin, String fileName) throws IOException, InvalidSyntaxException {
-        if (fileName != null) {
-            String factoryPid = fileName;
-            if (fileName.contains(FACTORY_SEPARATOR)) {
-                factoryPid = fileName.substring(0, fileName.lastIndexOf(FACTORY_SEPARATOR));
-            }
-            Configuration[] configurations = admin.listConfigurations(String.format(PID_FILTER, factoryPid));
-            if (configurations != null) {
-                for (Configuration configuration : configurations) {
-                    Dictionary dictionary = configuration.getProperties();
-                    if (dictionary != null) {
-                        String fileInstallFileName = (String) dictionary.get(FILEINSTALL_FILE_NAME);
-                        int indexOfFileNameStart = fileInstallFileName.lastIndexOf("/");
-                        int indexOfFileNameEnd = fileInstallFileName.lastIndexOf(CONFIG_SUFFIX);
-                        String relativeFileName = fileInstallFileName.substring(indexOfFileNameStart + 1, indexOfFileNameEnd);
-                        if (fileName.equals(relativeFileName)) {
-                            return configuration;
-                        }
-                    }
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Saves config to storage or ConfigurationAdmin.
-     *
-     * @param admin
-     * @param pid
-     * @param props
-     * @param bypassStorage
-     * @throws IOException
-     */
-    protected void update(ConfigurationAdmin admin, String pid, Dictionary props, boolean bypassStorage) throws IOException {
-        if (!bypassStorage && storage != null) {
-            persistConfiguration(admin, pid, props);
-        } else {
-            updateConfiguration(admin, pid, props);
-        }
-    }
-
-    /**
-     * Persists configuration to storage.
-     *
-     * @param admin
-     * @param pid
-     * @param props
-     * @throws IOException
-     */
-    protected void persistConfiguration(ConfigurationAdmin admin, String pid, Dictionary props) throws IOException {
-        File storageFile = new File(storage, pid + ".cfg");
-        Configuration cfg = admin.getConfiguration(pid, null);
-        if (cfg != null && cfg.getProperties() != null) {
-            Object val = cfg.getProperties().get(FILEINSTALL_FILE_NAME);
-            try {
-            if (val instanceof URL) {
-                storageFile = new File(((URL) val).toURI());
-            }
-            if (val instanceof URI) {
-                storageFile = new File((URI) val);
-            }
-            if (val instanceof String) {
-                storageFile = new File(new URL((String) val).toURI());
-            }
-            } catch (Exception e) {
-                throw (IOException) new IOException(e.getMessage()).initCause(e);
-            }
-        }
-        Properties p = new Properties(storageFile);
-        for (Enumeration keys = props.keys(); keys.hasMoreElements(); ) {
-            Object key = keys.nextElement();
-            if (!Constants.SERVICE_PID.equals(key)
-                    && !ConfigurationAdmin.SERVICE_FACTORYPID.equals(key)
-                    && !FILEINSTALL_FILE_NAME.equals(key)) {
-                p.put((String) key, (String) props.get(key));
-            }
-        }
-        // remove "removed" properties from the file
-        ArrayList<String> propertiesToRemove = new ArrayList<String>();
-        for (Object key : p.keySet()) {
-            if (props.get(key) == null
-                    && !Constants.SERVICE_PID.equals(key)
-                    && !ConfigurationAdmin.SERVICE_FACTORYPID.equals(key)
-                    && !FILEINSTALL_FILE_NAME.equals(key)) {
-                propertiesToRemove.add(key.toString());
-            }
-        }
-        for (String key : propertiesToRemove) {
-            p.remove(key);
-        }
-        // save the cfg file
-        storage.mkdirs();
-        p.save();
-        updateFileInstall(storageFile);
-    }
-
-    /**
-     * Trigger felix fileinstall to update the config so there is no delay till it polls the file
-     * 
-     * @param storageFile
-     * @throws Exception
-     */
-    private void updateFileInstall(File storageFile) {
-        if (artifactInstallers != null) {
-            for (ArtifactInstaller installer : artifactInstallers) {
-                if (installer.canHandle(storageFile)) {
-                    try {
-                        installer.update(storageFile);
-                    } catch (Exception e) {
-                        log.warn("Error updating config " + storageFile + " in felix fileinstall" + e.getMessage(), e);
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Updates the configuration to the {@link ConfigurationAdmin} service.
-     *
-     * @param admin
-     * @param pid
-     * @param props
-     * @throws IOException
-     */
-    public void updateConfiguration(ConfigurationAdmin admin, String pid, Dictionary props) throws IOException {
-        Configuration cfg = admin.getConfiguration(pid, null);
-        if (cfg.getProperties() == null) {
-            String[] pids = parsePid(pid);
-            if (pids[1] != null) {
-                cfg = admin.createFactoryConfiguration(pids[0], null);
-            }
-        }
-        if (cfg.getBundleLocation() != null) {
-            cfg.setBundleLocation(null);
-        }
-        cfg.update(props);
-    }
-
-    protected String[] parsePid(String pid) {
-        int n = pid.indexOf('-');
-        if (n > 0) {
-            String factoryPid = pid.substring(n + 1);
-            pid = pid.substring(0, n);
-            return new String[]{pid, factoryPid};
-        } else {
-            return new String[]{pid, null};
-        }
-    }
-
-    protected void deleteStorage(String pid) throws Exception {
-        File cfgFile = new File(storage, pid + ".cfg");
-        cfgFile.delete();
-    }
-
-    public File getStorage() {
-        return storage;
-    }
-
-    public void setStorage(File storage) {
-        this.storage = storage;
-    }
-    
-    public void setArtifactInstallers(List<ArtifactInstaller> artifactInstallers) {
-        this.artifactInstallers = artifactInstallers;
-    }
-}
diff --git a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/ConfigPropertyCommandSupport.java b/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/ConfigPropertyCommandSupport.java
deleted file mode 100644
index 7920e02..0000000
--- a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/ConfigPropertyCommandSupport.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.config;
-
-import java.util.Dictionary;
-
-import org.apache.felix.gogo.commands.Option;
-import java.util.Properties;
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
-
-/**
- * Abstract class which commands that are related to property processing should extend.
- */
-public abstract class ConfigPropertyCommandSupport extends ConfigCommandSupport {
-
-    @Option(name = "-p", aliases = "--pid", description = "The configuration pid", required = false, multiValued = false)
-    protected String pid;
-
-    @Option(name = "-b", aliases = { "--bypass-storage" }, multiValued = false, required = false, description = "Do not store the configuration in a properties file, but feed it directly to ConfigAdmin")
-    protected boolean bypassStorage;
-
-
-    protected void doExecute(ConfigurationAdmin admin) throws Exception {
-        Dictionary props = getEditedProps();
-        if (props == null && pid == null) {
-            System.err.println("No configuration is being edited--run the edit command first");
-        } else {
-            if (props == null) {
-                props = new Properties();
-            }
-            propertyAction(props);
-            if(requiresUpdate(pid)) {
-                update(admin, pid, props, bypassStorage);
-            }
-        }
-    }
-
-    /**
-     * Perform an action on the properties.
-     * @param props
-     */
-    protected abstract void propertyAction(Dictionary props);
-
-    /**
-     * Checks if the configuration requires to be updated.
-     * The default behavior is to update if a valid pid has been passed to the method.
-     * @param pid
-     * @return
-     */
-    protected boolean requiresUpdate(String pid) {
-        if (pid != null) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-
-    /**
-     * Retrieves confguration from the pid, if used or delegates to session from getting the configuration.
-     * @return
-     * @throws Exception
-     */
-    @Override
-    protected Dictionary getEditedProps() throws Exception {
-        if(pid != null) {
-            ConfigurationAdmin configurationAdmin = getConfigurationAdmin();
-            if (configurationAdmin != null) {
-                Configuration[] configs = configurationAdmin.listConfigurations("(service.pid=" + pid + ")");
-                if (configs != null && configs.length > 0) {
-                    Configuration configuration = configs[0];
-                    if (configuration != null) {
-                        return configuration.getProperties();
-                    }
-                }
-            }
-        }
-        return super.getEditedProps();
-    }
-
-}
diff --git a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/DeleteCommand.java b/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/DeleteCommand.java
deleted file mode 100644
index 5abe4f3..0000000
--- a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/DeleteCommand.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.config;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
-
-@Command(scope = "config", name = "delete", description = "Delete a configuration.")
-public class DeleteCommand extends ConfigCommandSupport {
-
-    @Argument(index = 0, name = "pid", description = "PID of the configuration", required = true, multiValued = false)
-    String pid;
-
-    @Option(name = "--force", aliases = {}, description = "Force the edition of this config, even if another one was under edition", required = false, multiValued = false)
-    boolean force;
-
-    @Option(name = "--no-delete-cfg-file", aliases = { }, description = "Do not delete the configuration file from the etc folder", required = false, multiValued = false)
-    boolean noDeleteCfgFile = false;
-
-    @Option(name = "-f", aliases = {"--use-file"}, description = "Configuration lookup using the filename instead of the pid", required = false, multiValued = false)
-    boolean useFile;
-
-    protected void doExecute(ConfigurationAdmin admin) throws Exception {
-        String oldPid = (String) this.session.get(PROPERTY_CONFIG_PID);
-        if (oldPid != null && oldPid.equals(pid) && !force) {
-            System.err.println("This config is being edited.  Cancel / update first, or use the --force option");
-            return;
-        }
-
-        // User selected to use file instead.
-        if (useFile) {
-            Configuration configuration = this.findConfigurationByFileName(admin, pid);
-            if(configuration == null) {
-                System.err.println("Could not find configuration with file install property set to: " + pid);
-                return;
-            }
-            configuration.delete();
-        } else {
-            Configuration configuration = admin.getConfiguration(pid);
-            configuration.delete();
-        }
-        if (!noDeleteCfgFile) {
-            deleteStorage(pid);
-        }
-        if (oldPid != null && oldPid.equals(pid) && !force) {
-            this.session.put(PROPERTY_CONFIG_PID, null);
-            this.session.put(PROPERTY_CONFIG_PROPS, null);
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/EditCommand.java b/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/EditCommand.java
deleted file mode 100644
index ae43af9..0000000
--- a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/EditCommand.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.config;
-
-import java.util.Dictionary;
-import java.util.Properties;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
-
-@Command(scope = "config", name = "edit", description = "Creates or edits a configuration.", detailedDescription="classpath:edit.txt")
-public class EditCommand extends ConfigCommandSupport {
-
-    @Argument(index = 0, name = "pid", description = "PID of the configuration", required = true, multiValued = false)
-    String pid;
-
-    @Option(name = "--force", aliases = {}, description = "Force the edition of this config, even if another one was under edition", required = false, multiValued = false)
-    boolean force;
-
-	@Option(name = "-f", aliases = {"--use-file"}, description = "Configuration lookup using the filename instead of the pid", required = false, multiValued = false)
-    boolean useFile;
-
-    protected void doExecute(ConfigurationAdmin admin) throws Exception {
-        String oldPid = (String) this.session.get(PROPERTY_CONFIG_PID);
-        if (oldPid != null && !oldPid.equals(pid) && !force) {
-            System.err.println("Another config is being edited.  Cancel / update first, or use the --force option");
-            return;
-        }
-	    Dictionary props;
-
-	    //User selected to use file instead.
-        if (useFile) {
-		    Configuration configuration = this.findConfigurationByFileName(admin, pid);
-		    if(configuration == null) {
-			    System.err.println("Could not find configuration with file install property set to: " + pid);
-			    return;
-		    }
-		    props = configuration.getProperties();
-		    pid = configuration.getPid();
-	    } else {
-            Configuration configuration = admin.getConfiguration(pid, null);
-            props = configuration.getProperties();
-            if (props == null) {
-                props = new Properties();
-            }
-        }
-        this.session.put(PROPERTY_CONFIG_PID, pid);
-        this.session.put(PROPERTY_CONFIG_PROPS, props);
-    }
-
-}
diff --git a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/ListCommand.java b/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/ListCommand.java
deleted file mode 100644
index 3395b55..0000000
--- a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/ListCommand.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.config;
-
-import java.util.Dictionary;
-import java.util.Enumeration;
-
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-
-@Command(scope = "config", name = "list", description = "Lists existing configurations.")
-public class ListCommand extends ConfigCommandSupport {
-
-    @Argument(index = 0, name = "query", description = "Query in LDAP syntax. Example: \"(service.pid=org.apache.karaf.log)\"", required = false, multiValued = false)
-    String query;
-
-    protected void doExecute(ConfigurationAdmin admin) throws Exception {
-        Configuration[] configs = admin.listConfigurations(query);
-        if (configs != null) {
-            for (Configuration config : configs) {
-                System.out.println("----------------------------------------------------------------");
-                System.out.println("Pid:            " + config.getPid());
-                if (config.getFactoryPid() != null) {
-                    System.out.println("FactoryPid:     " + config.getFactoryPid());
-                }
-                System.out.println("BundleLocation: " + config.getBundleLocation());
-                if (config.getProperties() != null) {
-                    System.out.println("Properties:");
-                    Dictionary props = config.getProperties();
-                    for (Enumeration e = props.keys(); e.hasMoreElements();) {
-                        Object key = e.nextElement();
-                        System.out.println("   " + key + " = " + props.get(key));
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/PropAppendCommand.java b/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/PropAppendCommand.java
deleted file mode 100644
index 39272a7..0000000
--- a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/PropAppendCommand.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.config;
-
-import java.util.Dictionary;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-
-/**
- * Appends a value to the current property value.
- */
-@Command(scope = "config", name = "propappend", description = "Appends the given value to an existing property or creates the property with the specified name and value.")
-public class PropAppendCommand extends ConfigPropertyCommandSupport {
-
-    @Argument(index = 0, name = "name", description = "The name of the property", required = true, multiValued = false)
-    String prop;
-
-    @Argument(index = 1, name = "value", description = "The value to append to the property", required = true, multiValued = false)
-    String value;
-
-    @Override
-    public void propertyAction(Dictionary props) {
-        final Object currentValue = props.get(prop);
-        if (currentValue == null) {
-            props.put(prop, value);
-        } else if (currentValue instanceof String) {
-            props.put(prop, currentValue + value);
-        } else {
-            System.err.println("Append Failed: current value is not a String.");
-        }
-    }
-}
diff --git a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/PropDelCommand.java b/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/PropDelCommand.java
deleted file mode 100644
index c8a5d11..0000000
--- a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/PropDelCommand.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.config;
-
-import java.util.Dictionary;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-
-@Command(scope = "config", name = "propdel", description = "Deletes a property from configuration being edited.")
-public class PropDelCommand extends ConfigPropertyCommandSupport {
-
-    @Argument(index = 0, name = "property", description = "The name of the property to delete", required = true, multiValued = false)
-    String prop;
-
-    @Override
-    public void propertyAction(Dictionary props) {
-        props.remove(prop);
-    }
-}
diff --git a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/PropListCommand.java b/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/PropListCommand.java
deleted file mode 100644
index ed2f45b..0000000
--- a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/PropListCommand.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.config;
-
-import java.util.Dictionary;
-import java.util.Enumeration;
-import org.apache.felix.gogo.commands.Command;
-
-@Command(scope = "config", name = "proplist", description = "Lists properties from the currently edited configuration.")
-public class PropListCommand extends ConfigPropertyCommandSupport {
-
-    @Override
-    public void propertyAction(Dictionary props) {
-        for (Enumeration e = props.keys(); e.hasMoreElements(); ) {
-            Object key = e.nextElement();
-            System.out.println("   " + key + " = " + props.get(key));
-        }
-    }
-
-    /**
-     * List commands never requires an update, so it always returns false.
-     * @param pid
-     * @return
-     */
-    @Override
-    protected boolean requiresUpdate(String pid) {
-        return false;
-    }
-}
diff --git a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/PropSetCommand.java b/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/PropSetCommand.java
deleted file mode 100644
index 245340a..0000000
--- a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/PropSetCommand.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.config;
-
-import java.util.Dictionary;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.osgi.service.cm.ConfigurationAdmin;
-
-@Command(scope = "config", name = "propset", description = "Sets a property in the currently edited configuration.")
-public class PropSetCommand extends ConfigPropertyCommandSupport {
-
-    @Argument(index = 0, name = "property", description = "The name of the property to set", required = true, multiValued = false)
-    String prop;
-
-    @Argument(index = 1, name = "value", description = "The value of the property", required = true, multiValued = false)
-    String value;
-
-    @Override
-    public void propertyAction(Dictionary props) {
-        props.put(prop, value);
-    }
-}
diff --git a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/UpdateCommand.java b/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/UpdateCommand.java
deleted file mode 100644
index 6c99e12..0000000
--- a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/UpdateCommand.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.config;
-
-import java.util.Dictionary;
-import java.util.List;
-
-import org.apache.felix.fileinstall.ArtifactInstaller;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.osgi.service.cm.ConfigurationAdmin;
-
-@Command(scope = "config", name = "update", description = "Saves and propagates changes from the configuration being edited.")
-public class UpdateCommand extends ConfigCommandSupport {
-
-    @Option(name = "-b", aliases = {"--bypass-storage"}, multiValued = false, required = false, description = "Do not store the configuration in a properties file, but feed it directly to ConfigAdmin")
-    protected boolean bypassStorage;
-    
-    protected void doExecute(ConfigurationAdmin admin) throws Exception {
-        Dictionary props = getEditedProps();
-        if (props == null) {
-            System.err.println("No configuration is being edited--run the edit command first");
-            return;
-        }
-
-        String pid = (String) this.session.get(PROPERTY_CONFIG_PID);
-        update(admin, pid, props, bypassStorage);
-        this.session.put(PROPERTY_CONFIG_PID, null);
-        this.session.put(PROPERTY_CONFIG_PROPS, null);
-    }
-}
diff --git a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/completers/ConfigurationCompleter.java b/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/completers/ConfigurationCompleter.java
deleted file mode 100644
index 0e93914..0000000
--- a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/completers/ConfigurationCompleter.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.karaf.shell.config.completers;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.apache.karaf.shell.console.Completer;
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
-import org.osgi.service.cm.ConfigurationEvent;
-import org.osgi.service.cm.ConfigurationListener;
-
-/**
- * {@link jline.Completor} for Configuration Admin configurations.
- *
- * Displays a list of existing config admin configurations for completion.
- *
- */
-public class ConfigurationCompleter implements Completer, ConfigurationListener {
-
-    private final StringsCompleter delegate = new StringsCompleter();
-
-    private ConfigurationAdmin admin;
-
-    public void setAdmin(ConfigurationAdmin admin) {
-        this.admin = admin;
-    }
-
-    public void init() {
-        Configuration[] configs;
-        try {
-            configs = admin.listConfigurations(null);
-            if (configs == null) {
-                return;
-            }
-        } catch (Exception e) {
-            return;
-        }
-
-        Collection<String> pids = new ArrayList<String>();
-        for (Configuration config : configs) {
-            pids.add(config.getPid());
-        }
-
-        delegate.getStrings().addAll(pids);
-    }
-
-    public int complete(final String buffer, final int cursor, final List candidates) {
-        return delegate.complete(buffer, cursor, candidates);
-    }
-
-    public void configurationEvent(ConfigurationEvent configurationEvent) {
-        String pid = configurationEvent.getPid();
-        if (configurationEvent.getType() == ConfigurationEvent.CM_DELETED) {
-            delegate.getStrings().remove(pid);
-        } else if (configurationEvent.getType() == ConfigurationEvent.CM_UPDATED) {
-            delegate.getStrings().add(pid);
-        }
-    }
-}
diff --git a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/completers/ConfigurationPropertyCompleter.java b/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/completers/ConfigurationPropertyCompleter.java
deleted file mode 100644
index 363e182..0000000
--- a/karaf-2.3.x/shell/config/src/main/java/org/apache/karaf/shell/config/completers/ConfigurationPropertyCompleter.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.karaf.shell.config.completers;
-
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.karaf.shell.config.ConfigCommandSupport;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.completer.ArgumentCompleter;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.apache.karaf.shell.console.jline.CommandSessionHolder;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
-
-/**
- * {@link jline.Completor} for Configuration Admin properties.
- *
- * Displays a list of existing properties based on the current configuration being edited.
- *
- */
-public class ConfigurationPropertyCompleter implements Completer {
-
-    private final StringsCompleter delegate = new StringsCompleter();
-
-    private static final String OPTION = "-p";
-    private static final String ALIAS = "--pid";
-
-    private ConfigurationAdmin configAdmin;
-
-    public int complete(final String buffer, final int cursor, final List candidates) {
-        CommandSession session = CommandSessionHolder.getSession();
-        if (session != null) {
-            String pid = getPid(session);
-            Set<String> propertyNames = getPropertyNames(pid);
-            delegate.getStrings().clear();
-            if (propertyNames != null && !propertyNames.isEmpty()) {
-                delegate.getStrings().addAll(propertyNames);
-            }
-        }
-        return delegate.complete(buffer,cursor,candidates);
-    }
-
-    /**
-     * Retrieves the pid stored in the {@link CommandSession} or passed as an argument.
-     * Argument takes precedence from pid stored in the {@link CommandSession}.
-     * @param commandSession
-     * @return
-     */
-    private String getPid(CommandSession commandSession) {
-        String pid = (String) commandSession.get(ConfigCommandSupport.PROPERTY_CONFIG_PID);
-        ArgumentCompleter.ArgumentList list = (ArgumentCompleter.ArgumentList) commandSession.get(ArgumentCompleter.ARGUMENTS_LIST);
-        if (list != null && list.getArguments() != null && list.getArguments().length > 0) {
-            List<String> arguments = Arrays.asList(list.getArguments());
-            if (arguments.contains(OPTION)) {
-                int index = arguments.indexOf(OPTION);
-                if (arguments.size() > index) {
-                    return arguments.get(index + 1);
-                }
-            }
-
-            if (arguments.contains(ALIAS)) {
-                int index = arguments.indexOf(ALIAS);
-                if (arguments.size() > index) {
-                    return arguments.get(index + 1);
-                }
-            }
-        }
-        return pid;
-    }
-
-    /**
-     * Returns the property names for the given pid.
-     * @param pid
-     * @return
-     */
-    private Set<String> getPropertyNames(String pid) {
-        Set<String> propertyNames = new HashSet<String>();
-        if (pid != null) {
-            Configuration configuration = null;
-            try {
-                Configuration[] configs = configAdmin.listConfigurations("(service.pid="+pid+")");
-                if (configs != null && configs.length > 0) {
-                    configuration = configs[0];
-                    if (configuration != null) {
-                        Dictionary properties = configuration.getProperties();
-                        if (properties != null) {
-                            Enumeration keys = properties.keys();
-                            while (keys.hasMoreElements()) {
-                                propertyNames.add(String.valueOf(keys.nextElement()));
-                            }
-                        }
-                    }
-                }
-            } catch (IOException e) {
-              //Ignore
-            } catch (InvalidSyntaxException e) {
-                //Ignore
-            }
-        }
-        return propertyNames;
-    }
-
-    public ConfigurationAdmin getConfigAdmin() {
-        return configAdmin;
-    }
-
-    public void setConfigAdmin(ConfigurationAdmin configAdmin) {
-        this.configAdmin = configAdmin;
-    }
-}
diff --git a/karaf-2.3.x/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/karaf-2.3.x/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml
deleted file mode 100644
index 41f5b3c..0000000
--- a/karaf-2.3.x/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml
+++ /dev/null
@@ -1,121 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
-           xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"
-           default-activation="lazy">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
-        <command name="config/cancel">
-            <action class="org.apache.karaf.shell.config.CancelCommand"/>
-        </command>
-        <command name="config/delete">
-            <action class="org.apache.karaf.shell.config.DeleteCommand">
-                <property name="storage" value="${storage}" />
-            </action>
-            <completers>
-                <ref component-id="configCompleter" />
-                <null/>
-            </completers>
-        </command>
-        <command name="config/edit">
-            <action class="org.apache.karaf.shell.config.EditCommand">
-                <property name="storage" value="${storage}" />
-            </action>
-            <completers>
-                <ref component-id="configCompleter" />
-                <null/>
-            </completers>
-        </command>
-        <command name="config/list">
-            <action class="org.apache.karaf.shell.config.ListCommand"/>
-        </command>
-        <command name="config/propdel">
-            <action class="org.apache.karaf.shell.config.PropDelCommand">
-                <property name="storage" value="${storage}" />
-            </action>
-            <completers>
-                <ref component-id="configPropertyCompleter" />
-                <null/>
-            </completers>
-            <optional-completers>
-                   <entry key="-p" value-ref="configCompleter"/>
-            </optional-completers>
-        </command>
-        <command name="config/proplist">
-            <action class="org.apache.karaf.shell.config.PropListCommand"/>
-                <optional-completers>
-                   <entry key="-p" value-ref="configCompleter"/>
-                </optional-completers>
-        </command>
-        <command name="config/propset">
-            <action class="org.apache.karaf.shell.config.PropSetCommand">
-                <property name="storage" value="${storage}" />
-            </action>
-            <completers>
-                <ref component-id="configPropertyCompleter" />
-                <null/>
-            </completers>
-            <optional-completers>
-                   <entry key="-p" value-ref="configCompleter"/>
-            </optional-completers>
-        </command>
-        <command name="config/propappend">
-            <action class="org.apache.karaf.shell.config.PropAppendCommand">
-                <property name="storage" value="${storage}" />
-            </action>
-            <completers>
-                <ref component-id="configPropertyCompleter" />
-                <null/>
-            </completers>
-            <optional-completers>
-                   <entry key="-p" value-ref="configCompleter"/>
-            </optional-completers>
-        </command>
-        <command name="config/update">
-            <action class="org.apache.karaf.shell.config.UpdateCommand">
-                <property name="storage" value="${storage}" />
-                <property name="artifactInstallers" ref="artifactInstallers"/>
-            </action>
-        </command>
-    </command-bundle>
-    
-    <reference-list id="artifactInstallers" interface="org.apache.felix.fileinstall.ArtifactInstaller" availability="optional" />
-
-    <bean id="configCompleter" class="org.apache.karaf.shell.config.completers.ConfigurationCompleter" init-method="init">
-        <property name="admin" ref="configAdmin"/>
-    </bean>
-    <service ref="configCompleter" interface="org.osgi.service.cm.ConfigurationListener" />
-
-    <bean id="configPropertyCompleter" class="org.apache.karaf.shell.config.completers.ConfigurationPropertyCompleter">
-        <property name="configAdmin" ref="configAdmin"/>
-    </bean>
-
-    <reference id="configAdmin" interface="org.osgi.service.cm.ConfigurationAdmin"  />
-
-    <ext:property-placeholder placeholder-prefix="$[" placeholder-suffix="]" />
-
-    <cm:property-placeholder persistent-id="org.apache.karaf.shell.config">
-        <cm:default-properties>
-            <cm:property name="storage" value="$[karaf.base]/etc/"/>
-        </cm:default-properties>
-    </cm:property-placeholder>
-
-</blueprint>
diff --git a/karaf-2.3.x/shell/config/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/shell/config/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 79f9b8c..0000000
--- a/karaf-2.3.x/shell/config/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,24 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides Karaf shell commands to manipulate the ConfigAdmin OSGi service.
-
-    The following commands are available:
-    \u001B[36mconfig:cancel\u001B[0m Cancels the changes to the configuration being edited.
-    \u001B[36mconfig:edit\u001B[0m Creates or edits a configuration.
-    \u001B[36mconfig:list\u001B[0m Lists existing configurations.
-    \u001B[36mconfig:propappend\u001B[0m Appends the given value to an existing property or creates
-     the property with the specified name and value.
-    \u001B[36mconfig:propdel\u001B[0m Deletes a property from the edited configuration.
-    \u001B[36mconfig:proplist\u001B[0m Lists properties from the currently edited configuration.
-    \u001B[36mconfig:propset\u001B[0m Sets a property in the currently edited configuration.
-    \u001B[36mconfig:update\u001B[0m Saves and propagates changes from the configuration being edited.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mCommands\u001B[0m section of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/shell/config/src/main/resources/OSGI-INF/metatype/metatype.properties b/karaf-2.3.x/shell/config/src/main/resources/OSGI-INF/metatype/metatype.properties
deleted file mode 100644
index 3bce187..0000000
--- a/karaf-2.3.x/shell/config/src/main/resources/OSGI-INF/metatype/metatype.properties
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-#  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.
-#
-
-#
-# This file contains localization strings for configuration labels and
-# descriptions as used in the metatype.xml descriptor
-
-config.name = Apache Karaf Shell Config
-config.description = Configuration of Apache Karaf Shell Config
-
-storage.name = Storage directory
-storage.description = the directory used as a storage for configurations
diff --git a/karaf-2.3.x/shell/config/src/main/resources/OSGI-INF/metatype/metatype.xml b/karaf-2.3.x/shell/config/src/main/resources/OSGI-INF/metatype/metatype.xml
deleted file mode 100644
index 433d5e6..0000000
--- a/karaf-2.3.x/shell/config/src/main/resources/OSGI-INF/metatype/metatype.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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.
-
--->
-<metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.0.0" localization="OSGI-INF/metatype/metatype">
-    <OCD id="org.apache.karaf.shell.config" name="%config.name" description="%config.description">
-        <AD id="storage" type="String" default="${karaf.base}/etc/"
-            name="%storage.name" description="%storage.description"/>
-    </OCD>
-    <Designate pid="org.apache.karaf.shell.config">
-        <Object ocdref="org.apache.karaf.shell.config"/>
-    </Designate>
-</metatype:MetaData>
diff --git a/karaf-2.3.x/shell/config/src/main/resources/org/apache/karaf/shell/config/edit.txt b/karaf-2.3.x/shell/config/src/main/resources/org/apache/karaf/shell/config/edit.txt
deleted file mode 100644
index aa68062..0000000
--- a/karaf-2.3.x/shell/config/src/main/resources/org/apache/karaf/shell/config/edit.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-The edit command can be used to create or edit a configuration by passing its pid as argument.
-  > config:edit org.apache.karaf.sample.pid
-The command above will create a file etc/org.apache.karaf.sample.pid which corresponds to a configuration object with pid org.apache.karaf.sample.pid
-
-In case of Managed Service Factories the user can create or edit the configuration of a specific instance of a managed service.
-  > config:edit org.apache.karaf.sample.service.factory.pid-instanceid
-The command above will create a file etc/org.apache.karaf.sample.service.factory.pid-instanceid but in this case the pid is generated, according to the specification.
-
-This makes further editing to the configuration difficult because the generated pid is not known to the user. To make things simple config:edit provides a special flag -f or --use-file which allows editing a configuration using the filename instead of the pid.
-So the user can simply edit again the configuration by typing:
-  > config:edit org.apache.karaf.sample.service.factory.pid-instanceid.
-
-The --factory option can be used to create a new configuration for a given factory pid.  The parameter will be used as the factory pid and the configuration pid will be generated.  Note that this option
\ No newline at end of file
diff --git a/karaf-2.3.x/shell/config/src/test/java/org/apache/karaf/shell/config/EditCommandTest.java b/karaf-2.3.x/shell/config/src/test/java/org/apache/karaf/shell/config/EditCommandTest.java
deleted file mode 100644
index 1174f3f..0000000
--- a/karaf-2.3.x/shell/config/src/test/java/org/apache/karaf/shell/config/EditCommandTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.config;
-
-import java.util.Dictionary;
-import java.util.Properties;
-
-import junit.framework.TestCase;
-import org.apache.felix.service.command.CommandSession;
-import org.easymock.EasyMock;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
-
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
-
-/**
- * Test cases for {@link EditCommand}
- */
-public class EditCommandTest extends TestCase {
-
-    private static final String PID = "my.test.persistent.id";
-
-    private EditCommand command;
-    private BundleContext context;
-    private ConfigurationAdmin admin;
-    private CommandSession session;
-    
-    @Override
-    protected void setUp() throws Exception {
-        command = new EditCommand();
-        
-        context = EasyMock.createMock(BundleContext.class);
-        command.setBundleContext(context);
-        
-        ServiceReference reference = createMock(ServiceReference.class);
-        expect(context.getServiceReference(ConfigurationAdmin.class.getName())).andReturn(reference).anyTimes();
-        
-        admin = createMock(ConfigurationAdmin.class);
-        expect(context.getService(reference)).andReturn(admin);
-        expect(context.ungetService(reference)).andReturn(Boolean.TRUE);
-        
-        replay(context);
-        
-        session = new MockCommandSession();
-    }
-    
-    public void testExecuteOnExistingPid() throws Exception {        
-        Configuration config = createMock(Configuration.class);
-        expect(admin.getConfiguration(PID, null)).andReturn(config);
-        replay(admin);
-        
-        // the ConfigAdmin service returns a Dictionary for an existing PID
-        Properties props = new Properties();
-        expect(config.getProperties()).andReturn((Dictionary) props);
-        replay(config);
-        
-        command.pid = PID; 
-        command.execute(session);
-        
-        // the PID and Dictionary should have been set on the session
-        assertEquals("The PID should be set on the session",
-                     PID, session.get(ConfigCommandSupport.PROPERTY_CONFIG_PID));
-        assertSame("The Dictionary returned by the ConfigAdmin service should be set on the session",
-                   props, session.get(ConfigCommandSupport.PROPERTY_CONFIG_PROPS));
-    }
-    
-    @SuppressWarnings("unchecked")
-    public void testExecuteOnNewPid() throws Exception {        
-        Configuration config = createMock(Configuration.class);
-        expect(admin.getConfiguration(PID, null)).andReturn(config);
-        replay(admin);
-        
-        // the ConfigAdmin service does not return a Dictionary for a new PID
-        expect(config.getProperties()).andReturn(null);
-        replay(config);
-        
-        command.pid = PID; 
-        command.execute(session);
-
-        // the PID and an empty Dictionary should have been set on the session        
-        assertEquals("The PID should be set on the session",
-                     PID, session.get(ConfigCommandSupport.PROPERTY_CONFIG_PID));
-        Dictionary props = (Dictionary) session.get(ConfigCommandSupport.PROPERTY_CONFIG_PROPS);
-        assertNotNull("Should have a Dictionary on the session", props);
-        assertTrue("Should have an empty Dictionary on the session", props.isEmpty());
-    }
-
-}
diff --git a/karaf-2.3.x/shell/config/src/test/java/org/apache/karaf/shell/config/MockCommandSession.java b/karaf-2.3.x/shell/config/src/test/java/org/apache/karaf/shell/config/MockCommandSession.java
deleted file mode 100644
index 8953373..0000000
--- a/karaf-2.3.x/shell/config/src/test/java/org/apache/karaf/shell/config/MockCommandSession.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.config;
-
-import java.io.InputStream;
-import java.io.PrintStream;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.felix.service.command.CommandSession;
-
-/*
- * A mock CommandSession implementation that only cares about the properties set on the session
- */
-class MockCommandSession implements CommandSession {
-
-    private Map<String, Object> properties = new HashMap<String, Object>();
-
-    public void close() {
-        // not implemented
-    }
-
-    public Object convert(Class<?> type, Object instance) {
-        // not implemented
-        return null;
-    }
-
-    public Object execute(CharSequence commandline) throws Exception {
-        // not implemented
-        return null;
-    }
-
-    public CharSequence format(Object target, int level) {
-        // not implemented
-        return null;
-    }
-
-    public Object get(String name) {
-        return properties.get(name);
-    }
-
-    public PrintStream getConsole() {
-        // not implemented
-        return null;
-    }
-
-    public InputStream getKeyboard() {
-        // not implemented
-        return null;
-    }
-
-    public void put(String name, Object value) {
-        properties.put(name, value);
-    }
-}
diff --git a/karaf-2.3.x/shell/config/src/test/java/org/apache/karaf/shell/config/UpdateCommandTest.java b/karaf-2.3.x/shell/config/src/test/java/org/apache/karaf/shell/config/UpdateCommandTest.java
deleted file mode 100644
index e246c75..0000000
--- a/karaf-2.3.x/shell/config/src/test/java/org/apache/karaf/shell/config/UpdateCommandTest.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.config;
-
-import java.util.Dictionary;
-import java.util.Properties;
-
-import junit.framework.TestCase;
-import org.apache.felix.service.command.CommandSession;
-import org.easymock.EasyMock;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
-
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
-
-/**
- * Test cases for {@link EditCommand}
- */
-public class UpdateCommandTest extends TestCase {
-
-    private static final String PID = "my.test.persistent.id-other";
-
-    private UpdateCommand command;
-    private BundleContext context;
-    private ConfigurationAdmin admin;
-    private CommandSession session;
-
-    @Override
-    protected void setUp() throws Exception {
-        command = new UpdateCommand();
-
-        context = EasyMock.createMock(BundleContext.class);
-        command.setBundleContext(context);
-
-        ServiceReference reference = createMock(ServiceReference.class);
-        expect(context.getServiceReference(ConfigurationAdmin.class.getName())).andReturn(reference).anyTimes();
-
-        admin = createMock(ConfigurationAdmin.class);
-        expect(context.getService(reference)).andReturn(admin);
-        expect(context.ungetService(reference)).andReturn(Boolean.TRUE);
-
-        replay(context);
-
-        session = new MockCommandSession();
-    }
-
-    public void testupdateOnNewFactoryPid() throws Exception {
-        Properties props = new Properties();
-
-        session.put(ConfigCommandSupport.PROPERTY_CONFIG_PID, PID);
-        session.put(ConfigCommandSupport.PROPERTY_CONFIG_PROPS, props);
-
-        Configuration configNew = createMock(Configuration.class);
-        expect(admin.getConfiguration(PID, null)).andReturn(configNew);
-        expect(configNew.getProperties()).andReturn(null);
-
-
-        Configuration configFac = createMock(Configuration.class);
-        expect(admin.createFactoryConfiguration(PID.substring(0, PID.indexOf('-')), null)).andReturn(configFac);
-        configFac.update((Dictionary) props);
-        expect(configFac.getBundleLocation()).andReturn(null);
-        replay(admin);
-        replay(configNew);
-        replay(configFac);
-
-        command.execute(session);
-
-    }
-
-}
diff --git a/karaf-2.3.x/shell/console/NOTICE b/karaf-2.3.x/shell/console/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/shell/console/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/shell/console/pom.xml b/karaf-2.3.x/shell/console/pom.xml
deleted file mode 100644
index 3aaa65e..0000000
--- a/karaf-2.3.x/shell/console/pom.xml
+++ /dev/null
@@ -1,160 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!-- 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. -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.shell</groupId>
-        <artifactId>shell</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.shell.console</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Shell :: Console</name>
-    <description>This bundle provides OSGi shell integration and console support.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-simple</artifactId>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>jline</groupId>
-            <artifactId>jline</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.fusesource.jansi</groupId>
-            <artifactId>jansi</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.jaas</groupId>
-            <artifactId>org.apache.karaf.jaas.boot</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.jaas</groupId>
-            <artifactId>org.apache.karaf.jaas.modules</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf</groupId>
-            <artifactId>org.apache.karaf.util</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.aries.blueprint</groupId>
-            <artifactId>org.apache.aries.blueprint.core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.sshd</groupId>
-            <artifactId>sshd-core</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/filtered-resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>exec-maven-plugin</artifactId>
-                <configuration>
-                    <mainClass>Main</mainClass>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            org.osgi.service.event;resolution:=optional,
-                            org.apache.karaf.branding;resolution:=optional,
-                            org.apache.sshd.agent*;resolution:=optional,
-                            *
-                        </Import-Package>
-                        <Export-Package>
-                            org.apache.felix.gogo*;version=${felix.gogo.version};-split-package:=merge-first,
-                            org.apache.felix.service.command;version=${felix.gogo.version};status=provisional;mandatory:=status,
-                            org.apache.felix.service.threadio;version=${felix.gogo.version};status=provisional;mandatory:=status,
-                            org.apache.karaf.shell.console*;version=${project.version},
-                            org.fusesource.jansi;version=${jansi.version};-split-package:=merge-first,
-                            jline*;version=${jline.version},
-                            org.fusesource.hawtjni*;version=1.0;-split-package:=merge-first
-                        </Export-Package>
-                        <Private-Package>
-                            org.fusesource.jansi.internal;-split-package:=merge-first,
-                            org.apache.karaf.util*;-split-package:=merge-first,
-                            META-INF.native.*;-split-package:=merge-first
-                        </Private-Package>
-                        <Bundle-NativeCode>
-                            META-INF/native/windows32/jansi.dll;osname=Win32;processor=x86,
-                            META-INF/native/windows64/jansi.dll;osname=Win32;processor=x86-64,
-                            *
-                        </Bundle-NativeCode>
-                        <Bundle-Activator>
-                            org.apache.karaf.shell.console.jline.Activator
-                        </Bundle-Activator>
-                        <Main-Class>
-                            org.apache.karaf.shell.console.Main
-                        </Main-Class>
-                        <Export-Service>
-                            org.apache.felix.service.threadio.ThreadIO,
-                            org.apache.felix.service.command.CommandProcessor,
-                            org.apache.felix.service.command.Converter
-                        </Export-Service>
-                    </instructions>
-                    <unpackBundle>true</unpackBundle>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/shell/console/src/main/filtered-resources/org/apache/karaf/shell/console/branding-ssh.properties b/karaf-2.3.x/shell/console/src/main/filtered-resources/org/apache/karaf/shell/console/branding-ssh.properties
deleted file mode 100644
index a078f8f..0000000
--- a/karaf-2.3.x/shell/console/src/main/filtered-resources/org/apache/karaf/shell/console/branding-ssh.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-##
-## 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.
-##
-
-welcome = \
-\u001B[36m        __ __                  ____      \u001B[0m\r\n\
-\u001B[36m       / //_/____ __________ _/ __/      \u001B[0m\r\n\
-\u001B[36m      / ,<  / __ `/ ___/ __ `/ /_        \u001B[0m\r\n\
-\u001B[36m     / /| |/ /_/ / /  / /_/ / __/        \u001B[0m\r\n\
-\u001B[36m    /_/ |_|\\__,_/_/   \\__,_/_/         \u001B[0m\r\n\
-\r\n\
-\u001B[1m  Apache Karaf\u001B[0m (${project.version})\r\n\
-\r\n\
-Hit '\u001B[1m<tab>\u001B[0m' for a list of available commands\r\n\
-   and '\u001B[1m[cmd] --help\u001B[0m' for help on a specific command.\r\n\
-Hit '\u001B[1mosgi:shutdown\u001B[0m' to shutdown Karaf.\r\n\
-Hit '\u001B[1m<ctrl-d>\u001B[0m' or type '\u001B[1mlogout\u001B[0m' to disconnect shell from current session.\r\n
-
-
diff --git a/karaf-2.3.x/shell/console/src/main/filtered-resources/org/apache/karaf/shell/console/branding.properties b/karaf-2.3.x/shell/console/src/main/filtered-resources/org/apache/karaf/shell/console/branding.properties
deleted file mode 100644
index c0a278f..0000000
--- a/karaf-2.3.x/shell/console/src/main/filtered-resources/org/apache/karaf/shell/console/branding.properties
+++ /dev/null
@@ -1,33 +0,0 @@
-##
-## 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.
-##
-
-welcome = \
-\u001B[36m        __ __                  ____      \u001B[0m\r\n\
-\u001B[36m       / //_/____ __________ _/ __/      \u001B[0m\r\n\
-\u001B[36m      / ,<  / __ `/ ___/ __ `/ /_        \u001B[0m\r\n\
-\u001B[36m     / /| |/ /_/ / /  / /_/ / __/        \u001B[0m\r\n\
-\u001B[36m    /_/ |_|\\__,_/_/   \\__,_/_/         \u001B[0m\r\n\
-\r\n\
-\u001B[1m  Apache Karaf\u001B[0m (${project.version})\r\n\
-\r\n\
-Hit '\u001B[1m<tab>\u001B[0m' for a list of available commands\r\n\
-   and '\u001B[1m[cmd] --help\u001B[0m' for help on a specific command.\r\n\
-Hit '\u001B[1m<ctrl-d>\u001B[0m' or type '\u001B[1mosgi:shutdown\u001B[0m' or '\u001B[1mlogout\u001B[0m' to shutdown Karaf.\r\n
-
-
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/Action.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/Action.java
deleted file mode 100644
index 38c6301..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/Action.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.
- */
-package org.apache.felix.gogo.commands;
-
-import org.apache.felix.service.command.CommandSession;
-
-
-public interface Action
-{
-
-    Object execute(CommandSession session) throws Exception;
-
-}
-
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/Argument.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/Argument.java
deleted file mode 100644
index 691402b..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/Argument.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.
- */
-package org.apache.felix.gogo.commands;
-
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.ElementType;
-
-/**
- * Represents a positional argument on a command line (as opposed to an optional named {@link Option}
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.FIELD})
-public @interface Argument
-{
-    public static final String DEFAULT_STRING= "DEFAULT";
-
-    String DEFAULT = "##default";
-
-    String name() default DEFAULT;
-
-    String description() default "";
-
-    boolean required() default false;
-
-    int index() default 0;
-
-    boolean multiValued() default false;
-
-    String valueToShowInHelp() default DEFAULT_STRING;
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/Command.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/Command.java
deleted file mode 100644
index 7b4558f..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/Command.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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.
- */
-package org.apache.felix.gogo.commands;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.ElementType;
-
-/**
- * Used to denote a class represents a command which is executable within a shell/scope or as a
- * command line process.
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.TYPE})
-public @interface Command
-{
-    /**
-     * Returns the scope or sub shell of the command
-     */
-    String scope();
-
-    /**
-     * REturns the name of the command if used inside a shell
-     */
-    String name();
-
-    /**
-     * Returns the description of the command which is used to generate command line help
-     */
-    String description() default "";
-
-    /**
-     * Returns a detailed description of the command
-     */
-    String detailedDescription() default "";
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/CommandException.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/CommandException.java
deleted file mode 100644
index dc3821d..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/CommandException.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * 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.
- */
-package org.apache.felix.gogo.commands;
-
-import org.fusesource.jansi.Ansi;
-
-/**
- * Base class for exceptions thrown when executing commands.
- */
-public class CommandException extends Exception {
-
-    private String help;
-
-    public CommandException() {
-    }
-
-    public CommandException(String message) {
-        super(message);
-    }
-
-    public CommandException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-    public CommandException(Throwable cause) {
-        super(cause);
-    }
-
-    public CommandException(String help, String message) {
-        super(message);
-        this.help = help;
-    }
-
-    public CommandException(String help, String message, Throwable cause) {
-        super(message, cause);
-        this.help = help;
-    }
-
-    public String getNiceHelp() {
-        return  help != null ? help
-                    : Ansi.ansi()
-                        .fg(Ansi.Color.RED)
-                        .a("Error executing command: ")
-                        .a(getMessage() != null ? getMessage() : getClass().getName())
-                        .fg(Ansi.Color.DEFAULT).toString();
-    }
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/CompleterValues.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/CompleterValues.java
deleted file mode 100644
index 996bfc8..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/CompleterValues.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.
- */
-package org.apache.felix.gogo.commands;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Represents a method which can return a List or Array of values used for a
- * {@link org.apache.karaf.shell.console.Completer}
- * which is associated with the index of an
- * {@link org.apache.felix.gogo.commands.Argument}
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.METHOD, ElementType.FIELD})
-public @interface CompleterValues
-{
-    int index() default 0;
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/Option.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/Option.java
deleted file mode 100644
index d2a730b..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/Option.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.
- */
-package org.apache.felix.gogo.commands;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.ElementType;
-
-/**
- * Used to mark an optional named command line option who's name typically starts with "--"
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.FIELD})
-public @interface Option
-{
-    public static final String DEFAULT_STRING= "DEFAULT";
-
-    String name();
-
-    String[] aliases() default {};
-
-    String description() default "";
-
-    boolean required() default false;
-
-    boolean multiValued() default false;
-
-    String valueToShowInHelp() default DEFAULT_STRING;
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/SubShell.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/SubShell.java
deleted file mode 100644
index 1752398..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/SubShell.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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.
- */
-package org.apache.felix.gogo.commands;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.TYPE})
-public @interface SubShell {
-
-    /**
-     * Returns the name of the command if used inside a shell
-     */
-    String name();
-
-    /**
-     * Returns the description of the command which is used to generate command line help
-     */
-    String description() default "";
-
-    /**
-     * Returns a detailed description of the command
-     */
-    String detailedDescription() default "";
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/AbstractCommand.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/AbstractCommand.java
deleted file mode 100644
index 1bf2b96..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/AbstractCommand.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * 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.
- */
-package org.apache.felix.gogo.commands.basic;
-
-import java.util.List;
-
-import org.apache.felix.gogo.commands.basic.DefaultActionPreparator;
-import org.apache.felix.gogo.commands.basic.ActionPreparator;
-import org.apache.felix.gogo.commands.Action;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.felix.service.command.Function;
-
-public abstract class AbstractCommand implements Function {
-
-    public Object execute(CommandSession session, List<Object> arguments) throws Exception {
-        Action action = createNewAction();
-        try {
-            if (getPreparator().prepare(action, session, arguments)) {
-                return action.execute(session);
-            } else {
-                return null;
-            }
-        } finally {
-        	releaseAction(action);
-        }
-    }
-
-    public Class<? extends Action> getActionClass() {
-        return createNewAction().getClass();
-    }
-
-    public abstract Action createNewAction();
-
-    /**
-     * Release the used Action.
-     * This method has to be overridden for pool based Actions.
-     * @param action Action that was executed
-     * @throws Exception if something went wrong during the Action release
-     */
-    public void releaseAction(Action action) throws Exception {
-    	// Do nothing by default (stateful)
-    }
-
-    protected ActionPreparator getPreparator() throws Exception {
-        return new DefaultActionPreparator();
-    }
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/ActionPreparator.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/ActionPreparator.java
deleted file mode 100644
index 6832bb0..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/ActionPreparator.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.
- */
-package org.apache.felix.gogo.commands.basic;
-
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Action;
-import org.apache.felix.service.command.CommandSession;
-
-public interface ActionPreparator {
-
-    boolean prepare(Action action, CommandSession session, List<Object> arguments) throws Exception;
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java
deleted file mode 100644
index b6ab237..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java
+++ /dev/null
@@ -1,614 +0,0 @@
-/*
- * 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.
- */
-package org.apache.felix.gogo.commands.basic;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.io.StringWriter;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Field;
-import java.lang.reflect.Type;
-import java.util.*;
-import java.io.PrintStream;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import jline.Terminal;
-import org.apache.felix.gogo.commands.CommandException;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.gogo.commands.Action;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.converter.DefaultConverter;
-import org.apache.felix.gogo.commands.converter.GenericType;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.karaf.shell.console.NameScoping;
-import org.fusesource.jansi.Ansi;
-
-public class DefaultActionPreparator implements ActionPreparator {
-
-    public static final Option HELP = new Option() {
-        public String name() {
-            return "--help";
-        }
-
-        public String[] aliases() {
-            return new String[]{};
-        }
-
-        public String description() {
-            return "Display this help message";
-        }
-
-        public boolean required() {
-            return false;
-        }
-
-        public boolean multiValued() {
-            return false;
-        }
-
-        public String valueToShowInHelp() {
-            return Option.DEFAULT_STRING;
-        }
-
-        public Class<? extends Annotation> annotationType() {
-            return Option.class;
-        }
-    };
-
-    public boolean prepare(Action action, CommandSession session, List<Object> params) throws Exception {
-        Map<Option, Field> options = new HashMap<Option, Field>();
-        Map<Argument, Field> arguments = new HashMap<Argument, Field>();
-        List<Argument> orderedArguments = new ArrayList<Argument>();
-        // Introspect
-        for (Class type = action.getClass(); type != null; type = type.getSuperclass()) {
-            for (Field field : type.getDeclaredFields()) {
-                Option option = field.getAnnotation(Option.class);
-                if (option != null) {
-                    options.put(option, field);
-                }
-                Argument argument = field.getAnnotation(Argument.class);
-                if (argument != null) {
-                    if (Argument.DEFAULT.equals(argument.name())) {
-                        final Argument delegate = argument;
-                        final String name = field.getName();
-                        argument = new Argument() {
-                            public String name() {
-                                return name;
-                            }
-
-                            public String description() {
-                                return delegate.description();
-                            }
-
-                            public boolean required() {
-                                return delegate.required();
-                            }
-
-                            public int index() {
-                                return delegate.index();
-                            }
-
-                            public boolean multiValued() {
-                                return delegate.multiValued();
-                            }
-
-                            public String valueToShowInHelp() {
-                                return delegate.valueToShowInHelp();
-                            }
-
-                            public Class<? extends Annotation> annotationType() {
-                                return delegate.annotationType();
-                            }
-                        };
-                    }
-                    arguments.put(argument, field);
-                    int index = argument.index();
-                    while (orderedArguments.size() <= index) {
-                        orderedArguments.add(null);
-                    }
-                    if (orderedArguments.get(index) != null) {
-                        throw new IllegalArgumentException("Duplicate argument index: " + index);
-                    }
-                    orderedArguments.set(index, argument);
-                }
-            }
-        }
-        // Check indexes are correct
-        for (int i = 0; i < orderedArguments.size(); i++) {
-            if (orderedArguments.get(i) == null) {
-                throw new IllegalArgumentException("Missing argument for index: " + i);
-            }
-        }
-        // Populate
-        Map<Option, Object> optionValues = new HashMap<Option, Object>();
-        Map<Argument, Object> argumentValues = new HashMap<Argument, Object>();
-        boolean processOptions = true;
-        int argIndex = 0;
-        for (Iterator<Object> it = params.iterator(); it.hasNext(); ) {
-            Object param = it.next();
-            // Check for help
-            if (HELP.name().equals(param) || Arrays.asList(HELP.aliases()).contains(param)) {
-                printUsage(session, action, options, arguments, System.out);
-                return false;
-            }
-            if (processOptions && param instanceof String && ((String) param).startsWith("-")) {
-                boolean isKeyValuePair = ((String) param).indexOf('=') != -1;
-                String name;
-                Object value = null;
-                if (isKeyValuePair) {
-                    name = ((String) param).substring(0, ((String) param).indexOf('='));
-                    value = ((String) param).substring(((String) param).indexOf('=') + 1);
-                } else {
-                    name = (String) param;
-                }
-                Option option = null;
-                for (Option opt : options.keySet()) {
-                    if (name.equals(opt.name()) || Arrays.asList(opt.aliases()).contains(name)) {
-                        option = opt;
-                        break;
-                    }
-                }
-                if (option == null) {
-                    Command command = action.getClass().getAnnotation(Command.class);
-                    if (command != null) {
-                        throw new CommandException(
-                                Ansi.ansi()
-                                        .fg(Ansi.Color.RED)
-                                        .a("Error executing command ")
-                                        .a(command.scope())
-                                        .a(":")
-                                        .a(Ansi.Attribute.INTENSITY_BOLD)
-                                        .a(command.name())
-                                        .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
-                                        .a(" undefined option ")
-                                        .a(Ansi.Attribute.INTENSITY_BOLD)
-                                        .a(param)
-                                        .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
-                                        .fg(Ansi.Color.DEFAULT)
-                                        .toString(),
-                                "Undefined option: " + param
-                        );
-                    } else {
-                        throw new CommandException("Undefined option: " + param);
-                    }
-                }
-                Field field = options.get(option);
-                if (value == null && (field.getType() == boolean.class || field.getType() == Boolean.class)) {
-                    value = Boolean.TRUE;
-                }
-                if (value == null && it.hasNext()) {
-                    value = it.next();
-                }
-                if (value == null) {
-                    Command command = action.getClass().getAnnotation(Command.class);
-                    if (command != null) {
-                        throw new CommandException(
-                                Ansi.ansi()
-                                        .fg(Ansi.Color.RED)
-                                        .a("Error executing command ")
-                                        .a(command.scope())
-                                        .a(":")
-                                        .a(Ansi.Attribute.INTENSITY_BOLD)
-                                        .a(command.name())
-                                        .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
-                                        .a(" missing value for option ")
-                                        .a(Ansi.Attribute.INTENSITY_BOLD)
-                                        .a(param)
-                                        .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
-                                        .fg(Ansi.Color.DEFAULT)
-                                        .toString(),
-                                "Missing value for option: " + param
-                        );
-                    } else {
-                        throw new CommandException("Missing value for option: " + param);
-                    }
-                }
-                if (option.multiValued()) {
-                    List<Object> l = (List<Object>) optionValues.get(option);
-                    if (l == null) {
-                        l = new ArrayList<Object>();
-                        optionValues.put(option, l);
-                    }
-                    l.add(value);
-                } else {
-                    optionValues.put(option, value);
-                }
-            } else {
-                processOptions = false;
-                if (argIndex >= orderedArguments.size()) {
-                    Command command = action.getClass().getAnnotation(Command.class);
-                    if (command != null) {
-                        throw new CommandException(
-                                Ansi.ansi()
-                                        .fg(Ansi.Color.RED)
-                                        .a("Error executing command ")
-                                        .a(command.scope())
-                                        .a(":")
-                                        .a(Ansi.Attribute.INTENSITY_BOLD)
-                                        .a(command.name())
-                                        .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
-                                        .a(": too many arguments specified")
-                                        .fg(Ansi.Color.DEFAULT)
-                                        .toString(),
-                                "Too many arguments specified"
-                        );
-                    } else {
-                        throw new CommandException("Too many arguments specified");
-                    }
-                }
-                Argument argument = orderedArguments.get(argIndex);
-                if (!argument.multiValued()) {
-                    argIndex++;
-                }
-                if (argument.multiValued()) {
-                    List<Object> l = (List<Object>) argumentValues.get(argument);
-                    if (l == null) {
-                        l = new ArrayList<Object>();
-                        argumentValues.put(argument, l);
-                    }
-                    l.add(param);
-                } else {
-                    argumentValues.put(argument, param);
-                }
-            }
-        }
-        // Check required arguments / options
-        for (Option option : options.keySet()) {
-            if (option.required() && optionValues.get(option) == null) {
-                Command command = action.getClass().getAnnotation(Command.class);
-                if (command != null) {
-                    throw new CommandException(
-                            Ansi.ansi()
-                                    .fg(Ansi.Color.RED)
-                                    .a("Error executing command ")
-                                    .a(command.scope())
-                                    .a(":")
-                                    .a(Ansi.Attribute.INTENSITY_BOLD)
-                                    .a(command.name())
-                                    .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
-                                    .a(": option ")
-                                    .a(Ansi.Attribute.INTENSITY_BOLD)
-                                    .a(option.name())
-                                    .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
-                                    .a(" is required")
-                                    .fg(Ansi.Color.DEFAULT)
-                                    .toString(),
-                            "Option " + option.name() + " is required"
-                    );
-                } else {
-                    throw new CommandException("Option " + option.name() + " is required");
-                }
-            }
-        }
-        for (Argument argument : arguments.keySet()) {
-            if (argument.required() && argumentValues.get(argument) == null) {
-                Command command = action.getClass().getAnnotation(Command.class);
-                if (command != null) {
-                    throw new CommandException(
-                            Ansi.ansi()
-                                    .fg(Ansi.Color.RED)
-                                    .a("Error executing command ")
-                                    .a(command.scope())
-                                    .a(":")
-                                    .a(Ansi.Attribute.INTENSITY_BOLD)
-                                    .a(command.name())
-                                    .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
-                                    .a(": argument ")
-                                    .a(Ansi.Attribute.INTENSITY_BOLD)
-                                    .a(argument.name())
-                                    .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
-                                    .a(" is required")
-                                    .fg(Ansi.Color.DEFAULT)
-                                    .toString(),
-                            "Argument " + argument.name() + " is required"
-                    );
-                } else {
-                    throw new CommandException("Argument " + argument.name() + " is required");
-                }
-            }
-        }
-        // Convert and inject values
-        for (Map.Entry<Option, Object> entry : optionValues.entrySet()) {
-            Field field = options.get(entry.getKey());
-            Object value;
-            try {
-                value = convert(action, session, entry.getValue(), field.getGenericType());
-            } catch (Exception e) {
-                Command command = action.getClass().getAnnotation(Command.class);
-                if (command != null) {
-                    throw new CommandException(
-                            Ansi.ansi()
-                                    .fg(Ansi.Color.RED)
-                                    .a("Error executing command ")
-                                    .a(command.scope())
-                                    .a(":")
-                                    .a(Ansi.Attribute.INTENSITY_BOLD)
-                                    .a(command.name())
-                                    .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
-                                    .a(": unable to convert option ")
-                                    .a(Ansi.Attribute.INTENSITY_BOLD)
-                                    .a(entry.getKey().name())
-                                    .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
-                                    .a(" with value '")
-                                    .a(entry.getValue())
-                                    .a("' to type ")
-                                    .a(new GenericType(field.getGenericType()).toString())
-                                    .fg(Ansi.Color.DEFAULT)
-                                    .toString(),
-                            "Unable to convert option " + entry.getKey().name() + " with value '"
-                                    + entry.getValue() + "' to type " + new GenericType(field.getGenericType()).toString(),
-                            e
-                    );
-                } else {
-                    throw new CommandException("Unable to convert option " + entry.getKey().name() + " with value '"
-                            + entry.getValue() + "' to type " + new GenericType(field.getGenericType()).toString(),
-                            e);
-                }
-            }
-            field.setAccessible(true);
-            field.set(action, value);
-        }
-        for (Map.Entry<Argument, Object> entry : argumentValues.entrySet()) {
-            Field field = arguments.get(entry.getKey());
-            Object value;
-            try {
-                value = convert(action, session, entry.getValue(), field.getGenericType());
-            } catch (Exception e) {
-                Command command = action.getClass().getAnnotation(Command.class);
-                if (command != null) {
-                    throw new CommandException(
-                            Ansi.ansi()
-                                    .fg(Ansi.Color.RED)
-                                    .a("Error executing command ")
-                                    .a(command.scope())
-                                    .a(":")
-                                    .a(Ansi.Attribute.INTENSITY_BOLD)
-                                    .a(command.name())
-                                    .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
-                                    .a(": unable to convert argument ")
-                                    .a(Ansi.Attribute.INTENSITY_BOLD)
-                                    .a(entry.getKey().name())
-                                    .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
-                                    .a(" with value '")
-                                    .a(entry.getValue())
-                                    .a("' to type ")
-                                    .a(new GenericType(field.getGenericType()).toString())
-                                    .fg(Ansi.Color.DEFAULT)
-                                    .toString(),
-                            "Unable to convert argument " + entry.getKey().name() + " with value '"
-                                    + entry.getValue() + "' to type " + new GenericType(field.getGenericType()).toString(),
-                            e
-                    );
-                } else {
-                    throw new CommandException("Unable to convert argument " + entry.getKey().name() + " with value '"
-                            + entry.getValue() + "' to type " + new GenericType(field.getGenericType()).toString(),
-                            e);
-                }
-            }
-            field.setAccessible(true);
-            field.set(action, value);
-        }
-        return true;
-    }
-
-    protected void printUsage(CommandSession session, Action action, Map<Option, Field> optionsMap, Map<Argument, Field> argsMap, PrintStream out) {
-        Command command = action.getClass().getAnnotation(Command.class);
-        if (command != null) {
-            Terminal term = session != null ? (Terminal) session.get(".jline.terminal") : null;
-            List<Argument> arguments = new ArrayList<Argument>(argsMap.keySet());
-            Collections.sort(arguments, new Comparator<Argument>() {
-                public int compare(Argument o1, Argument o2) {
-                    return Integer.valueOf(o1.index()).compareTo(Integer.valueOf(o2.index()));
-                }
-            });
-            Set<Option> options = new HashSet<Option>(optionsMap.keySet());
-            options.add(HELP);
-            boolean globalScope = NameScoping.isGlobalScope(session, command.scope());
-            if (command != null && (command.description() != null || command.name() != null)) {
-                out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("DESCRIPTION").a(Ansi.Attribute.RESET));
-                out.print("        ");
-                if (command.name() != null) {
-                    if (globalScope) {
-                        out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a(command.name()).a(Ansi.Attribute.RESET));
-                    } else {
-                        out.println(Ansi.ansi().a(command.scope()).a(":").a(Ansi.Attribute.INTENSITY_BOLD).a(command.name()).a(Ansi.Attribute.RESET));
-                    }
-                    out.println();
-                }
-                out.print("\t");
-                out.println(command.description());
-                out.println();
-            }
-            StringBuffer syntax = new StringBuffer();
-            if (command != null) {
-                if (globalScope) {
-                    syntax.append(command.name());
-                } else {
-                    syntax.append(String.format("%s:%s", command.scope(), command.name()));
-                }
-            }
-            if (options.size() > 0) {
-                syntax.append(" [options]");
-            }
-            if (arguments.size() > 0) {
-                syntax.append(' ');
-                for (Argument argument : arguments) {
-                    if (!argument.required()) {
-                        syntax.append(String.format("[%s] ", argument.name()));
-                    } else {
-                        syntax.append(String.format("%s ", argument.name()));
-                    }
-                }
-            }
-
-            out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("SYNTAX").a(Ansi.Attribute.RESET));
-            out.print("        ");
-            out.println(syntax.toString());
-            out.println();
-            if (arguments.size() > 0) {
-                out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("ARGUMENTS").a(Ansi.Attribute.RESET));
-                for (Argument argument : arguments) {
-                    out.print("        ");
-                    out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a(argument.name()).a(Ansi.Attribute.RESET));
-                    printFormatted("                ", argument.description(), term != null ? term.getWidth() : 80, out);
-                    if (!argument.required()) {
-                        if (argument.valueToShowInHelp() != null && argument.valueToShowInHelp().length() != 0) {
-                            try {
-                                if (Argument.DEFAULT_STRING.equals(argument.valueToShowInHelp())) {
-                                    argsMap.get(argument).setAccessible(true);
-                                    Object o = argsMap.get(argument).get(action);
-                                    printObjectDefaultsTo(out, o);
-                                } else {
-                                    printDefaultsTo(out, argument.valueToShowInHelp());
-                                }
-                            } catch (Throwable t) {
-                                // Ignore
-                            }
-                        }
-                    }
-                }
-                out.println();
-            }
-            if (options.size() > 0) {
-                out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("OPTIONS").a(Ansi.Attribute.RESET));
-                for (Option option : options) {
-                    String opt = option.name();
-                    for (String alias : option.aliases()) {
-                        opt += ", " + alias;
-                    }
-                    out.print("        ");
-                    out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a(opt).a(Ansi.Attribute.RESET));
-                    printFormatted("                ", option.description(), term != null ? term.getWidth() : 80, out);
-                    if (option.valueToShowInHelp() != null && option.valueToShowInHelp().length() != 0) {
-                        try {
-                            if (Option.DEFAULT_STRING.equals(option.valueToShowInHelp())) {
-                                optionsMap.get(option).setAccessible(true);
-                                Object o = optionsMap.get(option).get(action);
-                                printObjectDefaultsTo(out, o);
-                            } else {
-                                printDefaultsTo(out, option.valueToShowInHelp());
-                            }
-                        } catch (Throwable t) {
-                            // Ignore
-                        }
-                    }
-                }
-                out.println();
-            }
-            if (command.detailedDescription().length() > 0) {
-                out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("DETAILS").a(Ansi.Attribute.RESET));
-                String desc = loadDescription(action.getClass(), command.detailedDescription());
-                printFormatted("        ", desc, term != null ? term.getWidth() : 80, out);
-            }
-        }
-    }
-
-    private void printObjectDefaultsTo(PrintStream out, Object o) {
-        if (o != null
-                && (!(o instanceof Boolean) || ((Boolean) o))
-                && (!(o instanceof Number) || ((Number) o).doubleValue() != 0.0)) {
-            printDefaultsTo(out, o.toString());
-        }
-    }
-
-    private void printDefaultsTo(PrintStream out, String value) {
-        out.print("                (defaults to ");
-        out.print(value);
-        out.println(")");
-    }
-
-    protected String loadDescription(Class clazz, String desc) {
-        if (desc.startsWith("classpath:")) {
-            InputStream is = clazz.getResourceAsStream(desc.substring("classpath:".length()));
-            if (is == null) {
-                is = clazz.getClassLoader().getResourceAsStream(desc.substring("classpath:".length()));
-            }
-            if (is == null) {
-                desc = "Unable to load description from " + desc;
-            } else {
-                try {
-                    Reader r = new InputStreamReader(is);
-                    StringWriter sw = new StringWriter();
-                    int c;
-                    while ((c = r.read()) != -1) {
-                        sw.append((char) c);
-                    }
-                    desc = sw.toString();
-                } catch (IOException e) {
-                    desc = "Unable to load description from " + desc;
-                } finally {
-                    try {
-                        is.close();
-                    } catch (IOException e) {
-                        // Ignore
-                    }
-                }
-            }
-        }
-        return desc;
-    }
-
-    // TODO move this to a helper class?
-    public static void printFormatted(String prefix, String str, int termWidth, PrintStream out) {
-        printFormatted(prefix, str, termWidth, out, true);
-    }
-
-    public static void printFormatted(String prefix, String str, int termWidth, PrintStream out, boolean prefixFirstLine) {
-        int pfxLen = length(prefix);
-        int maxwidth = termWidth - pfxLen;
-        Pattern wrap = Pattern.compile("(\\S\\S{" + maxwidth + ",}|.{1," + maxwidth + "})(\\s+|$)");
-        int cur = 0;
-        while (cur >= 0) {
-            int lst = str.indexOf('\n', cur);
-            String s = (lst >= 0) ? str.substring(cur, lst) : str.substring(cur);
-            if (s.length() == 0) {
-                out.println();
-            } else {
-                Matcher m = wrap.matcher(s);
-                while (m.find()) {
-                    if (cur > 0 || prefixFirstLine) {
-                        out.print(prefix);
-                    }
-                    out.println(m.group());
-                }
-            }
-            if (lst >= 0) {
-                cur = lst + 1;
-            } else {
-                break;
-            }
-        }
-    }
-
-    public static int length(String str) {
-        return str.length();
-    }
-
-    protected Object convert(Action action, CommandSession session, Object value, Type toType) throws Exception {
-        if (toType == String.class) {
-            return value != null ? value.toString() : null;
-        }
-        return new DefaultConverter(action.getClass().getClassLoader()).convert(value, toType);
-    }
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/SimpleCommand.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/SimpleCommand.java
deleted file mode 100644
index ad9f34b..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/SimpleCommand.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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.
- */
-package org.apache.felix.gogo.commands.basic;
-
-import java.util.Hashtable;
-
-import org.apache.felix.service.command.Function;
-import org.osgi.framework.ServiceRegistration;
-import org.osgi.framework.BundleContext;
-import org.apache.felix.gogo.commands.Action;
-import org.apache.felix.gogo.commands.Command;
-
-/**
- * A very simple {@link Function} which creates {@link Action} based on a class name.
- */
-public class SimpleCommand extends AbstractCommand {
-
-    private Class<? extends Action> actionClass;
-
-    public SimpleCommand()
-    {
-    }
-
-    public SimpleCommand(Class<? extends Action> actionClass)
-    {
-        this.actionClass = actionClass;
-    }
-
-    public Class<? extends Action> getActionClass()
-    {
-        return actionClass;
-    }
-
-    public void setActionClass(Class<? extends Action> actionClass)
-    {
-        this.actionClass = actionClass;
-    }
-
-    public Action createNewAction() {
-        try {
-            return actionClass.newInstance();
-        } catch (InstantiationException e) {
-            throw new RuntimeException(e);
-        } catch (IllegalAccessException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-
-    public static ServiceRegistration export(BundleContext context, Class<? extends Action> actionClass)
-    {
-        Command cmd = actionClass.getAnnotation(Command.class);
-        if (cmd == null)
-        {
-            throw new IllegalArgumentException("Action class is not annotated with @Command");
-        }
-        Hashtable props = new Hashtable();
-        props.put("osgi.command.scope", cmd.scope());
-        props.put("osgi.command.function", cmd.name());
-        SimpleCommand command = new SimpleCommand(actionClass);
-        return context.registerService(Function.class.getName(), command, props);
-    }
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/converter/DefaultConverter.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/converter/DefaultConverter.java
deleted file mode 100644
index df20321..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/converter/DefaultConverter.java
+++ /dev/null
@@ -1,403 +0,0 @@
-/*
- * 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.
- */
-package org.apache.felix.gogo.commands.converter;
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.Dictionary;
-import java.util.Locale;
-import java.util.Properties;
-import java.util.Hashtable;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.SortedMap;
-import java.util.TreeMap;
-import java.util.LinkedHashMap;
-import java.util.SortedSet;
-import java.util.TreeSet;
-import java.util.Set;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Queue;
-import java.util.LinkedList;
-import java.util.regex.Pattern;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.ConcurrentHashMap;
-import java.math.BigInteger;
-import java.math.BigDecimal;
-import java.io.ByteArrayInputStream;
-import java.lang.reflect.Modifier;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Array;
-import java.lang.reflect.Type;
-import java.lang.reflect.InvocationTargetException;
-
-import org.apache.felix.gogo.commands.converter.ReifiedType;
-
-public class DefaultConverter
-{
-
-    private Object loader;
-
-    public DefaultConverter(Object loader) {
-        this.loader = loader;
-    }
-
-    public Object convert(Object source, Type target) throws Exception {
-        return convert( source, new GenericType(target));
-    }
-
-    public Object convert(Object fromValue, ReifiedType type) throws Exception {
-        // Discard null values
-        if (fromValue == null) {
-            return null;
-        }
-        // If the object is an instance of the type, just return it
-        if (isAssignable(fromValue, type)) {
-            return fromValue;
-        }
-        Object value = convertWithConverters(fromValue, type);
-        if (value == null) {
-            if (fromValue instanceof Number && Number.class.isAssignableFrom(unwrap(toClass(type)))) {
-                return convertToNumber((Number) fromValue, toClass(type));
-            } else if (fromValue instanceof String) {
-                return convertFromString((String) fromValue, toClass(type), loader);
-            } else if (toClass(type).isArray() && (fromValue instanceof Collection || fromValue.getClass().isArray())) {
-                return convertToArray(fromValue, type);
-            } else if (Map.class.isAssignableFrom(toClass(type)) && (fromValue instanceof Map || fromValue instanceof Dictionary)) {
-                return convertToMap(fromValue, type);
-            } else if (Dictionary.class.isAssignableFrom(toClass(type)) && (fromValue instanceof Map || fromValue instanceof Dictionary)) {
-                return convertToDictionary(fromValue, type);
-            } else if (Collection.class.isAssignableFrom(toClass(type)) && (fromValue instanceof Collection || fromValue.getClass().isArray())) {
-                return convertToCollection(fromValue, type);
-            } else {
-                throw new Exception("Unable to convert value " + fromValue + " to type " + type);
-            }
-        }
-        return value;
-    }
-
-    private Object convertWithConverters(Object source, ReifiedType type) throws Exception {
-        Object value = null;
-//        for (Converter converter : converters) {
-//            if (converter.canConvert(source, type)) {
-//                value = converter.convert(source, type);
-//                if (value != null) {
-//                    return value;
-//                }
-//            }
-//        }
-        return value;
-    }
-
-    public Object convertToNumber(Number value, Class toType) throws Exception {
-        toType = unwrap(toType);
-        if (AtomicInteger.class == toType) {
-            return new AtomicInteger((Integer) convertToNumber(value, Integer.class));
-        } else if (AtomicLong.class == toType) {
-            return new AtomicLong((Long) convertToNumber(value, Long.class));
-        } else if (Integer.class == toType) {
-            return value.intValue();
-        } else if (Short.class == toType) {
-            return value.shortValue();
-        } else if (Long.class == toType) {
-            return value.longValue();
-        } else if (Float.class == toType) {
-            return value.floatValue();
-        } else if (Double.class == toType) {
-            return value.doubleValue();
-        } else if (Byte.class == toType) {
-            return value.byteValue();
-        } else if (BigInteger.class == toType) {
-            return new BigInteger(value.toString());
-        } else if (BigDecimal.class == toType) {
-            return new BigDecimal(value.toString());
-        } else {
-            throw new Exception("Unable to convert number " + value + " to " + toType);
-        }
-    }
-
-    public Object convertFromString(String value, Class toType, Object loader) throws Exception {
-        toType = unwrap(toType);
-        if (ReifiedType.class == toType) {
-            try {
-                return GenericType.parse(value, loader);
-            } catch (ClassNotFoundException e) {
-                throw new Exception("Unable to convert", e);
-            }
-        } else if (Class.class == toType) {
-            try {
-                return GenericType.parse(value, loader).getRawClass();
-            } catch (ClassNotFoundException e) {
-                throw new Exception("Unable to convert", e);
-            }
-        } else if (Locale.class == toType) {
-            String[] tokens = value.split("_");
-            if (tokens.length == 1) {
-                return new Locale(tokens[0]);
-            } else if (tokens.length == 2) {
-                return new Locale(tokens[0], tokens[1]);
-            } else if (tokens.length == 3) {
-                return new Locale(tokens[0], tokens[1], tokens[2]);
-            } else {
-                throw new Exception("Invalid locale string:" + value);
-            }
-        } else if (Pattern.class == toType) {
-            return Pattern.compile(value);
-        } else if (Properties.class == toType) {
-            Properties props = new Properties();
-            ByteArrayInputStream in = new ByteArrayInputStream(value.getBytes("UTF8"));
-            props.load(in);
-            return props;
-        } else if (Boolean.class == toType) {
-            if ("yes".equalsIgnoreCase(value) || "true".equalsIgnoreCase(value) || "on".equalsIgnoreCase(value)) {
-                return Boolean.TRUE;
-            } else if ("no".equalsIgnoreCase(value) || "false".equalsIgnoreCase(value) || "off".equalsIgnoreCase(value)) {
-                return Boolean.FALSE;
-            } else {
-                throw new RuntimeException("Invalid boolean value: " + value);
-            }
-        } else if (Integer.class == toType) {
-            return Integer.valueOf(value);
-        } else if (Short.class == toType) {
-            return Short.valueOf(value);
-        } else if (Long.class == toType) {
-            return Long.valueOf(value);
-        } else if (Float.class == toType) {
-            return Float.valueOf(value);
-        } else if (Double.class == toType) {
-            return Double.valueOf(value);
-        } else if (Character.class == toType) {
-            if (value.length() == 6 && value.startsWith("\\u")) {
-                int code = Integer.parseInt(value.substring(2), 16);
-                return (char)code;
-            } else if (value.length() == 1) {
-                return value.charAt(0);
-            } else {
-                throw new Exception("Invalid value for character type: " + value);
-            }
-        } else if (Byte.class == toType) {
-            return Byte.valueOf(value);
-        } else if (Enum.class.isAssignableFrom(toType)) {
-            return Enum.valueOf((Class<Enum>) toType, value);
-        } else {
-            return createObject(value, toType);
-        }
-    }
-
-    private static Object createObject(String value, Class type) throws Exception {
-        if (type.isInterface() || Modifier.isAbstract(type.getModifiers())) {
-            throw new Exception("Unable to convert value " + value + " to type " + type + ". Type " + type + " is an interface or an abstract class");
-        }
-        Constructor constructor = null;
-        try {
-            constructor = type.getConstructor(String.class);
-        } catch (NoSuchMethodException e) {
-            throw new RuntimeException("Unable to convert to " + type);
-        }
-        try {
-            return constructor.newInstance(value);
-        } catch (Exception e) {
-            throw new Exception("Unable to convert ", getRealCause(e));
-        }
-    }
-
-    private static Throwable getRealCause(Throwable t) {
-        if (t instanceof InvocationTargetException && t.getCause() != null) {
-            return t.getCause();
-        }
-        return t;
-    }
-
-    private Object convertToCollection(Object obj, ReifiedType type) throws Exception {
-        ReifiedType valueType = type.getActualTypeArgument(0);
-        Collection newCol = (Collection) getCollection(toClass(type)).newInstance();
-        if (obj.getClass().isArray()) {
-            for (int i = 0; i < Array.getLength(obj); i++) {
-                try {
-                    newCol.add(convert(Array.get(obj, i), valueType));
-                } catch (Exception t) {
-                    throw new Exception("Unable to convert from " + obj + " to " + type + "(error converting array element)", t);
-                }
-            }
-        } else {
-            for (Object item : (Collection) obj) {
-                try {
-                    newCol.add(convert(item, valueType));
-                } catch (Exception t) {
-                    throw new Exception("Unable to convert from " + obj + " to " + type + "(error converting collection entry)", t);
-                }
-            }
-        }
-        return newCol;
-    }
-
-    private Object convertToDictionary(Object obj, ReifiedType type) throws Exception {
-        ReifiedType keyType = type.getActualTypeArgument(0);
-        ReifiedType valueType = type.getActualTypeArgument(1);
-        Dictionary newDic = new Hashtable();
-        if (obj instanceof Dictionary) {
-            Dictionary dic = (Dictionary) obj;
-            for (Enumeration keyEnum = dic.keys(); keyEnum.hasMoreElements();) {
-                Object key = keyEnum.nextElement();
-                try {
-                    newDic.put(convert(key, keyType), convert(dic.get(key), valueType));
-                } catch (Exception t) {
-                    throw new Exception("Unable to convert from " + obj + " to " + type + "(error converting map entry)", t);
-                }
-            }
-        } else {
-            for (Map.Entry e : ((Map<Object,Object>) obj).entrySet()) {
-                try {
-                    newDic.put(convert(e.getKey(), keyType), convert(e.getValue(), valueType));
-                } catch (Exception t) {
-                    throw new Exception("Unable to convert from " + obj + " to " + type + "(error converting map entry)", t);
-                }
-            }
-        }
-        return newDic;
-    }
-
-    private Object convertToMap(Object obj, ReifiedType type) throws Exception {
-        ReifiedType keyType = type.getActualTypeArgument(0);
-        ReifiedType valueType = type.getActualTypeArgument(1);
-        Map newMap = (Map) getMap(toClass(type)).newInstance();
-        if (obj instanceof Dictionary) {
-            Dictionary dic = (Dictionary) obj;
-            for (Enumeration keyEnum = dic.keys(); keyEnum.hasMoreElements();) {
-                Object key = keyEnum.nextElement();
-                try {
-                    newMap.put(convert(key, keyType), convert(dic.get(key), valueType));
-                } catch (Exception t) {
-                    throw new Exception("Unable to convert from " + obj + " to " + type + "(error converting map entry)", t);
-                }
-            }
-        } else {
-            for (Map.Entry e : ((Map<Object,Object>) obj).entrySet()) {
-                try {
-                    newMap.put(convert(e.getKey(), keyType), convert(e.getValue(), valueType));
-                } catch (Exception t) {
-                    throw new Exception("Unable to convert from " + obj + " to " + type + "(error converting map entry)", t);
-                }
-            }
-        }
-        return newMap;
-    }
-
-    private Object convertToArray(Object obj, ReifiedType type) throws Exception {
-        if (obj instanceof Collection) {
-            obj = ((Collection) obj).toArray();
-        }
-        if (!obj.getClass().isArray()) {
-            throw new Exception("Unable to convert from " + obj + " to " + type);
-        }
-        ReifiedType componentType;
-        if (type.size() > 0) {
-            componentType = type.getActualTypeArgument(0);
-        } else {
-            componentType = new GenericType(type.getRawClass().getComponentType());
-        }
-        Object array = Array.newInstance(toClass(componentType), Array.getLength(obj));
-        for (int i = 0; i < Array.getLength(obj); i++) {
-            try {
-                Array.set(array, i, convert(Array.get(obj, i), componentType));
-            } catch (Exception t) {
-                throw new Exception("Unable to convert from " + obj + " to " + type + "(error converting array element)", t);
-            }
-        }
-        return array;
-    }
-
-    public static boolean isAssignable(Object source, ReifiedType target) {
-        return source == null
-                || (target.size() == 0
-                    && unwrap(target.getRawClass()).isAssignableFrom(unwrap(source.getClass())));
-    }
-
-    private static Class unwrap(Class c) {
-        Class u = primitives.get(c);
-        return u != null ? u : c;
-    }
-
-    private static Class getMap(Class type) {
-        if (hasDefaultConstructor(type)) {
-            return type;
-        } else if (SortedMap.class.isAssignableFrom(type)) {
-            return TreeMap.class;
-        } else if (ConcurrentMap.class.isAssignableFrom(type)) {
-            return ConcurrentHashMap.class;
-        } else {
-            return LinkedHashMap.class;
-        }
-    }
-
-    private static Class getCollection(Class type) {
-        if (hasDefaultConstructor(type)) {
-            return type;
-        } else if (SortedSet.class.isAssignableFrom(type)) {
-            return TreeSet.class;
-        } else if (Set.class.isAssignableFrom(type)) {
-            return LinkedHashSet.class;
-        } else if (List.class.isAssignableFrom(type)) {
-            return ArrayList.class;
-        } else if (Queue.class.isAssignableFrom(type)) {
-            return LinkedList.class;
-        } else {
-            return ArrayList.class;
-        }
-    }
-
-    private static boolean hasDefaultConstructor(Class type) {
-        if (!Modifier.isPublic(type.getModifiers())) {
-            return false;
-        }
-        if (Modifier.isAbstract(type.getModifiers())) {
-            return false;
-        }
-        Constructor[] constructors = type.getConstructors();
-        for (Constructor constructor : constructors) {
-            if (Modifier.isPublic(constructor.getModifiers()) &&
-                    constructor.getParameterTypes().length == 0) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private static final Map<Class, Class> primitives;
-    static {
-        primitives = new HashMap<Class, Class>();
-        primitives.put(byte.class, Byte.class);
-        primitives.put(short.class, Short.class);
-        primitives.put(char.class, Character.class);
-        primitives.put(int.class, Integer.class);
-        primitives.put(long.class, Long.class);
-        primitives.put(float.class, Float.class);
-        primitives.put(double.class, Double.class);
-        primitives.put(boolean.class, Boolean.class);
-    }
-
-    private Class toClass(ReifiedType type) {
-        return type.getRawClass();
-    }
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/converter/GenericType.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/converter/GenericType.java
deleted file mode 100644
index 43f5f91..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/converter/GenericType.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * 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.
- */
-package org.apache.felix.gogo.commands.converter;
-
-import java.lang.reflect.Array;
-import java.lang.reflect.GenericArrayType;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-import java.lang.reflect.WildcardType;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.osgi.framework.Bundle;
-import org.apache.felix.gogo.commands.converter.ReifiedType;
-
-public class GenericType extends ReifiedType {
-
-	private static final GenericType[] EMPTY = new GenericType[0];
-
-    private static final Map<String, Class> primitiveClasses = new HashMap<String, Class>();
-
-    static {
-        primitiveClasses.put("int", int.class);
-        primitiveClasses.put("short", short.class);
-        primitiveClasses.put("long", long.class);
-        primitiveClasses.put("byte", byte.class);
-        primitiveClasses.put("char", char.class);
-        primitiveClasses.put("float", float.class);
-        primitiveClasses.put("double", double.class);
-        primitiveClasses.put("boolean", boolean.class);
-    }
-
-    private GenericType[] parameters;
-
-	public GenericType(Type type) {
-		this(getConcreteClass(type), parametersOf(type));
-	}
-
-    public GenericType(Class clazz, GenericType... parameters) {
-        super(clazz);
-        this.parameters = parameters;
-    }
-
-    public static GenericType parse(String type, Object loader) throws ClassNotFoundException, IllegalArgumentException {
-        type = type.trim();
-        // Check if this is an array
-        if (type.endsWith("[]")) {
-            GenericType t = parse(type.substring(0, type.length() - 2), loader);
-            return new GenericType(Array.newInstance(t.getRawClass(), 0).getClass(), t);
-        }
-        // Check if this is a generic
-        int genericIndex = type.indexOf('<');
-        if (genericIndex > 0) {
-            if (!type.endsWith(">")) {
-                throw new IllegalArgumentException("Can not load type: " + type);
-            }
-            GenericType base = parse(type.substring(0, genericIndex), loader);
-            String[] params = type.substring(genericIndex + 1, type.length() - 1).split(",");
-            GenericType[] types = new GenericType[params.length];
-            for (int i = 0; i < params.length; i++) {
-                types[i] = parse(params[i], loader);
-            }
-            return new GenericType(base.getRawClass(), types);
-        }
-        // Primitive
-        if (primitiveClasses.containsKey(type)) {
-            return new GenericType(primitiveClasses.get(type));
-        }
-        // Class
-        if (loader instanceof ClassLoader) {
-            return new GenericType(((ClassLoader) loader).loadClass(type));
-        } else if (loader instanceof Bundle) {
-            return new GenericType(((Bundle) loader).loadClass(type));
-        } else {
-            throw new IllegalArgumentException("Unsupported loader: " + loader);
-        }
-    }
-
-    @Override
-    public ReifiedType getActualTypeArgument(int i) {
-        if (parameters.length == 0) {
-            return super.getActualTypeArgument(i);
-        }
-        return parameters[i];
-    }
-
-    @Override
-    public int size() {
-        return parameters.length;
-    }
-
-    @Override
-    public String toString() {
-        Class cl = getRawClass();
-        if (cl.isArray()) {
-            if (parameters.length > 0) {
-                return parameters[0].toString() + "[]";
-            } else {
-                return cl.getComponentType().getName() + "[]";
-            }
-        }
-        if (parameters.length > 0) {
-            StringBuilder sb = new StringBuilder();
-            sb.append(cl.getName());
-            sb.append("<");
-            for (int i = 0; i < parameters.length; i++) {
-                if (i > 0) {
-                    sb.append(",");
-                }
-                sb.append(parameters[i].toString());
-            }
-            sb.append(">");
-            return sb.toString();
-        }
-        return cl.getName();
-    }
-
-    static GenericType[] parametersOf(Type type ) {
-		if ( type instanceof Class ) {
-		    Class clazz = (Class) type;
-		    if (clazz.isArray()) {
-                GenericType t = new GenericType(clazz.getComponentType());
-                if (t.size() > 0) {
-		            return new GenericType[] { t };
-                } else {
-                    return EMPTY;
-                }
-		    } else {
-		        return EMPTY;
-		    }
-		}
-        if ( type instanceof ParameterizedType ) {
-            ParameterizedType pt = (ParameterizedType) type;
-            Type [] parameters = pt.getActualTypeArguments();
-            GenericType[] gts = new GenericType[parameters.length];
-            for ( int i =0; i<gts.length; i++) {
-                gts[i] = new GenericType(parameters[i]);
-            }
-            return gts;
-        }
-        if ( type instanceof GenericArrayType ) {
-            return new GenericType[] { new GenericType(((GenericArrayType) type).getGenericComponentType()) };
-        }
-        throw new IllegalStateException();
-	}
-
-	static Class<?> getConcreteClass(Type type) {
-		Type ntype = collapse(type);
-		if ( ntype instanceof Class )
-			return (Class<?>) ntype;
-
-		if ( ntype instanceof ParameterizedType )
-			return getConcreteClass(collapse(((ParameterizedType)ntype).getRawType()));
-
-		throw new RuntimeException("Unknown type " + type );
-	}
-
-	static Type collapse(Type target) {
-		if (target instanceof Class || target instanceof ParameterizedType ) {
-			return target;
-		} else if (target instanceof TypeVariable) {
-			return collapse(((TypeVariable<?>) target).getBounds()[0]);
-		} else if (target instanceof GenericArrayType) {
-			Type t = collapse(((GenericArrayType) target)
-					.getGenericComponentType());
-			while ( t instanceof ParameterizedType )
-				t = collapse(((ParameterizedType)t).getRawType());
-			return Array.newInstance((Class<?>)t, 0).getClass();
-		} else if (target instanceof WildcardType) {
-			WildcardType wct = (WildcardType) target;
-			if (wct.getLowerBounds().length == 0)
-				return collapse(wct.getUpperBounds()[0]);
-			else
-				return collapse(wct.getLowerBounds()[0]);
-		}
-		throw new RuntimeException("Huh? " + target);
-	}
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/converter/ReifiedType.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/converter/ReifiedType.java
deleted file mode 100644
index 239616e..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/commands/converter/ReifiedType.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) OSGi Alliance (2008, 2009). All Rights Reserved.
- *
- * Licensed 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.
- */
-package org.apache.felix.gogo.commands.converter;
-
-/**
- * Provides access to a concrete type and its optional generic type arguments.
- *
- * Java 5 and later support generic types. These types consist of a raw class
- * with type arguments. This class models such a <code>Type</code> class but
- * ensures that the type is <em>reified</em>. Reification means that the Type
- * graph associated with a Java 5 <code>Type</code> instance is traversed
- * until the type becomes a concrete class. In Java 1.4 a class has no
- * arguments. This concrete class implements the Reified Type for Java 1.4.
- *
- * In Java 1.4, this class works with non-generic types. In that cases, a
- * Reified Type provides access to the class and has zero type arguments, though
- * a subclass that provide type arguments should be respected. Blueprint
- * extender implementations can subclass this class and provide access to the
- * generics type graph if used in a conversion. Such a subclass must
- * <em>reify<em> the different Java 5 <code>Type</code> instances into the
- * reified form. That is, a form where the raw Class is available with its optional type arguments as Reified Types.
- *
- * @Immutable
- */
-public class ReifiedType {
-	final static ReifiedType ALL = new ReifiedType(Object.class);
-
-	private final Class clazz;
-
-	/**
-	 * Create a Reified Type for a raw Java class without any generic arguments.
-	 * Subclasses can provide the optional generic argument information. Without
-	 * subclassing, this instance has no type arguments.
-	 *
-	 * @param clazz
-	 *            The raw class of the Reified Type.
-	 */
-	public ReifiedType(Class clazz) {
-		this.clazz = clazz;
-	}
-
-	/**
-	 * Access to the raw class.
-	 *
-	 * The raw class represents the concrete class that is associated with a
-	 * type declaration. This class could have been deduced from the generics
-	 * type graph of the declaration. For example, in the following example:
-	 *
-	 * <pre>
-	 * Map&lt;String, Object&gt; map;
-	 * </pre>
-	 *
-	 * The raw class is the Map class.
-	 *
-	 * @return the collapsed raw class that represents this type.
-	 */
-	public Class getRawClass() {
-		return clazz;
-	}
-
-	/**
-	 * Access to a type argument.
-	 *
-	 * The type argument refers to a argument in a generic type declaration
-	 * given by index <code>i</code>. This method returns a Reified Type that
-	 * has Object as class when no generic type information is available. Any
-	 * object is assignable to Object and therefore no conversion is then
-	 * necessary, this is compatible with older Javas than 5. For this reason,
-	 * the implementation in this class always returns the
-	 * <code>Object<code> class, regardless of the given index.
-	 *
-	 * This method should be overridden by a subclass that provides access to
-	 * the generic information.
-	 *
-	 * For example, in the following example:
-	 *
-	 * <pre>
-	 * Map&lt;String, Object&gt; map;
-	 * </pre>
-	 *
-	 * The type argument 0 is <code>String</code>, and type argument 1 is
-	 * <code>Object</code>.
-	 *
-	 * @param i
-	 *            The index of the type argument
-	 * @return <code>ReifiedType(Object.class)<code>, subclasses must override this and return the generic argument at index <code>i</code>
-	 */
-	public ReifiedType getActualTypeArgument(int i) {
-		return ALL;
-	}
-
-	/**
-	 * Return the number of type arguments.
-	 *
-	 * This method should be overridden by a subclass to support Java 5 types.
-	 *
-	 * @return 0, subclasses must override this and return the number of generic
-	 *         arguments
-	 */
-	public int size() {
-		return 0;
-	}
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/runtime/Closure.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/runtime/Closure.java
deleted file mode 100644
index 9f7fa7c..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/felix/gogo/runtime/Closure.java
+++ /dev/null
@@ -1,669 +0,0 @@
-/*
- * 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.
- */
-package org.apache.felix.gogo.runtime;
-
-import java.io.EOFException;
-import java.util.AbstractList;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.apache.felix.gogo.runtime.Tokenizer.Type;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.felix.service.command.Function;
-
-public class Closure implements Function, Evaluate
-{
-    public static final String LOCATION = ".location";
-    private static final String DEFAULT_LOCK = ".defaultLock";
-
-    private static final long serialVersionUID = 1L;
-    private static final ThreadLocal<String> location = new ThreadLocal<String>();
-
-    private final CommandSessionImpl session;
-    private final Closure parent;
-    private final CharSequence source;
-    private final List<List<List<Token>>> program;
-    private final Object script;
-
-    private Token errTok;
-    private Token errTok2;
-    private List<Object> parms = null;
-    private List<Object> parmv = null;
-
-    public Closure(CommandSessionImpl session, Closure parent, CharSequence source) throws Exception
-    {
-        this.session = session;
-        this.parent = parent;
-        this.source = source;
-        script = session.get("0"); // by convention, $0 is script name
-
-        try
-        {
-            program = new Parser(source).program();
-        }
-        catch (Exception e)
-        {
-            throw setLocation(e);
-        }
-    }
-
-    public CommandSessionImpl session()
-    {
-        return session;
-    }
-
-    private Exception setLocation(Exception e)
-    {
-        if (session.get(DEFAULT_LOCK) == null)
-        {
-            String loc = location.get();
-            if (null == loc)
-            {
-                loc = (null == script ? "" : script + ":");
-
-                if (e instanceof SyntaxError)
-                {
-                    SyntaxError se = (SyntaxError) e;
-                    loc += se.line() + "." + se.column();
-                }
-                else if (null != errTok)
-                {
-                    loc += errTok.line + "." + errTok.column;
-                }
-
-                location.set(loc);
-            }
-            else if (null != script && !loc.contains(":"))
-            {
-                location.set(script + ":" + loc);
-            }
-
-            session.put(LOCATION, location.get());
-        }
-
-        if (e instanceof EOFError)
-        { // map to public exception, so interactive clients can provide more input
-            EOFException eofe = new EOFException(e.getMessage());
-            eofe.initCause(e);
-            return eofe;
-        }
-
-        return e;
-    }
-
-    // implements Function interface
-    public Object execute(CommandSession x, List<Object> values) throws Exception
-    {
-        try
-        {
-            location.remove();
-            session.variables.remove(LOCATION);
-            return execute(values);
-        }
-        catch (Exception e)
-        {
-            throw setLocation(e);
-        }
-    }
-
-    @SuppressWarnings("unchecked")
-    private Object execute(List<Object> values) throws Exception
-    {
-        if (null != values)
-        {
-            parmv = values;
-            parms = new ArgList(parmv);
-        }
-        else if (null != parent)
-        {
-            // inherit parent closure parameters
-            parms = parent.parms;
-            parmv = parent.parmv;
-        }
-        else
-        {
-            // inherit session parameters
-            Object args = session.get("args");
-            if (null != args && args instanceof List<?>)
-            {
-                parmv = (List<Object>) args;
-                parms = new ArgList(parmv);
-            }
-        }
-
-        Pipe last = null;
-        Object[] mark = Pipe.mark();
-
-        for (List<List<Token>> pipeline : program)
-        {
-            ArrayList<Pipe> pipes = new ArrayList<Pipe>();
-
-            for (List<Token> statement : pipeline)
-            {
-                Pipe current = new Pipe(this, statement);
-
-                if (pipes.isEmpty())
-                {
-                    if (current.out == null)
-                    {
-                        current.setIn(session.in);
-                        current.setOut(session.out);
-                        current.setErr(session.err);
-                    }
-                }
-                else
-                {
-                    Pipe previous = pipes.get(pipes.size() - 1);
-                    previous.connect(current);
-                }
-                pipes.add(current);
-            }
-
-            if (pipes.size() == 1)
-            {
-                pipes.get(0).run();
-            }
-            else if (pipes.size() > 1)
-            {
-                for (Pipe pipe : pipes)
-                {
-                    pipe.start();
-                }
-                // FELIX-2723
-                //for (Pipe pipe : pipes)
-                //{
-                //    pipe.join();
-                //}
-                try
-                {
-                    for (Pipe pipe : pipes)
-                    {
-                        pipe.join();
-                    }
-                }
-                catch (InterruptedException e)
-                {
-                    for (Pipe pipe : pipes)
-                    {
-                        pipe.interrupt();
-                    }
-                    throw e;
-                }
-            }
-
-            last = pipes.remove(pipes.size() - 1);
-
-            for (Pipe pipe : pipes)
-            {
-                if (pipe.exception != null)
-                {
-                    // can't throw exception, as result is defined by last pipe
-                    Object oloc = session.get(LOCATION);
-                    String loc = (String.valueOf(oloc).contains(":") ? oloc + ": "
-                        : "pipe: ");
-                    session.err.println(loc + pipe.exception);
-                    session.put("pipe-exception", pipe.exception);
-                }
-            }
-
-            if (last.exception != null)
-            {
-                Pipe.reset(mark);
-                throw last.exception;
-            }
-        }
-
-        Pipe.reset(mark); // reset IO in case same thread used for new client
-
-        return last == null ? null : last.result;
-    }
-
-    private Object eval(Object v)
-    {
-        String s = v.toString();
-        if ("null".equals(s))
-        {
-            v = null;
-        }
-        else if ("false".equals(s))
-        {
-            v = false;
-        }
-        else if ("true".equals(s))
-        {
-            v = true;
-        }
-        else
-        {
-            v = s;
-        }
-        return v;
-    }
-
-    public Object eval(final Token t) throws Exception
-    {
-        Object v = null;
-
-        switch (t.type)
-        {
-            case WORD:
-                v = Tokenizer.expand(t, this);
-
-                if (t == v)
-                {
-                    v = eval(v);
-                }
-                break;
-
-            case CLOSURE:
-                v = new Closure(session, this, t);
-                break;
-
-            case EXECUTION:
-                v = new Closure(session, this, t).execute(session, parms);
-                break;
-
-            case ARRAY:
-                v = array(t);
-                break;
-
-            case ASSIGN:
-                v = t.type;
-                break;
-
-            default:
-                throw new SyntaxError(t.line, t.column, "unexpected token: " + t.type);
-        }
-
-        return v;
-    }
-
-    /*
-     * executeStatement handles the following cases:
-     *    <string> '=' word // simple assignment
-     *    <string> '=' word word.. // complex assignment
-     *    <bareword> word.. // command invocation
-     *    <object> // value of <object>
-     *    <object> word.. // method call
-     */
-    public Object executeStatement(List<Token> statement) throws Exception
-    {
-        Object echo = session.get("echo");
-        String xtrace = null;
-
-        if (echo != null && !"false".equals(echo.toString()))
-        {
-            // set -x execution trace
-            StringBuilder buf = new StringBuilder("+");
-            for (Token token : statement)
-            {
-                buf.append(' ');
-                buf.append(token.source());
-            }
-            xtrace = buf.toString();
-            session.err.println(xtrace);
-        }
-
-        List<Object> values = new ArrayList<Object>();
-        errTok = statement.get(0);
-
-        if ((statement.size() > 3) && Type.ASSIGN.equals(statement.get(1).type))
-        {
-            errTok2 = statement.get(2);
-        }
-
-        for (Token t : statement)
-        {
-            Object v = eval(t);
-
-            if ((Type.EXECUTION == t.type) && (statement.size() == 1))
-            {
-                return v;
-            }
-
-            if (parms == v && parms != null)
-            {
-                values.addAll(parms); // explode $args array
-            }
-            else
-            {
-                values.add(v);
-            }
-        }
-
-        Object cmd = values.remove(0);
-        if (cmd == null)
-        {
-            if (values.isEmpty())
-            {
-                return null;
-            }
-
-            throw new RuntimeException("Command name evaluates to null: " + errTok);
-        }
-
-        if (cmd instanceof CharSequence && values.size() > 0
-            && Type.ASSIGN.equals(values.get(0)))
-        {
-            values.remove(0);
-            String scmd = cmd.toString();
-            Object value;
-
-            if (values.size() == 0)
-            {
-                return session.variables.remove(scmd);
-            }
-
-            if (values.size() == 1)
-            {
-                value = values.get(0);
-            }
-            else
-            {
-                cmd = values.remove(0);
-                if (null == cmd)
-                {
-                    throw new RuntimeException("Command name evaluates to null: "
-                        + errTok2);
-                }
-
-                trace2(xtrace, cmd, values);
-
-                value = bareword(statement.get(2)) ? executeCmd(cmd.toString(), values)
-                    : executeMethod(cmd, values);
-            }
-
-            return assignment(scmd, value);
-        }
-
-        trace2(xtrace, cmd, values);
-
-        return bareword(statement.get(0)) ? executeCmd(cmd.toString(), values)
-            : executeMethod(cmd, values);
-    }
-
-    // second level expanded execution trace
-    private void trace2(String trace1, Object cmd, List<Object> values)
-    {
-        if ("verbose".equals(session.get("echo")))
-        {
-            StringBuilder buf = new StringBuilder("+ " + cmd);
-
-            for (Object value : values)
-            {
-                buf.append(' ');
-                buf.append(value);
-            }
-
-            String trace2 = buf.toString();
-
-            if (!trace2.equals(trace1))
-            {
-                session.err.println("+" + trace2);
-            }
-        }
-    }
-
-    private boolean bareword(Token t) throws Exception
-    {
-        return ((t.type == Type.WORD) && (t == Tokenizer.expand(t, this)) && (eval((Object) t) instanceof String));
-    }
-
-    private Object executeCmd(String scmd, List<Object> values) throws Exception
-    {
-        String scopedFunction = scmd;
-        Object x = get(scmd);
-
-        if (!(x instanceof Function))
-        {
-            if (scmd.indexOf(':') < 0)
-            {
-                scopedFunction = "*:" + scmd;
-            }
-
-            x = get(scopedFunction);
-
-            if (x == null || !(x instanceof Function))
-            {
-                // try default command handler
-                if (session.get(DEFAULT_LOCK) == null)
-                {
-                    x = get("default");
-                    if (x == null)
-                    {
-                        x = get("*:default");
-                    }
-
-                    if (x instanceof Function)
-                    {
-                        try
-                        {
-                            session.put(DEFAULT_LOCK, true);
-                            values.add(0, scmd);
-                            return ((Function) x).execute(session, values);
-                        }
-                        finally
-                        {
-                            session.variables.remove(DEFAULT_LOCK);
-                        }
-                    }
-                }
-
-                throw new CommandNotFoundException(scmd);
-            }
-        }
-        return ((Function) x).execute(session, values);
-    }
-
-    private Object executeMethod(Object cmd, List<Object> values) throws Exception
-    {
-        if (values.isEmpty())
-        {
-            return cmd;
-        }
-
-        boolean dot = values.size() > 1 && ".".equals(String.valueOf(values.get(0)));
-
-        // FELIX-1473 - allow method chaining using dot pseudo-operator, e.g.
-        //  (bundle 0) . loadClass java.net.InetAddress . localhost . hostname
-        //  (((bundle 0) loadClass java.net.InetAddress ) localhost ) hostname
-        if (dot)
-        {
-            Object target = cmd;
-            ArrayList<Object> args = new ArrayList<Object>();
-            values.remove(0);
-
-            for (Object arg : values)
-            {
-                if (".".equals(arg))
-                {
-                    target = Reflective.invoke(session, target,
-                        args.remove(0).toString(), args);
-                    args.clear();
-                }
-                else
-                {
-                    args.add(arg);
-                }
-            }
-
-            if (args.size() == 0)
-            {
-                return target;
-            }
-
-            return Reflective.invoke(session, target, args.remove(0).toString(), args);
-        }
-        else if (cmd.getClass().isArray() && values.size() == 1)
-        {
-            Object[] cmdv = (Object[]) cmd;
-            String index = values.get(0).toString();
-            return "length".equals(index) ? cmdv.length : cmdv[Integer.parseInt(index)];
-        }
-        else
-        {
-            return Reflective.invoke(session, cmd, values.remove(0).toString(), values);
-        }
-    }
-
-    private Object assignment(String name, Object value)
-    {
-        session.variables.put(name, value);
-        return value;
-    }
-
-    private Object array(Token array) throws Exception
-    {
-        List<Token> list = new ArrayList<Token>();
-        Map<Token, Token> map = new LinkedHashMap<Token, Token>();
-        (new Parser(array)).array(list, map);
-
-        if (map.isEmpty())
-        {
-            List<Object> olist = new ArrayList<Object>();
-            for (Token t : list)
-            {
-                Object oval = eval(t);
-                if (oval.getClass().isArray())
-                {
-                    for (Object o : (Object[]) oval)
-                    {
-                        olist.add(o);
-                    }
-                }
-                else
-                {
-                    olist.add(oval);
-                }
-            }
-            return olist;
-        }
-        else
-        {
-            Map<Object, Object> omap = new LinkedHashMap<Object, Object>();
-            for (Entry<Token, Token> e : map.entrySet())
-            {
-                Token key = e.getKey();
-                Object k = eval(key);
-                if (!(k instanceof String))
-                {
-                    throw new SyntaxError(key.line, key.column,
-                        "map key null or not String: " + key);
-                }
-                omap.put(k, eval(e.getValue()));
-            }
-            return omap;
-        }
-    }
-
-    public Object get(String name)
-    {
-        if (parms != null)
-        {
-            if ("args".equals(name))
-            {
-                return parms;
-            }
-
-            if ("argv".equals(name))
-            {
-                return parmv;
-            }
-
-            if ("it".equals(name))
-            {
-                return parms.get(0);
-            }
-
-            if (name.length() == 1 && Character.isDigit(name.charAt(0)))
-            {
-                int i = name.charAt(0) - '0';
-                if (i > 0)
-                {
-                    return parms.get(i - 1);
-                }
-            }
-        }
-
-        return session.get(name);
-    }
-
-    public Object put(String key, Object value)
-    {
-        return session.variables.put(key, value);
-    }
-
-    @Override
-    public String toString()
-    {
-        return source.toString().trim().replaceAll("\n+", "\n").replaceAll(
-            "([^\\\\{(\\[])\n", "\\1;").replaceAll("[ \\\\\t\n]+", " ");
-    }
-
-    /**
-     * List that overrides toString() for implicit $args expansion.
-     * Also checks for index out of bounds, so that $1 evaluates to null
-     * rather than throwing IndexOutOfBoundsException.
-     * e.g. x = { a$args }; x 1 2 => a1 2 and not a[1, 2]
-     */
-    class ArgList extends AbstractList<Object>
-    {
-        private List<Object> list;
-
-        public ArgList(List<Object> args)
-        {
-            this.list = args;
-        }
-
-        @Override
-        public String toString()
-        {
-            StringBuilder buf = new StringBuilder();
-            for (Object o : list)
-            {
-                if (buf.length() > 0)
-                    buf.append(' ');
-                buf.append(o);
-            }
-            return buf.toString();
-        }
-
-        @Override
-        public Object get(int index)
-        {
-            return index < list.size() ? list.get(index) : null;
-        }
-
-        @Override
-        public Object remove(int index)
-        {
-            return list.remove(index);
-        }
-
-        @Override
-        public int size()
-        {
-            return list.size();
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/AbstractAction.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/AbstractAction.java
deleted file mode 100644
index 48c80f5..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/AbstractAction.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console;
-
-import org.apache.felix.gogo.commands.Action;
-import org.apache.felix.service.command.CommandSession;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public abstract class AbstractAction implements Action {
-
-    protected final Logger log = LoggerFactory.getLogger(getClass());
-    protected CommandSession session;
-
-    public Object execute(CommandSession session) throws Exception {
-        this.session = session;
-        return doExecute();
-    }
-
-    protected abstract Object doExecute() throws Exception;
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/BlueprintContainerAware.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/BlueprintContainerAware.java
deleted file mode 100644
index d566f48..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/BlueprintContainerAware.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console;
-
-import org.osgi.service.blueprint.container.BlueprintContainer;
-
-public interface BlueprintContainerAware {
-
-    void setBlueprintContainer(BlueprintContainer blueprintContainer);
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/BundleContextAware.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/BundleContextAware.java
deleted file mode 100644
index bbd03c5..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/BundleContextAware.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console;
-
-import org.osgi.framework.BundleContext;
-
-public interface BundleContextAware {
-
-    void setBundleContext(BundleContext bundleContext);
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/CloseShellException.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/CloseShellException.java
deleted file mode 100644
index 09d8346..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/CloseShellException.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console;
-
-/**
- * Exception thrown to indicate the console to close.
- */
-public class CloseShellException extends Exception {
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/CompletableFunction.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/CompletableFunction.java
deleted file mode 100644
index fcb96da..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/CompletableFunction.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console;
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.felix.service.command.Function;
-
-public interface CompletableFunction extends Function {
-
-    List<Completer> getCompleters();
-    Map<String, Completer> getOptionalCompleters();
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/Completer.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/Completer.java
deleted file mode 100644
index 59f7897..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/Completer.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console;
-
-import java.util.List;
-
-public interface Completer {
-
-    int complete(String buffer, int cursor, List<String> candidates);
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/Converters.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/Converters.java
deleted file mode 100644
index c0f8c43..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/Converters.java
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.util.Arrays;
-import java.util.Formatter;
-
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
-import org.apache.felix.service.command.Converter;
-import org.apache.felix.service.command.Function;
-import org.osgi.service.startlevel.StartLevel;
-
-public class Converters implements Converter
-{
-    private final BundleContext context;
-
-    public Converters(BundleContext context)
-    {
-        this.context = context;
-    }
-
-    private CharSequence print(Bundle bundle)
-    {
-        // [ ID ] [STATE      ] [ SL ] symname
-        StartLevel sl = null;
-        ServiceReference ref = context.getServiceReference(StartLevel.class.getName());
-        if (ref != null)
-        {
-            sl = (StartLevel) context.getService(ref);
-        }
-
-        if (sl == null)
-        {
-            return String.format("%5d|%-11s|%s (%s)", bundle.getBundleId(),
-                getState(bundle), bundle.getSymbolicName(), bundle.getVersion());
-        }
-
-        int level = sl.getBundleStartLevel(bundle);
-        context.ungetService(ref);
-
-        return String.format("%5d|%-11s|%5d|%s (%s)", bundle.getBundleId(),
-            getState(bundle), level, bundle.getSymbolicName(), bundle.getVersion());
-    }
-
-    private CharSequence print(ServiceReference ref)
-    {
-        StringBuilder sb = new StringBuilder();
-        Formatter f = new Formatter(sb);
-
-        String spid = "";
-        Object pid = ref.getProperty("service.pid");
-        if (pid != null)
-        {
-            spid = pid.toString();
-        }
-
-        f.format("%06d %3s %-40s %s", ref.getProperty("service.id"),
-            ref.getBundle().getBundleId(),
-            getShortNames((String[]) ref.getProperty("objectclass")), spid);
-        return sb;
-    }
-
-    private CharSequence getShortNames(String[] list)
-    {
-        StringBuilder sb = new StringBuilder();
-        String del = "";
-        for (String s : list)
-        {
-            sb.append(del + getShortName(s));
-            del = " | ";
-        }
-        return sb;
-    }
-
-    private CharSequence getShortName(String name)
-    {
-        int n = name.lastIndexOf('.');
-        if (n < 0)
-        {
-            n = 0;
-        }
-        else
-        {
-            n++;
-        }
-        return name.subSequence(n, name.length());
-    }
-
-    private String getState(Bundle bundle)
-    {
-        switch (bundle.getState())
-        {
-            case Bundle.ACTIVE:
-                return "Active";
-
-            case Bundle.INSTALLED:
-                return "Installed";
-
-            case Bundle.RESOLVED:
-                return "Resolved";
-
-            case Bundle.STARTING:
-                return "Starting";
-
-            case Bundle.STOPPING:
-                return "Stopping";
-
-            case Bundle.UNINSTALLED:
-                return "Uninstalled ";
-        }
-        return null;
-    }
-
-    public Bundle bundle(Bundle i)
-    {
-        return i;
-    }
-
-    public Object convert(Class<?> desiredType, final Object in) throws Exception
-    {
-        if (desiredType == Bundle.class)
-        {
-            return convertBundle(in);
-        }
-
-        if (desiredType == ServiceReference.class)
-        {
-            return convertServiceReference(in);
-        }
-
-        if (desiredType == Class.class)
-        {
-            try
-            {
-                return Class.forName(in.toString());
-            }
-            catch (ClassNotFoundException e)
-            {
-                return null;
-            }
-        }
-
-        if (desiredType.isAssignableFrom(String.class) && in instanceof InputStream)
-        {
-            return read(((InputStream) in));
-        }
-
-        if (in instanceof Function && desiredType.isInterface()
-            && desiredType.getDeclaredMethods().length == 1)
-        {
-            return Proxy.newProxyInstance(desiredType.getClassLoader(),
-                new Class[] { desiredType }, new InvocationHandler()
-                {
-                    Function command = ((Function) in);
-
-                    public Object invoke(Object proxy, Method method, Object[] args)
-                        throws Throwable
-                    {
-                        return command.execute(null, Arrays.asList(args));
-                    }
-                });
-        }
-
-        return null;
-    }
-
-    private Object convertServiceReference(Object in) throws InvalidSyntaxException
-    {
-        String s = in.toString();
-        if (s.startsWith("(") && s.endsWith(")"))
-        {
-            ServiceReference refs[] = context.getServiceReferences((String) null, String.format(
-                "(|(service.id=%s)(service.pid=%s))", in, in));
-            if (refs != null && refs.length > 0)
-            {
-                return refs[0];
-            }
-        }
-
-        ServiceReference refs[] = context.getServiceReferences((String) null, String.format(
-            "(|(service.id=%s)(service.pid=%s))", in, in));
-        if (refs != null && refs.length > 0)
-        {
-            return refs[0];
-        }
-        return null;
-    }
-
-    private Object convertBundle(Object in)
-    {
-        String s = in.toString();
-        try
-        {
-            long id = Long.parseLong(s);
-            return context.getBundle(id);
-        }
-        catch (NumberFormatException nfe)
-        {
-            // Ignore
-        }
-
-        Bundle bundles[] = context.getBundles();
-        for (Bundle b : bundles)
-        {
-            if (b.getLocation().equals(s))
-            {
-                return b;
-            }
-
-            if (b.getSymbolicName().equals(s))
-            {
-                return b;
-            }
-        }
-
-        return null;
-    }
-
-    public CharSequence format(Object target, int level, Converter converter)
-        throws IOException
-    {
-        if (level == INSPECT && target instanceof InputStream)
-        {
-            return read(((InputStream) target));
-        }
-        if (level == LINE && target instanceof Bundle)
-        {
-            return print((Bundle) target);
-        }
-        if (level == LINE && target instanceof ServiceReference)
-        {
-            return print((ServiceReference) target);
-        }
-        if (level == PART && target instanceof Bundle)
-        {
-            return ((Bundle) target).getSymbolicName();
-        }
-        if (level == PART && target instanceof ServiceReference)
-        {
-            return getShortNames((String[]) ((ServiceReference) target).getProperty("objectclass"));
-        }
-        return null;
-    }
-
-    private CharSequence read(InputStream in) throws IOException
-    {
-        int c;
-        StringBuffer sb = new StringBuffer();
-        while ((c = in.read()) > 0)
-        {
-            if (c >= 32 && c <= 0x7F || c == '\n' || c == '\r')
-            {
-                sb.append((char) c);
-            }
-            else
-            {
-                String s = Integer.toHexString(c).toUpperCase();
-                sb.append("\\");
-                if (s.length() < 1)
-                {
-                    sb.append(0);
-                }
-                sb.append(s);
-            }
-        }
-        return sb;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/HelpProvider.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/HelpProvider.java
deleted file mode 100644
index 7e3bca7..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/HelpProvider.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.shell.console;
-
-import org.apache.felix.service.command.CommandSession;
-
-public interface HelpProvider {
-    
-    String getHelp(CommandSession session, String path);
-    
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/Main.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/Main.java
deleted file mode 100644
index c23088e..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/Main.java
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.PrintStream;
-import java.io.Reader;
-import java.lang.reflect.Method;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.List;
-
-import jline.Terminal;
-import org.apache.felix.gogo.commands.Action;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.CommandException;
-import org.apache.felix.gogo.commands.basic.AbstractCommand;
-import org.apache.felix.gogo.runtime.CommandNotFoundException;
-import org.apache.felix.gogo.runtime.CommandProcessorImpl;
-import org.apache.felix.gogo.runtime.threadio.ThreadIOImpl;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.felix.service.command.Function;
-import org.apache.felix.service.threadio.ThreadIO;
-import org.apache.karaf.shell.console.jline.Console;
-import org.apache.karaf.shell.console.jline.TerminalFactory;
-import org.fusesource.jansi.Ansi;
-import org.fusesource.jansi.AnsiConsole;
-
-public class Main {
-    private String application = System.getProperty("karaf.name", "root");
-    private String user = "karaf";
-
-    public static void main(String args[]) throws Exception {
-        Main main = new Main();
-        main.run(args);
-    }
-
-    /**
-     * Use this method when the shell is being executed as a top level shell.
-     *
-     * @param args
-     * @throws Exception
-     */
-    public void run(String args[]) throws Exception {
-
-        ThreadIOImpl threadio = new ThreadIOImpl();
-        threadio.start();
-
-        CommandProcessorImpl commandProcessor = new CommandProcessorImpl(threadio);
-
-        InputStream in = unwrap(System.in);
-        PrintStream out = wrap(unwrap(System.out));
-        PrintStream err = wrap(unwrap(System.err));
-        run(commandProcessor, args, in, out, err);
-
-        // TODO: do we need to stop the threadio that was started?
-        // threadio.stop();
-    }
-
-    /**
-     * Use this method when the shell is being executed as a command
-     * of another shell.
-     *
-     * @param parent
-     * @param args
-     * @throws Exception
-     */
-    public void run(CommandSession parent, String args[]) throws Exception {
-
-        // TODO: find out what the down side of not using a real ThreadIO implementation is.
-        CommandProcessorImpl commandProcessor = new CommandProcessorImpl(new ThreadIO() {
-            public void setStreams(InputStream in, PrintStream out, PrintStream err) {
-            }
-            public void close() {
-            }
-        });
-
-        InputStream in = parent.getKeyboard();
-        PrintStream out = parent.getConsole();
-        PrintStream err = parent.getConsole();
-        run(commandProcessor, args, in, out, err);
-    }
-
-    private void run(CommandProcessorImpl commandProcessor, String[] args, InputStream in, PrintStream out, PrintStream err) throws Exception {
-        StringBuilder sb = new StringBuilder();
-        String classpath = null;
-        boolean batch = false;
-        String file  = null;
-
-        for (int i = 0; i < args.length; i++) {
-            String arg = args[i];
-            if (arg.startsWith("--classpath=")) {
-                classpath = arg.substring("--classpath=".length());
-            } else if (arg.startsWith("-c=")) {
-                classpath = arg.substring("-c=".length());
-            } else if (arg.equals("--classpath") || arg.equals("-c")) {
-                classpath = args[++i];
-            } else if (arg.equals("-b") || arg.equals("--batch")) {
-                batch = true;
-            } else if (arg.startsWith("--file=")) {
-                file = arg.substring("--file=".length());
-            } else if (arg.startsWith("-f=")) {
-                file = arg.substring("-f=".length());
-            } else if (arg.equals("--file") || arg.equals("-f")) {
-                file = args[++i];
-            } else {
-                sb.append(arg);
-                sb.append(' ');
-            }
-        }
-
-        if (file != null) {
-            Reader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
-            try {
-                sb.setLength(0);
-                for (int c = reader.read(); c >= 0; c = reader.read()) {
-                    sb.append((char) c);
-                }
-            } finally {
-                reader.close();
-            }
-        } else if (batch) {
-            // read all stdin
-            Reader reader = new BufferedReader(new InputStreamReader(System.in));
-            sb.setLength(0);
-            for (int c = reader.read(); c >= 0; c = reader.read()) {
-                sb.append((char) c);
-            }
-        }
-
-        ClassLoader cl = Main.class.getClassLoader();
-        if (classpath != null) {
-            List<URL> urls = getFiles(new File(classpath));
-            cl = new URLClassLoader(urls.toArray(new URL[urls.size()]), cl);
-        }
-
-        discoverCommands(commandProcessor, cl);
-
-        run(commandProcessor, sb.toString(), in, out, err);
-    }
-
-    private void run(final CommandProcessorImpl commandProcessor, String command, final InputStream in, final PrintStream out, final PrintStream err) throws Exception {
-
-        if (command.length() > 0) {
-
-            // Shell is directly executing a sub/command, we don't setup a terminal and console
-            // in this case, this avoids us reading from stdin un-necessarily.
-            CommandSession session = commandProcessor.createSession(in, out, err);
-            session.put("USER", user);
-            session.put("APPLICATION", application);
-            session.put(NameScoping.MULTI_SCOPE_MODE_KEY, Boolean.toString(isMultiScopeMode()));
-
-            try {
-                session.execute(command);
-            } catch (Throwable t) {
-                if (t instanceof CommandNotFoundException) {
-                    String str = Ansi.ansi()
-                        .fg(Ansi.Color.RED)
-                        .a("Command not found: ")
-                        .a(Ansi.Attribute.INTENSITY_BOLD)
-                        .a(((CommandNotFoundException) t).getCommand())
-                        .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
-                        .fg(Ansi.Color.DEFAULT).toString();
-                    session.getConsole().println(str);
-                } else if (t instanceof CommandException) {
-                    session.getConsole().println(((CommandException) t).getNiceHelp());
-                } else {
-                    session.getConsole().print(Ansi.ansi().fg(Ansi.Color.RED).toString());
-                    t.printStackTrace(session.getConsole());
-                    session.getConsole().print(Ansi.ansi().fg(Ansi.Color.DEFAULT).toString());
-                }
-            }
-        } else {
-            // We are going into full blown interactive shell mode.
-
-            final TerminalFactory terminalFactory = new TerminalFactory();
-            final Terminal terminal = terminalFactory.getTerminal();
-            Console console = createConsole(commandProcessor, in, out, err, terminal);
-            CommandSession session = console.getSession();
-            session.put("USER", user);
-            session.put("APPLICATION", application);
-            session.put(NameScoping.MULTI_SCOPE_MODE_KEY, Boolean.toString(isMultiScopeMode()));
-            session.put("#LINES", new Function() {
-                public Object execute(CommandSession session, List<Object> arguments) throws Exception {
-                    return Integer.toString(terminal.getHeight());
-                }
-            });
-            session.put("#COLUMNS", new Function() {
-                public Object execute(CommandSession session, List<Object> arguments) throws Exception {
-                    return Integer.toString(terminal.getWidth());
-                }
-            });
-            session.put(".jline.terminal", terminal);
-
-            console.run();
-
-            terminalFactory.destroy();
-        }
-
-    }
-
-    /**
-     * Allow sub classes of main to change the Console implementation used.
-     * 
-     * @param commandProcessor
-     * @param in
-     * @param out
-     * @param err
-     * @param terminal
-     * @return
-     * @throws Exception
-     */
-    protected Console createConsole(CommandProcessorImpl commandProcessor, InputStream in, PrintStream out, PrintStream err, Terminal terminal) throws Exception {
-        return new Console(commandProcessor, in, out, err, terminal, null, null);
-    }
-
-    /**
-     * Sub classes can override so that their registered commands do not conflict with the default shell
-     * implementation.
-     *
-     * @return
-     */
-    public String getDiscoveryResource() {
-        return "META-INF/services/org/apache/karaf/shell/commands";
-    }
-
-    private void discoverCommands(CommandProcessorImpl commandProcessor, ClassLoader cl) throws IOException, ClassNotFoundException {
-        Enumeration<URL> urls = cl.getResources(getDiscoveryResource());
-        while (urls.hasMoreElements()) {
-            URL url = urls.nextElement();
-            BufferedReader r = new BufferedReader(new InputStreamReader(url.openStream()));
-            String line = r.readLine();
-            while (line != null) {
-                line = line.trim();
-                if (line.length() > 0 && line.charAt(0) != '#') {
-                    final Class<Action> actionClass = (Class<Action>) cl.loadClass(line);
-                    Command cmd = actionClass.getAnnotation(Command.class);
-                    Function function = new AbstractCommand() {
-                        @Override
-                        public Action createNewAction() {
-                            try {
-                                return ((Class<? extends Action>) actionClass).newInstance();
-                            } catch (InstantiationException e) {
-                                throw new RuntimeException(e);
-                            } catch (IllegalAccessException e) {
-                                throw new RuntimeException(e);
-                            }
-                        }
-                    };
-                    addCommand(cmd, function, commandProcessor);
-                }
-                line = r.readLine();
-            }
-            r.close();
-        }
-    }
-
-    protected void addCommand(Command cmd, Function function, CommandProcessorImpl commandProcessor) {
-        try {
-            commandProcessor.addCommand(cmd.scope(), function, cmd.name());
-        } catch (Exception e) {
-        }
-    }
-
-
-    public String getApplication() {
-        return application;
-    }
-
-    public void setApplication(String application) {
-        this.application = application;
-    }
-
-    public String getUser() {
-        return user;
-    }
-
-    public void setUser(String user) {
-        this.user = user;
-    }
-
-    /**
-     * Returns whether or not we are in multi-scope mode.
-     *
-     * The default mode is multi-scoped where we prefix commands by their scope. If we are in single
-     * scoped mode then we don't use scope prefixes when registering or tab completing commands.
-     */
-    public boolean isMultiScopeMode() {
-        return true;
-    }
-
-    private static PrintStream wrap(PrintStream stream) {
-        OutputStream o = AnsiConsole.wrapOutputStream(stream);
-        if (o instanceof PrintStream) {
-            return ((PrintStream) o);
-        } else {
-            return new PrintStream(o);
-        }
-    }
-
-    private static <T> T unwrap(T stream) {
-        try {
-            Method mth = stream.getClass().getMethod("getRoot");
-            return (T) mth.invoke(stream);
-        } catch (Throwable t) {
-            return stream;
-        }
-    }
-
-    private static List<URL> getFiles(File base) throws MalformedURLException {
-        List<URL> urls = new ArrayList<URL>();
-        getFiles(base, urls);
-        return urls;
-    }
-
-    private static void getFiles(File base, List<URL> urls) throws MalformedURLException {
-        for (File f : base.listFiles()) {
-            if (f.isDirectory()) {
-                getFiles(f, urls);
-            } else if (f.getName().endsWith(".jar")) {
-                urls.add(f.toURI().toURL());
-            }
-        }
-    }
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/MultiException.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/MultiException.java
deleted file mode 100644
index f337d27..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/MultiException.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console;
-
-import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.List;
-
-public class MultiException extends Exception {
-
-    private List<Exception> exceptions = new ArrayList<Exception>();
-
-    public MultiException(String message) {
-        super(message);
-    }
-
-    public MultiException(String message, List<Exception> exceptions) {
-        super(message);
-        this.exceptions = exceptions;
-    }
-
-    public void addException(Exception e) {
-        exceptions.add(e);
-    }
-
-    public void throwIfExceptions() throws MultiException {
-        if (!exceptions.isEmpty()) {
-            throw this;
-        }
-    }
-
-    public Throwable[] getCauses() {
-        return exceptions.toArray(new Throwable[exceptions.size()]);
-    }
-
-    @Override
-    public void printStackTrace()
-    {
-        super.printStackTrace();
-        for (Exception e : exceptions) {
-            e.printStackTrace();
-        }
-    }
-
-
-    /* ------------------------------------------------------------------------------- */
-    /**
-     * @see java.lang.Throwable#printStackTrace(java.io.PrintStream)
-     */
-    @Override
-    public void printStackTrace(PrintStream out)
-    {
-        super.printStackTrace(out);
-        for (Exception e : exceptions) {
-            e.printStackTrace(out);
-        }
-    }
-
-    @Override
-    public void printStackTrace(PrintWriter out)
-    {
-        super.printStackTrace(out);
-        for (Exception e : exceptions) {
-            e.printStackTrace(out);
-        }
-    }
-
-    public static void throwIf(String message, List<Exception> exceptions) throws MultiException {
-        if (exceptions != null && !exceptions.isEmpty()) {
-            StringBuilder sb = new StringBuilder(message);
-            sb.append(":");
-            for (Exception e : exceptions) {
-                sb.append("\n\t");
-                sb.append(e.getMessage());
-            }
-            throw new MultiException(sb.toString(), exceptions);
-        }
-    }
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/NameScoping.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/NameScoping.java
deleted file mode 100644
index 614c430..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/NameScoping.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.shell.console;
-
-import org.apache.felix.service.command.CommandSession;
-
-
-/**
- * A helper class for name scoping
- */
-public class NameScoping {
-
-    public static final String MULTI_SCOPE_MODE_KEY = "MULTI_SCOPE_MODE";
-
-    /**
-     * Returns the name of the command which can omit the global scope prefix if the command starts with the
-     * same prefix as the current application
-     */
-    public static String getCommandNameWithoutGlobalPrefix(CommandSession session, String key) {
-        if (!isMultiScopeMode(session)) {
-            String globalScope = (String) session.get("APPLICATION");
-            if (globalScope != null) {
-                String prefix = globalScope + ":";
-                if (key.startsWith(prefix)) {
-                    // TODO we may only want to do this for single-scope mode when outside of OSGi?
-                    // so we may want to also check for a isMultiScope mode == false
-                    return key.substring(prefix.length());
-                }
-            }
-        }
-        return key;
-    }
-
-    /**
-     * Returns true if the given scope is the global scope so that it can be hidden from help messages
-     */
-    public static boolean isGlobalScope(CommandSession session, String scope) {
-        if (!isMultiScopeMode(session)) {
-            String globalScope = (String) session.get("APPLICATION");
-            if (globalScope != null) {
-                return scope.equals(globalScope);
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Returns true if we are in multi-scope mode (the default) or if we are in single scope mode which means we
-     * avoid prefixing commands with their scope
-     */
-    public static boolean isMultiScopeMode(CommandSession session) {
-        Object value = session.get(MULTI_SCOPE_MODE_KEY);
-        if (value != null && value.equals("false")) {
-            return false;
-        }
-        return true;
-    }
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/OsgiCommandSupport.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/OsgiCommandSupport.java
deleted file mode 100644
index 71761ed..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/OsgiCommandSupport.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Action;
-import org.apache.felix.service.command.CommandSession;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-
-public abstract class OsgiCommandSupport extends AbstractAction implements Action, BundleContextAware {
-
-    protected BundleContext bundleContext;
-    protected List<ServiceReference> usedReferences;
-
-    @Override
-    public Object execute(CommandSession session) throws Exception {
-        this.session = session;
-        try {
-            return doExecute();
-        } finally {
-            ungetServices();
-        }
-    }
-
-    public BundleContext getBundleContext() {
-        return bundleContext;
-    }
-
-    public void setBundleContext(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-
-    protected <T> List<T> getAllServices(Class<T> clazz, String filter) throws Exception {
-        ServiceReference[] references = getBundleContext().getAllServiceReferences(clazz.getName(), filter);
-        if (references == null) {
-            return null;
-        }
-        List<T> services = new ArrayList<T>();
-        for (ServiceReference ref : references) {
-            T t = getService(clazz, ref);
-            services.add(t);
-        }
-        return services;
-    }
-
-    protected <T> T getService(Class<T> clazz, ServiceReference reference) {
-        T t = (T) getBundleContext().getService(reference);
-        if (t != null) {
-            if (usedReferences == null) {
-                usedReferences = new ArrayList<ServiceReference>();
-            }
-            usedReferences.add(reference);
-        }
-        return t;
-    }
-
-    protected void ungetServices() {
-        if (usedReferences != null) {
-            for (ServiceReference ref : usedReferences) {
-                getBundleContext().ungetService(ref);
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/SubShell.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/SubShell.java
deleted file mode 100644
index 2de0d20..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/SubShell.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console;
-
-public interface SubShell {
-
-    /**
-     * Returns the name of the command if used inside a shell
-     */
-    String getName();
-
-    /**
-     * Returns the description of the command which is used to generate command line help
-     */
-    String getDescription();
-
-    /**
-     * Returns a detailed description of the command
-     */
-    String getDetailedDescription();
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/commands/AnnotatedSubShell.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/commands/AnnotatedSubShell.java
deleted file mode 100644
index 9cd3dda..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/commands/AnnotatedSubShell.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.shell.console.commands;
-
-import org.apache.karaf.shell.console.SubShell;
-
-public class AnnotatedSubShell implements SubShell {
-
-    public String getName() {
-        return getAnnotation().name();
-    }
-
-    public String getDescription() {
-        return getAnnotation().description();
-    }
-
-    public String getDetailedDescription() {
-        return getAnnotation().detailedDescription();
-    }
-    
-    org.apache.felix.gogo.commands.SubShell getAnnotation() {
-        org.apache.felix.gogo.commands.SubShell ann = getClass().getAnnotation(org.apache.felix.gogo.commands.SubShell.class);
-        if (ann == null) {
-            throw new IllegalStateException("The class should be annotated with the org.apache.felix.gogo.commands.SubShell annotation");
-        }
-        return ann;
-    }
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/commands/BasicSubShell.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/commands/BasicSubShell.java
deleted file mode 100644
index 3e40c5a..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/commands/BasicSubShell.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.shell.console.commands;
-
-import org.apache.karaf.shell.console.SubShell;
-
-public class BasicSubShell implements SubShell {
-    
-    private String name;
-    private String description;
-    private String detailedDescription;
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getDetailedDescription() {
-        return detailedDescription;
-    }
-
-    public void setDetailedDescription(String detailedDescription) {
-        this.detailedDescription = detailedDescription;
-    }
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/commands/BlueprintCommand.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/commands/BlueprintCommand.java
deleted file mode 100644
index 6212169..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/commands/BlueprintCommand.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.shell.console.commands;
-
-import java.lang.reflect.Type;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.felix.gogo.commands.Action;
-import org.apache.felix.gogo.commands.basic.AbstractCommand;
-import org.apache.felix.gogo.commands.basic.ActionPreparator;
-import org.apache.felix.gogo.commands.basic.DefaultActionPreparator;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.karaf.shell.console.BlueprintContainerAware;
-import org.apache.karaf.shell.console.BundleContextAware;
-import org.apache.karaf.shell.console.CompletableFunction;
-import org.apache.karaf.shell.console.Completer;
-import org.osgi.framework.BundleContext;
-import org.osgi.service.blueprint.container.BlueprintContainer;
-import org.osgi.service.blueprint.container.Converter;
-
-public class
-        BlueprintCommand extends AbstractCommand implements CompletableFunction
-{
-
-    protected BlueprintContainer blueprintContainer;
-    protected Converter blueprintConverter;
-    protected String actionId;
-    protected List<Completer> completers;
-    protected Map<String,Completer> optionalCompleters;
-
-    public void setBlueprintContainer(BlueprintContainer blueprintContainer) {
-        this.blueprintContainer = blueprintContainer;
-    }
-
-    public void setBlueprintConverter(Converter blueprintConverter) {
-        this.blueprintConverter = blueprintConverter;
-    }
-
-    public void setActionId(String actionId) {
-        this.actionId = actionId;
-    }
-
-    public List<Completer> getCompleters() {
-        return completers;
-    }
-
-    public void setCompleters(List<Completer> completers) {
-        this.completers = completers;
-    }
-
-    public Map<String, Completer> getOptionalCompleters() {
-        return optionalCompleters;
-    }
-
-    public void setOptionalCompleters(Map<String, Completer> optionalCompleters) {
-        this.optionalCompleters = optionalCompleters;
-    }
-
-    @Override
-    protected ActionPreparator getPreparator() throws Exception {
-        return new BlueprintActionPreparator();
-    }
-
-    protected class BlueprintActionPreparator extends DefaultActionPreparator {
-
-        @Override
-        protected Object convert(Action action, CommandSession commandSession, Object o, Type type) throws Exception {
-            GenericType t = new GenericType(type);
-            if (t.getRawClass() == String.class) {
-                return o != null ? o.toString() : null;
-            }
-            return blueprintConverter.convert(o, t);
-        }
-
-    }
-
-    public Action createNewAction() {
-        Action action = (Action) blueprintContainer.getComponentInstance(actionId);
-        if (action instanceof BlueprintContainerAware) {
-            ((BlueprintContainerAware) action).setBlueprintContainer(blueprintContainer);
-        }
-        if (action instanceof BundleContextAware) {
-            BundleContext context = (BundleContext) blueprintContainer.getComponentInstance("blueprintBundleContext");
-            ((BundleContextAware) action).setBundleContext(context);
-        }
-        return action;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/commands/GenericType.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/commands/GenericType.java
deleted file mode 100644
index faf7c18..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/commands/GenericType.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.shell.console.commands;
-
-import java.lang.reflect.Array;
-import java.lang.reflect.GenericArrayType;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-import java.lang.reflect.WildcardType;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.osgi.framework.Bundle;
-import org.osgi.service.blueprint.container.ReifiedType;
-
-public class GenericType extends ReifiedType {
-
-	private static final GenericType[] EMPTY = new GenericType[0];
-
-    private static final Map<String, Class> primitiveClasses = new HashMap<String, Class>();
-
-    static {
-        primitiveClasses.put("int", int.class);
-        primitiveClasses.put("short", short.class);
-        primitiveClasses.put("long", long.class);
-        primitiveClasses.put("byte", byte.class);
-        primitiveClasses.put("char", char.class);
-        primitiveClasses.put("float", float.class);
-        primitiveClasses.put("double", double.class);
-        primitiveClasses.put("boolean", boolean.class);
-    }
-
-    private GenericType[] parameters;
-
-	public GenericType(Type type) {
-		this(getConcreteClass(type), parametersOf(type));
-	}
-
-    public GenericType(Class clazz, GenericType... parameters) {
-        super(clazz);
-        this.parameters = parameters;
-    }
-
-    public static GenericType parse(String type, Object loader) throws ClassNotFoundException, IllegalArgumentException {
-        type = type.trim();
-        // Check if this is an array
-        if (type.endsWith("[]")) {
-            GenericType t = parse(type.substring(0, type.length() - 2), loader);
-            return new GenericType(Array.newInstance(t.getRawClass(), 0).getClass(), t);
-        }
-        // Check if this is a generic
-        int genericIndex = type.indexOf('<');
-        if (genericIndex > 0) {
-            if (!type.endsWith(">")) {
-                throw new IllegalArgumentException("Can not load type: " + type);
-            }
-            GenericType base = parse(type.substring(0, genericIndex), loader);
-            String[] params = type.substring(genericIndex + 1, type.length() - 1).split(",");
-            GenericType[] types = new GenericType[params.length];
-            for (int i = 0; i < params.length; i++) {
-                types[i] = parse(params[i], loader);
-            }
-            return new GenericType(base.getRawClass(), types);
-        }
-        // Primitive
-        if (primitiveClasses.containsKey(type)) {
-            return new GenericType(primitiveClasses.get(type));
-        }
-        // Class
-        if (loader instanceof ClassLoader) {
-            return new GenericType(((ClassLoader) loader).loadClass(type));
-        } else if (loader instanceof Bundle) {
-            return new GenericType(((Bundle) loader).loadClass(type));
-        } else {
-            throw new IllegalArgumentException("Unsupported loader: " + loader);
-        }
-    }
-
-    @Override
-    public ReifiedType getActualTypeArgument(int i) {
-        if (parameters.length == 0) {
-            return super.getActualTypeArgument(i);
-        }
-        return parameters[i];
-    }
-
-    @Override
-    public int size() {
-        return parameters.length;
-    }
-
-    @Override
-    public String toString() {
-        Class cl = getRawClass();
-        if (cl.isArray()) {
-            if (parameters.length > 0) {
-                return parameters[0].toString() + "[]";
-            } else {
-                return cl.getComponentType().getName() + "[]";
-            }
-        }
-        if (parameters.length > 0) {
-            StringBuilder sb = new StringBuilder();
-            sb.append(cl.getName());
-            sb.append("<");
-            for (int i = 0; i < parameters.length; i++) {
-                if (i > 0) {
-                    sb.append(",");
-                }
-                sb.append(parameters[i].toString());
-            }
-            sb.append(">");
-            return sb.toString();
-        }
-        return cl.getName();
-    }
-
-    static GenericType[] parametersOf(Type type ) {
-		if ( type instanceof Class ) {
-		    Class clazz = (Class) type;
-		    if (clazz.isArray()) {
-                GenericType t = new GenericType(clazz.getComponentType());
-                if (t.size() > 0) {
-		            return new GenericType[] { t };
-                } else {
-                    return EMPTY;
-                }
-		    } else {
-		        return EMPTY;
-		    }
-		}
-        if ( type instanceof ParameterizedType ) {
-            ParameterizedType pt = (ParameterizedType) type;
-            Type [] parameters = pt.getActualTypeArguments();
-            GenericType[] gts = new GenericType[parameters.length];
-            for ( int i =0; i<gts.length; i++) {
-                gts[i] = new GenericType(parameters[i]);
-            }
-            return gts;
-        }
-        if ( type instanceof GenericArrayType ) {
-            return new GenericType[] { new GenericType(((GenericArrayType) type).getGenericComponentType()) };
-        }
-        throw new IllegalStateException();
-	}
-
-	static Class<?> getConcreteClass(Type type) {
-		Type ntype = collapse(type);
-		if ( ntype instanceof Class )
-			return (Class<?>) ntype;
-
-		if ( ntype instanceof ParameterizedType )
-			return getConcreteClass(collapse(((ParameterizedType)ntype).getRawType()));
-
-		throw new RuntimeException("Unknown type " + type );
-	}
-
-	static Type collapse(Type target) {
-		if (target instanceof Class || target instanceof ParameterizedType ) {
-			return target;
-		} else if (target instanceof TypeVariable) {
-			return collapse(((TypeVariable<?>) target).getBounds()[0]);
-		} else if (target instanceof GenericArrayType) {
-			Type t = collapse(((GenericArrayType) target)
-					.getGenericComponentType());
-			while ( t instanceof ParameterizedType )
-				t = collapse(((ParameterizedType)t).getRawType());
-			return Array.newInstance((Class<?>)t, 0).getClass();
-		} else if (target instanceof WildcardType) {
-			WildcardType wct = (WildcardType) target;
-			if (wct.getLowerBounds().length == 0)
-				return collapse(wct.getUpperBounds()[0]);
-			else
-				return collapse(wct.getLowerBounds()[0]);
-		}
-		throw new RuntimeException("Huh? " + target);
-	}
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/commands/NamespaceHandler.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/commands/NamespaceHandler.java
deleted file mode 100644
index 662392a..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/commands/NamespaceHandler.java
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console.commands;
-
-import java.net.URL;
-import java.util.Arrays;
-import java.util.List;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.apache.felix.service.command.Function;
-import org.osgi.service.blueprint.reflect.*;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import org.apache.aries.blueprint.ParserContext;
-import org.apache.aries.blueprint.mutable.MutableBeanMetadata;
-import org.apache.aries.blueprint.mutable.MutableIdRefMetadata;
-import org.apache.aries.blueprint.mutable.MutableServiceMetadata;
-import org.apache.aries.blueprint.mutable.MutableValueMetadata;
-import org.apache.aries.blueprint.mutable.MutableRefMetadata;
-import org.apache.aries.blueprint.mutable.MutableCollectionMetadata;
-import org.apache.karaf.shell.console.CompletableFunction;
-import org.osgi.service.blueprint.container.ComponentDefinitionException;
-
-
-public class NamespaceHandler implements org.apache.aries.blueprint.NamespaceHandler {
-
-    public static final String ID = "id";
-    public static final String ACTION = "action";
-    public static final String ACTION_ID = "actionId";
-    public static final String COMMAND_BUNDLE = "command-bundle";
-    public static final String NAME = "name";
-    public static final String COMMAND = "command";
-    public static final String COMPLETERS = "completers";
-    public static final String OPTIONAL_COMPLETERS = "optional-completers";
-    public static final String OPTIONAL_COMPLETERS_PROPERTY = "optionalCompleters";
-    public static final String BEAN = "bean";
-    public static final String REF = "ref";
-    public static final String NULL = "null";
-    public static final String MAP = "map";
-    public static final String BLUEPRINT_CONTAINER = "blueprintContainer";
-    public static final String BLUEPRINT_CONVERTER = "blueprintConverter";
-
-    public static final String SHELL_NAMESPACE_1_0_0 = "http://karaf.apache.org/xmlns/shell/v1.0.0";
-    public static final String SHELL_NAMESPACE_1_1_0 = "http://karaf.apache.org/xmlns/shell/v1.1.0";
-
-    private int nameCounter = 0;
-
-    public URL getSchemaLocation(String namespace) {
-        if(SHELL_NAMESPACE_1_0_0.equals(namespace)) {
-            return getClass().getResource("karaf-shell-1.0.0.xsd");
-        } else if(SHELL_NAMESPACE_1_1_0.equals(namespace)) {
-            return getClass().getResource("karaf-shell-1.1.0.xsd");
-        }
-        return getClass().getResource("karaf-shell-1.1.0.xsd");
-    }
-
-	public Set<Class> getManagedClasses() {
-		return new HashSet<Class>(Arrays.asList(
-			BlueprintCommand.class
-		));
-	}
-
-    public ComponentMetadata decorate(Node node, ComponentMetadata component, ParserContext context) {
-        throw new ComponentDefinitionException("Bad xml syntax: node decoration is not supported");
-    }
-
-    public Metadata parse(Element element, ParserContext context) {
-        if (nodeNameEquals(element, COMMAND_BUNDLE)) {
-            NodeList children = element.getChildNodes();
-            for (int i = 0; i < children.getLength(); i++) {
-                Node child  = children.item(i);
-                if (child instanceof Element) {
-                    Element childElement = (Element) child;
-                    parseChildElement(childElement, context);
-                }
-            }
-            return null;
-        } else {
-            throw new IllegalStateException("Unexpected element " + element.getNodeName());
-        }
-    }
-
-    private void parseChildElement(Element element, ParserContext context) {
-        if (nodeNameEquals(element, COMMAND)) {
-            parseCommand(element, context);
-        }
-    }
-
-    private void parseCommand(Element element, ParserContext context) {
-        MutableBeanMetadata command = context.createMetadata(MutableBeanMetadata.class);
-        command.setRuntimeClass(BlueprintCommand.class);
-        command.addProperty(BLUEPRINT_CONTAINER, createRef(context, BLUEPRINT_CONTAINER));
-        command.addProperty(BLUEPRINT_CONVERTER, createRef(context, BLUEPRINT_CONVERTER));
-
-        String location = element.getAttribute(NAME);
-        location = location.replace('/', ':');
-        String scope;
-        String function;
-        if (location.lastIndexOf(':') >= 0) {
-            scope = location.substring(0, location.lastIndexOf(':'));
-            function = location.substring(location.lastIndexOf(':') + 1);
-        } else {
-            scope = "";
-            function = location;
-        }
-
-        NodeList children = element.getChildNodes();
-        for (int i = 0; i < children.getLength(); i++) {
-            Node child  = children.item(i);
-            if (child instanceof Element) {
-                Element childElement = (Element) child;
-                if (nodeNameEquals(childElement, ACTION)) {
-                    MutableBeanMetadata action = parseAction(context, command, childElement);
-                    action.setId(getName());
-                    context.getComponentDefinitionRegistry().registerComponentDefinition(action);
-                    command.addProperty(ACTION_ID, createIdRef(context, action.getId()));
-                } else if (nodeNameEquals(childElement, COMPLETERS)) {
-                    command.addProperty(COMPLETERS, parseCompleters(context, command, childElement));
-                } else if (nodeNameEquals(childElement, OPTIONAL_COMPLETERS)) {
-                    command.addProperty(OPTIONAL_COMPLETERS_PROPERTY, parseOptionalCompleters(context, command, childElement));
-                }
-                else {
-                    throw new ComponentDefinitionException("Bad xml syntax: unknown element '" + childElement.getNodeName() + "'");
-                }
-            }
-        }
-
-        MutableServiceMetadata commandService = context.createMetadata(MutableServiceMetadata.class);
-        commandService.setActivation(MutableServiceMetadata.ACTIVATION_LAZY);
-        commandService.setId(getName());
-        //commandService.setAutoExport(ServiceMetadata.AUTO_EXPORT_ALL_CLASSES);
-        commandService.addInterface(CompletableFunction.class.getName());
-        commandService.addInterface(Function.class.getName());
-        commandService.setServiceComponent(command);
-        commandService.addServiceProperty(createStringValue(context, "osgi.command.scope"),
-                                          createStringValue(context, scope));
-        commandService.addServiceProperty(createStringValue(context, "osgi.command.function"),
-                                          createStringValue(context, function));
-        context.getComponentDefinitionRegistry().registerComponentDefinition(commandService);
-    }
-
-    private MutableBeanMetadata parseAction(ParserContext context, ComponentMetadata enclosingComponent, Element element) {
-        MutableBeanMetadata action = context.createMetadata(MutableBeanMetadata.class);
-        action.setActivation(MutableBeanMetadata.ACTIVATION_LAZY);
-        action.setScope(MutableBeanMetadata.SCOPE_PROTOTYPE);
-        action.setClassName(element.getAttribute("class"));
-        NodeList children = element.getChildNodes();
-        for (int i = 0; i < children.getLength(); i++) {
-            Node child  = children.item(i);
-            if (child instanceof Element) {
-                Element childElement = (Element) child;
-                if (nodeNameEquals(childElement, "argument")) {
-                    action.addArgument(context.parseElement(BeanArgument.class, enclosingComponent, childElement));
-                } else if (nodeNameEquals(childElement, "property")) {
-                    action.addProperty(context.parseElement(BeanProperty.class, enclosingComponent, childElement));
-                }
-            }
-        }
-        return action;
-    }
-
-    private Metadata parseOptionalCompleters(ParserContext context, ComponentMetadata enclosingComponent, Element element) {
-        Metadata metadata = context.parseElement(MapMetadata.class, context.getEnclosingComponent(), (Element) element);
-        return metadata;
-    }
-
-    private Metadata parseCompleters(ParserContext context, ComponentMetadata enclosingComponent, Element element) {
-        MutableCollectionMetadata collection = context.createMetadata(MutableCollectionMetadata.class);
-        collection.setCollectionClass(List.class);
-        NodeList children = element.getChildNodes();
-        for (int i = 0; i < children.getLength(); i++) {
-            Node child = children.item(i);
-            if (child instanceof Element) {
-                Metadata metadata;
-                if (nodeNameEquals(child, REF)) {
-                    metadata = context.parseElement(RefMetadata.class, context.getEnclosingComponent(), (Element) child);
-                } else if (nodeNameEquals(child, NULL)) {
-                    metadata = context.parseElement(NullMetadata.class, context.getEnclosingComponent(), (Element) child);
-                } else if (nodeNameEquals(child, BEAN)) {
-                    metadata = context.parseElement(BeanMetadata.class, enclosingComponent, (Element) child);
-                } else {
-                    throw new IllegalStateException("Unexpected element " + child.getNodeName());
-                }
-                collection.addValue(metadata);
-            }
-        }
-        return collection;
-    }
-
-    private ValueMetadata createStringValue(ParserContext context, String str) {
-        MutableValueMetadata value = context.createMetadata(MutableValueMetadata.class);
-        value.setStringValue(str);
-        return value;
-    }
-
-    private RefMetadata createRef(ParserContext context, String id) {
-        MutableRefMetadata idref = context.createMetadata(MutableRefMetadata.class);
-        idref.setComponentId(id);
-        return idref;
-    }
-
-    private IdRefMetadata createIdRef(ParserContext context, String id) {
-        MutableIdRefMetadata idref = context.createMetadata(MutableIdRefMetadata.class);
-        idref.setComponentId(id);
-        return idref;
-    }
-
-    public synchronized String getName() {
-        return "shell-" + ++nameCounter;
-    }
-
-    private static boolean nodeNameEquals(Node node, String name) {
-        return (name.equals(node.getNodeName()) || name.equals(node.getLocalName()));
-    }
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/AggregateCompleter.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/AggregateCompleter.java
deleted file mode 100644
index 1037bfc..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/AggregateCompleter.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.karaf.shell.console.completer;
-
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Collection;
-
-import org.apache.karaf.shell.console.Completer;
-
-/**
- * Completer which contains multipule completers and aggregates them together.
- */
-public class AggregateCompleter implements Completer
-{
-    private final Collection<Completer> completers;
-
-    public AggregateCompleter(final Collection<Completer> completers) {
-        assert completers != null;
-        this.completers = completers;
-    }
-
-    public int complete(final String buffer, final int cursor, final List candidates) {
-        // buffer could be null
-        assert candidates != null;
-
-        List<Completion> completions = new ArrayList<Completion>(completers.size());
-
-        // Run each completer, saving its completion results
-        int max = -1;
-        for (Completer completer : completers) {
-            Completion completion = new Completion(candidates);
-            completion.complete(completer, buffer, cursor);
-
-            // Compute the max cursor position
-            max = Math.max(max, completion.cursor);
-
-            completions.add(completion);
-        }
-
-        // Append candiates from completions which have the same cursor position as max
-        for (Completion completion : completions) {
-            if (completion.cursor == max) {
-                // noinspection unchecked
-                candidates.addAll(completion.candidates);
-            }
-        }
-
-        return max;
-    }
-
-    private class Completion
-    {
-        public final List<String> candidates;
-
-        public int cursor;
-
-        public Completion(final List candidates) {
-            assert candidates != null;
-
-            // noinspection unchecked
-            this.candidates = new LinkedList<String>(candidates);
-        }
-
-        public void complete(final Completer completer, final String buffer, final int cursor) {
-            assert completer != null;
-
-            this.cursor = completer.complete(buffer, cursor, candidates);
-        }
-    }
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/ArgumentCompleter.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/ArgumentCompleter.java
deleted file mode 100644
index 6f1aee6..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/ArgumentCompleter.java
+++ /dev/null
@@ -1,453 +0,0 @@
-/*
- * 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.
- */
-/*
- * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved.
- *
- * This software is distributable under the BSD license. See the terms of the
- * BSD license in the documentation provided with this software.
- */
-package org.apache.karaf.shell.console.completer;
-
-import java.io.File;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.felix.gogo.commands.Action;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.CompleterValues;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.gogo.commands.basic.AbstractCommand;
-import org.apache.felix.gogo.commands.basic.DefaultActionPreparator;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.karaf.shell.console.CompletableFunction;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.NameScoping;
-import org.apache.karaf.shell.console.jline.CommandSessionHolder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ArgumentCompleter implements Completer {
-    private static final Logger LOGGER = LoggerFactory.getLogger(ArgumentCompleter.class);
-
-    public static final String ARGUMENTS_LIST = "ARGUMENTS_LIST";
-
-    final Completer commandCompleter;
-    final Completer optionsCompleter;
-    final List<Completer> argsCompleters;
-    final Map<String, Completer> optionalCompleters;
-    final AbstractCommand function;
-    final Map<Option, Field> fields = new HashMap<Option, Field>();
-    final Map<String, Option> options = new HashMap<String, Option>();
-    final Map<Integer, Field> arguments = new HashMap<Integer, Field>();
-    boolean strict = true;
-
-    public ArgumentCompleter(CommandSession session, AbstractCommand function, String command) {
-        this.function = function;
-        // Command name completer
-        commandCompleter = new StringsCompleter(getNames(session, command));
-        // Build options completer
-        for (Class type = function.getActionClass(); type != null; type = type.getSuperclass()) {
-            for (Field field : type.getDeclaredFields()) {
-                Option option = field.getAnnotation(Option.class);
-                if (option != null) {
-                    fields.put(option, field);
-                    options.put(option.name(), option);
-                    String[] aliases = option.aliases();
-                    if (aliases != null) {
-                        for (String alias : aliases) {
-                            options.put(alias, option);
-                        }
-                    }
-                }
-                Argument argument = field.getAnnotation(Argument.class);
-                if (argument != null) {
-                    Integer key = argument.index();
-                    if (arguments.containsKey(key)) {
-                        LOGGER.warn("Duplicate @Argument annotations on class " + type.getName() + " for index: " + key + " see: " + field);
-                    } else {
-                        arguments.put(key, field);
-                    }
-                }
-            }
-        }
-        options.put(DefaultActionPreparator.HELP.name(), DefaultActionPreparator.HELP);
-        optionsCompleter = new StringsCompleter(options.keySet());
-        // Build arguments completers
-        argsCompleters = new ArrayList<Completer>();
-        optionalCompleters = new HashMap<String, Completer>();
-
-        if (function instanceof CompletableFunction) {
-            try {
-                Map completers = ((CompletableFunction) function).getOptionalCompleters();
-                if (completers != null) {
-                    optionalCompleters.putAll(completers);
-                }
-            } catch (AbstractMethodError err) {
-                // Allow old commands to not break the completers
-            }
-            List<Completer> fcl = ((CompletableFunction) function).getCompleters();
-            if (fcl != null) {
-                for (Completer c : fcl) {
-                    argsCompleters.add(c == null ? NullCompleter.INSTANCE : c);
-                }
-            } else {
-                argsCompleters.add(NullCompleter.INSTANCE);
-            }
-        } else {
-            final Map<Integer, Method> methods = new HashMap<Integer, Method>();
-            for (Class type = function.getActionClass(); type != null; type = type.getSuperclass()) {
-                for (Method method : type.getDeclaredMethods()) {
-                    CompleterValues completerMethod = method.getAnnotation(CompleterValues.class);
-                    if (completerMethod != null) {
-                        int index = completerMethod.index();
-                        Integer key = index;
-                        if (index >= arguments.size() || index < 0) {
-                            LOGGER.warn("Index out of range on @CompleterValues on class " + type.getName() + " for index: " + key + " see: " + method);
-                        }
-                        if (methods.containsKey(key)) {
-                            LOGGER.warn("Duplicate @CompleterMethod annotations on class " + type.getName() + " for index: " + key + " see: " + method);
-                        } else {
-                            methods.put(key, method);
-                        }
-                    }
-                }
-            }
-            for (int i = 0, size = arguments.size(); i < size; i++) {
-                Completer argCompleter = NullCompleter.INSTANCE;
-                Method method = methods.get(i);
-                if (method != null) {
-                    // lets invoke the method
-                    Action action = function.createNewAction();
-                    try {
-                        Object value = method.invoke(action);
-                        if (value instanceof String[]) {
-                            argCompleter = new StringsCompleter((String[]) value);
-                        } else if (value instanceof Collection) {
-                            argCompleter = new StringsCompleter((Collection<String>) value);
-                        } else {
-                            LOGGER.warn("Could not use value " + value + " as set of completions!");
-                        }
-                    } catch (IllegalAccessException e) {
-                        LOGGER.warn("Could not invoke @CompleterMethod on " + function + ". " + e, e);
-                    } catch (InvocationTargetException e) {
-                        Throwable target = e.getTargetException();
-                        if (target == null) {
-                            target = e;
-                        }
-                        LOGGER.warn("Could not invoke @CompleterMethod on " + function + ". " + target, target);
-                    } finally {
-                        try {
-                            function.releaseAction(action);
-                        } catch (Exception e) {
-                            LOGGER.warn("Failed to release action: " + action + ". " + e, e);
-                        }
-                    }
-                } else {
-                    Field field = arguments.get(i);
-                    Class<?> type = field.getType();
-                    if (type.isAssignableFrom(File.class)) {
-                        argCompleter = new FileCompleter(session);
-                    } else if (type.isAssignableFrom(Boolean.class) || type.isAssignableFrom(boolean.class)) {
-                        argCompleter = new StringsCompleter(new String[] {"false", "true"}, false);
-                    } else if (type.isAssignableFrom(Enum.class)) {
-                        Set<String> values = new HashSet<String>();
-                        for (Object o : EnumSet.allOf((Class<Enum>) type)) {
-                            values.add(o.toString());
-                        }
-                        argCompleter = new StringsCompleter(values, false);
-                    } else {
-                        // TODO any other completers we can add?
-                    }
-                }
-                argsCompleters.add(argCompleter);
-            }
-        }
-    }
-
-    private String[] getNames(CommandSession session, String scopedCommand) {
-        String command = NameScoping.getCommandNameWithoutGlobalPrefix(session, scopedCommand);
-        String[] s = command.split(":");
-        if (s.length == 1) {
-            return s;
-        } else {
-            return new String[] { command, s[1] };
-        }
-    }
-
-    /**
-     *  If true, a completion at argument index N will only succeed
-     *  if all the completions from 0-(N-1) also succeed.
-     */
-    public void setStrict(final boolean strict) {
-        this.strict = strict;
-    }
-
-    /**
-     *  Returns whether a completion at argument index N will succees
-     *  if all the completions from arguments 0-(N-1) also succeed.
-     */
-    public boolean getStrict() {
-        return this.strict;
-    }
-
-    public int complete(final String buffer, final int cursor,
-                        final List<String> candidates) {
-        ArgumentList list = delimit(buffer, cursor);
-        int argpos = list.getArgumentPosition();
-        int argIndex = list.getCursorArgumentIndex();
-
-        //Store the argument list so that it can be used by completers.
-        CommandSession commandSession = CommandSessionHolder.getSession();
-        if(commandSession != null) {
-            commandSession.put(ARGUMENTS_LIST,list);
-        }
-
-        Completer comp = null;
-        String[] args = list.getArguments();
-        int index = 0;
-        // First argument is command name
-        if (index < argIndex) {
-            // Verify command name
-            if (!verifyCompleter(commandCompleter, args[index])) {
-                return -1;
-            }
-            index++;
-        } else {
-            comp = commandCompleter;
-        }
-        // Now, check options
-        if (comp == null) {
-            while (index < argIndex && args[index].startsWith("-")) {
-                if (!verifyCompleter(optionsCompleter, args[index])) {
-                    return -1;
-                }
-                Option option = options.get(args[index]);
-                if (option == null) {
-                    return -1;
-                }
-                Field field = fields.get(option);
-                if (field != null && field.getType() != boolean.class && field.getType() != Boolean.class) {
-                    if (++index == argIndex) {
-                        comp = NullCompleter.INSTANCE;
-                    }
-                }
-                index++;
-            }
-            if (comp == null && index >= argIndex && index < args.length && args[index].startsWith("-")) {
-                comp = optionsCompleter;
-            }
-        }
-        //Now check for if last Option has a completer
-        int lastAgurmentIndex = argIndex - 1;
-        if (lastAgurmentIndex >= 1) {
-            Option lastOption = options.get(args[lastAgurmentIndex]);
-            if (lastOption != null) {
-
-                Field lastField = fields.get(lastOption);
-                if (lastField != null && lastField.getType() != boolean.class && lastField.getType() != Boolean.class) {
-                    Option option = lastField.getAnnotation(Option.class);
-                    if (option != null) {
-                        Completer optionValueCompleter = null;
-                        String name = option.name();
-                        if (name != null) {
-                            optionValueCompleter = optionalCompleters.get(name);
-                            if (optionValueCompleter == null) {
-                                String[] aliases = option.aliases();
-                                if (aliases.length > 0) {
-                                    for (int i = 0; i < aliases.length && optionValueCompleter == null; i++) {
-                                        optionValueCompleter = optionalCompleters.get(option.aliases()[i]);
-                                    }
-                                }
-                            }
-                        }
-                        if(optionValueCompleter != null) {
-                            comp = optionValueCompleter;
-                        }
-                    }
-                }
-            }
-        }
-
-        // Check arguments
-        if (comp == null) {
-            int indexArg = 0;
-            while (index < argIndex) {
-                Completer sub = argsCompleters.get(indexArg >= argsCompleters.size() ? argsCompleters.size() - 1 : indexArg);
-                if (!verifyCompleter(sub, args[index])) {
-                    return -1;
-                }
-                index++;
-                indexArg++;
-            }
-            comp = argsCompleters.get(indexArg >= argsCompleters.size() ? argsCompleters.size() - 1 : indexArg);
-        }
-
-        int ret = comp.complete(list.getCursorArgument(), argpos, candidates);
-
-        if (ret == -1) {
-            return -1;
-        }
-
-        int pos = ret + (list.getBufferPosition() - argpos);
-
-        /**
-         *  Special case: when completing in the middle of a line, and the
-         *  area under the cursor is a delimiter, then trim any delimiters
-         *  from the candidates, since we do not need to have an extra
-         *  delimiter.
-         *
-         *  E.g., if we have a completion for "foo", and we
-         *  enter "f bar" into the buffer, and move to after the "f"
-         *  and hit TAB, we want "foo bar" instead of "foo  bar".
-         */
-
-        if ((buffer != null) && (cursor != buffer.length()) && isDelimiter(buffer, cursor)) {
-            for (int i = 0; i < candidates.size(); i++) {
-                String val = candidates.get(i);
-
-                while ((val.length() > 0)
-                    && isDelimiter(val, val.length() - 1)) {
-                    val = val.substring(0, val.length() - 1);
-                }
-
-                candidates.set(i, val);
-            }
-        }
-
-        return pos;
-    }
-
-    protected boolean verifyCompleter(Completer completer, String argument) {
-        List<String> candidates = new ArrayList<String>();
-        return completer.complete(argument, argument.length(), candidates) != -1 && !candidates.isEmpty();
-    }
-
-    public ArgumentList delimit(final String buffer, final int cursor) {
-        Parser parser = new Parser(buffer, cursor);
-        try {
-            List<List<List<String>>> program = parser.program();
-            List<String> pipe = program.get(parser.c0).get(parser.c1);
-            return new ArgumentList(pipe.toArray(new String[pipe.size()]), parser.c2, parser.c3, cursor);
-        } catch (Throwable t) {
-            return new ArgumentList(new String[] { buffer }, 0, cursor, cursor);
-        }
-    }
-
-    /**
-     *  Returns true if the specified character is a whitespace
-     *  parameter. Check to ensure that the character is not
-     *  escaped and returns true from
-     *  {@link #isDelimiterChar}.
-     *
-     *  @param  buffer the complete command buffer
-     *  @param  pos    the index of the character in the buffer
-     *  @return        true if the character should be a delimiter
-     */
-    public boolean isDelimiter(final String buffer, final int pos) {
-        return !isEscaped(buffer, pos) && isDelimiterChar(buffer, pos);
-    }
-
-    public boolean isEscaped(final String buffer, final int pos) {
-        return pos > 0 && buffer.charAt(pos) == '\\' && !isEscaped(buffer, pos - 1);
-    }
-
-    /**
-     *  The character is a delimiter if it is whitespace, and the
-     *  preceeding character is not an escape character.
-     */
-    public boolean isDelimiterChar(String buffer, int pos) {
-        return Character.isWhitespace(buffer.charAt(pos));
-    }
-
-    /**
-     *  The result of a delimited buffer.
-     */
-    public static class ArgumentList {
-        private String[] arguments;
-        private int cursorArgumentIndex;
-        private int argumentPosition;
-        private int bufferPosition;
-
-        /**
-         *  @param  arguments           the array of tokens
-         *  @param  cursorArgumentIndex the token index of the cursor
-         *  @param  argumentPosition    the position of the cursor in the
-         *                              current token
-         *  @param  bufferPosition      the position of the cursor in
-         *                              the whole buffer
-         */
-        public ArgumentList(String[] arguments, int cursorArgumentIndex,
-            int argumentPosition, int bufferPosition) {
-            this.arguments = arguments;
-            this.cursorArgumentIndex = cursorArgumentIndex;
-            this.argumentPosition = argumentPosition;
-            this.bufferPosition = bufferPosition;
-        }
-
-        public void setCursorArgumentIndex(int cursorArgumentIndex) {
-            this.cursorArgumentIndex = cursorArgumentIndex;
-        }
-
-        public int getCursorArgumentIndex() {
-            return this.cursorArgumentIndex;
-        }
-
-        public String getCursorArgument() {
-            if ((cursorArgumentIndex < 0)
-                || (cursorArgumentIndex >= arguments.length)) {
-                return null;
-            }
-
-            return arguments[cursorArgumentIndex];
-        }
-
-        public void setArgumentPosition(int argumentPosition) {
-            this.argumentPosition = argumentPosition;
-        }
-
-        public int getArgumentPosition() {
-            return this.argumentPosition;
-        }
-
-        public void setArguments(String[] arguments) {
-            this.arguments = arguments;
-        }
-
-        public String[] getArguments() {
-            return this.arguments;
-        }
-
-        public void setBufferPosition(int bufferPosition) {
-            this.bufferPosition = bufferPosition;
-        }
-
-        public int getBufferPosition() {
-            return this.bufferPosition;
-        }
-    }
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/CommandNamesCompleter.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/CommandNamesCompleter.java
deleted file mode 100644
index 75f21f2..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/CommandNamesCompleter.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console.completer;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.CopyOnWriteArraySet;
-
-import org.apache.felix.gogo.runtime.CommandSessionImpl;
-import org.apache.felix.service.command.CommandProcessor;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.jline.CommandSessionHolder;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.FrameworkUtil;
-import org.osgi.framework.ServiceEvent;
-import org.osgi.framework.ServiceListener;
-
-/**
- * Completes command names
- */
-public class CommandNamesCompleter implements Completer {
-
-    private CommandSession session;
-    private final Set<String> commands = new CopyOnWriteArraySet<String>();
-
-    public CommandNamesCompleter() {
-        this(CommandSessionHolder.getSession());
-    }
-
-    public CommandNamesCompleter(CommandSession session) {
-        this.session = session;
-
-        try {
-            new CommandTracker();
-        } catch (Throwable t) {
-            // Ignore in case we're not in OSGi
-        }
-    }
-
-
-    public int complete(String buffer, int cursor, List<String> candidates) {
-        if (session == null) {
-            session = CommandSessionHolder.getSession();
-        }
-        checkData();
-        int res = new StringsCompleter(commands).complete(buffer, cursor, candidates);
-        Collections.sort(candidates);
-        return res;
-    }
-
-    protected void checkData() {
-        if (commands.isEmpty()) {
-            Set<String> names = new HashSet<String>((Set<String>) session.get(CommandSessionImpl.COMMANDS));
-            for (String name : names) {
-                commands.add(name);
-                if (name.indexOf(':') > 0) {
-                    commands.add(name.substring(0, name.indexOf(':')));
-                }
-            }
-        }
-    }
-
-    private class CommandTracker {
-        public CommandTracker() throws Exception {
-            BundleContext context = FrameworkUtil.getBundle(getClass()).getBundleContext();
-            ServiceListener listener = new ServiceListener() {
-                public void serviceChanged(ServiceEvent event) {
-                    commands.clear();
-                }
-            };
-            context.addServiceListener(listener,
-                    String.format("(&(%s=*)(%s=*))",
-                            CommandProcessor.COMMAND_SCOPE,
-                            CommandProcessor.COMMAND_FUNCTION));
-        }
-    }
-
-}
-
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/CommandsCompleter.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/CommandsCompleter.java
deleted file mode 100644
index d654a72..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/CommandsCompleter.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console.completer;
-
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.felix.gogo.commands.basic.AbstractCommand;
-import org.apache.felix.gogo.runtime.Closure;
-import org.apache.felix.gogo.runtime.CommandProxy;
-import org.apache.felix.gogo.runtime.CommandSessionImpl;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.felix.service.command.Function;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.jline.CommandSessionHolder;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Like the {@link org.apache.karaf.shell.console.completer.CommandsCompleter} but does not use OSGi but is
- * instead used from the non-OSGi {@link org.apache.karaf.shell.console.Main}
- */
-public class CommandsCompleter implements Completer {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(CommandsCompleter.class);
-
-    private CommandSession session;
-    private final List<Completer> completers = new ArrayList<Completer>();
-    private final Set<String> commands = new HashSet<String>();
-
-    public CommandsCompleter() {
-        this(CommandSessionHolder.getSession());
-    }
-
-    public CommandsCompleter(CommandSession session) {
-        this.session = session;
-    }
-
-
-    public int complete(String buffer, int cursor, List<String> candidates) {
-        if (session == null) {
-            session = CommandSessionHolder.getSession();
-        }
-        checkData();
-        int res = new AggregateCompleter(completers).complete(buffer, cursor, candidates);
-        Collections.sort(candidates);
-        return res;
-    }
-
-    protected synchronized void checkData() {
-        // Copy the set to avoid concurrent modification exceptions
-        // TODO: fix that in gogo instead
-        Set<String> names = new HashSet<String>((Set<String>) session.get(CommandSessionImpl.COMMANDS));
-        if (!names.equals(commands)) {
-            commands.clear();
-            completers.clear();
-
-            // get command aliases
-            Set<String> aliases = this.getAliases();
-            completers.add(new StringsCompleter(aliases));
-
-            // add argument completers for each command
-            for (String command : names) {
-                Function function = (Function) session.get(command);
-                function = unProxy(function);
-                if (function instanceof AbstractCommand) {
-                    try {
-                        completers.add(new ArgumentCompleter(session, (AbstractCommand) function, command));
-                    } catch (Throwable t) {
-                        LOGGER.debug("Unable to create completers for command '" + command + "'", t);
-                    }
-                }
-                commands.add(command);
-            }
-        }
-    }
-
-    /**
-     * Get the aliases defined in the console session.
-     *
-     * @return the aliases set
-     */
-    private Set<String> getAliases() {
-        Set<String> vars = (Set<String>) session.get(null);
-        Set<String> aliases = new HashSet<String>();
-        for (String var : vars) {
-            Object content = session.get(var);
-            if (content instanceof Closure)  {
-                aliases.add(var);
-            }
-        }
-        return aliases;
-    }
-
-    protected Function unProxy(Function function) {
-        try {
-            if (function instanceof CommandProxy) {
-                Field contextField = function.getClass().getDeclaredField("context");
-                Field referenceField = function.getClass().getDeclaredField("reference");
-                contextField.setAccessible(true);
-                referenceField.setAccessible(true);
-                BundleContext context = (BundleContext) contextField.get(function);
-                ServiceReference reference = (ServiceReference) referenceField.get(function);
-                Object target = context.getService(reference);
-                try {
-                    if (target instanceof Function) {
-                        function = (Function) target;
-                    }
-                } finally {
-                    context.ungetService(reference);
-                }
-            }
-        } catch (Throwable t) {
-        }
-        return function;
-    }
-
-}
-
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/FileCompleter.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/FileCompleter.java
deleted file mode 100644
index 4e86797..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/FileCompleter.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.shell.console.completer;
-
-import jline.console.completer.FileNameCompleter;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.karaf.shell.console.Completer;
-
-import java.util.List;
-
-/**
- * A completer for file names
- */
-public class FileCompleter implements Completer {
-    private final CommandSession session;
-    private FileNameCompleter completor = new FileNameCompleter();
-
-    public FileCompleter(CommandSession session) {
-        this.session = session;
-    }
-
-    public int complete(String buffer, int cursor, List candidates) {
-        return completor.complete(buffer, cursor, candidates);
-    }
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/NullCompleter.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/NullCompleter.java
deleted file mode 100644
index 13da2df..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/NullCompleter.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console.completer;
-
-import java.util.List;
-
-import org.apache.karaf.shell.console.Completer;
-
-public class NullCompleter implements Completer {
-
-    public static final NullCompleter INSTANCE = new NullCompleter();
-
-    public int complete(String buffer, int cursor, List<String> candidates) {
-        return -1;
-    }
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/Parser.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/Parser.java
deleted file mode 100644
index 8388b27..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/Parser.java
+++ /dev/null
@@ -1,473 +0,0 @@
-/*
- * 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.
- */
-// DWB14: parser loops if // comment at start of program
-// DWB15: allow program to have trailing ';'
-package org.apache.karaf.shell.console.completer;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class Parser
-{
-    int current = 0;
-    String text;
-    boolean escaped;
-    static final String SPECIAL = "<;|{[\"'$`(=";
-
-    List<List<List<String>>> program;
-    List<List<String>> statements;
-    List<String> statement;
-    int cursor;
-    int start = -1;
-    int c0;
-    int c1;
-    int c2;
-    int c3;
-
-    public Parser(String text, int cursor)
-    {
-        this.text = text;
-        this.cursor = cursor;
-    }
-
-    void ws()
-    {
-        // derek: BUGFIX: loop if comment  at beginning of input
-        //while (!eof() && Character.isWhitespace(peek())) {
-        while (!eof() && (!escaped && Character.isWhitespace(peek()) || current == 0))
-        {
-            if (current != 0 || !escaped && Character.isWhitespace(peek()))
-            {
-                current++;
-            }
-            if (peek() == '/' && current < text.length() - 2
-                && text.charAt(current + 1) == '/')
-            {
-                comment();
-            }
-            if (current == 0)
-            {
-                break;
-            }
-        }
-    }
-
-    private void comment()
-    {
-        while (!eof() && peek() != '\n' && peek() != '\r')
-        {
-            next();
-        }
-    }
-
-    boolean eof()
-    {
-        return current >= text.length();
-    }
-
-    char peek()
-    {
-        return peek(false);
-    }
-
-    char peek(boolean increment)
-    {
-        escaped = false;
-        if (eof())
-        {
-            return 0;
-        }
-
-        int last = current;
-        char c = text.charAt(current++);
-
-        if (c == '\\')
-        {
-            escaped = true;
-            if (eof())
-            {
-                throw new RuntimeException("Eof found after \\"); // derek
-            }
-
-            c = text.charAt(current++);
-
-            switch (c)
-            {
-                case 't':
-                    c = '\t';
-                    break;
-                case '\r':
-                case '\n':
-                    c = ' ';
-                    break;
-                case 'b':
-                    c = '\b';
-                    break;
-                case 'f':
-                    c = '\f';
-                    break;
-                case 'n':
-                    c = '\n';
-                    break;
-                case 'r':
-                    c = '\r';
-                    break;
-                case 'u':
-                    c = unicode();
-                    current += 4;
-                    break;
-                default:
-                    // We just take the next character literally
-                    // but have the escaped flag set, important for {},[] etc
-            }
-        }
-        if (cursor > last && cursor <= current)
-        {
-            c0 = program != null ? program.size() : 0;
-            c1 = statements != null ? statements.size() : 0;
-            c2 = statement != null ? statement.size() : 0;
-            c3 = (start >= 0) ? current - start : 0;
-        }
-        if (!increment)
-        {
-            current = last;
-        }
-        return c;
-    }
-
-    public List<List<List<String>>> program()
-    {
-        program = new ArrayList<List<List<String>>>();
-        ws();
-        if (!eof())
-        {
-            program.add(pipeline());
-            while (peek() == ';')
-            {
-                current++;
-                List<List<String>> pipeline = pipeline();
-                program.add(pipeline);
-            }
-        }
-        if (!eof())
-        {
-            throw new RuntimeException("Program has trailing text: " + context(current));
-        }
-
-        List<List<List<String>>> p = program;
-        program = null;
-        return p;
-    }
-
-    CharSequence context(int around)
-    {
-        return text.subSequence(Math.max(0, current - 20), Math.min(text.length(),
-            current + 4));
-    }
-
-    public List<List<String>> pipeline()
-    {
-        statements = new ArrayList<List<String>>();
-        statements.add(statement());
-        while (peek() == '|')
-        {
-            current++;
-            ws();
-            if (!eof())
-            {
-                statements.add(statement());
-            }
-            else
-            {
-                statements.add(new ArrayList<String>());
-                break;
-            }
-        }
-        List<List<String>> s = statements;
-        statements = null;
-        return s;
-    }
-
-    public List<String> statement()
-    {
-        statement = new ArrayList<String>();
-        statement.add(value());
-        while (!eof())
-        {
-            ws();
-            if (peek() == '|' || peek() == ';')
-            {
-                break;
-            }
-
-            if (!eof())
-            {
-                statement.add(messy());
-            }
-        }
-        List<String> s = statement;
-        statement = null;
-        return s;
-    }
-
-    public String messy()
-    {
-        start = current;
-        char c = peek();
-        if (c > 0 && SPECIAL.indexOf(c) < 0)
-        {
-            current++;
-            try {
-                while (!eof())
-                {
-                    c = peek();
-                    if (!escaped && (c == ';' || c == '|' || Character.isWhitespace(c)))
-                    {
-                        break;
-                    }
-                    next();
-                }
-                return text.substring(start, current);
-            } finally {
-                start = -1;
-            }
-        }
-        else
-        {
-            return value();
-        }
-    }
-
-    String value()
-    {
-        ws();
-
-        start = current;
-        try {
-            char c = next();
-            if (!escaped)
-            {
-                switch (c)
-                {
-                    case '{':
-                        return text.substring(start, find('}', '{'));
-                    case '(':
-                        return text.substring(start, find(')', '('));
-                    case '[':
-                        return text.substring(start, find(']', '['));
-                    case '<':
-                        return text.substring(start, find('>', '<'));
-                    case '=':
-                        return text.substring(start, current);
-                    case '"':
-                    case '\'':
-                        quote(c);
-                        break;
-                }
-            }
-
-            // Some identifier or number
-            while (!eof())
-            {
-                c = peek();
-                if (!escaped)
-                {
-                    if (Character.isWhitespace(c) || c == ';' || c == '|' || c == '=')
-                    {
-                        break;
-                    }
-                    else if (c == '{')
-                    {
-                        next();
-                        find('}', '{');
-                    }
-                    else if (c == '(')
-                    {
-                        next();
-                        find(')', '(');
-                    }
-                    else if (c == '<')
-                    {
-                        next();
-                        find('>', '<');
-                    }
-                    else if (c == '[')
-                    {
-                        next();
-                        find(']', '[');
-                    }
-                    else if (c == '\'' || c == '"')
-                    {
-                        next();
-                        quote(c);
-                        next();
-                    }
-                    else
-                    {
-                        next();
-                    }
-                }
-                else
-                {
-                    next();
-                }
-            }
-            return text.substring(start, current);
-        } finally {
-            start = -1;
-        }
-    }
-
-    boolean escaped()
-    {
-        return escaped;
-    }
-
-    char next()
-    {
-        return peek(true);
-    }
-
-    char unicode()
-    {
-        if (current + 4 > text.length())
-        {
-            throw new IllegalArgumentException("Unicode \\u escape at eof at pos ..."
-                + context(current) + "...");
-        }
-
-        String s = text.subSequence(current, current + 4).toString();
-        int n = Integer.parseInt(s, 16);
-        return (char) n;
-    }
-
-    int find(char target, char deeper)
-    {
-        int start = current;
-        int level = 1;
-
-        while (level != 0)
-        {
-            if (eof())
-            {
-                throw new RuntimeException("Eof found in the middle of a compound for '"
-                    + target + deeper + "', begins at " + context(start));
-            }
-
-            char c = next();
-            if (!escaped)
-            {
-                if (c == target)
-                {
-                    level--;
-                }
-                else
-                {
-                    if (c == deeper)
-                    {
-                        level++;
-                    }
-                    else
-                    {
-                        if (c == '"')
-                        {
-                            quote('"');
-                        }
-                        else
-                        {
-                            if (c == '\'')
-                            {
-                                quote('\'');
-                            }
-                            else
-                            {
-                                if (c == '`')
-                                {
-                                    quote('`');
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        return current;
-    }
-
-    int quote(char which)
-    {
-        while (!eof() && (peek() != which || escaped))
-        {
-            next();
-        }
-
-        return current++;
-    }
-
-    CharSequence findVar()
-    {
-        int start = current;
-        char c = peek();
-
-        if (c == '{')
-        {
-            next();
-            int end = find('}', '{');
-            return text.subSequence(start, end);
-        }
-        if (c == '(')
-        {
-            next();
-            int end = find(')', '(');
-            return text.subSequence(start, end);
-        }
-
-        if (Character.isJavaIdentifierPart(c))
-        {
-            while (c == '$')
-            {
-                c = next();
-            }
-            while (!eof() && (Character.isJavaIdentifierPart(c) || c == '.') && c != '$')
-            {
-                next();
-                c = peek();
-            }
-            return text.subSequence(start, current);
-        }
-        throw new IllegalArgumentException(
-            "Reference to variable does not match syntax of a variable: "
-                + context(start));
-    }
-
-    public String toString()
-    {
-        return "..." + context(current) + "...";
-    }
-
-    public String unescape()
-    {
-        StringBuilder sb = new StringBuilder();
-        while (!eof())
-        {
-            sb.append(next());
-        }
-        return sb.toString();
-    }
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/StringsCompleter.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/StringsCompleter.java
deleted file mode 100644
index fc11d04..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/StringsCompleter.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console.completer;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-import org.apache.karaf.shell.console.Completer;
-
-/**
- * Completer for a set of strings.
- */
-public class StringsCompleter
-    implements Completer
-{
-    private final SortedSet<String> strings = new TreeSet<String>();
-    private final boolean caseSensitive;
-
-    public StringsCompleter() {
-        this(true);
-    }
-
-
-    public StringsCompleter(final boolean caseSensitive) {
-        this.caseSensitive = caseSensitive;
-    }
-
-    public StringsCompleter(final Collection<String> strings) {
-        this();
-        assert strings != null;
-        getStrings().addAll(strings);
-    }
-
-    public StringsCompleter(final String[] strings, boolean caseSensitive) {
-        this(Arrays.asList(strings), caseSensitive);
-    }
-
-    public StringsCompleter(final Collection<String> strings, boolean caseSensitive) {
-        this(caseSensitive);
-        assert strings != null;
-        getStrings().addAll(strings);
-    }
-
-    public StringsCompleter(final String[] strings) {
-        this(Arrays.asList(strings));
-    }
-
-    public SortedSet<String> getStrings() {
-        return strings;
-    }
-
-    public int complete(String buffer, final int cursor, final List candidates) {
-        // buffer could be null
-        assert candidates != null;
-
-        if (buffer == null) {
-            buffer = "";
-        }
-        if (!caseSensitive) {
-            buffer = buffer.toLowerCase();
-        }
-
-        // KARAF-421, use getStrings() instead strings field.
-        SortedSet<String> matches = getStrings().tailSet(buffer);
-
-        for (String match : matches) {
-            String s = caseSensitive ? match : match.toLowerCase();
-            if (!s.startsWith(buffer)) {
-                break;
-            }
-
-            // noinspection unchecked
-            candidates.add(match);
-        }
-
-        if (candidates.size() == 1) {
-            // noinspection unchecked
-            candidates.set(0, candidates.get(0) + " ");
-        }
-
-        return candidates.isEmpty() ? -1 : 0;
-    }
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/BrandingHelpProvider.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/BrandingHelpProvider.java
deleted file mode 100644
index 66217a1..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/BrandingHelpProvider.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.shell.console.help;
-
-import java.io.ByteArrayOutputStream;
-import java.io.PrintStream;
-import java.util.Properties;
-
-import jline.Terminal;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.karaf.shell.console.HelpProvider;
-import org.apache.karaf.shell.console.util.Branding;
-
-import static org.apache.felix.gogo.commands.basic.DefaultActionPreparator.printFormatted;
-
-public class BrandingHelpProvider implements HelpProvider {
-
-    private Properties branding;
-
-    public BrandingHelpProvider() {
-        branding = Branding.loadBrandingProperties();
-    }
-
-    public String getHelp(CommandSession session, String path) {
-        if (path.indexOf('|') > 0) {
-            if (path.startsWith("branding|")) {
-                path = path.substring("branding|".length());
-            } else {
-                return null;
-            }
-        }
-        String str = branding.getProperty("help." + path);
-        if (str != null) {
-            Terminal term = (Terminal) session.get(".jline.terminal");
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            printFormatted("", str, term != null ? term.getWidth() : 80, new PrintStream(baos, true));
-            str = baos.toString();
-        }
-        return str;
-    }
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/CommandListHelpProvider.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/CommandListHelpProvider.java
deleted file mode 100644
index 2532fbf..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/CommandListHelpProvider.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.shell.console.help;
-
-import java.io.ByteArrayOutputStream;
-import java.io.PrintStream;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.Map;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-import jline.Terminal;
-import org.apache.felix.gogo.commands.Action;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.basic.AbstractCommand;
-import org.apache.felix.gogo.commands.basic.DefaultActionPreparator;
-import org.apache.felix.gogo.runtime.CommandSessionImpl;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.felix.service.command.Function;
-import org.apache.karaf.shell.console.HelpProvider;
-import org.apache.karaf.shell.console.NameScoping;
-import org.fusesource.jansi.Ansi;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-
-public class CommandListHelpProvider implements HelpProvider {
-
-    public String getHelp(CommandSession session, String path) {
-        if (path.indexOf('|') > 0) {
-            if (path.startsWith("command-list|")) {
-                path = path.substring("command-list|".length());
-            } else {
-                return null;
-            }
-        }
-        SortedMap<String, String> commands = getCommandDescriptions(session, path);
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        printMethodList(session, new PrintStream(baos), commands);
-        return baos.toString();
-    }
-
-    private SortedMap<String, String> getCommandDescriptions(CommandSession session, String command) {
-        Set<String> names = (Set<String>) session.get(CommandSessionImpl.COMMANDS);
-        SortedMap<String,String> commands = new TreeMap<String,String>();
-        for (String name : names) {
-            if (command != null && !name.startsWith(command)) {
-                continue;
-            }
-            String description = null;
-            Function function = (Function) session.get(name);
-            function = unProxy(function);
-            if (function instanceof AbstractCommand) {
-                try {
-                    Method mth = AbstractCommand.class.getDeclaredMethod("createNewAction");
-                    mth.setAccessible(true);
-                    Action action = (Action) mth.invoke(function);
-                    Class<? extends Action> clazz = action.getClass();
-                    Command ann = clazz.getAnnotation(Command.class);
-                    description = ann.description();
-                } catch (Throwable e) {
-                }
-                if (name.startsWith("*:")) {
-                    name = name.substring(2);
-                }
-                commands.put(name, description);
-            }
-        }
-        return commands;
-    }
-
-    protected void printMethodList(CommandSession session, PrintStream out, SortedMap<String, String> commands) {
-        Terminal term = (Terminal) session.get(".jline.terminal");
-        out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("COMMANDS").a(Ansi.Attribute.RESET));
-        int max = 0;
-        for (Map.Entry<String,String> entry : commands.entrySet()) {
-            String key = NameScoping.getCommandNameWithoutGlobalPrefix(session, entry.getKey());
-            max = Math.max(max,key.length());
-        }
-        int margin = 4;
-        String prefix1 = "        ";
-        if (term != null && term.getWidth() - max - prefix1.length() - margin > 50) {
-            String prefix2 = prefix1;
-            for (int i = 0; i < max + margin; i++) {
-                prefix2 += " ";
-            }
-            for (Map.Entry<String,String> entry : commands.entrySet()) {
-                out.print(prefix1);
-                String key = NameScoping.getCommandNameWithoutGlobalPrefix(session, entry.getKey());
-                out.print(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a(key).a(Ansi.Attribute.RESET));
-                for (int i = 0; i < max - key.length() + margin; i++) {
-                    out.print(' ');
-                }
-                if (entry.getValue() != null) {
-                    DefaultActionPreparator.printFormatted(prefix2, entry.getValue(), term.getWidth(), out, false);
-                }
-            }
-        } else {
-            String prefix2 = prefix1 + prefix1;
-            for (Map.Entry<String,String> entry : commands.entrySet()) {
-                out.print(prefix1);
-                String key = NameScoping.getCommandNameWithoutGlobalPrefix(session, entry.getKey());
-                out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a(key).a(Ansi.Attribute.RESET));
-                if (entry.getValue() != null) {
-                    DefaultActionPreparator.printFormatted(prefix2, entry.getValue(),
-                            term != null ? term.getWidth() : 80, out);
-                }
-            }
-        }
-        out.println();
-    }
-    
-    protected Function unProxy(Function function) {
-        try {
-            if (function.getClass().getName().contains("CommandProxy")) {
-                Field contextField = function.getClass().getDeclaredField("context");
-                Field referenceField = function.getClass().getDeclaredField("reference");
-                contextField.setAccessible(true);
-                referenceField.setAccessible(true);
-                BundleContext context = (BundleContext) contextField.get(function);
-                ServiceReference reference = (ServiceReference) referenceField.get(function);
-                Object target = context.getService(reference);
-                try {
-                    if (target instanceof Function) {
-                        function = (Function) target;
-                    }
-                } finally {
-                    context.ungetService(reference);
-                }
-            }
-        } catch (Throwable t) {
-        }
-        return function;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/HelpAction.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/HelpAction.java
deleted file mode 100644
index 40fe7e9..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/HelpAction.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.shell.console.help;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.shell.console.AbstractAction;
-
-/**
- * Displays help on the available commands
- */
-@Command(scope = "*", name = "help", description = "Displays this help or help about a command")
-public class HelpAction extends AbstractAction {
-
-    @Argument(name = "command", required = false, description = "The command to get help for")
-    private String command;
-    
-    private HelpSystem provider;
-
-    public void setProvider(HelpSystem provider) {
-        this.provider = provider;
-    }
-
-    public Object doExecute() throws Exception {
-        String help = provider.getHelp(session, command);
-        if (help != null) {
-            System.out.println(help);
-        }
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/HelpSystem.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/HelpSystem.java
deleted file mode 100644
index dab2e83..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/HelpSystem.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.shell.console.help;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.felix.service.command.CommandSession;
-import org.apache.karaf.shell.console.HelpProvider;
-import org.apache.karaf.util.InterpolationHelper;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.util.tracker.ServiceTracker;
-
-public class HelpSystem implements HelpProvider {
-
-    private BundleContext context;
-    private ServiceTracker tracker;
-
-    public void setContext(BundleContext context) {
-        this.context = context;
-    }
-
-    public void start() {
-        tracker = new ServiceTracker(context, HelpProvider.class.getName(), null);
-        tracker.open();
-    }
-    
-    public void stop() {
-        tracker.close();
-    }
-    
-    public synchronized List<HelpProvider> getProviders() {
-        ServiceReference[] refs = tracker.getServiceReferences();
-        Arrays.sort(refs);
-        List<HelpProvider> providers = new ArrayList<HelpProvider>();
-        for (int i = refs.length - 1; i >= 0; i--) {
-            providers.add((HelpProvider) tracker.getService(refs[i]));
-        }
-        return providers;
-    }
-    
-    public String getHelp(final CommandSession session, String path) {
-        if (path == null) {
-            path = "%root%";
-        }
-        Map<String,String> props = new HashMap<String,String>();
-        props.put("data", "${" + path + "}");
-        final List<HelpProvider> providers = getProviders();
-        InterpolationHelper.performSubstitution(props, new InterpolationHelper.SubstitutionCallback() {
-            public String getValue(final String key) {
-                for (HelpProvider hp : providers) {
-                    String help = hp.getHelp(session, key);
-                    if (help != null) {
-                        if (help.endsWith("\n")) {
-                            help = help.substring(0, help.length()  -1);
-                        }
-                        return help;
-                    }
-                }
-                return null;
-            }
-        });
-        return props.get("data");
-    }
-    
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/SimpleHelpProvider.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/SimpleHelpProvider.java
deleted file mode 100644
index d7d37f6..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/SimpleHelpProvider.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.shell.console.help;
-
-import java.io.ByteArrayOutputStream;
-import java.io.PrintStream;
-import java.util.Map;
-
-import jline.Terminal;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.karaf.shell.console.HelpProvider;
-
-import static org.apache.felix.gogo.commands.basic.DefaultActionPreparator.printFormatted;
-
-public class SimpleHelpProvider implements HelpProvider {
-    
-    private Map<String, String> help;
-
-    public Map<String, String> getHelp() {
-        return help;
-    }
-
-    public void setHelp(Map<String, String> help) {
-        this.help = help;
-    }
-
-    public String getHelp(CommandSession session, String path) {
-        if (path.indexOf('|') > 0) {
-            if (path.startsWith("simple|")) {
-                path = path.substring("simple|".length());
-            } else {
-                return null;
-            }
-        }
-        String str = help.get(path);
-        if (str != null) {
-            Terminal term = (Terminal) session.get(".jline.terminal");
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            printFormatted("", str, term != null ? term.getWidth() : 80, new PrintStream(baos, true));
-            str = baos.toString();
-        }
-        return str;
-    }
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/SingleCommandHelpProvider.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/SingleCommandHelpProvider.java
deleted file mode 100644
index f20cf81..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/SingleCommandHelpProvider.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.shell.console.help;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.PrintStream;
-import java.util.Set;
-
-import org.apache.felix.gogo.runtime.CommandSessionImpl;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.felix.service.threadio.ThreadIO;
-import org.apache.karaf.shell.console.HelpProvider;
-
-public class SingleCommandHelpProvider implements HelpProvider {
-
-    private ThreadIO io;
-
-    public void setIo(ThreadIO io) {
-        this.io = io;
-    }
-
-    public String getHelp(CommandSession session, String path) {
-        if (path.indexOf('|') > 0) {
-            if (path.startsWith("command|")) {
-                path = path.substring("command|".length());
-            } else {
-                return null;
-            }
-        }
-        Set<String> names = (Set<String>) session.get(CommandSessionImpl.COMMANDS);
-        if (path != null && names.contains(path)) {
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            io.setStreams(new ByteArrayInputStream(new byte[0]), new PrintStream(baos, true), new PrintStream(baos, true));
-            try {
-                session.execute(path + " --help");
-            } catch (Throwable t) {
-                t.printStackTrace();
-            } finally {
-                io.close();
-            }
-            return baos.toString();
-        }
-        return null;
-    }
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/SubShellHelpProvider.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/SubShellHelpProvider.java
deleted file mode 100644
index d422edf..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/SubShellHelpProvider.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.shell.console.help;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.PrintStream;
-import java.io.Reader;
-import java.io.StringWriter;
-import java.net.URL;
-
-import jline.Terminal;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.karaf.shell.console.HelpProvider;
-import org.apache.karaf.shell.console.SubShell;
-import org.fusesource.jansi.Ansi;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.util.tracker.ServiceTracker;
-
-import static org.apache.felix.gogo.commands.basic.DefaultActionPreparator.printFormatted;
-
-public class SubShellHelpProvider implements HelpProvider {
-
-    private BundleContext context;
-    private ServiceTracker tracker;
-
-    public void setContext(BundleContext context) {
-        this.context = context;
-    }
-
-    public void start() {
-        tracker = new ServiceTracker(context, SubShell.class.getName(), null);
-        tracker.open();
-    }
-    
-    public void stop() {
-        tracker.close();
-    }
-
-    public String getHelp(CommandSession session, String path) {
-        if (path.indexOf('|') > 0) {
-            if (path.startsWith("subshell|")) {
-                path = path.substring("subshell|".length());
-            } else {
-                return null;
-            }
-        }
-        for (ServiceReference ref : tracker.getServiceReferences()) {
-            if (path.equals(ref.getProperty("name"))) {
-                ByteArrayOutputStream baos = new ByteArrayOutputStream();
-                printSubShellHelp(session, ref.getBundle(), (SubShell) tracker.getService(ref), new PrintStream(baos, true));
-                return baos.toString();
-            }
-        }
-        return null;
-    }
-
-    private void printSubShellHelp(CommandSession session, Bundle bundle, SubShell subShell, PrintStream out) {
-        Terminal term = session != null ? (Terminal) session.get(".jline.terminal") : null;
-        out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("SUBSHELL").a(Ansi.Attribute.RESET));
-        out.print("        ");
-        if (subShell.getName() != null) {
-            out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a(subShell.getName()).a(Ansi.Attribute.RESET));
-            out.println();
-        }
-        out.print("\t");
-        out.println(subShell.getDescription());
-        out.println();
-        if (subShell.getDetailedDescription() != null) {
-            out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("DETAILS").a(Ansi.Attribute.RESET));
-            String desc = loadDescription(bundle, subShell.getDetailedDescription());
-            while (desc.endsWith("\n")) {
-                desc = desc.substring(0, desc.length()  -1);
-            }
-            printFormatted("        ", desc, term != null ? term.getWidth() : 80, out);
-        }
-        out.println();
-        out.println("${command-list|" + subShell.getName() + ":}");
-    }
-
-    protected String loadDescription(Bundle bundle, String desc) {
-        if (desc.startsWith("classpath:")) {
-            URL url = bundle.getResource(desc.substring("classpath:".length()));
-            if (url == null) {
-                desc = "Unable to load description from " + desc;
-            } else {
-                InputStream is = null;
-                try {
-                    is = url.openStream();
-                    Reader r = new InputStreamReader(is);
-                    StringWriter sw = new StringWriter();
-                    int c;
-                    while ((c = r.read()) != -1) {
-                        sw.append((char) c);
-                    }
-                    desc = sw.toString();
-                } catch (IOException e) {
-                    desc = "Unable to load description from " + desc;
-                } finally {
-                    try {
-                        is.close();
-                    } catch (IOException e) {
-                        // Ignore
-                    }
-                }
-            }
-        }
-        return desc;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Activator.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Activator.java
deleted file mode 100644
index f5e2e71..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Activator.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console.jline;
-
-import java.io.InputStream;
-import java.io.PrintStream;
-
-import org.apache.felix.gogo.runtime.CommandProcessorImpl;
-import org.apache.felix.gogo.runtime.CommandSessionImpl;
-import org.apache.felix.gogo.runtime.activator.EventAdminListener;
-import org.apache.felix.service.command.CommandProcessor;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.felix.service.threadio.ThreadIO;
-import org.fusesource.jansi.AnsiConsole;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceRegistration;
-
-public class Activator implements BundleActivator {
-
-    private org.apache.felix.gogo.runtime.activator.Activator activator = new WrappedActivator();
-
-    public void start(BundleContext context) throws Exception {
-        AnsiConsole.systemInstall();
-        activator.start(context);
-    }
-
-    public void stop(BundleContext context) throws Exception {
-        activator.stop(context);
-        AnsiConsole.systemUninstall();
-    }
-
-    protected static class WrappedActivator extends org.apache.felix.gogo.runtime.activator.Activator {
-
-        @Override
-        protected ServiceRegistration newProcessor(ThreadIO tio, BundleContext context) {
-            processor = new WrappedCommandProcessor(tio);
-            try
-            {
-                processor.addListener(new EventAdminListener(context));
-            }
-            catch (NoClassDefFoundError error)
-            {
-                // Ignore the listener if EventAdmin package isn't present
-            }
-
-            // Setup the variables and commands exposed in an OSGi environment.
-            processor.addConstant(CONTEXT, context);
-            processor.addCommand("osgi", processor, "addCommand");
-            processor.addCommand("osgi", processor, "removeCommand");
-            processor.addCommand("osgi", processor, "eval");
-
-            return context.registerService(CommandProcessor.class.getName(), processor, null);
-        }
-
-    }
-
-    protected static class WrappedCommandProcessor extends CommandProcessorImpl {
-
-        public WrappedCommandProcessor(ThreadIO tio) {
-            super(tio);
-        }
-
-        @Override
-        public CommandSession createSession(InputStream in, PrintStream out, PrintStream err) {
-            CommandSessionImpl session = new WrappedCommandSession(this, in, out, err);
-            sessions.put(session, null);
-            return session;
-        }
-    }
-
-    protected static class WrappedCommandSession extends CommandSessionImpl {
-
-        public WrappedCommandSession(CommandProcessorImpl shell, InputStream in, PrintStream out, PrintStream err) {
-            super(shell, in, out, err);
-        }
-        public Object get(String name) {
-            Object val = super.get(name);
-            if (val == null) {
-                val = System.getProperty(name);
-            }
-            return val;
-        }
-
-   }
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/CommandSessionHolder.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/CommandSessionHolder.java
deleted file mode 100644
index cc2b244..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/CommandSessionHolder.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console.jline;
-
-import org.apache.felix.service.command.CommandSession;
-
-public class CommandSessionHolder {
-
-    private static final ThreadLocal<CommandSession> session = new ThreadLocal<CommandSession>();
-
-    public static CommandSession getSession() {
-        return session.get();
-    }
-
-    public static void setSession(CommandSession commandSession) {
-        session.set(commandSession);
-    }
-
-    public static void unset() {
-        session.remove();
-    }
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/CompleterAsCompletor.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/CompleterAsCompletor.java
deleted file mode 100644
index 7fd6ebb..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/CompleterAsCompletor.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console.jline;
-
-import java.util.List;
-
-public class CompleterAsCompletor implements jline.console.completer.Completer {
-
-    private final org.apache.karaf.shell.console.Completer completer;
-
-    public CompleterAsCompletor(org.apache.karaf.shell.console.Completer completer) {
-        this.completer = completer;
-    }
-
-    public int complete(String buffer, int cursor, List candidates) {
-        return completer.complete(buffer, cursor, candidates);
-    }
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Console.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Console.java
deleted file mode 100644
index 3813c85..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Console.java
+++ /dev/null
@@ -1,490 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console.jline;
-
-import java.io.CharArrayWriter;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.InterruptedIOException;
-import java.io.PrintStream;
-import java.io.Reader;
-import java.util.Map;
-import java.util.Properties;
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.BlockingQueue;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import jline.Terminal;
-import jline.UnsupportedTerminal;
-import jline.console.ConsoleReader;
-import jline.console.history.PersistentHistory;
-import org.apache.felix.gogo.commands.CommandException;
-import org.apache.felix.gogo.runtime.CommandNotFoundException;
-import org.apache.felix.gogo.runtime.Parser;
-import org.apache.felix.service.command.CommandProcessor;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.felix.service.command.Converter;
-import org.apache.karaf.shell.console.CloseShellException;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.completer.CommandsCompleter;
-import org.apache.karaf.shell.console.util.Branding;
-import org.fusesource.jansi.Ansi;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class Console implements Runnable
-{
-
-    public static final String SHELL_INIT_SCRIPT = "karaf.shell.init.script";
-    public static final String PROMPT = "PROMPT";
-    public static final String DEFAULT_PROMPT = "\u001B[1m${USER}\u001B[0m@${APPLICATION}> ";
-    public static final String PRINT_STACK_TRACES = "karaf.printStackTraces";
-    public static final String LAST_EXCEPTION = "karaf.lastException";
-    public static final String IGNORE_INTERRUPTS = "karaf.ignoreInterrupts";
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(Console.class);
-
-    protected CommandSession session;
-    private ConsoleReader reader;
-    private BlockingQueue<Integer> queue;
-    private boolean interrupt;
-    private Thread pipe;
-    volatile private boolean running;
-    volatile private boolean eof;
-    private Runnable closeCallback;
-    private Terminal terminal;
-    private InputStream consoleInput;
-    private InputStream in;
-    private PrintStream out;
-    private PrintStream err;
-    private Thread thread;
-
-    public Console(CommandProcessor processor,
-                   InputStream in,
-                   PrintStream out,
-                   PrintStream err,
-                   Terminal term,
-                   String encoding,
-                   Runnable closeCallback) throws Exception
-    {
-        this.in = in;
-        this.out = out;
-        this.err = err;
-        this.queue = new ArrayBlockingQueue<Integer>(1024);
-        this.terminal = term == null ? new UnsupportedTerminal() : term;
-        this.consoleInput = new ConsoleInputStream();
-        this.session = processor.createSession(this.consoleInput, this.out, this.err);
-        this.session.put("SCOPE", "shell:osgi:*");
-        this.closeCallback = closeCallback;
-
-        reader = new ConsoleReader(null,
-                                   this.consoleInput,
-                                   this.out,
-                                   this.terminal,
-                                   encoding);
-
-        final File file = getHistoryFile();
-        try {
-            file.getParentFile().mkdirs();
-        	reader.setHistory(new KarafFileHistory(file));
-		} catch (Exception e) {
-			LOGGER.error("Can not read history from file " + file + ". Using in memory history", e);
-		}
-        session.put(".jline.reader", reader);
-        session.put(".jline.history", reader.getHistory());
-        Completer completer = createCompleter();
-        if (completer != null) {
-            reader.addCompleter(new CompleterAsCompletor(completer));
-        }
-        pipe = new Thread(new Pipe());
-        pipe.setName("gogo shell pipe thread");
-        pipe.setDaemon(true);
-    }
-
-    /**
-     * Subclasses can override to use a different history file.
-     * @return
-     */
-    protected File getHistoryFile() {
-        String defaultHistoryPath = new File(System.getProperty("user.home"), ".karaf/karaf.history").toString();
-        return new File(System.getProperty("karaf.history", defaultHistoryPath));
-    }
-
-    public CommandSession getSession() {
-        return session;
-    }
-
-    public void close(boolean closedByUser) {
-        //System.err.println("Closing");
-        if (!running) {
-            return;
-        }
-        if (reader.getHistory() instanceof PersistentHistory) {
-            try {
-                ((PersistentHistory) reader.getHistory()).flush();
-            } catch (IOException e) {
-                // ignore
-            }
-        }
-        running = false;
-        CommandSessionHolder.unset();
-        pipe.interrupt();
-        if (closedByUser && closeCallback != null) {
-            closeCallback.run();
-        }
-    }
-
-    public void run()
-    {
-        ThreadLocal<CommandSessionHolder> consoleState = new ThreadLocal<CommandSessionHolder>();
-        thread = Thread.currentThread();
-        CommandSessionHolder.setSession(session);
-        running = true;
-        pipe.start();
-        welcome();
-        setSessionProperties();
-        String scriptFileName = System.getProperty(SHELL_INIT_SCRIPT);
-        executeScript(scriptFileName);
-        while (running) {
-            try {
-                String command = readAndParseCommand();
-                if (command == null) {
-                    break;
-                }
-                Object result = session.execute(command);
-                if (result != null) {
-                    session.getConsole().println(session.format(result, Converter.INSPECT));
-                }
-            }
-            catch (InterruptedIOException e) {
-                // System.err.println("^C");
-                // TODO: interrupt current thread
-            }
-            catch (CloseShellException e) {
-                break;
-            }
-            catch (Throwable t) {
-                logException(t);
-            }
-        }
-        close(true);
-    }
-
-    private void logException(Throwable t) {
-        try {
-            if (t instanceof CommandNotFoundException) {
-                LOGGER.debug("Unknown command entered", t);
-            } else {
-                LOGGER.info("Exception caught while executing command", t);
-            }
-            session.put(LAST_EXCEPTION, t);
-            if (t instanceof CommandException) {
-                session.getConsole().println(((CommandException) t).getNiceHelp());
-            } else if (t instanceof CommandNotFoundException) {
-                String str = Ansi.ansi()
-                        .fg(Ansi.Color.RED)
-                        .a("Command not found: ")
-                        .a(Ansi.Attribute.INTENSITY_BOLD)
-                        .a(((CommandNotFoundException) t).getCommand())
-                        .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
-                        .fg(Ansi.Color.DEFAULT).toString();
-                session.getConsole().println(str);
-            }
-            if (getBoolean(PRINT_STACK_TRACES)) {
-                session.getConsole().print(Ansi.ansi().fg(Ansi.Color.RED).toString());
-                t.printStackTrace(session.getConsole());
-                session.getConsole().print(Ansi.ansi().fg(Ansi.Color.DEFAULT).toString());
-            } else if (!(t instanceof CommandException) && !(t instanceof CommandNotFoundException)) {
-                session.getConsole().print(Ansi.ansi().fg(Ansi.Color.RED).toString());
-                session.getConsole().println("Error executing command: "
-                    + (t.getMessage() != null ? t.getMessage() : t.getClass().getName()));
-                session.getConsole().print(Ansi.ansi().fg(Ansi.Color.DEFAULT).toString());
-            }
-        } catch (Exception ignore) {
-            // ignore
-        }
-    }
-
-    private String readAndParseCommand() throws IOException {
-        String command = null;
-        boolean loop = true;
-        boolean first = true;
-        while (loop) {
-            checkInterrupt();
-            String line = reader.readLine(first ? getPrompt() : "> ");
-            if (line == null)
-            {
-                break;
-            }
-            if (command == null) {
-                command = line;
-            } else {
-                command += " " + line;
-            }
-            if (reader.getHistory().size()==0) {
-                reader.getHistory().add(command);
-            } else {
-                // jline doesn't add blank lines to the history so we don't 
-                // need to replace the command in jline's console history with
-                // an indented one
-                if (command.length() > 0 && !" ".equals(command)) {
-                    reader.getHistory().replace(command);    
-                }                                
-            }
-            try {
-                new Parser(command).program();
-                loop = false;
-            } catch (Exception e) {
-                loop = true;
-                first = false;
-            }
-        }
-        return command;
-    }
-
-    private void executeScript(String scriptFileName) {
-        if (scriptFileName != null) {
-            Reader r = null;
-            try {
-                File scriptFile = new File(scriptFileName);
-                r = new InputStreamReader(new FileInputStream(scriptFile));
-                CharArrayWriter w = new CharArrayWriter();
-                int n;
-                char[] buf = new char[8192];
-                while ((n = r.read(buf)) > 0) {
-                    w.write(buf, 0, n);
-                }
-                session.execute(new String(w.toCharArray()));
-            } catch (Exception e) {
-                LOGGER.debug("Error in initialization script", e);
-                System.err.println("Error in initialization script: " + e.getMessage());
-            } finally {
-                if (r != null) {
-                    try {
-                        r.close();
-                    } catch (IOException e) {
-                        // Ignore
-                    }
-                }
-            }
-        }
-    }
-
-    protected boolean getBoolean(String name) {
-        Object s = session.get(name);
-        if (s == null) {
-            s = System.getProperty(name);
-        }
-        if (s == null) {
-            return false;
-        }
-        if (s instanceof Boolean) {
-            return (Boolean) s;
-        }
-        return Boolean.parseBoolean(s.toString());
-    }
-
-    protected void welcome() {
-        Properties props = Branding.loadBrandingProperties(terminal);
-        String welcome = props.getProperty("welcome");
-        if (welcome != null && welcome.length() > 0) {
-            session.getConsole().println(welcome);
-        }
-    }
-
-    protected void setSessionProperties() {
-        Properties props = Branding.loadBrandingProperties(terminal);
-        for (Map.Entry<Object, Object> entry : props.entrySet()) {
-            String key = (String) entry.getKey();
-            if (key.startsWith("session.")) {
-                session.put(key.substring("session.".length()), entry.getValue());
-            }
-        }
-    }
-
-    protected Completer createCompleter() {
-        return new CommandsCompleter(session);
-    }
-
-    protected String getPrompt() {
-        try {
-            String prompt;
-            try {
-                Object p = session.get(PROMPT);
-                if (p != null) {
-                    prompt = p.toString();
-                } else {
-                    Properties properties = Branding.loadBrandingProperties(terminal);
-                    if (properties.getProperty("prompt") != null) {
-                        prompt = properties.getProperty("prompt");
-                        // we put the PROMPT in ConsoleSession to avoid to read
-                        // the properties file each time.
-                        session.put(PROMPT, prompt);
-                    } else {
-                        prompt = DEFAULT_PROMPT;
-                    }
-                }
-            } catch (Throwable t) {
-                prompt = DEFAULT_PROMPT;
-            }
-            Matcher matcher = Pattern.compile("\\$\\{([^}]+)\\}").matcher(prompt);
-            while (matcher.find()) {
-                Object rep = session.get(matcher.group(1));
-                if (rep != null) {
-                    prompt = prompt.replace(matcher.group(0), rep.toString());
-                    matcher.reset(prompt);
-                }
-            }
-            return prompt;
-        } catch (Throwable t) {
-            return "$ ";
-        }
-    }
-
-    private void checkInterrupt() throws IOException {
-        if (Thread.interrupted() || interrupt) {
-            interrupt = false;
-            throw new InterruptedIOException("Keyboard interruption");
-        }
-    }
-
-    private void interrupt() {
-        interrupt = true;
-        thread.interrupt();
-    }
-
-    private class ConsoleInputStream extends InputStream
-    {
-        private int read(boolean wait) throws IOException
-        {
-            if (!running) {
-                return -1;
-            }
-            checkInterrupt();
-            if (eof && queue.isEmpty()) {
-                return -1;
-            }
-            Integer i;
-            if (wait) {
-                try {
-                    i = queue.take();
-                } catch (InterruptedException e) {
-                    throw new InterruptedIOException();
-                }
-                checkInterrupt();
-            } else {
-                i = queue.poll();
-            }
-            if (i == null) {
-                return -1;
-            }
-            return i;
-        }
-
-        @Override
-        public int read() throws IOException
-        {
-            return read(true);
-        }
-
-        @Override
-        public int read(byte b[], int off, int len) throws IOException
-        {
-            if (b == null) {
-                throw new NullPointerException();
-            } else if (off < 0 || len < 0 || len > b.length - off) {
-                throw new IndexOutOfBoundsException();
-            } else if (len == 0) {
-                return 0;
-            }
-
-            int nb = 1;
-            int i = read(true);
-            if (i < 0) {
-                return -1;
-            }
-            b[off++] = (byte) i;
-            while (nb < len) {
-                i = read(false);
-                if (i < 0) {
-                    return nb;
-                }
-                b[off++] = (byte) i;
-                nb++;
-            }
-            return nb;
-        }
-
-        @Override
-        public int available() throws IOException {
-            return queue.size();
-        }
-    }
-
-    private class Pipe implements Runnable
-    {
-        public void run()
-        {
-            try {
-                while (running)
-                {
-                    try
-                    {
-                        int c = in.read();
-                        if (c == -1)
-                        {
-                            return;
-                        }
-                        else if (c == 4 && !getBoolean(IGNORE_INTERRUPTS))
-                        {
-                            err.println("^D");
-                            return;
-                        }
-                        else if (c == 3 && !getBoolean(IGNORE_INTERRUPTS))
-                        {
-                            err.println("^C");
-                            reader.getCursorBuffer().clear();
-                            interrupt();
-                        }
-                        queue.put(c);
-                    }
-                    catch (Throwable t) {
-                        return;
-                    }
-                }
-            }
-            finally
-            {
-                eof = true;
-                try
-                {
-                    queue.put(-1);
-                }
-                catch (InterruptedException e)
-                {
-                }
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
deleted file mode 100644
index b17933e..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console.jline;
-
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.io.OutputStream;
-import java.io.PrintStream;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.security.KeyPair;
-import java.nio.charset.Charset;
-import java.security.PrivilegedExceptionAction;
-import java.util.Hashtable;
-import java.util.List;
-import javax.security.auth.Subject;
-
-import jline.Terminal;
-import org.apache.felix.service.command.CommandProcessor;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.felix.service.command.Function;
-import org.apache.karaf.jaas.boot.principal.UserPrincipal;
-import org.apache.sshd.agent.SshAgent;
-import org.apache.sshd.agent.local.AgentImpl;
-import org.fusesource.jansi.AnsiConsole;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceRegistration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ConsoleFactory {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(ConsoleFactory.class);
-
-    BundleContext bundleContext;
-    private CommandProcessor commandProcessor;
-    private TerminalFactory terminalFactory;
-    Console console;
-    private boolean start;
-    private ServiceRegistration registration;
-    private SshAgent local;
-
-    public void setBundleContext(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-
-    public synchronized void registerCommandProcessor(CommandProcessor commandProcessor) throws Exception {
-        this.commandProcessor = commandProcessor;
-        start();
-    }
-
-    public synchronized void unregisterCommandProcessor(CommandProcessor commandProcessor) throws Exception {
-        this.commandProcessor = null;
-        stop();
-    }
-
-    public void setTerminalFactory(TerminalFactory terminalFactory) {
-        this.terminalFactory = terminalFactory;
-    }
-
-    public void setStart(boolean start) {
-        this.start = start;
-    }
-
-    protected void start() throws Exception {
-        if (start) {
-            Subject subject = new Subject();
-            final String user = "karaf";
-            subject.getPrincipals().add(new UserPrincipal(user));
-            Subject.doAs(subject, new PrivilegedExceptionAction<Object>() {
-                public Object run() throws Exception {
-                    doStart(user);
-                    return null;
-                }
-            });
-        }
-    }
-
-    public static Object invokePrivateMethod(Object o, String methodName, Object[] params) throws Exception {
-        final Method methods[] = o.getClass().getDeclaredMethods();
-        for (int i = 0; i < methods.length; ++i) {
-            if (methodName.equals(methods[i].getName())) {
-                methods[i].setAccessible(true);
-                return methods[i].invoke(o, params);
-            }
-        }
-        return null;
-    }
-    
-    private static <T> T unwrapBIS(T stream) {
-        try {
-             return (T) invokePrivateMethod(stream, "getInIfOpen", null);
-        } catch (Throwable t) {
-             return stream;
-        }
-    }
-
-    protected void doStart(String user) throws Exception {
-        String agentId = startAgent(user);
-
-        final Terminal terminal = terminalFactory.getTerminal();
-        // unwrap stream so it can be recognized by the terminal and wrapped to get 
-        // special keys in windows
-        InputStream unwrappedIn = unwrapBIS(unwrap(System.in));
-        InputStream in = terminal.wrapInIfNeeded(unwrappedIn);
-        PrintStream out = unwrap(System.out);
-        PrintStream err = unwrap(System.err);
-        Runnable callback = new Runnable() {
-            public void run() {
-                try {
-                    bundleContext.getBundle(0).stop();
-                } catch (Exception e) {
-                    // Ignore
-                }
-            }
-        };
-        String ctype = System.getenv("LC_CTYPE");
-        String encoding = ctype;
-        if (encoding != null && encoding.indexOf('.') > 0) {
-            encoding = encoding.substring(encoding.indexOf('.') + 1);
-        } else {
-            encoding = System.getProperty("input.encoding", Charset.defaultCharset().name());
-        }
-        this.console = new Console(commandProcessor,
-                                   in,
-                                   wrap(out),
-                                   wrap(err),
-                                   terminal,
-                                   encoding,
-                                   callback);
-        CommandSession session = console.getSession();
-        session.put("USER", user);
-        session.put("APPLICATION", System.getProperty("karaf.name", "root"));
-        session.put("#LINES", new Function() {
-            public Object execute(CommandSession session, List<Object> arguments) throws Exception {
-                return Integer.toString(terminal.getHeight());
-            }
-        });
-        session.put("#COLUMNS", new Function() {
-            public Object execute(CommandSession session, List<Object> arguments) throws Exception {
-                return Integer.toString(terminal.getWidth());
-            }
-        });
-        if (ctype != null) {
-            session.put("LC_CTYPE", ctype);
-        }
-        session.put(".jline.terminal", terminal);
-        session.put(SshAgent.SSH_AUTHSOCKET_ENV_NAME, agentId);
-
-        boolean delayconsole = Boolean.parseBoolean(System.getProperty("karaf.delay.console"));
-        if (delayconsole) {
-            new DelayedStarted(this.console, bundleContext, unwrappedIn).start();
-        } else {
-            new Thread(this.console, "Karaf Shell Console Thread").start();
-        }
-    }
-
-    protected String startAgent(String user) {
-        try {
-            local = SshAgentLoader.load(bundleContext);
-            String agentId = "local:" + user;
-            Hashtable properties = new Hashtable();
-            properties.put("id", agentId);
-            registration = bundleContext.registerService(SshAgent.class.getName(), local, properties);
-            return agentId;
-        } catch (Throwable e) {
-            LOGGER.warn("Error starting ssh agent for local console", e);
-            return null;
-        }
-    }
-
-    protected void stop() throws Exception {
-        if (registration != null) {
-            registration.unregister();
-        }
-        // The bundle is stopped
-        // so close the console and remove the callback so that the
-        // osgi framework isn't stopped
-        if (console != null) {
-            console.close(false);
-        }
-    }
-
-    private static PrintStream wrap(PrintStream stream) {
-        OutputStream o = AnsiConsole.wrapOutputStream(stream);
-        if (o instanceof PrintStream) {
-            return ((PrintStream) o);
-        } else {
-            return new PrintStream(o);
-        }
-    }
-
-    private static <T> T unwrap(T stream) {
-        try {
-            Method mth = stream.getClass().getMethod("getRoot");
-            return (T) mth.invoke(stream);
-        } catch (Throwable t) {
-            return stream;
-        }
-    }
-
-    static class SshAgentLoader {
-        static SshAgent load(BundleContext bundleContext) {
-            try {
-                SshAgent agent = new AgentImpl();
-                URL url = bundleContext.getBundle().getResource("karaf.key");
-                InputStream is = url.openStream();
-                ObjectInputStream r = new ObjectInputStream(is);
-                KeyPair keyPair = (KeyPair) r.readObject();
-                agent.addIdentity(keyPair, "karaf");
-                return agent;
-            } catch (Throwable e) {
-                LOGGER.warn("Error starting ssh agent for local console", e);
-                return null;
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/DelayedStarted.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/DelayedStarted.java
deleted file mode 100644
index de68144..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/DelayedStarted.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.apache.karaf.shell.console.jline;

-

-import java.io.InputStream;

-import java.util.concurrent.atomic.AtomicBoolean;

-

-import org.osgi.framework.BundleContext;

-import org.osgi.framework.Constants;

-import org.osgi.framework.FrameworkEvent;

-import org.osgi.framework.FrameworkListener;

-import org.osgi.framework.startlevel.FrameworkStartLevel;

-

-/**

- * Delay the start of the console until the desired start level is reached or enter is pressed

- */

-class DelayedStarted extends Thread implements FrameworkListener {

-    private static final String SYSTEM_PROP_KARAF_CONSOLE_STARTED = "karaf.console.started";

-

-	private final AtomicBoolean started = new AtomicBoolean(false);

-    private final InputStream in;

-	private final Runnable console;

-	private final BundleContext bundleContext;

-

-    DelayedStarted(Runnable console, BundleContext bundleContext, InputStream in) {

-        super("Karaf Shell Console Thread");

-		this.console = console;

-		this.bundleContext = bundleContext;

-        this.in = in;

-        int defaultStartLevel = Integer.parseInt(System.getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));

-        int startLevel = ((FrameworkStartLevel) this.bundleContext.getBundle(0).adapt(FrameworkStartLevel.class)).getStartLevel();

-        if (startLevel >= defaultStartLevel) {

-            started.set(true);

-        } else {

-            bundleContext.addFrameworkListener(this);

-            frameworkEvent(new FrameworkEvent(FrameworkEvent.STARTLEVEL_CHANGED, bundleContext.getBundle(), null));

-        }

-    }

-

-    public void run() {

-        try {

-            while (!started.get()) {

-                if (in.available() == 0) {

-                    Thread.sleep(10);

-                }

-                while (in.available() > 0) {

-                    char ch = (char) in.read();

-                    if (ch == '\r' || ch == '\n') {

-                        started.set(true);

-                        break;

-                    }

-                }

-            }

-        } catch (Throwable t) {

-            // Ignore

-        }

-

-        // Signal to the main module that it can stop displaying the startup progress

-        System.setProperty(SYSTEM_PROP_KARAF_CONSOLE_STARTED, "true");

-

-        System.out.println();

-        this.bundleContext.removeFrameworkListener(this);

-        console.run();

-    }

-

-    public void frameworkEvent(FrameworkEvent event) {

-        if (event.getType() == FrameworkEvent.STARTLEVEL_CHANGED) {

-            int defaultStartLevel = Integer.parseInt(System.getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));

-            int startLevel = ((FrameworkStartLevel) this.bundleContext.getBundle(0).adapt(FrameworkStartLevel.class)).getStartLevel();

-            if (startLevel >= defaultStartLevel) {

-                started.set(true);

-            }

-        }

-    }

-}

diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/KarafFileHistory.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/KarafFileHistory.java
deleted file mode 100644
index 138266a..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/KarafFileHistory.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*

- * 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.

- */

-package org.apache.karaf.shell.console.jline;

-

-import java.io.File;

-import java.io.IOException;

-import java.io.Reader;

-

-import jline.console.history.FileHistory;

-import org.slf4j.Logger;

-import org.slf4j.LoggerFactory;

-

-/**

- * Override the FileHistory impl to trap failures due to the

- * user does not having write access to the history file.

- */

-public final class KarafFileHistory extends FileHistory {

-

-	static final Logger LOGGER = LoggerFactory.getLogger(KarafFileHistory.class);

-	boolean failed = false;

-    boolean loading = false;

-

-	public KarafFileHistory(File file) throws IOException {

-		super(file);

-	}

-

-    @Override

-    public void add(CharSequence item) {

-        if (!loading) {

-            item = item.toString().replaceAll("\\!", "\\\\!");

-        }

-        super.add(item);

-    }

-

-    @Override

-    public void load(Reader reader) throws IOException {

-        loading = true;

-        try {

-            super.load(reader);

-        } finally {

-            loading = false;

-        }

-    }

-

-    @Override

-	public void flush() throws IOException {

-	    if( !failed ) {

-	        try {

-	            super.flush();

-	        } catch (IOException e) {

-	            failed = true;

-	            LOGGER.debug("Could not write history file: "+ getFile(), e);

-	        }

-	    }

-	}

-

-	@Override

-	public void purge() throws IOException {

-	    if( !failed ) {

-	        try {

-	            super.purge();

-	        } catch (IOException e) {

-	            failed = true;

-	            LOGGER.debug("Could not delete history file: "+ getFile(), e);

-	        }

-	    }

-	}

-

-}
\ No newline at end of file
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/TerminalFactory.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/TerminalFactory.java
deleted file mode 100644
index 79f7f4b..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/TerminalFactory.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console.jline;
-
-import jline.NoInterruptUnixTerminal;
-import jline.Terminal;
-
-public class TerminalFactory {
-
-    private Terminal term;
-
-    public synchronized Terminal getTerminal() throws Exception {
-        if (term == null) {
-            init();
-        }
-        return term;
-    }
-
-    public void init() throws Exception {
-        jline.TerminalFactory.registerFlavor(jline.TerminalFactory.Flavor.UNIX, NoInterruptUnixTerminal.class);
-        term = jline.TerminalFactory.create();
-    }
-
-    public synchronized void destroy() throws Exception {
-        if (term != null) {
-            term.restore();
-            term = null;
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/util/Branding.java b/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/util/Branding.java
deleted file mode 100644
index 3e87448..0000000
--- a/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/util/Branding.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console.util;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
-
-import jline.Terminal;
-
-public final class Branding {
-    
-    private Branding() { }
-
-    public static Properties loadBrandingProperties() {
-        Properties props = new Properties();
-        loadProps(props, "org/apache/karaf/shell/console/branding.properties");
-        loadProps(props, "org/apache/karaf/branding/branding.properties");
-        return props;
-    }
-
-    public static Properties loadBrandingProperties(Terminal terminal) {
-        Properties props = new Properties();
-        if (terminal != null && terminal.getClass().getName().endsWith("SshTerminal")) {
-            //it's a ssh client, so load branding seperately
-            loadProps(props, "org/apache/karaf/shell/console/branding-ssh.properties");
-        } else {
-            loadProps(props, "org/apache/karaf/shell/console/branding.properties");
-        }
-
-        loadProps(props, "org/apache/karaf/branding/branding.properties");
-        return props;
-    }
-    
-    protected static void loadProps(Properties props, String resource) {
-        InputStream is = null;
-        try {
-            is = Branding.class.getClassLoader().getResourceAsStream(resource);
-            if (is != null) {
-                props.load(is);
-            }
-        } catch (IOException e) {
-            // ignore
-        } finally {
-            if (is != null) {
-                try {
-                    is.close();
-                } catch (IOException e) {
-                    // Ignore
-                }
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/console/src/main/resources/META-INF/services/org/apache/karaf/shell/commands b/karaf-2.3.x/shell/console/src/main/resources/META-INF/services/org/apache/karaf/shell/commands
deleted file mode 100644
index 28eefbc..0000000
--- a/karaf-2.3.x/shell/console/src/main/resources/META-INF/services/org/apache/karaf/shell/commands
+++ /dev/null
@@ -1,17 +0,0 @@
-##---------------------------------------------------------------------------
-##  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.help.HelpAction
diff --git a/karaf-2.3.x/shell/console/src/main/resources/OSGI-INF/blueprint/karaf-console.xml b/karaf-2.3.x/shell/console/src/main/resources/OSGI-INF/blueprint/karaf-console.xml
deleted file mode 100644
index db7f7f8..0000000
--- a/karaf-2.3.x/shell/console/src/main/resources/OSGI-INF/blueprint/karaf-console.xml
+++ /dev/null
@@ -1,106 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0">
-
-    <ext:property-placeholder placeholder-prefix="$[" placeholder-suffix="]">
-        <ext:default-properties>
-            <ext:property name="karaf.startLocalConsole" value="true" />
-        </ext:default-properties>
-    </ext:property-placeholder>
-
-    <reference id="commandProcessor" interface="org.apache.felix.service.command.CommandProcessor">
-        <reference-listener ref="consoleFactory"
-                            bind-method="registerCommandProcessor"
-                            unbind-method="unregisterCommandProcessor"/>
-    </reference>
-
-    <bean id="consoleFactory" class="org.apache.karaf.shell.console.jline.ConsoleFactory">
-        <property name="start" value="$[karaf.startLocalConsole]"/>
-        <property name="bundleContext" ref="blueprintBundleContext"/>
-        <property name="terminalFactory" ref="terminalFactory"/>
-    </bean>
-
-    <bean id="converters" class="org.apache.karaf.shell.console.Converters">
-        <argument ref="blueprintBundleContext"/>
-    </bean>
-    <service ref="converters" interface="org.apache.felix.service.command.Converter"/>
-
-    <bean id="terminalFactory" class="org.apache.karaf.shell.console.jline.TerminalFactory"
-          destroy-method="destroy"/>
-
-    <service>
-        <interfaces>
-            <value>org.apache.felix.service.command.Function</value>
-            <value>org.apache.karaf.shell.console.CompletableFunction</value>
-        </interfaces>
-        <service-properties>
-            <entry key="osgi.command.scope" value="*"/>
-            <entry key="osgi.command.function" value="help"/>
-        </service-properties>
-        <bean class="org.apache.karaf.shell.console.commands.BlueprintCommand">
-            <property name="blueprintContainer" ref="blueprintContainer"/>
-            <property name="blueprintConverter" ref="blueprintConverter"/>
-            <property name="actionId" value="help"/>
-            <property name="completers">
-                <list>
-                    <bean class="org.apache.karaf.shell.console.completer.CommandNamesCompleter"/>
-                </list>
-            </property>
-        </bean>
-    </service>
-    <bean id="help" class="org.apache.karaf.shell.console.help.HelpAction" activation="lazy" scope="prototype">
-        <property name="provider" ref="helpSystem"/>
-    </bean>
-    
-    <bean id="helpSystem" class="org.apache.karaf.shell.console.help.HelpSystem" init-method="start" destroy-method="stop">
-        <property name="context" ref="blueprintBundleContext"/>
-    </bean>
-    
-    <service auto-export="interfaces" ranking="-20">
-        <bean class="org.apache.karaf.shell.console.help.CommandListHelpProvider" />
-    </service>
-    <service auto-export="interfaces" ranking="-10">
-        <bean class="org.apache.karaf.shell.console.help.SingleCommandHelpProvider">
-            <property name="io">
-                <reference interface="org.apache.felix.service.threadio.ThreadIO"/>
-            </property>
-        </bean>
-    </service>
-    <service auto-export="interfaces" ref="subShellHelpProvider" ranking="-10"/>
-    <bean id="subShellHelpProvider" class="org.apache.karaf.shell.console.help.SubShellHelpProvider" init-method="start" destroy-method="stop">
-        <property name="context" ref="blueprintBundleContext"/>
-    </bean>
-    <service auto-export="interfaces" ranking="-7">
-        <bean class="org.apache.karaf.shell.console.help.SimpleHelpProvider">
-            <property name="help">
-                <map>
-                    <entry key="%root%"><value><![CDATA[${command-list|}]]></value></entry>
-                    <entry key="all"><value><![CDATA[${command-list|}]]></value></entry>
-                </map>
-            </property>
-        </bean>
-    </service>
-    <service auto-export="interfaces" ranking="-5">
-        <bean class="org.apache.karaf.shell.console.help.BrandingHelpProvider"/>
-    </service>
-
-
-</blueprint>
diff --git a/karaf-2.3.x/shell/console/src/main/resources/OSGI-INF/blueprint/shell-namespacehandler.xml b/karaf-2.3.x/shell/console/src/main/resources/OSGI-INF/blueprint/shell-namespacehandler.xml
deleted file mode 100644
index 77ec1f0..0000000
--- a/karaf-2.3.x/shell/console/src/main/resources/OSGI-INF/blueprint/shell-namespacehandler.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
-    <service interface="org.apache.aries.blueprint.NamespaceHandler">
-        <service-properties>
-            <entry key="osgi.service.blueprint.namespace">
-                <array>
-                    <value>http://karaf.apache.org/xmlns/shell/v1.0.0</value>
-                    <value>http://karaf.apache.org/xmlns/shell/v1.1.0</value>
-                </array>
-            </entry>
-        </service-properties>
-        <bean class="org.apache.karaf.shell.console.commands.NamespaceHandler"/>
-    </service>
-
-</blueprint>
diff --git a/karaf-2.3.x/shell/console/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/shell/console/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 84522f7..0000000
--- a/karaf-2.3.x/shell/console/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,14 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides for integration of Apache Felix Gogo, shell, and console.
-
-    It provides the default Karaf branding including the default welcome message.
-
-\u001B[1mSEE ALSO\u001B[0m
\ No newline at end of file
diff --git a/karaf-2.3.x/shell/console/src/main/resources/karaf.key b/karaf-2.3.x/shell/console/src/main/resources/karaf.key
deleted file mode 100644
index 708a466..0000000
--- a/karaf-2.3.x/shell/console/src/main/resources/karaf.key
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/shell/console/src/main/resources/org/apache/karaf/shell/console/commands/karaf-shell-1.0.0.xsd b/karaf-2.3.x/shell/console/src/main/resources/org/apache/karaf/shell/console/commands/karaf-shell-1.0.0.xsd
deleted file mode 100644
index 0e0dafd..0000000
--- a/karaf-2.3.x/shell/console/src/main/resources/org/apache/karaf/shell/console/commands/karaf-shell-1.0.0.xsd
+++ /dev/null
@@ -1,217 +0,0 @@
-<?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.
--->
-
-<!-- $Rev: 699828 $ $Date: 2008-09-28 16:35:27 +0200 (Sun, 28 Sep 2008) $ -->
-
-<xsd:schema xmlns="http://karaf.apache.org/xmlns/shell/v1.0.0"
-        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-        xmlns:bp="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-        targetNamespace="http://karaf.apache.org/xmlns/shell/v1.0.0"
-        elementFormDefault="qualified"
-        attributeFormDefault="unqualified">
-
-    <xsd:import namespace="http://www.osgi.org/xmlns/blueprint/v1.0.0"/>
-
-    <xsd:annotation>
-        <xsd:documentation>
-            Defines the configuration elements for Apache Karaf commands support.
-        </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:element name="command-bundle">
-        <xsd:complexType>
-            <xsd:annotation>
-                <xsd:documentation>
-                    Defines a command bundle.
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:sequence>
-                <xsd:choice minOccurs="0" maxOccurs="unbounded">
-					<xsd:element ref="command"/>
-					<xsd:element ref="alias"/>
-                    <xsd:element ref="link"/>
-				</xsd:choice>
-            </xsd:sequence>
-        </xsd:complexType>
-    </xsd:element>
-
-    <xsd:element name="command">
-        <xsd:complexType>
-            <xsd:annotation>
-                <xsd:documentation>
-                    Defines a command.
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:sequence>
-                <!--
-                NOTE: Not using an xsd:choice here, as I can't seem to figure out how to get it to properly
-                      validate the min/max of the containted elements.  W/o the xsd:choice the validation
-                      works, though have to define elements in order :-(
-                -->
-                <xsd:element ref="action" minOccurs="1" maxOccurs="1"/>
-                <xsd:element ref="documenter" minOccurs="0" maxOccurs="1"/>
-                <xsd:choice minOccurs="0" maxOccurs="1">
-                    <xsd:element ref="completer"/>
-                    <xsd:element ref="completers"/>
-                </xsd:choice>
-                <xsd:element ref="message-source" minOccurs="0" maxOccurs="1"/>
-            </xsd:sequence>
-            <xsd:attribute name="name" type="xsd:string" use="required"/>
-        </xsd:complexType>
-    </xsd:element>
-
-    <xsd:element name="link">
-        <xsd:complexType>
-            <xsd:annotation>
-                <xsd:documentation>
-                    Defines a link command.
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:attribute name="name" type="xsd:string" use="required"/>
-            <xsd:attribute name="target" type="xsd:string" use="required"/>
-        </xsd:complexType>
-    </xsd:element>
-
-    <xsd:group name="commandComponentElements">
-        <xsd:annotation>
-            <xsd:documentation>
-                Defines the valid elements for command components.  This is based on beans:beanElements,
-                stripping off the bits which are not valid in the command component context.
-            </xsd:documentation>
-        </xsd:annotation>
-		<xsd:sequence>
-			<xsd:choice minOccurs="0" maxOccurs="unbounded">
-                <xsd:element name="argument" type="bp:Targument"/>
-                <xsd:element name="property" type="bp:Tproperty"/>
-				<!--
-				NOTE: This seems to cause schema validation problems... not really sure why
-				<xsd:any namespace="##other" processContents="strict" minOccurs="0" maxOccurs="unbounded"/>
-				-->
-			</xsd:choice>
-		</xsd:sequence>
-	</xsd:group>
-
-    <xsd:attributeGroup name="commandComponentAttributes">
-        <xsd:annotation>
-            <xsd:documentation>
-                Defines the valid attributes for command components.  This is based on beans:beanAttributes,
-                stripping off the bits which are not valid in the command component context.
-            </xsd:documentation>
-        </xsd:annotation>
-		<xsd:attribute name="class" type="xsd:string"/>
-		<xsd:attribute name="depends-on" type="xsd:string"/>
-		<xsd:attribute name="init-method" type="xsd:string"/>
-		<xsd:attribute name="factory-method" type="xsd:string"/>
-		<xsd:attribute name="factory-bean" type="xsd:string"/>
-		<xsd:anyAttribute namespace="##other" processContents="lax"/>
-	</xsd:attributeGroup>
-
-    <xsd:complexType name="commandComponent" abstract="true">
-        <xsd:annotation>
-            <xsd:documentation>
-                Support for command component elements, which are all basically just beans.
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:group ref="commandComponentElements"/>
-        <xsd:attributeGroup ref="commandComponentAttributes"/>
-    </xsd:complexType>
-
-    <xsd:element name="action">
-        <xsd:complexType>
-            <xsd:annotation>
-                <xsd:documentation>
-                    Defines a command action.
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:complexContent>
-                <xsd:extension base="commandComponent"/>
-            </xsd:complexContent>
-        </xsd:complexType>
-    </xsd:element>
-
-    <xsd:element name="documenter">
-        <xsd:complexType>
-            <xsd:annotation>
-                <xsd:documentation>
-                    Defines a command documenter.
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:complexContent>
-                <xsd:extension base="commandComponent"/>
-            </xsd:complexContent>
-        </xsd:complexType>
-    </xsd:element>
-
-    <xsd:element name="completer">
-        <xsd:complexType>
-            <xsd:annotation>
-                <xsd:documentation>
-                    Defines a command completer.
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:complexContent>
-                <xsd:extension base="commandComponent"/>
-            </xsd:complexContent>
-        </xsd:complexType>
-    </xsd:element>
-
-    <xsd:element name="completers">
-        <xsd:complexType>
-            <xsd:annotation>
-                <xsd:documentation>
-                    Defines a configurable command completer with a set of completers.
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:sequence>
-                <xsd:choice minOccurs="1" maxOccurs="unbounded">
-                    <xsd:element name="bean" type="bp:Tbean"/>
-                    <xsd:element name="ref" type="bp:Tref"/>
-                    <xsd:element name="null" type="bp:Tnull"/>
-                </xsd:choice>
-            </xsd:sequence>
-        </xsd:complexType>
-    </xsd:element>
-
-    <xsd:element name="message-source">
-        <xsd:complexType>
-            <xsd:annotation>
-                <xsd:documentation>
-                    Defines a command message source.
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:complexContent>
-                <xsd:extension base="commandComponent"/>
-            </xsd:complexContent>
-        </xsd:complexType>
-    </xsd:element>
-
-    <xsd:element name="alias">
-        <xsd:complexType>
-            <xsd:annotation>
-                <xsd:documentation>
-                    Defines a command alias.
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:attribute name="name" type="xsd:string" use="required"/>
-            <xsd:attribute name="alias" type="xsd:string" use="required"/>
-        </xsd:complexType>
-    </xsd:element>
-
-</xsd:schema>
diff --git a/karaf-2.3.x/shell/console/src/main/resources/org/apache/karaf/shell/console/commands/karaf-shell-1.1.0.xsd b/karaf-2.3.x/shell/console/src/main/resources/org/apache/karaf/shell/console/commands/karaf-shell-1.1.0.xsd
deleted file mode 100644
index 7ad126f..0000000
--- a/karaf-2.3.x/shell/console/src/main/resources/org/apache/karaf/shell/console/commands/karaf-shell-1.1.0.xsd
+++ /dev/null
@@ -1,238 +0,0 @@
-<?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.
--->
-
-<!-- $Rev: 699828 $ $Date: 2008-09-28 16:35:27 +0200 (Sun, 28 Sep 2008) $ -->
-
-<xsd:schema xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0"
-        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-        xmlns:bp="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-        targetNamespace="http://karaf.apache.org/xmlns/shell/v1.1.0"
-        elementFormDefault="qualified"
-        attributeFormDefault="unqualified">
-
-    <xsd:import namespace="http://www.osgi.org/xmlns/blueprint/v1.0.0"/>
-
-    <xsd:annotation>
-        <xsd:documentation>
-            Defines the configuration elements for Apache Karaf commands support.
-        </xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:element name="command-bundle">
-        <xsd:complexType>
-            <xsd:annotation>
-                <xsd:documentation>
-                    Defines a command bundle.
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:sequence>
-                <xsd:choice minOccurs="0" maxOccurs="unbounded">
-					<xsd:element ref="command"/>
-					<xsd:element ref="alias"/>
-                    <xsd:element ref="link"/>
-				</xsd:choice>
-            </xsd:sequence>
-        </xsd:complexType>
-    </xsd:element>
-
-    <xsd:element name="command">
-        <xsd:complexType>
-            <xsd:annotation>
-                <xsd:documentation>
-                    Defines a command.
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:sequence>
-                <!--
-                NOTE: Not using an xsd:choice here, as I can't seem to figure out how to get it to properly
-                      validate the min/max of the containted elements.  W/o the xsd:choice the validation
-                      works, though have to define elements in order :-(
-                -->
-                <xsd:element ref="action" minOccurs="1" maxOccurs="1"/>
-                <xsd:element ref="documenter" minOccurs="0" maxOccurs="1"/>
-                <xsd:choice minOccurs="0" maxOccurs="1">
-                    <xsd:element ref="completer"/>
-                    <xsd:element ref="completers"/>
-                </xsd:choice>
-                <xsd:element ref="optional-completers" minOccurs="0" maxOccurs="1"/>
-                <xsd:element ref="message-source" minOccurs="0" maxOccurs="1"/>
-            </xsd:sequence>
-            <xsd:attribute name="name" type="xsd:string" use="required"/>
-        </xsd:complexType>
-    </xsd:element>
-
-    <xsd:element name="link">
-        <xsd:complexType>
-            <xsd:annotation>
-                <xsd:documentation>
-                    Defines a link command.
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:attribute name="name" type="xsd:string" use="required"/>
-            <xsd:attribute name="target" type="xsd:string" use="required"/>
-        </xsd:complexType>
-    </xsd:element>
-
-    <xsd:group name="commandComponentElements">
-        <xsd:annotation>
-            <xsd:documentation>
-                Defines the valid elements for command components.  This is based on beans:beanElements,
-                stripping off the bits which are not valid in the command component context.
-            </xsd:documentation>
-        </xsd:annotation>
-		<xsd:sequence>
-			<xsd:choice minOccurs="0" maxOccurs="unbounded">
-                <xsd:element name="argument" type="bp:Targument"/>
-                <xsd:element name="property" type="bp:Tproperty"/>
-				<!--
-				NOTE: This seems to cause schema validation problems... not really sure why
-				<xsd:any namespace="##other" processContents="strict" minOccurs="0" maxOccurs="unbounded"/>
-				-->
-			</xsd:choice>
-		</xsd:sequence>
-	</xsd:group>
-
-    <xsd:attributeGroup name="commandComponentAttributes">
-        <xsd:annotation>
-            <xsd:documentation>
-                Defines the valid attributes for command components.  This is based on beans:beanAttributes,
-                stripping off the bits which are not valid in the command component context.
-            </xsd:documentation>
-        </xsd:annotation>
-		<xsd:attribute name="class" type="xsd:string"/>
-		<xsd:attribute name="depends-on" type="xsd:string"/>
-		<xsd:attribute name="init-method" type="xsd:string"/>
-		<xsd:attribute name="factory-method" type="xsd:string"/>
-		<xsd:attribute name="factory-bean" type="xsd:string"/>
-		<xsd:anyAttribute namespace="##other" processContents="lax"/>
-	</xsd:attributeGroup>
-
-    <xsd:complexType name="commandComponent" abstract="true">
-        <xsd:annotation>
-            <xsd:documentation>
-                Support for command component elements, which are all basically just beans.
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:group ref="commandComponentElements"/>
-        <xsd:attributeGroup ref="commandComponentAttributes"/>
-    </xsd:complexType>
-
-    <xsd:element name="action">
-        <xsd:complexType>
-            <xsd:annotation>
-                <xsd:documentation>
-                    Defines a command action.
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:complexContent>
-                <xsd:extension base="commandComponent"/>
-            </xsd:complexContent>
-        </xsd:complexType>
-    </xsd:element>
-
-    <xsd:element name="documenter">
-        <xsd:complexType>
-            <xsd:annotation>
-                <xsd:documentation>
-                    Defines a command documenter.
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:complexContent>
-                <xsd:extension base="commandComponent"/>
-            </xsd:complexContent>
-        </xsd:complexType>
-    </xsd:element>
-
-    <xsd:element name="completer">
-        <xsd:complexType>
-            <xsd:annotation>
-                <xsd:documentation>
-                    Defines a command completer.
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:complexContent>
-                <xsd:extension base="commandComponent"/>
-            </xsd:complexContent>
-        </xsd:complexType>
-    </xsd:element>
-
-    <xsd:element name="completers">
-        <xsd:complexType>
-            <xsd:annotation>
-                <xsd:documentation>
-                    Defines a configurable command completer with a set of completers.
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:sequence>
-                <xsd:choice minOccurs="1" maxOccurs="unbounded">
-                    <xsd:element name="bean" type="bp:Tbean"/>
-                    <xsd:element name="ref" type="bp:Tref"/>
-                    <xsd:element name="null" type="bp:Tnull"/>
-                </xsd:choice>
-            </xsd:sequence>
-        </xsd:complexType>
-    </xsd:element>
-
-        <xsd:element name="optional-completers">
-        <xsd:complexType>
-            <xsd:annotation>
-                <xsd:documentation>
-                    Defines a configurable command completer with a set of completers.
-                    These completers are used for option value completion.
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:complexContent>
-			<xsd:extension base="bp:TtypedCollection">
-				<xsd:sequence>
-					<xsd:element name="entry" type="bp:TmapEntry" minOccurs="0"
-						maxOccurs="unbounded" />
-				</xsd:sequence>
-				<xsd:attribute name="key-type" type="bp:Ttype" />
-			</xsd:extension>
-		</xsd:complexContent>
-        </xsd:complexType>
-    </xsd:element>
-
-    <xsd:element name="message-source">
-        <xsd:complexType>
-            <xsd:annotation>
-                <xsd:documentation>
-                    Defines a command message source.
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:complexContent>
-                <xsd:extension base="commandComponent"/>
-            </xsd:complexContent>
-        </xsd:complexType>
-    </xsd:element>
-
-    <xsd:element name="alias">
-        <xsd:complexType>
-            <xsd:annotation>
-                <xsd:documentation>
-                    Defines a command alias.
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:attribute name="name" type="xsd:string" use="required"/>
-            <xsd:attribute name="alias" type="xsd:string" use="required"/>
-        </xsd:complexType>
-    </xsd:element>
-
-</xsd:schema>
diff --git a/karaf-2.3.x/shell/console/src/test/java/org/apache/felix/gogo/commands/Context.java b/karaf-2.3.x/shell/console/src/test/java/org/apache/felix/gogo/commands/Context.java
deleted file mode 100644
index 80f5309..0000000
--- a/karaf-2.3.x/shell/console/src/test/java/org/apache/felix/gogo/commands/Context.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * 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.
- */
-package org.apache.felix.gogo.commands;
-
-import org.apache.felix.gogo.runtime.CommandProcessorImpl;
-import org.apache.felix.gogo.runtime.CommandSessionImpl;
-import org.apache.felix.gogo.runtime.threadio.ThreadIOImpl;
-
-public class Context extends CommandProcessorImpl
-{
-    public static final String EMPTY = "";
-    CommandSessionImpl session;
-    static ThreadIOImpl threadio;
-
-    static
-    {
-        threadio = new ThreadIOImpl();
-        threadio.start();
-    }
-
-    public Context()
-    {
-        super(threadio);
-        addCommand("osgi", this, "addCommand");
-        addCommand("osgi", this, "removeCommand");
-        addCommand("osgi", this, "eval");
-        session = (CommandSessionImpl) createSession(System.in, System.out, System.err);
-    }
-
-
-    public Object execute(CharSequence source) throws Exception
-    {
-        return session.execute(source);
-    }
-
-    public void addCommand(String name, Object target)
-    {
-        put("test:" + name, target);
-    }
-
-    public void set(String name, Object value)
-    {
-        session.put(name, value);
-    }
-
-
-}
diff --git a/karaf-2.3.x/shell/console/src/test/java/org/apache/felix/gogo/commands/TestCommands.java b/karaf-2.3.x/shell/console/src/test/java/org/apache/felix/gogo/commands/TestCommands.java
deleted file mode 100644
index e2ffd88..0000000
--- a/karaf-2.3.x/shell/console/src/test/java/org/apache/felix/gogo/commands/TestCommands.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * 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.
- */
-package org.apache.felix.gogo.commands;
-
-import java.util.List;
-import java.util.Arrays;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-import junit.framework.TestCase;
-import org.apache.felix.gogo.commands.basic.SimpleCommand;
-import org.apache.felix.service.command.CommandSession;
-
-public class TestCommands extends TestCase {
-
-
-    public void testPrompt() throws Exception {
-        Context c = new Context();
-        c.addCommand("echo", this);
-        c.set("USER", "gnodet");
-        c.set("APPLICATION", "karaf");
-        //c.set("SCOPE", "");
-        Object p = c.execute("echo \"@|bold ${USER}|@${APPLICATION}:@|bold ${SCOPE}|> \"");
-        System.out.println("Prompt: " + p);
-    }
-
-    public void testCommand() throws Exception {
-        Context c= new Context();
-        c.addCommand("capture", this);
-        c.addCommand("my-action", new SimpleCommand(MyAction.class));
-
-        // Test help
-        Object help = c.execute("my-action --help | capture");
-        assertTrue(help instanceof String);
-        assertTrue(((String) help).indexOf("My Action") >= 0);
-        assertTrue(((String) help).indexOf("First option") >= 0);
-        assertTrue(((String) help).indexOf("Bundle ids") >= 0);
-
-
-        // Test required argument
-        try
-        {
-            c.execute("my-action");
-            fail("Action should have thrown an exception because of a missing argument");
-        }
-        catch (CommandException e)
-        {
-        }
-
-        // Test required argument
-        assertEquals(Arrays.asList(3), c.execute("my-action 3"));
-
-        // Test required argument
-        assertEquals(Arrays.asList(3), c.execute("my-action 3"));
-
-        // Test required argument
-        assertEquals(Arrays.asList(3, 5), c.execute("my-action 3 5"));
-
-        // Test option
-        assertEquals(Arrays.asList(4), c.execute("my-action -i 3"));
-
-        // Test option alias
-        assertEquals(Arrays.asList(4), c.execute("my-action --increment 3"));
-    }
-
-    public String capture() throws IOException
-    {
-        StringWriter sw = new StringWriter();
-        BufferedReader rdr = new BufferedReader(new InputStreamReader(System.in));
-        String s = rdr.readLine();
-        while (s != null)
-        {
-            sw.write(s);
-            s = rdr.readLine();
-        }
-        return sw.toString();
-    }
-
-    public CharSequence echo(Object args[])
-    {
-        if (args == null)
-        {
-            return "";
-        }
-
-        StringBuilder sb = new StringBuilder();
-        String del = "";
-        for (Object arg : args)
-        {
-            sb.append(del);
-            if (arg != null)
-            {
-                sb.append(arg);
-                del = " ";
-            }
-        }
-        return sb;
-    }
-
-    @Command(scope = "test", name = "my-action", description = "My Action")
-    public static class MyAction implements Action
-    {
-
-        @Option(name = "-i", aliases = { "--increment" }, description = "First option")
-        private boolean increment;
-
-        @Argument(name = "ids", description = "Bundle ids", required = true, multiValued = true)
-        private List<Integer> ids;
-
-        public Object execute(CommandSession session) throws Exception {
-            if (increment)
-            {
-                for (int i = 0; i < ids.size(); i++)
-                {
-                    ids.set(i, ids.get(i) + 1);
-                }
-            }
-            return ids;
-        }
-    }
-}
diff --git a/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/ExampleSubclassMain.java b/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/ExampleSubclassMain.java
deleted file mode 100644
index 0fef365..0000000
--- a/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/ExampleSubclassMain.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/**
- * 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.
- */
-package org.apache.karaf.shell.console;
-
-import java.io.InputStream;
-import java.io.PrintStream;
-
-import jline.Terminal;
-import org.apache.felix.gogo.runtime.CommandProcessorImpl;
-import org.apache.karaf.shell.console.jline.Console;
-
-/**
- * This class is mostly here so that folks can see an example of how you can extend the Karaf Main shell.  Also
- * lets Karaf developers see how changes the Main class can affect the interface comparability
- * with sub classes.
- */
-public class ExampleSubclassMain extends Main  {
-
-    public static void main(String args[]) throws Exception {
-        ExampleSubclassMain main = new ExampleSubclassMain();
-        main.run(args);
-    }
-
-    public void ExampleSubclassMain() {
-        // Sets the name of the shell and the current user.
-        setApplication("example");
-        setUser("unknown");
-    }
-
-    @Override
-    protected Console createConsole(CommandProcessorImpl commandProcessor, InputStream in, PrintStream out, PrintStream err, Terminal terminal) throws Exception {
-        return new Console(commandProcessor, in, out, err, terminal, null, null) {
-
-            /**
-             * If you don't overwrite, then karaf will use the welcome message found in the
-             * following resource files:
-             * <ul>
-             *   <li>org/apache/karaf/shell/console/branding.properties</li>
-             *   <li>org/apache/karaf/branding/branding.properties</li>
-             * <ul>
-             */
-            @Override
-            protected void welcome() {
-                session.getConsole().println("===============================================");
-                session.getConsole().println(" Example Shell ");
-                session.getConsole().println("===============================================");
-            }
-
-            /**
-             * If you don't overwrite then Karaf builds a prompt based on the current app and user.
-             * @return
-             */
-            @Override
-            protected String getPrompt() {
-                return "example>";
-            }
-
-            /**
-             * If you don't overwrite, then karaf automatically adds session properties
-             * found in the following resource files:
-             * <ul>
-             *   <li>org/apache/karaf/shell/console/branding.properties</li>
-             *   <li>org/apache/karaf/branding/branding.properties</li>
-             * <ul>
-             */
-            @Override
-            protected void setSessionProperties() {
-                // we won't add any session properties.
-            }
-
-        };
-    }
-
-    /**
-     * if you don't override, then Karaf will discover the commands listed in the
-     * "META-INF/services/org/apache/karaf/shell/commands" resource file.
-     *
-     * @return
-     */
-    @Override
-    public String getDiscoveryResource() {
-        return "META-INF/services/org/example/commands.index";
-    }
-
-
-}
diff --git a/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/completer/ArgumentCompleterTest.java b/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/completer/ArgumentCompleterTest.java
deleted file mode 100644
index 9774857..0000000
--- a/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/completer/ArgumentCompleterTest.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/**
- * 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.
- */
-package org.apache.karaf.shell.console.completer;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.felix.gogo.commands.Action;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.gogo.commands.basic.SimpleCommand;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.karaf.shell.console.CompletableFunction;
-import org.apache.karaf.shell.console.Completer;
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-public class ArgumentCompleterTest extends CompleterTestSupport {
-
-    @Test
-    public void testParser1() throws Exception {
-        Parser parser = new Parser("echo foo | cat bar ; ta", 23);
-        List<List<List<String>>> p = parser.program();
-        assertEquals(1, parser.c0);
-        assertEquals(0, parser.c1);
-        assertEquals(0, parser.c2);
-        assertEquals(2, parser.c3);
-    }
-
-    @Test
-    public void testParser2() throws Exception {
-        Parser parser = new Parser("echo foo ; cat bar | ta", 23);
-        List<List<List<String>>> p = parser.program();
-        assertEquals(1, parser.c0);
-        assertEquals(1, parser.c1);
-        assertEquals(0, parser.c2);
-        assertEquals(2, parser.c3);
-    }
-
-    @Test
-    public void testParser3() throws Exception {
-        Parser parser = new Parser("echo foo ; cat bar | ta", 22);
-        List<List<List<String>>> p = parser.program();
-        assertEquals(1, parser.c0);
-        assertEquals(1, parser.c1);
-        assertEquals(0, parser.c2);
-        assertEquals(1, parser.c3);
-    }
-
-    @Test
-    public void testParser4() throws Exception {
-        Parser parser = new Parser("echo foo ; cat bar | ta reta", 27);
-        List<List<List<String>>> p = parser.program();
-        assertEquals(1, parser.c0);
-        assertEquals(1, parser.c1);
-        assertEquals(1, parser.c2);
-        assertEquals(3, parser.c3);
-    }
-
-    @Test
-    public void testParser5() throws Exception {
-        Parser parser = new Parser("echo foo ; cat bar | ta reta", 24);
-        List<List<List<String>>> p = parser.program();
-        assertEquals(1, parser.c0);
-        assertEquals(1, parser.c1);
-        assertEquals(1, parser.c2);
-        assertEquals(0, parser.c3);
-    }
-
-    @Test
-    public void testCompleteOptions() throws Exception {
-        CommandSession session = new DummyCommandSession();
-        Completer comp = new ArgumentCompleter(session, new MyFunction(), "my:action");
-        assertEquals(Arrays.asList("--check", "--foo", "--help", "--int", "--string", "-c", "-f", "-i", "-s"), complete(comp, "action -"));
-        assertEquals(Arrays.asList(), complete(comp, "action --foo "));
-        assertEquals(Arrays.asList("action "), complete(comp, "acti"));
-        assertEquals(Arrays.asList("my:action "), complete(comp, "my:ac"));
-        assertEquals(Arrays.asList("--foo "), complete(comp, "action --f"));
-        assertEquals(Arrays.asList("--help "), complete(comp, "action --h"));
-        assertEquals(Arrays.asList("-c "), complete(comp, "action -c"));
-        assertEquals(Arrays.asList("--check "), complete(comp, "action -f 2 --c"));
-        assertEquals(Arrays.asList("foo1 "), complete(comp, "action -f 2 --check foo1"));
-        assertEquals(Arrays.asList("bar1", "bar2"), complete(comp, "action -f 2 --check foo1 "));
-        assertEquals(Arrays.asList("one", "two"), complete(comp, "action -s "));
-        assertEquals(Arrays.asList("one", "two"), complete(comp, "action --string "));
-        assertEquals(Arrays.asList("two "), complete(comp, "action -s t"));
-        assertEquals(Arrays.asList("1", "2"), complete(comp, "action -i "));
-        assertEquals(Arrays.asList("1", "2"), complete(comp, "action --int "));
-        assertEquals(Arrays.asList("2 "), complete(comp, "action -i 2"));
-    }
-
-    public static class MyFunction extends SimpleCommand implements CompletableFunction {
-        public MyFunction() {
-            super(MyAction.class);
-        }
-        public List<Completer> getCompleters() {
-            return Arrays.<Completer>asList(
-                    new StringsCompleter(Arrays.asList("foo1", "foo2")),
-                    new StringsCompleter(Arrays.asList("bar1", "bar2"))
-            );
-        }
-
-        public Map<String,Completer> getOptionalCompleters() {
-            Map<String,Completer> completers = new HashMap<String,Completer>();
-            completers.put("-s",new StringsCompleter(Arrays.asList("one","two")));
-            completers.put("--int",new StringsCompleter(Arrays.asList("1","2")));
-            return completers;
-        }
-    }
-
-    public static class MyAction implements Action {
-        @Option(name = "-f", aliases = { "--foo" })
-        int f;
-
-        @Option(name = "-c", aliases = "--check")
-        boolean check;
-
-        @Option(name = "-s", aliases = "--string")
-        String string;
-
-        @Option(name = "-i", aliases = "--int")
-        String integer;
-
-        public Object execute(CommandSession session) throws Exception {
-            return null;
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/completer/BooleanCompleterTest.java b/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/completer/BooleanCompleterTest.java
deleted file mode 100644
index 2c01cc6..0000000
--- a/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/completer/BooleanCompleterTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.shell.console.completer;
-
-import org.apache.felix.gogo.commands.Action;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.CompleterValues;
-import org.apache.felix.gogo.commands.basic.SimpleCommand;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.karaf.shell.console.Completer;
-import org.junit.Test;
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-
-public class BooleanCompleterTest extends CompleterTestSupport {
-
-    @Test
-    public void testCompleteArgumnets() throws Exception {
-        CommandSession session = new DummyCommandSession();
-        Completer comp = new ArgumentCompleter(session, new SimpleCommand(MyAction.class), "my:action");
-
-        // arg 0
-        assertEquals(Arrays.asList("true "), complete(comp, "action t"));
-        assertEquals(Arrays.asList("false "), complete(comp, "action f"));
-
-        // arg 1
-        assertEquals(Arrays.asList("true "), complete(comp, "action false t"));
-        assertEquals(Arrays.asList("false "), complete(comp, "action true f"));
-
-        // unknown args
-        assertEquals(Arrays.asList(), complete(comp, "action c"));
-        assertEquals(Arrays.asList(), complete(comp, "action true true a"));
-    }
-
-    public static class MyAction implements Action {
-        @Argument(index = 0)
-        Boolean foo;
-        @Argument(index = 1)
-        boolean bar;
-
-        public Object execute(CommandSession session) throws Exception {
-            return null;
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/completer/CompleterTestSupport.java b/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/completer/CompleterTestSupport.java
deleted file mode 100644
index e5341a5..0000000
--- a/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/completer/CompleterTestSupport.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.shell.console.completer;
-
-import org.apache.karaf.shell.console.Completer;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Useful base class for completion related test cases
- */
-public abstract class CompleterTestSupport {
-    protected List<String> complete(Completer completer, String buf) {
-        List<String> candidates = new ArrayList<String>();
-        completer.complete(buf, buf.length(), candidates);
-        return candidates;
-    }
-}
diff --git a/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/completer/CompleterValuesTest.java b/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/completer/CompleterValuesTest.java
deleted file mode 100644
index abb0a07..0000000
--- a/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/completer/CompleterValuesTest.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.shell.console.completer;
-
-import org.apache.felix.gogo.commands.Action;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.CompleterValues;
-import org.apache.felix.gogo.commands.basic.SimpleCommand;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.karaf.shell.console.Completer;
-import org.junit.Test;
-
-import java.util.Arrays;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-
-public class CompleterValuesTest extends CompleterTestSupport {
-
-    @Test
-    public void testCompleteArgumnets() throws Exception {
-        CommandSession session = new DummyCommandSession();
-        Completer comp = new ArgumentCompleter(session, new SimpleCommand(MyAction.class), "my:action");
-
-        // arg 0
-        assertEquals(Arrays.asList("a1", "a2", "a3"), complete(comp, "action a"));
-        assertEquals(Arrays.asList("b4", "b5"), complete(comp, "action b"));
-
-        // arg 1
-        assertEquals(Arrays.asList("c2", "c3"), complete(comp, "action a1 c"));
-        assertEquals(Arrays.asList("d5", "d6", "d7"), complete(comp, "action b4 d"));
-
-        // unknown args
-        assertEquals(Arrays.asList(), complete(comp, "action c"));
-        assertEquals(Arrays.asList(), complete(comp, "action a1 d5 a"));
-    }
-
-    public static class MyAction implements Action {
-        @Argument(index = 0)
-        String foo;
-        @Argument(index = 1)
-        String bar;
-
-        public Object execute(CommandSession session) throws Exception {
-            return null;
-        }
-
-        @CompleterValues(index = 0)
-        public String[] getFooValues() {
-            return new String[]{"a1", "a2", "a3", "b4", "b5"};
-        }
-
-        @CompleterValues(index = 1)
-        public List<String> getBarValues() {
-            return Arrays.asList("c2", "c3", "d5", "d6", "d7");
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/completer/DummyCommandSession.java b/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/completer/DummyCommandSession.java
deleted file mode 100644
index ac1a894..0000000
--- a/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/completer/DummyCommandSession.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.shell.console.completer;
-
-import java.io.InputStream;
-import java.io.PrintStream;
-
-import org.apache.felix.service.command.CommandSession;
-
-public class DummyCommandSession implements CommandSession {
-    public Object convert(Class<?> type, Object instance) {
-        return null;
-    }
-    public CharSequence format(Object target, int level) {
-        return null;
-    }
-    public void put(String name, Object value) {
-    }
-    public Object get(String name) {
-        return null;
-    }
-    public PrintStream getConsole() {
-        return null;
-    }
-    public InputStream getKeyboard() {
-        return null;
-    }
-    public void close() {
-    }
-    public Object execute(CharSequence commandline) throws Exception {
-        return null;
-    }
-}
diff --git a/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/completer/FileCompleterTest.java b/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/completer/FileCompleterTest.java
deleted file mode 100644
index 48cbedb..0000000
--- a/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/completer/FileCompleterTest.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.shell.console.completer;
-
-import java.io.File;
-import java.util.Arrays;
-
-import org.apache.felix.gogo.commands.Action;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.basic.SimpleCommand;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.karaf.shell.console.Completer;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-public class FileCompleterTest extends CompleterTestSupport {
-
-    @Test
-    public void testCompleteArgumnets() throws Exception {
-        CommandSession session = new DummyCommandSession();
-        Completer comp = new ArgumentCompleter(session, new SimpleCommand(MyAction.class), "my:action");
-
-        // arg 0
-        assertEquals(Arrays.asList("src"+File.separator), complete(comp, "action s"));
-        assertEquals(Arrays.asList("main"+File.separator), complete(comp, "action src/m"));
-        assertEquals(Arrays.asList("java"+File.separator), complete(comp, "action src/main/j"));
-    }
-
-    public static class MyAction implements Action {
-        @Argument(index = 0)
-        File foo;
-        @Argument(index = 1)
-        File bar;
-
-        public Object execute(CommandSession session) throws Exception {
-            return null;
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/help/TestFormatting.java b/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/help/TestFormatting.java
deleted file mode 100644
index c7f26b6..0000000
--- a/karaf-2.3.x/shell/console/src/test/java/org/apache/karaf/shell/console/help/TestFormatting.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.console.help;
-
-import java.io.ByteArrayOutputStream;
-import java.io.PrintStream;
-
-import junit.framework.TestCase;
-import org.apache.felix.gogo.commands.basic.DefaultActionPreparator;
-
-public class TestFormatting extends TestCase {
-    
-    public void testFormat() throws Exception {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        DefaultActionPreparator.printFormatted("  ",
-                "  This is a test with a long paragraph\n\n  with an indented paragraph\nAnd another one\n", 20, new PrintStream(baos, true));
-        System.err.println(baos.toString());
-    }
-}
diff --git a/karaf-2.3.x/shell/dev/NOTICE b/karaf-2.3.x/shell/dev/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/shell/dev/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/shell/dev/pom.xml b/karaf-2.3.x/shell/dev/pom.xml
deleted file mode 100644
index fd15f2a..0000000
--- a/karaf-2.3.x/shell/dev/pom.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <artifactId>shell</artifactId>
-        <groupId>org.apache.karaf.shell</groupId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.shell.dev</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Shell :: Development Commands</name>
-    <description>This bundle provides Karaf shell commands aim to help the developer.</description>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.ops4j.pax.url</groupId>
-            <artifactId>pax-url-wrap</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.ops4j.pax.url</groupId>
-            <artifactId>pax-url-mvn</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.utils</artifactId>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Embed-Dependency>pax-url-mvn</Embed-Dependency>
-                        <Import-Package>
-                            org.apache.felix.service.command,
-                            org.apache.felix.gogo.commands,
-                            org.apache.karaf.shell.console,
-                            *
-                        </Import-Package>
-                        <Private-Package>
-                            org.apache.felix.utils*;-split-package:=merge-first,
-                            org.ops4j.pax.url.mvn,
-                            !*
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/AbstractBundleCommand.java b/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/AbstractBundleCommand.java
deleted file mode 100644
index baaf2cf..0000000
--- a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/AbstractBundleCommand.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.dev;
-
-import java.util.HashMap;
-import java.util.LinkedHashSet;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.packageadmin.ExportedPackage;
-import org.osgi.service.packageadmin.PackageAdmin;
-
-/**
- * Base class for a dev: command that takes a bundle id as an argument
- *
- * It also provides convient access to the PackageAdmin service
- */
-public abstract class AbstractBundleCommand extends OsgiCommandSupport {
-
-    @Argument(index = 0, name = "id", description = "The bundle ID", required = true)
-    Long id;
-
-    private PackageAdmin admin;
-
-    @Override
-    protected Object doExecute() throws Exception {
-        // Get package admin service.
-        ServiceReference ref = getBundleContext().getServiceReference(PackageAdmin.class.getName());
-        if (ref == null) {
-            System.out.println("PackageAdmin service is unavailable.");
-            return null;
-        }
-
-        // using the getService call ensures that the reference will be released at the end
-        admin = getService(PackageAdmin.class, ref);
-
-        Bundle bundle = getBundleContext().getBundle(id);
-        if (bundle == null) {
-            System.err.println("Bundle ID " + id + " is invalid");
-            return null;
-        }
-
-        doExecute(bundle);
-        
-        return null;
-    }
-
-    protected abstract void doExecute(Bundle bundle) throws Exception;
-
-    /*
-     * Get the list of bundles from which the given bundle imports packages
-     */
-    protected Map<String, Bundle> getWiredBundles(Bundle bundle) {
-        // the set of bundles from which the bundle imports packages
-        Map<String, Bundle> exporters = new HashMap<String, Bundle>();
-
-        for (ExportedPackage pkg : getPackageAdmin().getExportedPackages((Bundle) null)) {
-            Bundle[] bundles = pkg.getImportingBundles();
-            if (bundles != null) {
-                for (Bundle importingBundle : bundles) {
-                    if (bundle.equals(importingBundle)
-                            && !(pkg.getExportingBundle().getBundleId() == 0)
-                            && !(pkg.getExportingBundle().equals(bundle))) {
-                        exporters.put(pkg.getName(), pkg.getExportingBundle());
-                    }
-                }
-            }
-        }
-        return exporters;
-    }
-
-    protected PackageAdmin getPackageAdmin() {
-        return admin;    
-    }
-}
diff --git a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/DynamicImport.java b/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/DynamicImport.java
deleted file mode 100644
index 7f81dbd..0000000
--- a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/DynamicImport.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.dev;
-
-import java.io.IOException;
-import static java.lang.String.format;
-import java.net.URL;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.Set;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.ops4j.pax.url.wrap.Handler;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleException;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.packageadmin.ExportedPackage;
-import org.osgi.service.packageadmin.PackageAdmin;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Command for enabling/disabling debug logging on a bundle and calculating the difference in
- * wired imports.
- */
-@Command(scope = "dev", name = "dynamic-import", description = "Enables/disables dynamic-import for a given bundle.")
-public class DynamicImport extends AbstractBundleCommand {
-
-    private final Logger LOG = LoggerFactory.getLogger(DynamicImport.class);
-
-    /**
-     * The header key where we store the active wires when we enable DynamicImport=*
-     */
-    protected static final String ORIGINAL_WIRES = "Original-Wires";
-
-    @Override
-    protected void doExecute(Bundle bundle) throws Exception {
-        if (bundle.getHeaders().get(ORIGINAL_WIRES) == null) {
-            enableDynamicImports(bundle);
-        } else {
-            disableDynamicImports(bundle);
-        }
-    }
-
-    /*
-     * Enable DynamicImport=* on the bundle
-     */
-    private void enableDynamicImports(Bundle bundle) throws IOException, BundleException {
-        System.out.printf("Enabling dynamic imports on bundle %s%n", bundle);
-
-        String location =
-                String.format("wrap:%s$" +
-                        "Bundle-UpdateLocation=%s&" +
-                        "DynamicImport-Package=*&" +
-                        "%s=%s&" +
-                        "overwrite=merge",
-                        bundle.getLocation(),
-                        bundle.getLocation(),
-                        ORIGINAL_WIRES,
-                        explode(getWiredBundles(bundle).keySet()));
-        LOG.debug(format("Updating %s with URL %s", bundle, location));
-
-        URL url = new URL(location);
-        bundle.update(url.openStream());
-        getPackageAdmin().refreshPackages(new Bundle[] {bundle});
-    }
-
-    /*
-     * Disable DynamicImport=* on the bundle
-     *
-     * At this time, we will also calculate the difference in package wiring for the bundle compared to
-     * when we enabled the DynamicImport
-     */
-    private void disableDynamicImports(Bundle bundle) throws BundleException {
-        System.out.printf("Disabling dynamic imports on bundle %s%n", bundle);
-
-        Set<String> current = getWiredBundles(bundle).keySet();
-        for (String original : bundle.getHeaders().get(ORIGINAL_WIRES).toString().split(",")) {
-            current.remove(original);
-        }
-
-        if (current.isEmpty()) {
-            System.out.println("(no additional packages have been wired since dynamic import was enabled)");
-        } else {
-            System.out.printf("%nAdditional packages wired since dynamic import was enabled:%n");
-            for (String pkg : current) {
-                System.out.printf("- %s%n", pkg);
-            }
-        }
-
-        bundle.update();
-    }
-
-    /*
-     * Explode a set of string values in to a ,-delimited string
-     */
-    private String explode(Set<String> set) {
-        StringBuffer result = new StringBuffer();
-        Iterator<String> it = set.iterator();
-        while (it.hasNext()) {
-            result.append(it.next());
-            if (it.hasNext()) {
-                result.append(",");
-            }
-        }
-        if (result.length() == 0) {
-            return "--none--";
-        }
-        return result.toString();
-    }
-}
diff --git a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/FrameworkOptions.java b/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/FrameworkOptions.java
deleted file mode 100644
index 036eaa5..0000000
--- a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/FrameworkOptions.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.dev;
-
-import java.io.File;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.utils.properties.Properties;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.karaf.shell.dev.framework.Equinox;
-import org.apache.karaf.shell.dev.framework.Felix;
-import org.apache.karaf.shell.dev.framework.Framework;
-
-/**
- * Command for enabling/disabling debug logging on the OSGi framework
- */
-@Command(scope = "dev", name = "framework", description = "OSGi Framework options.")
-public class FrameworkOptions extends OsgiCommandSupport {
-
-    private static final String KARAF_BASE = System.getProperty("karaf.base");
-
-    @Option(name = "-debug", aliases={"--enable-debug"}, description="Enable debug for the OSGi framework", required = false, multiValued = false)
-    boolean debug;
-
-    @Option(name = "-nodebug", aliases={"--disable-debug"}, description="Disable debug for the OSGi framework", required = false, multiValued = false)
-    boolean nodebug;
-
-    @Argument(name = "framework", required = false, description = "Name of the OSGi framework to use")
-    String framework;
-
-    @Override
-    protected Object doExecute() throws Exception {
-
-        if (!debug^nodebug && framework == null) {
-            System.out.printf("Current OSGi framework is %s%n", getFramework().getName());
-            return null;
-        }
-        Framework frwk = null;
-        if (framework != null) {
-            if (!Felix.NAME.equalsIgnoreCase(framework) && !Equinox.NAME.equalsIgnoreCase(framework)) {
-                System.err.printf("Unsupported framework: %s%n", framework);
-                return null;
-            }
-            if (Felix.NAME.equalsIgnoreCase(framework))
-                frwk = new Felix(new File(KARAF_BASE));
-            else
-                frwk = new Equinox(new File(KARAF_BASE));
-            Properties props = new Properties(new File(System.getProperty("karaf.base"), "etc/config.properties"));
-            props.put("karaf.framework", framework.toLowerCase());
-            props.save();
-        }
-        if (debug) {
-            if (frwk == null)
-                frwk = getFramework();
-            System.out.printf("Enabling debug for OSGi framework (%s)%n", frwk.getName());
-            frwk.enableDebug(new File(KARAF_BASE));
-        }
-        if (nodebug) {
-            if (frwk == null)
-                frwk = getFramework();
-            System.out.printf("Disabling debug for OSGi framework (%s)%n", frwk.getName());
-            frwk.disableDebug(new File(KARAF_BASE));
-        }
-
-        return null;
-    }
-
-
-    public Framework getFramework() {
-        if (bundleContext.getBundle(0).getSymbolicName().contains("felix")) {
-            return new Felix(new File(KARAF_BASE));
-        } else {
-            return new Equinox(new File(KARAF_BASE));
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/PrintStackTraces.java b/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/PrintStackTraces.java
deleted file mode 100644
index 4eacd19..0000000
--- a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/PrintStackTraces.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.dev;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.karaf.shell.console.jline.Console;
-import org.osgi.framework.Bundle;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static java.lang.String.format;
-
-/**
- * Command for showing the full tree of bundles that have been used to resolve
- * a given bundle.
- */
-@Command(scope = "dev", name = "print-stack-traces", description = "Prints the full stack trace in the console when the execution of a command throws an exception.")
-public class PrintStackTraces extends OsgiCommandSupport {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(PrintStackTraces.class);
-
-    @Argument(name = "print", description="Print stack traces or not", required = false, multiValued = false)
-    boolean print = true;
-
-    protected Object doExecute() throws Exception {
-        session.put(Console.PRINT_STACK_TRACES, Boolean.valueOf(print));
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/Restart.java b/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/Restart.java
deleted file mode 100644
index 49b4d43..0000000
--- a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/Restart.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.dev;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-
-/**
- * A command to restart karaf
- */
-@Command(scope = "dev", name = "restart", description = "Restart Karaf.")
-public class Restart  extends OsgiCommandSupport {
-
-    @Option(name = "-c", aliases = { "--clean" }, description = "Force a clean restart by deleting the working directory")
-    private boolean clean;
-
-    @Override
-    protected Object doExecute() throws Exception {
-        System.setProperty("karaf.restart", "true");
-        System.setProperty("karaf.restart.clean", Boolean.toString(clean));
-        bundleContext.getBundle(0).stop();
-        return null;
-    }
-}
diff --git a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/ShowBundleTree.java b/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/ShowBundleTree.java
deleted file mode 100644
index ffe0572..0000000
--- a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/ShowBundleTree.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.dev;
-
-import static java.lang.String.format;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashSet;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.karaf.shell.dev.util.Bundles;
-import org.apache.karaf.shell.dev.util.Import;
-import org.apache.karaf.shell.dev.util.Node;
-import org.apache.karaf.shell.dev.util.Tree;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.packageadmin.ExportedPackage;
-import org.osgi.service.packageadmin.PackageAdmin;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Command for showing the full tree of bundles that have been used to resolve
- * a given bundle.
- */
-@Command(scope = "dev", name = "show-tree", description = "Shows the tree of bundles based on the wiring information.")
-public class ShowBundleTree extends AbstractBundleCommand {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(ShowBundleTree.class);
-
-    private Tree<Bundle> tree;
-
-    @Override
-    protected void doExecute(Bundle bundle) throws Exception {
-        long start = System.currentTimeMillis();
-        // let's do the real work here
-        printHeader(bundle);
-        tree = new Tree<Bundle>(bundle);
-        createTree(bundle);
-        printTree(tree);
-        printDuplicatePackages(tree);
-        LOGGER.debug(format("Dependency tree calculated in %d ms",
-                            System.currentTimeMillis() - start));
-    }
-
-    /*
-     * Print the header
-     */
-    private void printHeader(Bundle bundle) {
-        System.out.printf("Bundle %s [%s] is currently %s%n",
-                bundle.getSymbolicName(),
-                bundle.getBundleId(),
-                Bundles.toString(bundle.getState()));
-    }
-
-    /*
-     * Print the dependency tree
-     */
-    private void printTree(Tree<Bundle> tree) {
-        System.out.printf("%n");
-        tree.write(System.out, new Tree.Converter<Bundle>() {
-
-            public String toString(Node<Bundle> node) {
-                return String.format("%s [%s]",
-                                     node.getValue().getSymbolicName(),
-                                     node.getValue().getBundleId());
-            }
-        });
-    }
-
-    /*
-     * Check for bundles in the tree exporting the same package
-     * as a possible cause for 'Unresolved constraint...' on a uses-conflict
-     */
-    private void printDuplicatePackages(Tree<Bundle> tree) {
-        Set<Bundle> bundles = tree.flatten();
-        Map<String, Set<Bundle>> exports = new HashMap<String, Set<Bundle>>();
-
-        for (Bundle bundle : bundles) {
-            ExportedPackage[] packages = getPackageAdmin().getExportedPackages(bundle);
-            if (packages != null) {
-                for (ExportedPackage p : packages) {
-                    if (exports.get(p.getName()) == null) {
-                        exports.put(p.getName(), new HashSet<Bundle>());
-                    }
-                    exports.get(p.getName()).add(bundle);
-                }
-            }
-        }
-
-        for (String pkg : exports.keySet()) {
-            if (exports.get(pkg).size() > 1) {
-                System.out.printf("%n");
-                System.out.printf("WARNING: multiple bundles are exporting package %s%n", pkg);
-                for (Bundle bundle : exports.get(pkg)) {
-                    System.out.printf("- %s%n", bundle);
-                }
-            }
-        }
-    }
-
-    /*
-     * Creates the bundle tree
-     */
-    protected void createTree(Bundle bundle) {
-        if (bundle.getState() >= Bundle.RESOLVED) {
-            createNode(tree);
-        } else {
-            createNodesForImports(tree, bundle);
-        }
-    }
-
-    /*
-     * Creates nodes for the imports of the bundle (instead of reporting wiring information
-     */
-    private void createNodesForImports(Node node, Bundle bundle) {
-        for (Import i : Import.parse(String.valueOf(bundle.getHeaders().get("Import-Package")),
-                                     String.valueOf(bundle.getHeaders().get("Export-Package")))) {
-            createNodeForImport(node, bundle, i);
-        }
-    }
-
-    /*
-     * Create a child node for a given import (by finding a matching export in the currently installed bundles)
-     */
-    private void createNodeForImport(Node node, Bundle bundle, Import i) {
-        ExportedPackage[] exporters = getPackageAdmin().getExportedPackages(i.getPackage());
-        boolean foundMatch = false;
-        if (exporters != null) {
-            for (ExportedPackage ep : exporters) {
-                if (i.getVersion().contains(ep.getVersion())) {
-                    if (bundle.equals(ep.getExportingBundle())) {
-                        foundMatch = true;
-                    } else {
-                        Node child = node.addChild(ep.getExportingBundle());
-                        System.out.printf("- import %s: resolved using %s%n", i, ep.getExportingBundle());
-                        foundMatch = true;
-                        createNode(child);
-                    }
-                }
-            }
-        }
-        if (!foundMatch) {
-            System.out.printf("- import %s: WARNING - unable to find matching export%n", i);            
-        }
-    }
-
-    /*
-     * Creates a node in the bundle tree
-     */
-    private void createNode(Node<Bundle> node) {
-        Bundle bundle = node.getValue();
-        Collection<Bundle> exporters = new HashSet<Bundle>();
-        exporters.addAll(getWiredBundles(bundle).values());
-
-        for (Bundle exporter : exporters) {
-            if (node.hasAncestor(exporter)) {                
-                LOGGER.debug(format("Skipping %s (already exists in the current branch)", exporter));
-            } else {
-                boolean existing = tree.flatten().contains(exporter);
-                LOGGER.debug(format("Adding %s as a dependency for %s", exporter, bundle));
-                Node child = node.addChild(exporter);
-                if (existing) {
-                    LOGGER.debug(format("Skipping children of %s (already exists in another branch)", exporter));
-                } else {
-                    createNode(child);
-                }
-            }
-        }
-    }
-}
diff --git a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/SystemProperty.java b/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/SystemProperty.java
deleted file mode 100644
index 87a4c42..0000000
--- a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/SystemProperty.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.dev;
-
-import java.io.File;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.utils.properties.Properties;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-
-/**
- * Command that allow access to system properties easily.
- */
-@Command(scope = "dev", name = "system-property", description = "Get or set a system property.")
-public class SystemProperty extends OsgiCommandSupport {
-
-    @Option(name = "-p", aliases = { "--persistent" }, description = "Persist the new value to the etc/system.properties file")
-    boolean persistent;
-
-    @Argument(index = 0, name = "key", description = "The system property name")
-    String key;
-
-    @Argument(index = 1, name = "value", required = false, description = "New value for the system property")
-    String value;
-
-    @Override
-    protected Object doExecute() throws Exception {
-        if (value != null) {
-            if (persistent) {
-                String base = System.getProperty("karaf.base");
-                Properties props = new Properties(new File(base, "etc/system.properties"));
-                props.put(key, value);
-                props.save();
-            }
-            return System.setProperty(key, value);
-        } else {
-            return System.getProperty(key);
-        }
-    }
-}
diff --git a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/WaitForService.java b/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/WaitForService.java
deleted file mode 100644
index 2e7c526..0000000
--- a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/WaitForService.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.dev;
-
-import java.util.concurrent.TimeoutException;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.osgi.framework.Constants;
-import org.osgi.framework.Filter;
-import org.osgi.framework.FrameworkUtil;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * Command that can be used to wait for an OSGi service.
- */
-@Command(scope = "dev", name = "wait-for-service", description = "Wait for a given OSGi service.")
-public class WaitForService extends OsgiCommandSupport {
-
-    @Option(name = "-e", aliases = { "--exception" }, description = "throw an exception if the service is not found after the timeout")
-    boolean exception;
-
-    @Option(name = "-t", aliases = { "--timeout" }, description = "timeout to wait for the service (in milliseconds, negative to not wait at all, zero to wait forever)")
-    long timeout = 0;
-
-    @Argument(name = "service", description="The service class or filter", required = true, multiValued = false)
-    String service;
-
-    @Override
-    protected Object doExecute() throws Exception {
-        ServiceTracker tracker = null;
-        try {
-            String filter = service;
-            if (!filter.startsWith("(")) {
-                if (!filter.contains("=")) {
-                    filter = Constants.OBJECTCLASS + "=" + filter;
-                }
-                filter = "(" + filter + ")";
-            }
-            Filter osgiFilter = FrameworkUtil.createFilter(filter);
-            tracker = new ServiceTracker(bundleContext, osgiFilter, null);
-            tracker.open(true);
-            Object svc = tracker.getService();
-            if (timeout >= 0) {
-                svc = tracker.waitForService(timeout);
-            }
-            if (exception && svc == null) {
-                throw new TimeoutException("Can not find service '" + service + "' in the OSGi registry");
-            }
-            return svc != null;
-        } catch (InvalidSyntaxException e) {
-            throw new IllegalArgumentException("Invalid filter", e);
-        } catch (InterruptedException e) {
-            throw new RuntimeException(e);
-        } finally {
-            if (tracker != null) {
-                tracker.close();
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/Watch.java b/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/Watch.java
deleted file mode 100644
index e4de87f..0000000
--- a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/Watch.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.dev;
-
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.karaf.shell.dev.watch.BundleWatcher;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.Constants;
-
-@Command(scope = "dev", name = "watch", description = "Watches and updates bundles.", detailedDescription="classpath:watch.txt")
-public class Watch extends OsgiCommandSupport {
-
-    @Argument(index = 0, name = "urls", description = "The bundle IDs or URLs", required = false, multiValued = true)
-    List<String> urls;
-
-    @Option(name = "-i", aliases = {}, description = "Watch interval", required = false, multiValued = false)
-    private long interval;
-
-    @Option(name = "--start", description = "Starts watching the selected bundles", required = false, multiValued = false)
-    protected boolean start;
-
-    @Option(name = "--stop", description = "Stops watching all bundles", required = false, multiValued = false)
-    protected boolean stop;
-
-    @Option(name = "--remove", description = "Removes bundles from the watch list", required = false, multiValued = false)
-    protected boolean remove;
-
-    @Option(name = "--list", description = "Displays the watch list", required = false, multiValued = false)
-    protected boolean list;
-
-    private BundleWatcher watcher;
-
-    @Override
-    protected Object doExecute() throws Exception {
-
-        if (start && stop) {
-            System.err.println("Please use only one of --start and --stop options!");
-            return null;
-        }
-
-        if (interval > 0) {
-            System.out.println("Setting watch interval to " + interval + " ms");
-            watcher.setInterval(interval);
-        }
-        if (stop) {
-            System.out.println("Stopping watch");
-            watcher.stop();
-        }
-        if (urls != null) {
-            if (remove) {
-                for (String url : urls) {
-                    watcher.remove(url);
-                }
-            } else {
-                for (String url : urls) {
-                    watcher.add(url);
-                }
-            }
-        }
-        if (start) {
-            System.out.println("Starting watch");
-            watcher.start();
-        }
-
-        if (list) { //List the watched bundles.
-            String format = "%-40s %6s %-80s";
-            System.out.println(String.format(format, "URL", "ID", "Bundle Name"));
-            for (String url : watcher.getWatchURLs()) {
-
-                List<Bundle> bundleList = watcher.getBundlesByURL(url);
-                if (bundleList != null && bundleList.size() > 0) {
-                    for (Bundle bundle : bundleList) {
-                        System.out.println(String.format(format, url, bundle.getBundleId(), bundle.getHeaders().get(Constants.BUNDLE_NAME)));
-                    }
-                } else {
-                    System.out.println(String.format(format, url, "", ""));
-                }
-            }
-        } else {
-            List<String> urls = watcher.getWatchURLs();
-            if (urls != null && urls.size()>0) {
-                System.out.println("Watched URLs/IDs: ");
-                for (String url : watcher.getWatchURLs()) {
-                    System.out.println(url);
-                }
-            } else {
-                System.out.println("No watched URLs/IDs");
-            }
-        }
-
-        return null;
-    }
-
-    public BundleWatcher getWatcher() {
-        return watcher;
-    }
-
-    public void setWatcher(BundleWatcher watcher) {
-        this.watcher = watcher;
-    }
-}
-
-
-
-
-
-
-
-
diff --git a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/framework/Equinox.java b/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/framework/Equinox.java
deleted file mode 100644
index 8229c35..0000000
--- a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/framework/Equinox.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.dev.framework;
-
-import java.io.File;
-import java.io.IOException;
-
-import org.apache.karaf.shell.dev.util.IO;
-
-/**
- * Represents Eclipse's Equinox as the underlying OSGi framework
- */
-public class Equinox extends Framework {
-
-    public static final String NAME = "Equinox";
-
-    /**
-     * Create a new instance
-     *
-     * @param base 
-     */
-    public Equinox(File base) {
-        super(base);
-    }
-
-    public String getName() {
-        return NAME;
-    }
-
-    public void enableDebug(File directory) throws IOException {
-        setConfigProperty("osgi.debug", "etc/equinox-debug.properties");
-        saveConfigProperties();
-
-        System.out.printf("- set osgi.debug=etc/equinox-debug.properties in etc/config.properties%n");
-
-        File debug = new File(directory, "etc/equinox-debug.properties");
-        if (!debug.exists()) {
-            IO.copyTextToFile(
-                    Equinox.class.getResourceAsStream("equinox-debug.properties"),
-                    debug);
-            System.out.printf("- created etc/equinox-debug.properties to configure Equinox debugging options%n");
-        }
-
-        System.out.printf("%nEnable specific debug options in etc/equinox-debug.properties%n");
-        System.out.printf("and restart Karaf now to enable Equinox debug logging%n");
-    }
-
-    @Override
-    public void disableDebug(File directory) throws IOException {
-        removeConfigProperty("osgi.debug");
-        saveConfigProperties();
-        
-        System.out.printf("- removed osgi.debug from etc/config.properties%n%n");
-        System.out.printf("Restart Karaf now to disable Equinox debug logging%n");
-
-    }
-}
diff --git a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/framework/Felix.java b/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/framework/Felix.java
deleted file mode 100644
index ec1fc93..0000000
--- a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/framework/Felix.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.dev.framework;
-
-import java.io.File;
-import java.io.IOException;
-
-/**
- * Represents Apache Felix as the underlying OSGi platform
- */
-public class Felix extends Framework {
-
-    public static final String NAME = "Felix";
-
-    /**
-     * Create a instance of Karaf running with Felix in the given base directory
-     *
-     * @param base the base directory
-     */
-    public Felix(File base) {
-        super(base);
-    }
-
-    public String getName() {
-        return NAME;
-    }
-
-    public void enableDebug(File directory) throws IOException {
-        setConfigProperty("felix.log.level", "4");
-        saveConfigProperties();
-        
-        System.out.printf("- set felix.log.level=4 in etc/config.properties%n%n");
-        System.out.printf("Restart Karaf now to enable Felix debug logging%n");
-    }
-
-    public void disableDebug(File directory) throws IOException {
-        removeConfigProperty("felix.log.level");
-        saveConfigProperties();
-
-        System.out.printf("- removed felix.log.level from etc/config.properties%n%n");
-        System.out.printf("Restart Karaf now to disable Felix debug logging%n");
-    }
-}
diff --git a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/framework/Framework.java b/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/framework/Framework.java
deleted file mode 100644
index 94a1ae3..0000000
--- a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/framework/Framework.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.dev.framework;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Date;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * Class to represent the underlying OSGi framework
- */
-public abstract class Framework {
-
-    /*
-     * The Karaf base directory
-     */
-    private File base;
-
-    /*
-     * The contents of the etc/config.properties file
-     */
-    private List<String> config;
-
-    /**
-     * Create a instance of this framework in the given base directory
-     *
-     * @param base the base directory
-     */
-    public Framework(File base) {
-        super();
-        this.base = base;
-    }
-
-    /**
-     * Get the underlying OSGi framework name
-     */
-    public abstract String getName();
-
-    /**
-     * Enable the OSGi framework's debug logging
-     *
-     * @param directory the directory containing the Karaf installation
-     * @throws IOException when a problem occurs configuring debug settings
-     */
-    public abstract void enableDebug(File directory) throws IOException;
-
-    /**
-     * Disable the OSGI framework's debug logging
-     *
-     * @param directory the Karaf base installation directory
-     * @throws IOException when a problem occurs removing debug configuration settings
-     */
-    public abstract void disableDebug(File directory) throws IOException;
-
-    /*
-     * Save the etc/config.properties file
-     */
-    protected void saveConfigProperties() throws IOException {
-        PrintWriter writer = null;
-        try {
-            writer = new PrintWriter(new File(base, "etc/config.properties"));
-            for (String line : getConfig()) {
-                writer.printf("%s%n", line);
-            }
-            writer.flush();
-            writer.close();
-        } finally {
-            if (writer != null) {
-                writer.close();
-            }
-        }
-    }
-
-    protected List<String> readPropertyFile(File config) throws IOException {
-        List<String> result = new LinkedList<String>();
-        BufferedReader reader = new BufferedReader(new FileReader(config));
-        String line = reader.readLine();
-        while (line != null) {
-            result.add(line);
-            line = reader.readLine();
-        }
-        return result;
-    }
-
-    /**
-     * Set a new key and value in the etc/config.properties - if the given key
-     * already exists, the existing value will be overwritten
-     *
-     * @param key property key
-     * @param value property value
-     * @throws IOException if the etc/config.properties file can not be read
-     */
-    protected void setConfigProperty(String key, String value) throws IOException {
-        boolean done = false;
-
-        for (int i = 0 ; i < getConfig().size() ; i++) {
-            if (getConfig().get(i).startsWith(key)) {
-                getConfig().set(i, java.lang.String.format("%s=%s", key, value));
-                done = true;
-            }
-        }
-
-        if (!done) {
-            getConfig().add("");
-            getConfig().add(java.lang.String.format("%s=%s", key, value, new Date()));
-        }
-    }
-
-    /**
-     * Remove an existing key from the etc/config.properties file
-     *
-     * @param key the key
-     * @throws IOException if the etc/config.properties file can not be read
-     */
-    protected void removeConfigProperty(String key) throws IOException {
-        for (int i = 0 ; i < getConfig().size() ; i++) {
-            if (getConfig().get(i).startsWith(key)) {
-                getConfig().remove(i);
-            }
-        }
-    }
-
-    /**
-     * Access the contents of the etc/config.properties file
-     *
-     * @return the contents of the file
-     * @throws IOException if the etc/config.properties file can not be read
-     */
-    public List<String> getConfig() throws IOException {
-        if (config == null) {
-            config = readPropertyFile(new File(base, "etc/config.properties"));
-        }
-        return config;
-    }
-}
diff --git a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/util/Bundles.java b/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/util/Bundles.java
deleted file mode 100644
index 6b6adaf..0000000
--- a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/util/Bundles.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.dev.util;
-
-import org.osgi.framework.Bundle;
-
-/**
- * A set of utility methods for working with {@link org.osgi.framework.Bundle}s
- */
-public class Bundles {
-
-    /**
-     * Return a String representation of a bundle state
-     */
-    public static String toString(int state) {
-        switch (state) {
-            case Bundle.UNINSTALLED : return "UNINSTALLED";
-            case Bundle.INSTALLED : return "INSTALLED";
-            case Bundle.RESOLVED: return "RESOLVED";
-            case Bundle.STARTING : return "STARTING";
-            case Bundle.STOPPING : return "STOPPING";
-            case Bundle.ACTIVE : return "ACTIVE";
-            default : return "UNKNOWN";
-        }
-    }
-}
diff --git a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/util/IO.java b/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/util/IO.java
deleted file mode 100644
index 7873f3e..0000000
--- a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/util/IO.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.dev.util;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.util.Scanner;
-
-/**
- * Helper class for I/O operations
- */
-public class IO {
-
-    /**
-     * Write text from an InputStream to a file
-     */
-    public static void copyTextToFile(InputStream stream, File file) throws IOException {
-        PrintWriter writer = null;
-        Scanner scanner = null;
-
-        try {
-            scanner = new Scanner(stream);
-            writer = new PrintWriter(file);
-
-            while (scanner.hasNextLine()) {
-                writer.printf("%s%n", scanner.nextLine());
-            }
-
-            writer.flush();
-        } finally {
-            if (scanner != null) {
-                scanner.close();
-            }
-            if (writer != null) {
-                writer.close();
-            }
-        }
-    }
-}
diff --git a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/util/Import.java b/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/util/Import.java
deleted file mode 100644
index 842e065..0000000
--- a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/util/Import.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.dev.util;
-
-import java.util.LinkedList;
-import java.util.List;
-
-import org.apache.felix.utils.version.VersionRange;
-
-/**
- * Simple class to model an OSGi Import-Package
- */
-public class Import {
-
-    private final String packageName;
-    private final VersionRange version;
-    private final String value;
-
-    /**
-     * Create a new import based on the string value found in MANIFEST.MF
-     *
-     * @param value the MANIFEST.MF value
-     */
-    protected Import(String value) {
-        super();
-        this.value = value;
-        this.packageName = extractPackageName(value);
-        if (value.contains("version=")) {
-            this.version = extractVersion(value);
-        } else {
-            this.version = VersionRange.ANY_VERSION;
-        }
-    }
-
-    /*
-     * Extract the version from the string
-     */
-    private VersionRange extractVersion(String value) {
-        int begin = value.indexOf("version=") + 8;
-        int end = value.indexOf(";", begin);
-        if (end < 0) {
-            return VersionRange.parseVersionRange(unquote(value.substring(begin)));
-        } else {
-            return VersionRange.parseVersionRange(unquote(value.substring(begin, end)));
-        }
-    }
-
-    /*
-     * Remove leading/trailing quotes
-     */
-    private String unquote(String string) {
-        return string.replace("\"", "");
-    }
-
-    public String getPackage() {
-        return packageName;  
-    }
-
-    public VersionRange getVersion() {
-        return version;
-    }
-
-    @Override
-    public String toString() {
-        return value;
-    }
-
-    /**
-     * Parse the value of an Import-Package META-INF header and return
-     * a list of Import instances
-     */
-    public static List<Import> parse(String value) {
-        LinkedList<Import> imports = new LinkedList<Import>();
-        for (String imp : split(value)) {
-            imports.add(new Import(imp));
-        }
-        return imports;
-    }
-
-    /**
-     * Parse the value of an Import-Package META-INF header and return
-     * a list of Import instances, filtering out packages that are in the
-     * Export-Package META-INF header
-     *
-     * @param importValue the value of the Import-Package header
-     * @param exportValue the value of the Export-Package header
-     */
-    public static List<Import> parse(String importValue, String exportValue) {
-        LinkedList<String> exports = new LinkedList<String>();
-        for (String exp : split(exportValue)) {
-            exports.add(extractPackageName(exp));
-        }
-        LinkedList<Import> imports = new LinkedList<Import>();
-        for (Import imp : parse(importValue)) {
-            if (!exports.contains(imp.getPackage())) {
-                imports.add(imp);
-            }
-        }
-        return imports;
-    }
-
-    /*
-     * Extract the package name from the value
-     * e.g. org.apache.karaf;version="1.x" -> org.apache.karaf
-     */
-    private static String extractPackageName(String value) {
-        if (value.contains(";")) {
-            return value.split(";")[0];
-        } else {
-            return value;
-        }
-    }
-
-    /*
-     * Counts the number of quotes in a String value
-     */
-    private static int quotes(String value) {
-        return value.replaceAll("[^\"]", "").length();
-    }
-
-    /*
-     * Split the OSGi headers on the , symbol
-     */
-    private static List<String> split(String value) {
-        List<String> result = new LinkedList<String>();
-        String[] elements = value.split(",");
-        for (int i = 0; i < elements.length ; i++) {
-            if (quotes(elements[i]) % 2 == 1) {
-                // we probably split a version range, so joining it again with the next element
-                result.add(elements[i] + "," + elements[++i]);
-            } else {
-                result.add(elements[i]);
-            }
-        }
-        return result;
-    }
-}
diff --git a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/util/Node.java b/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/util/Node.java
deleted file mode 100644
index b3a867d..0000000
--- a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/util/Node.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.dev.util;
-
-import java.io.PrintWriter;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Represents a node in a {@link org.apache.karaf.shell.dev.util.Tree}
- */
-public class Node<T> {
-    
-    private final T value;
-    private Node<T> parent;
-    private List<Node<T>> children = new LinkedList<Node<T>>();
-
-    /**
-     * Creates a new node. Only meant for internal use,
-     * new nodes should be added using the {@link #addChild(Object)} method
-     *
-     * @param value the node value
-     */
-    protected Node(T value) {
-        super();
-        this.value = value;
-    }
-
-    /**
-     * Creates a new node. Only meant for internal use,
-     * new nodes should be added using the {@link #addChild(Object)} method
-     *
-     * @param value the node value
-     */
-    protected Node(T value, Node<T> parent) {
-        this(value);
-        this.parent = parent;
-    }
-
-    /**
-     * Access the node's value
-     */
-    public T getValue() {
-        return value;
-    }
-
-    /**
-     * Access the node's child nodes
-     */
-    public List<Node<T>> getChildren() {
-        return children;
-    }
-
-    /**
-     * Adds a child to this node
-     *
-     * @param value the child's value
-     * @return the child node
-     */
-    public Node addChild(T value) {
-        Node node = new Node(value, this);
-        children.add(node);
-        return node;
-    }
-
-    /**
-     * Give a set of values in the tree.
-     *
-     * @return
-     */
-    public Set<T> flatten() {
-        Set<T> result = new HashSet<T>();
-        result.add(getValue());
-        for (Node<T> child : getChildren()) {
-            result.addAll(child.flatten());
-        }
-        return result;
-    }
-
-    /**
-     * Check if the node has an ancestor that represents the given value
-     *
-     * @param value the node value
-     * @return <code>true</code> it there's an ancestor that represents the value
-     */
-    public boolean hasAncestor(T value) {
-        if (parent == null) {
-            return false;
-        } else {
-            return value.equals(parent.value) || parent.hasAncestor(value);
-        }
-    }
-
-    /*
-     * Write this node to the PrintWriter.  It should be indented one step
-     * further for every element in the indents array.  If an element in the
-     * array is <code>true</code>, there should be a | to connect to the next
-     * sibling.
-     */
-    protected void write(PrintWriter writer, Tree.Converter<T> converter, boolean... indents) {
-        for (boolean indent : indents) {
-            writer.printf("%-3s", indent ? "|" : "");
-        }
-        writer.printf("+- %s%n", converter.toString(this));
-        for (Node<T> child : getChildren()) {
-            child.write(writer, converter, concat(indents, hasNextSibling()));
-        }
-    }
-
-    /*
-     * Is this node the last child node for its parent
-     * or is there a next sibling?
-     */
-    private boolean hasNextSibling() {
-        if (parent == null) {
-            return false;
-        } else {
-            return parent.getChildren().size() > 1
-                    && parent.getChildren().indexOf(this) < parent.getChildren().size() - 1;
-        }
-    }
-
-    /*
-     * Add an element to the end of the array
-     */
-    private boolean[] concat(boolean[] array, boolean element) {
-        boolean[] result = new boolean[array.length + 1];
-        for (int i = 0 ; i < array.length ; i++) {
-            result[i] = array[i];
-        }
-        result[array.length] = element;
-        return result;
-    }
-}
diff --git a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/util/Tree.java b/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/util/Tree.java
deleted file mode 100644
index 6c92faf..0000000
--- a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/util/Tree.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.dev.util;
-
-import java.io.ByteArrayOutputStream;
-import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * Represents a tree that can be written to the console.
- *
- * The output will look like this:
- * <pre>
- * root
- * +- child1
- * |  +- grandchild
- * +- child2
- * </pre>
- */
-public class Tree<T> extends Node<T> {
-
-    /**
-     * Creates a new tree with the given root node
-     *
-     * @param root the root node
-     */
-    public Tree(T root) {
-        super(root);
-    }
-
-    /**
-     * Write the tree to a PrintStream, using the default toString() method to output the node values
-     *
-     * @param stream
-     */
-    public void write(PrintStream stream) {
-        write(new PrintWriter(stream));
-    }
-
-    /**
-     * Write the tree to a PrintStream, using the provided converter to output the node values
-     *
-     * @param stream
-     * @param converter
-     */
-    public void write(PrintStream stream, Converter<T> converter) {
-        write(new PrintWriter(stream), converter);
-    }
-
-    /**
-     * Write the tree to a PrintWriter, using the default toString() method to output the node values
-     *
-     * @param writer
-     */
-    public void write(PrintWriter writer) {
-        write(writer, new Converter() {
-            public String toString(Node node) {
-                return node.getValue().toString();
-            }
-        });
-    }
-
-    /**
-     * Write the tree to a PrintWriter, using the provided converter to output the node values
-     *
-     * @param writer
-     * @param converter
-     */
-    public void write(PrintWriter writer, Converter<T> converter) {
-        writer.printf("%s%n", converter.toString(this));
-        for (Node<T> child : getChildren()) {
-            child.write(writer, converter);
-        }
-        writer.flush();
-    }
-
-    /**
-     * Interface to convert node values to string
-     *
-     * @param <T> the object type for the node value
-     */
-    public static interface Converter<T> {
-
-        public String toString(Node<T> node);
-
-    }
-}
diff --git a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/watch/BundleWatcher.java b/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/watch/BundleWatcher.java
deleted file mode 100644
index e7b492d..0000000
--- a/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/watch/BundleWatcher.java
+++ /dev/null
@@ -1,323 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.dev.watch;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.util.ArrayList;
-import java.util.Dictionary;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import org.ops4j.pax.url.maven.commons.MavenConfiguration;
-import org.ops4j.pax.url.maven.commons.MavenConfigurationImpl;
-import org.ops4j.pax.url.maven.commons.MavenRepositoryURL;
-import org.ops4j.pax.url.mvn.ServiceConstants;
-import org.ops4j.pax.url.mvn.internal.Parser;
-import org.ops4j.util.property.DictionaryPropertyResolver;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleEvent;
-import org.osgi.framework.BundleException;
-import org.osgi.framework.BundleListener;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
-import org.osgi.service.packageadmin.PackageAdmin;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * A Runnable singleton which watches at the defined location for bundle updates.
- */
-public class BundleWatcher implements Runnable, BundleListener {
-
-    private final Logger logger = LoggerFactory.getLogger(BundleWatcher.class);
-
-    private BundleContext bundleContext;
-    private ConfigurationAdmin configurationAdmin;
-
-    private AtomicBoolean running = new AtomicBoolean(false);
-    private long interval = 1000L;
-    private List<String> watchURLs = new CopyOnWriteArrayList<String>();
-    private AtomicInteger counter = new AtomicInteger(0);
-
-
-    /**
-     * Constructor
-     */
-    public BundleWatcher() {
-    }
-
-    public void bundleChanged(BundleEvent event) {
-        if (event.getType() == BundleEvent.INSTALLED
-                || event.getType() == BundleEvent.UNINSTALLED) {
-            counter.incrementAndGet();
-        }
-    }
-
-    public void run() {
-        logger.debug("Bundle watcher thread started");
-        int oldCounter = -1;
-        Set<Bundle> watchedBundles = new HashSet<Bundle>();
-        while (running.get() && watchURLs.size()>0) {
-            if (oldCounter != counter.get()) {
-                oldCounter = counter.get();
-                watchedBundles.clear();
-                for (String bundleURL : watchURLs) {
-                    for (Bundle bundle : getBundlesByURL(bundleURL)) {
-                        watchedBundles.add(bundle);
-                    }
-                }
-            }
-            if (watchedBundles.size()>0) {
-                File localRepository = getLocalRepository();
-                List<Bundle> updated = new ArrayList<Bundle>();
-                for (Bundle bundle : watchedBundles) {
-                    try {
-                        File location = getBundleExternalLocation(localRepository, bundle);
-                        if (location != null
-                                && location.exists()
-                                && location.lastModified() > bundle.getLastModified())
-                        {
-                            InputStream is = new FileInputStream(location);
-                            try {
-                                logger.info("[Watch] Updating watched bundle: " + bundle.getSymbolicName() + " (" + bundle.getVersion() + ")");
-                                System.out.println("[Watch] Updating watched bundle: " + bundle.getSymbolicName() + " (" + bundle.getVersion() + ")");
-                                bundle.update(is);
-                                updated.add(bundle);
-                            } finally {
-                                is.close();
-                            }
-                        }
-                    } catch (IOException ex) {
-                        logger.error("Error watching bundle.", ex);
-                    } catch (BundleException ex) {
-                        logger.error("Error updating bundle.", ex);
-                    }
-                }
-                ServiceReference ref = null;
-                try {
-                    ref = getBundleContext().getServiceReference(PackageAdmin.class.getName());
-                    PackageAdmin pa = (PackageAdmin) getBundleContext().getService(ref);
-                    pa.refreshPackages(updated.toArray(new Bundle[updated.size()]));
-                } finally {
-                    if (ref != null) {
-                        getBundleContext().ungetService(ref);
-                    }
-                }
-            }
-            try {
-                Thread.sleep(interval);
-            } catch (InterruptedException ex) {
-                running.set(false);
-            }
-        }
-
-        if (logger.isDebugEnabled()) {
-            logger.debug("Bundle watcher thread stopped");
-        }
-    }
-
-    /**
-     * Adds a Bundle URLs to the watch list.
-     * @param url
-     */
-    public void add(String url) {
-        boolean shouldStart = running.get() && (watchURLs.size()==0);
-        if (!watchURLs.contains(url)) {
-            watchURLs.add(url);
-            counter.incrementAndGet();
-        }
-        if (shouldStart) {
-            Thread thread = new Thread(this);
-            thread.start();
-        }
-    }
-
-    /**
-     * Removes a bundle URLs from the watch list.
-     * @param url
-     */
-    public void remove(String url) {
-        watchURLs.remove(url);
-        counter.incrementAndGet();
-    }
-
-    /**
-     * Returns the location of the Bundle inside the local maven repository.
-     * @param bundle
-     * @return
-     */
-    public File getBundleExternalLocation(File localRepository, Bundle bundle) {
-        try {
-            Parser p = new Parser(bundle.getLocation().substring(4));
-            return new File(localRepository.getPath() + File.separator + p.getArtifactPath());
-        } catch (MalformedURLException e) {
-            logger.error("Could not parse artifact path for bundle" + bundle.getSymbolicName(), e);
-        }
-        return null;
-    }
-
-    public File getLocalRepository() {
-        // Attempt to retrieve local repository location from MavenConfiguration
-        MavenConfiguration configuration = retrieveMavenConfiguration();
-        if (configuration != null) {
-            MavenRepositoryURL localRepositoryURL = configuration.getLocalRepository();
-            if (localRepositoryURL != null) {
-                return localRepositoryURL.getFile().getAbsoluteFile();
-            }
-        }
-        // If local repository not found assume default.
-        String localRepo = System.getProperty("user.home") + File.separator + ".m2" + File.separator + "repository";
-        return new File(localRepo).getAbsoluteFile();
-    }
-
-    protected MavenConfiguration retrieveMavenConfiguration() {
-        MavenConfiguration mavenConfiguration = null;
-        try {
-            Configuration configuration = configurationAdmin.getConfiguration(ServiceConstants.PID);
-            if (configuration != null) {
-                Dictionary dictonary = configuration.getProperties();
-                if (dictonary != null) {
-                    DictionaryPropertyResolver resolver = new DictionaryPropertyResolver(dictonary);
-                    mavenConfiguration = new MavenConfigurationImpl(resolver, ServiceConstants.PID);
-                }
-            }
-        } catch (IOException e) {
-            logger.error("Error retrieving maven configuration",e);
-        }
-        return mavenConfiguration;
-    }
-
-    /**
-     * Returns the bundles that match
-     * @param url
-     * @return
-     */
-    public List<Bundle> getBundlesByURL(String url) {
-        List<Bundle> bundleList = new ArrayList<Bundle>();
-        try {
-            Long id = Long.parseLong(url);
-            Bundle bundle = bundleContext.getBundle(id);
-            if (bundle != null) {
-                bundleList.add(bundle);
-            }
-        } catch (NumberFormatException e) {
-            for (int i = 0; i < bundleContext.getBundles().length; i++) {
-                Bundle bundle = bundleContext.getBundles()[i];
-                if (isMavenSnapshotUrl(bundle.getLocation()) && wildCardMatch(bundle.getLocation(), url)) {
-                    bundleList.add(bundle);
-                }
-            }
-        }
-        return bundleList;
-    }
-
-    protected boolean isMavenSnapshotUrl(String url) {
-        return url.startsWith("mvn:") && url.contains("SNAPSHOT");
-    }
-
-    /**
-     * Matches text using a pattern containing wildcards.
-     *
-     * @param text
-     * @param pattern
-     * @return
-     */
-    protected boolean wildCardMatch(String text, String pattern) {
-        String[] cards = pattern.split("\\*");
-        // Iterate over the cards.
-        for (String card : cards) {
-            int idx = text.indexOf(card);
-            // Card not detected in the text.
-            if (idx == -1) {
-                return false;
-            }
-
-            // Move ahead, towards the right of the text.
-            text = text.substring(idx + card.length());
-        }
-        return true;
-    }
-
-
-    public void start() {
-        // register the bundle listener
-        bundleContext.addBundleListener(this);
-        // start the watch thread
-        if (running.compareAndSet(false, true)) {
-            if (watchURLs.size()>0) {
-                Thread thread = new Thread(this);
-                thread.start();
-            }
-        }
-    }
-
-    /**
-     * Stops the execution of the thread and releases the singleton instance
-     */
-    public void stop() {
-        running.set(false);
-        // unregister the bundle listener
-        bundleContext.removeBundleListener(this);
-    }
-
-    public ConfigurationAdmin getConfigurationAdmin() {
-        return configurationAdmin;
-    }
-
-    public void setConfigurationAdmin(ConfigurationAdmin configurationAdmin) {
-        this.configurationAdmin = configurationAdmin;
-    }
-
-    public BundleContext getBundleContext() {
-        return bundleContext;
-    }
-
-    public void setBundleContext(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-
-    public List<String> getWatchURLs() {
-        return watchURLs;
-    }
-
-    public void setWatchURLs(List<String> watchURLs) {
-        this.watchURLs = watchURLs;
-    }
-
-    public long getInterval() {
-        return interval;
-    }
-
-    public void setInterval(long interval) {
-        this.interval = interval;
-    }
-
-    public boolean isRunning() {
-        return running.get();
-    }
-
-}
diff --git a/karaf-2.3.x/shell/dev/src/main/resources/OSGI-INF/blueprint/shell-dev.xml b/karaf-2.3.x/shell/dev/src/main/resources/OSGI-INF/blueprint/shell-dev.xml
deleted file mode 100644
index 64b9943..0000000
--- a/karaf-2.3.x/shell/dev/src/main/resources/OSGI-INF/blueprint/shell-dev.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.0.0">
-        <command name="dev/show-tree">
-            <action class="org.apache.karaf.shell.dev.ShowBundleTree"/>
-        </command>
-        <command name="dev/framework">
-            <action class="org.apache.karaf.shell.dev.FrameworkOptions" />
-        </command>
-        <command name="dev/dynamic-import">
-            <action class="org.apache.karaf.shell.dev.DynamicImport" />
-        </command>
-        <command name="dev/print-stack-traces">
-            <action class="org.apache.karaf.shell.dev.PrintStackTraces" />
-        </command>
-        <command name="dev/restart">
-            <action class="org.apache.karaf.shell.dev.Restart" />
-        </command>
-        <command name="dev/system-property">
-            <action class="org.apache.karaf.shell.dev.SystemProperty" />
-        </command>
-        <command name="dev/wait-for-service">
-            <action class="org.apache.karaf.shell.dev.WaitForService" />
-        </command>
-        <command name="dev/watch">
-            <action class="org.apache.karaf.shell.dev.Watch" >
-                <property name="watcher" ref="watcher"/>
-            </action>
-        </command>
-    </command-bundle>
-
-    <!-- Referenace to the Configuration Admin Service -->
-    <reference id="configurationAdmin" interface="org.osgi.service.cm.ConfigurationAdmin"/>
-
-    <bean id="watcher" class="org.apache.karaf.shell.dev.watch.BundleWatcher" init-method="start" destroy-method="stop">
-        <property name="bundleContext" ref="blueprintBundleContext"/>
-        <property name="configurationAdmin" ref="configurationAdmin"/>
-    </bean>
-
-</blueprint>
diff --git a/karaf-2.3.x/shell/dev/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/shell/dev/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 584148a..0000000
--- a/karaf-2.3.x/shell/dev/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,24 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides shell commands aimed at helping the developer.
-
-    The purpose is provide tooling to help the developer to identify eventual leaks or issues.
-
-    The following commands are available:
-    \u001B[36mdev:dynamic-import\u001B[0m Enables/disables dynamic-import for a given bundle.
-    \u001B[36mdev:framework\u001B[0m OSGi Framework options.
-    \u001B[36mdev:print-stack-traces\u001B[0m Prints the full stack trace in the console when the execution of a command
-     throws an exception.
-    \u001B[36mdev:restart\u001B[0m Restart Karaf.
-    \u001B[36mdev:show-tree\u001B[0m Shows the tree of bundles based on the wiring information.
-    \u001B[36mdev:watch\u001B[0m Watches and updates bundles.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mCommands\u001B[0m section of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/shell/dev/src/main/resources/org/apache/karaf/shell/dev/framework/equinox-debug.properties b/karaf-2.3.x/shell/dev/src/main/resources/org/apache/karaf/shell/dev/framework/equinox-debug.properties
deleted file mode 100644
index b842875..0000000
--- a/karaf-2.3.x/shell/dev/src/main/resources/org/apache/karaf/shell/dev/framework/equinox-debug.properties
+++ /dev/null
@@ -1,111 +0,0 @@
-# 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.
-
-
-#### Debugging options for org.eclipse.osgi
-
-# Turn on general debugging for org.eclipse.osgi
-org.eclipse.osgi/debug=false
-# Prints out class loading debug information
-org.eclipse.osgi/debug/loader=false
-# Prints out event (FrameworkEvent/BundleEvent/ServiceEvent) and listener debug information
-org.eclipse.osgi/debug/events=false
-# Prints out OSGi service debug information (registration/getting/ungetting etc.)
-org.eclipse.osgi/debug/services=false
-# Prints out bundle manifest parsing debug information
-org.eclipse.osgi/debug/manifest=false
-# Prints out LDAP filter debug information
-org.eclipse.osgi/debug/filter=false
-# Prints out security (PermissionAdmin service) debug information
-org.eclipse.osgi/debug/security=false
-# Prints out start level service debug information
-org.eclipse.osgi/debug/startlevel=false
-# Prints out package admin service debug information
-org.eclipse.osgi/debug/packageadmin=false
-# Prints out timing information for bundle activation
-org.eclipse.osgi/debug/bundleTime=false
-# Debug the loading of message bundles
-org.eclipse.osgi/debug/messageBundles=false
-
-# Eclipse adaptor options
-org.eclipse.osgi/eclipseadaptor/debug = false
-org.eclipse.osgi/eclipseadaptor/debug/location = false
-org.eclipse.osgi/eclipseadaptor/debug/platformadmin=false
-org.eclipse.osgi/eclipseadaptor/debug/platformadmin/resolver=false
-org.eclipse.osgi/eclipseadaptor/converter/debug = false
-
-### OSGi resolver options
-# Turns on debugging for the resolver
-org.eclipse.osgi/resolver/debug = false
-# Prints out wiring information after the resolver has completed the resolve process
-org.eclipse.osgi/resolver/wiring = false
-# Prints out Import-Package information
-org.eclipse.osgi/resolver/imports = false
-# Prints out Require-Bundle information
-org.eclipse.osgi/resolver/requires = false
-# Prints out package grouping information form the "uses" clause
-org.eclipse.osgi/resolver/grouping = false
-# Prints out cycle information
-org.eclipse.osgi/resolver/cycles = false
-# Prints out Eclipse-GenericRequire information
-org.eclipse.osgi/resolver/generics = false
-
-#### Profile settings
-org.eclipse.osgi/profile/startup = false
-org.eclipse.osgi/profile/benchmark = false
-org.eclipse.osgi/profile/debug = false
-
-# Override the default implemenation 
-org.eclipse.osgi/profile/impl = org.eclipse.osgi.internal.profile.DefaultProfileLogger
-
-# Append all profile messages to the filename specified
-org.eclipse.osgi/defaultprofile/logfilename =  
-
-# Output all profile log messages synchronously to the jvm console.
-# By default, all log messages are cached until the log buffer is
-# requested.
-org.eclipse.osgi/defaultprofile/logsynchronously = false
-
-# Specify the size of the default profile implementation log buffer.
-org.eclipse.osgi/defaultprofile/buffersize = 256
-
-#### Monitoring settings
-# monitor class loading
-org.eclipse.osgi/monitor/classes=false
-
-# monitor bundle activation
-org.eclipse.osgi/monitor/activation=false
-
-# monitor resource bundle (*.properties) loading
-org.eclipse.osgi/monitor/resources=false
-
-
-#### Trace settings
-# trace class loading - snapshot the execution stack when a class is loaded
-org.eclipse.osgi/trace/classLoading=false
-
-# trace location - file in which execution traces are written
-org.eclipse.osgi/trace/filename=runtime.traces
-
-# trace filters - Java properties file defining which classes should 
-# be traced (if trace/classLoading is true)
-# File format:
-# plugins=<comma separated list of plugins whose classes to trace>
-# packages=<comma separated list of package prefixes of classes to trace>
-# Note that there may be many 'plugins' and 'packages' lines in one file.
-org.eclipse.osgi/trace/filters=trace.properties
-
-# trace bundle activation - snapshot the execution stack when a bundle is activated
-org.eclipse.osgi/trace/activation=false
diff --git a/karaf-2.3.x/shell/dev/src/main/resources/org/apache/karaf/shell/dev/watch.txt b/karaf-2.3.x/shell/dev/src/main/resources/org/apache/karaf/shell/dev/watch.txt
deleted file mode 100644
index ef4016e..0000000
--- a/karaf-2.3.x/shell/dev/src/main/resources/org/apache/karaf/shell/dev/watch.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-The watch command can be used to help at developement time.  It allows you to configure a set of URLs that will be monitored.  All bundles location matching the given URL will be automatically updated.  This avoids the need for manually updating the bundles or even copying the bundle to the system folder if needed.  Note that only maven based urls and maven snapshots will actually be updated automatically, so if you run
-  > dev:watch *
-It will actually monitor all bundles that have a location matching mvn:* that have '-SNAPSHOT' in their url.
diff --git a/karaf-2.3.x/shell/dev/src/test/java/org/apache/karaf/shell/dev/framework/EquinoxTest.java b/karaf-2.3.x/shell/dev/src/test/java/org/apache/karaf/shell/dev/framework/EquinoxTest.java
deleted file mode 100644
index 02d5b9e..0000000
--- a/karaf-2.3.x/shell/dev/src/test/java/org/apache/karaf/shell/dev/framework/EquinoxTest.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.dev.framework;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.Properties;
-
-import org.apache.karaf.shell.dev.util.IO;
-import static org.junit.Assert.*;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Test cases for {@link org.apache.karaf.shell.dev.framework.Equinox}
- */
-public class EquinoxTest {
-
-    private File base;
-    private File etc;
-
-    private Equinox equinox;
-
-    @Before
-    public void setUp() {
-        // creating a dummy karaf instance folder
-        base = new File("target/instances/" + System.currentTimeMillis());
-        base.mkdirs();
-
-        // make sure the etc directory exists
-        etc = new File(base, "etc");
-        etc.mkdirs();
-
-        equinox = new Equinox(base);
-    }
-
-    @Test
-    public void enableDebug() throws IOException {
-        IO.copyTextToFile(
-                EquinoxTest.class.getResourceAsStream("config.properties"),
-                new File(etc, "config.properties"));
-
-        equinox.enableDebug(base);
-
-        Properties properties = new Properties();
-        properties.load(new FileInputStream(new File(base, "etc/config.properties")));
-        assertNotNull(properties.get("osgi.debug"));
-        assertEquals("etc/equinox-debug.properties", properties.get("osgi.debug"));
-
-        assertTrue("Should have created the default Equinox debug config file",
-                   new File(etc, "equinox-debug.properties").exists());
-    }
-
-    @Test
-    public void testDisableDebug() throws IOException {
-        IO.copyTextToFile(
-                EquinoxTest.class.getResourceAsStream("enabled-config.properties"),
-                new File(etc, "config.properties"));
-
-        equinox.disableDebug(base);
-
-        Properties properties = new Properties();
-        properties.load(new FileInputStream(new File(etc, "config.properties")));
-        assertFalse("osgi.debug property should have been removed from the file",
-                    properties.containsKey("osgi.debug"));
-    }
-}
diff --git a/karaf-2.3.x/shell/dev/src/test/java/org/apache/karaf/shell/dev/framework/FelixTest.java b/karaf-2.3.x/shell/dev/src/test/java/org/apache/karaf/shell/dev/framework/FelixTest.java
deleted file mode 100644
index b48c76b..0000000
--- a/karaf-2.3.x/shell/dev/src/test/java/org/apache/karaf/shell/dev/framework/FelixTest.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.dev.framework;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.Properties;
-
-import org.apache.karaf.shell.dev.util.IO;
-import static org.junit.Assert.*;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Test cases for {@link org.apache.karaf.shell.dev.framework.Felix}
- */
-public class FelixTest {
-
-    private File base;
-    private File etc;
-    
-    private Felix felix;
-
-    @Before
-    public void setUp() {
-        // creating a dummy karaf instance folder
-        base = new File("target/instances/" + System.currentTimeMillis());
-        base.mkdirs();
-
-        // make sure the etc directory exists
-        etc = new File(base, "etc");
-        etc.mkdirs();
-
-        felix = new Felix(base);
-    }
-
-    @Test
-    public void enableDebug() throws IOException {
-        IO.copyTextToFile(
-                FelixTest.class.getResourceAsStream("config.properties"),
-                new File(etc, "config.properties"));
-
-        felix.enableDebug(base);
-
-        Properties properties = new Properties();
-        properties.load(new FileInputStream(new File(etc, "config.properties")));
-        assertNotNull(properties.get("felix.log.level"));
-        assertEquals("4", properties.get("felix.log.level"));
-    }
-
-    @Test
-    public void testDisableDebug() throws IOException {
-        IO.copyTextToFile(
-                FelixTest.class.getResourceAsStream("enabled-config.properties"),
-                new File(etc, "config.properties"));
-
-        felix.disableDebug(base);
-
-        Properties properties = new Properties();
-        properties.load(new FileInputStream(new File(etc, "config.properties")));
-        assertFalse(properties.containsKey("felix.log.level"));
-    }
-}
diff --git a/karaf-2.3.x/shell/dev/src/test/java/org/apache/karaf/shell/dev/util/BundlesTest.java b/karaf-2.3.x/shell/dev/src/test/java/org/apache/karaf/shell/dev/util/BundlesTest.java
deleted file mode 100644
index 6e6d7d0..0000000
--- a/karaf-2.3.x/shell/dev/src/test/java/org/apache/karaf/shell/dev/util/BundlesTest.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.dev.util;
-
-import static org.junit.Assert.assertEquals;
-import org.junit.Test;
-import org.osgi.framework.Bundle;
-
-/**
- * Test cases for {@link org.apache.karaf.shell.dev.util.Bundles}
- */
-public class BundlesTest {
-
-    @Test
-    public void testToString() {
-        assertEquals("UNINSTALLED", Bundles.toString(Bundle.UNINSTALLED));
-        assertEquals("INSTALLED", Bundles.toString(Bundle.INSTALLED));
-        assertEquals("RESOLVED", Bundles.toString(Bundle.RESOLVED));
-        assertEquals("STARTING", Bundles.toString(Bundle.STARTING));
-        assertEquals("STOPPING", Bundles.toString(Bundle.STOPPING));
-        assertEquals("ACTIVE", Bundles.toString(Bundle.ACTIVE));
-    }
-}
diff --git a/karaf-2.3.x/shell/dev/src/test/java/org/apache/karaf/shell/dev/util/ImportTest.java b/karaf-2.3.x/shell/dev/src/test/java/org/apache/karaf/shell/dev/util/ImportTest.java
deleted file mode 100644
index 97dcbc0..0000000
--- a/karaf-2.3.x/shell/dev/src/test/java/org/apache/karaf/shell/dev/util/ImportTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.dev.util;
-
-import java.util.List;
-
-import static junit.framework.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import org.apache.felix.utils.version.VersionRange;
-import org.junit.Test;
-
-/**
- * Test cases for {@link org.apache.karaf.shell.dev.util.Import}
- */
-public class ImportTest {
-
-    @Test
-    public void createWithPackageName() {
-        Import i = new Import("org.wip.foo");
-        assertEquals("org.wip.foo", i.getPackage());
-    }
-
-    @Test
-    public void createWithPackageNameAndVersion() {
-        Import i = new Import("org.wip.bar;version=\"2.0.0\"");
-        assertEquals("org.wip.bar", i.getPackage());
-        assertEquals(VersionRange.parseVersionRange("2.0.0"), i.getVersion());
-    }
-
-    @Test
-    public void createListOfImports() {
-        List<Import> imports = Import.parse("org.wip.bar;version=\"2.0.0\",org.wip.foo");
-        assertNotNull(imports);
-        assertEquals(2, imports.size());
-        assertEquals("org.wip.bar", imports.get(0).getPackage());
-        assertEquals("org.wip.foo", imports.get(1).getPackage());
-    }
-
-    @Test
-    public void createListOfImportsWithVersionRanges() {
-        List<Import> imports =
-                Import.parse("javax.activation;version=\"[0.0,2)\",javax.annotation;version=\"[0.0,2)\"");
-        assertNotNull(imports);
-        assertEquals(2, imports.size());
-        assertEquals("javax.activation", imports.get(0).getPackage());
-        assertEquals("javax.annotation", imports.get(1).getPackage());
-    }
-
-    @Test
-    public void createListOfImportsWithExports() {
-        List<Import> imports = Import.parse("org.wip.bar;version=\"2.0.0\",org.wip.foo", "org.wip.bar;version=\"2.0.0\"");
-        assertNotNull(imports);
-        assertEquals(1, imports.size());
-        assertEquals("org.wip.foo", imports.get(0).getPackage());
-    }
-}
diff --git a/karaf-2.3.x/shell/dev/src/test/java/org/apache/karaf/shell/dev/util/TreeTest.java b/karaf-2.3.x/shell/dev/src/test/java/org/apache/karaf/shell/dev/util/TreeTest.java
deleted file mode 100644
index 95880fc..0000000
--- a/karaf-2.3.x/shell/dev/src/test/java/org/apache/karaf/shell/dev/util/TreeTest.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.dev.util;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.Set;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import org.junit.Test;
-
-/**
- * Test cases for {@link org.apache.karaf.shell.dev.util.Tree}
- * and {@link org.apache.karaf.shell.dev.util.Node}
- */
-public class TreeTest {
-
-    @Test
-    public void writeTreeWithOneChild() throws IOException {
-        Tree<String> tree = new Tree<String>("root");
-        tree.addChild("child");
-
-        BufferedReader reader = read(tree);
-
-        assertEquals("root"     , reader.readLine());
-        assertEquals("+- child" , reader.readLine());
-    }
-
-    @Test
-    public void writeTreeWithOneChildAndNodeConverter() throws IOException {
-        Tree<String> tree = new Tree<String>("root");
-        tree.addChild("child");
-
-        StringWriter writer = new StringWriter();
-        tree.write(new PrintWriter(writer), new Tree.Converter<String>() {
-            public String toString(Node<String> node) {
-                return "my " + node.getValue();
-            }
-        });
-
-        BufferedReader reader = new BufferedReader(new StringReader(writer.getBuffer().toString()));
-
-        assertEquals("my root"     , reader.readLine());
-        assertEquals("+- my child" , reader.readLine());
-    }
-
-    @Test
-    public void writeTreeWithChildAndGrandChild() throws IOException {
-        Tree<String> tree = new Tree<String>("root");
-        Node<String> node = tree.addChild("child");
-        node.addChild("grandchild");
-
-        BufferedReader reader = read(tree);
-
-        assertEquals("root"            , reader.readLine());
-        assertEquals("+- child"        , reader.readLine());
-        assertEquals("   +- grandchild", reader.readLine());
-    }
-
-    @Test
-    public void writeTreeWithTwoChildrenAndOneGrandchild() throws IOException {
-        Tree<String> tree = new Tree<String>("root");
-        Node<String> child = tree.addChild("child1");
-        child.addChild("grandchild");
-        tree.addChild("child2");
-
-        BufferedReader reader = read(tree);
-
-        assertEquals("root"            , reader.readLine());
-        assertEquals("+- child1"       , reader.readLine());
-        assertEquals("|  +- grandchild", reader.readLine());
-        assertEquals("+- child2"       , reader.readLine());
-    }
-
-    @Test
-    public void flattenTree() throws IOException {
-        Tree<String> tree = new Tree<String>("root");
-        Node<String> child1 = tree.addChild("child1");
-        child1.addChild("grandchild");
-        Node child2 = tree.addChild("child2");
-        child2.addChild("grandchild");
-
-        Set<String> elements = tree.flatten();
-        assertNotNull(elements);
-        assertEquals(4, elements.size());
-        assertTrue(elements.contains("root"));
-        assertTrue(elements.contains("child1"));
-        assertTrue(elements.contains("child2"));
-        assertTrue(elements.contains("grandchild"));
-    }
-
-    @Test
-    public void hasAncestor() throws IOException {
-        Tree<String> tree = new Tree<String>("root");
-        Node<String> child1 = tree.addChild("child1");
-        child1.addChild("grandchild");
-        Node child2 = tree.addChild("child2");
-        Node node = child2.addChild("grandchild2");
-
-        assertTrue(node.hasAncestor("child2"));
-        assertTrue(node.hasAncestor("root"));
-        assertFalse(node.hasAncestor("child1"));
-    }
-
-    private BufferedReader read(Tree<String> tree) {
-        StringWriter writer = new StringWriter();
-        tree.write(new PrintWriter(writer));
-
-        BufferedReader reader = new BufferedReader(new StringReader(writer.getBuffer().toString()));
-        return reader;
-    }
-}
diff --git a/karaf-2.3.x/shell/dev/src/test/resources/org/apache/karaf/shell/dev/framework/config.properties b/karaf-2.3.x/shell/dev/src/test/resources/org/apache/karaf/shell/dev/framework/config.properties
deleted file mode 100644
index 9a5e11c..0000000
--- a/karaf-2.3.x/shell/dev/src/test/resources/org/apache/karaf/shell/dev/framework/config.properties
+++ /dev/null
@@ -1,351 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-#
-# Framework selection properties
-#
-karaf.framework=felix
-
-karaf.framework.equinox=${karaf.default.repository}/org/eclipse/osgi/${equinox.version}/osgi-${equinox.version}.jar
-karaf.framework.felix=${karaf.default.repository}/org/apache/felix/org.apache.felix.framework/${felix.framework.version}/org.apache.felix.framework-${felix.framework.version}.jar
-
-#
-# Framework config properties.
-#
-org.osgi.framework.system.packages=org.osgi.framework; version=1.5.0, \
- org.osgi.framework.launch; version=1.0.0, \
- org.osgi.framework.hooks.service; version=1.0.0, \
- org.osgi.service.packageadmin; version=1.2.0, \
- org.osgi.service.startlevel; version=1.1.0, \
- org.osgi.service.url; version=1.0.0, \
- org.osgi.util.tracker; version=1.4.0 \
- ${jre-${java.specification.version}}
-
-org.osgi.framework.system.packages.extra=\
- org.apache.karaf.jaas.boot; version=${karaf.osgi.version}, \
- org.apache.karaf.version; version=${karaf.osgi.version}
-
-# javax.transaction is needed to avoid class loader constraint violation when using javax.sql  
-org.osgi.framework.bootdelegation=sun.*,com.sun.*,javax.transaction,javax.transaction.*
-
-# To enable the use of the startup.properties file to control the start level:
-karaf.auto.start=startup.properties
-#felix.auto.start=all
-
-org.osgi.framework.startlevel.beginning=100
-karaf.startlevel.bundle=60
-
-#
-# FileMonitor properties
-#
-felix.fileinstall.dir    = ${karaf.base}/etc
-felix.fileinstall.filter = .*\\.cfg
-felix.fileinstall.poll   = 1000
-felix.fileinstall.noInitialDelay = true
-
-#
-# Java platform package export properties.
-#
-
-# Standard package set.  Note that:
-#   - javax.transaction* is exported with a mandatory attribute 
-jre-1.5=, \
- javax.accessibility, \
- javax.activity, \
- javax.crypto, \
- javax.crypto.interfaces, \
- javax.crypto.spec, \
- javax.imageio, \
- javax.imageio.event, \
- javax.imageio.metadata, \
- javax.imageio.plugins.bmp, \
- javax.imageio.plugins.jpeg, \
- javax.imageio.spi, \
- javax.imageio.stream, \
- javax.management, \
- javax.management.loading, \
- javax.management.modelmbean, \
- javax.management.monitor, \
- javax.management.openmbean, \
- javax.management.relation, \
- javax.management.remote, \
- javax.management.remote.rmi, \
- javax.management.timer, \
- javax.naming, \
- javax.naming.directory, \
- javax.naming.event, \
- javax.naming.ldap, \
- javax.naming.spi, \
- javax.net, \
- javax.net.ssl, \
- javax.print, \
- javax.print.attribute, \
- javax.print.attribute.standard, \
- javax.print.event, \
- javax.rmi, \
- javax.rmi.CORBA, \
- javax.rmi.ssl, \
- javax.security.auth, \
- javax.security.auth.callback, \
- javax.security.auth.kerberos, \
- javax.security.auth.login, \
- javax.security.auth.spi, \
- javax.security.auth.x500, \
- javax.security.cert, \
- javax.security.sasl, \
- javax.sound.midi, \
- javax.sound.midi.spi, \
- javax.sound.sampled, \
- javax.sound.sampled.spi, \
- javax.sql, \
- javax.sql.rowset, \
- javax.sql.rowset.serial, \
- javax.sql.rowset.spi, \
- javax.swing, \
- javax.swing.border, \
- javax.swing.colorchooser, \
- javax.swing.event, \
- javax.swing.filechooser, \
- javax.swing.plaf, \
- javax.swing.plaf.basic, \
- javax.swing.plaf.metal, \
- javax.swing.plaf.multi, \
- javax.swing.plaf.synth, \
- javax.swing.table, \
- javax.swing.text, \
- javax.swing.text.html, \
- javax.swing.text.html.parser, \
- javax.swing.text.rtf, \
- javax.swing.tree, \
- javax.swing.undo, \
- javax.transaction; javax.transaction.xa; partial=true; mandatory:=partial, \
- javax.xml, \
- javax.xml.datatype, \
- javax.xml.namespace, \
- javax.xml.parsers, \
- javax.xml.transform, \
- javax.xml.transform.dom, \
- javax.xml.transform.sax, \
- javax.xml.transform.stream, \
- javax.xml.validation, \
- javax.xml.xpath, \
- org.ietf.jgss, \
- org.omg.CORBA, \
- org.omg.CORBA_2_3, \
- org.omg.CORBA_2_3.portable, \
- org.omg.CORBA.DynAnyPackage, \
- org.omg.CORBA.ORBPackage, \
- org.omg.CORBA.portable, \
- org.omg.CORBA.TypeCodePackage, \
- org.omg.CosNaming, \
- org.omg.CosNaming.NamingContextExtPackage, \
- org.omg.CosNaming.NamingContextPackage, \
- org.omg.Dynamic, \
- org.omg.DynamicAny, \
- org.omg.DynamicAny.DynAnyFactoryPackage, \
- org.omg.DynamicAny.DynAnyPackage, \
- org.omg.IOP, \
- org.omg.IOP.CodecFactoryPackage, \
- org.omg.IOP.CodecPackage, \
- org.omg.Messaging, \
- org.omg.PortableInterceptor, \
- org.omg.PortableInterceptor.ORBInitInfoPackage, \
- org.omg.PortableServer, \
- org.omg.PortableServer.CurrentPackage, \
- org.omg.PortableServer.POAManagerPackage, \
- org.omg.PortableServer.POAPackage, \
- org.omg.PortableServer.portable, \
- org.omg.PortableServer.ServantLocatorPackage, \
- org.omg.SendingContext, \
- org.omg.stub.java.rmi, \
- org.omg.stub.javax.management.remote.rmi, \
- org.w3c.dom, \
- org.w3c.dom.bootstrap, \
- org.w3c.dom.css, \
- org.w3c.dom.events, \
- org.w3c.dom.html, \
- org.w3c.dom.ls, \
- org.w3c.dom.ranges, \
- org.w3c.dom.stylesheets, \
- org.w3c.dom.traversal, \
- org.w3c.dom.views, \
- org.xml.sax, \
- org.xml.sax.ext, \
- org.xml.sax.helpers
-
-# Standard package set.  Note that:
-#   - javax.transaction* is exported with a mandatory attribute 
-jre-1.6=, \
- javax.accessibility, \
- javax.activation, \
- javax.activity, \
- javax.annotation, \
- javax.annotation.processing, \
- javax.crypto, \
- javax.crypto.interfaces, \
- javax.crypto.spec, \
- javax.imageio, \
- javax.imageio.event, \
- javax.imageio.metadata, \
- javax.imageio.plugins.bmp, \
- javax.imageio.plugins.jpeg, \
- javax.imageio.spi, \
- javax.imageio.stream, \
- javax.jws, \
- javax.jws.soap, \
- javax.lang.model, \
- javax.lang.model.element, \
- javax.lang.model.type, \
- javax.lang.model.util, \
- javax.management, \
- javax.management.loading, \
- javax.management.modelmbean, \
- javax.management.monitor, \
- javax.management.openmbean, \
- javax.management.relation, \
- javax.management.remote, \
- javax.management.remote.rmi, \
- javax.management.timer, \
- javax.naming, \
- javax.naming.directory, \
- javax.naming.event, \
- javax.naming.ldap, \
- javax.naming.spi, \
- javax.net, \
- javax.net.ssl, \
- javax.print, \
- javax.print.attribute, \
- javax.print.attribute.standard, \
- javax.print.event, \
- javax.rmi, \
- javax.rmi.CORBA, \
- javax.rmi.ssl, \
- javax.script, \
- javax.security.auth, \
- javax.security.auth.callback, \
- javax.security.auth.kerberos, \
- javax.security.auth.login, \
- javax.security.auth.spi, \
- javax.security.auth.x500, \
- javax.security.cert, \
- javax.security.sasl, \
- javax.sound.midi, \
- javax.sound.midi.spi, \
- javax.sound.sampled, \
- javax.sound.sampled.spi, \
- javax.sql, \
- javax.sql.rowset, \
- javax.sql.rowset.serial, \
- javax.sql.rowset.spi, \
- javax.swing, \
- javax.swing.border, \
- javax.swing.colorchooser, \
- javax.swing.event, \
- javax.swing.filechooser, \
- javax.swing.plaf, \
- javax.swing.plaf.basic, \
- javax.swing.plaf.metal, \
- javax.swing.plaf.multi, \
- javax.swing.plaf.synth, \
- javax.swing.table, \
- javax.swing.text, \
- javax.swing.text.html, \
- javax.swing.text.html.parser, \
- javax.swing.text.rtf, \
- javax.swing.tree, \
- javax.swing.undo, \
- javax.tools, \
- javax.transaction; javax.transaction.xa; partial=true; mandatory:=partial, \
- javax.xml, \
- javax.xml.bind, \
- javax.xml.bind.annotation, \
- javax.xml.bind.annotation.adapters, \
- javax.xml.bind.attachment, \
- javax.xml.bind.helpers, \
- javax.xml.bind.util, \
- javax.xml.crypto, \
- javax.xml.crypto.dom, \
- javax.xml.crypto.dsig, \
- javax.xml.crypto.dsig.dom, \
- javax.xml.crypto.dsig.keyinfo, \
- javax.xml.crypto.dsig.spec, \
- javax.xml.datatype, \
- javax.xml.namespace, \
- javax.xml.parsers, \
- javax.xml.soap, \
- javax.xml.stream, \
- javax.xml.stream.events, \
- javax.xml.stream.util, \
- javax.xml.transform, \
- javax.xml.transform.dom, \
- javax.xml.transform.sax, \
- javax.xml.transform.stax, \
- javax.xml.transform.stream, \
- javax.xml.validation, \
- javax.xml.ws, \
- javax.xml.ws.handler, \
- javax.xml.ws.handler.soap, \
- javax.xml.ws.http, \
- javax.xml.ws.soap, \
- javax.xml.ws.spi, \
- javax.xml.xpath, \
- org.ietf.jgss, \
- org.omg.CORBA, \
- org.omg.CORBA_2_3, \
- org.omg.CORBA_2_3.portable, \
- org.omg.CORBA.DynAnyPackage, \
- org.omg.CORBA.ORBPackage, \
- org.omg.CORBA.portable, \
- org.omg.CORBA.TypeCodePackage, \
- org.omg.CosNaming, \
- org.omg.CosNaming.NamingContextExtPackage, \
- org.omg.CosNaming.NamingContextPackage, \
- org.omg.Dynamic, \
- org.omg.DynamicAny, \
- org.omg.DynamicAny.DynAnyFactoryPackage, \
- org.omg.DynamicAny.DynAnyPackage, \
- org.omg.IOP, \
- org.omg.IOP.CodecFactoryPackage, \
- org.omg.IOP.CodecPackage, \
- org.omg.Messaging, \
- org.omg.PortableInterceptor, \
- org.omg.PortableInterceptor.ORBInitInfoPackage, \
- org.omg.PortableServer, \
- org.omg.PortableServer.CurrentPackage, \
- org.omg.PortableServer.POAManagerPackage, \
- org.omg.PortableServer.POAPackage, \
- org.omg.PortableServer.portable, \
- org.omg.PortableServer.ServantLocatorPackage, \
- org.omg.SendingContext, \
- org.omg.stub.java.rmi, \
- org.omg.stub.javax.management.remote.rmi, \
- org.w3c.dom, \
- org.w3c.dom.bootstrap, \
- org.w3c.dom.css, \
- org.w3c.dom.events, \
- org.w3c.dom.html, \
- org.w3c.dom.ls, \
- org.w3c.dom.ranges, \
- org.w3c.dom.stylesheets, \
- org.w3c.dom.traversal, \
- org.w3c.dom.views, \
- org.w3c.dom.xpath, \
- org.xml.sax, \
- org.xml.sax.ext, \
- org.xml.sax.helpers
diff --git a/karaf-2.3.x/shell/dev/src/test/resources/org/apache/karaf/shell/dev/framework/enabled-config.properties b/karaf-2.3.x/shell/dev/src/test/resources/org/apache/karaf/shell/dev/framework/enabled-config.properties
deleted file mode 100644
index 9e6ffd4..0000000
--- a/karaf-2.3.x/shell/dev/src/test/resources/org/apache/karaf/shell/dev/framework/enabled-config.properties
+++ /dev/null
@@ -1,355 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-
-#
-# Framework selection properties
-#
-karaf.framework=felix
-
-karaf.framework.equinox=${karaf.default.repository}/org/eclipse/osgi/${equinox.version}/osgi-${equinox.version}.jar
-karaf.framework.felix=${karaf.default.repository}/org/apache/felix/org.apache.felix.framework/${felix.framework.version}/org.apache.felix.framework-${felix.framework.version}.jar
-
-# Here are the properties to enable debugging
-felix.log.level=4
-osgi.debug=etc/equinox-debug.properties
-
-#
-# Framework config properties.
-#
-org.osgi.framework.system.packages=org.osgi.framework; version=1.5.0, \
- org.osgi.framework.launch; version=1.0.0, \
- org.osgi.framework.hooks.service; version=1.0.0, \
- org.osgi.service.packageadmin; version=1.2.0, \
- org.osgi.service.startlevel; version=1.1.0, \
- org.osgi.service.url; version=1.0.0, \
- org.osgi.util.tracker; version=1.4.0 \
- ${jre-${java.specification.version}}
-
-org.osgi.framework.system.packages.extra=\
- org.apache.karaf.jaas.boot; version=${karaf.osgi.version}, \
- org.apache.karaf.version; version=${karaf.osgi.version}
-
-# javax.transaction is needed to avoid class loader constraint violation when using javax.sql  
-org.osgi.framework.bootdelegation=sun.*,com.sun.*,javax.transaction,javax.transaction.*
-
-# To enable the use of the startup.properties file to control the start level:
-karaf.auto.start=startup.properties
-#felix.auto.start=all
-
-org.osgi.framework.startlevel.beginning=100
-karaf.startlevel.bundle=60
-
-#
-# FileMonitor properties
-#
-felix.fileinstall.dir    = ${karaf.base}/etc
-felix.fileinstall.filter = .*\\.cfg
-felix.fileinstall.poll   = 1000
-felix.fileinstall.noInitialDelay = true
-
-#
-# Java platform package export properties.
-#
-
-# Standard package set.  Note that:
-#   - javax.transaction* is exported with a mandatory attribute 
-jre-1.5=, \
- javax.accessibility, \
- javax.activity, \
- javax.crypto, \
- javax.crypto.interfaces, \
- javax.crypto.spec, \
- javax.imageio, \
- javax.imageio.event, \
- javax.imageio.metadata, \
- javax.imageio.plugins.bmp, \
- javax.imageio.plugins.jpeg, \
- javax.imageio.spi, \
- javax.imageio.stream, \
- javax.management, \
- javax.management.loading, \
- javax.management.modelmbean, \
- javax.management.monitor, \
- javax.management.openmbean, \
- javax.management.relation, \
- javax.management.remote, \
- javax.management.remote.rmi, \
- javax.management.timer, \
- javax.naming, \
- javax.naming.directory, \
- javax.naming.event, \
- javax.naming.ldap, \
- javax.naming.spi, \
- javax.net, \
- javax.net.ssl, \
- javax.print, \
- javax.print.attribute, \
- javax.print.attribute.standard, \
- javax.print.event, \
- javax.rmi, \
- javax.rmi.CORBA, \
- javax.rmi.ssl, \
- javax.security.auth, \
- javax.security.auth.callback, \
- javax.security.auth.kerberos, \
- javax.security.auth.login, \
- javax.security.auth.spi, \
- javax.security.auth.x500, \
- javax.security.cert, \
- javax.security.sasl, \
- javax.sound.midi, \
- javax.sound.midi.spi, \
- javax.sound.sampled, \
- javax.sound.sampled.spi, \
- javax.sql, \
- javax.sql.rowset, \
- javax.sql.rowset.serial, \
- javax.sql.rowset.spi, \
- javax.swing, \
- javax.swing.border, \
- javax.swing.colorchooser, \
- javax.swing.event, \
- javax.swing.filechooser, \
- javax.swing.plaf, \
- javax.swing.plaf.basic, \
- javax.swing.plaf.metal, \
- javax.swing.plaf.multi, \
- javax.swing.plaf.synth, \
- javax.swing.table, \
- javax.swing.text, \
- javax.swing.text.html, \
- javax.swing.text.html.parser, \
- javax.swing.text.rtf, \
- javax.swing.tree, \
- javax.swing.undo, \
- javax.transaction; javax.transaction.xa; partial=true; mandatory:=partial, \
- javax.xml, \
- javax.xml.datatype, \
- javax.xml.namespace, \
- javax.xml.parsers, \
- javax.xml.transform, \
- javax.xml.transform.dom, \
- javax.xml.transform.sax, \
- javax.xml.transform.stream, \
- javax.xml.validation, \
- javax.xml.xpath, \
- org.ietf.jgss, \
- org.omg.CORBA, \
- org.omg.CORBA_2_3, \
- org.omg.CORBA_2_3.portable, \
- org.omg.CORBA.DynAnyPackage, \
- org.omg.CORBA.ORBPackage, \
- org.omg.CORBA.portable, \
- org.omg.CORBA.TypeCodePackage, \
- org.omg.CosNaming, \
- org.omg.CosNaming.NamingContextExtPackage, \
- org.omg.CosNaming.NamingContextPackage, \
- org.omg.Dynamic, \
- org.omg.DynamicAny, \
- org.omg.DynamicAny.DynAnyFactoryPackage, \
- org.omg.DynamicAny.DynAnyPackage, \
- org.omg.IOP, \
- org.omg.IOP.CodecFactoryPackage, \
- org.omg.IOP.CodecPackage, \
- org.omg.Messaging, \
- org.omg.PortableInterceptor, \
- org.omg.PortableInterceptor.ORBInitInfoPackage, \
- org.omg.PortableServer, \
- org.omg.PortableServer.CurrentPackage, \
- org.omg.PortableServer.POAManagerPackage, \
- org.omg.PortableServer.POAPackage, \
- org.omg.PortableServer.portable, \
- org.omg.PortableServer.ServantLocatorPackage, \
- org.omg.SendingContext, \
- org.omg.stub.java.rmi, \
- org.omg.stub.javax.management.remote.rmi, \
- org.w3c.dom, \
- org.w3c.dom.bootstrap, \
- org.w3c.dom.css, \
- org.w3c.dom.events, \
- org.w3c.dom.html, \
- org.w3c.dom.ls, \
- org.w3c.dom.ranges, \
- org.w3c.dom.stylesheets, \
- org.w3c.dom.traversal, \
- org.w3c.dom.views, \
- org.xml.sax, \
- org.xml.sax.ext, \
- org.xml.sax.helpers
-
-# Standard package set.  Note that:
-#   - javax.transaction* is exported with a mandatory attribute 
-jre-1.6=, \
- javax.accessibility, \
- javax.activation, \
- javax.activity, \
- javax.annotation, \
- javax.annotation.processing, \
- javax.crypto, \
- javax.crypto.interfaces, \
- javax.crypto.spec, \
- javax.imageio, \
- javax.imageio.event, \
- javax.imageio.metadata, \
- javax.imageio.plugins.bmp, \
- javax.imageio.plugins.jpeg, \
- javax.imageio.spi, \
- javax.imageio.stream, \
- javax.jws, \
- javax.jws.soap, \
- javax.lang.model, \
- javax.lang.model.element, \
- javax.lang.model.type, \
- javax.lang.model.util, \
- javax.management, \
- javax.management.loading, \
- javax.management.modelmbean, \
- javax.management.monitor, \
- javax.management.openmbean, \
- javax.management.relation, \
- javax.management.remote, \
- javax.management.remote.rmi, \
- javax.management.timer, \
- javax.naming, \
- javax.naming.directory, \
- javax.naming.event, \
- javax.naming.ldap, \
- javax.naming.spi, \
- javax.net, \
- javax.net.ssl, \
- javax.print, \
- javax.print.attribute, \
- javax.print.attribute.standard, \
- javax.print.event, \
- javax.rmi, \
- javax.rmi.CORBA, \
- javax.rmi.ssl, \
- javax.script, \
- javax.security.auth, \
- javax.security.auth.callback, \
- javax.security.auth.kerberos, \
- javax.security.auth.login, \
- javax.security.auth.spi, \
- javax.security.auth.x500, \
- javax.security.cert, \
- javax.security.sasl, \
- javax.sound.midi, \
- javax.sound.midi.spi, \
- javax.sound.sampled, \
- javax.sound.sampled.spi, \
- javax.sql, \
- javax.sql.rowset, \
- javax.sql.rowset.serial, \
- javax.sql.rowset.spi, \
- javax.swing, \
- javax.swing.border, \
- javax.swing.colorchooser, \
- javax.swing.event, \
- javax.swing.filechooser, \
- javax.swing.plaf, \
- javax.swing.plaf.basic, \
- javax.swing.plaf.metal, \
- javax.swing.plaf.multi, \
- javax.swing.plaf.synth, \
- javax.swing.table, \
- javax.swing.text, \
- javax.swing.text.html, \
- javax.swing.text.html.parser, \
- javax.swing.text.rtf, \
- javax.swing.tree, \
- javax.swing.undo, \
- javax.tools, \
- javax.transaction; javax.transaction.xa; partial=true; mandatory:=partial, \
- javax.xml, \
- javax.xml.bind, \
- javax.xml.bind.annotation, \
- javax.xml.bind.annotation.adapters, \
- javax.xml.bind.attachment, \
- javax.xml.bind.helpers, \
- javax.xml.bind.util, \
- javax.xml.crypto, \
- javax.xml.crypto.dom, \
- javax.xml.crypto.dsig, \
- javax.xml.crypto.dsig.dom, \
- javax.xml.crypto.dsig.keyinfo, \
- javax.xml.crypto.dsig.spec, \
- javax.xml.datatype, \
- javax.xml.namespace, \
- javax.xml.parsers, \
- javax.xml.soap, \
- javax.xml.stream, \
- javax.xml.stream.events, \
- javax.xml.stream.util, \
- javax.xml.transform, \
- javax.xml.transform.dom, \
- javax.xml.transform.sax, \
- javax.xml.transform.stax, \
- javax.xml.transform.stream, \
- javax.xml.validation, \
- javax.xml.ws, \
- javax.xml.ws.handler, \
- javax.xml.ws.handler.soap, \
- javax.xml.ws.http, \
- javax.xml.ws.soap, \
- javax.xml.ws.spi, \
- javax.xml.xpath, \
- org.ietf.jgss, \
- org.omg.CORBA, \
- org.omg.CORBA_2_3, \
- org.omg.CORBA_2_3.portable, \
- org.omg.CORBA.DynAnyPackage, \
- org.omg.CORBA.ORBPackage, \
- org.omg.CORBA.portable, \
- org.omg.CORBA.TypeCodePackage, \
- org.omg.CosNaming, \
- org.omg.CosNaming.NamingContextExtPackage, \
- org.omg.CosNaming.NamingContextPackage, \
- org.omg.Dynamic, \
- org.omg.DynamicAny, \
- org.omg.DynamicAny.DynAnyFactoryPackage, \
- org.omg.DynamicAny.DynAnyPackage, \
- org.omg.IOP, \
- org.omg.IOP.CodecFactoryPackage, \
- org.omg.IOP.CodecPackage, \
- org.omg.Messaging, \
- org.omg.PortableInterceptor, \
- org.omg.PortableInterceptor.ORBInitInfoPackage, \
- org.omg.PortableServer, \
- org.omg.PortableServer.CurrentPackage, \
- org.omg.PortableServer.POAManagerPackage, \
- org.omg.PortableServer.POAPackage, \
- org.omg.PortableServer.portable, \
- org.omg.PortableServer.ServantLocatorPackage, \
- org.omg.SendingContext, \
- org.omg.stub.java.rmi, \
- org.omg.stub.javax.management.remote.rmi, \
- org.w3c.dom, \
- org.w3c.dom.bootstrap, \
- org.w3c.dom.css, \
- org.w3c.dom.events, \
- org.w3c.dom.html, \
- org.w3c.dom.ls, \
- org.w3c.dom.ranges, \
- org.w3c.dom.stylesheets, \
- org.w3c.dom.traversal, \
- org.w3c.dom.views, \
- org.w3c.dom.xpath, \
- org.xml.sax, \
- org.xml.sax.ext, \
- org.xml.sax.helpers
diff --git a/karaf-2.3.x/shell/log/NOTICE b/karaf-2.3.x/shell/log/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/shell/log/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/shell/log/pom.xml b/karaf-2.3.x/shell/log/pom.xml
deleted file mode 100644
index 052c77c..0000000
--- a/karaf-2.3.x/shell/log/pom.xml
+++ /dev/null
@@ -1,110 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.shell</groupId>
-        <artifactId>shell</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.shell.log</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Shell :: Log Commands</name>
-    <description>This bundle provides Karaf shell commands to manipulate Log service.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.ops4j.pax.logging</groupId>
-            <artifactId>pax-logging-service</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.logging</groupId>
-            <artifactId>pax-logging-api</artifactId>
-        </dependency>
-
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            org.apache.felix.service.command,
-                            org.apache.felix.gogo.commands,
-                            org.apache.karaf.shell.console,
-                            *
-                        </Import-Package>
-                        <Private-Package>!*</Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/ClearLog.java b/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/ClearLog.java
deleted file mode 100644
index df0549e..0000000
--- a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/ClearLog.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.log;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-
-/**
- * Clear the last log entries.
- */
-@Command(scope = "log", name = "clear", description = "Clear log entries.")
-public class ClearLog extends OsgiCommandSupport {
-
-    protected LruList events;
-   
-    public LruList getEvents() {
-        return events;
-    }
-
-    public void setEvents(LruList events) {
-        this.events = events;
-    }
-
-    protected Object doExecute() throws Exception {
-        events.clear();
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/DisplayException.java b/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/DisplayException.java
deleted file mode 100644
index 095a647..0000000
--- a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/DisplayException.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.log;
-
-import org.ops4j.pax.logging.spi.PaxLoggingEvent;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.felix.gogo.commands.Command;
-
-@Command(scope = "log", name = "display-exception", description = "Displays the last occurred exception from the log.")
-public class DisplayException extends OsgiCommandSupport {
-
-    protected LruList events;
-
-    public LruList getEvents() {
-        return events;
-    }
-
-    public void setEvents(LruList events) {
-        this.events = events;
-    }
-
-    protected Object doExecute() throws Exception {
-        PaxLoggingEvent throwableEvent = null;
-        Iterable<PaxLoggingEvent> le = events.getElements(Integer.MAX_VALUE);
-        for (PaxLoggingEvent event : le) {
-            if (event.getThrowableStrRep() != null) {
-                throwableEvent = event;
-                // Do not break, as we iterate from the oldest to the newest event
-            }
-        }
-        if (throwableEvent != null) {
-            for (String r : throwableEvent.getThrowableStrRep()) {
-                System.out.println(r);
-            }
-            System.out.println();
-        }
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/DisplayLog.java b/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/DisplayLog.java
deleted file mode 100644
index fa6f202..0000000
--- a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/DisplayLog.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.log;
-
-import java.io.PrintStream;
-
-import org.apache.karaf.shell.log.layout.PatternConverter;
-import org.apache.karaf.shell.log.layout.PatternParser;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.gogo.commands.Command;
-import org.ops4j.pax.logging.spi.PaxAppender;
-import org.ops4j.pax.logging.spi.PaxLoggingEvent;
-
-/**
- * Displays the last log entries
- */
-@Command(scope = "log", name = "display", description = "Displays log entries.")
-public class DisplayLog extends OsgiCommandSupport {
-
-    @Option(name = "-n", aliases = {}, description="Number of entries to display", required = false, multiValued = false)
-    protected int entries;
-
-    @Option(name = "-p", aliases = {}, description="Pattern for formatting the output", required = false, multiValued = false)
-    protected String overridenPattern;
-
-    @Option(name = "--no-color", description="Disable syntax coloring of log events", required = false, multiValued = false)
-    protected boolean noColor;
-
-    protected String pattern;
-    protected LruList events;
-    protected String fatalColor;
-    protected String errorColor;
-    protected String warnColor;
-    protected String infoColor;
-    protected String debugColor;
-    protected String traceColor;
-
-    private static final String FATAL = "fatal";
-    private static final String ERROR = "error";
-    private static final String WARN = "warn";
-    private static final String INFO = "info";
-    private static final String DEBUG = "debug";
-    private static final String TRACE = "trace";
-
-    private static final char FIRST_ESC_CHAR = 27;
-	private static final char SECOND_ESC_CHAR = '[';
-    private static final char COMMAND_CHAR = 'm';
-
-    public LruList getEvents() {
-        return events;
-    }
-
-    public void setEvents(LruList events) {
-        this.events = events;
-    }
-
-    public String getPattern() {
-        return pattern;
-    }
-
-    public void setPattern(String pattern) {
-        this.pattern = pattern;
-    }
-
-    public String getFatalColor() {
-        return fatalColor;
-    }
-
-    public void setFatalColor(String fatalColor) {
-        this.fatalColor = fatalColor;
-    }
-
-    public String getErrorColor() {
-        return errorColor;
-    }
-
-    public void setErrorColor(String errorColor) {
-        this.errorColor = errorColor;
-    }
-
-    public String getWarnColor() {
-        return warnColor;
-    }
-
-    public void setWarnColor(String warnColor) {
-        this.warnColor = warnColor;
-    }
-
-    public String getInfoColor() {
-        return infoColor;
-    }
-
-    public void setInfoColor(String infoColor) {
-        this.infoColor = infoColor;
-    }
-
-    public String getDebugColor() {
-        return debugColor;
-    }
-
-    public void setDebugColor(String debugColor) {
-        this.debugColor = debugColor;
-    }
-
-    public String getTraceColor() {
-        return traceColor;
-    }
-
-    public void setTraceColor(String traceColor) {
-        this.traceColor = traceColor;
-    }
-
-    protected Object doExecute() throws Exception {
-        final PatternConverter cnv = new PatternParser(overridenPattern != null ? overridenPattern : pattern).parse();
-        final PrintStream out = System.out;
-
-        Iterable<PaxLoggingEvent> le = events.getElements(entries == 0 ? Integer.MAX_VALUE : entries);
-        for (PaxLoggingEvent event : le) {
-            if (event != null) {
-            display(cnv, event, out);
-        }
-        }
-        out.println();
-        return null;
-    }
-
-    protected void display(PatternConverter cnv, PaxLoggingEvent event, PrintStream stream) {
-        String color = getColor(event);
-        StringBuffer sb = new StringBuffer();
-        sb.setLength(0);
-        if (color != null) {
-            sb.append(FIRST_ESC_CHAR);
-            sb.append(SECOND_ESC_CHAR);
-            sb.append(color);
-            sb.append(COMMAND_CHAR);
-        }
-        for (PatternConverter pc = cnv; pc != null; pc = pc.next) {
-            pc.format(sb, event);
-        }
-        if (event.getThrowableStrRep() != null) {
-            for (String r : event.getThrowableStrRep()) {
-                sb.append(r).append('\n');
-            }
-        }
-        if (color != null) {
-            sb.append(FIRST_ESC_CHAR);
-            sb.append(SECOND_ESC_CHAR);
-            sb.append("0");
-            sb.append(COMMAND_CHAR);
-        }
-        stream.print(sb.toString());
-    }
-
-    private String getColor(PaxLoggingEvent event) {
-        String color = null;
-        if (!noColor) {
-            String lvl = event.getLevel().toString().toLowerCase();
-            if (FATAL.equals(lvl)) {
-                color = fatalColor;
-            } else if (ERROR.equals(lvl)) {
-                color = errorColor;
-            } else if (WARN.equals(lvl)) {
-                color = warnColor;
-            } else if (INFO.equals(lvl)) {
-                color = infoColor;
-            } else if (DEBUG.equals(lvl)) {
-                color = debugColor;
-            } else if (TRACE.equals(lvl)) {
-                color = traceColor;
-            }
-            if (color != null && color.length() == 0) {
-                color = null;
-            }
-        }
-        return color;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/GetLogLevel.java b/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/GetLogLevel.java
deleted file mode 100644
index 7c3c508..0000000
--- a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/GetLogLevel.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.log;
-
-import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.Map;
-import java.util.TreeMap;
-
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-
-/**
- * Get the log level for a given logger
- */
-@Command(scope = "log", name = "get", description = "Shows the currently set log level.")
-public class GetLogLevel extends OsgiCommandSupport {
-
-    @Argument(index = 0, name = "logger", description = "The name of the logger, ALL or ROOT (default)", required = false, multiValued = false)
-    String logger;
-
-    static final String CONFIGURATION_PID  = "org.ops4j.pax.logging";
-    static final String ROOT_LOGGER_PREFIX = "log4j.rootLogger";
-    static final String LOGGER_PREFIX      = "log4j.logger.";
-    static final String ALL_LOGGER         = "ALL";
-    static final String ROOT_LOGGER        = "ROOT";
-
-    protected Object doExecute() throws Exception {
-        ConfigurationAdmin cfgAdmin = getConfigAdmin();
-        Configuration cfg = cfgAdmin.getConfiguration(CONFIGURATION_PID, null);
-        Dictionary props = cfg.getProperties();
-
-        if (ROOT_LOGGER.equalsIgnoreCase(this.logger)) {
-            this.logger = null;
-        }
-        if (ALL_LOGGER.equalsIgnoreCase(logger)) {
-            String root = getLevel((String) props.get(ROOT_LOGGER_PREFIX));
-            Map<String, String> loggers = new TreeMap<String, String>();
-            for (Enumeration e = props.keys(); e.hasMoreElements();) {
-                String prop = (String) e.nextElement();
-                if (prop.startsWith(LOGGER_PREFIX)) {
-                    String val = getLevel((String) props.get(prop));
-                    loggers.put(prop.substring(LOGGER_PREFIX.length()), val);
-                }
-            }
-            System.out.println("ROOT: " + root);
-            for (String logger : loggers.keySet()) {
-                System.out.println(logger + ": " + loggers.get(logger));
-            }
-        } else {
-            String logger = this.logger;
-            String val;
-            for (;;) {
-                String prop;
-                if (logger == null) {
-                    prop = ROOT_LOGGER_PREFIX;
-                } else {
-                    prop = LOGGER_PREFIX + logger;
-                }
-                val = (String) props.get(prop);
-                val = getLevel(val);
-                if (val != null || logger == null) {
-                    break;
-                }
-                int idx = logger.lastIndexOf('.');
-                if (idx < 0) {
-                    logger = null;
-                } else {
-                    logger = logger.substring(0, idx);
-                }
-            }
-            String st = "Level: " + val;
-            if (logger != this.logger) {
-                st += " (inherited from " + (logger != null ? logger : "ROOT") + ")";
-            }
-            System.out.println(st);
-        }
-        return null;
-    }
-
-    protected String getLevel(String prop) {
-        if (prop == null) {
-            return null;
-        } else {
-            String val = prop.trim();
-            int idx = val.indexOf(",");
-            if (idx == 0) {
-                val = null;
-            } else if (idx > 0) {
-                val = val.substring(0, idx);
-            }
-            return val;
-        }
-    }
-
-    protected ConfigurationAdmin getConfigAdmin() {
-        ServiceReference ref = getBundleContext().getServiceReference(ConfigurationAdmin.class.getName());
-        return getService(ConfigurationAdmin.class, ref);
-    }
-
-}
diff --git a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/Level.java b/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/Level.java
deleted file mode 100644
index 9605a72..0000000
--- a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/Level.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.log;
-
-/**
- * Enumeration of available log levels for the log:set command and
- * the command completer
- */
-public enum Level {
-
-    TRACE,
-    DEBUG,
-    INFO,
-    WARN,
-    ERROR,
-    DEFAULT;
-    
-    /**
-     * Convert the list of values into a String array
-     * 
-     * @return all the values as a String array
-     */
-    public static String[] strings() {
-        String[] values = new String[values().length];
-        for (int i = 0 ; i < values.length ; i++) {
-            values[i] = values()[i].name();
-        }
-        return values;
-    }
-    
-    /**
-     * Check if the string value represents the default level
-     * 
-     * @param level the level value
-     * @return <code>true</code> if the value represents the {@link #DEFAULT} level
-     */
-    public static boolean isDefault(String level) {
-        return valueOf(level).equals(DEFAULT);
-    }
-}
diff --git a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/LogTail.java b/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/LogTail.java
deleted file mode 100644
index d5343d7..0000000
--- a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/LogTail.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.log;
-
-import java.io.PrintStream;
-import java.util.LinkedList;
-import java.util.Queue;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.shell.log.layout.PatternConverter;
-import org.apache.karaf.shell.log.layout.PatternParser;
-import org.ops4j.pax.logging.spi.PaxAppender;
-import org.ops4j.pax.logging.spi.PaxLoggingEvent;
-
-@Command(scope = "log", name = "tail", description = "Continuously display log entries.")
-public class LogTail extends DisplayLog {
-
-    protected Object doExecute() throws Exception {
-        final PatternConverter cnv = new PatternParser(overridenPattern != null ? overridenPattern : pattern).parse();
-        final PrintStream out = System.out;
-
-        Iterable<PaxLoggingEvent> le = events.getElements(entries == 0 ? Integer.MAX_VALUE : entries);
-        for (PaxLoggingEvent event : le) {
-            display(cnv, event, out);
-        }
-        // Tail
-        final BlockingQueue<PaxLoggingEvent> queue = new LinkedBlockingQueue<PaxLoggingEvent>();
-        PaxAppender appender = new PaxAppender() {
-            public void doAppend(PaxLoggingEvent event) {
-                queue.add(event);
-            }
-        };
-        try {
-            events.addAppender(appender);
-            for (;;) {
-                display(cnv, queue.take(), out);
-            }
-        } catch (InterruptedException e) {
-            // Ignore
-        } finally {
-            events.removeAppender(appender);
-        }
-        out.println();
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/LruList.java b/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/LruList.java
deleted file mode 100644
index bcd1b10..0000000
--- a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/LruList.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.log;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.ops4j.pax.logging.spi.PaxAppender;
-import org.ops4j.pax.logging.spi.PaxLoggingEvent;
-
-/**
- * A list that only keep the last N elements added
- */
-public class LruList {
-
-    private PaxLoggingEvent[] elements;
-    private transient int start = 0;
-    private transient int end = 0;
-    private transient boolean full = false;
-    private final int maxElements;
-    private final List<PaxAppender> appenders;
-
-    public LruList(int size) {
-        if (size <= 0) {
-            throw new IllegalArgumentException("The size must be greater than 0");
-        }
-        elements = new PaxLoggingEvent[size];
-        maxElements = elements.length;
-        appenders = new ArrayList<PaxAppender>();
-    }
-
-    public synchronized int size() {
-        int size = 0;
-        if (end < start) {
-            size = maxElements - start + end;
-        } else if (end == start) {
-            size = (full ? maxElements : 0);
-        } else {
-            size = end - start;
-        }
-        return size;
-    }
-
-    public synchronized void clear() {
-        start = 0;
-        end = 0;
-        elements = new PaxLoggingEvent[maxElements];
-    }
-
-    public synchronized void add(PaxLoggingEvent element) {
-        if (null == element) {
-             throw new NullPointerException("Attempted to add null object to buffer");
-        }
-        if (size() == maxElements) {
-            Object e = elements[start];
-            if (null != e) {
-                elements[start++] = null;
-                if (start >= maxElements) {
-                    start = 0;
-                }
-                full = false;
-            }
-        }
-        elements[end++] = element;
-        if (end >= maxElements) {
-            end = 0;
-        }
-        if (end == start) {
-            full = true;
-        }
-        for (PaxAppender appender : appenders) {
-            try {
-                appender.doAppend(element);
-            } catch (Throwable t) {
-                // Ignore
-            }
-        }
-    }
-
-    public synchronized Iterable<PaxLoggingEvent> getElements() {
-        return getElements(size());
-    }
-
-    public synchronized Iterable<PaxLoggingEvent> getElements(int nb) {
-        int s = size();
-        nb = Math.min(Math.max(0, nb), s);
-        PaxLoggingEvent[] e = new PaxLoggingEvent[nb];
-        for (int i = 0; i < nb; i++) {
-            e[i] = elements[(i + s - nb + start) % maxElements];
-        }
-        return Arrays.asList(e);
-    }
-
-    public synchronized void addAppender(PaxAppender appender) {
-        this.appenders.add(appender);
-    }
-
-    public synchronized void removeAppender(PaxAppender appender) {
-        this.appenders.remove(appender);
-    }
-
-}
diff --git a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/SetLogLevel.java b/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/SetLogLevel.java
deleted file mode 100644
index 7c7fab2..0000000
--- a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/SetLogLevel.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.log;
-
-import java.io.IOException;
-import java.util.Dictionary;
-
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
-
-/**
- * Set the log level for a given logger
- */
-@Command(scope = "log", name = "set", description = "Sets the log level.")
-public class SetLogLevel extends OsgiCommandSupport {
-    
-    @Argument(index = 0, name = "level", description = "The log level to set (TRACE, DEBUG, INFO, WARN, ERROR) or DEFAULT to unset", required = true, multiValued = false)
-    String level;
-
-    @Argument(index = 1, name = "logger", description = "Logger name or ROOT (default)", required = false, multiValued = false)
-    String logger;
-
-    static final String CONFIGURATION_PID  = "org.ops4j.pax.logging";
-    static final String ROOT_LOGGER_PREFIX = "log4j.rootLogger";
-    static final String LOGGER_PREFIX      = "log4j.logger.";
-    static final String ROOT_LOGGER        = "ROOT";
-
-    protected Object doExecute() throws Exception {
-        if (ROOT_LOGGER.equalsIgnoreCase(this.logger)) {
-            this.logger = null;
-        }
-        
-        // make sure both uppercase and lowercase levels are supported
-        level = level.toUpperCase();
-        
-        try {
-            Level.valueOf(level);
-        } catch (IllegalArgumentException e) {
-            System.err.println("level must be set to TRACE, DEBUG, INFO, WARN or ERROR (or DEFAULT to unset it)");
-            return null;
-        }
-        
-        if (Level.isDefault(level) && logger == null) {
-            System.err.println("Can not unset the ROOT logger");
-            return null;
-        }
-
-        Configuration cfg = getConfiguration();
-        Dictionary props = cfg.getProperties();
-
-        String logger = this.logger;
-        String val;
-        String prop;
-        if (logger == null) {
-            prop = ROOT_LOGGER_PREFIX;
-        } else {
-            prop = LOGGER_PREFIX + logger;
-        }
-        val = (String) props.get(prop);
-        if (Level.isDefault(level)) {
-            if (val != null) {
-                val = val.trim();
-                int idx = val.indexOf(",");
-                if (idx < 0) {
-                    val = null;
-                } else {
-                    val = val.substring(idx);
-                }
-            }
-        } else {
-            if (val == null) {
-                val = level;
-            } else {
-                val = val.trim();
-                int idx = val.indexOf(",");
-                if (idx < 0) {
-                    val = level;
-                } else {
-                    val = level + val.substring(idx);
-                }
-            }
-        }
-        if (val == null) {
-            props.remove(prop);
-        } else {
-            props.put(prop, val);
-        }
-        cfg.update(props);
-
-        return null;
-    }
-    
-    
-
-    protected Configuration getConfiguration() throws IOException {
-        Configuration cfg = getConfigAdmin().getConfiguration(CONFIGURATION_PID, null);
-        return cfg;
-    }
-
-    protected ConfigurationAdmin getConfigAdmin() {
-        ServiceReference ref = getBundleContext().getServiceReference(ConfigurationAdmin.class.getName());
-        return getService(ConfigurationAdmin.class, ref);
-    }
-
-}
diff --git a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/VmLogAppender.java b/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/VmLogAppender.java
deleted file mode 100644
index 4cf3c3b..0000000
--- a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/VmLogAppender.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.log;
-
-import org.ops4j.pax.logging.spi.PaxAppender;
-import org.ops4j.pax.logging.spi.PaxLoggingEvent;
-
-/**
- * A Pax Logging appender that keep a list of last events
- */
-public class VmLogAppender implements PaxAppender {
-
-    protected LruList events;
-
-    public LruList getEvents() {
-        return events;
-    }
-
-    public void setEvents(LruList events) {
-        this.events = events;
-    }
-
-    public void doAppend(PaxLoggingEvent event) {
-        if (events != null) {
-            event.getProperties(); // ensure MDC properties are copied
-            events.add(event);
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/completers/LogLevelCompleter.java b/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/completers/LogLevelCompleter.java
deleted file mode 100644
index 124bd36..0000000
--- a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/completers/LogLevelCompleter.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.log.completers;
-
-import java.util.List;
-
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.apache.karaf.shell.log.Level;
-
-/**
- * {@link Completer} implementation for completing log levels  
- */
-public class LogLevelCompleter extends StringsCompleter {
-    
-    public LogLevelCompleter() {
-        super(Level.strings());
-    }
-    
-    @Override @SuppressWarnings("unchecked")
-    public int complete(String buffer, int cursor, List candidates) {
-        if (buffer == null) {
-            return super.complete(null, cursor, candidates);
-        } else {
-            // support completing lower case as well with the toUpperCase() call
-            return super.complete(buffer.toUpperCase(), cursor, candidates);
-        }
-    }
-}
diff --git a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/layout/AbsoluteTimeDateFormat.java b/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/layout/AbsoluteTimeDateFormat.java
deleted file mode 100644
index 72dc398..0000000
--- a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/layout/AbsoluteTimeDateFormat.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.log.layout;
-
-import java.text.DateFormat;
-import java.text.FieldPosition;
-import java.text.ParsePosition;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.TimeZone;
-
-/**
- * Copied from log4j
- */
-/**
-   Formats a {@link Date} in the format "HH:mm:ss,SSS" for example,
-   "15:49:37,459".
-*/
-public class AbsoluteTimeDateFormat extends DateFormat {
-
-  /**
-     String constant used to specify {@link
-     org.apache.log4j.helpers.AbsoluteTimeDateFormat} in layouts. Current
-     value is <b>ABSOLUTE</b>.  */
-  public final static String ABS_TIME_DATE_FORMAT = "ABSOLUTE";
-
-  /**
-     String constant used to specify {@link
-     org.apache.log4j.helpers.DateTimeDateFormat} in layouts.  Current
-     value is <b>DATE</b>.
-  */
-  public final static String DATE_AND_TIME_DATE_FORMAT = "DATE";
-
-  /**
-     String constant used to specify {@link
-     org.apache.log4j.helpers.ISO8601DateFormat} in layouts. Current
-     value is <b>ISO8601</b>.
-  */
-  public final static String ISO8601_DATE_FORMAT = "ISO8601";
-
-  public
-  AbsoluteTimeDateFormat() {
-    setCalendar(Calendar.getInstance());
-  }
-
-  public
-  AbsoluteTimeDateFormat(TimeZone timeZone) {
-    setCalendar(Calendar.getInstance(timeZone));
-  }
-
-  private static long   previousTime;
-  private static char[] previousTimeWithoutMillis = new char[9]; // "HH:mm:ss."
-
-  /**
-     Appends to <code>sbuf</code> the time in the format
-     "HH:mm:ss,SSS" for example, "15:49:37,459"
-
-     @param date the date to format
-     @param sbuf the string buffer to write to
-     @param fieldPosition remains untouched
-    */
-  public
-  StringBuffer format(Date date, StringBuffer sbuf,
-		      FieldPosition fieldPosition) {
-
-    long now = date.getTime();
-    int millis = (int)(now % 1000);
-
-    if ((now - millis) != previousTime) {
-      // We reach this point at most once per second
-      // across all threads instead of each time format()
-      // is called. This saves considerable CPU time.
-
-      calendar.setTime(date);
-
-      int start = sbuf.length();
-
-      int hour = calendar.get(Calendar.HOUR_OF_DAY);
-      if(hour < 10) {
-	sbuf.append('0');
-      }
-      sbuf.append(hour);
-      sbuf.append(':');
-
-      int mins = calendar.get(Calendar.MINUTE);
-      if(mins < 10) {
-	sbuf.append('0');
-      }
-      sbuf.append(mins);
-      sbuf.append(':');
-
-      int secs = calendar.get(Calendar.SECOND);
-      if(secs < 10) {
-	sbuf.append('0');
-      }
-      sbuf.append(secs);
-      sbuf.append(',');
-
-      // store the time string for next time to avoid recomputation
-      sbuf.getChars(start, sbuf.length(), previousTimeWithoutMillis, 0);
-
-      previousTime = now - millis;
-    }
-    else {
-      sbuf.append(previousTimeWithoutMillis);
-    }
-
-
-
-    if(millis < 100)
-      sbuf.append('0');
-    if(millis < 10)
-      sbuf.append('0');
-
-    sbuf.append(millis);
-    return sbuf;
-  }
-
-  /**
-     This method does not do anything but return <code>null</code>.
-   */
-  public
-  Date parse(String s, ParsePosition pos) {
-    return null;
-  }
-}
diff --git a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/layout/DateTimeDateFormat.java b/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/layout/DateTimeDateFormat.java
deleted file mode 100644
index b01b36e..0000000
--- a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/layout/DateTimeDateFormat.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.log.layout;
-
-import java.text.DateFormatSymbols;
-import java.text.FieldPosition;
-import java.text.ParsePosition;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.TimeZone;
-
-/**
- * Copied from log4j
- */
-/**
-   Formats a {@link Date} in the format "dd MMM yyyy HH:mm:ss,SSS" for example,
-   "06 Nov 1994 15:49:37,459".
-*/
-public class DateTimeDateFormat extends AbsoluteTimeDateFormat {
-
-  String[] shortMonths;
-
-  public
-  DateTimeDateFormat() {
-    super();
-    shortMonths = new DateFormatSymbols().getShortMonths();
-  }
-
-  public
-  DateTimeDateFormat(TimeZone timeZone) {
-    this();
-    setCalendar(Calendar.getInstance(timeZone));
-  }
-
-  /**
-     Appends to <code>sbuf</code> the date in the format "dd MMM yyyy
-     HH:mm:ss,SSS" for example, "06 Nov 1994 08:49:37,459".
-
-     @param sbuf the string buffer to write to
-  */
-  public
-  StringBuffer format(Date date, StringBuffer sbuf,
-		      FieldPosition fieldPosition) {
-
-    calendar.setTime(date);
-
-    int day = calendar.get(Calendar.DAY_OF_MONTH);
-    if(day < 10)
-      sbuf.append('0');
-    sbuf.append(day);
-    sbuf.append(' ');
-    sbuf.append(shortMonths[calendar.get(Calendar.MONTH)]);
-    sbuf.append(' ');
-
-    int year =  calendar.get(Calendar.YEAR);
-    sbuf.append(year);
-    sbuf.append(' ');
-
-    return super.format(date, sbuf, fieldPosition);
-  }
-
-  /**
-     This method does not do anything but return <code>null</code>.
-   */
-  public
-  Date parse(java.lang.String s, ParsePosition pos) {
-    return null;
-  }
-}
diff --git a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/layout/FormattingInfo.java b/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/layout/FormattingInfo.java
deleted file mode 100644
index d7bf0bc..0000000
--- a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/layout/FormattingInfo.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.log.layout;
-
-/**
- * Copied from log4j
- */
-/**
-   FormattingInfo instances contain the information obtained when parsing
-   formatting modifiers in conversion modifiers.
- */
-public class FormattingInfo {
-  int min = -1;
-  int max = 0x7FFFFFFF;
-  boolean leftAlign = false;
-
-  void reset() {
-    min = -1;
-    max = 0x7FFFFFFF;
-    leftAlign = false;
-  }
-
-  void dump() {
-    //LogLog.debug("min="+min+", max="+max+", leftAlign="+leftAlign);
-  }
-}
-
diff --git a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/layout/ISO8601DateFormat.java b/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/layout/ISO8601DateFormat.java
deleted file mode 100644
index a9565ec..0000000
--- a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/layout/ISO8601DateFormat.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.log.layout;
-
-import java.text.FieldPosition;
-import java.text.ParsePosition;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.TimeZone;
-
-/**
- * Copied from log4j
- */
-/**
-   Formats a {@link Date} in the format "yyyy-MM-dd HH:mm:ss,SSS" for example
-   "1999-11-27 15:49:37,459".
-
-   <p>Refer to the <a
-   href=http://www.cl.cam.ac.uk/~mgk25/iso-time.html>summary of the
-   International Standard Date and Time Notation</a> for more
-   information on this format.
-*/
-public class ISO8601DateFormat extends AbsoluteTimeDateFormat {
-
-  public
-  ISO8601DateFormat() {
-  }
-
-  public
-  ISO8601DateFormat(TimeZone timeZone) {
-    super(timeZone);
-  }
-
-  static private long   lastTime;
-  static private char[] lastTimeString = new char[20];
-
-  /**
-     Appends a date in the format "YYYY-mm-dd HH:mm:ss,SSS"
-     to <code>sbuf</code>. For example: "1999-11-27 15:49:37,459".
-
-     @param sbuf the <code>StringBuffer</code> to write to
-  */
-  public
-  StringBuffer format(Date date, StringBuffer sbuf,
-		      FieldPosition fieldPosition) {
-
-    long now = date.getTime();
-    int millis = (int)(now % 1000);
-
-    if ((now - millis) != lastTime) {
-      // We reach this point at most once per second
-      // across all threads instead of each time format()
-      // is called. This saves considerable CPU time.
-
-      calendar.setTime(date);
-
-      int start = sbuf.length();
-
-      int year =  calendar.get(Calendar.YEAR);
-      sbuf.append(year);
-
-      String month;
-      switch(calendar.get(Calendar.MONTH)) {
-      case Calendar.JANUARY: month = "-01-"; break;
-      case Calendar.FEBRUARY: month = "-02-";  break;
-      case Calendar.MARCH: month = "-03-"; break;
-      case Calendar.APRIL: month = "-04-";  break;
-      case Calendar.MAY: month = "-05-"; break;
-      case Calendar.JUNE: month = "-06-";  break;
-      case Calendar.JULY: month = "-07-"; break;
-      case Calendar.AUGUST: month = "-08-";  break;
-      case Calendar.SEPTEMBER: month = "-09-"; break;
-      case Calendar.OCTOBER: month = "-10-"; break;
-      case Calendar.NOVEMBER: month = "-11-";  break;
-      case Calendar.DECEMBER: month = "-12-";  break;
-      default: month = "-NA-"; break;
-      }
-      sbuf.append(month);
-
-      int day = calendar.get(Calendar.DAY_OF_MONTH);
-      if(day < 10)
-	sbuf.append('0');
-      sbuf.append(day);
-
-      sbuf.append(' ');
-
-      int hour = calendar.get(Calendar.HOUR_OF_DAY);
-      if(hour < 10) {
-	sbuf.append('0');
-      }
-      sbuf.append(hour);
-      sbuf.append(':');
-
-      int mins = calendar.get(Calendar.MINUTE);
-      if(mins < 10) {
-	sbuf.append('0');
-      }
-      sbuf.append(mins);
-      sbuf.append(':');
-
-      int secs = calendar.get(Calendar.SECOND);
-      if(secs < 10) {
-	sbuf.append('0');
-      }
-      sbuf.append(secs);
-
-      sbuf.append(',');
-
-      // store the time string for next time to avoid recomputation
-      sbuf.getChars(start, sbuf.length(), lastTimeString, 0);
-      lastTime = now - millis;
-    }
-    else {
-      sbuf.append(lastTimeString);
-    }
-
-
-    if (millis < 100)
-      sbuf.append('0');
-    if (millis < 10)
-      sbuf.append('0');
-
-    sbuf.append(millis);
-    return sbuf;
-  }
-
-  /**
-    This method does not do anything but return <code>null</code>.
-   */
-  public
-  Date parse(java.lang.String s, ParsePosition pos) {
-    return null;
-  }
-}
-
diff --git a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/layout/PatternConverter.java b/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/layout/PatternConverter.java
deleted file mode 100644
index 5649220..0000000
--- a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/layout/PatternConverter.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.log.layout;
-
-import org.ops4j.pax.logging.spi.PaxLoggingEvent;
-
-/**
- * Copied from log4j.
- */
-/**
-   <p>PatternConverter is an abtract class that provides the
-   formatting functionality that derived classes need.
-
-   <p>Conversion specifiers in a conversion patterns are parsed to
-   individual PatternConverters. Each of which is responsible for
-   converting a logging event in a converter specific manner.
- */
-public abstract class PatternConverter {
-  public PatternConverter next;
-  int min = -1;
-  int max = 0x7FFFFFFF;
-  boolean leftAlign = false;
-
-  protected
-  PatternConverter() {  }
-
-  protected
-  PatternConverter(FormattingInfo fi) {
-    min = fi.min;
-    max = fi.max;
-    leftAlign = fi.leftAlign;
-  }
-
-  /**
-     Derived pattern converters must override this method in order to
-     convert conversion specifiers in the correct way.
-  */
-  abstract
-  protected
-  String convert(PaxLoggingEvent event);
-
-  /**
-     A template method for formatting in a converter specific way.
-   */
-  public
-  void format(StringBuffer sbuf, PaxLoggingEvent e) {
-    String s = convert(e);
-
-    if(s == null) {
-      if(0 < min)
-	spacePad(sbuf, min);
-      return;
-    }
-
-    int len = s.length();
-
-    if(len > max)
-      sbuf.append(s.substring(len-max));
-    else if(len < min) {
-      if(leftAlign) {
-	sbuf.append(s);
-	spacePad(sbuf, min-len);
-      }
-      else {
-	spacePad(sbuf, min-len);
-	sbuf.append(s);
-      }
-    }
-    else
-      sbuf.append(s);
-  }
-
-  static String[] SPACES = {" ", "  ", "    ", "        ", //1,2,4,8 spaces
-			    "                ", // 16 spaces
-			    "                                " }; // 32 spaces
-
-  /**
-     Fast space padding method.
-  */
-  public
-  void spacePad(StringBuffer sbuf, int length) {
-    while(length >= 32) {
-      sbuf.append(SPACES[5]);
-      length -= 32;
-    }
-
-    for(int i = 4; i >= 0; i--) {
-      if((length & (1<<i)) != 0) {
-	sbuf.append(SPACES[i]);
-      }
-    }
-  }
-}
diff --git a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/layout/PatternParser.java b/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/layout/PatternParser.java
deleted file mode 100644
index ecba15c..0000000
--- a/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/layout/PatternParser.java
+++ /dev/null
@@ -1,558 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.log.layout;
-
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.Map;
-
-import org.apache.log4j.spi.LoggingEvent;
-import org.ops4j.pax.logging.spi.PaxLocationInfo;
-import org.ops4j.pax.logging.spi.PaxLoggingEvent;
-
-/**
- * Copied from log4j
- */
-/**
-   Most of the work of the {@link org.apache.log4j.PatternLayout} class
-   is delegated to the PatternParser class.
-*/
-public class PatternParser {
-
-  private static final String LINE_SEP = System.getProperty("line.separator");
-
-  private static final char ESCAPE_CHAR = '%';
-
-  private static final int LITERAL_STATE = 0;
-  private static final int CONVERTER_STATE = 1;
-  private static final int MINUS_STATE = 2;
-  private static final int DOT_STATE = 3;
-  private static final int MIN_STATE = 4;
-  private static final int MAX_STATE = 5;
-
-  static final int FULL_LOCATION_CONVERTER = 1000;
-  static final int METHOD_LOCATION_CONVERTER = 1001;
-  static final int CLASS_LOCATION_CONVERTER = 1002;
-  static final int LINE_LOCATION_CONVERTER = 1003;
-  static final int FILE_LOCATION_CONVERTER = 1004;
-
-  static final int RELATIVE_TIME_CONVERTER = 2000;
-  static final int THREAD_CONVERTER = 2001;
-  static final int LEVEL_CONVERTER = 2002;
-  static final int NDC_CONVERTER = 2003;
-  static final int MESSAGE_CONVERTER = 2004;
-
-  int state;
-  protected StringBuffer currentLiteral = new StringBuffer(32);
-  protected int patternLength;
-  protected int i;
-  PatternConverter head;
-  PatternConverter tail;
-  protected FormattingInfo formattingInfo = new FormattingInfo();
-  protected String pattern;
-
-  public
-  PatternParser(String pattern) {
-    this.pattern = pattern;
-    patternLength =  pattern.length();
-    state = LITERAL_STATE;
-  }
-
-  private
-  void  addToList(PatternConverter pc) {
-    if(head == null) {
-      head = tail = pc;
-    } else {
-      tail.next = pc;
-      tail = pc;
-    }
-  }
-
-  protected
-  String extractOption() {
-    if((i < patternLength) && (pattern.charAt(i) == '{')) {
-      int end = pattern.indexOf('}', i);
-      if (end > i) {
-	String r = pattern.substring(i + 1, end);
-	i = end+1;
-	return r;
-      }
-    }
-    return null;
-  }
-
-
-  /**
-     The option is expected to be in decimal and positive. In case of
-     error, zero is returned.  */
-  protected
-  int extractPrecisionOption() {
-    String opt = extractOption();
-    int r = 0;
-    if(opt != null) {
-      try {
-	r = Integer.parseInt(opt);
-	if(r <= 0) {
-	    //LogLog.error("Precision option (" + opt + ") isn't a positive integer.");
-	    r = 0;
-	}
-      }
-      catch (NumberFormatException e) {
-	//LogLog.error("Category option \""+opt+"\" not a decimal integer.", e);
-      }
-    }
-    return r;
-  }
-
-  public
-  PatternConverter parse() {
-    char c;
-    i = 0;
-    while(i < patternLength) {
-      c = pattern.charAt(i++);
-      switch(state) {
-      case LITERAL_STATE:
-        // In literal state, the last char is always a literal.
-        if(i == patternLength) {
-          currentLiteral.append(c);
-          continue;
-        }
-        if(c == ESCAPE_CHAR) {
-          // peek at the next char.
-          switch(pattern.charAt(i)) {
-          case ESCAPE_CHAR:
-            currentLiteral.append(c);
-            i++; // move pointer
-            break;
-          case 'n':
-            currentLiteral.append(LINE_SEP);
-            i++; // move pointer
-            break;
-          default:
-            if(currentLiteral.length() != 0) {
-              addToList(new LiteralPatternConverter(
-                                                  currentLiteral.toString()));
-              //LogLog.debug("Parsed LITERAL converter: \""
-              //           +currentLiteral+"\".");
-            }
-            currentLiteral.setLength(0);
-            currentLiteral.append(c); // append %
-            state = CONVERTER_STATE;
-            formattingInfo.reset();
-          }
-        }
-        else {
-          currentLiteral.append(c);
-        }
-        break;
-      case CONVERTER_STATE:
-	currentLiteral.append(c);
-	switch(c) {
-	case '-':
-	  formattingInfo.leftAlign = true;
-	  break;
-	case '.':
-	  state = DOT_STATE;
-	  break;
-	default:
-	  if(c >= '0' && c <= '9') {
-	    formattingInfo.min = c - '0';
-	    state = MIN_STATE;
-	  }
-	  else
-	    finalizeConverter(c);
-	} // switch
-	break;
-      case MIN_STATE:
-	currentLiteral.append(c);
-	if(c >= '0' && c <= '9')
-	  formattingInfo.min = formattingInfo.min*10 + (c - '0');
-	else if(c == '.')
-	  state = DOT_STATE;
-	else {
-	  finalizeConverter(c);
-	}
-	break;
-      case DOT_STATE:
-	currentLiteral.append(c);
-	if(c >= '0' && c <= '9') {
-	  formattingInfo.max = c - '0';
-	   state = MAX_STATE;
-	}
-	else {
-	  //LogLog.error("Error occured in position "+i+".\n Was expecting digit, instead got char \""+c+"\".");
-	  state = LITERAL_STATE;
-	}
-	break;
-      case MAX_STATE:
-	currentLiteral.append(c);
-	if(c >= '0' && c <= '9')
-	  formattingInfo.max = formattingInfo.max*10 + (c - '0');
-	else {
-	  finalizeConverter(c);
-	  state = LITERAL_STATE;
-	}
-	break;
-      } // switch
-    } // while
-    if(currentLiteral.length() != 0) {
-      addToList(new LiteralPatternConverter(currentLiteral.toString()));
-      //LogLog.debug("Parsed LITERAL converter: \""+currentLiteral+"\".");
-    }
-    return head;
-  }
-
-  protected
-  void finalizeConverter(char c) {
-    PatternConverter pc = null;
-    switch(c) {
-    case 'c':
-      pc = new CategoryPatternConverter(formattingInfo,
-					extractPrecisionOption());
-      //LogLog.debug("CATEGORY converter.");
-      //formattingInfo.dump();
-      currentLiteral.setLength(0);
-      break;
-    case 'C':
-      pc = new ClassNamePatternConverter(formattingInfo,
-					 extractPrecisionOption());
-      //LogLog.debug("CLASS_NAME converter.");
-      //formattingInfo.dump();
-      currentLiteral.setLength(0);
-      break;
-    case 'd':
-      String dateFormatStr = AbsoluteTimeDateFormat.ISO8601_DATE_FORMAT;
-      DateFormat df;
-      String dOpt = extractOption();
-      if(dOpt != null)
-	dateFormatStr = dOpt;
-
-      if(dateFormatStr.equalsIgnoreCase(
-                                    AbsoluteTimeDateFormat.ISO8601_DATE_FORMAT))
-	df = new  ISO8601DateFormat();
-      else if(dateFormatStr.equalsIgnoreCase(
-                                   AbsoluteTimeDateFormat.ABS_TIME_DATE_FORMAT))
-	df = new AbsoluteTimeDateFormat();
-      else if(dateFormatStr.equalsIgnoreCase(
-                              AbsoluteTimeDateFormat.DATE_AND_TIME_DATE_FORMAT))
-	df = new DateTimeDateFormat();
-      else {
-	try {
-	  df = new SimpleDateFormat(dateFormatStr);
-	}
-	catch (IllegalArgumentException e) {
-	  //LogLog.error("Could not instantiate SimpleDateFormat with " + dateFormatStr, e);
-	  df = new ISO8601DateFormat();
-	}
-      }
-      pc = new DatePatternConverter(formattingInfo, df);
-      //LogLog.debug("DATE converter {"+dateFormatStr+"}.");
-      //formattingInfo.dump();
-      currentLiteral.setLength(0);
-      break;
-    case 'F':
-      pc = new LocationPatternConverter(formattingInfo,
-					FILE_LOCATION_CONVERTER);
-      //LogLog.debug("File name converter.");
-      //formattingInfo.dump();
-      currentLiteral.setLength(0);
-      break;
-    /*case 'l':
-      pc = new LocationPatternConverter(formattingInfo,
-					FULL_LOCATION_CONVERTER);
-      //LogLog.debug("Location converter.");
-      //formattingInfo.dump();
-      currentLiteral.setLength(0);
-      break;*/
-    case 'L':
-      pc = new LocationPatternConverter(formattingInfo,
-					LINE_LOCATION_CONVERTER);
-      //LogLog.debug("LINE NUMBER converter.");
-      //formattingInfo.dump();
-      currentLiteral.setLength(0);
-      break;
-    case 'm':
-      pc = new BasicPatternConverter(formattingInfo, MESSAGE_CONVERTER);
-      //LogLog.debug("MESSAGE converter.");
-      //formattingInfo.dump();
-      currentLiteral.setLength(0);
-      break;
-    case 'M':
-      pc = new LocationPatternConverter(formattingInfo,
-					METHOD_LOCATION_CONVERTER);
-      //LogLog.debug("METHOD converter.");
-      //formattingInfo.dump();
-      currentLiteral.setLength(0);
-      break;
-    case 'p':
-      pc = new BasicPatternConverter(formattingInfo, LEVEL_CONVERTER);
-      //LogLog.debug("LEVEL converter.");
-      //formattingInfo.dump();
-      currentLiteral.setLength(0);
-      break;
-    case 'r':
-      pc = new BasicPatternConverter(formattingInfo,
-					 RELATIVE_TIME_CONVERTER);
-      //LogLog.debug("RELATIVE time converter.");
-      //formattingInfo.dump();
-      currentLiteral.setLength(0);
-      break;
-    case 't':
-      pc = new BasicPatternConverter(formattingInfo, THREAD_CONVERTER);
-      //LogLog.debug("THREAD converter.");
-      //formattingInfo.dump();
-      currentLiteral.setLength(0);
-      break;
-      /*case 'u':
-      if(i < patternLength) {
-	char cNext = pattern.charAt(i);
-	if(cNext >= '0' && cNext <= '9') {
-	  pc = new UserFieldPatternConverter(formattingInfo, cNext - '0');
-	  LogLog.debug("USER converter ["+cNext+"].");
-	  formattingInfo.dump();
-	  currentLiteral.setLength(0);
-	  i++;
-	}
-	else
-	  LogLog.error("Unexpected char" +cNext+" at position "+i);
-      }
-      break;*/
-    /*case 'x':
-      pc = new BasicPatternConverter(formattingInfo, NDC_CONVERTER);
-      //LogLog.debug("NDC converter.");
-      currentLiteral.setLength(0);
-      break;*/
-    case 'X':
-      String xOpt = extractOption();
-      pc = new MDCPatternConverter(formattingInfo, xOpt);
-      currentLiteral.setLength(0);
-      break;
-    default:
-      //LogLog.error("Unexpected char [" +c+"] at position "+i+" in conversion patterrn.");
-      pc = new LiteralPatternConverter(currentLiteral.toString());
-      currentLiteral.setLength(0);
-    }
-
-    addConverter(pc);
-  }
-
-  protected
-  void addConverter(PatternConverter pc) {
-    currentLiteral.setLength(0);
-    // Add the pattern converter to the list.
-    addToList(pc);
-    // Next pattern is assumed to be a literal.
-    state = LITERAL_STATE;
-    // Reset formatting info
-    formattingInfo.reset();
-  }
-
-  // ---------------------------------------------------------------------
-  //                      PatternConverters
-  // ---------------------------------------------------------------------
-
-  private static class BasicPatternConverter extends PatternConverter {
-    int type;
-
-    BasicPatternConverter(FormattingInfo formattingInfo, int type) {
-      super(formattingInfo);
-      this.type = type;
-    }
-
-    public
-    String convert(PaxLoggingEvent event) {
-      switch(type) {
-      case RELATIVE_TIME_CONVERTER:
-	return (Long.toString(event.getTimeStamp() - LoggingEvent.getStartTime()));
-      case THREAD_CONVERTER:
-	return event.getThreadName();
-      case LEVEL_CONVERTER:
-	return event.getLevel().toString();
-    //  case NDC_CONVERTER:
-	//return event.getNDC();
-      case MESSAGE_CONVERTER: {
-	return event.getRenderedMessage();
-      }
-      default: return null;
-      }
-    }
-  }
-
-  private static class LiteralPatternConverter extends PatternConverter {
-    private String literal;
-
-    LiteralPatternConverter(String value) {
-      literal = value;
-    }
-
-    public
-    final
-    void format(StringBuffer sbuf, LoggingEvent event) {
-      sbuf.append(literal);
-    }
-
-    public
-    String convert(PaxLoggingEvent event) {
-      return literal;
-    }
-  }
-
-  private static class DatePatternConverter extends PatternConverter {
-    private DateFormat df;
-    private Date date;
-
-    DatePatternConverter(FormattingInfo formattingInfo, DateFormat df) {
-      super(formattingInfo);
-      date = new Date();
-      this.df = df;
-    }
-
-    public
-    String convert(PaxLoggingEvent event) {
-      date.setTime(event.getTimeStamp());
-      String converted = null;
-      try {
-        converted = df.format(date);
-      }
-      catch (Exception ex) {
-        //LogLog.error("Error occured while converting date.", ex);
-      }
-      return converted;
-    }
-  }
-
-  private class LocationPatternConverter extends PatternConverter {
-    int type;
-
-    LocationPatternConverter(FormattingInfo formattingInfo, int type) {
-      super(formattingInfo);
-      this.type = type;
-    }
-
-    public
-    String convert(PaxLoggingEvent event) {
-      PaxLocationInfo locationInfo = event.getLocationInformation();
-      switch(type) {
-      /*case FULL_LOCATION_CONVERTER:
-	return locationInfo.fullInfo;*/
-      case METHOD_LOCATION_CONVERTER:
-	return locationInfo.getMethodName();
-      case LINE_LOCATION_CONVERTER:
-	return locationInfo.getLineNumber();
-      case FILE_LOCATION_CONVERTER:
-	return locationInfo.getFileName();
-      default: return null;
-      }
-    }
-  }
-
-  private static abstract class NamedPatternConverter extends PatternConverter {
-    int precision;
-
-    NamedPatternConverter(FormattingInfo formattingInfo, int precision) {
-      super(formattingInfo);
-      this.precision =  precision;
-    }
-
-    abstract
-    String getFullyQualifiedName(PaxLoggingEvent event);
-
-    public
-    String convert(PaxLoggingEvent event) {
-      String n = getFullyQualifiedName(event);
-      if(precision <= 0)
-	return n;
-      else {
-	int len = n.length();
-
-	// We substract 1 from 'len' when assigning to 'end' to avoid out of
-	// bounds exception in return r.substring(end+1, len). This can happen if
-	// precision is 1 and the category name ends with a dot.
-	int end = len -1 ;
-	for(int i = precision; i > 0; i--) {
-	  end = n.lastIndexOf('.', end-1);
-	  if(end == -1)
-	    return n;
-	}
-	return n.substring(end+1, len);
-      }
-    }
-  }
-
-  private class ClassNamePatternConverter extends NamedPatternConverter {
-
-    ClassNamePatternConverter(FormattingInfo formattingInfo, int precision) {
-      super(formattingInfo, precision);
-    }
-
-    String getFullyQualifiedName(PaxLoggingEvent event) {
-      return event.getLocationInformation().getClassName();
-    }
-  }
-
-  private class CategoryPatternConverter extends NamedPatternConverter {
-
-    CategoryPatternConverter(FormattingInfo formattingInfo, int precision) {
-      super(formattingInfo, precision);
-    }
-
-    String getFullyQualifiedName(PaxLoggingEvent event) {
-      return event.getLoggerName();
-    }
-  }
-
-  private class MDCPatternConverter extends PatternConverter {
-    String key;
-
-    MDCPatternConverter(FormattingInfo formattingInfo, String key) {
-      super(formattingInfo);
-      this.key = key;
-    }
-
-    public
-    String convert(PaxLoggingEvent event) {
-        if (key == null) {
-            StringBuffer buf = new StringBuffer("{");
-            Map properties = event.getProperties();
-            if (properties.size() > 0) {
-              Object[] keys = properties.keySet().toArray();
-              Arrays.sort(keys);
-              for (int i = 0; i < keys.length; i++) {
-                  buf.append('{');
-                  buf.append(keys[i]);
-                  buf.append(',');
-                  buf.append(properties.get(keys[i]));
-                  buf.append('}');
-              }
-            }
-            buf.append('}');
-            return buf.toString();
-        } else {
-          Object val = event.getProperties().get(key);
-          if(val == null) {
-              return null;
-          } else {
-              return val.toString();
-          }
-        }
-    }
-
-  }
-}
-
diff --git a/karaf-2.3.x/shell/log/src/main/resources/OSGI-INF/blueprint/shell-log.xml b/karaf-2.3.x/shell/log/src/main/resources/OSGI-INF/blueprint/shell-log.xml
deleted file mode 100644
index b8fcf96..0000000
--- a/karaf-2.3.x/shell/log/src/main/resources/OSGI-INF/blueprint/shell-log.xml
+++ /dev/null
@@ -1,102 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
-           default-activation="lazy">
-
-    <!-- TODO: use dynamic CM config -->
-
-    <cm:property-placeholder persistent-id="org.apache.karaf.log" update-strategy="reload">
-        <cm:default-properties>
-            <cm:property name="size" value="500"/>
-            <cm:property name="pattern" value="%d{ABSOLUTE} | %-5.5p | %-16.16t | %-32.32c{1} | %-32.32C %4L | %m%n"/>
-            <cm:property name="fatalColor" value="31"/>
-            <cm:property name="errorColor" value="31"/>
-            <cm:property name="warnColor" value="35"/>
-            <cm:property name="infoColor" value="36"/>
-            <cm:property name="debugColor" value="39"/>
-            <cm:property name="traceColor" value="39"/>
-        </cm:default-properties>
-    </cm:property-placeholder>
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.0.0">
-        <command name="log/display">
-            <action class="org.apache.karaf.shell.log.DisplayLog">
-                <property name="events" ref="events"/>
-                <property name="pattern" value="${pattern}"/>
-                <property name="fatalColor" value="${fatalColor}"/>
-                <property name="errorColor" value="${errorColor}"/>
-                <property name="warnColor" value="${warnColor}"/>
-                <property name="infoColor" value="${infoColor}"/>
-                <property name="debugColor" value="${debugColor}"/>
-                <property name="traceColor" value="${traceColor}"/>
-            </action>
-        </command>
-        <command name="log/display-exception">
-            <action class="org.apache.karaf.shell.log.DisplayException">
-                <property name="events" ref="events"/>
-            </action>
-        </command>
-        <command name="log/clear">
-            <action class="org.apache.karaf.shell.log.ClearLog">
-                <property name="events" ref="events"/>
-            </action>
-        </command>
-        <command name="log/get">
-            <action class="org.apache.karaf.shell.log.GetLogLevel" />
-        </command>
-        <command name="log/set">
-            <action class="org.apache.karaf.shell.log.SetLogLevel" />
-            <completers>
-            	<ref component-id="logLevelCompleter"/>
-            	<null/>
-            </completers>
-        </command>
-        <command name="log/tail">
-            <action class="org.apache.karaf.shell.log.LogTail">
-                <property name="events" ref="events"/>
-                <property name="pattern" value="${pattern}"/>
-                <property name="fatalColor" value="${fatalColor}"/>
-                <property name="errorColor" value="${errorColor}"/>
-                <property name="warnColor" value="${warnColor}"/>
-                <property name="infoColor" value="${infoColor}"/>
-                <property name="debugColor" value="${debugColor}"/>
-                <property name="traceColor" value="${traceColor}"/>
-            </action>
-        </command>
-    </command-bundle>
-
-    <bean id="vmLogAppender" class="org.apache.karaf.shell.log.VmLogAppender">
-        <property name="events" ref="events"/>
-    </bean>
-
-    <bean id="events" class="org.apache.karaf.shell.log.LruList">
-        <argument value="${size}"/>
-    </bean>
-    
-    <bean id="logLevelCompleter" class="org.apache.karaf.shell.log.completers.LogLevelCompleter"/>
-
-    <service ref="vmLogAppender" interface="org.ops4j.pax.logging.spi.PaxAppender">
-        <service-properties>
-                <entry key="org.ops4j.pax.logging.appender.name" value="VmLogAppender"/>
-        </service-properties>
-    </service>
-
-</blueprint>
diff --git a/karaf-2.3.x/shell/log/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/shell/log/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 8cbe50b..0000000
--- a/karaf-2.3.x/shell/log/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,21 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides Karaf shell commands to manipulate the Log service.
-
-    The following commands are available:
-    \u001B[36mlog:clear\u001B[0m Clear log entries.
-    \u001B[36mlog:display-exception\u001B[0m Displays the last occurred exception from the log.
-    \u001B[36mlog:display\u001B[0m Displays log entries.
-    \u001B[36mlog:get\u001B[0m Shows the currently set log level.
-    \u001B[36mlog:tail\u001B[0m Continuously display log entries.
-    \u001B[36mlog:set\u001B[0m Sets the log level.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mCommands\u001B[0m and \u001B[36mLogging system\u001B[0m sections of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/shell/log/src/main/resources/OSGI-INF/metatype/metatype.properties b/karaf-2.3.x/shell/log/src/main/resources/OSGI-INF/metatype/metatype.properties
deleted file mode 100644
index 713283f..0000000
--- a/karaf-2.3.x/shell/log/src/main/resources/OSGI-INF/metatype/metatype.properties
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-#  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.
-#
-
-#
-# This file contains localization strings for configuration labels and
-# descriptions as used in the metatype.xml descriptor
-
-log.name = Apache Karaf Log
-log.description = Configuration of Apache Karaf Log
-
-size.name = Size
-size.description = size of the log to keep in memory
-
-pattern.name = Pattern
-pattern.description = Pattern used to display log entries
diff --git a/karaf-2.3.x/shell/log/src/main/resources/OSGI-INF/metatype/metatype.xml b/karaf-2.3.x/shell/log/src/main/resources/OSGI-INF/metatype/metatype.xml
deleted file mode 100644
index 147cb82..0000000
--- a/karaf-2.3.x/shell/log/src/main/resources/OSGI-INF/metatype/metatype.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?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.
-
--->
-<metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.0.0" localization="OSGI-INF/metatype/metatype">
-    <OCD id="org.apache.karaf.log" name="%log.name" description="%log.description">
-        <AD id="size" type="Integer" default="500" name="%size.name"
-            description="%size.description"/>
-        <AD id="pattern" type="String" default="%d{ABSOLUTE} | %-5.5p | %-16.16t | %-32.32c{1} | %-32.32C %4L | %m%n" name="%pattern.name"
-            description="%pattern.description"/>
-    </OCD>
-    <Designate pid="org.apache.karaf.log">
-        <Object ocdref="org.apache.karaf.log"/>
-    </Designate>
-</metatype:MetaData>
diff --git a/karaf-2.3.x/shell/log/src/test/java/org/apache/karaf/shell/log/SetLogLevelTest.java b/karaf-2.3.x/shell/log/src/test/java/org/apache/karaf/shell/log/SetLogLevelTest.java
deleted file mode 100644
index cedeb6a..0000000
--- a/karaf-2.3.x/shell/log/src/test/java/org/apache/karaf/shell/log/SetLogLevelTest.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.log;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.util.Hashtable;
-
-import junit.framework.TestCase;
-
-import org.easymock.EasyMock;
-import org.osgi.service.cm.Configuration;
-
-/**
- * Test cases for {@link SetLogLevel}
- */
-@SuppressWarnings("unchecked")
-public class SetLogLevelTest extends TestCase {
-    
-    private static final String ROOT_LOGGER = "log4j.rootLogger";
-    private static final String PACKAGE_LOGGER = "log4j.logger.org.apache.karaf.test";
-    private static final PrintStream ORIGINAL_STDERR = System.err;
-    
-    private SetLogLevel command;
-    private Hashtable properties;
-    private ByteArrayOutputStream stderr;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        properties = new Hashtable();
-        stderr = new ByteArrayOutputStream();
-        System.setErr(new PrintStream(stderr));
-
-        final Configuration configuration = EasyMock.createMock(Configuration.class);
-        EasyMock.expect(configuration.getProperties()).andReturn(properties);
-        configuration.update(properties);
-        EasyMock.replay(configuration);
-        
-        command = new SetLogLevel() {
-            @Override
-            protected Configuration getConfiguration() throws IOException {
-                return configuration;
-            }
-        };
-    }
-    
-    @Override
-    protected void tearDown() throws Exception {
-        super.tearDown();
-        System.setErr(ORIGINAL_STDERR);
-    }
-    
-    public void testInvalidLogLevel() throws Exception {
-        runCommand("log:set INVALID");
-        assertTrue("Expected an error message on System.err",
-                   stderr.toString().contains("level must be set to"));
-    }
-    
-    public void testSetLogLevel() throws Exception {
-        runCommand("log:set INFO org.apache.karaf.test");
-        
-        assertEquals("INFO", properties.get(PACKAGE_LOGGER));
-    }
-    
-    public void testSetRootLogLevel() throws Exception {
-        runCommand("log:set INFO");
-        
-        assertEquals("INFO", properties.get(ROOT_LOGGER));
-    }
-    
-    public void testSetLogLevelLowerCase() throws Exception {
-        runCommand("log:set info org.apache.karaf.test");
-        
-        assertEquals("INFO", properties.get(PACKAGE_LOGGER));
-    }
-    
-    public void testSetRootLogLevelLowerCase() throws Exception {
-        runCommand("log:set info");
-        
-        assertEquals("INFO", properties.get(ROOT_LOGGER));
-    }
-    
-    public void testChangeLogLevel() throws Exception {
-        properties.put(PACKAGE_LOGGER, "DEBUG");
-        
-        runCommand("log:set INFO org.apache.karaf.test");
-        
-        assertEquals("INFO", properties.get(PACKAGE_LOGGER));
-    }
-    
-    public void testChangeRootLogLevel() throws Exception {
-        properties.put(ROOT_LOGGER, "DEBUG");
-        
-        runCommand("log:set INFO");
-        
-        assertEquals("INFO", properties.get(ROOT_LOGGER));
-    }
-    
-    public void testChangeLogLevelWithAppender() throws Exception {
-        properties.put(PACKAGE_LOGGER, "DEBUG, APPENDER1");
-        
-        runCommand("log:set INFO org.apache.karaf.test");
-        
-        assertEquals("INFO, APPENDER1", properties.get(PACKAGE_LOGGER));
-    }
-    
-    public void testChangeRootLogLevelWithAppender() throws Exception {
-        properties.put(ROOT_LOGGER, "DEBUG, APPENDER1");
-        
-        runCommand("log:set INFO");
-        
-        assertEquals("INFO, APPENDER1", properties.get(ROOT_LOGGER));
-    }
-    
-    
-    public void testUnsetLogLevel() throws Exception {
-        properties.put(PACKAGE_LOGGER, "DEBUG");
-
-        runCommand("log:set DEFAULT org.apache.karaf.test");
-        
-        assertFalse("Configuration for logger org.apache.karaf.test has been removed", 
-                    properties.containsKey(PACKAGE_LOGGER));
-    }
-    
-    
-    public void testUnsetRootLogLevel() throws Exception {
-        properties.put(ROOT_LOGGER, "INFO");
-        
-        runCommand("log:set DEFAULT");
-        
-        assertEquals("Configuration for root logger should not be removed",
-                     "INFO", properties.get(ROOT_LOGGER));
-        assertTrue("Expected an error message on System.err",
-                   stderr.toString().contains("Can not unset the ROOT logger"));
-    }
-    
-    /*
-     * Simulate running the log:set command
-     */
-    private void runCommand(String commandline) throws Exception {
-        String[] parts = commandline.split(" ");
-
-        command.level = parts[1];
-        if (parts.length == 3) {
-            command.logger = "org.apache.karaf.test";
-        }
-        
-        command.doExecute();
-    }
-}
diff --git a/karaf-2.3.x/shell/log/src/test/java/org/apache/karaf/shell/log/completers/LogLevelCompleterTest.java b/karaf-2.3.x/shell/log/src/test/java/org/apache/karaf/shell/log/completers/LogLevelCompleterTest.java
deleted file mode 100644
index 6bc34cd..0000000
--- a/karaf-2.3.x/shell/log/src/test/java/org/apache/karaf/shell/log/completers/LogLevelCompleterTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.log.completers;
-
-import java.util.LinkedList;
-import java.util.List;
-
-import org.apache.karaf.shell.log.Level;
-
-import junit.framework.TestCase;
-
-/**
- * Test cases for {@link LogLevelCompleter}
- */
-public class LogLevelCompleterTest extends TestCase {
-    
-    private final LogLevelCompleter completer = new LogLevelCompleter();
-    
-    public void testComplete() throws Exception {
-        assertCompletions("I", Level.INFO.name());
-        assertCompletions("D", Level.DEBUG.name(), Level.DEFAULT.name());
-    }
-    
-    public void testCompleteLowerCase() throws Exception {
-        assertCompletions("i", Level.INFO.name());
-        assertCompletions("d", Level.DEBUG.name(), Level.DEFAULT.name());
-    }
-    
-    public void testCompleteWithNullBuffer() throws Exception {
-        // an empty buffer should return all available options
-        assertCompletions(null, Level.strings());
-    }
-
-    private void assertCompletions(String buffer, String... results) {
-        List<String> candidates = new LinkedList<String>();
-        assertEquals("Completer should have found a match", 0, completer.complete(buffer, 0, candidates));
-        assertEquals(results.length, candidates.size());
-        for (String result : results) {
-            assertContains(result, candidates);
-        }
-    }
-    
-    private void assertContains(String value, List<String> values) {
-        for (String element : values) {
-            if (value.trim().equals(element.trim())) {
-                return;
-            }
-        }
-        fail("Element " + value + " not found in array");
-    }
-}
diff --git a/karaf-2.3.x/shell/obr/NOTICE b/karaf-2.3.x/shell/obr/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/shell/obr/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/shell/obr/pom.xml b/karaf-2.3.x/shell/obr/pom.xml
deleted file mode 100644
index dbd6cd7..0000000
--- a/karaf-2.3.x/shell/obr/pom.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.shell</groupId>
-        <artifactId>shell</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.shell.obr</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Shell :: OBR Commands</name>
-    <description>This bundle provides Karaf shell commands to manipulate the OBR service.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>commons-collections</groupId>
-            <artifactId>commons-collections</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.bundlerepository</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            org.apache.felix.service.command,
-                            org.apache.felix.gogo.commands,
-                            org.apache.karaf.shell.console,
-                            *
-                        </Import-Package>
-                        <Private-Package>!*</Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/AddUrlCommand.java b/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/AddUrlCommand.java
deleted file mode 100644
index 7118e81..0000000
--- a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/AddUrlCommand.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.obr;
-
-import java.util.List;
-
-import org.apache.felix.bundlerepository.RepositoryAdmin;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-
-@Command(scope = "obr", name = "addUrl", description = "Adds a list of repository URLs to the OBR service.")
-public class AddUrlCommand extends ObrCommandSupport {
-
-    @Argument(index = 0, name = "urls", description = "Repository URLs to add to the OBR service separated by whitespaces", required = true, multiValued = true)
-    List<String> urls;
-
-    protected void doExecute(RepositoryAdmin admin) throws Exception {
-        for (String url : urls) {
-            admin.addRepository(url);
-        }
-        persistRepositoryList(admin);
-    }
-}
diff --git a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/DeployCommand.java b/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/DeployCommand.java
deleted file mode 100644
index 73ccefd..0000000
--- a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/DeployCommand.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.obr;
-
-import java.util.List;
-
-import org.apache.felix.bundlerepository.RepositoryAdmin;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-
-@Command(scope = "obr", name = "deploy", description = "Deploys a list of bundles using OBR service.")
-public class DeployCommand extends ObrCommandSupport {
-
-    @Argument(index = 0, name = "bundles", description = "List of bundle names to deploy (separated by whitespaces)", required = true, multiValued = true)
-    protected List<String> bundles;
-
-    @Option(name = "-s", aliases = { "--start" }, description = "Start all deployed bundles", required = false, multiValued = false)
-    protected boolean start = false;
-
-    @Option(name = "-d", aliases = { "--deployOptional" }, description = "Deploy optional bundles", required = false, multiValued = false)
-    protected boolean deployOptional = false;
-
-    protected void doExecute(RepositoryAdmin admin) throws Exception {
-        doDeploy(admin, bundles, start, deployOptional);
-    }
-
-}
diff --git a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/FindCommand.java b/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/FindCommand.java
deleted file mode 100644
index f9dc70e..0000000
--- a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/FindCommand.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.obr;
-
-import org.apache.felix.bundlerepository.Capability;
-import org.apache.felix.bundlerepository.RepositoryAdmin;
-import org.apache.felix.bundlerepository.Requirement;
-import org.apache.felix.bundlerepository.Resource;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-
-import java.io.PrintStream;
-import java.lang.reflect.Array;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-@Command(scope = "obr", name = "find", description = "Find OBR bundles for a given filter.")
-public class FindCommand extends ObrCommandSupport {
-
-    @Argument(index = 0, name = "requirements", description = "Requirement", required = true, multiValued = true)
-    List<String> requirements;
-
-    protected void doExecute(RepositoryAdmin admin) throws Exception {
-        Resource[] resources = admin.discoverResources(parseRequirements(admin, requirements));
-        if (resources == null)
-        {
-            System.err.println("No matching resources.");
-        }
-        else
-        {
-            for (int resIdx = 0; resIdx < resources.length; resIdx++)
-            {
-                if (resIdx > 0)
-                {
-                    System.out.println("");
-                }
-                printResource(System.out, resources[resIdx]);
-            }
-        }
-    }
-
-    private void printResource(PrintStream out, Resource resource)
-    {
-        String name = resource.getPresentationName();
-        if (name == null) {
-            name = resource.getSymbolicName();
-        }
-
-        printUnderline(out, name.length());
-        out.println(name);
-        printUnderline(out, name    .length());
-
-        Map map = resource.getProperties();
-        for (Iterator iter = map.entrySet().iterator(); iter.hasNext(); )
-        {
-            Map.Entry entry = (Map.Entry) iter.next();
-            if (entry.getValue().getClass().isArray())
-            {
-                out.println(entry.getKey() + ":");
-                for (int j = 0; j < Array.getLength(entry.getValue()); j++)
-                {
-                    out.println("   " + Array.get(entry.getValue(), j));
-                }
-            }
-            else
-            {
-                out.println(entry.getKey() + ": " + entry.getValue());
-            }
-        }
-
-        Requirement[] reqs = resource.getRequirements();
-        if ((reqs != null) && (reqs.length > 0))
-        {
-            boolean hdr = false;
-            for (int i = 0; i < reqs.length; i++)
-            {
-                if (!reqs[i].isOptional())
-                {
-                    if (!hdr)
-                    {
-                        hdr = true;
-                        out.println("Requirements:");
-                    }
-                    out.println("   " + reqs[i].getName() + ":" + reqs[i].getFilter());
-                }
-            }
-            hdr = false;
-            for (int i = 0; i < reqs.length; i++)
-            {
-                if (reqs[i].isOptional())
-                {
-                    if (!hdr)
-                    {
-                        hdr = true;
-                        out.println("Optional Requirements:");
-                    }
-                    out.println("   " + reqs[i].getName() + ":" + reqs[i].getFilter());
-                }
-            }
-        }
-
-        Capability[] caps = resource.getCapabilities();
-        if ((caps != null) && (caps.length > 0))
-        {
-            out.println("Capabilities:");
-            for (int i = 0; i < caps.length; i++)
-            {
-                out.println("   " + caps[i].getName() + ":" + caps[i].getPropertiesAsMap());
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/InfoCommand.java b/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/InfoCommand.java
deleted file mode 100644
index 0dbc918..0000000
--- a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/InfoCommand.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.obr;
-
-import java.io.PrintStream;
-import java.lang.reflect.Array;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.felix.bundlerepository.Capability;
-import org.apache.felix.bundlerepository.RepositoryAdmin;
-import org.apache.felix.bundlerepository.Requirement;
-import org.apache.felix.bundlerepository.Resource;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-
-@Command(scope = "obr", name = "info", description = "Prints information about OBR bundles.")
-public class InfoCommand extends ObrCommandSupport {
-
-    @Argument(index = 0, name = "bundles", description = "Specify bundles to query for information (separated by whitespaces)", required = true, multiValued = true)
-    List<String> bundles;
-
-    protected void doExecute(RepositoryAdmin admin) throws Exception {
-        for (String bundle : bundles) {
-            String[] target = getTarget(bundle);
-            Resource[] resources = searchRepository(admin, target[0], target[1]);
-            if (resources == null)
-            {
-                System.err.println("Unknown bundle and/or version: "
-                    + target[0]);
-            }
-            else
-            {
-                for (int resIdx = 0; resIdx < resources.length; resIdx++)
-                {
-                    if (resIdx > 0)
-                    {
-                        System.out.println("");
-                    }
-                    printResource(System.out, resources[resIdx]);
-                }
-            }
-        }
-    }
-
-    private void printResource(PrintStream out, Resource resource)
-    {
-        printUnderline(out, resource.getPresentationName().length());
-        out.println(resource.getPresentationName());
-        printUnderline(out, resource.getPresentationName().length());
-
-        Map map = resource.getProperties();
-        for (Iterator iter = map.entrySet().iterator(); iter.hasNext(); )
-        {
-            Map.Entry entry = (Map.Entry) iter.next();
-            if (entry.getValue().getClass().isArray())
-            {
-                out.println(entry.getKey() + ":");
-                for (int j = 0; j < Array.getLength(entry.getValue()); j++)
-                {
-                    out.println("   " + Array.get(entry.getValue(), j));
-                }
-            }
-            else
-            {
-                out.println(entry.getKey() + ": " + entry.getValue());
-            }
-        }
-
-        Requirement[] reqs = resource.getRequirements();
-        if ((reqs != null) && (reqs.length > 0))
-        {
-            out.println("Requires:");
-            for (int i = 0; i < reqs.length; i++)
-            {
-                out.println("   " + reqs[i].getName() + ":" + reqs[i].getFilter());
-            }
-        }
-
-        Capability[] caps = resource.getCapabilities();
-        if ((caps != null) && (caps.length > 0))
-        {
-            out.println("Capabilities:");
-            for (int i = 0; i < caps.length; i++)
-            {
-                out.println("   " + caps[i].getName() + ":" + caps[i].getPropertiesAsMap());
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/ListCommand.java b/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/ListCommand.java
deleted file mode 100644
index ad3b185..0000000
--- a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/ListCommand.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.obr;
-
-import java.util.List;
-
-import org.apache.felix.bundlerepository.RepositoryAdmin;
-import org.apache.felix.bundlerepository.Resource;
-import org.osgi.framework.Version;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-
-@Command(scope = "obr", name = "list", description = "Lists OBR bundles, optionally providing the given packages.")
-public class ListCommand extends ObrCommandSupport {
-
-    @Argument(index = 0, name = "packages", description = "A list of packages separated by whitespaces.", required = false, multiValued = true)
-    List<String> packages;
-
-    protected void doExecute(RepositoryAdmin admin) throws Exception {
-        String substr = null;
-
-        if (packages != null) {
-            for (String arg : packages)
-            {
-                // Add a space in between tokens.
-                if (substr == null)
-                {
-                    substr = "";
-                }
-                else
-                {
-                    substr += " ";
-                }
-
-                substr += arg;
-            }
-        }
-        
-        StringBuffer sb = new StringBuffer();
-        if ((substr == null) || (substr.length() == 0))
-        {
-            sb.append("(|(presentationname=*)(symbolicname=*))");
-        }
-        else
-        {
-            sb.append("(|(presentationname=*");
-            sb.append(substr);
-            sb.append("*)(symbolicname=*");
-            sb.append(substr);
-            sb.append("*))");
-        }
-        Resource[] resources = admin.discoverResources(sb.toString());
-        for (int resIdx = 0; (resources != null) && (resIdx < resources.length); resIdx++)
-        {
-            String name = resources[resIdx].getPresentationName();
-            String bundleSymbolicName = resources[resIdx].getSymbolicName();
-            Version version = resources[resIdx].getVersion();
-            
-            StringBuffer outputString = new StringBuffer();
-            if(bundleSymbolicName != null )
-            {
-            	outputString.append(bundleSymbolicName);
-            	outputString.append(" - ");            	
-            }
-            if(name != null)
-            {
-            	outputString.append(name);
-            	outputString.append(" ");
-            }
-            if(version != null)
-            {
-            	outputString.append("(");
-            	outputString.append(version);
-            	outputString.append(")");
-            }
-            
-            System.out.println(outputString.toString());
-        }
-
-        if (resources == null)
-        {
-            System.out.println("No matching bundles.");
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/ListUrlCommand.java b/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/ListUrlCommand.java
deleted file mode 100644
index c5abc0e..0000000
--- a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/ListUrlCommand.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.obr;
-
-import org.apache.felix.bundlerepository.Repository;
-import org.apache.felix.bundlerepository.RepositoryAdmin;
-import org.apache.felix.gogo.commands.Command;
-
-@Command(scope = "obr", name = "listUrl", description = "Displays the repository URLs currently associated with the OBR service.")
-public class ListUrlCommand extends ObrCommandSupport {
-
-    protected void doExecute(RepositoryAdmin admin) {
-        Repository[] repos = admin.listRepositories();
-        if ((repos != null) && (repos.length > 0)) {
-            for (int i = 0; i < repos.length; i++) {
-                System.out.println(repos[i].getURI());
-            }
-        } else {
-            System.out.println("No repository URLs are set.");
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/ObrCommandSupport.java b/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/ObrCommandSupport.java
deleted file mode 100644
index 155301d..0000000
--- a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/ObrCommandSupport.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.obr;
-
-import java.io.*;
-import java.util.List;
-import java.util.Properties;
-
-import org.apache.felix.bundlerepository.Reason;
-import org.apache.felix.bundlerepository.Repository;
-import org.apache.felix.bundlerepository.RepositoryAdmin;
-import org.apache.felix.bundlerepository.Requirement;
-import org.apache.felix.bundlerepository.Resolver;
-import org.apache.felix.bundlerepository.Resource;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
-import org.osgi.framework.Version;
-
-public abstract class ObrCommandSupport extends OsgiCommandSupport {
-
-    protected static final char VERSION_DELIM = ',';
-
-    protected Object doExecute() throws Exception {
-        // Get repository admin service.
-        ServiceReference ref = getBundleContext().getServiceReference(RepositoryAdmin.class.getName());
-        if (ref == null) {
-            System.out.println("RepositoryAdmin service is unavailable.");
-            return null;
-        }
-        try {
-            RepositoryAdmin admin = (RepositoryAdmin) getBundleContext().getService(ref);
-            if (admin == null) {
-                System.out.println("RepositoryAdmin service is unavailable.");
-                return null;
-            }
-
-            doExecute(admin);
-        } finally {
-            getBundleContext().ungetService(ref);
-        }
-        return null;
-    }
-
-    protected abstract void doExecute(RepositoryAdmin admin) throws Exception;
-
-    protected Resource[] searchRepository(RepositoryAdmin admin, String targetId, String targetVersion) throws InvalidSyntaxException {
-        // Try to see if the targetId is a bundle ID.
-        try {
-            Bundle bundle = getBundleContext().getBundle(Long.parseLong(targetId));
-            targetId = bundle.getSymbolicName();
-        } catch (NumberFormatException ex) {
-            // It was not a number, so ignore.
-        }
-
-        // The targetId may be a bundle name or a bundle symbolic name,
-        // so create the appropriate LDAP query.
-        StringBuffer sb = new StringBuffer("(|(presentationname=");
-        sb.append(targetId);
-        sb.append(")(symbolicname=");
-        sb.append(targetId);
-        sb.append("))");
-        if (targetVersion != null) {
-            sb.insert(0, "(&");
-            sb.append("(version=");
-            sb.append(targetVersion);
-            sb.append("))");
-        }
-        return admin.discoverResources(sb.toString());
-    }
-
-    public Resource selectNewestVersion(Resource[] resources) {
-        int idx = -1;
-        Version v = null;
-        for (int i = 0; (resources != null) && (i < resources.length); i++) {
-            if (i == 0) {
-                idx = 0;
-                v = resources[i].getVersion();
-            } else {
-                Version vtmp = resources[i].getVersion();
-                if (vtmp.compareTo(v) > 0) {
-                    idx = i;
-                    v = vtmp;
-                }
-            }
-        }
-        return (idx < 0) ? null : resources[idx];
-    }
-
-    protected String[] getTarget(String bundle) {
-        String[] target;
-        int idx = bundle.indexOf(VERSION_DELIM);
-        if (idx > 0) {
-            target = new String[]{bundle.substring(0, idx), bundle.substring(idx + 1)};
-        } else {
-            target = new String[]{bundle, null};
-        }
-        return target;
-    }
-
-    protected void printUnderline(PrintStream out, int length) {
-        for (int i = 0; i < length; i++) {
-            out.print('-');
-        }
-        out.println("");
-    }
-
-    protected void doDeploy(RepositoryAdmin admin, List<String> bundles, boolean start, boolean deployOptional) throws Exception {
-        Resolver resolver = admin.resolver();
-        for (String bundle : bundles) {
-            String[] target = getTarget(bundle);
-            Resource resource = selectNewestVersion(searchRepository(admin, target[0], target[1]));
-            if (resource != null) {
-                resolver.add(resource);
-            } else {
-                System.err.println("Unknown bundle - " + target[0]);
-            }
-        }
-        if ((resolver.getAddedResources() != null) &&
-                (resolver.getAddedResources().length > 0)) {
-            if (resolver.resolve(deployOptional ? 0 : Resolver.NO_OPTIONAL_RESOURCES)) {
-                System.out.println("Target resource(s):");
-                printUnderline(System.out, 19);
-                Resource[] resources = resolver.getAddedResources();
-                for (int resIdx = 0; (resources != null) && (resIdx < resources.length); resIdx++) {
-                    System.out.println("   " + resources[resIdx].getPresentationName()
-                            + " (" + resources[resIdx].getVersion() + ")");
-                }
-                resources = resolver.getRequiredResources();
-                if ((resources != null) && (resources.length > 0)) {
-                    System.out.println("\nRequired resource(s):");
-                    printUnderline(System.out, 21);
-                    for (int resIdx = 0; resIdx < resources.length; resIdx++) {
-                        System.out.println("   " + resources[resIdx].getPresentationName()
-                                + " (" + resources[resIdx].getVersion() + ")");
-                    }
-                }
-                if (deployOptional) {
-                    resources = resolver.getOptionalResources();
-                    if ((resources != null) && (resources.length > 0)) {
-                        System.out.println("\nOptional resource(s):");
-                        printUnderline(System.out, 21);
-                        for (int resIdx = 0; resIdx < resources.length; resIdx++) {
-                            System.out.println("   " + resources[resIdx].getPresentationName()
-                                    + " (" + resources[resIdx].getVersion() + ")");
-                        }
-                    }
-                }
-                try {
-                    System.out.print("\nDeploying...");
-                    resolver.deploy(start ? Resolver.START : 0);
-                    System.out.println("done.");
-                } catch (IllegalStateException ex) {
-                    System.err.println(ex);
-                }
-            } else {
-                Reason[] reqs = resolver.getUnsatisfiedRequirements();
-                if ((reqs != null) && (reqs.length > 0)) {
-                    System.out.println("Unsatisfied requirement(s):");
-                    printUnderline(System.out, 27);
-                    for (int reqIdx = 0; reqIdx < reqs.length; reqIdx++) {
-                        System.out.println("   " + reqs[reqIdx].getRequirement().getFilter());
-                        System.out.println("      " + reqs[reqIdx].getResource().getPresentationName());
-                    }
-                } else {
-                    System.out.println("Could not resolve targets.");
-                }
-            }
-        }
-
-    }
-
-
-    protected Requirement parseRequirement(RepositoryAdmin admin, String req) throws InvalidSyntaxException {
-        int p = req.indexOf(':');
-        String name;
-        String filter;
-        if (p > 0) {
-            name = req.substring(0, p);
-            filter = req.substring(p + 1);
-        } else {
-            if (req.contains("package")) {
-                name = "package";
-            } else if (req.contains("service")) {
-                name = "service";
-            } else {
-                name = "bundle";
-            }
-            filter = req;
-        }
-        if (!filter.startsWith("(")) {
-            filter = "(" + filter + ")";
-        }
-        return admin.getHelper().requirement(name, filter);
-    }
-
-    protected Requirement[] parseRequirements(RepositoryAdmin admin, List<String> requirements) throws InvalidSyntaxException {
-        Requirement[] reqs = new Requirement[requirements.size()];
-        for (int i = 0; i < reqs.length; i++) {
-            reqs[i] = parseRequirement(admin, requirements.get(i));
-        }
-        return reqs;
-    }
-
-    public static final String REPOSITORY_URL_PROP = "obr.repository.url";
-
-    protected void persistRepositoryList(RepositoryAdmin admin) {
-        try {
-            StringBuilder sb = new StringBuilder();
-            for (Repository repo : admin.listRepositories()) {
-                if (sb.length() > 0) {
-                    sb.append(" ");
-                }
-                sb.append(repo.getURI());
-            }
-            File base = new File(System.getProperty("karaf.base"));
-            File sys = new File(base, "etc/config.properties");
-            File sysTmp = new File(base, "etc/config.properties.tmp");
-
-            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(sysTmp)));
-            boolean modified = false;
-            try {
-                if (sys.exists()) {
-                    BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(sys)));
-                    try {
-                        String line = reader.readLine();
-                        while (line != null) {
-                            if (line.matches("obr\\.repository\\.url[:= ].*")) {
-                                modified = true;
-                                line = "obr.repository.url = " + sb.toString();
-                            }
-                            writer.write(line);
-                            writer.newLine();
-                            line = reader.readLine();
-                        }
-                    } finally {
-                        reader.close();
-                    }
-                }
-                if (!modified) {
-                    writer.newLine();
-                    writer.write("# ");
-                    writer.newLine();
-                    writer.write("# OBR Repository list");
-                    writer.newLine();
-                    writer.write("# ");
-                    writer.newLine();
-                    writer.write("obr.repository.url = " + sb.toString());
-                    writer.newLine();
-                    writer.newLine();
-                }
-            } finally {
-                writer.close();
-            }
-
-            sys.delete();
-            sysTmp.renameTo(sys);
-
-        } catch (Exception e) {
-            System.err.println("Error while persisting repository list");
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/RefreshUrlCommand.java b/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/RefreshUrlCommand.java
deleted file mode 100644
index 20422ca..0000000
--- a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/RefreshUrlCommand.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.obr;
-
-import java.util.List;
-
-import org.apache.felix.bundlerepository.Repository;
-import org.apache.felix.bundlerepository.RepositoryAdmin;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-
-@Command(scope = "obr", name = "refreshUrl", description = "Reloads the repositories to obtain a fresh list of bundles.")
-public class RefreshUrlCommand extends ObrCommandSupport {
-
-    @Option(name = "-i", aliases = { "--index" }, description = "Use index to identify URL", required = false, multiValued = false)
-    boolean useIndex;
-
-    @Argument(index = 0, name = "ids", description = "Repository URLs (or indexes if you use -i) to refresh (leave empty for all)", required = false, multiValued = true)
-    List<String> ids;
-
-    protected void doExecute(RepositoryAdmin admin) throws Exception {
-		if (ids != null && !ids.isEmpty()) {
-			for (String id : ids) {
-                if (useIndex) {
-                    Repository[] repos = admin.listRepositories();
-                    int index = Integer.parseInt(id);
-                    if (index >= 0 && index < repos.length) {
-                        admin.addRepository(repos[index].getURI());
-                    } else {
-                        System.err.println("Invalid index");
-                    }
-                } else {
-				    admin.addRepository(id);
-                }
-			}
-		} else {
-			Repository[] repos = admin.listRepositories();
-			if ((repos != null) && (repos.length > 0)) {
-				for (int i = 0; i < repos.length; i++) {
-					admin.addRepository(repos[i].getURI());
-				}
-			}
-		}
-    }
-
-}
diff --git a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/RemoveUrlCommand.java b/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/RemoveUrlCommand.java
deleted file mode 100644
index 849167f..0000000
--- a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/RemoveUrlCommand.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.obr;
-
-import java.util.List;
-
-import org.apache.felix.bundlerepository.Repository;
-import org.apache.felix.bundlerepository.RepositoryAdmin;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-
-@Command(scope = "obr", name = "removeUrl", description = "Removes a list of repository URLs from the OBR service.")
-public class RemoveUrlCommand extends ObrCommandSupport {
-
-    @Option(name = "-i", aliases = { "--index" }, description = "Use index to identify URL", required = false, multiValued = false)
-    boolean useIndex;
-
-    @Argument(index = 0, name = "ids", description = "Repository URLs (or indexes if you use -i) to remove from OBR service", required = true, multiValued = true)
-    List<String> ids;
-
-    protected void doExecute(RepositoryAdmin admin) throws Exception {
-        for (String id : ids) {
-            if (useIndex) {
-                Repository[] repos = admin.listRepositories();
-                int index = Integer.parseInt(id);
-                if (index >= 0 && index < repos.length) {
-                    admin.removeRepository(repos[index].getURI());
-                } else {
-                    System.err.println("Invalid index");
-                }
-            } else {
-                admin.removeRepository(id);
-            }
-        }
-        persistRepositoryList(admin);
-    }
-}
diff --git a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/ResolveCommand.java b/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/ResolveCommand.java
deleted file mode 100644
index 4cd4954..0000000
--- a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/ResolveCommand.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.obr;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.felix.bundlerepository.Reason;
-import org.apache.felix.bundlerepository.Repository;
-import org.apache.felix.bundlerepository.RepositoryAdmin;
-import org.apache.felix.bundlerepository.Requirement;
-import org.apache.felix.bundlerepository.Resolver;
-import org.apache.felix.bundlerepository.Resource;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-
-@Command(scope = "obr", name = "resolve", description = "Shows the resolution output for a given set of requirements.")
-public class ResolveCommand extends ObrCommandSupport {
-
-    @Option(name = "-w", aliases = "--why", description = "Display the reason of the inclusion of the resource")
-    boolean why;
-
-    @Option(name = "-l", aliases = "--no-local", description = "Ignore local resources during resolution")
-    boolean noLocal;
-
-    @Option(name = "--no-remote", description = "Ignore remote resources during resolution")
-    boolean noRemote;
-
-    @Option(name = "--deploy", description = "Deploy the selected bundles")
-    boolean deploy;
-
-    @Option(name = "--start", description = "Deploy and start the selected bundles")
-    boolean start;
-
-    @Option(name = "--optional", description = "Resolve optional dependencies")
-    boolean optional;
-
-    @Argument(index = 0, name = "requirements", description = "Requirements", required = true, multiValued = true)
-    List<String> requirements;
-
-    protected void doExecute(RepositoryAdmin admin) throws Exception {
-        List<Repository> repositories = new ArrayList<Repository>();
-        repositories.add(admin.getSystemRepository());
-        if (!noLocal) {
-            repositories.add(admin.getLocalRepository());
-        }
-        if (!noRemote) {
-            repositories.addAll(Arrays.asList(admin.listRepositories()));
-        }
-        Resolver resolver = admin.resolver(repositories.toArray(new Repository[repositories.size()]));
-        for (Requirement requirement : parseRequirements(admin, requirements)) {
-            resolver.add(requirement);
-        }
-        if (resolver.resolve(optional ? 0 : Resolver.NO_OPTIONAL_RESOURCES)) {
-            Resource[] resources;
-            resources = resolver.getRequiredResources();
-            if ((resources != null) && (resources.length > 0)) {
-                System.out.println("Required resource(s):");
-                printUnderline(System.out, 21);
-                for (int resIdx = 0; resIdx < resources.length; resIdx++) {
-                    System.out.println("   " + resources[resIdx].getPresentationName() + " (" + resources[resIdx].getVersion() + ")");
-                    if (why) {
-                        Reason[] req = resolver.getReason(resources[resIdx]);
-                        for (int reqIdx = 0; req != null && reqIdx < req.length; reqIdx++) {
-                            if (!req[reqIdx].getRequirement().isOptional()) {
-                                Resource r = req[reqIdx].getResource();
-                                if (r != null) {
-                                    System.out.println("      - " + r.getPresentationName() + " / " + req[reqIdx].getRequirement().getName() + ":" + req[reqIdx].getRequirement().getFilter());
-                                } else {
-                                    System.out.println("      - " + req[reqIdx].getRequirement().getName() + ":" + req[reqIdx].getRequirement().getFilter());
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-            resources = resolver.getOptionalResources();
-            if ((resources != null) && (resources.length > 0)) {
-                System.out.println();
-                System.out.println("Optional resource(s):");
-                printUnderline(System.out, 21);
-                for (int resIdx = 0; resIdx < resources.length; resIdx++) {
-                    System.out.println("   " + resources[resIdx].getPresentationName()
-                        + " (" + resources[resIdx].getVersion() + ")");
-                    if (why) {
-                        Reason[] req = resolver.getReason(resources[resIdx]);
-                        for (int reqIdx = 0; req != null && reqIdx < req.length; reqIdx++) {
-                            if (!req[reqIdx].getRequirement().isOptional()) {
-                                Resource r = req[reqIdx].getResource();
-                                if (r != null) {
-                                    System.out.println("      - " + r.getPresentationName() + " / " + req[reqIdx].getRequirement().getName() + ":" + req[reqIdx].getRequirement().getFilter());
-                                } else {
-                                    System.out.println("      - " + req[reqIdx].getRequirement().getName() + ":" + req[reqIdx].getRequirement().getFilter());
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-            if (deploy || start) {
-                try
-                {
-                    System.out.print("\nDeploying...");
-                    resolver.deploy(start ? Resolver.START : 0);
-                    System.out.println("done.");
-                }
-                catch (IllegalStateException ex)
-                {
-                    System.err.println(ex);
-                }
-            }
-        } else {
-            Reason[] reqs = resolver.getUnsatisfiedRequirements();
-            if ((reqs != null) && (reqs.length > 0)) {
-                System.out.println("Unsatisfied requirement(s):");
-                printUnderline(System.out, 27);
-                for (int reqIdx = 0; reqIdx < reqs.length; reqIdx++) {
-                    System.out.println("   " + reqs[reqIdx].getRequirement().getName() + ":" + reqs[reqIdx].getRequirement().getFilter());
-                    System.out.println("      " +reqs[reqIdx].getResource().getPresentationName());
-                }
-            } else {
-                System.out.println("Could not resolve targets.");
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/SourceCommand.java b/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/SourceCommand.java
deleted file mode 100644
index 8f977fc..0000000
--- a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/SourceCommand.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.obr;
-
-import java.net.URI;
-import java.net.URL;
-import java.util.List;
-
-import org.apache.felix.bundlerepository.RepositoryAdmin;
-import org.apache.felix.bundlerepository.Resource;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.shell.obr.util.FileUtil;
-
-@Command(scope = "obr", name = "source", description = "Downloads the sources for an OBR bundle.")
-public class SourceCommand extends ObrCommandSupport {
-
-    @Option(name = "-x", aliases = {}, description = "Extract the archive", required = false, multiValued = false)
-    boolean extract;
-
-    @Argument(index = 0, name = "folder", description = "Local folder for storing sources", required = true, multiValued = false)
-    String localDir;
-
-    @Argument(index = 1, name = "bundles", description = "List of bundles to download the sources for", required = true, multiValued = true)
-    List<String> bundles;
-
-    protected void doExecute(RepositoryAdmin admin) throws Exception {
-        for (String bundle : bundles) {
-            String[] target = getTarget(bundle);
-            Resource resource = selectNewestVersion(searchRepository(admin, target[0], target[1]));
-            if (resource == null)
-            {
-                System.err.println("Unknown bundle and/or version: " + target[0]);
-            }
-            else
-            {
-                URI srcURL = (URI) resource.getProperties().get(Resource.SOURCE_URI);
-                if (srcURL != null)
-                {
-                    FileUtil.downloadSource(System.out, System.err, srcURL.toURL(), localDir, extract);
-                }
-                else
-                {
-                    System.err.println("Missing source URL: " + target[0]);
-                }
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/StartCommand.java b/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/StartCommand.java
deleted file mode 100644
index bf8fd12..0000000
--- a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/StartCommand.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.obr;
-
-import org.apache.felix.bundlerepository.RepositoryAdmin;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-
-import java.util.List;
-
-@Command(scope = "obr", name = "start", description = "Deploys and starts a list of bundles using OBR.")
-public class StartCommand extends ObrCommandSupport {
-
-    @Argument(index = 0, name = "bundles", description = "List of bundles to deploy (separated by whitespaces)", required = true, multiValued = true)
-    protected List<String> bundles;
-
-    @Option(name = "-d", aliases = { "--deployOptional" }, description = "Deploy optional bundles", required = false, multiValued = false)
-    protected boolean deployOptional = false;
-
-    protected void doExecute(RepositoryAdmin admin) throws Exception {
-        doDeploy(admin, bundles, true, deployOptional);
-    }
-
-}
diff --git a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/util/FileUtil.java b/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/util/FileUtil.java
deleted file mode 100644
index fcc9580..0000000
--- a/karaf-2.3.x/shell/obr/src/main/java/org/apache/karaf/shell/obr/util/FileUtil.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.obr.util;
-
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.io.PrintStream;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.jar.JarEntry;
-import java.util.jar.JarInputStream;
-
-public class FileUtil
-{
-    public static void downloadSource(
-        PrintStream out, PrintStream err,
-        URL srcURL, String dirStr, boolean extract)
-    {
-        // Get the file name from the URL.
-        String fileName = (srcURL.getFile().lastIndexOf('/') > 0)
-            ? srcURL.getFile().substring(srcURL.getFile().lastIndexOf('/') + 1)
-            : srcURL.getFile();
-
-        try
-        {
-            out.println("Connecting...");
-
-            File dir = new File(dirStr);
-            if (!dir.exists())
-            {
-                err.println("Destination directory does not exist.");
-            }
-            File file = new File(dir, fileName);
-
-            OutputStream os = new FileOutputStream(file);
-            URLConnection conn = srcURL.openConnection();
-            int total = conn.getContentLength();
-            InputStream is = conn.getInputStream();
-
-            if (total > 0)
-            {
-                out.println("Downloading " + fileName
-                    + " ( " + total + " bytes ).");
-            }
-            else
-            {
-                out.println("Downloading " + fileName + ".");
-            }
-            byte[] buffer = new byte[4096];
-            int count = 0;
-            for (int len = is.read(buffer); len > 0; len = is.read(buffer))
-            {
-                count += len;
-                os.write(buffer, 0, len);
-            }
-
-            os.close();
-            is.close();
-
-            if (extract)
-            {
-                is = new FileInputStream(file);
-                JarInputStream jis = new JarInputStream(is);
-                out.println("Extracting...");
-                unjar(jis, dir);
-                jis.close();
-                file.delete();
-            }
-        }
-        catch (Exception ex)
-        {
-            err.println(ex);
-        }
-    }
-
-    public static void unjar(JarInputStream jis, File dir)
-        throws IOException
-    {
-        // Reusable buffer.
-        byte[] buffer = new byte[4096];
-
-        // Loop through JAR entries.
-        for (JarEntry je = jis.getNextJarEntry();
-             je != null;
-             je = jis.getNextJarEntry())
-        {
-            if (je.getName().startsWith("/"))
-            {
-                throw new IOException("JAR resource cannot contain absolute paths.");
-            }
-
-            File target = new File(dir, je.getName());
-
-            // Check to see if the JAR entry is a directory.
-            if (je.isDirectory())
-            {
-                if (!target.exists())
-                {
-                    if (!target.mkdirs())
-                    {
-                        throw new IOException("Unable to create target directory: "
-                            + target);
-                    }
-                }
-                // Just continue since directories do not have content to copy.
-                continue;
-            }
-
-            int lastIndex = je.getName().lastIndexOf('/');
-            String name = (lastIndex >= 0) ?
-                je.getName().substring(lastIndex + 1) : je.getName();
-            String destination = (lastIndex >= 0) ?
-                je.getName().substring(0, lastIndex) : "";
-
-            // JAR files use '/', so convert it to platform separator.
-            destination = destination.replace('/', File.separatorChar);
-            copy(jis, dir, name, destination, buffer);
-        }
-    }
-
-    public static void copy(
-        InputStream is, File dir, String destName, String destDir, byte[] buffer)
-        throws IOException
-    {
-        if (destDir == null)
-        {
-            destDir = "";
-        }
-
-        // Make sure the target directory exists and
-        // that is actually a directory.
-        File targetDir = new File(dir, destDir);
-        if (!targetDir.exists())
-        {
-            if (!targetDir.mkdirs())
-            {
-                throw new IOException("Unable to create target directory: "
-                    + targetDir);
-            }
-        }
-        else if (!targetDir.isDirectory())
-        {
-            throw new IOException("Target is not a directory: "
-                + targetDir);
-        }
-
-        BufferedOutputStream bos = new BufferedOutputStream(
-            new FileOutputStream(new File(targetDir, destName)));
-        int count = 0;
-        while ((count = is.read(buffer)) > 0)
-        {
-            bos.write(buffer, 0, count);
-        }
-        bos.close();
-    }
-}
diff --git a/karaf-2.3.x/shell/obr/src/main/resources/OSGI-INF/blueprint/shell-obr.xml b/karaf-2.3.x/shell/obr/src/main/resources/OSGI-INF/blueprint/shell-obr.xml
deleted file mode 100644
index 62c60fc..0000000
--- a/karaf-2.3.x/shell/obr/src/main/resources/OSGI-INF/blueprint/shell-obr.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.0.0">
-        <command name="obr/addUrl">
-            <action class="org.apache.karaf.shell.obr.AddUrlCommand"/>
-        </command>
-        <command name="obr/deploy">
-            <action class="org.apache.karaf.shell.obr.DeployCommand"/>
-        </command>
-        <command name="obr/find">
-            <action class="org.apache.karaf.shell.obr.FindCommand"/>
-        </command>
-        <command name="obr/info">
-            <action class="org.apache.karaf.shell.obr.InfoCommand"/>
-        </command>
-        <command name="obr/list">
-            <action class="org.apache.karaf.shell.obr.ListCommand"/>
-        </command>
-        <command name="obr/listUrl">
-            <action class="org.apache.karaf.shell.obr.ListUrlCommand"/>
-        </command>
-        <command name="obr/refreshUrl">
-            <action class="org.apache.karaf.shell.obr.RefreshUrlCommand"/>
-        </command>
-        <command name="obr/removeUrl">
-            <action class="org.apache.karaf.shell.obr.RemoveUrlCommand"/>
-        </command>
-        <command name="obr/resolve">
-            <action class="org.apache.karaf.shell.obr.ResolveCommand"/>
-        </command>
-        <command name="obr/source">
-            <action class="org.apache.karaf.shell.obr.SourceCommand"/>
-        </command>
-        <command name="obr/start">
-            <action class="org.apache.karaf.shell.obr.StartCommand"/>
-        </command>
-    </command-bundle>
-
-</blueprint>
diff --git a/karaf-2.3.x/shell/obr/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/shell/obr/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index a04b1e6..0000000
--- a/karaf-2.3.x/shell/obr/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,26 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides Karaf shell commands to manipulate the Karaf embedded OBR (OSGi Bundle Repository).
-
-    The following commands are available:
-    \u001B[36mobr:addUrl\u001B[0m Adds a list of repository URLs to the OBR service.
-    \u001B[36mobr:deploy\u001B[0m Deploys a list of bundles using OBR service.
-    \u001B[36mobr:find\u001B[0m Find OBR bundles for a given filter.
-    \u001B[36mobr:info\u001B[0m Prints information about OBR bundles.
-    \u001B[36mobr:list\u001B[0m Lists OBR bundles.
-    \u001B[36mobr:listUrl\u001B[0m Displays the repository URLs currently associated with the OBR service.
-    \u001B[36mobr:refreshUrl\u001B[0m Reloads the repositories to obtain a fresh list of bundles.
-    \u001B[36mobr:removeUrl\u001B[0m Removes a list of repository URLs from the OBR service.
-    \u001B[36mobr:resolve\u001B[0m Shows the resolution output for a given set of requirements.
-    \u001B[36mobr:source\u001B[0m Downloads the sources for an OBR bundle.
-    \u001B[36mobr:start\u001B[0m Deploys and starts a list of bundles using OBR.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mCommands\u001B[0m and \u001B[36mProvisioning\u001B[0m sections of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/shell/osgi/NOTICE b/karaf-2.3.x/shell/osgi/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/shell/osgi/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/shell/osgi/pom.xml b/karaf-2.3.x/shell/osgi/pom.xml
deleted file mode 100644
index 5b6e996..0000000
--- a/karaf-2.3.x/shell/osgi/pom.xml
+++ /dev/null
@@ -1,128 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.shell</groupId>
-        <artifactId>shell</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.shell.osgi</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Shell :: OSGi Commands</name>
-    <description>This bundle provides the low level OSGi Karaf shell commands.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf</groupId>
-            <artifactId>org.apache.karaf.util</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.utils</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.osgi</groupId>
-            <artifactId>spring-osgi-core</artifactId>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-context</artifactId>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.osgi</groupId>
-            <artifactId>spring-osgi-extender</artifactId>
-            <optional>true</optional>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            org.apache.felix.service.command,
-                            org.apache.felix.gogo.commands,
-                            org.apache.karaf.shell.console,
-                            org.springframework*;resolution:=optional,
-                            *
-                        </Import-Package>
-                        <DynamicImport-Package>
-                            org.springframework.*
-                        </DynamicImport-Package>
-                        <Private-Package>
-                            org.apache.karaf.util;-split-package:=merge-first,
-                            org.apache.felix.utils*;-split-package:=merge-first,
-                            !*
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BlueprintListener.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BlueprintListener.java
deleted file mode 100644
index c262f62..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BlueprintListener.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleEvent;
-import org.osgi.framework.BundleListener;
-import org.osgi.service.blueprint.container.BlueprintEvent;
-import org.slf4j.LoggerFactory;
-import org.slf4j.Logger;
-
-/**
- *
- * TODO: use event admin to receive WAIT topics notifications from blueprint extender
- *
- */
-public class BlueprintListener implements org.osgi.service.blueprint.container.BlueprintListener, BundleListener,
-                                            BundleStateListener, BundleStateListener.Factory
-{
-
-    public static enum BlueprintState {
-        Unknown,
-        Creating,
-        Created,
-        Destroying,
-        Destroyed,
-        Failure,
-        GracePeriod,
-        Waiting
-    }
-
-    private static final Logger LOG = LoggerFactory.getLogger(BlueprintListener.class);
-
-    private final Map<Long, BlueprintState> states;
-    private BundleContext bundleContext;
-
-    public BlueprintListener() {
-        this.states = new ConcurrentHashMap<Long, BlueprintState>();
-    }
-
-    public String getName() {
-        return "Blueprint   ";
-    }
-
-    public String getState(Bundle bundle) {
-        BlueprintState state = states.get(bundle.getBundleId());
-        if (state == null || bundle.getState() != Bundle.ACTIVE || state == BlueprintState.Unknown) {
-            return null;
-        }
-        return state.toString();
-    }
-
-    public BundleStateListener getListener() {
-        return this;
-    }
-
-    public BlueprintState getBlueprintState(Bundle bundle) {
-        BlueprintState state = states.get(bundle.getBundleId());
-        if (state == null || bundle.getState() != Bundle.ACTIVE) {
-            state = BlueprintState.Unknown;
-        }
-        return state;
-    }
-
-    public void blueprintEvent(BlueprintEvent blueprintEvent) {
-        BlueprintState state = getState(blueprintEvent);
-        LOG.debug("Blueprint app state changed to " + state + " for bundle " + blueprintEvent.getBundle().getBundleId());
-        states.put(blueprintEvent.getBundle().getBundleId(), state);
-    }
-
-    public void bundleChanged(BundleEvent event) {
-        if (event.getType() == BundleEvent.UNINSTALLED) {
-            states.remove(event.getBundle().getBundleId());
-        }
-    }
-
-    public void setBundleContext(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-
-    public void init() throws Exception {
-        bundleContext.addBundleListener(this);
-    }
-
-    public void destroy() throws Exception {
-        bundleContext.removeBundleListener(this);
-    }
-
-    private BlueprintState getState(BlueprintEvent blueprintEvent) {
-        switch (blueprintEvent.getType()) {
-            case BlueprintEvent.CREATING:
-                return BlueprintState.Creating;
-            case BlueprintEvent.CREATED:
-                return BlueprintState.Created;
-            case BlueprintEvent.DESTROYING:
-                return BlueprintState.Destroying;
-            case BlueprintEvent.DESTROYED:
-                return BlueprintState.Destroyed;
-            case BlueprintEvent.FAILURE:
-                return BlueprintState.Failure;
-            case BlueprintEvent.GRACE_PERIOD:
-                return BlueprintState.GracePeriod;
-            case BlueprintEvent.WAITING:
-                return BlueprintState.Waiting;
-            default:
-                return BlueprintState.Unknown;
-        }
-    }
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleCommand.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleCommand.java
deleted file mode 100644
index 474f94c..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleCommand.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.gogo.commands.Argument;
-import org.osgi.framework.Bundle;
-
-public abstract class BundleCommand extends OsgiCommandSupport {
-
-    @Argument(index = 0, name = "id", description = "The bundle ID", required = true, multiValued  = false)
-    long id;
-
-    @Option(name = "--force", aliases = {}, description = "Forces the command to execute", required = false, multiValued = false)
-    boolean force;
-
-    protected Object doExecute() throws Exception {
-        Bundle bundle = getBundleContext().getBundle(id);
-        if (bundle == null) {
-            System.out.println("Bundle " + id + " not found");
-            return null;
-        }
-
-        if (!force && Util.isASystemBundle(getBundleContext(), bundle) && !Util.accessToSystemBundleIsAllowed(bundle.getBundleId(), session)) {
-            return null;
-        } else {
-            doExecute(bundle);
-            return null;
-        }
-    }
-
-    protected abstract void doExecute(Bundle bundle) throws Exception;
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleLevel.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleLevel.java
deleted file mode 100644
index e61b6f9..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleLevel.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.startlevel.StartLevel;
-
-@Command(scope = "osgi", name = "bundle-level", description = "Gets or sets the start level of a given bundle.")
-public class BundleLevel extends BundleCommand {
-
-    @Argument(index = 1, name = "startLevel", description = "The bundle's new start level", required = false, multiValued = false)
-    Integer level;
-
-    protected void doExecute(Bundle bundle) throws Exception {
-        // Get package admin service.
-        ServiceReference ref = getBundleContext().getServiceReference(StartLevel.class.getName());
-        if (ref == null) {
-            System.out.println("StartLevel service is unavailable.");
-            return;
-        }
-        StartLevel sl = getService(StartLevel.class, ref);
-        if (sl == null) {
-            System.out.println("StartLevel service is unavailable.");
-            return;
-        }
-
-        if (level == null) {
-            System.out.println("Level " + sl.getBundleStartLevel(bundle));
-        }
-        else if ((level < 50) && sl.getBundleStartLevel(bundle) > 50){
-            for (;;) {
-                StringBuffer sb = new StringBuffer();
-                System.err.println("You are about to designate bundle as a system bundle.  Do you wish to continue (yes/no): ");
-                System.err.flush();
-                for (;;) {
-                    int c = System.in.read();
-                    if (c < 0) {
-                        return;
-                    }
-                    System.err.println((char) c);
-                    if (c == '\r' || c == '\n') {
-                        break;
-                    }
-                    sb.append((char) c);
-                }
-                String str = sb.toString();
-                if ("yes".equals(str)) {
-                    sl.setBundleStartLevel(bundle, level);
-                    break;
-                } else if ("no".equals(str)) {
-                    break;
-                }
-            }
-        } else {
-            sl.setBundleStartLevel(bundle, level);
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleSelector.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleSelector.java
deleted file mode 100644
index afb04e0..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleSelector.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.felix.service.command.CommandSession;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-
-public class BundleSelector {
-
-    private final CommandSession session;
-    private final BundleContext bundleContext;
-    
-    public BundleSelector(BundleContext bundleContext, CommandSession session) {
-        this.bundleContext = bundleContext;
-        this.session = session;
-    }
-    
-    public List<Bundle> selectBundles(List<String> ids, boolean force) throws Exception {
-        List<Bundle> bundles = new ArrayList<Bundle>();
-        if (ids != null && !ids.isEmpty()) {
-            for (String id : ids) {
-
-                // id is a number
-                Pattern pattern = Pattern.compile("^\\d+$");
-                Matcher matcher = pattern.matcher(id);
-                if (matcher.find()) {
-                    Bundle bundle = this.getBundleById(id);
-                    addBundle(bundle, id, force, bundles);
-                    continue;
-                }
-
-                // id as a number range
-                pattern = Pattern.compile("^(\\d+)-(\\d+)$");
-                matcher = pattern.matcher(id);
-                if (matcher.find()) {
-                    int index = id.indexOf('-');
-                    long startId = Long.parseLong(id.substring(0, index));
-                    long endId = Long.parseLong(id.substring(index + 1));
-                    if (startId < endId) {
-                        for (long i = startId; i <= endId; i++) {
-                            Bundle bundle = bundleContext.getBundle(i);
-                            addBundle(bundle, String.valueOf(i), force, bundles);
-                        }
-                    }
-                    continue;
-                }
-
-                int index = id.indexOf('/');
-                List<Bundle> bundlesByName = null;
-                if (index != -1) {
-                    // user has provided name and version
-                    bundlesByName = getBundleByNameAndVersion(id.substring(0, index), id.substring(index + 1));
-                } else {
-                    // user has provided only the name
-                    bundlesByName = getBundleByName(id);
-                }
-                for (Bundle bundleByName : bundlesByName) {
-                    addBundle(bundleByName, id, force, bundles);
-                }
-            }
-
-        }
-
-        return bundles;
-    }
-
-    private void addBundle(Bundle bundle, String id, boolean force, List<Bundle> bundles) throws Exception {
-        if (bundle == null) {
-            // if the bundle is null here, it's because we didn't find it
-            System.err.println("Bundle " + id + " is invalid");
-        } else {
-            if (force || !Util.isASystemBundle(bundleContext, bundle) || Util.accessToSystemBundleIsAllowed(bundle.getBundleId(), session)) {
-                bundles.add(bundle);
-            }
-        }
-    }
-
-    /**
-     * Get a bundle identified by an id number.
-     *
-     * @param id the id number.
-     * @return the bundle or null if not found.
-     */
-    private Bundle getBundleById(String id) {
-        Bundle bundle = null;
-        try {
-            long idNumber = Long.parseLong(id);
-            bundle = bundleContext.getBundle(idNumber);
-        } catch (NumberFormatException nfe) {
-            // ignore
-        }
-        return bundle;
-    }
-
-    /**
-     * Get a bundles list with the name or symbolic name matching the pattern.
-     *
-     * @param name the bundle name or symbolic name pattern to match.
-     * @return the bundles list.
-     */
-    private List<Bundle> getBundleByName(String name) {
-        return getBundleByNameAndVersion(name, null);
-    }
-
-    /**
-     * Get a bundles list with the name or symbolic name matching the name pattern and version matching the version pattern.
-     *
-     * @param name    the bundle name or symbolic name regex to match.
-     * @param version the bundle version regex to match.
-     * @return the bundles list.
-     */
-    private List<Bundle> getBundleByNameAndVersion(String name, String version) {
-        Bundle[] bundles = bundleContext.getBundles();
-
-        ArrayList<Bundle> result = new ArrayList<Bundle>();
-
-        Pattern namePattern = Pattern.compile(name);
-
-        for (int i = 0; i < bundles.length; i++) {
-
-            String bundleSymbolicName = bundles[i].getSymbolicName();
-            // skip bundles without Bundle-SymbolicName header
-            if (bundleSymbolicName == null) {
-                continue;
-            }
-            
-            Matcher symbolicNameMatcher = namePattern.matcher(bundleSymbolicName);
-            
-            Matcher nameMatcher = null;
-            String bundleName = (String) bundles[i].getHeaders().get(Constants.BUNDLE_NAME);
-            if (bundleName != null) {
-                nameMatcher = namePattern.matcher(bundleName);
-            }
-
-            if (version != null) {
-                String bundleVersion = (String) bundles[i].getHeaders().get(Constants.BUNDLE_VERSION);
-                if (bundleVersion != null) {
-                    boolean nameMatch = (nameMatcher != null && nameMatcher.find()) || symbolicNameMatcher.find();
-                    if (nameMatch) {
-                        Pattern versionPattern = Pattern.compile(version);
-                        Matcher versionMatcher = versionPattern.matcher(bundleVersion);                    
-                        if (versionMatcher.find()) {
-                            result.add(bundles[i]);
-                        }
-                    }
-                }
-            } else {
-                boolean nameMatch = (nameMatcher != null && nameMatcher.find()) || symbolicNameMatcher.find();
-                if (nameMatch) {
-                    result.add(bundles[i]);
-                }
-            }
-        }
-        return result;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleStateListener.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleStateListener.java
deleted file mode 100644
index 5324096..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleStateListener.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import org.osgi.framework.Bundle;
-
-public interface BundleStateListener {
-
-    public interface Factory {
-
-        BundleStateListener getListener();
-
-    }
-
-    String getName();
-
-    String getState(Bundle bundle);
-
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundlesCommand.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundlesCommand.java
deleted file mode 100644
index a08048b..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundlesCommand.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.osgi.framework.Bundle;
-
-public abstract class BundlesCommand extends OsgiCommandSupport {
-
-    @Argument(index = 0, name = "ids", description = "The list of bundle (identified by IDs or name or name/version) separated by whitespaces", required = true, multiValued = true)
-    List<String> ids;
-
-    @Option(name = "--force", aliases = {}, description = "Forces the command to execute", required = false, multiValued = false)
-    boolean force;
-
-    protected Object doExecute() throws Exception {
-        BundleSelector selector = new BundleSelector(getBundleContext(), session);      
-        List<Bundle> bundles = selector.selectBundles(ids, force);
-        doExecute(bundles);
-        return null;
-    }
-      
-    protected abstract void doExecute(List<Bundle> bundles) throws Exception;
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundlesCommandOptional.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundlesCommandOptional.java
deleted file mode 100644
index 85ba12e..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundlesCommandOptional.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.osgi.framework.Bundle;
-
-public abstract class BundlesCommandOptional extends OsgiCommandSupport {
-    
-    @Argument(index = 0, name = "ids", description = "The list of bundle (identified by IDs or name or name/version) separated by whitespaces", required = false, multiValued = true)
-    List<String> ids;
-
-    @Option(name = "--force", aliases = {}, description = "Forces the command to execute", required = false, multiValued = false)
-    boolean force;
-
-    protected Object doExecute() throws Exception {
-        List<Bundle> bundles = null;
-        if (ids != null && !ids.isEmpty()) {
-            BundleSelector selector = new BundleSelector(getBundleContext(), session);      
-            bundles = selector.selectBundles(ids, force);
-        }
-        doExecute(bundles);
-        return null;
-    }
-
-    /**
-     * 
-     * @param bundles null if no bundle ids or names were specified.
-     * @throws Exception
-     */
-    protected abstract void doExecute(List<Bundle> bundles) throws Exception;
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Classes.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Classes.java
deleted file mode 100644
index 2cae5ac..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Classes.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.wiring.BundleWiring;
-
-@Command(scope = "osgi", name = "classes", description = "Displays list of classes contained in bundles")
-public class Classes extends BundlesCommand {
-
-    @Option(name = "-a", aliases = { "--display-all-files" }, description = "List all classes and files in bundles", required = false, multiValued = false)
-    boolean displayAllFiles;
-
-    protected void doExecute(List<Bundle> bundles) throws Exception {
-        for (Bundle bundle : bundles) {
-            printResources(bundle);
-        }
-    }
-
-    protected void printResources(Bundle bundle) {
-        BundleWiring wiring = (BundleWiring) bundle.adapt(BundleWiring.class);
-        if (wiring != null) {
-            Collection<String> resources = null;
-            if (displayAllFiles) {
-                resources = wiring.listResources("/", null, BundleWiring.LISTRESOURCES_RECURSE);
-            } else {
-                resources = wiring.listResources("/", "*class", BundleWiring.LISTRESOURCES_RECURSE);
-            }
-            if (resources.size() > 0) {
-                System.out.println("\n" + Util.getBundleName(bundle));
-            }
-            for (String resource : resources) {
-                System.out.println(resource);
-            }
-        } else {
-            System.out.println("Bundle " + bundle.getBundleId() + " is not resolved");
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/FindClass.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/FindClass.java
deleted file mode 100644
index 788558f..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/FindClass.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import java.util.Collection;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.wiring.BundleWiring;
-
-@Command(scope = "osgi", name = "find-class", description = "Locates a specified class in any deployed bundle")
-public class FindClass extends OsgiCommandSupport {
-
-    @Argument(index = 0, name = "className", description = "Class name or partial class name to be found", required = true, multiValued = false)
-    String className;
-
-    protected Object doExecute() throws Exception {
-        findResource();
-        return null;
-    }
-
-    protected void findResource() {
-        Bundle[] bundles = bundleContext.getBundles();
-        String filter = "*" + className + "*";
-        for (Bundle bundle : bundles) {
-            BundleWiring wiring = (BundleWiring) bundle.adapt(BundleWiring.class);
-            if (wiring != null) {
-                Collection<String> resources = wiring.listResources("/", filter, BundleWiring.LISTRESOURCES_RECURSE);
-                if (resources.size() > 0) {
-                    System.out.println("\n" + Util.getBundleName(bundle));
-                }
-                for (String resource:resources) {
-                    System.out.println(resource);
-                }
-            } else {
-                System.out.println("Bundle " + bundle.getBundleId() + " is not resolved.");
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Headers.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Headers.java
deleted file mode 100644
index 0f3218e..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Headers.java
+++ /dev/null
@@ -1,332 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import jline.Terminal;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.utils.manifest.Attribute;
-import org.apache.felix.utils.manifest.Clause;
-import org.apache.felix.utils.manifest.Directive;
-import org.apache.felix.utils.manifest.Parser;
-import org.apache.felix.utils.version.VersionRange;
-import org.fusesource.jansi.Ansi;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.packageadmin.ExportedPackage;
-import org.osgi.service.packageadmin.PackageAdmin;
-
-@Command(scope = "osgi", name = "headers", description = "Displays OSGi headers of a given bundle.")
-public class Headers extends BundlesCommandOptional {
-
-    protected final static String BUNDLE_PREFIX = "Bundle-";
-    protected final static String PACKAGE_SUFFFIX = "-Package";
-    protected final static String SERVICE_SUFFIX = "-Service";
-    protected final static String IMPORT_PACKAGES_ATTRIB = "Import-Package";
-    protected final static String REQUIRE_BUNDLE_ATTRIB = "Require-Bundle";
-
-    private ServiceReference ref;
-    private PackageAdmin admin;
-
-    @Option(name = "--indent", description = "Indentation method")
-    int indent = -1;
-
-    protected void doExecute(List<Bundle> bundles) throws Exception {
-        // Get package admin service.
-        ref = getBundleContext().getServiceReference(PackageAdmin.class.getName());
-        if (ref == null) {
-            System.out.println("PackageAdmin service is unavailable.");
-            return;
-        }
-
-        try {
-            admin = (PackageAdmin) getBundleContext().getService(ref);
-            if (admin == null) {
-                System.out.println("PackageAdmin service is unavailable.");
-                return;
-            }
-
-            if (bundles == null) {
-                Bundle[] allBundles = getBundleContext().getBundles();
-                for (int i = 0; i < allBundles.length; i++) {
-                    printHeaders(allBundles[i]);
-                }
-            } else {
-                for (Bundle bundle : bundles) {
-                    printHeaders(bundle);
-                }
-            }
-        } finally {
-            getBundleContext().ungetService(ref);
-        }
-    }
-
-    protected void printHeaders(Bundle bundle) {
-        String title = Util.getBundleName(bundle);
-        System.out.println("\n" + title);
-        System.out.println(Util.getUnderlineString(title));
-        if (indent == 0) {
-            Dictionary dict = bundle.getHeaders();
-            Enumeration keys = dict.keys();
-            while (keys.hasMoreElements()) {
-                Object k = keys.nextElement();
-                Object v = dict.get(k);
-                System.out.println(k + " = " + Util.getValueString(v));
-            }
-        } else {
-            System.out.println(generateFormattedOutput(bundle));
-        }
-    }
-
-    protected String generateFormattedOutput(Bundle bundle) {
-        StringBuilder output = new StringBuilder();
-        Map<String, Object> otherAttribs = new HashMap<String, Object>();
-        Map<String, Object> bundleAttribs = new HashMap<String, Object>();
-        Map<String, Object> serviceAttribs = new HashMap<String, Object>();
-        Map<String, Object> packagesAttribs = new HashMap<String, Object>();
-        Dictionary dict = bundle.getHeaders();
-        Enumeration keys = dict.keys();
-
-        // do an initial loop and separate the attributes in different groups
-        while (keys.hasMoreElements()) {
-            String k = (String) keys.nextElement();
-            Object v = dict.get(k);
-            if (k.startsWith(BUNDLE_PREFIX)) {
-                // starts with Bundle-xxx
-                bundleAttribs.put(k, v);
-            } else if (k.endsWith(SERVICE_SUFFIX)) {
-                // ends with xxx-Service
-                serviceAttribs.put(k, v);
-            } else if (k.endsWith(PACKAGE_SUFFFIX)) {
-                // ends with xxx-Package
-                packagesAttribs.put(k, v);
-            } else if (k.endsWith(REQUIRE_BUNDLE_ATTRIB)) {
-                // require bundle statement
-                packagesAttribs.put(k, v);
-            } else {
-                // the remaining attribs
-                otherAttribs.put(k, v);
-            }
-        }
-
-        // we will display the formatted result like this:
-        // Bundle-Name (ID)
-        // -----------------------
-        // all other attributes
-        //
-        // all Bundle attributes
-        //
-        // all Service attributes
-        //
-        // all Package attributes
-        Iterator<Map.Entry<String, Object>> it = otherAttribs.entrySet().iterator();
-        while (it.hasNext()) {
-            Map.Entry<String, Object> e = it.next();
-            output.append(String.format("%s = %s\n", e.getKey(), Util.getValueString(e.getValue())));
-        }
-        if (otherAttribs.size() > 0) {
-            output.append('\n');
-        }
-
-        it = bundleAttribs.entrySet().iterator();
-        while (it.hasNext()) {
-            Map.Entry<String, Object> e = it.next();
-            output.append(String.format("%s = %s\n", e.getKey(), Util.getValueString(e.getValue())));
-        }
-        if (bundleAttribs.size() > 0) {
-            output.append('\n');
-        }
-
-        it = serviceAttribs.entrySet().iterator();
-        while (it.hasNext()) {
-            Map.Entry<String, Object> e = it.next();
-            output.append(e.getKey());
-            output.append(" = \n");
-            formatHeader(Util.getValueString(e.getValue()), null, output, indent);
-            output.append("\n");
-        }
-        if (serviceAttribs.size() > 0) {
-            output.append('\n');
-        }
-
-        Map<String, ClauseFormatter> formatters = new HashMap<String, ClauseFormatter>();
-        formatters.put(REQUIRE_BUNDLE_ATTRIB, new ClauseFormatter() {
-            public void pre(Clause clause, StringBuilder output) {
-                boolean isSatisfied = checkBundle(clause.getName(), clause.getAttribute("version"));
-                Ansi.ansi(output).fg(isSatisfied ? Ansi.Color.DEFAULT : Ansi.Color.RED).a("");
-            }
-            public void post(Clause clause, StringBuilder output) {
-                Ansi.ansi(output).reset().a("");
-            }
-        });
-        formatters.put(IMPORT_PACKAGES_ATTRIB, new ClauseFormatter() {
-            public void pre(Clause clause, StringBuilder output) {
-                boolean isSatisfied = checkPackage(clause.getName(), clause.getAttribute("version"));
-                boolean isOptional = "optional".equals(clause.getDirective("resolution"));
-                Ansi.ansi(output).fg(isSatisfied ? Ansi.Color.DEFAULT : Ansi.Color.RED)
-                                 .a(isSatisfied || isOptional ? Ansi.Attribute.INTENSITY_BOLD_OFF : Ansi.Attribute.INTENSITY_BOLD)
-                                 .a("");
-            }
-            public void post(Clause clause, StringBuilder output) {
-                Ansi.ansi(output).reset().a("");
-            }
-        });
-
-        it = packagesAttribs.entrySet().iterator();
-        while (it.hasNext()) {
-            Map.Entry<String, Object> e = it.next();
-            output.append(e.getKey());
-            output.append(" = \n");
-            formatHeader(Util.getValueString(e.getValue()), formatters.get(e.getKey()), output, indent);
-            output.append("\n");
-        }
-        if (packagesAttribs.size() > 0) {
-            output.append('\n');
-        }
-
-        return output.toString();
-    }
-
-    protected interface ClauseFormatter {
-        void pre(Clause clause, StringBuilder output);
-        void post(Clause clause, StringBuilder output);
-    }
-
-    protected void formatHeader(String header, ClauseFormatter formatter, StringBuilder builder, int indent) {
-        Clause[] clauses = Parser.parseHeader(header);
-        formatClauses(clauses, formatter, builder, indent);
-    }
-
-    protected void formatClauses(Clause[] clauses, ClauseFormatter formatter, StringBuilder builder, int indent) {
-        boolean first = true;
-        for (Clause clause : clauses) {
-            if (first) {
-                first = false;
-            } else {
-                builder.append(",\n");
-            }
-            formatClause(clause, formatter, builder, indent);
-        }
-    }
-
-    protected void formatClause(Clause clause, ClauseFormatter formatter, StringBuilder builder, int indent) {
-        builder.append("\t");
-        if (formatter != null) {
-            formatter.pre(clause, builder);
-        }
-        formatClause(clause, builder, indent);
-        if (formatter != null) {
-            formatter.post(clause, builder);
-        }
-    }
-
-    protected int getTermWidth() {
-        Terminal term = (Terminal) session.get(".jline.terminal");
-        return term != null ? term.getWidth() : 80;
-
-    }
-
-    protected void formatClause(Clause clause, StringBuilder builder, int indent) {
-        if (indent < 0) {
-            if (clause.toString().length() < getTermWidth() - 8) { // -8 for tabs
-                indent = 1;
-            } else {
-                indent = 3;
-            }
-        }
-        String name = clause.getName();
-        Directive[] directives = clause.getDirectives();
-        Attribute[] attributes = clause.getAttributes();
-        Arrays.sort(directives, new Comparator<Directive>() {
-            public int compare(Directive o1, Directive o2) {
-                return o1.getName().compareTo(o2.getName());
-            }
-        });
-        Arrays.sort(attributes, new Comparator<Attribute>() {
-            public int compare(Attribute o1, Attribute o2) {
-                return o1.getName().compareTo(o2.getName());
-            }
-        });
-        builder.append(name);
-        for (int i = 0; directives != null && i < directives.length; i++) {
-            builder.append(";");
-            if (indent > 1) {
-                builder.append("\n\t\t");
-            }
-            builder.append(directives[i].getName()).append(":=");
-            String v = directives[i].getValue();
-            if (v.contains(",")) {
-                if (indent > 2 && v.length() > 20) {
-                    v = v.replace(",", ",\n\t\t\t");
-                }
-                builder.append("\"").append(v).append("\"");
-            } else {
-                builder.append(v);
-            }
-        }
-        for (int i = 0; attributes != null && i < attributes.length; i++) {
-            builder.append(";");
-            if (indent > 1) {
-                builder.append("\n\t\t");
-            }
-            builder.append(attributes[i].getName()).append("=");
-            String v = attributes[i].getValue();
-            if (v.contains(",")) {
-                if (indent > 2 && v.length() > 20) {
-                    v = v.replace(",", ",\n\t\t\t");
-                }
-                builder.append("\"").append(v).append("\"");
-            } else {
-                builder.append(v);
-            }
-        }
-    }
-
-
-   private boolean checkBundle(String bundleName, String version) {
-        if (admin != null) {
-            Bundle[] bundles = admin.getBundles(bundleName, version);
-            return bundles != null && bundles.length > 0;
-        }
-        return false;
-    }
-
-    private boolean checkPackage(String packageName, String version) {
-        VersionRange range = VersionRange.parseVersionRange(version);
-        if (admin != null) {
-            ExportedPackage[] packages = admin.getExportedPackages(packageName);
-            if (packages != null) {
-                for (ExportedPackage export : packages) {
-                    if (range.contains(export.getVersion())) {
-                        return true;
-                    }
-                }
-            }
-        }
-        return false;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Info.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Info.java
deleted file mode 100644
index d101c2d..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Info.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.net.URL;
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.util.StringEscapeUtils;
-import org.osgi.framework.Bundle;
-
-@Command(scope = "osgi", name = "info", description = "Displays detailed information of a given bundle.")
-public class Info extends BundlesCommandOptional {
-
-    protected void doExecute(List<Bundle> bundles) throws Exception {
-        if (bundles == null) {
-            Bundle[] allBundles = getBundleContext().getBundles();
-            for (int i = 0; i < allBundles.length; i++) {
-                printInfo(allBundles[i]);
-            }
-        } else {
-            for (Bundle bundle : bundles) {
-                printInfo(bundle);
-            }
-        }
-    }
-
-    /**
-     * <p>
-     * Get the OSGI-INF/bundle.info entry from the bundle and display it.
-     * </p>
-     *
-     * @param bundle the bundle.
-     */
-    protected void printInfo(Bundle bundle) {
-        String title = Util.getBundleName(bundle);
-        System.out.println("\n" + title);
-        System.out.println(Util.getUnderlineString(title));
-        URL bundleInfo = bundle.getEntry("OSGI-INF/bundle.info");
-        if (bundleInfo != null) {
-            try {
-                BufferedReader reader = new BufferedReader(new InputStreamReader(bundleInfo.openStream()));
-                String line;
-                while ((line = reader.readLine()) != null) {
-                    System.out.println(StringEscapeUtils.unescapeJava(line));
-                }
-                reader.close();
-            } catch (Exception e) {
-                // ignore
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/InstallBundle.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/InstallBundle.java
deleted file mode 100644
index 1138151..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/InstallBundle.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.shell.console.MultiException;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.osgi.framework.Bundle;
-
-@Command(scope = "osgi", name = "install", description = "Installs one or more bundles.")
-public class InstallBundle extends OsgiCommandSupport {
-
-    @Argument(index = 0, name = "urls", description = "Bundle URLs separated by whitespaces", required = true, multiValued = true)
-    List<String> urls;
-
-    @Option(name = "-s", aliases={"--start"}, description="Starts the bundles after installation", required = false, multiValued = false)
-    boolean start;
-
-    protected Object doExecute() throws Exception {
-        List<Exception> exceptions = new ArrayList<Exception>();
-        List<Bundle> bundles = new ArrayList<Bundle>();
-        for (String url : urls) {
-            try {
-                bundles.add(getBundleContext().installBundle(url, null));
-            } catch (Exception e) {
-                exceptions.add(new Exception("Unable to install bundle " + url, e));
-            }
-        }
-        if (start) {
-            for (Bundle bundle : bundles) {
-                try {
-                    bundle.start();
-                } catch (Exception e) {
-                    exceptions.add(new Exception("Unable to start bundle " + bundle.getLocation() +
-                            (e.getMessage() != null ? ": " + e.getMessage() : ""), e));
-                }
-            }
-        }
-        if (bundles.size() == 1) {
-            System.out.println("Bundle ID: " + bundles.get(0).getBundleId());
-        } else {
-            StringBuffer sb = new StringBuffer("Bundle IDs: ");
-            for (Bundle bundle : bundles) {
-                if (sb.length() > 0) {
-                    sb.append(", ");
-                }
-                sb.append(bundle.getBundleId());
-            }
-            System.out.println(sb);
-        }
-        MultiException.throwIf("Error installing bundles", exceptions);
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/ListBundleServices.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/ListBundleServices.java
deleted file mode 100644
index edbaac2..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/ListBundleServices.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.service.command.Function;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.Constants;
-import org.osgi.framework.ServiceReference;
-
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URL;
-import java.util.List;
-
-@Command(scope = "osgi", name = "bundle-services", description = "List OSGi services per bundle")
-public class ListBundleServices extends BundlesCommand {
-
-    @Option(name = "-a", aliases = {}, description = "Shows all services. (By default Karaf commands are hidden)", required = false, multiValued = false)
-    boolean showAll;
-
-    @Option(name = "-u", aliases = {}, description = "Shows the services each bundle uses. (By default the provided services are shown)", required = false, multiValued = false)
-    boolean inUse;
-
-    @Option(name = "-p", aliases = {}, description = "Shows the properties of the services", required = false, multiValued = false)
-    boolean showProperties = false;
-
-    @Override
-    protected void doExecute(List<Bundle> bundles) throws Exception {
-        for (Bundle bundle : bundles) {
-            ServiceReference[] refs = (inUse) ? bundle.getServicesInUse() : bundle.getRegisteredServices();
-            printServices(bundle, refs, showProperties);
-        }
-    }
-
-    private void printServices(Bundle bundle, ServiceReference[] refs, boolean showProperties) {
-        boolean headerPrinted = false;
-        boolean needSeparator = false;
-
-        if (refs == null) {
-            return;
-        }
-
-        for (ServiceReference serviceRef : refs) {
-            String[] objectClass = (String[]) serviceRef.getProperty(Constants.OBJECTCLASS);
-
-            boolean print = showAll || !isCommand(objectClass);
-
-            // Print header if we have not already done so.
-            if (!headerPrinted) {
-                headerPrinted = true;
-                System.out.println("");
-                String title = bundle.getSymbolicName() + ((inUse) ? " uses:" : " provides:");
-                System.out.println(title);
-                System.out.println("----------------------------------");
-            }
-
-            if (print) {
-                // Print service separator if necessary.
-                if (needSeparator && showProperties) {
-                    System.out.println("----");
-                }
-
-                if (showProperties) {
-                    printProperties(serviceRef);
-                } else {
-                    System.out.println(ListBundleServices.getValueString(objectClass));
-                }
-
-                needSeparator = true;
-            }
-        }
-    }
-
-    private boolean isCommand(String[] objectClasses) {
-        for (String objectClass : objectClasses) {
-            if (objectClass.equals(Function.class.getName())) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private void printProperties(ServiceReference serviceRef) {
-        for (String key : serviceRef.getPropertyKeys()) {
-            System.out.println(key + " = " + ListBundleServices.getValueString(serviceRef.getProperty(key)));
-        }
-    }
-
-    private static String getBundleName(Bundle bundle) {
-        if (bundle != null) {
-            String name = (String) bundle.getHeaders().get(Constants.BUNDLE_NAME);
-            return (name == null)
-                    ? "Bundle " + Long.toString(bundle.getBundleId())
-                    : name + " (" + Long.toString(bundle.getBundleId()) + ")";
-        }
-        return "[STALE BUNDLE]";
-    }
-
-    private static String getUnderlineString(String s) {
-        StringBuilder sb = new StringBuilder(s.length());
-        for (int i = 0; i < s.length(); i++) {
-            sb.append('-');
-        }
-        return sb.toString();
-    }
-
-
-    private static String getValueString(Object obj) {
-        if (obj == null) {
-            return "null";
-        } else if (obj.getClass().isArray()) {
-            Object[] array = (Object[]) obj;
-            StringBuilder sb = new StringBuilder();
-            sb.append("[");
-            for (int i = 0; i < array.length; i++) {
-                if (i != 0) {
-                    sb.append(", ");
-                }
-                sb.append(getValueString(array[i]));
-            }
-            sb.append("]");
-            return sb.toString();
-        } else if (obj instanceof String) {
-            return (String) obj;
-        } else if (obj instanceof Boolean) {
-            return ((Boolean) obj).toString();
-        } else if (obj instanceof Long) {
-            return ((Long) obj).toString();
-        } else if (obj instanceof Integer) {
-            return ((Integer) obj).toString();
-        } else if (obj instanceof Short) {
-            return ((Short) obj).toString();
-        } else if (obj instanceof Double) {
-            return ((Double) obj).toString();
-        } else if (obj instanceof Float) {
-            return ((Float) obj).toString();
-        } else if (obj instanceof URL) {
-            return ((URL) obj).toExternalForm();
-        } else if (obj instanceof URI) {
-            try {
-                return ((URI) obj).toURL().toExternalForm();
-            } catch (MalformedURLException e) {
-                return obj.toString();
-            }
-        } else {
-            return obj.toString();
-        }
-    }
-
-
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/ListBundles.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/ListBundles.java
deleted file mode 100644
index 1456300..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/ListBundles.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import java.util.List;
-
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.gogo.commands.Command;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.Constants;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.packageadmin.PackageAdmin;
-import org.osgi.service.startlevel.StartLevel;
-
-@Command(scope = "osgi", name = "list", description = "Lists all installed bundles.")
-public class ListBundles extends OsgiCommandSupport {
-
-    @Option(name = "-l", aliases = {}, description = "Show the locations", required = false, multiValued = false)
-    boolean showLoc;
-
-    @Option(name = "-s", description = "Shows the symbolic name", required = false, multiValued = false)
-    boolean showSymbolic;
-
-    @Option(name = "-u", description = "Shows the update locations", required = false, multiValued = false)
-    boolean showUpdate;
-    
-    @Option(name = "-t", valueToShowInHelp = "", description = "Specifies the bundle threshold; bundles with a start-level less than this value will not get printed out.", required = false, multiValued = false)
-    int bundleLevelThreshold = -1;
-
-    private List<BundleStateListener.Factory> bundleStateListenerFactories;
-
-    public void setBundleStateListenerFactories(List<BundleStateListener.Factory> bundleStateListenerFactories) {
-        this.bundleStateListenerFactories = bundleStateListenerFactories;
-    }
-
-    protected Object doExecute() throws Exception {
-        ServiceReference ref = getBundleContext().getServiceReference(StartLevel.class.getName());
-        StartLevel sl = null;
-        if (ref != null) {
-            sl = (StartLevel) getBundleContext().getService(ref);
-        }
-        if (sl == null) {
-            System.out.println("StartLevel service is unavailable.");
-        }
-
-        ServiceReference pkgref = getBundleContext().getServiceReference(PackageAdmin.class.getName());
-        PackageAdmin admin = null;
-        if (pkgref != null) {
-            admin = (PackageAdmin) getBundleContext().getService(pkgref);
-            if (admin == null) {
-                System.out.println("PackageAdmin service is unavailable.");
-            }
-        }
-
-        Bundle[] bundles = getBundleContext().getBundles();
-        if (bundles != null) {
-            // Determine threshold
-            final String sbslProp = bundleContext.getProperty("karaf.systemBundlesStartLevel");
-            if (sbslProp != null) {
-                try {
-                   if (bundleLevelThreshold < 0) {
-                       bundleLevelThreshold = Integer.valueOf( sbslProp );
-                   }
-                }
-                catch( Exception ignore ) {
-                   // ignore
-                }
-            }
-            // Display active start level.
-            if (sl != null) {
-                System.out.println("START LEVEL " + sl.getStartLevel() + 
-                                   " , List Threshold: " + bundleLevelThreshold);
-            }
-
-            // Print column headers.
-            String msg = " Name";
-            if (showLoc) {
-               msg = " Location";
-            }
-            else if (showSymbolic) {
-               msg = " Symbolic name";
-            }
-            else if (showUpdate) {
-               msg = " Update location";
-            }
-            String level = (sl == null) ? "" : "  Level ";
-            String headers = "   ID   State       ";
-            for (BundleStateListener.Factory factory : bundleStateListenerFactories) {
-                BundleStateListener listener = factory.getListener();
-                if (listener != null) {
-                    headers += "  " + listener.getName() + " ";
-                }
-            }
-            headers += level + msg;
-            System.out.println(headers);
-            for (int i = 0; i < bundles.length; i++) {
-            	if (sl.getBundleStartLevel(bundles[i]) >= bundleLevelThreshold) { 
-	                // Get the bundle name or location.
-	                String name = (String) bundles[i].getHeaders().get(Constants.BUNDLE_NAME);
-	                // If there is no name, then default to symbolic name.
-	                name = (name == null) ? bundles[i].getSymbolicName() : name;
-	                // If there is no symbolic name, resort to location.
-	                name = (name == null) ? bundles[i].getLocation() : name;
-	
-	                // Overwrite the default value is the user specifically
-	                // requested to display one or the other.
-	                if (showLoc) {
-	                    name = bundles[i].getLocation();
-	                }
-	                else if (showSymbolic) {
-	                    name = bundles[i].getSymbolicName();
-	                    name = (name == null) ? "<no symbolic name>" : name;
-	                }
-	                else if (showUpdate) {
-	                    name = (String) bundles[i].getHeaders().get(Constants.BUNDLE_UPDATELOCATION);
-	                    name = (name == null) ? bundles[i].getLocation() : name;
-	                }
-	                // Show bundle version if not showing location.
-	                String version = (String) bundles[i].getHeaders().get(Constants.BUNDLE_VERSION);
-	                name = (!showLoc && !showUpdate && (version != null)) ? name + " (" + version + ")" : name;
-	                long l = bundles[i].getBundleId();
-	                String id = String.valueOf(l);
-	                if (sl == null) {
-	                    level = "1";
-	                }
-	                else {
-	                    level = String.valueOf(sl.getBundleStartLevel(bundles[i]));
-	                }
-	                while (level.length() < 5) {
-	                    level = " " + level;
-	                }
-	                while (id.length() < 4) {
-	                    id = " " + id;
-	                }
-	                String line = "[" + id + "] [" + getStateString(bundles[i]) + "]";
-	                for (BundleStateListener.Factory factory : bundleStateListenerFactories) {
-	                    BundleStateListener listener = factory.getListener();
-	                    if (listener != null) {
-	                        String state = listener.getState(bundles[i]);
-	                        line += " [" + getStateString(state, listener.getName().length()) + "]";
-	                    }
-	                }
-	                line += " [" + level + "] " + name;
-	                System.out.println(line);
-	
-	                if (admin != null) {
-	                    Bundle[] fragments = admin.getFragments(bundles[i]);
-	                    Bundle[] hosts = admin.getHosts(bundles[i]);
-	
-	                    if (fragments != null) {
-	                        System.out.print("                                       Fragments: ");
-	                        int ii = 0;
-	                        for (Bundle fragment : fragments) {
-	                            ii++;
-	                            System.out.print(fragment.getBundleId());
-	                            if ((fragments.length > 1) && ii < (fragments.length)) {
-	                                System.out.print(",");
-	                            }
-	                        }
-	                        System.out.println();
-	                    }
-	
-	                    if (hosts != null) {
-	                        System.out.print("                                       Hosts: ");
-	                        int ii = 0;
-	                        for (Bundle host : hosts) {
-	                            ii++;
-	                            System.out.print(host.getBundleId());
-	                            if ((hosts.length > 1) && ii < (hosts.length)) {
-	                                System.out.print(",");
-	                            }
-	                        }
-	                        System.out.println();
-	                    }
-	
-	                }
-	            }
-            }
-        }
-        else {
-            System.out.println("There are no installed bundles.");
-        }
-
-        getBundleContext().ungetService(ref);
-        getBundleContext().ungetService(pkgref);
-
-        return null;
-    }
-
-    public String getStateString(Bundle bundle)
-    {
-        int state = bundle.getState();
-        if (state == Bundle.ACTIVE) {
-            return "Active     ";
-        } else if (state == Bundle.INSTALLED) {
-            return "Installed  ";
-        } else if (state == Bundle.RESOLVED) {
-            return "Resolved   ";
-        } else if (state == Bundle.STARTING) {
-            return "Starting   ";
-        } else if (state == Bundle.STOPPING) {
-            return "Stopping   ";
-        } else {
-            return "Unknown    ";
-        }
-    }
-
-    public String getStateString(String state, int length) {
-        if (state == null) {
-            state = "";
-        }
-        while (state.length() < length) {
-            state += " ";
-        }
-        return state;
-    }
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/ListServices.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/ListServices.java
deleted file mode 100644
index 591ae98..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/ListServices.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.service.command.Function;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.ServiceReference;
-
-@Command(scope = "osgi", name = "ls", description = "Lists OSGi services.")
-public class ListServices extends BundlesCommandOptional {
-
-    @Option(name = "-a", aliases = {}, description = "Shows all services", required = false, multiValued = false)
-    boolean showAll;
-
-    @Option(name = "-u", aliases = {}, description = "Shows services which are in use", required = false, multiValued = false)
-    boolean inUse;
-
-    protected void doExecute(List<Bundle> bundles) throws Exception {
-        if (bundles == null) {
-            Bundle[] allBundles = getBundleContext().getBundles();
-            for (int i = 0; i < allBundles.length; i++) {
-                printServicesShort(allBundles[i]);
-            }
-        } else {
-            for (Bundle bundle : bundles) {
-                printServices(bundle);
-            }
-        }
-    }
-
-    private void printServices(Bundle bundle) {
-        boolean headerPrinted = false;
-        boolean needSeparator = false;
-        ServiceReference[] refs = null;
-
-        // Get registered or in-use services.
-        if (inUse) {
-            refs = bundle.getServicesInUse();
-        } else {
-            refs = bundle.getRegisteredServices();
-        }
-
-        // Print properties for each service.
-        for (int refIdx = 0; (refs != null) && (refIdx < refs.length); refIdx++) {
-            String[] objectClass = (String[]) refs[refIdx].getProperty("objectClass");
-
-            // Determine if we need to print the service, depending
-            // on whether it is a command service or not.
-            boolean print = true;
-            for (int ocIdx = 0; !showAll && (ocIdx < objectClass.length); ocIdx++) {
-                if (objectClass[ocIdx].equals(Function.class.getName())) {
-                    print = false;
-                }
-            }
-
-            // Print header if we have not already done so.
-            if (!headerPrinted) {
-                headerPrinted = true;
-                String title = Util.getBundleName(bundle);
-                title = (inUse) ? title + " uses:" : title + " provides:";
-                System.out.println("");
-                System.out.println(title);
-                System.out.println(Util.getUnderlineString(title));
-            }
-
-            if (showAll || print) {
-                // Print service separator if necessary.
-                if (needSeparator) {
-                    System.out.println("----");
-                }
-
-                // Print service properties.
-                String[] keys = refs[refIdx].getPropertyKeys();
-                for (int keyIdx = 0; (keys != null) && (keyIdx < keys.length); keyIdx++) {
-                    Object v = refs[refIdx].getProperty(keys[keyIdx]);
-                    System.out.println(keys[keyIdx] + " = " + Util.getValueString(v));
-                }
-
-                needSeparator = true;
-            }
-        }
-    }
-
-    private void printServicesShort(Bundle bundle) {
-        boolean headerPrinted = false;
-        ServiceReference[] refs = null;
-
-        // Get registered or in-use services.
-        if (inUse) {
-            refs = bundle.getServicesInUse();
-        } else {
-            refs = bundle.getRegisteredServices();
-        }
-
-        for (int refIdx = 0; (refs != null) && (refIdx < refs.length); refIdx++) {
-            String[] objectClass = (String[]) refs[refIdx].getProperty("objectClass");
-
-            // Determine if we need to print the service, depending
-            // on whether it is a command service or not.
-            boolean print = true;
-            for (int ocIdx = 0; !showAll && (ocIdx < objectClass.length); ocIdx++) {
-                if (objectClass[ocIdx].equals(Function.class.getName())) {
-                    print = false;
-                }
-            }
-
-            // Print the service if necessary.
-            if (showAll || print) {
-                if (!headerPrinted) {
-                    headerPrinted = true;
-                    String title = Util.getBundleName(bundle);
-                    title = (inUse) ? title + " uses:" : title + " provides:";
-                    System.out.println("\n" + title);
-                    System.out.println(Util.getUnderlineString(title));
-                }
-                System.out.println(Util.getValueString(objectClass));
-            }
-        }
-
-    }
-
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Name.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Name.java
deleted file mode 100644
index f3c32d9..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Name.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.utils.properties.Properties;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-
-@Command(scope = "osgi", name = "name", description = "Show or change Karaf instance name.")
-public class Name extends OsgiCommandSupport {
-
-    @Argument(name = "name", index = 0, description = "New name of the Karaf instance.", required = false, multiValued = false)
-    String name;
-
-    protected Object doExecute() throws Exception {
-        if (name == null) {
-            System.out.println(bundleContext.getProperty("karaf.name"));
-        } else {
-            try {
-                String karafBase = bundleContext.getProperty("karaf.base");
-                File etcDir = new File(karafBase, "etc");
-                File syspropsFile = new File(etcDir, "system.properties");
-                FileInputStream fis = new FileInputStream(syspropsFile);
-                Properties props = new Properties();
-                props.load(fis);
-                fis.close();
-                props.setProperty("karaf.name", name);
-                FileOutputStream fos = new FileOutputStream(syspropsFile);
-                props.store(fos, "");
-                fos.close();
-            } catch (Exception e) {
-                throw new RuntimeException(e.getMessage(), e);
-            }
-            System.out.println("Instance name changed to " + name + ". Restart needed for this to take effect.");
-        }
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/RefreshBundle.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/RefreshBundle.java
deleted file mode 100644
index 5c784e1..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/RefreshBundle.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Command;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.packageadmin.PackageAdmin;
-
-@Command(scope = "osgi", name = "refresh", description = "Refresh a bundle.")
-public class RefreshBundle extends BundlesCommandOptional {
-
-    protected void doExecute(List<Bundle> bundles) throws Exception {
-        // Get package admin service.
-        ServiceReference ref = getBundleContext().getServiceReference(PackageAdmin.class.getName());
-        if (ref == null) {
-            System.out.println("PackageAdmin service is unavailable.");
-            return;
-        }
-        try {
-            PackageAdmin pa = (PackageAdmin) getBundleContext().getService(ref);
-            if (pa == null) {
-                System.out.println("PackageAdmin service is unavailable.");
-                return;
-            }
-            if (bundles == null) {
-                pa.refreshPackages(null);
-            } else {
-                pa.refreshPackages(bundles.toArray(new Bundle[bundles.size()]));
-            }
-        }
-        finally {
-            getBundleContext().ungetService(ref);
-        }
-    }
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/ResolveBundle.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/ResolveBundle.java
deleted file mode 100644
index 45853e3..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/ResolveBundle.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import java.util.List;
-
-import org.osgi.framework.Bundle;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.packageadmin.PackageAdmin;
-import org.apache.felix.gogo.commands.Command;
-
-@Command(scope = "osgi", name = "resolve", description = "Resolve bundle(s).")
-public class ResolveBundle extends BundlesCommandOptional {
-
-    protected void doExecute(List<Bundle> bundles) throws Exception {
-        // Get package admin service.
-        ServiceReference ref = getBundleContext().getServiceReference(PackageAdmin.class.getName());
-        if (ref == null) {
-            System.out.println("PackageAdmin service is unavailable.");
-            return;
-        }
-        try {
-            PackageAdmin pa = (PackageAdmin) getBundleContext().getService(ref);
-            if (pa == null) {
-                System.out.println("PackageAdmin service is unavailable.");
-                return;
-            }
-            if (bundles == null) {
-                pa.resolveBundles(null);
-            } else {
-                pa.resolveBundles(bundles.toArray(new Bundle[bundles.size()]));
-            }
-        }
-        finally {
-            getBundleContext().ungetService(ref);
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/RestartBundle.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/RestartBundle.java
deleted file mode 100644
index 3b1c279..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/RestartBundle.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.karaf.shell.console.MultiException;
-import org.osgi.framework.Bundle;
-import org.apache.felix.gogo.commands.Command;
-
-@Command(scope = "osgi", name = "restart", description = "Stops and restarts bundle(s).")
-public class RestartBundle extends BundlesCommand {
-
-    protected void doExecute(List<Bundle> bundles) throws Exception {
-        if (bundles.isEmpty()) {
-            System.err.println("No bundles specified.");
-            return;
-        }
-        List<Exception> exceptions = new ArrayList<Exception>();
-        for (Bundle bundle : bundles) {
-            try {
-                bundle.stop();
-            } catch (Exception e) {
-                exceptions.add(new Exception("Unable to stop bundle " + bundle.getBundleId() +
-                        (e.getMessage() != null ? ": " + e.getMessage() : ""), e));
-            }
-        }
-        for (Bundle bundle : bundles) {
-            try {
-                bundle.start();
-            } catch (Exception e) {
-                exceptions.add(new Exception("Unable to start bundle " + bundle.getBundleId() +
-                        (e.getMessage() != null ? ": " + e.getMessage() : ""), e));
-            }
-        }
-        MultiException.throwIf("Error restarting bundles", exceptions);
-    }
-
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Shutdown.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Shutdown.java
deleted file mode 100644
index 23c907f..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Shutdown.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.felix.gogo.commands.Command;
-import org.osgi.framework.Bundle;
-
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-
-/**
- * Command to shut down Karaf
- */
-@Command(scope = "osgi", name = "shutdown", description = "Shutdown the framework down.")
-public class Shutdown extends OsgiCommandSupport {
-
-    @Option(name = "-f", aliases = "--force", description = "Force the shutdown without confirmation message.", required = false, multiValued = false)
-    boolean force = false;
-
-    @Argument(name = "time", index = 0, description = "Shutdown after a specified delay. The time argument can have different" +
-            " formats. First, it can be an abolute time in the format hh:mm, in which hh is the hour (1 or 2 digits) and mm" +
-            " is the minute of the hour (in two digits). Second, it can be in the format +m, in which m is the number of minutes" +
-            " to wait. The word now is an alias for +0.", required = false, multiValued = false)
-    String time;
-
-    protected Object doExecute() throws Exception {
-
-        long sleep = 0;
-        if (time != null) {
-            if (!time.equals("now")) {
-                if (time.startsWith("+")) {
-                    // delay in number of minutes provided
-                    time = time.substring(1);
-                    try {
-                        sleep = Long.parseLong(time) * 60 * 1000;
-                    } catch (Exception e) {
-                        System.err.println("Invalid time argument.");
-                        return null;
-                    }
-                } else {
-                    // try to parse the date in hh:mm
-                    String[] strings = time.split(":");
-                    if (strings.length != 2) {
-                        System.err.println("Invalid time argument.");
-                        return null;
-                    }
-                    GregorianCalendar currentDate = new GregorianCalendar();
-                    GregorianCalendar shutdownDate = new GregorianCalendar(currentDate.get(Calendar.YEAR), currentDate.get(Calendar.MONTH), currentDate.get(Calendar.DATE), Integer.parseInt(strings[0]), Integer.parseInt(strings[1]));
-                    if (shutdownDate.before(currentDate)) {
-                        shutdownDate.set(Calendar.DATE, shutdownDate.get(Calendar.DATE) + 1);
-                    }
-                    sleep = shutdownDate.getTimeInMillis() - currentDate.getTimeInMillis();
-                }
-            }
-        }
-
-        if (force) {
-            this.shutdown(sleep);
-            return null;
-        }
-
-        for (; ; ) {
-            StringBuffer sb = new StringBuffer();
-            String karafName = System.getProperty("karaf.name");
-            System.err.println(String.format("Confirm: shutdown instance %s (yes/no): ", karafName));
-
-            System.err.flush();
-            for (; ; ) {
-                int c = session.getKeyboard().read();
-                if (c < 0) {
-                    return null;
-                }
-                System.err.print((char) c);
-                System.err.flush();
-                if (c == '\r' || c == '\n') {
-                    break;
-                }
-                sb.append((char) c);
-            }
-            String str = sb.toString();
-            if (str.equals("yes")) {
-                this.shutdown(sleep);
-            }
-            return null;
-        }
-    }
-
-    private void shutdown(final long sleep) {
-        new Thread() {
-            public void run() {
-                try {
-                    if (sleep > 0) {
-                        System.err.println("Shutdown in " + sleep/1000/60 + " minute(s)");
-                    }
-                    Thread.sleep(sleep);
-                    getBundleContext().getBundle(0).stop();
-                } catch (Exception e) {
-                    log.error("Error when shutting down", e);
-                }
-            }
-        }.start();
-    }
-
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/SpringStateListenerFactory.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/SpringStateListenerFactory.java
deleted file mode 100644
index 4eae552..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/SpringStateListenerFactory.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import java.util.Map;
-import java.util.Hashtable;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.springframework.osgi.context.event.OsgiBundleApplicationContextListener;
-import org.springframework.osgi.context.event.OsgiBundleApplicationContextEvent;
-import org.springframework.osgi.context.event.OsgiBundleContextFailedEvent;
-import org.springframework.osgi.context.event.OsgiBundleContextRefreshedEvent;
-import org.springframework.osgi.extender.event.BootstrappingDependencyEvent;
-import org.springframework.osgi.service.importer.event.OsgiServiceDependencyEvent;
-import org.springframework.osgi.service.importer.event.OsgiServiceDependencyWaitStartingEvent;
-import org.osgi.framework.BundleListener;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleEvent;
-import org.osgi.framework.ServiceRegistration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-public class SpringStateListenerFactory implements BundleStateListener.Factory {
-
-    private BundleContext bundleContext;
-    private BundleStateListener listener;
-
-    public void setBundleContext(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-
-    public void init() {
-        getListener();
-    }
-
-    public void destroy() throws Exception {
-        if (listener instanceof Destroyable) {
-            ((Destroyable) listener).destroy();
-        }
-    }
-
-    public synchronized BundleStateListener getListener() {
-        if (listener == null) {
-            listener = createListener();
-        }
-        return listener;
-    }
-
-    private BundleStateListener createListener() {
-        try {
-            // Use dynamic class loading to make sure we actually try to reload the class for
-            // dynamic imports to kick in   if possible
-            Class cl = getClass().getClassLoader().loadClass("org.apache.karaf.shell.osgi.SpringStateListenerFactory$SpringApplicationListener");
-            return (BundleStateListener) cl.getConstructor(BundleContext.class).newInstance(bundleContext);
-//            return new SpringApplicationListener(bundleContext);
-        } catch (Throwable t) {
-            return null;
-        }
-    }
-
-    public static interface Destroyable {
-
-        public void destroy() throws Exception;
-
-    }
-
-    public static class SpringApplicationListener implements OsgiBundleApplicationContextListener,
-            BundleListener, Destroyable, BundleStateListener {
-
-        public static enum SpringState {
-            Unknown,
-            Waiting,
-            Started,
-            Failed,
-        }
-
-        private static final Logger LOG = LoggerFactory.getLogger(BlueprintListener.class);
-
-        private final Map<Long, SpringState> states;
-        private BundleContext bundleContext;
-        private ServiceRegistration registration;
-
-        public SpringApplicationListener(BundleContext bundleContext) {
-            this.states = new ConcurrentHashMap<Long, SpringState>();
-            this.bundleContext = bundleContext;
-            this.bundleContext.addBundleListener(this);
-            this.registration = this.bundleContext.registerService(OsgiBundleApplicationContextListener.class.getName(), this, new Hashtable());
-        }
-
-        public void destroy() throws Exception {
-            bundleContext.removeBundleListener(this);
-            registration.unregister();
-        }
-
-        public String getName() {
-            return "Spring ";
-        }
-
-        public String getState(Bundle bundle) {
-            SpringState state = states.get(bundle.getBundleId());
-            if (state == null || bundle.getState() != Bundle.ACTIVE || state == SpringState.Unknown) {
-                return null;
-            }
-            return state.toString();
-        }
-
-        public SpringState getSpringState(Bundle bundle) {
-            SpringState state = states.get(bundle.getBundleId());
-            if (state == null || bundle.getState() != Bundle.ACTIVE) {
-                state = SpringState.Unknown;
-            }
-            return state;
-        }
-
-        public void onOsgiApplicationEvent(OsgiBundleApplicationContextEvent event) {
-            SpringState state = null;
-            if (event instanceof BootstrappingDependencyEvent) {
-                OsgiServiceDependencyEvent de = ((BootstrappingDependencyEvent) event).getDependencyEvent();
-                if (de instanceof OsgiServiceDependencyWaitStartingEvent) {
-                    state = SpringState.Waiting;
-                }
-            } else if (event instanceof OsgiBundleContextFailedEvent) {
-                state = SpringState.Failed;
-            } else if (event instanceof OsgiBundleContextRefreshedEvent) {
-                state = SpringState.Started;
-            }
-            if (state != null) {
-                LOG.debug("Spring app state changed to " + state + " for bundle " + event.getBundle().getBundleId());
-                states.put(event.getBundle().getBundleId(), state);
-            }
-        }
-
-        public void bundleChanged(BundleEvent event) {
-            if (event.getType() == BundleEvent.UNINSTALLED) {
-                states.remove(event.getBundle().getBundleId());
-            }
-        }
-
-    }
-
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/StartBundle.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/StartBundle.java
deleted file mode 100644
index 73d6995..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/StartBundle.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.karaf.shell.console.MultiException;
-import org.osgi.framework.Bundle;
-import org.apache.felix.gogo.commands.Command;
-
-@Command(scope = "osgi", name = "start", description = "Starts bundle(s).")
-public class StartBundle extends BundlesCommand {
-    
-    protected void doExecute(List<Bundle> bundles) throws Exception {
-        if (bundles.isEmpty()) {
-            System.err.println("No bundles specified.");
-            return;
-        }
-        List<Exception> exceptions = new ArrayList<Exception>();
-        for (Bundle bundle : bundles) {
-            try {
-                bundle.start();
-            } catch (Exception e) {
-                exceptions.add(new Exception("Unable to start bundle " + bundle.getBundleId() +
-                        (e.getMessage() != null ? ": " + e.getMessage() : ""), e));
-            }
-        }
-        MultiException.throwIf("Error starting bundles", exceptions);
-    }
-
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/StartLevel.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/StartLevel.java
deleted file mode 100644
index 29aafcf..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/StartLevel.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.osgi.framework.ServiceReference;
-
-@Command(scope = "osgi", name = "start-level", description = "Gets or sets the system start level.")
-public class StartLevel extends OsgiCommandSupport {
-
-    @Argument(index = 0, name = "level", description = "The new system start level to set", required = false, multiValued = false)
-    Integer level;
-
-    protected Object doExecute() throws Exception {
-        // Get package admin service.
-        ServiceReference ref = getBundleContext().getServiceReference(org.osgi.service.startlevel.StartLevel.class.getName());
-        if (ref == null) {
-            System.out.println("StartLevel service is unavailable.");
-            return null;
-        }
-        try {
-            org.osgi.service.startlevel.StartLevel sl = (org.osgi.service.startlevel.StartLevel) getBundleContext().getService(ref);
-            if (sl == null) {
-                System.out.println("StartLevel service is unavailable.");
-                return null;
-            }
-
-            if (level == null) {
-                System.out.println("Level " + sl.getStartLevel());
-            }
-            else {
-                sl.setStartLevel(level);
-            }
-        }
-        finally {
-            getBundleContext().ungetService(ref);
-        }
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/StopBundle.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/StopBundle.java
deleted file mode 100644
index f89a58f..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/StopBundle.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.karaf.shell.console.MultiException;
-import org.osgi.framework.Bundle;
-import org.apache.felix.gogo.commands.Command;
-
-@Command(scope = "osgi", name = "stop", description = "Stop bundle(s).")
-public class StopBundle extends BundlesCommand {
-	
-	protected void doExecute(List<Bundle> bundles) throws Exception {
-        if (bundles.isEmpty()) {
-            System.err.println("No bundles specified.");
-            return;
-        }
-        List<Exception> exceptions = new ArrayList<Exception>();
-        for (Bundle bundle : bundles) {
-            try {
-                bundle.stop();
-            } catch (Exception e) {
-                exceptions.add(new Exception("Unable to stop bundle " + bundle.getBundleId() +
-                        (e.getMessage() != null ? ": " + e.getMessage() : ""), e));
-            }
-        }
-        MultiException.throwIf("Error stopping bundles", exceptions);
-    }
-
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/UninstallBundle.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/UninstallBundle.java
deleted file mode 100644
index 7f02baa..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/UninstallBundle.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import java.util.List;
-
-import org.osgi.framework.Bundle;
-import org.apache.felix.gogo.commands.Command;
-
-@Command(scope = "osgi", name = "uninstall", description = "Uninstall bundle(s).")
-public class UninstallBundle extends BundlesCommand {
-
-    protected void doExecute(List<Bundle> bundles) throws Exception {
-        if (bundles.isEmpty()) {
-            System.err.println("No bundles specified.");
-            return;
-        }
-        for (Bundle bundle : bundles) {
-            try {
-                bundle.uninstall();
-            } catch (Exception e) {
-                System.err.println(e.toString());
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/UpdateBundle.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/UpdateBundle.java
deleted file mode 100644
index 02a0ae8..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/UpdateBundle.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import java.io.InputStream;
-import java.net.URL;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.osgi.framework.Bundle;
-
-@Command(scope = "osgi", name = "update", description = "Update bundle.")
-public class UpdateBundle extends BundleCommand {
-
-	@Argument(index = 1, name = "location", description = "The bundles update location", required = false, multiValued = false)
-	String location;
-
-	protected void doExecute(Bundle bundle) throws Exception {
-		if (location != null) {
-			InputStream is = new URL(location).openStream();
-			bundle.update(is);
-		} else {
-			bundle.update();
-		}
-	}
-
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Util.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Util.java
deleted file mode 100644
index 465da06..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Util.java
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URL;
-
-import org.apache.felix.service.command.CommandSession;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.startlevel.StartLevel;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class Util
-{
-    private static final Logger LOGGER = LoggerFactory.getLogger(Util.class);
-
-    public static String getBundleName(Bundle bundle)
-    {
-        if (bundle != null)
-        {
-            String name = (String) bundle.getHeaders().get(Constants.BUNDLE_NAME);
-            return (name == null)
-                ? "Bundle " + Long.toString(bundle.getBundleId())
-                : name + " (" + Long.toString(bundle.getBundleId()) + ")";
-        }
-        return "[STALE BUNDLE]";
-    }
-
-    private static StringBuffer m_sb = new StringBuffer();
-
-    public static String getUnderlineString(String s)
-    {
-        synchronized (m_sb)
-        {
-            m_sb.delete(0, m_sb.length());
-            for (int i = 0; i < s.length(); i++)
-            {
-                m_sb.append('-');
-            }
-            return m_sb.toString();
-        }
-    }
-
-    public static String getValueString(Object obj)
-    {
-        synchronized (m_sb)
-        {
-            if (obj instanceof String)
-            {
-                return (String) obj;
-            }
-            else if (obj instanceof String[])
-            {
-                String[] array = (String[]) obj;
-                return convertTypedArrayToString(array, new StringConverter<String>() {
-                    public String convertObjectToString(String toConvert) {
-                        return toConvert;
-                    }
-                });
-            }
-            else if (obj instanceof Boolean)
-            {
-                return ((Boolean) obj).toString();
-            }
-            else if (obj instanceof Long)
-            {
-                return ((Long) obj).toString();
-            }
-            else if (obj instanceof Integer)
-            {
-                return ((Integer) obj).toString();
-            }
-            else if (obj instanceof Short)
-            {
-                return ((Short) obj).toString();
-            }
-            else if (obj instanceof Double)
-            {
-                return ((Double) obj).toString();
-            }
-            else if (obj instanceof Float)
-            {
-                return ((Float) obj).toString();
-            }
-            else if (obj instanceof URL)
-            {
-                return ((URL)obj).toExternalForm();
-            }
-            else if (obj instanceof URL[])
-            {
-                URL[] array = (URL[]) obj;
-                return convertTypedArrayToString(array, new StringConverter<URL>() {
-                    public String convertObjectToString(URL toConvert) {
-                        return toConvert.toExternalForm();
-                    }
-                });
-            }
-            else if (obj instanceof URI)
-            {
-                try {
-                    return ((URI)obj).toURL().toExternalForm();
-                } catch (MalformedURLException e) {
-                    LOGGER.error("URI could not be transformed to URL",e);
-                    return obj.toString();
-                }
-            }
-            else if (obj instanceof URI[])
-            {
-                URI[] array = (URI[]) obj;
-                return convertTypedArrayToString(array, new StringConverter<URI>() {
-                    public String convertObjectToString(URI toConvert) {
-                        try {
-                            return toConvert.toURL().toExternalForm();
-                        } catch (MalformedURLException e) {
-                            LOGGER.error("URI could not be transformed to URL",e);
-                            return toConvert.toString();
-                        }
-                    }
-                });
-            }
-            else if (obj == null)
-            {
-                return "null";
-            }
-            else
-            {
-                return obj.toString();
-            }
-        }
-    }
-
-    private static <Type> String convertTypedArrayToString(Type[] array, StringConverter<Type> converter) {
-        m_sb.delete(0, m_sb.length());
-        for (int i = 0; i < array.length; i++)
-        {
-            if (i != 0)
-            {
-                m_sb.append(", ");
-            }
-            m_sb.append(converter.convertObjectToString(array[i]));
-        }
-        return m_sb.toString();
-    }
-
-    private static interface StringConverter<Type> {
-      String convertObjectToString(Type toConvert);
-    }
-
-    /**
-     * Check if a bundle is a system bundle (start level < 50)
-     * 
-     * @param bundleContext
-     * @param bundle
-     * @return true if the bundle has start level minor than 50
-     */
-    public static boolean isASystemBundle(BundleContext bundleContext, Bundle bundle) {
-        ServiceReference ref = bundleContext.getServiceReference(StartLevel.class.getName());
-        if (ref != null) {
-            StartLevel sl = (StartLevel) bundleContext.getService(ref);
-            if (sl != null) {
-                int level = sl.getBundleStartLevel(bundle);
-                int sbsl = 49;
-                final String sbslProp = bundleContext.getProperty( "karaf.systemBundlesStartLevel" );
-                if (sbslProp != null) {
-                    try {
-                       sbsl = Integer.valueOf( sbslProp );
-                    }
-                    catch( Exception ignore ) {
-                      // ignore
-                    }
-                }
-                return level <= sbsl;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Ask the user to confirm the access to a system bundle
-     * 
-     * @param bundleId
-     * @param session
-     * @return true if the user confirm
-     * @throws IOException
-     */
-    public static boolean accessToSystemBundleIsAllowed(long bundleId, CommandSession session) throws IOException {
-        for (;;) {
-            StringBuffer sb = new StringBuffer();
-            System.err.print("You are about to access system bundle " + bundleId + ".  Do you wish to continue (yes/no): ");
-            System.err.flush();
-            for (;;) {
-                int c = session.getKeyboard().read();
-                if (c < 0) {
-                    return false;
-                }
-                System.err.print((char) c);
-                if (c == '\r' || c == '\n') {
-                    break;
-                }
-                sb.append((char) c);
-            }
-            String str = sb.toString();
-            if ("yes".equals(str)) {
-                return true;
-            }
-            if ("no".equals(str)) {
-                return false;
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Version.java b/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Version.java
deleted file mode 100644
index 1815bae..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Version.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.osgi;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-
-@Command(scope = "osgi", name = "version", description = "Display the instance version.")
-public class Version extends OsgiCommandSupport {
-
-    public Object doExecute() throws Exception {
-        System.out.println(System.getProperty("karaf.version"));
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/osgi/src/main/resources/OSGI-INF/blueprint/shell-osgi.xml b/karaf-2.3.x/shell/osgi/src/main/resources/OSGI-INF/blueprint/shell-osgi.xml
deleted file mode 100644
index 7451cfa..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/resources/OSGI-INF/blueprint/shell-osgi.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.0.0">
-        <command name="osgi/bundle-level">
-            <action class="org.apache.karaf.shell.osgi.BundleLevel"/>
-        </command>
-        <command name="osgi/headers">
-            <action class="org.apache.karaf.shell.osgi.Headers"/>
-        </command>
-        <command name="osgi/classes">
-            <action class="org.apache.karaf.shell.osgi.Classes"/>
-        </command>
-        <command name="osgi/find-class">
-            <action class="org.apache.karaf.shell.osgi.FindClass"/>
-        </command>
-        <command name="osgi/info">
-            <action class="org.apache.karaf.shell.osgi.Info"/>
-        </command>
-        <command name="osgi/install">
-            <action class="org.apache.karaf.shell.osgi.InstallBundle"/>
-        </command>
-        <command name="osgi/list">
-            <action class="org.apache.karaf.shell.osgi.ListBundles">
-                <property name="bundleStateListenerFactories">
-                    <list xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-                        <ref component-id="blueprintListener" />
-                        <ref component-id="springListener" />
-                    </list>
-                </property>
-            </action>
-        </command>
-        <command name="osgi/ls">
-            <action class="org.apache.karaf.shell.osgi.ListServices"/>
-        </command>
-        <command name="osgi/bundle-services">
-            <action class="org.apache.karaf.shell.osgi.ListBundleServices"/>
-        </command>
-        <command name="osgi/name">
-            <action class="org.apache.karaf.shell.osgi.Name"/>
-        </command>
-        <command name="osgi/refresh">
-            <action class="org.apache.karaf.shell.osgi.RefreshBundle"/>
-        </command>
-        <command name="osgi/update">
-            <action class="org.apache.karaf.shell.osgi.UpdateBundle"/>
-        </command>
-        <command name="osgi/resolve">
-            <action class="org.apache.karaf.shell.osgi.ResolveBundle"/>
-        </command>
-        <command name="osgi/restart">
-            <action class="org.apache.karaf.shell.osgi.RestartBundle"/>
-        </command>
-        <command name="osgi/shutdown">
-            <action class="org.apache.karaf.shell.osgi.Shutdown"/>
-        </command>
-        <command name="osgi/start">
-            <action class="org.apache.karaf.shell.osgi.StartBundle"/>
-        </command>
-        <command name="osgi/start-level">
-            <action class="org.apache.karaf.shell.osgi.StartLevel"/>
-        </command>
-        <command name="osgi/stop">
-            <action class="org.apache.karaf.shell.osgi.StopBundle"/>
-        </command>
-        <command name="osgi/uninstall">
-            <action class="org.apache.karaf.shell.osgi.UninstallBundle"/>
-        </command>
-        <command name="osgi/version">
-            <action class="org.apache.karaf.shell.osgi.Version"/>
-        </command>
-    </command-bundle>
-
-    <service auto-export="interfaces">
-        <service-properties>
-            <entry key="name" value="osgi"/>
-            <entry key="description" value="Commands to manage the OSGi framework"/>
-        </service-properties>
-        <bean class="org.apache.karaf.shell.console.commands.BasicSubShell">
-            <property name="name" value="osgi"/>
-            <property name="description" value="Commands to manage the OSGi framework"/>
-            <property name="detailedDescription" value="classpath:/org/apache/karaf/shell/osgi/osgi.txt"/>
-        </bean>
-    </service>
-
-    <bean id="blueprintListener" class="org.apache.karaf.shell.osgi.BlueprintListener" />
-    <service ref="blueprintListener" interface="org.osgi.service.blueprint.container.BlueprintListener" />
-
-    <bean id="springListener" class="org.apache.karaf.shell.osgi.SpringStateListenerFactory" init-method="init" destroy-method="destroy">
-        <property name="bundleContext" ref="blueprintBundleContext" />
-    </bean>
-
-</blueprint>
diff --git a/karaf-2.3.x/shell/osgi/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/shell/osgi/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 969cefe..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,30 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides the low level OSGi shell commands.
-
-    The following commands are available:
-    \u001B[36mosgi:bundle-level\u001B[0m Gets or sets the start level of a given bundle.
-    \u001B[36mosgi:headers\u001B[0m Displays OSGi headers of a given bundle.
-    \u001B[36mosgi:info\u001B[0m Displays detailed information of a given bundle.
-    \u001B[36mosgi:installs\u001B[0m Installs one or more bundles.
-    \u001B[36mosgi:list\u001B[0m Lists all installed bundles.
-    \u001B[36mosgi:ls\u001B[0m Lists OSGi services.
-    \u001B[36mosgi:refresh\u001B[0m Refresh a bundle.
-    \u001B[36mosgi:resolve\u001B[0m Resolve bundle(s).
-    \u001B[36mosgi:restart\u001B[0m Stops and restarts bundle(s).
-    \u001B[36mosgi:shutdown\u001B[0m Shuts the framework down.
-    \u001B[36mosgi:start\u001B[0m Starts bundle(s).
-    \u001B[36mosgi:start-level\u001B[0m Gets or sets the system start level.
-    \u001B[36mosgi:stop\u001B[0m Stop bundle(s).
-    \u001B[36mosgi:uninstall\u001B[0m Uninstall bundle(s).
-    \u001B[36mosgi:update\u001B[0m Update bundle.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mCommands\u001B[0m and \u001B[36mUsing the console\u001B[0m sections of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/shell/osgi/src/main/resources/org/apache/karaf/shell/osgi/osgi.txt b/karaf-2.3.x/shell/osgi/src/main/resources/org/apache/karaf/shell/osgi/osgi.txt
deleted file mode 100644
index 6aa3fc2..0000000
--- a/karaf-2.3.x/shell/osgi/src/main/resources/org/apache/karaf/shell/osgi/osgi.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-The commands in this subshell can be used to inspect or modify the OSGi framework.
-
-The full list of commands is available below and you can obtain a more detailed help for a given command by using the help command followed by the name of the command:
-  > help osgi:list
-
diff --git a/karaf-2.3.x/shell/packages/NOTICE b/karaf-2.3.x/shell/packages/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/shell/packages/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/shell/packages/pom.xml b/karaf-2.3.x/shell/packages/pom.xml
deleted file mode 100644
index 03b43fe..0000000
--- a/karaf-2.3.x/shell/packages/pom.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.shell</groupId>
-        <artifactId>shell</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.shell.packages</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Shell :: PackageAdmin Commands</name>
-    <description>This bundle provides Karaf shell commands to manipulate the PackageAdmin service.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            org.apache.felix.service.command,
-                            org.apache.felix.gogo.commands,
-                            org.apache.karaf.shell.console,
-                            *
-                        </Import-Package>
-                        <Private-Package>!*</Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/shell/packages/src/main/java/org/apache/karaf/shell/packages/ExportsCommand.java b/karaf-2.3.x/shell/packages/src/main/java/org/apache/karaf/shell/packages/ExportsCommand.java
deleted file mode 100644
index 0fa1b38..0000000
--- a/karaf-2.3.x/shell/packages/src/main/java/org/apache/karaf/shell/packages/ExportsCommand.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.packages;
-
-import java.io.PrintStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.gogo.commands.Command;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.Constants;
-import org.osgi.service.packageadmin.ExportedPackage;
-import org.osgi.service.packageadmin.PackageAdmin;
-
-@Command(scope = "packages", name = "exports", description = "Displays exported packages.")
-public class ExportsCommand extends PackageCommandSupport {
-
-    @Option(name = "-i", aliases = {"--imports"}, description = "List bundles importing the specified packages")
-    boolean imports;
-    @Option(name = "-s", description = "Shows the symbolic name", required = false, multiValued = false)
-    boolean showSymbolic;
-    @Option(name = "-d", aliases = {"--details"}, description = "List bundles in a master detail table")
-    boolean details;
-    @Argument(index = 0, name = "ids", description = "The IDs of bundles to check", required = false, multiValued = true)
-    List<Long> ids;
-
-    protected void doExecute(PackageAdmin admin) throws Exception {
-        String format = "";
-        int index = 1;
-        List<String> headers = new ArrayList<String>();
-        headers.add("ID");
-        format += "%" + (index++) + "$6s";
-
-        if (showSymbolic) {
-            headers.add("Symbolic name");
-            format += " %" + (index++) + "$-40s ";
-        }
-
-        headers.add("Packages");
-        format += " %" + (index++) + "$-40s";
-
-        if (imports) {
-            headers.add("Imported by");
-            format += " %" + (index++) + "$-40s";
-        }
-        format += "\n";
-        System.out.format(format, headers.toArray());
-
-        if (ids != null && !ids.isEmpty()) {
-            for (long id : ids) {
-                Bundle bundle = getBundleContext().getBundle(id);
-                if (bundle != null) {
-                    printExports(System.out, format, bundle, admin.getExportedPackages(bundle));
-                } else {
-                    System.err.println("Bundle ID " + id + " is invalid.");
-                }
-            }
-        } else {
-            for (Bundle bundle : getBundleContext().getBundles()) {
-                printExports(System.out, format, bundle, admin.getExportedPackages((Bundle) bundle));
-            }
-        }
-    }
-
-    protected void printExports(PrintStream out, String format, Bundle target, ExportedPackage[] exports) {
-        List<String> columns = new ArrayList<String>();
-
-        if ((exports != null) && (exports.length > 0)) {
-            for (int i = 0; i < exports.length; i++) {
-                columns = new ArrayList<String>();
-                Bundle bundle = exports[i].getExportingBundle();
-                columns.add(String.valueOf(bundle.getBundleId()));
-
-                if (showSymbolic) {
-                    columns.add(bundle.getSymbolicName());
-                }
-
-                //Do not repeat ID, Symbolic names etc when bundle exports more that one package
-                if (i > 0) {
-                    int size = columns.size();
-                    if (details) {
-                        columns = new ArrayList<String>();
-                        fillDetailRecord(columns, size);
-                    }
-                }
-                
-                columns.add(exports[i].toString());
-
-                if (imports) {
-                    Bundle[] bs = exports[i].getImportingBundles();
-                    if (bs != null && bs.length > 0) {
-                        for (int j = 0; j < bs.length; j++) {
-                            columns.add(getBundleName(bs[j]));
-                            out.format(format, columns.toArray());
-                            //Do not repeat ID, Symbolic names etc when package is imported by more than one bundles
-                            if (details) {
-                                int size = columns.size();
-                                columns = new ArrayList<String>();
-                                fillDetailRecord(columns, size - 1);
-                            } else {
-                                columns.remove(columns.size() - 1);
-                            }
-                        }
-                    } else {
-                        columns.add("");
-                        out.format(format, columns.toArray());
-                    }
-                } else {
-                    out.format(format, columns.toArray());
-                }
-            }
-        } else {
-            columns.add(String.valueOf(target.getBundleId()));
-
-            if (showSymbolic) {
-                columns.add(target.getSymbolicName());
-            }
-
-            columns.add("No active exported packages. This command only works on started bundles, use osgi:headers instead");
-            if (imports) {
-                columns.add("");
-            }
-            out.format(format, columns.toArray());
-        }
-    }
-
-    public static String getBundleName(Bundle bundle) {
-        if (bundle != null) {
-            String name = (String) bundle.getHeaders().get(Constants.BUNDLE_NAME);
-            return (name == null)
-                    ? "Bundle " + Long.toString(bundle.getBundleId())
-                    : name + " (" + Long.toString(bundle.getBundleId()) + ")";
-        }
-        return "[STALE BUNDLE]";
-    }
-
-    /**
-     * Method that creates an empty list of string that serves as detail record.
-     * @param colums
-     * @param size
-     */
-    public void fillDetailRecord(List<String> colums, int size) {
-        for (int i = 0; i < size; i++) {
-            colums.add("");
-        }
-    }
-}
diff --git a/karaf-2.3.x/shell/packages/src/main/java/org/apache/karaf/shell/packages/ImportsCommand.java b/karaf-2.3.x/shell/packages/src/main/java/org/apache/karaf/shell/packages/ImportsCommand.java
deleted file mode 100644
index 165a8f0..0000000
--- a/karaf-2.3.x/shell/packages/src/main/java/org/apache/karaf/shell/packages/ImportsCommand.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.packages;
-
-import java.io.PrintStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.osgi.framework.Bundle;
-import org.osgi.framework.Constants;
-import org.osgi.service.packageadmin.ExportedPackage;
-import org.osgi.service.packageadmin.PackageAdmin;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-
-@Command(scope = "packages", name = "imports", description = "Displays imported packages.")
-public class ImportsCommand extends PackageCommandSupport {
-
-	@Argument(index = 0, name = "ids", description = "The IDs of bundles to check", required = false, multiValued = true)
-    List<Long> ids;
-	
-    @Option(name = "-i", aliases = { "--show-importer" }, description = "show the bundle that is importing a package", required = false, multiValued = false)
-    private boolean showImporter;
-
-    protected void doExecute(PackageAdmin admin) throws Exception {
-        Map<Long, List<ExportedPackage>> packages = new HashMap<Long, List<ExportedPackage>>();
-        ExportedPackage[] exported = admin.getExportedPackages((Bundle) null);
-        for (ExportedPackage pkg : exported) {
-            Bundle[] bundles = pkg.getImportingBundles();
-            if (bundles != null) {
-                for (Bundle b : bundles) {
-                    List<ExportedPackage> p = packages.get(b.getBundleId());
-                    if (p == null) {
-                        p = new ArrayList<ExportedPackage>();
-                        packages.put(b.getBundleId(), p);
-                    }
-                    p.add(pkg);
-                }
-            }
-        }
-        if (ids != null && !ids.isEmpty()) {
-            for (long id : ids) {
-                Bundle bundle = getBundleContext().getBundle(id);
-                if (bundle != null) {
-                    printImports(System.out, bundle, packages.get(bundle.getBundleId()));
-                } else {
-                    System.err.println("Bundle ID " + id + " is invalid.");
-                }
-            }
-        }
-        else {
-            if (showImporter) {
-                printImports(System.out, packages);
-            } else {
-                List<ExportedPackage> pkgs = new ArrayList<ExportedPackage>();
-                for (List<ExportedPackage> l : packages.values()) {
-                    pkgs.addAll(l);
-                }
-                printImports(System.out, null, pkgs);
-            }
-        }
-    }   
-    
-    protected void printImports(PrintStream out, Map<Long, List<ExportedPackage>> imports) {
-        for (Map.Entry<Long, List<ExportedPackage>> entry : imports.entrySet()) {
-            for (ExportedPackage p : entry.getValue()) {
-                // print bundle that is importing this package
-                Bundle importer = getBundleContext().getBundle(entry.getKey());
-                out.print(getBundleName(importer));
-                out.print(" imports: ");
-                
-                // print bundle that is exporting this package
-                Bundle exporter = p.getExportingBundle();
-                out.print(getBundleName(exporter));
-                
-                // print the package
-                out.println(": " + p);
-            }
-        }
-    }
-    
-    protected void printImports(PrintStream out, Bundle target, List<ExportedPackage> imports) {
-        if ((imports != null) && (imports.size() > 0)) {
-            for (ExportedPackage p : imports) {
-                Bundle bundle = p.getExportingBundle();
-                out.print(getBundleName(bundle));
-                out.println(": " + p);
-            }
-        } else {
-            out.println(getBundleName(target) + ": No active imported packages. This command only works on started bundles, use osgi:headers instead");
-        }
-    }
-
-    public static String getBundleName(Bundle bundle) {
-        if (bundle != null) {
-            String name = (String) bundle.getHeaders().get(Constants.BUNDLE_NAME);
-            return (name == null)
-                ? "Bundle " + Long.toString(bundle.getBundleId())
-                : name + " (" + Long.toString(bundle.getBundleId()) + ")";
-        }
-        return "[STALE BUNDLE]";
-    }
-
-}
diff --git a/karaf-2.3.x/shell/packages/src/main/java/org/apache/karaf/shell/packages/PackageCommandSupport.java b/karaf-2.3.x/shell/packages/src/main/java/org/apache/karaf/shell/packages/PackageCommandSupport.java
deleted file mode 100644
index 8dfa1e9..0000000
--- a/karaf-2.3.x/shell/packages/src/main/java/org/apache/karaf/shell/packages/PackageCommandSupport.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.packages;
-
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.packageadmin.PackageAdmin;
-
-/**
- * Abstract class from which all commands related to the PackageAdmin
- * service should derive.
- * This command retrieves a reference to the PackageAdmin service before
- * calling another method to actually process the command.
- */
-public abstract class PackageCommandSupport extends OsgiCommandSupport {
-
-    protected Object doExecute() throws Exception {
-        // Get package admin service.
-        ServiceReference ref = getBundleContext().getServiceReference(PackageAdmin.class.getName());
-        if (ref == null) {
-            System.out.println("PackageAdmin service is unavailable.");
-            return null;
-        }
-        try {
-            PackageAdmin admin = (PackageAdmin) getBundleContext().getService(ref);
-            if (admin == null) {
-                System.out.println("PackageAdmin service is unavailable.");
-                return null;
-            }
-
-            doExecute(admin);
-        }
-        finally {
-            getBundleContext().ungetService(ref);
-        }
-        return null;
-    }
-
-    protected abstract void doExecute(PackageAdmin admin) throws Exception;
-
-}
diff --git a/karaf-2.3.x/shell/packages/src/main/resources/OSGI-INF/blueprint/shell-packages.xml b/karaf-2.3.x/shell/packages/src/main/resources/OSGI-INF/blueprint/shell-packages.xml
deleted file mode 100644
index 379ebe8..0000000
--- a/karaf-2.3.x/shell/packages/src/main/resources/OSGI-INF/blueprint/shell-packages.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.0.0">
-        <command name="packages/exports">
-            <action class="org.apache.karaf.shell.packages.ExportsCommand"/>
-        </command>
-        <command name="packages/imports">
-            <action class="org.apache.karaf.shell.packages.ImportsCommand"/>
-        </command>
-    </command-bundle>
-
-</blueprint>
diff --git a/karaf-2.3.x/shell/packages/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/shell/packages/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 431b7fc..0000000
--- a/karaf-2.3.x/shell/packages/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,19 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides Karaf shell commands to manipulate the PackageAdmin service.
-
-    It allows you to get the export/import packages present in the OSGi framework.
-
-    The following commands are available:
-    \u001B[36mpackages:exports\u001B[0m Displays exported packages.
-    \u001B[36mpackages:imports\u001B[0m Displays imported packages.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mCommands\u001B[0m section of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/shell/pom.xml b/karaf-2.3.x/shell/pom.xml
deleted file mode 100644
index 6e52f4f..0000000
--- a/karaf-2.3.x/shell/pom.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>karaf</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.shell</groupId>
-    <artifactId>shell</artifactId>
-    <packaging>pom</packaging>
-    <name>Apache Karaf :: Shell</name>
-
-    <modules>
-        <module>commands</module>
-        <module>config</module>
-        <module>console</module>
-        <module>log</module>
-        <module>obr</module>
-        <module>osgi</module>
-        <module>packages</module>
-        <module>ssh</module>
-        <module>wrapper</module>
-        <module>dev</module>
-        <module>scr</module>
-        <module>web</module>
-    </modules>
-
-</project>
diff --git a/karaf-2.3.x/shell/scr/NOTICE b/karaf-2.3.x/shell/scr/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/shell/scr/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/shell/scr/pom.xml b/karaf-2.3.x/shell/scr/pom.xml
deleted file mode 100644
index f424448..0000000
--- a/karaf-2.3.x/shell/scr/pom.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.karaf.shell</groupId>
-        <artifactId>shell</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.shell.scr</artifactId>
-
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Shell :: SCR Commands</name>
-    <description>Provides the OSGi SCR commands</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.scr</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>biz.aQute</groupId>
-            <artifactId>bndlib</artifactId>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <inherited>true</inherited>
-                <configuration>
-                    <instructions>
-                        <Service-Component>*</Service-Component>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-</project>
diff --git a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/ActivateCommandComponent.java b/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/ActivateCommandComponent.java
deleted file mode 100644
index 0122ab5..0000000
--- a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/ActivateCommandComponent.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.scr;
-
-import aQute.bnd.annotation.component.Activate;
-import aQute.bnd.annotation.component.Component;
-import aQute.bnd.annotation.component.Deactivate;
-import aQute.bnd.annotation.component.Reference;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Action;
-import org.apache.felix.scr.ScrService;
-import org.apache.karaf.shell.console.CompletableFunction;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.scr.action.ActivateAction;
-import org.apache.karaf.shell.scr.completer.ActivateCompleter;
-
-/**
- * Shell Command used to activate a Declarative Service Component.
- */
-@Component(
-        provide=CompletableFunction.class, 
-        name = ActivateCommandComponent.COMPONENT_NAME, 
-        enabled = true, 
-        immediate = true,
-        properties={ 
-            ScrCommandConstants.OSGI_COMMAND_SCOPE_KEY+"="+ScrCommandConstants.SCR_COMMAND, 
-            ScrCommandConstants.OSGI_COMMAND_FUNCTION_KEY+"="+ScrCommandConstants.ACTIVATE_FUNCTION,
-            ScrCommandConstants.HIDDEN_COMPONENT_KEY + "=true"})
-public class ActivateCommandComponent extends ScrCommandSupport {
-
-    public static final String COMPONENT_NAME = "ActivateCommand";
-
-    public static final String COMPONENT_LABEL = "Apache Karaf SCR Activate Command";
-
-    @Override
-    public Class<? extends Action> getActionClass() {
-        return ActivateAction.class;
-    }
-
-    @Override
-    public List<Class<? extends Completer>> getCompleterClasses() {
-        List<Class<? extends Completer>> completers = new ArrayList<Class<? extends Completer>>();
-        completers.add(ActivateCompleter.class);
-        return completers;
-    }
-
-    @Activate
-    public void activate() {
-        logger.info("Activating the " + COMPONENT_LABEL);
-    }
-
-    @Deactivate
-    public void deactivate() {
-        logger.info("Deactivating the " + COMPONENT_LABEL);
-    }
-
-    @Reference
-    @Override
-    public void setScrService(ScrService scrService) {
-        super.setScrService(scrService);
-    }
-
-}
diff --git a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/DeactivateCommandComponent.java b/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/DeactivateCommandComponent.java
deleted file mode 100644
index e86631d..0000000
--- a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/DeactivateCommandComponent.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.scr;
-
-import aQute.bnd.annotation.component.Activate;
-import aQute.bnd.annotation.component.Component;
-import aQute.bnd.annotation.component.Deactivate;
-import aQute.bnd.annotation.component.Reference;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Action;
-import org.apache.felix.scr.ScrService;
-import org.apache.karaf.shell.console.CompletableFunction;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.scr.action.DeactivateAction;
-import org.apache.karaf.shell.scr.completer.DeactivateCompleter;
-
-/**
- * Shell Command used to deactivate a Declarative Service Component.
- */
-@Component(
-        provide=CompletableFunction.class, 
-        name = DeactivateCommandComponent.COMPONENT_NAME, 
-        enabled = true, 
-        immediate = true,
-        properties={ 
-            ScrCommandConstants.OSGI_COMMAND_SCOPE_KEY+"="+ScrCommandConstants.SCR_COMMAND, 
-            ScrCommandConstants.OSGI_COMMAND_FUNCTION_KEY+"="+ScrCommandConstants.DEACTIVATE_FUNCTION,
-            ScrCommandConstants.HIDDEN_COMPONENT_KEY + "=true"})
-public class DeactivateCommandComponent extends ScrCommandSupport {
-
-    public static final String COMPONENT_NAME = "DeactivateCommand";
-
-    public static final String COMPONENT_LABEL = "Apache Karaf SCR Deactivate Command";
-
-    @Override
-    public Class<? extends Action> getActionClass() {
-        return DeactivateAction.class;
-    }
-
-    @Override
-    public List<Class<? extends Completer>> getCompleterClasses() {
-        List<Class<? extends Completer>> completers = new ArrayList<Class<? extends Completer>>();
-        completers.add(DeactivateCompleter.class);
-        return completers;
-    }
-
-    @Activate
-    public void activate() {
-        logger.info("Activating the " + COMPONENT_LABEL);
-    }
-
-    @Deactivate
-    public void deactivate() {
-        logger.info("Deactivating the " + COMPONENT_LABEL);
-    }
-
-    @Reference
-    @Override
-    public void setScrService(ScrService scrService) {
-        super.setScrService(scrService);
-    }
-
-}
diff --git a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/DetailsCommandComponent.java b/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/DetailsCommandComponent.java
deleted file mode 100644
index 83e3f71..0000000
--- a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/DetailsCommandComponent.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.scr;
-
-import aQute.bnd.annotation.component.Activate;
-import aQute.bnd.annotation.component.Component;
-import aQute.bnd.annotation.component.Deactivate;
-import aQute.bnd.annotation.component.Reference;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Action;
-import org.apache.felix.scr.ScrService;
-import org.apache.karaf.shell.console.CompletableFunction;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.scr.action.DetailsAction;
-import org.apache.karaf.shell.scr.completer.DetailsCompleter;
-
-/**
- * Shell Command that prints the current state details of a given
- * Declarative Service Component.
- */
-@Component(
-        provide=CompletableFunction.class, 
-        name = DetailsCommandComponent.COMPONENT_NAME, 
-        enabled = true, 
-        immediate = true,
-        properties={ 
-            ScrCommandConstants.OSGI_COMMAND_SCOPE_KEY+"="+ScrCommandConstants.SCR_COMMAND, 
-            ScrCommandConstants.OSGI_COMMAND_FUNCTION_KEY+"="+ScrCommandConstants.DETAILS_FUNCTION,
-            ScrCommandConstants.HIDDEN_COMPONENT_KEY + "=true"})
-public class DetailsCommandComponent extends ScrCommandSupport {
-
-    public static final String COMPONENT_NAME = "DetailsCommand";
-
-    public static final String COMPONENT_LABEL = "Apache Karaf SCR Details Command";
-
-    @Override
-    public Class<? extends Action> getActionClass() {
-        return DetailsAction.class;
-    }
-
-    @Override
-    public List<Class<? extends Completer>> getCompleterClasses() {
-        List<Class<? extends Completer>> completers = new ArrayList<Class<? extends Completer>>();
-        completers.add(DetailsCompleter.class);
-        return completers;
-    }
-
-    @Activate
-    public void activate() {
-        logger.info("Activating the " + COMPONENT_LABEL);
-    }
-
-    @Deactivate
-    public void deactivate() {
-        logger.info("Deactivating the " + COMPONENT_LABEL);
-    }
-
-    @Reference
-    @Override
-    public void setScrService(ScrService scrService) {
-        super.setScrService(scrService);
-    }
-
-}
diff --git a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/ListCommandComponent.java b/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/ListCommandComponent.java
deleted file mode 100644
index 44e86b2..0000000
--- a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/ListCommandComponent.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.scr;
-
-import aQute.bnd.annotation.component.Activate;
-import aQute.bnd.annotation.component.Component;
-import aQute.bnd.annotation.component.Deactivate;
-import aQute.bnd.annotation.component.Reference;
-
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Action;
-import org.apache.felix.scr.ScrService;
-import org.apache.karaf.shell.console.CompletableFunction;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.scr.action.ListAction;
-
-/**
- * Shell Command that lists the available Declarative Service Components.
- */
-@Component(
-        provide=CompletableFunction.class, 
-        name = ListCommandComponent.COMPONENT_NAME, 
-        enabled = true, 
-        immediate = true,
-        properties={ 
-            ScrCommandConstants.OSGI_COMMAND_SCOPE_KEY+"="+ScrCommandConstants.SCR_COMMAND, 
-            ScrCommandConstants.OSGI_COMMAND_FUNCTION_KEY+"="+ScrCommandConstants.LIST_FUNCTION,
-            ScrCommandConstants.HIDDEN_COMPONENT_KEY + "=true"})
-public class ListCommandComponent extends ScrCommandSupport {
-
-    public static final String COMPONENT_NAME = "ListCommand";
-    public static final String COMPONENT_LABEL = "Apache Karaf SCR List Command";
-
-    @Override
-    public Class<? extends Action> getActionClass() {
-        return ListAction.class;
-    }
-
-    @Override
-    public List<Class<? extends Completer>> getCompleterClasses() {
-        return null;
-    }
-
-    @Activate
-    public void activate() {
-        logger.info("Activating the " + COMPONENT_LABEL);
-    }
-
-    @Deactivate
-    public void deactivate() {
-        logger.info("Deactivating the " + COMPONENT_LABEL);
-    }
-
-    @Reference
-    @Override
-    public void setScrService(ScrService scrService) {
-        super.setScrService(scrService);
-    }
-
-}
diff --git a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/ScrCommandConstants.java b/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/ScrCommandConstants.java
deleted file mode 100644
index 44840ac..0000000
--- a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/ScrCommandConstants.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.scr;
-
-public class ScrCommandConstants {
-
-    public static final String OSGI_COMMAND_SCOPE_KEY = "osgi.command.scope";
-
-    public static final String OSGI_COMMAND_FUNCTION_KEY = "osgi.command.function";
-
-    public static final String HIDDEN_COMPONENT_KEY = "hidden.component";
-
-    public static final String SCR_COMMAND = "scr";
-
-    public static final String LIST_FUNCTION = "list";
-
-    public static final String ACTIVATE_FUNCTION = "activate";
-
-    public static final String DEACTIVATE_FUNCTION = "deactivate";
-
-    public static final String DETAILS_FUNCTION = "details";
-
-}
diff --git a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/ScrCommandSupport.java b/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/ScrCommandSupport.java
deleted file mode 100644
index 404fd09..0000000
--- a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/ScrCommandSupport.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.scr;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.locks.ReadWriteLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import org.apache.felix.gogo.commands.Action;
-import org.apache.felix.gogo.commands.basic.AbstractCommand;
-import org.apache.felix.scr.ScrService;
-import org.apache.karaf.shell.console.CompletableFunction;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.scr.action.ScrActionSupport;
-import org.apache.karaf.shell.scr.completer.ScrCompleterSupport;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public abstract class ScrCommandSupport extends AbstractCommand implements CompletableFunction {
-
-    protected final Logger logger = LoggerFactory.getLogger(getClass().getName());
-
-    private ScrService scrService;
-    private ReadWriteLock lock = new ReentrantReadWriteLock();
-
-    @Override
-    public abstract Class<? extends Action> getActionClass();
-
-    public abstract List<Class<? extends Completer>> getCompleterClasses();
-
-    @Override
-    public Action createNewAction() {
-        try {
-            lock.readLock().lock();
-            ScrActionSupport action = (ScrActionSupport)getActionClass().newInstance();
-            action.setScrService(getScrService());
-            return action;
-        } catch (InstantiationException e) {
-            throw new RuntimeException(e);
-        } catch (IllegalAccessException e) {
-            throw new RuntimeException(e);
-        } finally {
-            lock.readLock().unlock();
-        }
-    }
-
-    public List<Completer> getCompleters() {
-        List<Completer> completers = null;
-
-        if (getCompleterClasses() != null) {
-            try {
-                lock.readLock().lock();
-                completers = new ArrayList<Completer>();
-                for (Class<? extends Completer> completerClass : getCompleterClasses()) {
-                    ScrCompleterSupport ccs = (ScrCompleterSupport)completerClass.newInstance();
-                    ccs.setScrService(scrService);
-                    completers.add(ccs);
-                }
-
-            } catch (InstantiationException e) {
-                throw new RuntimeException(e);
-            } catch (IllegalAccessException e) {
-                throw new RuntimeException(e);
-            } finally {
-                lock.readLock().unlock();
-            }
-        }
-        return completers;
-    }
-
-    public Map<String, Completer> getOptionalCompleters() {
-        return null;
-    }
-
-    /**
-     * Returns the instance of ScrService for this instance of
-     * ScrCommandSupport.
-     * 
-     * @return the ScrCommandSupport or null
-     */
-    public ScrService getScrService() {
-        return scrService;
-    }
-
-    public void setScrService(ScrService scrService) {
-        try {
-            lock.writeLock().lock();
-            this.scrService = scrService;
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    public void unsetScrService(ScrService scrService) {
-        try {
-            lock.writeLock().lock();
-            this.scrService = null;
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/ScrUtils.java b/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/ScrUtils.java
deleted file mode 100644
index 1d25030..0000000
--- a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/ScrUtils.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.scr;
-
-import java.lang.reflect.Array;
-
-import org.apache.felix.scr.Component;
-
-public class ScrUtils {
-
-    @SuppressWarnings("unchecked")
-    public static <T> T[] emptyIfNull(Class<T> clazz, T[] objects) {
-        return objects == null ? (T[])Array.newInstance(clazz, 0) : objects;
-    }
-
-    public static String getState(int componentState) {
-        String retVal = null;
-
-        switch (componentState) {
-        case Component.STATE_ACTIVE:
-            retVal = "ACTIVE";
-            break;
-        case Component.STATE_ACTIVATING:
-            retVal = "ACTIVATING";
-            break;
-        case Component.STATE_DEACTIVATING:
-            retVal = "DEACTIVATING";
-            break;
-        case Component.STATE_DISABLED:
-            retVal = "DISABLED";
-            break;
-        case Component.STATE_DISABLING:
-            retVal = "DISABLING";
-            break;
-        case Component.STATE_DISPOSED:
-            retVal = "DISPOSED";
-            break;
-        case Component.STATE_DISPOSING:
-            retVal = "DISPOSING";
-            break;
-        case Component.STATE_ENABLING:
-            retVal = "ENABLING";
-            break;
-        case Component.STATE_FACTORY:
-            retVal = "FACTORY";
-            break;
-        case Component.STATE_REGISTERED:
-            retVal = "REGISTERED";
-            break;
-        case Component.STATE_UNSATISFIED:
-            retVal = "UNSATISFIED";
-            break;
-
-        default:
-            break;
-        }
-
-        return retVal;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/action/ActivateAction.java b/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/action/ActivateAction.java
deleted file mode 100644
index 2b9a4ed..0000000
--- a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/action/ActivateAction.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.scr.action;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.scr.Component;
-import org.apache.felix.scr.ScrService;
-import org.apache.karaf.shell.scr.ScrCommandConstants;
-import org.apache.karaf.shell.scr.ScrUtils;
-
-/**
- * Activates the given component by supplying its component name.
- */
-@Command(scope = ScrCommandConstants.SCR_COMMAND, 
-         name = ScrCommandConstants.ACTIVATE_FUNCTION, 
-         description = "Activates a Component for the given name")
-public class ActivateAction extends ScrActionSupport {
-
-    @Argument(index = 0, 
-              name = "name", 
-              description = "The name of the Component to activate ", 
-              required = true, 
-              multiValued = false)
-    String name;
-
-    @Override
-    protected Object doScrAction(ScrService scrService) throws Exception {
-        if (logger.isDebugEnabled()) {
-            logger.debug("Activate Action");
-            logger.debug("  Activating the Component: " + name);
-        }
-        Component[] components = scrService.getComponents(name);
-        for (Component component : ScrUtils.emptyIfNull(Component.class, components)) {
-            component.enable();
-        }
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/action/DeactivateAction.java b/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/action/DeactivateAction.java
deleted file mode 100644
index 2f19f3d..0000000
--- a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/action/DeactivateAction.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.scr.action;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.scr.Component;
-import org.apache.felix.scr.ScrService;
-import org.apache.karaf.shell.scr.ScrCommandConstants;
-
-/**
- * Deactivates the given component by supplying its component name.
- */
-@Command(scope = ScrCommandConstants.SCR_COMMAND, 
-         name = ScrCommandConstants.DEACTIVATE_FUNCTION, 
-         description = "Deactivates a Component for the given name")
-public class DeactivateAction extends ScrActionSupport {
-
-    @Argument(index = 0, 
-              name = "name", 
-              description = "The name of the Component to deactivate ", 
-              required = true, 
-              multiValued = false)
-    String name;
-
-    @Override
-    protected Object doScrAction(ScrService scrService) throws Exception {
-        if (logger.isDebugEnabled()) {
-            logger.debug("Deactivate Action");
-            logger.debug("  Deactivating the Component: " + name);
-        }
-        Component[] components = scrService.getComponents(name);
-        if (components != null && components.length > 0) {
-            for (int i = 0; i < components.length; i++) {
-                components[i].disable();
-            }
-        }
-        return null;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/action/DetailsAction.java b/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/action/DetailsAction.java
deleted file mode 100644
index b035f2e..0000000
--- a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/action/DetailsAction.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.scr.action;
-
-import java.util.Hashtable;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.scr.Component;
-import org.apache.felix.scr.Reference;
-import org.apache.felix.scr.ScrService;
-import org.apache.karaf.shell.scr.ScrCommandConstants;
-import org.apache.karaf.shell.scr.ScrUtils;
-import org.osgi.framework.Constants;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.component.ComponentConstants;
-
-/**
- * Displays the details associated with a given component by supplying its
- * component name.
- */
-@Command(
-         scope = ScrCommandConstants.SCR_COMMAND, 
-         name = ScrCommandConstants.DETAILS_FUNCTION, 
-         description = "Displays a list of available components")
-public class DetailsAction extends ScrActionSupport {
-
-    @Argument(index = 0, name = "name", description = "The name of the Component to display the detials of", required = true, multiValued = false)
-    String name;
-
-    @SuppressWarnings({"rawtypes"})
-    @Override
-    protected Object doScrAction(ScrService scrService) throws Exception {
-        if (logger.isDebugEnabled()) {
-            logger.debug("Executing the Details Action");
-        }
-        System.out.println(getBoldString("Component Details"));
-        Component[] components = scrService.getComponents(name);
-        for (Component component : ScrUtils.emptyIfNull(Component.class, components)) {
-            printDetail("  Name                : ", component.getName());
-            printDetail("  State               : ", ScrUtils.getState(component.getState()));
-
-            Hashtable props = (Hashtable)component.getProperties();
-            if (!props.isEmpty()) {
-                System.out.println(getBoldString("  Properties          : "));
-                for (Object key : props.keySet()) {
-                    Object value = props.get(key);
-                    printDetail("    ", key + "=" + value);
-                }
-            }
-            Reference[] references = component.getReferences();
-            System.out.println(getBoldString("References"));
-
-            for (Reference reference : ScrUtils.emptyIfNull(Reference.class, references)) {
-                printDetail("  Reference           : ", reference.getName());
-                printDetail("    State             : ", (reference.isSatisfied()) ? "satisfied" : "unsatisfied");
-                printDetail("    Multiple          : ", (reference.isMultiple() ? "multiple" : "single"));
-                printDetail("    Optional          : ", (reference.isOptional() ? "optional" : "mandatory"));
-                printDetail("    Policy            : ", (reference.isStatic() ? "static" : "dynamic"));
-
-                // list bound services
-                ServiceReference[] boundRefs = reference.getServiceReferences();
-                for (ServiceReference serviceReference : ScrUtils.emptyIfNull(ServiceReference.class, boundRefs)) {
-                    final StringBuffer b = new StringBuffer();
-                    b.append("Bound Service ID ");
-                    b.append(serviceReference.getProperty(Constants.SERVICE_ID));
-
-                    String componentName = (String)serviceReference.getProperty(ComponentConstants.COMPONENT_NAME);
-                    if (componentName == null) {
-                        componentName = (String)serviceReference.getProperty(Constants.SERVICE_PID);
-                        if (componentName == null) {
-                            componentName = (String)serviceReference.getProperty(Constants.SERVICE_DESCRIPTION);
-                        }
-                    }
-                    if (componentName != null) {
-                        b.append(" (");
-                        b.append(componentName);
-                        b.append(")");
-                    }
-                    printDetail("    Service Reference : ", b.toString());
-                }
-
-                if (ScrUtils.emptyIfNull(ServiceReference.class, boundRefs).length == 0) {
-                    printDetail("    Service Reference : ", "No Services bound");
-                }
-            }
-
-        }
-
-        return null;
-    }
-
-    private void printDetail(String header, String value) {
-        System.out.println(getBoldString(header) + value);
-    }
-
-}
diff --git a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/action/ListAction.java b/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/action/ListAction.java
deleted file mode 100644
index 3d34844..0000000
--- a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/action/ListAction.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.scr.action;
-
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.scr.Component;
-import org.apache.felix.scr.ScrService;
-import org.apache.karaf.shell.scr.ScrCommandConstants;
-import org.apache.karaf.shell.scr.ScrUtils;
-
-/**
- * Lists all the components currently installed.
- */
-@Command(scope = ScrCommandConstants.SCR_COMMAND, 
-         name = ScrCommandConstants.LIST_FUNCTION, 
-         description = "Displays a list of available components")
-public class ListAction extends ScrActionSupport {
-
-    @Override
-    protected Object doScrAction(ScrService scrService) throws Exception {
-        if (logger.isDebugEnabled()) {
-            logger.debug("Executing the List Action");
-        }
-        System.out.println(getBoldString("   ID   State             Component Name"));
-        Component[] components = scrService.getComponents();
-        for (Component component : ScrUtils.emptyIfNull(Component.class, components)) {
-            if (showHidden) {
-                // We display all because we are overridden
-                printComponent(component);
-            } else {
-                if (ScrActionSupport.isHiddenComponent(component)) {
-                    // do nothing
-                } else {
-                    // We aren't hidden so print it
-                    printComponent(component);
-                }
-            }
-        }
-        return null;
-    }
-
-    private void printComponent(Component component) {
-        String name = component.getName();
-        String id = buildLeftPadBracketDisplay(component.getId() + "", 4);
-        String state = buildRightPadBracketDisplay(ScrUtils.getState(component.getState()), 16);
-        System.out.println("[" + id + "] [" + state + "] " + name);
-    }
-
-}
diff --git a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/action/ScrActionSupport.java b/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/action/ScrActionSupport.java
deleted file mode 100644
index 39f5e97..0000000
--- a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/action/ScrActionSupport.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.scr.action;
-
-import java.util.Arrays;
-import java.util.Hashtable;
-import java.util.List;
-
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.scr.Component;
-import org.apache.felix.scr.ScrService;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.karaf.shell.console.AbstractAction;
-import org.apache.karaf.shell.console.completer.ArgumentCompleter;
-import org.apache.karaf.shell.console.jline.CommandSessionHolder;
-import org.apache.karaf.shell.scr.ScrCommandConstants;
-import org.fusesource.jansi.Ansi;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.FrameworkUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public abstract class ScrActionSupport extends AbstractAction {
-
-    @Option(name = ScrActionSupport.SHOW_ALL_OPTION, 
-            aliases = {ScrActionSupport.SHOW_ALL_ALIAS}, 
-            description = "Show all Components including the System Components (hidden by default)", 
-            required = false, 
-            multiValued = false)
-    boolean showHidden = false;
-
-    public static final String SHOW_ALL_OPTION = "-s";
-    public static final String SHOW_ALL_ALIAS = "--show-hidden";
-
-    protected final Logger logger = LoggerFactory.getLogger(getClass().getName());
-
-    private ScrService scrService;
-
-    @Override
-    protected Object doExecute() throws Exception {
-        if (scrService == null) {
-            String msg = "ScrService is unavailable";
-            System.out.println(msg);
-            logger.warn(msg);
-        } else {
-            doScrAction(scrService);
-        }
-        return null;
-    }
-
-    protected abstract Object doScrAction(ScrService scrService) throws Exception;
-
-    protected boolean isActionable(Component component) {
-        boolean answer = true;
-
-        return answer;
-    }
-
-    public static boolean showHiddenComponent(Component component) {
-        boolean answer = false;
-
-        // First look to see if the show all options is there.
-        // If it is we set showAllFlag to true so the next
-        // section will skip
-        CommandSession commandSession = CommandSessionHolder.getSession();
-        ArgumentCompleter.ArgumentList list = (ArgumentCompleter.ArgumentList)commandSession.get(ArgumentCompleter.ARGUMENTS_LIST);
-        if (list != null && list.getArguments() != null && list.getArguments().length > 0) {
-            List<String> arguments = Arrays.asList(list.getArguments());
-            if (arguments.contains(ScrActionSupport.SHOW_ALL_OPTION) || arguments.contains(ScrActionSupport.SHOW_ALL_ALIAS)) {
-                answer = true;
-            }
-        }
-
-        return answer;
-    }
-
-    @SuppressWarnings("rawtypes")
-    public static boolean isHiddenComponent(Component component) {
-        boolean answer = false;
-
-        Hashtable properties = (Hashtable)component.getProperties();
-        if (properties != null && properties.containsKey(ScrCommandConstants.HIDDEN_COMPONENT_KEY)) {
-            String value = (String)properties.get(ScrCommandConstants.HIDDEN_COMPONENT_KEY);
-            // If the value is false show the hidden
-            // then someone wants us to display the name
-            // of a hidden component
-            if (value != null && value.equals("true")) {
-                answer = true;
-            }
-        }
-
-        return answer;
-    }
-
-    public String getBoldString(String value) {
-        return Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a(value).a(Ansi.Attribute.INTENSITY_BOLD_OFF).toString();
-    }
-
-    public String buildRightPadBracketDisplay(String s, int max) {
-        return String.format("%1$-" + max + "s", s);
-    }
-
-    public String buildLeftPadBracketDisplay(String s, int max) {
-        return String.format("%1$-" + max + "s", s);
-    }
-
-    /**
-     * Get the bundleContext Object associated with this instance of
-     * ScrActionSupport.
-     * 
-     * @return the bundleContext
-     */
-    public BundleContext getBundleContext() {
-        return FrameworkUtil.getBundle(ListAction.class).getBundleContext();
-    }
-
-    /**
-     * Get the scrService Object associated with this instance of
-     * ScrActionSupport.
-     * 
-     * @return the scrService
-     */
-    public ScrService getScrService() {
-        return scrService;
-    }
-
-    /**
-     * Sets the scrService Object for this ScrActionSupport instance.
-     * 
-     * @param scrService the scrService to set
-     */
-    public void setScrService(ScrService scrService) {
-        this.scrService = scrService;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/completer/ActivateCompleter.java b/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/completer/ActivateCompleter.java
deleted file mode 100644
index 6a926e9..0000000
--- a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/completer/ActivateCompleter.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.scr.completer;
-
-import org.apache.felix.scr.Component;
-
-public class ActivateCompleter extends ScrCompleterSupport {
-
-    /**
-     * Overrides the super method noted below. See super documentation for
-     * details.
-     * 
-     * @see org.apache.karaf.scr.command.completer.ScrCompleterSupport#availableComponent(org.apache.felix.scr.Component)
-     */
-    @Override
-    public boolean availableComponent(Component component) throws Exception {
-        return (component != null && component.getState() == Component.STATE_DISABLED);
-    }
-
-}
diff --git a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/completer/DeactivateCompleter.java b/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/completer/DeactivateCompleter.java
deleted file mode 100644
index e839e2c..0000000
--- a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/completer/DeactivateCompleter.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.scr.completer;
-
-import org.apache.felix.scr.Component;
-
-public class DeactivateCompleter extends ScrCompleterSupport {
-
-    /**
-     * Overrides the super method noted below. See super documentation for
-     * details.
-     * 
-     * @see org.apache.karaf.scr.command.completer.ScrCompleterSupport#availableComponent(org.apache.felix.scr.Component)
-     */
-    @Override
-    public boolean availableComponent(Component component) throws Exception {
-        return (component != null && (component.getState() == Component.STATE_ACTIVE));
-    }
-
-}
diff --git a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/completer/DetailsCompleter.java b/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/completer/DetailsCompleter.java
deleted file mode 100644
index df6ca35..0000000
--- a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/completer/DetailsCompleter.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.scr.completer;
-
-import org.apache.felix.scr.Component;
-
-public class DetailsCompleter extends ScrCompleterSupport {
-
-    /**
-     * Overrides the super method noted below. See super documentation for
-     * details.
-     * 
-     * @see org.apache.karaf.shell.scr.completer.ScrCompleterSupport#availableComponent(org.apache.felix.scr.Component)
-     */
-    @Override
-    public boolean availableComponent(Component component) throws Exception {
-        return (component != null);
-    }
-
-}
diff --git a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/completer/ScrCompleterSupport.java b/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/completer/ScrCompleterSupport.java
deleted file mode 100644
index 5ea621f..0000000
--- a/karaf-2.3.x/shell/scr/src/main/java/org/apache/karaf/shell/scr/completer/ScrCompleterSupport.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.scr.completer;
-
-import java.util.List;
-
-import org.apache.felix.scr.Component;
-import org.apache.felix.scr.ScrService;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.apache.karaf.shell.scr.action.ScrActionSupport;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public abstract class ScrCompleterSupport implements Completer {
-
-    protected final transient Logger logger = LoggerFactory.getLogger(ScrCompleterSupport.class);
-
-    private ScrService scrService;
-
-    /**
-     * Overrides the super method noted below. See super documentation for
-     * details.
-     * 
-     * @see org.apache.karaf.shell.console.Completer#complete(java.lang.String,
-     *      int, java.util.List)
-     */
-    public int complete(String buffer, int cursor, List<String> candidates) {
-        StringsCompleter delegate = new StringsCompleter();
-        try {
-            for (Component component : scrService.getComponents()) {
-                if (logger.isDebugEnabled()) {
-                    logger.debug("Component Name to work on: " + component.getName());
-                }
-                if (ScrActionSupport.showHiddenComponent(component)) {
-                    // We display all because we are overridden
-                    if (availableComponent(component)) {
-                        delegate.getStrings().add(component.getName());
-                    }
-                } else {
-                    if (ScrActionSupport.isHiddenComponent(component)) {
-                        // do nothing
-                    } else {
-                        // We aren't hidden so print it
-                        if (availableComponent(component)) {
-                            delegate.getStrings().add(component.getName());
-                        }
-                    }
-                }
-            }
-        } catch (Exception e) {
-            logger.warn("Exception completing the command request: " + e.getLocalizedMessage());
-        }
-        return delegate.complete(buffer, cursor, candidates);
-    }
-
-    public abstract boolean availableComponent(Component component) throws Exception;
-
-    /**
-     * Get the scrService Object associated with this instance of
-     * ScrCompleterSupport.
-     * 
-     * @return the scrService
-     */
-    public ScrService getScrService() {
-        return scrService;
-    }
-
-    /**
-     * Sets the scrService Object for this ScrCompleterSupport instance.
-     * 
-     * @param scrService the scrService to set
-     */
-    public void setScrService(ScrService scrService) {
-        this.scrService = scrService;
-    }
-
-}
diff --git a/karaf-2.3.x/shell/scr/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/shell/scr/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index b518b19..0000000
--- a/karaf-2.3.x/shell/scr/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,19 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides the Karaf shell commands to manipulate DS Components.
-
-    The following commands are available:
-    \u001B[36mscr:activate\u001B[0m Activates a component for the given component name.
-    \u001B[36mscr:deactivate\u001B[0m Deactivates a component for the given component name.
-    \u001B[36mscr:details\u001B[0m Shows details for the component with the given component name.
-    \u001B[36mscr:list\u001B[0m Gets the list of the currently available components.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mCommands\u001B[0m and \u001B[36mDeclarative Services\u001B[0m sections of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/shell/ssh/NOTICE b/karaf-2.3.x/shell/ssh/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/shell/ssh/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/shell/ssh/pom.xml b/karaf-2.3.x/shell/ssh/pom.xml
deleted file mode 100644
index 8aab389..0000000
--- a/karaf-2.3.x/shell/ssh/pom.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.shell</groupId>
-        <artifactId>shell</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.shell.ssh</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Shell :: SSH</name>
-    <description>This bundle provides SSH support to the Karaf console.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.servicemix.bundles</groupId>
-            <artifactId>org.apache.servicemix.bundles.junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.sshd</groupId>
-            <artifactId>sshd-core</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            org.apache.felix.service.command,
-                            org.apache.felix.gogo.commands,
-                            org.apache.karaf.shell.console,
-                            org.apache.sshd.server.keyprovider,
-                            org.apache.sshd.server.jaas,
-                            *
-                        </Import-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafAgentFactory.java b/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafAgentFactory.java
deleted file mode 100644
index e814000..0000000
--- a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafAgentFactory.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.ssh;
-
-import java.io.IOException;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.apache.sshd.agent.SshAgent;
-import org.apache.sshd.agent.SshAgentFactory;
-import org.apache.sshd.agent.SshAgentServer;
-import org.apache.sshd.agent.common.AgentDelegate;
-import org.apache.sshd.agent.local.AgentServerProxy;
-import org.apache.sshd.agent.local.ChannelAgentForwarding;
-import org.apache.sshd.common.Channel;
-import org.apache.sshd.common.NamedFactory;
-import org.apache.sshd.common.Session;
-import org.apache.sshd.server.session.ServerSession;
-
-public class KarafAgentFactory implements SshAgentFactory {
-
-    private final Map<String, AgentServerProxy> proxies = new ConcurrentHashMap<String, AgentServerProxy>();
-    private final Map<String, SshAgent> locals = new ConcurrentHashMap<String, SshAgent>();
-
-    public NamedFactory<Channel> getChannelForwardingFactory() {
-        return new ChannelAgentForwarding.Factory();
-    }
-
-    public SshAgent createClient(Session session) throws IOException {
-        String proxyId = session.getFactoryManager().getProperties().get(SshAgent.SSH_AUTHSOCKET_ENV_NAME);
-        if (proxyId == null) {
-            throw new IllegalStateException("No " + SshAgent.SSH_AUTHSOCKET_ENV_NAME + " environment variable set");
-        }
-        AgentServerProxy proxy = proxies.get(proxyId);
-        if (proxy != null) {
-            return proxy.createClient();
-        }
-        SshAgent agent = locals.get(proxyId);
-        if (agent != null) {
-            return new AgentDelegate(agent);
-        }
-        throw new IllegalStateException("No ssh agent found");
-    }
-
-    public SshAgentServer createServer(Session session) throws IOException {
-        if (!(session instanceof ServerSession)) {
-            throw new IllegalStateException("The session used to create an agent server proxy must be a server session");
-        }
-        final AgentServerProxy proxy = new AgentServerProxy((ServerSession) session);
-        proxies.put(proxy.getId(), proxy);
-        return new SshAgentServer() {
-            public String getId() {
-                return proxy.getId();
-            }
-            public void close() {
-                proxies.remove(proxy.getId());
-                proxy.close();
-            }
-        };
-    }
-
-    public void registerAgent(SshAgent agent, Map<String, ?> properties) {
-        if (agent != null) {
-            Object id = properties.get("id");
-            if (id == null) {
-                throw new IllegalStateException("Local agent can't be registered with no 'id' property");
-            }
-            locals.put(id.toString(), agent);
-        }
-    }
-
-    public void unregisterAgent(SshAgent agent, Map<String, ?> properties) {
-        if (agent != null) {
-            Object id = properties.get("id");
-            if (id == null) {
-                throw new IllegalStateException("Local agent can't be unregistered with no 'id' property");
-            }
-            locals.remove(id.toString());
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemFactory.java b/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemFactory.java
deleted file mode 100644
index d728ec5..0000000
--- a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemFactory.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.ssh;
-
-import org.apache.sshd.common.Session;
-import org.apache.sshd.server.FileSystemFactory;
-import org.apache.sshd.server.FileSystemView;
-
-/**
- * SSHd file system factory to reduce the visibility to the KARAF_BASE.
- */
-public class KarafFileSystemFactory implements FileSystemFactory {
-
-    public FileSystemView createFileSystemView(Session session) {
-        return new KarafFileSystemView();
-    }
-
-}
diff --git a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemView.java b/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemView.java
deleted file mode 100644
index 33b64fe..0000000
--- a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemView.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.ssh;
-
-import org.apache.sshd.server.FileSystemView;
-import org.apache.sshd.server.SshFile;
-import org.apache.sshd.server.filesystem.NativeSshFile;
-
-import java.io.File;
-
-/**
- * Karaf file system view reduced to the KARAF_BASE location
- */
-public class KarafFileSystemView implements FileSystemView {
-
-    private String location;
-
-    public KarafFileSystemView() {
-        location = System.getProperty("karaf.base");
-    }
-
-    public SshFile getFile(String file) {
-        return getFile(location, file);
-    }
-
-    public SshFile getFile(SshFile baseDir, String file) {
-        return getFile(baseDir.getAbsolutePath(), file);
-    }
-
-    protected SshFile getFile(String dir, String file) {
-        // get actual file object
-        String physicalName = NativeSshFile.getPhysicalName("/", dir, file, false);
-
-        if (!physicalName.startsWith(location)) {
-            throw new IllegalArgumentException("The path is not relative to KARAF_BASE. For security reason, it's not allowed.");
-        }
-
-        File fileObj = new File(physicalName);
-
-        // strip the root directory and return
-        String karafFileName = physicalName.substring("/".length() - 1);
-        return new KarafSshFile(karafFileName, fileObj);
-    }
-
-}
diff --git a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafJaasAuthenticator.java b/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafJaasAuthenticator.java
deleted file mode 100644
index 50eb5d1..0000000
--- a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafJaasAuthenticator.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.ssh;
-
-import java.io.IOException;
-import java.security.Principal;
-import java.security.PublicKey;
-
-import javax.security.auth.Subject;
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.NameCallback;
-import javax.security.auth.callback.PasswordCallback;
-import javax.security.auth.callback.UnsupportedCallbackException;
-import javax.security.auth.login.FailedLoginException;
-import javax.security.auth.login.LoginContext;
-
-import org.apache.karaf.jaas.modules.publickey.PublickeyCallback;
-import org.apache.sshd.common.Session;
-import org.apache.sshd.server.PasswordAuthenticator;
-import org.apache.sshd.server.PublickeyAuthenticator;
-import org.apache.sshd.server.session.ServerSession;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class KarafJaasAuthenticator implements PasswordAuthenticator, PublickeyAuthenticator {
-
-    public static final Session.AttributeKey<Subject> SUBJECT_ATTRIBUTE_KEY = new Session.AttributeKey<Subject>();
-    private final Logger LOGGER = LoggerFactory.getLogger(KarafJaasAuthenticator.class);
-
-    private String realm;
-    private String role;
-
-    public String getRealm() {
-        return realm;
-    }
-
-    public void setRealm(String realm) {
-        this.realm = realm;
-    }
-
-    public String getRole() {
-        return role;
-    }
-
-    public void setRole(String role) {
-        this.role = role;
-    }
-
-    public boolean authenticate(final String username, final String password, final ServerSession session) {
-        try {
-            Subject subject = new Subject();
-            LoginContext loginContext = new LoginContext(realm, subject, new CallbackHandler() {
-                public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
-                    for (Callback callback : callbacks) {
-                        if (callback instanceof NameCallback) {
-                            ((NameCallback) callback).setName(username);
-                        } else if (callback instanceof PasswordCallback) {
-                            ((PasswordCallback) callback).setPassword(password.toCharArray());
-                        } else {
-                            throw new UnsupportedCallbackException(callback);
-                        }
-                    }
-                }
-            });
-            loginContext.login();
-            if (role != null && role.length() > 0) {
-                String clazz = "org.apache.karaf.jaas.boot.principal.RolePrincipal";
-                String name = role;
-                int idx = role.indexOf(':');
-                if (idx > 0) {
-                    clazz = role.substring(0, idx);
-                    name = role.substring(idx + 1);
-                }
-                boolean found = false;
-                for (Principal p : subject.getPrincipals()) {
-                    if (p.getClass().getName().equals(clazz)
-                            && p.getName().equals(name)) {
-                        found = true;
-                        break;
-                    }
-                }
-                if (!found) {
-                    throw new FailedLoginException("User does not have the required role " + role);
-                }
-            }
-            session.setAttribute(SUBJECT_ATTRIBUTE_KEY, subject);
-            return true;
-        } catch (Exception e) {
-            LOGGER.debug("User authentication failed with " + e.getMessage(), e);
-            return false;
-        }
-    }
-
-    public boolean authenticate(final String username, final PublicKey key, final ServerSession session) {
-        try {
-            Subject subject = new Subject();
-            LoginContext loginContext = new LoginContext(realm, subject, new CallbackHandler() {
-                public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
-                    for (Callback callback : callbacks) {
-                        if (callback instanceof NameCallback) {
-                            ((NameCallback) callback).setName(username);
-                        } else if (callback instanceof PublickeyCallback) {
-                            ((PublickeyCallback) callback).setPublicKey(key);
-                        } else {
-                            throw new UnsupportedCallbackException(callback);
-                        }
-                    }
-                }
-            });
-            loginContext.login();
-            if (role != null && role.length() > 0) {
-                String clazz = "org.apache.karaf.jaas.boot.principal.RolePrincipal";
-                String name = role;
-                int idx = role.indexOf(':');
-                if (idx > 0) {
-                    clazz = role.substring(0, idx);
-                    name = role.substring(idx + 1);
-                }
-                boolean found = false;
-                for (Principal p : subject.getPrincipals()) {
-                    if (p.getClass().getName().equals(clazz)
-                            && p.getName().equals(name)) {
-                        found = true;
-                        break;
-                    }
-                }
-                if (!found) {
-                    throw new FailedLoginException("User does not have the required role " + role);
-                }
-            }
-            session.setAttribute(SUBJECT_ATTRIBUTE_KEY, subject);
-            return true;
-        } catch (Exception e) {
-            LOGGER.debug("User authentication failed with " + e.getMessage(), e);
-            return false;
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafSshFile.java b/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafSshFile.java
deleted file mode 100644
index fed7c91..0000000
--- a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafSshFile.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.ssh;
-
-import org.apache.sshd.server.filesystem.NativeSshFile;
-
-import java.io.File;
-
-/**
- * Karaf ssh file support.
- */
-public class KarafSshFile extends NativeSshFile {
-
-    /**
-     * Constructor, internal do not use directly.
-     */
-    public KarafSshFile(String fileName, final File file) {
-        super(fileName, file, null);
-    }
-
-}
\ No newline at end of file
diff --git a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellCommandFactory.java b/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellCommandFactory.java
deleted file mode 100644
index 2790731..0000000
--- a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellCommandFactory.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.ssh;
-
-import java.io.*;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import java.util.Map;
-import javax.security.auth.Subject;
-
-import org.apache.felix.gogo.commands.CommandException;
-import org.apache.felix.gogo.runtime.CommandNotFoundException;
-import org.apache.felix.service.command.CommandProcessor;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.felix.service.command.Converter;
-import org.apache.karaf.shell.console.jline.Console;
-import org.apache.sshd.server.Command;
-import org.apache.sshd.server.CommandFactory;
-import org.apache.sshd.server.Environment;
-import org.apache.sshd.server.ExitCallback;
-import org.apache.sshd.server.SessionAware;
-import org.apache.sshd.server.session.ServerSession;
-import org.fusesource.jansi.Ansi;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ShellCommandFactory implements CommandFactory {
-
-    public static final String SHELL_INIT_SCRIPT = "karaf.shell.init.script";
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(ShellCommandFactory.class);
-
-    private CommandProcessor commandProcessor;
-
-    public void setCommandProcessor(CommandProcessor commandProcessor) {
-        this.commandProcessor = commandProcessor;
-    }
-
-    public Command createCommand(String command) {
-        return new ShellCommand(command);
-    }
-
-    public class ShellCommand implements Command, SessionAware {
-
-        private String command;
-        private InputStream in;
-        private OutputStream out;
-        private OutputStream err;
-        private ExitCallback callback;
-        private ServerSession session;
-
-        public ShellCommand(String command) {
-            this.command = command;
-        }
-
-        public void setInputStream(InputStream in) {
-            this.in = in;
-        }
-
-        public void setOutputStream(OutputStream out) {
-            this.out = out;
-        }
-
-        public void setErrorStream(OutputStream err) {
-            this.err = err;
-        }
-
-        public void setExitCallback(ExitCallback callback) {
-            this.callback = callback;
-        }
-
-        public void setSession(ServerSession session) {
-            this.session = session;
-        }
-
-        public void start(final Environment env) throws IOException {
-            try {
-                final CommandSession session = commandProcessor.createSession(in, new PrintStream(out), new PrintStream(err));
-                session.put("SCOPE", "shell:osgi:*");
-                session.put("APPLICATION", System.getProperty("karaf.name", "root"));
-                for (Map.Entry<String,String> e : env.getEnv().entrySet()) {
-                    session.put(e.getKey(), e.getValue());
-                }
-                try {
-                    Subject subject = this.session != null ? this.session.getAttribute(KarafJaasAuthenticator.SUBJECT_ATTRIBUTE_KEY) : null;
-                    Object result;
-                    if (subject != null) {
-                        try {
-                            String scriptFileName = System.getProperty(SHELL_INIT_SCRIPT);
-                            executeScript(scriptFileName, session);
-                            result = Subject.doAs(subject, new PrivilegedExceptionAction<Object>() {
-                                public Object run() throws Exception {
-                                    return session.execute(command);
-                                }
-                            });
-                        } catch (PrivilegedActionException e) {
-                            throw e.getException();
-                        }
-                    } else {
-                        String scriptFileName = System.getProperty(SHELL_INIT_SCRIPT);
-                        executeScript(scriptFileName, session);
-                        result = session.execute(command);
-                    }
-                    if (result != null)
-                    {
-                        session.getConsole().println(session.format(result, Converter.INSPECT));
-                    }
-                } catch (Throwable t) {
-                    try {
-                        if (t instanceof CommandNotFoundException) {
-                            LOGGER.debug("Unknown command entered", t);
-                        } else {
-                            LOGGER.info("Exception caught while executing command", t);
-                        }
-                        session.put(Console.LAST_EXCEPTION, t);
-                        if (t instanceof CommandException) {
-                            session.getConsole().println(((CommandException) t).getNiceHelp());
-                        } else if (t instanceof CommandNotFoundException) {
-                            String str = Ansi.ansi()
-                                    .fg(Ansi.Color.RED)
-                                    .a("Command not found: ")
-                                    .a(Ansi.Attribute.INTENSITY_BOLD)
-                                    .a(((CommandNotFoundException) t).getCommand())
-                                    .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
-                                    .fg(Ansi.Color.DEFAULT).toString();
-                            session.getConsole().println(str);
-                        }
-                        if ( getBoolean(session, Console.PRINT_STACK_TRACES)) {
-                            session.getConsole().print(Ansi.ansi().fg(Ansi.Color.RED).toString());
-                            t.printStackTrace(session.getConsole());
-                            session.getConsole().print(Ansi.ansi().fg(Ansi.Color.DEFAULT).toString());
-                        }
-                        else if (!(t instanceof CommandException) && !(t instanceof CommandNotFoundException)) {
-                            session.getConsole().print(Ansi.ansi().fg(Ansi.Color.RED).toString());
-                            session.getConsole().println("Error executing command: "
-                                    + (t.getMessage() != null ? t.getMessage() : t.getClass().getName()));
-                            session.getConsole().print(Ansi.ansi().fg(Ansi.Color.DEFAULT).toString());
-                        }
-                        session.getConsole().flush();
-                    } catch (Exception ignore) {
-                        // ignore
-                    }
-                }
-            } catch (Exception e) {
-                throw (IOException) new IOException("Unable to start shell").initCause(e);
-            } finally {
-                close(in, out, err);
-                callback.onExit(0);
-            }
-        }
-
-        public void destroy() {
-		}
-
-        protected boolean getBoolean(CommandSession session, String name) {
-            Object s = session.get(name);
-            if (s == null) {
-                s = System.getProperty(name);
-            }
-            if (s == null) {
-                return false;
-            }
-            if (s instanceof Boolean) {
-                return (Boolean) s;
-            }
-            return Boolean.parseBoolean(s.toString());
-        }
-
-    }
-
-    private static void close(Closeable... closeables) {
-        for (Closeable c : closeables) {
-            try {
-                c.close();
-            } catch (IOException e) {
-                // Ignore
-            }
-        }
-    }
-
-    private void executeScript(String scriptFileName, CommandSession session) {
-        if (scriptFileName != null) {
-            Reader r = null;
-            try {
-                File scriptFile = new File(scriptFileName);
-                r = new InputStreamReader(new FileInputStream(scriptFile));
-                CharArrayWriter w = new CharArrayWriter();
-                int n;
-                char[] buf = new char[8192];
-                while ((n = r.read(buf)) > 0) {
-                    w.write(buf, 0, n);
-                }
-                session.execute(new String(w.toCharArray()));
-            } catch (Exception e) {
-                LOGGER.debug("Error in initialization script", e);
-            } finally {
-                if (r != null) {
-                    try {
-                        r.close();
-                    } catch (IOException e) {
-                        // Ignore
-                    }
-                }
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellFactoryImpl.java b/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellFactoryImpl.java
deleted file mode 100644
index 8a274fa..0000000
--- a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellFactoryImpl.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.ssh;
-
-import java.io.Closeable;
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PrintStream;
-import java.security.PrivilegedAction;
-import java.util.List;
-import java.util.Map;
-import javax.security.auth.Subject;
-
-import jline.Terminal;
-import org.apache.felix.service.command.CommandProcessor;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.felix.service.command.Function;
-import org.apache.karaf.shell.console.jline.Console;
-import org.apache.sshd.common.Factory;
-import org.apache.sshd.server.Command;
-import org.apache.sshd.server.Environment;
-import org.apache.sshd.server.ExitCallback;
-import org.apache.sshd.server.SessionAware;
-import org.apache.sshd.server.session.ServerSession;
-import org.osgi.service.blueprint.container.ReifiedType;
-
-/**
- * SSHD {@link org.apache.sshd.server.Command} factory which provides access to Shell.
- */
-public class ShellFactoryImpl implements Factory<Command> {
-
-    private CommandProcessor commandProcessor;
-
-    public void setCommandProcessor(CommandProcessor commandProcessor) {
-        this.commandProcessor = commandProcessor;
-    }
-
-    public Command create() {
-        return new ShellImpl();
-    }
-
-    public class ShellImpl implements Command, SessionAware
-    {
-        private InputStream in;
-
-        private OutputStream out;
-
-        private OutputStream err;
-
-        private ExitCallback callback;
-
-        private ServerSession session;
-
-        private boolean closed;
-
-        public void setInputStream(final InputStream in) {
-            this.in = in;
-        }
-
-        public void setOutputStream(final OutputStream out) {
-            this.out = out;
-        }
-
-        public void setErrorStream(final OutputStream err) {
-            this.err = err;
-        }
-
-        public void setExitCallback(ExitCallback callback) {
-            this.callback = callback;
-        }
-
-        public void setSession(ServerSession session) {
-            this.session = session;
-        }
-
-        public void start(final Environment env) throws IOException {
-            try {
-                final Terminal terminal = new SshTerminal(env);
-                String encoding = env.getEnv().get("LC_CTYPE");
-                if (encoding != null && encoding.indexOf('.') > 0) {
-                    encoding = encoding.substring(encoding.indexOf('.') + 1);
-                }
-                Console console = new Console(commandProcessor,
-                                              in,
-                                              new PrintStream(new LfToCrLfFilterOutputStream(out), true),
-                                              new PrintStream(new LfToCrLfFilterOutputStream(err), true),
-                                              terminal,
-                                              encoding,
-                                              new Runnable() {
-                                                  public void run() {
-                                                      destroy();
-                                                  }
-                                              });
-                final CommandSession session = console.getSession();
-                session.put("APPLICATION", System.getProperty("karaf.name", "root"));
-                for (Map.Entry<String,String> e : env.getEnv().entrySet()) {
-                    session.put(e.getKey(), e.getValue());
-                }
-                session.put("#LINES", new Function() {
-                    public Object execute(CommandSession session, List<Object> arguments) throws Exception {
-                        return Integer.toString(terminal.getHeight());
-                    }
-                });
-                session.put("#COLUMNS", new Function() {
-                    public Object execute(CommandSession session, List<Object> arguments) throws Exception {
-                        return Integer.toString(terminal.getWidth());
-                    }
-                });
-                session.put(".jline.terminal", terminal);
-                new Thread(console) {
-                    @Override
-                    public void run() {
-                        Subject subject = ShellImpl.this.session != null ? ShellImpl.this.session.getAttribute(KarafJaasAuthenticator.SUBJECT_ATTRIBUTE_KEY) : null;
-                        if (subject != null) {
-                            Subject.doAs(subject, new PrivilegedAction<Object>() {
-                                public Object run() {
-                                    doRun();
-                                    return null;
-                                }
-                            });
-                        } else {
-                            doRun();
-                        }
-                    }
-                    protected void doRun() {
-                        super.run();
-                    }
-                }.start();
-            } catch (Exception e) {
-                throw (IOException) new IOException("Unable to start shell").initCause(e);
-            }
-        }
-
-        public void destroy() {
-            if (!closed) {
-                closed = true;
-                ShellFactoryImpl.flush(out, err);
-                ShellFactoryImpl.close(in, out, err);
-                callback.onExit(0);
-            }
-        }
-
-    }
-
-    private static void flush(OutputStream... streams) {
-        for (OutputStream s : streams) {
-            try {
-                s.flush();
-            } catch (IOException e) {
-                // Ignore
-            }
-        }
-    }
-
-    private static void close(Closeable... closeables) {
-        for (Closeable c : closeables) {
-            try {
-                c.close();
-            } catch (IOException e) {
-                // Ignore
-            }
-        }
-    }
-
-    public static Converter getConverter() {
-        return new Converter();
-    }
-
-    public static class Converter implements org.osgi.service.blueprint.container.Converter {
-
-        public boolean canConvert(Object sourceObject, ReifiedType targetType) {
-            return ShellFactoryImpl.class.isAssignableFrom(sourceObject.getClass())
-                    && Factory.class.equals(targetType.getRawClass())
-                    && Command.class.equals(targetType.getActualTypeArgument(0).getRawClass());
-        }
-
-        public Object convert(Object sourceObject, ReifiedType targetType) throws Exception {
-            return sourceObject;
-        }
-    }
-
-    // TODO: remove this class when sshd use lf->crlf conversion by default
-    public class LfToCrLfFilterOutputStream extends FilterOutputStream {
-
-        private boolean lastWasCr;
-
-        public LfToCrLfFilterOutputStream(OutputStream out) {
-            super(out);
-        }
-
-        @Override
-        public void write(int b) throws IOException {
-            if (!lastWasCr && b == '\n') {
-                out.write('\r');
-                out.write('\n');
-            } else {
-                out.write(b);
-            }
-            lastWasCr = b == '\r';
-        }
-
-    }
-
-
-}
diff --git a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java b/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java
deleted file mode 100644
index aedd3fd..0000000
--- a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.ssh;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.util.List;
-
-import jline.Terminal;
-
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.karaf.shell.console.BlueprintContainerAware;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.karaf.shell.console.jline.Console;
-import org.apache.sshd.ClientChannel;
-import org.apache.sshd.ClientSession;
-import org.apache.sshd.SshClient;
-import org.apache.sshd.agent.SshAgent;
-import org.apache.sshd.client.channel.ChannelShell;
-import org.apache.sshd.client.future.ConnectFuture;
-import org.apache.sshd.common.util.NoCloseInputStream;
-import org.apache.sshd.common.util.NoCloseOutputStream;
-import org.osgi.service.blueprint.container.BlueprintContainer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Connect to a SSH server.
- */
-@Command(scope = "ssh", name = "ssh", description = "Connects to a remote SSH server")
-public class SshAction extends OsgiCommandSupport implements BlueprintContainerAware {
-    private final Logger log = LoggerFactory.getLogger(getClass());
-
-    @Option(name="-l", aliases={"--username"}, description = "The user name for remote login", required = false, multiValued = false)
-    private String username;
-
-    @Option(name="-p", aliases={"--port"}, description = "The port to use for SSH connection", required = false, multiValued = false)
-    private int port = 22;
-
-    @Argument(index = 0, name = "hostname", description = "The host name to connect to via SSH", required = true, multiValued = false)
-    private String hostname;
-
-    @Argument(index = 1, name = "command", description = "Optional command to execute", required = false, multiValued = true)
-    private List<String> command;
-
-    private BlueprintContainer container;
-
-	private ClientSession sshSession;
-    private String sshClientId;
-
-    public void setBlueprintContainer(final BlueprintContainer container) {
-        assert container != null;
-        this.container = container;
-    }
-
-    public void setSshClientId(String sshClientId) {
-        this.sshClientId = sshClientId;
-    }
-
-    @Override
-    protected Object doExecute() throws Exception {
-
-        if (hostname.indexOf('@') >= 0) {
-            if (username == null) {
-                username = hostname.substring(0, hostname.indexOf('@'));
-            }
-            hostname = hostname.substring(hostname.indexOf('@') + 1, hostname.length());
-        }
-
-        System.out.println("Connecting to host " + hostname + " on port " + port);
-
-        // If not specified, assume the current user name
-        if (username == null) {
-            username = (String) this.session.get("USER");
-        }
-        // If the username was not configured via cli, then prompt the user for the values
-        if (username == null) {
-            log.debug("Prompting user for login");
-            if (username == null) {
-                username = readLine("Login: ");
-            }
-        }
-
-        // Create the client from prototype
-        SshClient client = (SshClient) container.getComponentInstance(sshClientId);
-        log.debug("Created client: {}", client);
-        client.start();
-
-        String agentSocket = null;
-        if (this.session.get(SshAgent.SSH_AUTHSOCKET_ENV_NAME) != null) {
-            agentSocket = this.session.get(SshAgent.SSH_AUTHSOCKET_ENV_NAME).toString();
-            client.getProperties().put(SshAgent.SSH_AUTHSOCKET_ENV_NAME,agentSocket);
-        }
-
-        try {
-            ConnectFuture future = client.connect(hostname, port);
-            future.await();
-            sshSession = future.getSession();
-
-            Object oldIgnoreInterrupts = this.session.get(Console.IGNORE_INTERRUPTS);
-            this.session.put( Console.IGNORE_INTERRUPTS, Boolean.TRUE );
-
-            try {
-                System.out.println("Connected");
-
-                boolean authed = false;
-                if (agentSocket != null) {
-                    sshSession.authAgent(username);
-                    int ret = sshSession.waitFor(ClientSession.WAIT_AUTH | ClientSession.CLOSED | ClientSession.AUTHED, 0);
-                    if ((ret & ClientSession.AUTHED) == 0) {
-                        System.err.println("Agent authentication failed, falling back to password authentication.");
-                    } else {
-                        authed = true;
-                    }
-                }
-                if (!authed) {
-                    log.debug("Prompting user for password");
-                    String password = readLine("Password: ");
-                    sshSession.authPassword(username, password);
-                    int ret = sshSession.waitFor(ClientSession.WAIT_AUTH | ClientSession.CLOSED | ClientSession.AUTHED, 0);
-                    if ((ret & ClientSession.AUTHED) == 0) {
-                        System.err.println("Password authentication failed");
-                    } else {
-                        authed = true;
-                    }
-                }
-                if (!authed) {
-                    return null;
-                }
-
-                StringBuilder sb = new StringBuilder();
-                if (command != null) {
-                    for (String cmd : command) {
-                        if (sb.length() > 0) {
-                            sb.append(' ');
-                        }
-                        sb.append(cmd);
-                    }
-                }
-
-                ClientChannel channel;
-                if (sb.length() > 0) {
-                    channel = sshSession.createChannel("exec", sb.append("\n").toString());
-                    channel.setIn(new ByteArrayInputStream(new byte[0]));
-                } else {
-                    channel = sshSession.createChannel("shell");
-                    channel.setIn(new NoCloseInputStream(System.in));
-                    ((ChannelShell) channel).setPtyColumns(getTermWidth());
-                    ((ChannelShell) channel).setupSensibleDefaultPty();
-                    ((ChannelShell) channel).setAgentForwarding(true);
-                    Object ctype = session.get("LC_CTYPE");
-                    if (ctype != null) {
-                        ((ChannelShell) channel).setEnv("LC_CTYPE", ctype.toString());
-                    }
-                }
-                channel.setOut(new NoCloseOutputStream(System.out));
-                channel.setErr(new NoCloseOutputStream(System.err));
-                channel.open();
-                channel.waitFor(ClientChannel.CLOSED, 0);
-            } finally {
-                session.put(Console.IGNORE_INTERRUPTS, oldIgnoreInterrupts);
-                sshSession.close(false);
-            }
-        } finally {
-            client.stop();
-        }
-
-        return null;
-    }
-
-    private int getTermWidth() {
-        Terminal term = (Terminal) session.get(".jline.terminal");
-        return term != null ? term.getWidth() : 80;
-    }
-
-    public String readLine(String msg) throws IOException {
-        StringBuffer sb = new StringBuffer();
-        System.err.print(msg);
-        System.err.flush();
-        for (;;) {
-            int c = super.session.getKeyboard().read();
-            if (c < 0) {
-                return null;
-            }
-            System.err.print((char) c);
-            if (c == '\r' || c == '\n') {
-                break;
-            }
-            sb.append((char) c);
-        }
-        return sb.toString();
-    }
-
-}
diff --git a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshServerAction.java b/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshServerAction.java
deleted file mode 100644
index fab86f9..0000000
--- a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshServerAction.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.ssh;
-
-import org.apache.sshd.SshServer;
-import org.apache.karaf.shell.console.BlueprintContainerAware;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.gogo.commands.Command;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.osgi.service.blueprint.container.BlueprintContainer;
-
-/**
- * Start a SSH server.
- */
-@Command(scope = "ssh", name = "sshd", description = "Creates a SSH server")
-public class SshServerAction extends OsgiCommandSupport implements BlueprintContainerAware {
-
-    private final Logger log = LoggerFactory.getLogger(getClass());
-
-    @Option(name = "-p", aliases = { "--port" }, description = "The port to setup the SSH server (Default: 8101)", required = false, multiValued = false)
-    private int port = 8101;
-
-    @Option(name = "-b", aliases = { "--background"}, description = "The service will run in the background (Default: true)", required = false, multiValued = false)
-    private boolean background = true;
-
-    @Option(name = "-i", aliases = { "--idle-timeout" }, description = "The session idle timeout (Default: 1800000ms)", required = false, multiValued = false)
-    private long idleTimeout = 1800000;
-
-    private BlueprintContainer container;
-
-    private String sshServerId;
-
-    public void setBlueprintContainer(final BlueprintContainer container) {
-        assert container != null;
-        this.container = container;
-    }
-
-    public void setSshServerId(String sshServerId) {
-        this.sshServerId = sshServerId;
-    }
-
-    protected Object doExecute() throws Exception {
-        SshServer server = (SshServer) container.getComponentInstance(sshServerId);
-
-        log.debug("Created server: {}", server);
-
-        // port number
-        server.setPort(port);
-
-        // idle timeout
-        server.getProperties().put(SshServer.IDLE_TIMEOUT, new Long(idleTimeout).toString());
-
-        // starting the SSHd server
-        server.start();
-
-        System.out.println("SSH server listening on port " + port + " (idle timeout " + idleTimeout + "ms)");
-
-        if (!background) {
-            synchronized (this) {
-                log.debug("Waiting for server to shutdown");
-
-                wait();
-            }
-
-            server.stop();
-        }
-
-        return null;
-    }
-}
diff --git a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshServerFactory.java b/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshServerFactory.java
deleted file mode 100644
index 4789669..0000000
--- a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshServerFactory.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.ssh;
-
-import org.apache.sshd.SshServer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class SshServerFactory {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(SshServerFactory.class);
-
-    private long idleTimeout;
-    private boolean start;
-
-    private SshServer server;
-
-    public SshServerFactory(SshServer server) {
-        this.server = server;
-    }
-
-    public boolean isStart() {
-        return start;
-    }
-
-    public void setStart(boolean start) {
-        this.start = start;
-    }
-
-    public long getIdleTimeout() {
-        return idleTimeout;
-    }
-
-    public void setIdleTimeout(long idleTimeout) {
-        this.idleTimeout = idleTimeout;
-    }
-
-    public void start() {
-        if (start) {
-            try {
-                server.getProperties().put(SshServer.IDLE_TIMEOUT, new Long(idleTimeout).toString());
-                server.start();
-            } catch (Exception e) {
-                LOGGER.info("Error updating SSH server", e);
-            }
-        }
-    }
-
-    public void stop() {
-        if (start && server != null) {
-            try {
-                server.stop();
-            } catch (Exception e) {
-                LOGGER.info("Error stopping SSH server", e);
-            } finally {
-                server = null;
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshTerminal.java b/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshTerminal.java
deleted file mode 100644
index 5a3aad1..0000000
--- a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshTerminal.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.ssh;
-
-import jline.TerminalSupport;
-import org.apache.sshd.server.Environment;
-
-public class SshTerminal extends TerminalSupport {
-
-    private Environment environment;
-
-    public SshTerminal(Environment environment) {
-        super(true);
-        setAnsiSupported(true);
-        this.environment = environment;
-    }
-
-    public void init() throws Exception {
-    }
-
-    public void restore() throws Exception {
-    }
-
-    @Override
-    public int getWidth() {
-        int width = 0;
-        try {
-            width = Integer.valueOf(this.environment.getEnv().get(Environment.ENV_COLUMNS));
-        } catch (Throwable t) {
-            // Ignore
-        }
-        return width > 0 ? width : super.getWidth();
-    }
-
-    @Override
-    public int getHeight() {
-        int height = 0;
-        try {
-            height = Integer.valueOf(this.environment.getEnv().get(Environment.ENV_LINES));
-        } catch (Throwable t) {
-            // Ignore
-        }
-        return height > 0 ? height : super.getHeight();
-    }
-
-}
diff --git a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/UserAuthFactoriesFactory.java b/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/UserAuthFactoriesFactory.java
deleted file mode 100644
index 17fea15..0000000
--- a/karaf-2.3.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/UserAuthFactoriesFactory.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.ssh;
-
-import org.apache.sshd.common.NamedFactory;
-import org.apache.sshd.server.UserAuth;
-import org.apache.sshd.server.auth.UserAuthPassword;
-import org.apache.sshd.server.auth.UserAuthPublicKey;
-import org.osgi.service.blueprint.container.ComponentDefinitionException;
-import org.osgi.service.blueprint.container.Converter;
-import org.osgi.service.blueprint.container.ReifiedType;
-
-import java.lang.reflect.ParameterizedType;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * <p>A factory for user authentication factories to set on
- * {@link SshServer#setUserAuthFactories(java.util.List)} based on a
- * comma-separated list of authentication methods.</p>
- *
- * <p>Currently, the following methods are supported:</p>
- * <ul>
- *     <li><code>password</code>
- *          Password authentication against a given JAAS domain.</p></li>
- *     <li><code>publickey</code>
- *          Public key authentication against an OpenSSH <code>authorized_keys</code> file.</p></li>
- * </ul>
- * </p>
- */
-public class UserAuthFactoriesFactory {
-
-    public static final String PASSWORD_METHOD = "password";
-    public static final String PUBLICKEY_METHOD = "publickey";
-
-    private Set<String> methodSet;
-    private List<NamedFactory<UserAuth>> factories;
-
-    public static Converter getConverter() {
-        return new Converter();
-    }
-
-    /**
-     * This blueprint type converter silently converts instances of
-     * <code>Class X implements NameFactory</code>
-     * to the reified type <code>cNameFactory</code>
-     * and therefore helps blueprint to set the returned factories on
-     * {@link SshServerAction#setUserAuthFactories(List)} without complaining
-     * about type conversion errors.
-     */
-    public static class Converter implements org.osgi.service.blueprint.container.Converter {
-
-        public boolean canConvert(Object sourceObject, ReifiedType targetType) {
-            return NamedFactory.class.isAssignableFrom(sourceObject.getClass())
-                    && UserAuth.class.equals(((ParameterizedType) sourceObject.getClass().getGenericInterfaces()[0]).getActualTypeArguments()[0])
-                    && NamedFactory.class.equals(targetType.getRawClass())
-                    && UserAuth.class.equals(targetType.getActualTypeArgument(0).getRawClass());
-        }
-
-        public Object convert(Object sourceObject, ReifiedType targetType) throws Exception {
-            return sourceObject;
-        }
-
-    }
-
-    public void setAuthMethods(String methods) {
-        this.methodSet = new HashSet<String>();
-        this.factories = new ArrayList<NamedFactory<UserAuth>>();
-        String[] ams = methods.split(",");
-        for (String am : ams) {
-            if (PASSWORD_METHOD.equals(am)) {
-                this.factories.add(new UserAuthPassword.Factory());
-            } else if (PUBLICKEY_METHOD.equals(am)) {
-                this.factories.add(new UserAuthPublicKey.Factory());
-            } else {
-                throw new ComponentDefinitionException("Invalid authentication method " + am + " specified");
-            }
-            this.methodSet.add(am);
-        }
-    }
-
-    public List<NamedFactory<UserAuth>> getFactories() {
-        return factories;
-    }
-
-    public boolean isPublickeyEnabled() {
-        return this.methodSet.contains(PUBLICKEY_METHOD);
-    }
-
-    public boolean isPasswordEnabled() {
-        return this.methodSet.contains(PASSWORD_METHOD);
-    }
-
-}
diff --git a/karaf-2.3.x/shell/ssh/src/main/resources/OSGI-INF/blueprint/shell-ssh.xml b/karaf-2.3.x/shell/ssh/src/main/resources/OSGI-INF/blueprint/shell-ssh.xml
deleted file mode 100644
index 09ba36f..0000000
--- a/karaf-2.3.x/shell/ssh/src/main/resources/OSGI-INF/blueprint/shell-ssh.xml
+++ /dev/null
@@ -1,132 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:bp="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
-           xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"
-           default-activation="lazy">
-
-    <type-converters>
-        <bean class="org.apache.karaf.shell.ssh.ShellFactoryImpl" factory-method="getConverter" />
-        <bean class="org.apache.karaf.shell.ssh.UserAuthFactoriesFactory" factory-method="getConverter" />
-    </type-converters>
-
-    <ext:property-placeholder placeholder-prefix="$[" placeholder-suffix="]">
-        <ext:default-properties>
-            <ext:property name="startRemoteShell" value="true" />
-            <ext:property name="karaf.admin.role" value="admin" />
-        </ext:default-properties>
-    </ext:property-placeholder>
-
-    <cm:property-placeholder persistent-id="org.apache.karaf.shell" update-strategy="reload">
-        <cm:default-properties>
-            <cm:property name="sshPort" value="8101"/>
-            <cm:property name="sshHost" value="0.0.0.0"/>
-            <cm:property name="sshIdleTimeout" value="1800000"/>
-            <cm:property name="sshRealm" value="karaf"/>
-            <cm:property name="sshRole" value="$[karaf.admin.role]"/>
-            <cm:property name="hostKey" value="$[karaf.base]/etc/host.key"/>
-            <cm:property name="authorizedKeys" value="$[karaf.base]/etc/authorized_keys"/>
-            <cm:property name="authMethods" value="password,publickey"/>
-            <cm:property name="keySize" value="1024"/>
-            <cm:property name="algorithm" value="DSA"/>
-        </cm:default-properties>
-    </cm:property-placeholder>
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.0.0">
-        <command name="ssh/ssh">
-            <action class="org.apache.karaf.shell.ssh.SshAction">
-                <property name="sshClientId">
-                    <bp:idref component-id="sshClient"/>
-                </property>
-            </action>
-        </command>
-        <command name="ssh/sshd">
-            <action class="org.apache.karaf.shell.ssh.SshServerAction">
-                <property name="sshServerId">
-                    <bp:idref component-id="sshServer"/>
-                </property>
-            </action>
-        </command>
-    </command-bundle>
-
-    <bean id="sshClient" class="org.apache.sshd.SshClient" factory-method="setUpDefaultClient" scope="prototype">
-        <property name="agentFactory" ref="agentFactory" />
-    </bean>
-
-    <bean id="userAuthFactoriesFactory" class="org.apache.karaf.shell.ssh.UserAuthFactoriesFactory">
-        <property name="authMethods" value="${authMethods}"/>
-    </bean>
-
-    <bean id="sshServer" class="org.apache.sshd.SshServer" factory-method="setUpDefaultServer" scope="prototype">
-        <property name="port" value="${sshPort}"/>
-        <property name="host" value="${sshHost}"/>
-        <property name="shellFactory">
-            <bean class="org.apache.karaf.shell.ssh.ShellFactoryImpl">
-                <property name="commandProcessor" ref="commandProcessor"/>
-            </bean>
-        </property>
-        <property name="commandFactory">
-            <bean class="org.apache.sshd.server.command.ScpCommandFactory">
-                <argument>
-                    <bean class="org.apache.karaf.shell.ssh.ShellCommandFactory">
-                        <property name="commandProcessor" ref="commandProcessor"/>
-                    </bean>
-                </argument>
-            </bean>
-        </property>
-        <property name="keyPairProvider" ref="keyPairProvider"/>
-        <property name="passwordAuthenticator" ref="authenticator"/>
-        <property name="publickeyAuthenticator" ref="authenticator"/>
-        <property name="fileSystemFactory">
-            <bean class="org.apache.karaf.shell.ssh.KarafFileSystemFactory"/>
-        </property>
-        <property name="userAuthFactories">
-            <bean factory-ref="userAuthFactoriesFactory" factory-method="getFactories"/>
-        </property>
-        <property name="agentFactory" ref="agentFactory" />
-    </bean>
-
-    <bean id="agentFactory" class="org.apache.karaf.shell.ssh.KarafAgentFactory" />
-    <reference-list id="agents" interface="org.apache.sshd.agent.SshAgent" availability="optional" activation="eager">
-        <reference-listener ref="agentFactory" bind-method="registerAgent" unbind-method="unregisterAgent" />
-    </reference-list>
-
-    <bean id="keyPairProvider" class="org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider">
-        <property name="path" value="${hostKey}"/>
-        <property name="keySize" value="${keySize}"/>
-        <property name="algorithm" value="${algorithm}"/>
-    </bean>
-    <bean id="authenticator" class="org.apache.karaf.shell.ssh.KarafJaasAuthenticator">
-        <property name="realm" value="${sshRealm}"/>
-        <property name="role" value="${sshRole}"/>
-    </bean>
-
-    <bean id="sshServerFactory" class="org.apache.karaf.shell.ssh.SshServerFactory" init-method="start"
-          destroy-method="stop" activation="eager">
-        <argument ref="sshServer"/>
-        <property name="start" value="$[karaf.startRemoteShell]"/>
-        <property name="idleTimeout" value="${sshIdleTimeout}"/>
-    </bean>
-
-    <reference id="commandProcessor" interface="org.apache.felix.service.command.CommandProcessor">
-    </reference>
-
-</blueprint>
\ No newline at end of file
diff --git a/karaf-2.3.x/shell/ssh/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/shell/ssh/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 964f9b1..0000000
--- a/karaf-2.3.x/shell/ssh/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,16 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides SSH support for the Karaf shell console.
-
-    It acts as SSH client and server allowing you to receive SSH connection and be able to
-    connect to a remote SSH server.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mUsing remote instances\u001B[0m section of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/shell/ssh/src/main/resources/OSGI-INF/metatype/metatype.properties b/karaf-2.3.x/shell/ssh/src/main/resources/OSGI-INF/metatype/metatype.properties
deleted file mode 100644
index c4090b5..0000000
--- a/karaf-2.3.x/shell/ssh/src/main/resources/OSGI-INF/metatype/metatype.properties
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-#  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.
-#
-
-#
-# This file contains localization strings for configuration labels and
-# descriptions as used in the metatype.xml descriptor
-
-shell.name = Apache Karaf Shell
-shell.description = Configuration of Apache Karaf Shell
-
-sshPort.name = SSH Port
-sshPort.description = port of the SSH daemon
-
-sshHost.name = SSH Host
-sshHost.description = name of the host used to bind the SSH daemon
-
-sshRealm.name = SSH Realm
-sshRealm.description = name of the JAAS realm to use for SSH authentication
-
-hostKey.name = Host key
-hostKey.description = location of the host key for SSH
-
-keySize.name = Key size
-keySize.description = Secret key size in 1024, 2048, 3072, or 4096
-
-algorithm.name = Key algorithm
-algorithm.description = Host key algorithm in DSA, RSA, etc
\ No newline at end of file
diff --git a/karaf-2.3.x/shell/ssh/src/main/resources/OSGI-INF/metatype/metatype.xml b/karaf-2.3.x/shell/ssh/src/main/resources/OSGI-INF/metatype/metatype.xml
deleted file mode 100644
index 68c5da3..0000000
--- a/karaf-2.3.x/shell/ssh/src/main/resources/OSGI-INF/metatype/metatype.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?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.
-
--->
-<metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.0.0" localization="OSGI-INF/metatype/metatype">
-    <OCD id="org.apache.karaf.shell" name="%shell.name" description="%shell.description">
-        <AD id="sshPort" type="Integer" default="8101" name="%sshPort.name" description="%sshPort.description"/>
-        <AD id="sshHost" type="String" default="0.0.0.0" name="%sshHost.name" description="%sshHost.description"/>
-        <AD id="sshRealm" type="String" default="karaf" name="%sshRealm.name" description="%sshRealm.description"/>
-        <AD id="hostKey" type="String" default="${karaf.base}/etc/host.key" name="%hostKey.name" description="%hostKey.description"/>
-        <AD id="keySize" type="integer" default="1024" name="%keySize.name" description="%keySize.description"/>
-        <AD id="algorithm" type="String" default="DSA" name="%algorithm.name" description="%algorithm.description"/>
-    </OCD>
-    <Designate pid="org.apache.karaf.shell">
-        <Object ocdref="org.apache.karaf.shell"/>
-    </Designate>
-</metatype:MetaData>
diff --git a/karaf-2.3.x/shell/ssh/src/test/resources/org/apache/karaf/shell/ssh/authorized_keys b/karaf-2.3.x/shell/ssh/src/test/resources/org/apache/karaf/shell/ssh/authorized_keys
deleted file mode 100644
index 11bd351..0000000
--- a/karaf-2.3.x/shell/ssh/src/test/resources/org/apache/karaf/shell/ssh/authorized_keys
+++ /dev/null
@@ -1,20 +0,0 @@
-################################################################
-# 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.
-################################################################
-ssh-dss AAAAB3NzaC1kc3MAAACBAPY8ZOHY2yFSJA6XYC9HRwNHxaehvx5wOJ0rzZdzoSOXxbETW6ToHv8D1UJ/z+zHo9Fiko5XybZnDIaBDHtblQ+Yp7StxyltHnXF1YLfKD1G4T6JYrdHYI14Om1eg9e4NnCRleaqoZPF3UGfZia6bXrGTQf3gJq2e7Yisk/gF+1VAAAAFQDb8D5cvwHWTZDPfX0D2s9Rd7NBvQAAAIEAlN92+Bb7D4KLYk3IwRbXblwXdkPggA4pfdtW9vGfJ0/RHd+NjB4eo1D+0dix6tXwYGN7PKS5R/FXPNwxHPapcj9uL1Jn2AWQ2dsknf+i/FAAvioUPkmdMc0zuWoSOEsSNhVDtX3WdvVcGcBq9cetzrtOKWOocJmJ80qadxTRHtUAAACBAN7CY+KKv1gHpRzFwdQm7HK9bb1LAo2KwaoXnadFgeptNBQeSXG1vO+JsvphVMBJc9HSn24VYtYtsMu74qXviYjziVucWKjjKEb11juqnF0GDlB3VVmxHLmxnAz643WK42Z7dLM5sY29ouezv4Xz2PuMch5VGPP+CDqzCM4loWgV dsa-test
-ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEA1on8gxCGJJWSRT4uOrR13mUaUk0hRf4RzxSZ1zRbYYFw8pfGesIFoEuVth4HKyF8k1y4mRUnYHP1XNMNMJl1JcEArC2asV8sHf6zSPVffozZ5TT4SfsUu/iKy9lUcCfXzwre4WWZSXXcPff+EHtWshahu3WzBdnGxm5Xoi89zcE= rsa-test
\ No newline at end of file
diff --git a/karaf-2.3.x/shell/web/NOTICE b/karaf-2.3.x/shell/web/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/shell/web/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/shell/web/pom.xml b/karaf-2.3.x/shell/web/pom.xml
deleted file mode 100644
index 2cd30a4..0000000
--- a/karaf-2.3.x/shell/web/pom.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.shell</groupId>
-        <artifactId>shell</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.shell.web</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Shell :: Web Commands</name>
-    <description>This bundle provides Karaf shell commands to manipulate web application bundles.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.utils</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.web</groupId>
-            <artifactId>pax-web-spi</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
-                        <Export-Package>${project.artifactId}*;version=${project.version}</Export-Package>
-                        <Import-Package>
-                            org.apache.felix.service.command,
-                            org.apache.felix.gogo.commands,
-                            org.apache.karaf.shell.console,
-                            *
-                        </Import-Package>
-                        <Private-Package>
-                            org.apache.felix.utils.version;-split-package:=merge-first,
-                            org.apache.felix.utils.manifest;-split-package:=merge-first,
-                            !*
-                        </Private-Package>
-                        <_versionpolicy>${bnd.version.policy}</_versionpolicy>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/shell/web/src/main/java/org/apache/karaf/shell/web/WebEventHandler.java b/karaf-2.3.x/shell/web/src/main/java/org/apache/karaf/shell/web/WebEventHandler.java
deleted file mode 100644
index ed1332d..0000000
--- a/karaf-2.3.x/shell/web/src/main/java/org/apache/karaf/shell/web/WebEventHandler.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*

- * 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.

- */

-package org.apache.karaf.shell.web;

-

-import java.util.HashMap;

-import java.util.Map;

-

-import org.ops4j.pax.web.service.spi.WebEvent;

-import org.ops4j.pax.web.service.spi.WebListener;

-

-/**

- * Class implementing {@link WebListener} service to retrieve {@link WebEvent}

- */

-//public class WebEventHandler implements WebListener {

-public class WebEventHandler implements WebListener {

-	

-	private final Map<Long, WebEvent> bundleEvents = new HashMap<Long, WebEvent>();

-

-	public Map<Long, WebEvent> getBundleEvents() {

-		return bundleEvents;

-	}

-		

-	public void webEvent(WebEvent event) {

-		getBundleEvents().put(event.getBundle().getBundleId(), event);

-	}

-

-}

diff --git a/karaf-2.3.x/shell/web/src/main/java/org/apache/karaf/shell/web/WebListCommand.java b/karaf-2.3.x/shell/web/src/main/java/org/apache/karaf/shell/web/WebListCommand.java
deleted file mode 100644
index 4104642..0000000
--- a/karaf-2.3.x/shell/web/src/main/java/org/apache/karaf/shell/web/WebListCommand.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*

- * 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.

- */

-package org.apache.karaf.shell.web;

-

-import java.util.Map;

-

-import org.apache.felix.gogo.commands.Command;

-import org.apache.karaf.shell.console.OsgiCommandSupport;

-import org.ops4j.pax.web.service.spi.WebEvent;

-import org.ops4j.pax.web.service.spi.WebEvent.WebTopic;

-import org.osgi.framework.Bundle;

-import org.osgi.framework.Constants;

-import org.osgi.service.startlevel.StartLevel;

-

-@Command(scope = "web", name = "list", description = "Lists details for war bundles.")

-public class WebListCommand extends OsgiCommandSupport {

-	

-	private StartLevel startLevelService;

-	

-	private WebEventHandler eventHandler;

-

-	/* (non-Javadoc)

-	 * @see org.apache.karaf.shell.war.WarCommandSupport#doExecute(org.osgi.service.packageadmin.PackageAdmin)

-	 */

-	@Override

-	protected Object doExecute() {

-		Bundle[] bundles = getBundleContext().getBundles();

-		Map<Long, WebEvent> bundleEvents = eventHandler.getBundleEvents();

-		if (bundles != null) {

-			String level = (startLevelService == null) ? "" : "  Level ";

-			String webState = (bundleEvents == null || bundleEvents.isEmpty()) ? "" : "  Web-State     ";

-			String headers = "   ID   State       ";

-			headers += webState + level + " Web-ContextPath           Name";

-            System.out.println(headers);

-            for (int i = 0; i < bundles.length; i++) {

-            	//First check if this bundle contains  a webapp ctxt

-            	String webappctxt = (String) bundles[i].getHeaders().get("Web-ContextPath");

-            	if (webappctxt == null)

-            		webappctxt = (String) bundles[i].getHeaders().get("Webapp-Context");//this one is used by pax-web but is deprecated.

-            	

-            	if (webappctxt == null)

-            		continue; //only list war archives. 

-            	

-            	webappctxt.trim();

-            	

-            	// Get the bundle name or location.

-                String name = (String) bundles[i].getHeaders().get(Constants.BUNDLE_NAME);

-                // If there is no name, then default to symbolic name.

-                name = (name == null) ? bundles[i].getSymbolicName() : name;

-                // If there is no symbolic name, resort to location.

-                name = (name == null) ? bundles[i].getLocation() : name;

-                // Show bundle version if not showing location.

-                String version = (String) bundles[i].getHeaders().get(Constants.BUNDLE_VERSION);

-                name = ((version != null)) ? name + " (" + version + ")" : name;

-                long l = bundles[i].getBundleId();

-                String id = String.valueOf(l);

-                if (startLevelService == null) {

-                    level = "";

-                }

-                else {

-                    level = String.valueOf(startLevelService.getBundleStartLevel(bundles[i]));

-                }

-                while (level.length() < 5) {

-                    level = " " + level;

-                }

-                while (id.length() < 4) {

-                    id = " " + id;

-                }

-                

-                //prepend ctxt with slash (looks better)

-                if (!webappctxt.startsWith("/"))

-                	webappctxt = "/" + webappctxt;

-                

-                while (webappctxt.length() < 24) {

-                	webappctxt += " ";

-                }

-                

-                String line = "[" + id + "] [" + getStateString(bundles[i]) + "]";

-                if (bundleEvents != null && !bundleEvents.isEmpty())

-                	line += " ["+ getWebStateString(bundles[i]) +"] ";

-                line += " [" + level + "] [" + webappctxt + "] " + name;

-                System.out.println(line);

-            }

-		}

-		return null;

-

-	}

-

-    public String getStateString(Bundle bundle)

-    {

-        int state = bundle.getState();

-        if (state == Bundle.ACTIVE) {

-            return "Active     ";

-        } else if (state == Bundle.INSTALLED) {

-            return "Installed  ";

-        } else if (state == Bundle.RESOLVED) {

-            return "Resolved   ";

-        } else if (state == Bundle.STARTING) {

-            return "Starting   ";

-        } else if (state == Bundle.STOPPING) {

-            return "Stopping   ";

-        } else {

-            return "Unknown    ";

-        }

-    }

-    

-    public String getWebStateString(Bundle bundle) {

-    	

-    	long bundleId = bundle.getBundleId();

-    	

-    	Map<Long, WebEvent> bundleEvents = eventHandler.getBundleEvents();

-    	String topic = "Unknown    ";

-    	

-		if (bundleEvents.containsKey(bundleId)) {

-    		WebEvent webEvent = bundleEvents.get(bundleId);

-

-    		switch(webEvent.getType()) {

-    		case WebEvent.DEPLOYING:

-    			topic = "Deploying  ";

-    			break;

-    		case WebEvent.DEPLOYED:

-    			topic = "Deployed   ";

-    			break;

-    		case WebEvent.UNDEPLOYING:

-    			topic = "Undeploying";

-    			break;

-    		case WebEvent.UNDEPLOYED:

-    			topic = "Undeployed ";

-    			break;

-    		case WebEvent.FAILED:

-    			topic = "Unknown    ";

-    			topic = "Failed     ";

-    			break;

-    		default:

-    			topic = "Failed     ";

-    		}

-		}

-		

-		while (topic.length() < 11) {

-        	topic += " ";

-        }

-    	

-    	return topic;

-    }

-

-	/**

-	 * @param startLevelService the startLevelService to set

-	 */

-	public void setStartLevelService(StartLevel startLevelService) {

-		this.startLevelService = startLevelService;

-	}

-

-	/**

-	 * @return the startLevelService

-	 */

-	public StartLevel getStartLevelService() {

-		return startLevelService;

-	}

-

-	/**

-	 * @param eventHandler the eventHandler to set

-	 */

-	public void setEventHandler(WebEventHandler eventHandler) {

-		this.eventHandler = eventHandler;

-	}

-

-	/**

-	 * @return the eventHandler

-	 */

-	public WebEventHandler getEventHandler() {

-		return eventHandler;

-	}

-

-}

diff --git a/karaf-2.3.x/shell/web/src/main/resources/OSGI-INF/blueprint/shell-web.xml b/karaf-2.3.x/shell/web/src/main/resources/OSGI-INF/blueprint/shell-web.xml
deleted file mode 100644
index 078fb5a..0000000
--- a/karaf-2.3.x/shell/web/src/main/resources/OSGI-INF/blueprint/shell-web.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?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.

-

--->

-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">

-

-	<reference id="slService" interface="org.osgi.service.startlevel.StartLevel" availability="optional" />

-

-	<bean id="eaHandler" class="org.apache.karaf.shell.web.WebEventHandler" />

-	<service id="webListener"

-		interface="org.ops4j.pax.web.service.spi.WebListener"

-		ref="eaHandler" />

-		

-	<command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.0.0">

-        <command name="web/list">

-            <action class="org.apache.karaf.shell.web.WebListCommand">

-            	<property name="startLevelService" ref="slService" />

-            	<property name="eventHandler" ref="eaHandler" />

-            </action>

-        </command>

-    </command-bundle>

-

-</blueprint>
\ No newline at end of file
diff --git a/karaf-2.3.x/shell/web/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/shell/web/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 8daf53b..0000000
--- a/karaf-2.3.x/shell/web/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,16 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides Karaf shell commands to manipulate web application (war) bundles.
-
-    The following commands are available:
-    \u001B[36mweb:list\u001B[0m Lists details for war bundles.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mDeployer\u001B[0m section of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/shell/wrapper/NOTICE b/karaf-2.3.x/shell/wrapper/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/shell/wrapper/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/shell/wrapper/pom.xml b/karaf-2.3.x/shell/wrapper/pom.xml
deleted file mode 100644
index 2e19f08..0000000
--- a/karaf-2.3.x/shell/wrapper/pom.xml
+++ /dev/null
@@ -1,122 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.shell</groupId>
-        <artifactId>shell</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.shell.wrapper</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Shell :: Service Wrapper</name>
-    <description>This bundle provides support of service wrapper.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf</groupId>
-            <artifactId>org.apache.karaf.main</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf</groupId>
-            <artifactId>org.apache.karaf.util</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>tanukisoft</groupId>
-            <artifactId>wrapper</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/filtered-resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>exec-maven-plugin</artifactId>
-                <configuration>
-                    <mainClass>Main</mainClass>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            !org.apache.karaf.main,
-                            !org.tanukisoftware.wrapper,
-                            org.apache.felix.service.command,
-                            org.apache.felix.gogo.commands,
-                            org.apache.karaf.shell.console,
-                            *
-                        </Import-Package>
-                        <Private-Package>
-                            org.apache.karaf.util.process;-split-package:=merge-first
-                        </Private-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/InstallCommand.java b/karaf-2.3.x/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/InstallCommand.java
deleted file mode 100644
index 203b171..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/InstallCommand.java
+++ /dev/null
@@ -1,554 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.wrapper;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PrintStream;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Scanner;
-import java.util.jar.JarOutputStream;
-import java.util.zip.ZipEntry;
-
-import org.apache.karaf.shell.console.AbstractAction;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.gogo.commands.Command;
-import org.fusesource.jansi.Ansi;
-
-/**
- * Installs this Karaf instance as a service in your operating systems.
- */
-@Command(scope = "wrapper", name = "install", description = "Install the container as a system service in the OS.")
-public class InstallCommand extends AbstractAction {
-
-    @Option(name = "-n", aliases = {"--name"}, description = "The service name that will be used when installing the service. (Default: karaf)", required = false, multiValued = false)
-    private String name = "karaf";
-
-    @Option(name = "-d", aliases = {"--display"}, description = "The display name of the service.", required = false, multiValued = false)
-    private String displayName;
-
-    @Option(name = "-D", aliases = {"--description"}, description = "The description of the service.", required = false, multiValued = false)
-    private String description = "";
-
-    @Option(name = "-s", aliases = {"--start-type"}, description = "Mode in which the service is installed. AUTO_START or DEMAND_START (Default: AUTO_START)", required = false, multiValued = false)
-    private String startType = "AUTO_START";
-
-    protected Object doExecute() throws Exception {
-
-        try {
-            String name = getName();
-            File base = new File(System.getProperty("karaf.base"));
-            File bin = new File(base, "bin");
-            File etc = new File(base, "etc");
-            File lib = new File(base, "lib");
-
-            HashMap<String, String> props = new HashMap<String, String>();
-            props.put("${java.home}", System.getProperty("java.home"));
-            props.put("${karaf.home}", System.getProperty("karaf.home"));
-            props.put("${karaf.base}", base.getPath());
-            props.put("${karaf.data}", System.getProperty("karaf.data"));
-            props.put("${name}", name);
-            props.put("${displayName}", getDisplayName());
-            props.put("${description}", getDescription());
-            props.put("${startType}", getStartType());
-
-            String os = System.getProperty("os.name", "Unknown");
-            File serviceFile = null;
-            File wrapperConf = null;
-            if (os.startsWith("Win")) {
-                String arch = System.getProperty("os.arch");
-                if (arch.equalsIgnoreCase("amd64") || arch.equalsIgnoreCase("x86_64")) {
-                    mkdir(bin);
-
-                    copyResourceTo(new File(bin, name + "-wrapper.exe"), "windows64/karaf-wrapper.exe", false);
-
-                    serviceFile = new File(bin, name + "-service.bat");
-                    wrapperConf = new File(etc, name + "-wrapper.conf");
-
-                    copyFilteredResourceTo(wrapperConf, "windows64/karaf-wrapper.conf", props);
-                    copyFilteredResourceTo(serviceFile, "windows64/karaf-service.bat", props);
-
-                    mkdir(lib);
-                    copyResourceTo(new File(lib, "wrapper.dll"), "windows64/wrapper.dll", false);
-                } else {
-                    mkdir(bin);
-
-                    copyResourceTo(new File(bin, name + "-wrapper.exe"), "windows/karaf-wrapper.exe", false);
-
-                    serviceFile = new File(bin, name + "-service.bat");
-                    wrapperConf = new File(etc, name + "-wrapper.conf");
-
-                    copyFilteredResourceTo(wrapperConf, "windows/karaf-wrapper.conf", props);
-                    copyFilteredResourceTo(serviceFile, "windows/karaf-service.bat", props);
-
-                    mkdir(lib);
-                    copyResourceTo(new File(lib, "wrapper.dll"), "windows/wrapper.dll", false);
-                }
-            } else if (os.startsWith("Mac OS X")) {
-                mkdir(bin);
-
-                File file = new File(bin, name + "-wrapper");
-                copyResourceTo(file, "macosx/karaf-wrapper", false);
-                chmod(file, "a+x");
-
-                serviceFile = new File(bin, name + "-service");
-                copyFilteredResourceTo(serviceFile, "unix/karaf-service", props);
-                chmod(serviceFile, "a+x");
-
-                wrapperConf = new File(etc, name + "-wrapper.conf");
-                copyFilteredResourceTo(wrapperConf, "unix/karaf-wrapper.conf", props);
-
-                mkdir(lib);
-                copyResourceTo(new File(lib, "libwrapper.jnilib"), "macosx/libwrapper.jnilib", false);
-
-                // TODO: figure out how to hook in the service that it starts up
-                // when the machine boots up.
-            } else if (os.startsWith("Linux")) {
-                String arch = System.getProperty("os.arch");
-                if (arch.equalsIgnoreCase("amd64") || arch.equalsIgnoreCase("x86_64")) {
-                    mkdir(bin);
-
-                    File file = new File(bin, name + "-wrapper");
-                    copyResourceTo(file, "linux64/karaf-wrapper", false);
-                    chmod(file, "a+x");
-
-                    serviceFile = new File(bin, name + "-service");
-                    copyFilteredResourceTo(serviceFile, "unix/karaf-service", props);
-                    chmod(serviceFile, "a+x");
-
-                    wrapperConf = new File(etc, name + "-wrapper.conf");
-                    copyFilteredResourceTo(wrapperConf, "unix/karaf-wrapper.conf", props);
-
-                    mkdir(lib);
-                    copyResourceTo(new File(lib, "libwrapper.so"), "linux64/libwrapper.so", false);
-
-                } else {
-                    mkdir(bin);
-
-                    File file = new File(bin, name + "-wrapper");
-                    copyResourceTo(file, "linux/karaf-wrapper", false);
-                    chmod(file, "a+x");
-
-                    serviceFile = new File(bin, name + "-service");
-                    copyFilteredResourceTo(serviceFile, "unix/karaf-service", props);
-                    chmod(serviceFile, "a+x");
-
-                    wrapperConf = new File(etc, name + "-wrapper.conf");
-                    copyFilteredResourceTo(wrapperConf, "unix/karaf-wrapper.conf", props);
-
-                    mkdir(lib);
-                    copyResourceTo(new File(lib, "libwrapper.so"), "linux/libwrapper.so", false);
-
-                    // TODO: figure out how to hook in the service that it starts up
-                    // when the machine boots up.
-                }
-            } else if (os.startsWith("AIX")) {
-                String arch = System.getProperty("os.arch");
-                if (arch.equalsIgnoreCase("ppc64")) {
-                    mkdir(bin);
-
-                    File file = new File(bin, name + "-wrapper");
-                    copyResourceTo(file, "aix/ppc64/karaf-wrapper", false);
-                    chmod(file, "a+x");
-
-                    serviceFile = new File(bin, name + "-service");
-                    copyFilteredResourceTo(serviceFile, "unix/karaf-service", props);
-                    chmod(serviceFile, "a+x");
-
-                    wrapperConf = new File(etc, name + "-wrapper.conf");
-                    copyFilteredResourceTo(wrapperConf, "unix/karaf-wrapper.conf", props);
-
-                    mkdir(lib);
-                    copyResourceTo(new File(lib, "libwrapper.a"), "aix/ppc64/libwrapper.a", false);
-                } else {
-                    mkdir(bin);
-
-                    File file = new File(bin, name + "-wrapper");
-                    copyResourceTo(file, "aix/ppc64/karaf-wrapper", false);
-                    chmod(file, "a+x");
-
-                    serviceFile = new File(bin, name + "-service");
-                    copyFilteredResourceTo(serviceFile, "unix/karaf-service", props);
-                    chmod(serviceFile, "a+x");
-
-                    wrapperConf = new File(etc, name + "-wrapper.conf");
-                    copyFilteredResourceTo(wrapperConf, "unix/karaf-wrapper.conf", props);
-
-                    mkdir(lib);
-                    copyResourceTo(new File(lib, "libwrapper.a"), "aix/ppc64/libwrapper.a", false);
-                }
-            } else if (os.startsWith("Solaris") || os.startsWith("SunOS")) {
-                String arch = System.getProperty("os.arch");
-                if (arch.equalsIgnoreCase("sparc")) {
-                    mkdir(bin);
-
-                    File file = new File(bin, name + "-wrapper");
-                    copyResourceTo(file, "solaris/sparc64/karaf-wrapper", false);
-                    chmod(file, "a+x");
-
-                    serviceFile = new File(bin, name + "-service");
-                    copyFilteredResourceTo(serviceFile, "unix/karaf-service", props);
-                    chmod(serviceFile, "a+x");
-
-                    wrapperConf = new File(etc, name + "-wrapper.conf");
-                    copyFilteredResourceTo(wrapperConf, "unix/karaf-wrapper.conf", props);
-
-                    mkdir(lib);
-                    copyResourceTo(new File(lib, "libwrapper.so"), "solaris/sparc64/libwrapper.so", false);
-                } else if (arch.equalsIgnoreCase("x86")) {
-                    mkdir(bin);
-
-                    File file = new File(bin, name + "-wrapper");
-                    copyResourceTo(file, "solaris/x86/karaf-wrapper", false);
-                    chmod(file, "a+x");
-
-                    serviceFile = new File(bin, name + "-service");
-                    copyFilteredResourceTo(serviceFile, "unix/karaf-service", props);
-                    chmod(serviceFile, "a+x");
-
-                    wrapperConf = new File(etc, name + "-wrapper.conf");
-                    copyFilteredResourceTo(wrapperConf, "unix/karaf-wrapper.conf", props);
-
-                    mkdir(lib);
-                    copyResourceTo(new File(lib, "libwrapper.so"), "solaris/x86/libwrapper.so", false);
-                } else {
-                    mkdir(bin);
-
-                    File file = new File(bin, name + "-wrapper");
-                    copyResourceTo(file, "solaris/sparc32/karaf-wrapper", false);
-                    chmod(file, "a+x");
-
-                    serviceFile = new File(bin, name + "-service");
-                    copyFilteredResourceTo(serviceFile, "unix/karaf-service", props);
-                    chmod(serviceFile, "a+x");
-
-                    wrapperConf = new File(etc, name + "-wrapper.conf");
-                    copyFilteredResourceTo(wrapperConf, "unix/karaf-wrapper.conf", props);
-
-                    mkdir(lib);
-                    copyResourceTo(new File(lib, "libwrapper.so"), "solaris/sparc32/libwrapper.so", false);
-                }
-            } else if (os.startsWith("HP-UX") || os.startsWith("HPUX")) {
-                mkdir(bin);
-
-                File file = new File(bin, name + "-wrapper");
-                copyResourceTo(file, "hpux/parisc64/karaf-wrapper", false);
-                chmod(file, "a+x");
-
-                serviceFile = new File(bin, name + "-service");
-                copyFilteredResourceTo(serviceFile, "unix/karaf-service", props);
-                chmod(serviceFile, "a+x");
-
-                wrapperConf = new File(etc, name + "-wrapper.conf");
-                copyFilteredResourceTo(wrapperConf, "unix/karaf-wrapper.conf", props);
-
-                mkdir(lib);
-                copyResourceTo(new File(lib, "libwrapper.sl"), "hpux/parisc64/libwrapper.sl", false);
-            } else {
-                System.out.println("Your operating system '" + os + "' is not currently supported.");
-                return 1;
-            }
-
-            // Install the wrapper jar to the lib directory..
-            mkdir(lib);
-            copyResourceTo(new File(lib, "karaf-wrapper.jar"), "all/karaf-wrapper.jar", false);
-            mkdir(etc);
-
-            createJar(new File(lib, "karaf-wrapper-main.jar"), "org/apache/karaf/shell/wrapper/Main.class");
-
-            System.out.println("");
-            System.out.println("Setup complete.  You may wish to tweak the JVM properties in the wrapper configuration file:");
-            System.out.println("\t" + wrapperConf.getPath());
-            System.out.println("before installing and starting the service.");
-            System.out.println("");
-            if (os.startsWith("Win")) {
-                System.out.println("");
-                System.out.println("To install the service, run: ");
-                System.out.println("  C:> " + serviceFile.getPath() + " install");
-                System.out.println("");
-                System.out.println("Once installed, to start the service run: ");
-                System.out.println("  C:> net start \"" + name + "\"");
-                System.out.println("");
-                System.out.println("Once running, to stop the service run: ");
-                System.out.println("  C:> net stop \"" + name + "\"");
-                System.out.println("");
-                System.out.println("Once stopped, to remove the installed the service run: ");
-                System.out.println("  C:> " + serviceFile.getPath() + " remove");
-                System.out.println("");
-            } else if (os.startsWith("Mac OS X")) {
-                System.out.println("");
-                System.out.println("At this time it is not known how to get this service to start when the machine is rebooted.");
-                System.out.println("If you know how to install the following service script so that it gets started");
-                System.out.println("when OS X starts, please email dev@felix.apache.org and let us know how so");
-                System.out.println("we can update this message.");
-                System.out.println(" ");
-                System.out.println("  To start the service:");
-                System.out.println("    $ " + serviceFile.getPath() + " start");
-                System.out.println("");
-                System.out.println("  To stop the service:");
-                System.out.println("    $ " + serviceFile.getPath() + " stop");
-                System.out.println("");
-            } else if (os.startsWith("Linux")) {
-                System.out.println("The way the service is installed depends upon your flavor of Linux.");
-
-                // TODO: figure out if we can detect the Linux flavor
-
-                System.out.println("");
-                System.out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("On Redhat/Fedora/CentOS Systems:").a(Ansi.Attribute.RESET).toString());
-                System.out.println("  To install the service:");
-                System.out.println("    $ ln -s " + serviceFile.getPath() + " /etc/init.d/");
-                System.out.println("    $ chkconfig " + serviceFile.getName() + " --add");
-                System.out.println("");
-                System.out.println("  To start the service when the machine is rebooted:");
-                System.out.println("    $ chkconfig " + serviceFile.getName() + " on");
-                System.out.println("");
-                System.out.println("  To disable starting the service when the machine is rebooted:");
-                System.out.println("    $ chkconfig " + serviceFile.getName() + " off");
-                System.out.println("");
-                System.out.println("  To start the service:");
-                System.out.println("    $ service " + serviceFile.getName() + " start");
-                System.out.println("");
-                System.out.println("  To stop the service:");
-                System.out.println("    $ service " + serviceFile.getName() + " stop");
-                System.out.println("");
-                System.out.println("  To uninstall the service :");
-                System.out.println("    $ chkconfig " + serviceFile.getName() + " --del");
-                System.out.println("    $ rm /etc/init.d/" + serviceFile.getName());
-
-                System.out.println("");
-                System.out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("On Ubuntu/Debian Systems:").a(Ansi.Attribute.RESET).toString());
-                System.out.println("  To install the service:");
-                System.out.println("    $ ln -s " + serviceFile.getPath() + " /etc/init.d/");
-                System.out.println("");
-                System.out.println("  To start the service when the machine is rebooted:");
-                System.out.println("    $ update-rc.d " + serviceFile.getName() + " defaults");
-                System.out.println("");
-                System.out.println("  To disable starting the service when the machine is rebooted:");
-                System.out.println("    $ update-rc.d -f " + serviceFile.getName() + " remove");
-                System.out.println("");
-                System.out.println("  To start the service:");
-                System.out.println("    $ /etc/init.d/" + serviceFile.getName() + " start");
-                System.out.println("");
-                System.out.println("  To stop the service:");
-                System.out.println("    $ /etc/init.d/" + serviceFile.getName() + " stop");
-                System.out.println("");
-                System.out.println("  To uninstall the service :");
-                System.out.println("    $ rm /etc/init.d/" + serviceFile.getName());
-
-            }
-
-
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw e;
-        }
-
-        return null;
-    }
-
-    private int chmod(File serviceFile, String mode) throws Exception {
-        ProcessBuilder builder = new ProcessBuilder();
-        builder.command("chmod", mode, serviceFile.getCanonicalPath());
-        Process p = builder.start();
-
-        PumpStreamHandler handler = new PumpStreamHandler(System.in, System.out, System.err);
-        handler.attach(p);
-        handler.start();
-        int status = p.waitFor();
-        handler.stop();
-        return status;
-    }
-
-    private void createJar(File outFile, String resource) throws Exception {
-        if (!outFile.exists()) {
-            System.out.println(Ansi.ansi().a("Creating file: ")
-                    .a(Ansi.Attribute.INTENSITY_BOLD).a(outFile.getPath()).a(Ansi.Attribute.RESET).toString());
-            InputStream is = getClass().getClassLoader().getResourceAsStream(resource);
-            if (is == null) {
-                throw new IllegalStateException("Resource " + resource + " not found!");
-            }
-            try {
-                JarOutputStream jar = new JarOutputStream(new FileOutputStream(outFile));
-                int idx = resource.indexOf('/');
-                while (idx > 0) {
-                    jar.putNextEntry(new ZipEntry(resource.substring(0, idx)));
-                    jar.closeEntry();
-                    idx = resource.indexOf('/', idx + 1);
-                }
-                jar.putNextEntry(new ZipEntry(resource));
-                int c;
-                while ((c = is.read()) >= 0) {
-                    jar.write(c);
-                }
-                jar.closeEntry();
-                jar.close();
-            } finally {
-                safeClose(is);
-            }
-        }
-    }
-
-    private void copyResourceTo(File outFile, String resource, boolean text) throws Exception {
-        if (!outFile.exists()) {
-            System.out.println(Ansi.ansi().a("Creating file: ")
-                    .a(Ansi.Attribute.INTENSITY_BOLD).a(outFile.getPath()).a(Ansi.Attribute.RESET).toString());
-            InputStream is = InstallCommand.class.getResourceAsStream(resource);
-            try {
-                if (text) {
-                    // Read it line at a time so that we can use the platform line ending when we write it out.
-                    PrintStream out = new PrintStream(new FileOutputStream(outFile));
-                    try {
-                        Scanner scanner = new Scanner(is);
-                        while (scanner.hasNextLine()) {
-                            String line = scanner.nextLine();
-                            System.out.println("writing: " + line);
-                            out.println(line);
-                        }
-                    } finally {
-                        safeClose(out);
-                    }
-                } else {
-                    // Binary so just write it out the way it came in.
-                    FileOutputStream out = new FileOutputStream(outFile);
-                    try {
-                        int c = 0;
-                        while ((c = is.read()) >= 0) {
-                            out.write(c);
-                        }
-                    } finally {
-                        safeClose(out);
-                    }
-                }
-            } finally {
-                safeClose(is);
-            }
-        } else {
-            System.out.println(Ansi.ansi()
-                    .fg(Ansi.Color.RED).a("File already exists").a(Ansi.Attribute.RESET)
-                    .a(". Move it out of the way if you wish to recreate it: ").a(outFile.getPath()).toString());
-        }
-    }
-
-    private void copyFilteredResourceTo(File outFile, String resource, HashMap<String, String> props) throws Exception {
-        if (!outFile.exists()) {
-            System.out.println(Ansi.ansi().a("Creating file: ")
-                    .a(Ansi.Attribute.INTENSITY_BOLD).a(outFile.getPath()).a(Ansi.Attribute.RESET).toString());
-            InputStream is = InstallCommand.class.getResourceAsStream(resource);
-            try {
-                // Read it line at a time so that we can use the platform line ending when we write it out.
-                PrintStream out = new PrintStream(new FileOutputStream(outFile));
-                try {
-                    Scanner scanner = new Scanner(is);
-                    while (scanner.hasNextLine()) {
-                        String line = scanner.nextLine();
-                        line = filter(line, props);
-                        out.println(line);
-                    }
-                } finally {
-                    safeClose(out);
-                }
-            } finally {
-                safeClose(is);
-            }
-        } else {
-            System.out.println(Ansi.ansi()
-                    .fg(Ansi.Color.RED).a("File already exists").a(Ansi.Attribute.RESET)
-                    .a(". Move it out of the way if you wish to recreate it: ").a(outFile.getPath()).toString());
-        }
-    }
-
-    private void safeClose(InputStream is) throws IOException {
-        if (is == null)
-            return;
-        try {
-            is.close();
-        } catch (Throwable ignore) {
-        }
-    }
-
-    private void safeClose(OutputStream is) throws IOException {
-        if (is == null)
-            return;
-        try {
-            is.close();
-        } catch (Throwable ignore) {
-        }
-    }
-
-    private String filter(String line, HashMap<String, String> props) {
-        for (Map.Entry<String, String> i : props.entrySet()) {
-            int p1 = line.indexOf(i.getKey());
-            if (p1 >= 0) {
-                String l1 = line.substring(0, p1);
-                String l2 = line.substring(p1 + i.getKey().length());
-                line = l1 + i.getValue() + l2;
-            }
-        }
-        return line;
-    }
-
-    private void mkdir(File file) {
-        if (!file.exists()) {
-            System.out.println(Ansi.ansi().a("Creating missing directory: ")
-                    .a(Ansi.Attribute.INTENSITY_BOLD).a(file.getPath()).a(Ansi.Attribute.RESET).toString());
-            file.mkdirs();
-        }
-    }
-
-    public String getName() {
-        if (name == null) {
-            File base = new File(System.getProperty("karaf.base"));
-            name = base.getName();
-        }
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getDisplayName() {
-        if (displayName == null) {
-            displayName = getName();
-        }
-        return displayName;
-    }
-
-    public void setDisplayName(String displayName) {
-        this.displayName = displayName;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getStartType() {
-        return startType;
-    }
-
-    public void setStartType(String startType) {
-        this.startType = startType;
-    }
-}
diff --git a/karaf-2.3.x/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/Main.java b/karaf-2.3.x/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/Main.java
deleted file mode 100644
index 82e738c..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/Main.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.wrapper;
-
-import org.apache.karaf.main.ShutdownCallback;
-import org.tanukisoftware.wrapper.WrapperListener;
-import org.tanukisoftware.wrapper.WrapperManager;
-
-/**
- * Java Service Wrapper Main class
- */
-public class Main extends Thread implements WrapperListener, ShutdownCallback {
-
-   	private org.apache.karaf.main.Main main;
-    private volatile boolean destroying;
-
-    /*---------------------------------------------------------------
-     * Constructors
-     *-------------------------------------------------------------*/
-    private Main()
-    {
-    }
-
-    /*---------------------------------------------------------------
-     * WrapperListener Methods
-     *-------------------------------------------------------------*/
-    /**
-     * The start method is called when the WrapperManager is signaled by the
-     *    native Wrapper code that it can start its application.  This
-     *    method call is expected to return, so a new thread should be launched
-     *    if necessary.
-     *
-     * @param args List of arguments used to initialize the application.
-     *
-     * @return Any error code if the application should exit on completion
-     *         of the start method.  If there were no problems then this
-     *         method should return null.
-     */
-    public Integer start( String[] args )
-    {
-        main = new org.apache.karaf.main.Main( args );
-        try
-        {
-            main.launch();
-            main.setShutdownCallback(this);
-            start();
-            return null;
-        }
-        catch (Throwable ex)
-        {
-            System.err.println("Could not create framework: " + ex);
-            ex.printStackTrace();
-            return -1;
-        }
-    }
-
-    public void run() {
-        try {
-            main.awaitShutdown();
-            if (!destroying) {
-                WrapperManager.stop(main.getExitCode());
-            }
-        } catch (Exception e) {
-            // Ignore
-        }
-    }
-
-    /**
-     * Called when the application is shutting down.  The Wrapper assumes that
-     *  this method will return fairly quickly.  If the shutdown code code
-     *  could potentially take a long time, then WrapperManager.signalStopping()
-     *  should be called to extend the timeout period.  If for some reason,
-     *  the stop method can not return, then it must call
-     *  WrapperManager.stopped() to avoid warning messages from the Wrapper.
-     *
-     * @param exitCode The suggested exit code that will be returned to the OS
-     *                 when the JVM exits.
-     *
-     * @return The exit code to actually return to the OS.  In most cases, this
-     *         should just be the value of exitCode, however the user code has
-     *         the option of changing the exit code if there are any problems
-     *         during shutdown.
-     */
-    public int stop( int exitCode )
-    {
-        try
-        {
-            destroying = true;
-            if (!main.destroy())
-            {
-                System.err.println("Timeout waiting for Karaf to shutdown");
-                return -3;
-            }
-        }
-        catch (Throwable ex)
-        {
-            System.err.println("Error occured shutting down framework: " + ex);
-            ex.printStackTrace();
-            return -2;
-        }
-
-        return main.getExitCode();
-    }
-    
-    /**
-     * Call-back method is called by the @{link org.apache.karaf.main.Main} for Signaling 
-     * that the stopping process is in progress and the wrapper doesn't kill the JVM.  
-     */
-    public void waitingForShutdown(int delay) {
-    	WrapperManager.signalStopping(delay);
-    }
-
-    /**
-     * Called whenever the native Wrapper code traps a system control signal
-     *  against the Java process.  It is up to the callback to take any actions
-     *  necessary.  Possible values are: WrapperManager.WRAPPER_CTRL_C_EVENT,
-     *    WRAPPER_CTRL_CLOSE_EVENT, WRAPPER_CTRL_LOGOFF_EVENT, or
-     *    WRAPPER_CTRL_SHUTDOWN_EVENT
-     *
-     * @param event The system control signal.
-     */
-    public void controlEvent( int event )
-    {
-        if ( ( event == WrapperManager.WRAPPER_CTRL_LOGOFF_EVENT )
-            && ( WrapperManager.isLaunchedAsService() ) )
-        {
-            // Ignore
-        }
-        else
-        {
-            WrapperManager.stop( 0 );
-            // Will not get here.
-        }
-    }
-
-    /*---------------------------------------------------------------
-     * Main Method
-     *-------------------------------------------------------------*/
-    public static void main( String[] args )
-    {
-        // Start the application.  If the JVM was launched from the native
-        //  Wrapper then the application will wait for the native Wrapper to
-        //  call the application's start method.  Otherwise the start method
-        //  will be called immediately.
-        WrapperManager.start( new Main(), args );
-    }
-
- }
diff --git a/karaf-2.3.x/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/PumpStreamHandler.java b/karaf-2.3.x/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/PumpStreamHandler.java
deleted file mode 100644
index 80e64e1..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/PumpStreamHandler.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.wrapper;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.IOException;
-
-/**
- * Copies standard output and error of children streams to standard output and error of the parent.
- */
-public class PumpStreamHandler {
-
-    private final InputStream in;
-
-    private final OutputStream out;
-
-    private final OutputStream err;
-
-    private final String name;
-
-    private StreamPumper outputPump;
-
-    private StreamPumper errorPump;
-
-    private StreamPumper inputPump;
-
-    //
-    // NOTE: May want to use a ThreadPool here, 3 threads per/pair seems kinda expensive :-(
-    //
-
-    public PumpStreamHandler(final InputStream in, final OutputStream out, final OutputStream err, String name) {
-        assert in != null;
-        assert out != null;
-        assert err != null;
-        assert name != null;
-
-        this.in = in;
-        this.out = out;
-        this.err = err;
-        this.name = name;
-    }
-
-    public PumpStreamHandler(final InputStream in, final OutputStream out, final OutputStream err) {
-        this(in, out, err, "<unknown>");
-    }
-
-    public PumpStreamHandler(final OutputStream out, final OutputStream err) {
-        this(null, out, err);
-    }
-
-    public PumpStreamHandler(final OutputStream outAndErr) {
-        this(outAndErr, outAndErr);
-    }
-
-    /**
-     * Set the input stream from which to read the standard output of the child.
-     */
-    public void setChildOutputStream(final InputStream in) {
-        assert in != null;
-
-        createChildOutputPump(in, out);
-    }
-
-    /**
-     * Set the input stream from which to read the standard error of the child.
-     */
-    public void setChildErrorStream(final InputStream in) {
-        assert in != null;
-
-        if (err != null) {
-            createChildErrorPump(in, err);
-        }
-    }
-
-    /**
-     * Set the output stream by means of which input can be sent to the child.
-     */
-    public void setChildInputStream(final OutputStream out) {
-        assert out != null;
-
-        if (in != null) {
-            inputPump = createInputPump(in, out, true);
-        }
-        else {
-            try {
-                out.close();
-            } catch (IOException e) { }
-        }
-    }
-
-    /**
-     * Attach to a child streams from the given process.
-     *
-     * @param p     The process to attach to.
-     */
-    public void attach(final Process p) {
-        assert p != null;
-
-        setChildInputStream(p.getOutputStream());
-        setChildOutputStream(p.getInputStream());
-        setChildErrorStream(p.getErrorStream());
-    }
-    /**
-     * Start pumping the streams.
-     */
-    public void start() {
-        if (outputPump != null) {
-            Thread thread = new Thread(outputPump);
-            thread.setDaemon(true);
-            thread.setName("Output pump for " + this.name);
-            thread.start();
-        }
-
-        if (errorPump != null) {
-            Thread thread = new Thread(errorPump);
-            thread.setDaemon(true);
-            thread.setName("Error pump for " + this.name);
-            thread.start();
-        }
-
-        if (inputPump != null) {
-            Thread thread = new Thread(inputPump);
-            thread.setDaemon(true);
-            thread.setName("Input pump for " + this.name);
-            thread.start();
-        }
-    }
-
-    /**
-     * Stop pumping the streams.
-     */
-    public void stop() {
-        if (outputPump != null) {
-            try {
-                outputPump.stop();
-                outputPump.waitFor();
-            }
-            catch (InterruptedException e) {
-                // ignore
-            }
-        }
-
-        if (errorPump != null) {
-            try {
-                errorPump.stop();
-                errorPump.waitFor();
-            }
-            catch (InterruptedException e) {
-                // ignore
-            }
-        }
-
-        if (inputPump != null) {
-            inputPump.stop();
-        }
-
-        try {
-            err.flush();
-        } catch (IOException e) { }
-        try {
-            out.flush();
-        } catch (IOException e) { }
-    }
-
-    /**
-     * Create the pump to handle child output.
-     */
-    protected void createChildOutputPump(final InputStream in, final OutputStream out) {
-        assert in != null;
-        assert out != null;
-
-        outputPump = createPump(in, out);
-    }
-
-    /**
-     * Create the pump to handle error output.
-     */
-    protected void createChildErrorPump(final InputStream in, final OutputStream out) {
-        assert in != null;
-        assert out != null;
-
-        errorPump = createPump(in, out);
-    }
-
-    /**
-     * Creates a stream pumper to copy the given input stream to the given output stream.
-     */
-    protected StreamPumper createPump(final InputStream in, final OutputStream out) {
-        assert in != null;
-        assert out != null;
-
-        return createPump(in, out, false);
-    }
-
-    /**
-     * Creates a stream pumper to copy the given input stream to the
-     * given output stream.
-     *
-     * @param in                    The input stream to copy from.
-     * @param out                   The output stream to copy to.
-     * @param closeWhenExhausted    If true close the inputstream.
-     * @return                      A thread object that does the pumping.
-     */
-    protected StreamPumper createPump(final InputStream in, final OutputStream out, final boolean closeWhenExhausted) {
-        assert in != null;
-        assert out != null;
-
-        StreamPumper pumper = new StreamPumper(in, out, closeWhenExhausted);
-        return pumper;
-    }
-
-    /**
-     * Creates a stream pumper to copy the given input stream to the
-     * given output stream. Used for standard input.
-     */
-    protected StreamPumper createInputPump(final InputStream in, final OutputStream out, final boolean closeWhenExhausted) {
-        assert in != null;
-        assert out != null;
-
-        StreamPumper pumper = new StreamPumper(in, out, closeWhenExhausted);
-        pumper.setAutoflush(true);
-        return pumper;
-    }
-}
diff --git a/karaf-2.3.x/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/StreamPumper.java b/karaf-2.3.x/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/StreamPumper.java
deleted file mode 100644
index e4e26a4..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/StreamPumper.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.shell.wrapper;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.IOException;
-
-/**
- * Copies all data from an input stream to an output stream.
- */
-public class StreamPumper implements Runnable {
-
-    private InputStream in;
-
-    private OutputStream out;
-
-    private volatile boolean finish;
-
-    private volatile boolean finished;
-
-    private boolean closeWhenExhausted;
-
-    private boolean autoflush;
-
-    private Exception exception;
-
-    private int bufferSize = 128;
-
-    private boolean started;
-
-    /**
-     * Create a new stream pumper.
-     *
-     * @param in                    Input stream to read data from
-     * @param out                   Output stream to write data to.
-     * @param closeWhenExhausted    If true, the output stream will be closed when
-     *                              the input is exhausted.
-     */
-    public StreamPumper(final InputStream in, final OutputStream out, final boolean closeWhenExhausted) {
-        assert in != null;
-        assert out != null;
-
-        this.in = in;
-        this.out = out;
-        this.closeWhenExhausted = closeWhenExhausted;
-    }
-
-    /**
-     * Create a new stream pumper.
-     *
-     * @param in    Input stream to read data from
-     * @param out   Output stream to write data to.
-     */
-    public StreamPumper(final InputStream in, final OutputStream out) {
-        this(in, out, false);
-    }
-
-    /**
-     * Set whether data should be flushed through to the output stream.
-     *
-     * @param autoflush     If true, push through data; if false, let it be buffered
-     */
-    public void setAutoflush(boolean autoflush) {
-        this.autoflush = autoflush;
-    }
-
-    /**
-     * Copies data from the input stream to the output stream.
-     *
-     * Terminates as soon as the input stream is closed or an error occurs.
-     */
-    public void run() {
-        synchronized (this) {
-            started = true;
-        }
-        finished = false;
-        finish = false;
-
-        final byte[] buf = new byte[bufferSize];
-
-        int length;
-        try {
-            while ((length = in.read(buf)) > 0 && !finish) {
-                out.write(buf, 0, length);
-                if (autoflush) {
-                    out.flush();
-                }
-            }
-            out.flush();
-        }
-        catch (Exception e) {
-            synchronized (this) {
-                exception = e;
-            }
-        }
-        finally {
-            if (closeWhenExhausted) {
-                try {
-                    out.close();
-                } catch (IOException e) { }
-            }
-            finished = true;
-
-            synchronized (this) {
-                notifyAll();
-            }
-        }
-    }
-
-    /**
-     * Tells whether the end of the stream has been reached.
-     *
-     * @return true     If the stream has been exhausted.
-     */
-    public boolean isFinished() {
-        return finished;
-    }
-
-    /**
-     * This method blocks until the stream pumper finishes.
-     *
-     * @see #isFinished()
-     */
-    public synchronized void waitFor() throws InterruptedException {
-        while (!isFinished()) {
-            wait();
-        }
-    }
-
-    /**
-     * Set the size in bytes of the read buffer.
-     *
-     * @param bufferSize the buffer size to use.
-     * @throws IllegalStateException if the StreamPumper is already running.
-     */
-    public synchronized void setBufferSize(final int bufferSize) {
-        if (started) {
-            throw new IllegalStateException("Cannot set buffer size on a running StreamPumper");
-        }
-
-        this.bufferSize = bufferSize;
-    }
-
-    /**
-     * Get the size in bytes of the read buffer.
-     *
-     * @return The size of the read buffer.
-     */
-    public synchronized int getBufferSize() {
-        return bufferSize;
-    }
-
-    /**
-     * Get the exception encountered, if any.
-     *
-     * @return The Exception encountered; or null if there was none.
-     */
-    public synchronized Exception getException() {
-        return exception;
-    }
-
-    /**
-     * Stop the pumper as soon as possible.
-     *
-     * Note that it may continue to block on the input stream
-     * but it will really stop the thread as soon as it gets EOF
-     * or any byte, and it will be marked as finished.
-     */
-    public synchronized void stop() {
-        finish = true;
-
-        notifyAll();
-    }
-}
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/META-INF/services/org/apache/karaf/shell/commands b/karaf-2.3.x/shell/wrapper/src/main/resources/META-INF/services/org/apache/karaf/shell/commands
deleted file mode 100644
index e637744..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/META-INF/services/org/apache/karaf/shell/commands
+++ /dev/null
@@ -1,17 +0,0 @@
-##---------------------------------------------------------------------------
-##  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.wrapper.InstallCommand
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/OSGI-INF/blueprint/shell-wrapper.xml b/karaf-2.3.x/shell/wrapper/src/main/resources/OSGI-INF/blueprint/shell-wrapper.xml
deleted file mode 100644
index d994639..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/OSGI-INF/blueprint/shell-wrapper.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.0.0">
-        <command name="wrapper/install">
-            <action class="org.apache.karaf.shell.wrapper.InstallCommand"/>
-        </command>
-    </command-bundle>
-
-</blueprint>
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/shell/wrapper/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 6d0c282..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,15 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides support of the service wrapper.
-
-    The service wrapper allows you to start/stop Karaf as a system service.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mService Wrapper\u001B[0m section of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/aix/ppc32/karaf-wrapper b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/aix/ppc32/karaf-wrapper
deleted file mode 100755
index 5215c2e..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/aix/ppc32/karaf-wrapper
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/aix/ppc32/libwrapper.a b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/aix/ppc32/libwrapper.a
deleted file mode 100755
index 4bcc342..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/aix/ppc32/libwrapper.a
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/aix/ppc64/karaf-wrapper b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/aix/ppc64/karaf-wrapper
deleted file mode 100755
index 6ba0351..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/aix/ppc64/karaf-wrapper
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/aix/ppc64/libwrapper.a b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/aix/ppc64/libwrapper.a
deleted file mode 100755
index b569e3f..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/aix/ppc64/libwrapper.a
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/all/karaf-wrapper.jar b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/all/karaf-wrapper.jar
deleted file mode 100755
index 4db355b..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/all/karaf-wrapper.jar
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/hpux/parisc64/karaf-wrapper b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/hpux/parisc64/karaf-wrapper
deleted file mode 100755
index ad883d7..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/hpux/parisc64/karaf-wrapper
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/hpux/parisc64/libwrapper.sl b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/hpux/parisc64/libwrapper.sl
deleted file mode 100755
index 08adc52..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/hpux/parisc64/libwrapper.sl
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/linux/karaf-wrapper b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/linux/karaf-wrapper
deleted file mode 100644
index 7e00645..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/linux/karaf-wrapper
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/linux/libwrapper.so b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/linux/libwrapper.so
deleted file mode 100644
index 2cc4ab3..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/linux/libwrapper.so
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/linux64/karaf-wrapper b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/linux64/karaf-wrapper
deleted file mode 100755
index 3128b95..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/linux64/karaf-wrapper
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/linux64/libwrapper.so b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/linux64/libwrapper.so
deleted file mode 100755
index 24197bf..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/linux64/libwrapper.so
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/macosx/karaf-wrapper b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/macosx/karaf-wrapper
deleted file mode 100644
index 0165db0..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/macosx/karaf-wrapper
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/macosx/libwrapper.jnilib b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/macosx/libwrapper.jnilib
deleted file mode 100644
index 6356705..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/macosx/libwrapper.jnilib
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/solaris/sparc32/karaf-wrapper b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/solaris/sparc32/karaf-wrapper
deleted file mode 100755
index 7cac208..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/solaris/sparc32/karaf-wrapper
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/solaris/sparc32/libwrapper.so b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/solaris/sparc32/libwrapper.so
deleted file mode 100755
index 4093262..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/solaris/sparc32/libwrapper.so
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/solaris/sparc64/karaf-wrapper b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/solaris/sparc64/karaf-wrapper
deleted file mode 100755
index 91257c6..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/solaris/sparc64/karaf-wrapper
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/solaris/sparc64/libwrapper.so b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/solaris/sparc64/libwrapper.so
deleted file mode 100755
index 008bef6..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/solaris/sparc64/libwrapper.so
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/solaris/x86/karaf-wrapper b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/solaris/x86/karaf-wrapper
deleted file mode 100755
index bdec254..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/solaris/x86/karaf-wrapper
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/solaris/x86/libwrapper.so b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/solaris/x86/libwrapper.so
deleted file mode 100755
index 963ff49..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/solaris/x86/libwrapper.so
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/unix/karaf-service b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/unix/karaf-service
deleted file mode 100755
index a9a741d..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/unix/karaf-service
+++ /dev/null
@@ -1,552 +0,0 @@
-#! /bin/sh
-
-# ------------------------------------------------------------------------
-# 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.
-# ------------------------------------------------------------------------
-
-# If not set, try to determine the JAVA_HOME using the JDK and fall back to JRE
-if [ `command -v readlink` ]; then
-  [ -z $JAVA_HOME ] && [ -x /usr/bin/javac ] && export JAVA_HOME="$(readlink -f /usr/bin/javac | sed 's:/bin/javac::')"
-  [ -z $JAVA_HOME ] && [ -x /usr/bin/java ] && export JAVA_HOME="$(readlink -f /usr/bin/java | sed 's:/bin/java::')"
-fi
-
-# Application
-APP_NAME="${name}"
-APP_LONG_NAME="${displayName}"
-
-# Wrapper
-WRAPPER_CMD="${karaf.base}/bin/${APP_NAME}-wrapper"
-WRAPPER_CONF="${karaf.base}/etc/${APP_NAME}-wrapper.conf"
-
-# Priority at which to run the wrapper.  See "man nice" for valid priorities.
-#  nice is only used if a priority is specified.
-PRIORITY=
-
-# Location of the data folder.
-DATADIR="${karaf.data}"
-
-# Location of the pid file.
-PIDDIR="${karaf.data}"
-
-# If uncommented, causes the Wrapper to be shutdown using an anchor file.
-#  When launched with the 'start' command, it will also ignore all INT and
-#  TERM signals.
-#IGNORE_SIGNALS=true
-
-# If specified, the Wrapper will be run as the specified user.
-# IMPORTANT - Make sure that the user has the required privileges to write
-#  the PID file and wrapper.log files.  Failure to be able to write the log
-#  file will cause the Wrapper to exit without any way to write out an error
-#  message.
-# NOTE - This will set the user which is used to run the Wrapper as well as
-#  the JVM and is not useful in situations where a privileged resource or
-#  port needs to be allocated prior to the user being changed.
-#RUN_AS_USER=
-
-# The following two lines are used by the chkconfig command. Change as is
-#  appropriate for your application.  They should remain commented.
-# chkconfig: 2345 20 80
-# description: ${displayName}
-
-# Do not modify anything beyond this point
-#-----------------------------------------------------------------------------
-
-# Get the fully qualified path to the script
-case $0 in
-    /*)
-        SCRIPT="$0"
-        ;;
-    *)
-        PWD=`pwd`
-        SCRIPT="$PWD/$0"
-        ;;
-esac
-
-# Resolve the true real path without any sym links.
-CHANGED=true
-while [ "X$CHANGED" != "X" ]
-do
-    # Change spaces to ":" so the tokens can be parsed.
-    SCRIPT=`echo $SCRIPT | sed -e 's; ;:;g'`
-    # Get the real path to this script, resolving any symbolic links
-    TOKENS=`echo $SCRIPT | sed -e 's;/; ;g'`
-    REALPATH=
-    for C in $TOKENS; do
-        REALPATH="$REALPATH/$C"
-        while [ -h "$REALPATH" ] ; do
-            LS="`ls -ld "$REALPATH"`"
-            LINK="`expr "$LS" : '.*-> \(.*\)$'`"
-            if expr "$LINK" : '/.*' > /dev/null; then
-                REALPATH="$LINK"
-            else
-                REALPATH="`dirname "$REALPATH"`""/$LINK"
-            fi
-        done
-    done
-    # Change ":" chars back to spaces.
-    REALPATH=`echo $REALPATH | sed -e 's;:; ;g'`
-
-    if [ "$REALPATH" = "$SCRIPT" ]
-    then
-        CHANGED=""
-    else
-        SCRIPT="$REALPATH"
-    fi
-done
-
-# Change the current directory to the location of the script
-cd "`dirname "$REALPATH"`"
-REALDIR=`pwd`
-
-# If the PIDDIR is relative, set its value relative to the full REALPATH to avoid problems if
-#  the working directory is later changed.
-FIRST_CHAR=`echo $PIDDIR | cut -c1,1`
-if [ "$FIRST_CHAR" != "/" ]
-then
-    PIDDIR=$REALDIR/$PIDDIR
-fi
-# Same test for WRAPPER_CMD
-FIRST_CHAR=`echo $WRAPPER_CMD | cut -c1,1`
-if [ "$FIRST_CHAR" != "/" ]
-then
-    WRAPPER_CMD=$REALDIR/$WRAPPER_CMD
-fi
-# Same test for WRAPPER_CONF
-FIRST_CHAR=`echo $WRAPPER_CONF | cut -c1,1`
-if [ "$FIRST_CHAR" != "/" ]
-then
-    WRAPPER_CONF=$REALDIR/$WRAPPER_CONF
-fi
-
-# Process ID
-ANCHORFILE="$PIDDIR/$APP_NAME.anchor"
-PIDFILE="$PIDDIR/$APP_NAME.pid"
-LOCKDIR="/var/lock/subsys"
-LOCKFILE="$LOCKDIR/$APP_NAME"
-pid=""
-
-# Resolve the location of the 'ps' command
-PSEXE="/usr/bin/ps"
-if [ ! -x $PSEXE ]
-then
-    PSEXE="/bin/ps"
-    if [ ! -x $PSEXE ]
-    then
-        echo "Unable to locate 'ps'."
-        echo "Please report this message along with the location of the command on your system."
-        exit 1
-    fi
-fi
-
-# Resolve the os
-DIST_OS=`uname -s | tr [:upper:] [:lower:] | tr -d [:blank:]`
-case "$DIST_OS" in
-    'sunos')
-        DIST_OS="solaris"
-        ;;
-    'hp-ux' | 'hp-ux64')
-        DIST_OS="hpux"
-        ;;
-    'darwin')
-        DIST_OS="macosx"
-        ;;
-    'unix_sv')
-        DIST_OS="unixware"
-        ;;
-esac
-
-# Resolve the architecture
-DIST_ARCH=`uname -p | tr [:upper:] [:lower:] | tr -d [:blank:]`
-if [ "$DIST_ARCH" = "unknown" ]
-then
-    DIST_ARCH=`uname -m | tr [:upper:] [:lower:] | tr -d [:blank:]`
-fi
-case "$DIST_ARCH" in
-    'amd64' | 'ia32' | 'ia64' | 'i386' | 'i486' | 'i586' | 'i686' | 'x86_64')
-        DIST_ARCH="x86"
-        ;;
-    'ip27')
-        DIST_ARCH="mips"
-        ;;
-    'power' | 'powerpc' | 'power_pc' | 'ppc64')
-        DIST_ARCH="ppc"
-        ;;
-    'pa_risc' | 'pa-risc')
-        DIST_ARCH="parisc"
-        ;;
-    'sun4u' | 'sparcv9')
-        DIST_ARCH="sparc"
-        ;;
-    '9000/800')
-        DIST_ARCH="parisc"
-        ;;
-esac
-
-# Decide on the wrapper binary to use.
-# If a 32-bit wrapper binary exists then it will work on 32 or 64 bit
-#  platforms, if the 64-bit binary exists then the distribution most
-#  likely wants to use long names.  Otherwise, look for the default.
-# For macosx, we also want to look for universal binaries.
-WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32"
-if [ -x $WRAPPER_TEST_CMD ]
-then
-    WRAPPER_CMD="$WRAPPER_TEST_CMD"
-else
-    if [ "$DIST_OS" = "macosx" ]
-    then
-        WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-universal-32"
-        if [ -x $WRAPPER_TEST_CMD ]
-        then
-            WRAPPER_CMD="$WRAPPER_TEST_CMD"
-        else
-            WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64"
-            if [ -x $WRAPPER_TEST_CMD ]
-            then
-                WRAPPER_CMD="$WRAPPER_TEST_CMD"
-            else
-                WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-universal-64"
-                if [ -x $WRAPPER_TEST_CMD ]
-                then
-                    WRAPPER_CMD="$WRAPPER_TEST_CMD"
-                else
-                    if [ ! -x $WRAPPER_CMD ]
-                    then
-                        echo "Unable to locate any of the following binaries:"
-                        echo "  $WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32"
-                        echo "  $WRAPPER_CMD-$DIST_OS-universal-32"
-                        echo "  $WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64"
-                        echo "  $WRAPPER_CMD-$DIST_OS-universal-64"
-                        echo "  $WRAPPER_CMD"
-                        exit 1
-                    fi
-                fi
-            fi
-        fi
-    else
-        WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64"
-        if [ -x $WRAPPER_TEST_CMD ]
-        then
-            WRAPPER_CMD="$WRAPPER_TEST_CMD"
-        else
-            if [ ! -x $WRAPPER_CMD ]
-            then
-                echo "Unable to locate any of the following binaries:"
-                echo "  $WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32"
-                echo "  $WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64"
-                echo "  $WRAPPER_CMD"
-                exit 1
-            fi
-        fi
-    fi
-fi
-
-# Build the nice clause
-if [ "X$PRIORITY" = "X" ]
-then
-    CMDNICE=""
-else
-    CMDNICE="nice -$PRIORITY"
-fi
-
-# Build the anchor file clause.
-if [ "X$IGNORE_SIGNALS" = "X" ]
-then
-   ANCHORPROP=
-   IGNOREPROP=
-else
-   ANCHORPROP=wrapper.anchorfile=$ANCHORFILE
-   IGNOREPROP=wrapper.ignore_signals=TRUE
-fi
-
-# Build the lock file clause.  Only create a lock file if the lock directory exists on this platform.
-if [ -d $LOCKDIR ]
-then
-    LOCKPROP=wrapper.lockfile=$LOCKFILE
-else
-    LOCKPROP=
-fi
-
-checkUser() {
-    # Check the configured user.  If necessary rerun this script as the desired user.
-    if [ "X$RUN_AS_USER" != "X" ]
-    then
-        # Resolve the location of the 'id' command
-        IDEXE="/usr/xpg4/bin/id"
-        if [ ! -x $IDEXE ]
-        then
-            IDEXE="/usr/bin/id"
-            if [ ! -x $IDEXE ]
-            then
-                echo "Unable to locate 'id'."
-                echo "Please report this message along with the location of the command on your system."
-                exit 1
-            fi
-        fi
-
-        if [ "`$IDEXE -u -n`" = "$RUN_AS_USER" ]
-        then
-            # Already running as the configured user.  Avoid password prompts by not calling su.
-            RUN_AS_USER=""
-        fi
-    fi
-    if [ "X$RUN_AS_USER" != "X" ]
-    then
-        # If LOCKPROP and $RUN_AS_USER are defined then the new user will most likely not be
-        # able to create the lock file.  The Wrapper will be able to update this file once it
-        # is created but will not be able to delete it on shutdown.  If $2 is defined then
-        # the lock file should be created for the current command
-        if [ "X$LOCKPROP" != "X" ]
-        then
-            if [ "X$2" != "X" ]
-            then
-                # Resolve the primary group
-                RUN_AS_GROUP=`groups $RUN_AS_USER | awk '{print $3}' | tail -1`
-                if [ "X$RUN_AS_GROUP" = "X" ]
-                then
-                    RUN_AS_GROUP=RUN_AS_USER
-                fi
-                touch $LOCKFILE
-                chown $RUN_AS_USER:$RUN_AS_GROUP $LOCKFILE
-            fi
-        fi
-
-        # Still want to change users, recurse.  This means that the user will only be
-        #  prompted for a password once.
-        su -m $RUN_AS_USER -s /bin/sh -c "$REALPATH $1"
-
-        # Now that we are the original user again, we may need to clean up the lock file.
-        if [ "X$LOCKPROP" != "X" ]
-        then
-            getpid
-            if [ "X$pid" = "X" ]
-            then
-                # Wrapper is not running so make sure the lock file is deleted.
-                if [ -f $LOCKFILE ]
-                then
-                    rm $LOCKFILE
-                fi
-            fi
-        fi
-
-        exit 0
-    fi
-}
-
-getpid() {
-    if [ -f $PIDFILE ]
-    then
-        if [ -r $PIDFILE ]
-        then
-            pid=`cat $PIDFILE`
-            if [ "X$pid" != "X" ]
-            then
-                # It is possible that 'a' process with the pid exists but that it is not the
-                #  correct process.  This can happen in a number of cases, but the most
-                #  common is during system startup after an unclean shutdown.
-                # The ps statement below looks for the specific wrapper command running as
-                #  the pid.  If it is not found then the pid file is considered to be stale.
-                pidtest=`$PSEXE -p $pid -o command | grep $WRAPPER_CMD | tail -1`
-                if [ "X$pidtest" = "X" ]
-                then
-                    # This is a stale pid file.
-                    rm -f $PIDFILE
-                    echo "Removed stale pid file: $PIDFILE"
-                    pid=""
-                fi
-            fi
-        else
-            echo "Cannot read $PIDFILE."
-            exit 1
-        fi
-    fi
-}
-
-testpid() {
-    pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1`
-    if [ "X$pid" = "X" ]
-    then
-        # Process is gone so remove the pid file.
-        rm -f $PIDFILE
-        pid=""
-    fi
-}
-
-console() {
-    echo "Running $APP_LONG_NAME..."
-    getpid
-    if [ "X$pid" = "X" ]
-    then
-        COMMAND_LINE="$CMDNICE $WRAPPER_CMD $WRAPPER_CONF wrapper.syslog.ident=$APP_NAME wrapper.pidfile=$PIDFILE $ANCHORPROP $LOCKPROP"
-        exec $COMMAND_LINE
-    else
-        echo "$APP_LONG_NAME is already running."
-        exit 1
-    fi
-}
-
-start() {
-    echo "Starting $APP_LONG_NAME..."
-    getpid
-    if [ "X$pid" = "X" ]
-    then
-        if [ ! -d $DATADIR ]; then
-            mkdir $DATADIR
-        fi
-        if [ ! -d $DATADIR/log ]; then
-            mkdir $DATADIR/log
-        fi
-        COMMAND_LINE="$CMDNICE $WRAPPER_CMD $WRAPPER_CONF wrapper.syslog.ident=$APP_NAME wrapper.pidfile=$PIDFILE wrapper.daemonize=TRUE $ANCHORPROP $IGNOREPROP $LOCKPROP"
-        exec $COMMAND_LINE
-    else
-        echo "$APP_LONG_NAME is already running."
-        exit 1
-    fi
-}
-
-stopit() {
-    echo "Stopping $APP_LONG_NAME..."
-    getpid
-    if [ "X$pid" = "X" ]
-    then
-        echo "$APP_LONG_NAME was not running."
-    else
-        if [ "X$IGNORE_SIGNALS" = "X" ]
-        then
-            # Running so try to stop it.
-            kill $pid
-            if [ $? -ne 0 ]
-            then
-                # An explanation for the failure should have been given
-                echo "Unable to stop $APP_LONG_NAME."
-                exit 1
-            fi
-        else
-            rm -f $ANCHORFILE
-            if [ -f $ANCHORFILE ]
-            then
-                # An explanation for the failure should have been given
-                echo "Unable to stop $APP_LONG_NAME."
-                exit 1
-            fi
-        fi
-
-        # We can not predict how long it will take for the wrapper to
-        #  actually stop as it depends on settings in wrapper.conf.
-        #  Loop until it does.
-        savepid=$pid
-        CNT=0
-        TOTCNT=0
-        while [ "X$pid" != "X" ]
-        do
-            # Show a waiting message every 5 seconds.
-            if [ "$CNT" -lt "5" ]
-            then
-                CNT=`expr $CNT + 1`
-            else
-                echo "Waiting for $APP_LONG_NAME to exit..."
-                CNT=0
-            fi
-            TOTCNT=`expr $TOTCNT + 1`
-
-            sleep 1
-
-            testpid
-        done
-
-        pid=$savepid
-        testpid
-        if [ "X$pid" != "X" ]
-        then
-            echo "Failed to stop $APP_LONG_NAME."
-            exit 1
-        else
-            echo "Stopped $APP_LONG_NAME."
-        fi
-    fi
-}
-
-status() {
-    getpid
-    if [ "X$pid" = "X" ]
-    then
-        echo "$APP_LONG_NAME is not running."
-        exit 1
-    else
-        echo "$APP_LONG_NAME is running ($pid)."
-        exit 0
-    fi
-}
-
-dump() {
-    echo "Dumping $APP_LONG_NAME..."
-    getpid
-    if [ "X$pid" = "X" ]
-    then
-        echo "$APP_LONG_NAME was not running."
-
-    else
-        kill -3 $pid
-
-        if [ $? -ne 0 ]
-        then
-            echo "Failed to dump $APP_LONG_NAME."
-            exit 1
-        else
-            echo "Dumped $APP_LONG_NAME."
-        fi
-    fi
-}
-
-case "$1" in
-
-    'console')
-        checkUser $1 touchlock
-        console
-        ;;
-
-    'start')
-        checkUser $1 touchlock
-        start
-        ;;
-
-    'stop')
-        checkUser $1
-        stopit
-        ;;
-
-    'restart')
-        checkUser $1 touchlock
-        stopit
-        start
-        ;;
-
-    'status')
-        checkUser $1
-        status
-        ;;
-
-    'dump')
-        checkUser $1
-        dump
-        ;;
-
-    *)
-        echo "Usage: $0 { console | start | stop | restart | status | dump }"
-        exit 1
-        ;;
-esac
-
-exit 0
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/unix/karaf-wrapper.conf b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/unix/karaf-wrapper.conf
deleted file mode 100644
index 262756c..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/unix/karaf-wrapper.conf
+++ /dev/null
@@ -1,130 +0,0 @@
-# ------------------------------------------------------------------------
-# 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.
-# ------------------------------------------------------------------------
-
-#********************************************************************
-# Wrapper Properties
-#********************************************************************
-set.default.JAVA_HOME=${java.home}
-set.default.KARAF_HOME=${karaf.home}
-set.default.KARAF_BASE=${karaf.base}
-set.default.KARAF_DATA=${karaf.data}
-
-# Java Application
-wrapper.working.dir=%KARAF_BASE%
-wrapper.java.command=java
-wrapper.java.mainclass=org.apache.karaf.shell.wrapper.Main
-wrapper.java.classpath.1=%KARAF_BASE%/lib/karaf-wrapper.jar
-wrapper.java.classpath.2=%KARAF_HOME%/lib/karaf.jar
-wrapper.java.classpath.3=%KARAF_HOME%/lib/karaf-jaas-boot.jar
-wrapper.java.classpath.4=%KARAF_BASE%/lib/karaf-wrapper-main.jar
-wrapper.java.library.path.1=%KARAF_BASE%/lib/
-
-# Application Parameters.  Add parameters as needed starting from 1
-#wrapper.app.parameter.1=
-
-# JVM Parameters            
-# note that n is the parameter number starting from 1.
-wrapper.java.additional.1=-Dkaraf.home=%KARAF_HOME%
-wrapper.java.additional.2=-Dkaraf.base=%KARAF_BASE%
-wrapper.java.additional.3=-Dkaraf.data=%KARAF_DATA%
-wrapper.java.additional.4=-Dcom.sun.management.jmxremote
-wrapper.java.additional.5=-Dkaraf.startLocalConsole=false
-wrapper.java.additional.6=-Dkaraf.startRemoteShell=true
-wrapper.java.additional.7=-Djava.endorsed.dirs=%JAVA_HOME%/jre/lib/endorsed:%JAVA_HOME%/lib/endorsed:%KARAF_HOME%/lib/endorsed
-wrapper.java.additional.8=-Djava.ext.dirs=%JAVA_HOME%/jre/lib/ext:%JAVA_HOME%/lib/ext:%KARAF_HOME%/lib/ext
-
-# Uncomment to enable jmx
-#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.port=1616
-#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.authenticate=false
-#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.ssl=false
-
-# Uncomment to enable YourKit profiling
-#wrapper.java.additional.n=-Xrunyjpagent
-
-# Uncomment to enable remote debugging
-#wrapper.java.additional.n=-Xdebug -Xnoagent -Djava.compiler=NONE
-#wrapper.java.additional.n=-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
-
-# Initial Java Heap Size (in MB)
-#wrapper.java.initmemory=3
-
-# Maximum Java Heap Size (in MB)
-wrapper.java.maxmemory=512
-
-
-#********************************************************************
-# Wrapper Logging Properties
-#********************************************************************
-# Format of output for the console.  (See docs for formats)
-wrapper.console.format=PM
-
-# Log Level for console output.  (See docs for log levels)
-wrapper.console.loglevel=INFO
-
-# Log file to use for wrapper output logging.
-wrapper.logfile=%KARAF_DATA%/log/wrapper.log
-
-# Format of output for the log file.  (See docs for formats)
-wrapper.logfile.format=LPTM
-
-# Log Level for log file output.  (See docs for log levels)
-wrapper.logfile.loglevel=INFO
-
-# Maximum size that the log file will be allowed to grow to before
-#  the log is rolled. Size is specified in bytes.  The default value
-#  of 0, disables log rolling.  May abbreviate with the 'k' (kb) or
-#  'm' (mb) suffix.  For example: 10m = 10 megabytes.
-wrapper.logfile.maxsize=10m
-
-# Maximum number of rolled log files which will be allowed before old
-#  files are deleted.  The default value of 0 implies no limit.
-wrapper.logfile.maxfiles=5
-
-# Log Level for sys/event log output.  (See docs for log levels)
-wrapper.syslog.loglevel=NONE
-
-#********************************************************************
-# Wrapper Windows Properties
-#********************************************************************
-# Title to use when running as a console
-wrapper.console.title=${name}
-
-#********************************************************************
-# Wrapper Windows NT/2000/XP Service Properties
-#********************************************************************
-# WARNING - Do not modify any of these properties when an application
-#  using this configuration file has been installed as a service.
-#  Please uninstall the service before modifying this section.  The
-#  service can then be reinstalled.
-
-# Name of the service
-wrapper.ntservice.name=${name}
-
-# Display name of the service
-wrapper.ntservice.displayname=${displayName}
-
-# Description of the service
-wrapper.ntservice.description=${description}
-
-# Service dependencies.  Add dependencies as needed starting from 1
-wrapper.ntservice.dependency.1=
-
-# Mode in which the service is installed.  AUTO_START or DEMAND_START
-wrapper.ntservice.starttype=${startType}
-
-# Allow the service to interact with the desktop.
-wrapper.ntservice.interactive=false
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows/karaf-service.bat b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows/karaf-service.bat
deleted file mode 100644
index f29dccd..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows/karaf-service.bat
+++ /dev/null
@@ -1,50 +0,0 @@
-@echo off
-
-REM ------------------------------------------------------------------------
-REM Licensed to the Apache Software Foundation (ASF) under one or more
-REM contributor license agreements.  See the NOTICE file distributed with
-REM this work for additional information regarding copyright ownership.
-REM The ASF licenses this file to You under the Apache License, Version 2.0
-REM (the "License"); you may not use this file except in compliance with
-REM the License.  You may obtain a copy of the License at
-REM
-REM http://www.apache.org/licenses/LICENSE-2.0
-REM
-REM Unless required by applicable law or agreed to in writing, software
-REM distributed under the License is distributed on an "AS IS" BASIS,
-REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-REM See the License for the specific language governing permissions and
-REM limitations under the License.
-REM ------------------------------------------------------------------------
-
-setlocal
-
-set APP_NAME=${name}
-set APP_LONG_NAME=${displayName}
-set APP_BASE=${karaf.base}
-
-if ""%1"" == ""run"" goto doRun
-if ""%1"" == ""install"" goto doInstall
-if ""%1"" == ""remove"" goto doRemove
-
-echo Usage:  karaf-service ( commands ... )
-echo commands:
-echo   run               Start %APP_NAME% in the current console
-echo   install           Install %APP_NAME% as a Windows service
-echo   remove            Remove the %APP_NAME% Windows service
-goto end
-
-:doRun
-"%APP_BASE%\bin\%APP_NAME%-wrapper.exe" -c "%APP_BASE%\etc\%APP_NAME%-wrapper.conf"
-goto end
-
-:doInstall
-"%APP_BASE%\bin\%APP_NAME%-wrapper.exe" -i "%APP_BASE%\etc\%APP_NAME%-wrapper.conf"
-goto end
-
-:doRemove
-"%APP_BASE%\bin\%APP_NAME%-wrapper.exe" -r "%APP_BASE%\etc\%APP_NAME%-wrapper.conf"
-goto end
-
-:end
-if not "%PAUSE%" == "" pause
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows/karaf-wrapper.conf b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows/karaf-wrapper.conf
deleted file mode 100644
index 70c56d9..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows/karaf-wrapper.conf
+++ /dev/null
@@ -1,130 +0,0 @@
-# ------------------------------------------------------------------------
-# 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.
-# ------------------------------------------------------------------------
-
-#********************************************************************
-# Wrapper Properties
-#********************************************************************
-set.default.JAVA_HOME=${java.home}
-set.default.KARAF_HOME=${karaf.home}
-set.default.KARAF_BASE=${karaf.base}
-set.default.KARAF_DATA=${karaf.data}
-
-# Java Application
-wrapper.working.dir=%KARAF_BASE%
-wrapper.java.command=java
-wrapper.java.mainclass=org.apache.karaf.shell.wrapper.Main
-wrapper.java.classpath.1=%KARAF_BASE%/lib/karaf-wrapper.jar
-wrapper.java.classpath.2=%KARAF_HOME%/lib/karaf.jar
-wrapper.java.classpath.3=%KARAF_HOME%/lib/karaf-jaas-boot.jar
-wrapper.java.classpath.4=%KARAF_BASE%/lib/karaf-wrapper-main.jar
-wrapper.java.library.path.1=%KARAF_BASE%/lib/
-
-# Application Parameters.  Add parameters as needed starting from 1
-#wrapper.app.parameter.1=
-
-# JVM Parameters
-# note that n is the parameter number starting from 1.
-wrapper.java.additional.1=-Dkaraf.home="%KARAF_HOME%"
-wrapper.java.additional.2=-Dkaraf.base="%KARAF_BASE%"
-wrapper.java.additional.3=-Dkaraf.data="%KARAF_DATA%"
-wrapper.java.additional.4=-Dcom.sun.management.jmxremote
-wrapper.java.additional.5=-Dkaraf.startLocalConsole=false
-wrapper.java.additional.6=-Dkaraf.startRemoteShell=true
-wrapper.java.additional.7=-Djava.endorsed.dirs="%JAVA_HOME%/jre/lib/endorsed;%JAVA_HOME%/lib/endorsed;%KARAF_HOME%/lib/endorsed"
-wrapper.java.additional.8=-Djava.ext.dirs="%JAVA_HOME%/jre/lib/ext;%JAVA_HOME%/lib/ext;%KARAF_HOME%/lib/ext"
-
-# Uncomment to enable jmx
-#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.port=1616
-#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.authenticate=false
-#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.ssl=false
-
-# Uncomment to enable YourKit profiling
-#wrapper.java.additional.n=-Xrunyjpagent
-
-# Uncomment to enable remote debugging
-#wrapper.java.additional.n=-Xdebug -Xnoagent -Djava.compiler=NONE
-#wrapper.java.additional.n=-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
-
-# Initial Java Heap Size (in MB)
-#wrapper.java.initmemory=3
-
-# Maximum Java Heap Size (in MB)
-wrapper.java.maxmemory=512
-
-
-#********************************************************************
-# Wrapper Logging Properties
-#********************************************************************
-# Format of output for the console.  (See docs for formats)
-wrapper.console.format=PM
-
-# Log Level for console output.  (See docs for log levels)
-wrapper.console.loglevel=INFO
-
-# Log file to use for wrapper output logging.
-wrapper.logfile=%KARAF_DATA%/log/wrapper.log
-
-# Format of output for the log file.  (See docs for formats)
-wrapper.logfile.format=LPTM
-
-# Log Level for log file output.  (See docs for log levels)
-wrapper.logfile.loglevel=INFO
-
-# Maximum size that the log file will be allowed to grow to before
-#  the log is rolled. Size is specified in bytes.  The default value
-#  of 0, disables log rolling.  May abbreviate with the 'k' (kb) or
-#  'm' (mb) suffix.  For example: 10m = 10 megabytes.
-wrapper.logfile.maxsize=10m
-
-# Maximum number of rolled log files which will be allowed before old
-#  files are deleted.  The default value of 0 implies no limit.
-wrapper.logfile.maxfiles=5
-
-# Log Level for sys/event log output.  (See docs for log levels)
-wrapper.syslog.loglevel=NONE
-
-#********************************************************************
-# Wrapper Windows Properties
-#********************************************************************
-# Title to use when running as a console
-wrapper.console.title=${name}
-
-#********************************************************************
-# Wrapper Windows NT/2000/XP Service Properties
-#********************************************************************
-# WARNING - Do not modify any of these properties when an application
-#  using this configuration file has been installed as a service.
-#  Please uninstall the service before modifying this section.  The
-#  service can then be reinstalled.
-
-# Name of the service
-wrapper.ntservice.name=${name}
-
-# Display name of the service
-wrapper.ntservice.displayname=${displayName}
-
-# Description of the service
-wrapper.ntservice.description=${description}
-
-# Service dependencies.  Add dependencies as needed starting from 1
-wrapper.ntservice.dependency.1=
-
-# Mode in which the service is installed.  AUTO_START or DEMAND_START
-wrapper.ntservice.starttype=${startType}
-
-# Allow the service to interact with the desktop.
-wrapper.ntservice.interactive=false
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows/karaf-wrapper.exe b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows/karaf-wrapper.exe
deleted file mode 100644
index b4cfc55..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows/karaf-wrapper.exe
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows/wrapper.dll b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows/wrapper.dll
deleted file mode 100644
index cb553c1..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows/wrapper.dll
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows64/karaf-service.bat b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows64/karaf-service.bat
deleted file mode 100644
index f29dccd..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows64/karaf-service.bat
+++ /dev/null
@@ -1,50 +0,0 @@
-@echo off
-
-REM ------------------------------------------------------------------------
-REM Licensed to the Apache Software Foundation (ASF) under one or more
-REM contributor license agreements.  See the NOTICE file distributed with
-REM this work for additional information regarding copyright ownership.
-REM The ASF licenses this file to You under the Apache License, Version 2.0
-REM (the "License"); you may not use this file except in compliance with
-REM the License.  You may obtain a copy of the License at
-REM
-REM http://www.apache.org/licenses/LICENSE-2.0
-REM
-REM Unless required by applicable law or agreed to in writing, software
-REM distributed under the License is distributed on an "AS IS" BASIS,
-REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-REM See the License for the specific language governing permissions and
-REM limitations under the License.
-REM ------------------------------------------------------------------------
-
-setlocal
-
-set APP_NAME=${name}
-set APP_LONG_NAME=${displayName}
-set APP_BASE=${karaf.base}
-
-if ""%1"" == ""run"" goto doRun
-if ""%1"" == ""install"" goto doInstall
-if ""%1"" == ""remove"" goto doRemove
-
-echo Usage:  karaf-service ( commands ... )
-echo commands:
-echo   run               Start %APP_NAME% in the current console
-echo   install           Install %APP_NAME% as a Windows service
-echo   remove            Remove the %APP_NAME% Windows service
-goto end
-
-:doRun
-"%APP_BASE%\bin\%APP_NAME%-wrapper.exe" -c "%APP_BASE%\etc\%APP_NAME%-wrapper.conf"
-goto end
-
-:doInstall
-"%APP_BASE%\bin\%APP_NAME%-wrapper.exe" -i "%APP_BASE%\etc\%APP_NAME%-wrapper.conf"
-goto end
-
-:doRemove
-"%APP_BASE%\bin\%APP_NAME%-wrapper.exe" -r "%APP_BASE%\etc\%APP_NAME%-wrapper.conf"
-goto end
-
-:end
-if not "%PAUSE%" == "" pause
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows64/karaf-wrapper.conf b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows64/karaf-wrapper.conf
deleted file mode 100644
index 70c56d9..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows64/karaf-wrapper.conf
+++ /dev/null
@@ -1,130 +0,0 @@
-# ------------------------------------------------------------------------
-# 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.
-# ------------------------------------------------------------------------
-
-#********************************************************************
-# Wrapper Properties
-#********************************************************************
-set.default.JAVA_HOME=${java.home}
-set.default.KARAF_HOME=${karaf.home}
-set.default.KARAF_BASE=${karaf.base}
-set.default.KARAF_DATA=${karaf.data}
-
-# Java Application
-wrapper.working.dir=%KARAF_BASE%
-wrapper.java.command=java
-wrapper.java.mainclass=org.apache.karaf.shell.wrapper.Main
-wrapper.java.classpath.1=%KARAF_BASE%/lib/karaf-wrapper.jar
-wrapper.java.classpath.2=%KARAF_HOME%/lib/karaf.jar
-wrapper.java.classpath.3=%KARAF_HOME%/lib/karaf-jaas-boot.jar
-wrapper.java.classpath.4=%KARAF_BASE%/lib/karaf-wrapper-main.jar
-wrapper.java.library.path.1=%KARAF_BASE%/lib/
-
-# Application Parameters.  Add parameters as needed starting from 1
-#wrapper.app.parameter.1=
-
-# JVM Parameters
-# note that n is the parameter number starting from 1.
-wrapper.java.additional.1=-Dkaraf.home="%KARAF_HOME%"
-wrapper.java.additional.2=-Dkaraf.base="%KARAF_BASE%"
-wrapper.java.additional.3=-Dkaraf.data="%KARAF_DATA%"
-wrapper.java.additional.4=-Dcom.sun.management.jmxremote
-wrapper.java.additional.5=-Dkaraf.startLocalConsole=false
-wrapper.java.additional.6=-Dkaraf.startRemoteShell=true
-wrapper.java.additional.7=-Djava.endorsed.dirs="%JAVA_HOME%/jre/lib/endorsed;%JAVA_HOME%/lib/endorsed;%KARAF_HOME%/lib/endorsed"
-wrapper.java.additional.8=-Djava.ext.dirs="%JAVA_HOME%/jre/lib/ext;%JAVA_HOME%/lib/ext;%KARAF_HOME%/lib/ext"
-
-# Uncomment to enable jmx
-#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.port=1616
-#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.authenticate=false
-#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.ssl=false
-
-# Uncomment to enable YourKit profiling
-#wrapper.java.additional.n=-Xrunyjpagent
-
-# Uncomment to enable remote debugging
-#wrapper.java.additional.n=-Xdebug -Xnoagent -Djava.compiler=NONE
-#wrapper.java.additional.n=-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
-
-# Initial Java Heap Size (in MB)
-#wrapper.java.initmemory=3
-
-# Maximum Java Heap Size (in MB)
-wrapper.java.maxmemory=512
-
-
-#********************************************************************
-# Wrapper Logging Properties
-#********************************************************************
-# Format of output for the console.  (See docs for formats)
-wrapper.console.format=PM
-
-# Log Level for console output.  (See docs for log levels)
-wrapper.console.loglevel=INFO
-
-# Log file to use for wrapper output logging.
-wrapper.logfile=%KARAF_DATA%/log/wrapper.log
-
-# Format of output for the log file.  (See docs for formats)
-wrapper.logfile.format=LPTM
-
-# Log Level for log file output.  (See docs for log levels)
-wrapper.logfile.loglevel=INFO
-
-# Maximum size that the log file will be allowed to grow to before
-#  the log is rolled. Size is specified in bytes.  The default value
-#  of 0, disables log rolling.  May abbreviate with the 'k' (kb) or
-#  'm' (mb) suffix.  For example: 10m = 10 megabytes.
-wrapper.logfile.maxsize=10m
-
-# Maximum number of rolled log files which will be allowed before old
-#  files are deleted.  The default value of 0 implies no limit.
-wrapper.logfile.maxfiles=5
-
-# Log Level for sys/event log output.  (See docs for log levels)
-wrapper.syslog.loglevel=NONE
-
-#********************************************************************
-# Wrapper Windows Properties
-#********************************************************************
-# Title to use when running as a console
-wrapper.console.title=${name}
-
-#********************************************************************
-# Wrapper Windows NT/2000/XP Service Properties
-#********************************************************************
-# WARNING - Do not modify any of these properties when an application
-#  using this configuration file has been installed as a service.
-#  Please uninstall the service before modifying this section.  The
-#  service can then be reinstalled.
-
-# Name of the service
-wrapper.ntservice.name=${name}
-
-# Display name of the service
-wrapper.ntservice.displayname=${displayName}
-
-# Description of the service
-wrapper.ntservice.description=${description}
-
-# Service dependencies.  Add dependencies as needed starting from 1
-wrapper.ntservice.dependency.1=
-
-# Mode in which the service is installed.  AUTO_START or DEMAND_START
-wrapper.ntservice.starttype=${startType}
-
-# Allow the service to interact with the desktop.
-wrapper.ntservice.interactive=false
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows64/karaf-wrapper.exe b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows64/karaf-wrapper.exe
deleted file mode 100755
index db2ddda..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows64/karaf-wrapper.exe
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows64/wrapper.dll b/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows64/wrapper.dll
deleted file mode 100644
index f07fc9e..0000000
--- a/karaf-2.3.x/shell/wrapper/src/main/resources/org/apache/karaf/shell/wrapper/windows64/wrapper.dll
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/tooling/cmdhelp-maven-plugin/NOTICE b/karaf-2.3.x/tooling/cmdhelp-maven-plugin/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/tooling/cmdhelp-maven-plugin/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/tooling/cmdhelp-maven-plugin/pom.xml b/karaf-2.3.x/tooling/cmdhelp-maven-plugin/pom.xml
deleted file mode 100644
index 388ad6a..0000000
--- a/karaf-2.3.x/tooling/cmdhelp-maven-plugin/pom.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.tooling</groupId>
-        <artifactId>tooling</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>cmdhelp-maven-plugin</artifactId>
-    <packaging>maven-plugin</packaging>
-    <name>Apache Karaf :: Tooling :: Maven2 Command Help plugin</name>
-    <description>A Maven 2 plugin for extracting Karaf command helps into markup.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.maven</groupId>
-            <artifactId>maven-plugin-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.maven</groupId>
-            <artifactId>maven-project</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>maven-bundle-plugin</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-simple</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.xbean</groupId>
-            <artifactId>xbean-finder-shaded</artifactId>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/karaf-2.3.x/tooling/cmdhelp-maven-plugin/src/main/java/org/apache/karaf/tooling/cmdhelp/CmdHelpMojo.java b/karaf-2.3.x/tooling/cmdhelp-maven-plugin/src/main/java/org/apache/karaf/tooling/cmdhelp/CmdHelpMojo.java
deleted file mode 100644
index 1d8d91b..0000000
--- a/karaf-2.3.x/tooling/cmdhelp-maven-plugin/src/main/java/org/apache/karaf/tooling/cmdhelp/CmdHelpMojo.java
+++ /dev/null
@@ -1,494 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.tooling.cmdhelp;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.OutputStreamWriter;
-import java.io.PrintStream;
-import java.io.Writer;
-import java.lang.reflect.Field;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-import org.apache.felix.gogo.commands.Action;
-import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Command;
-import org.apache.felix.gogo.commands.Option;
-import org.apache.felix.gogo.commands.basic.ActionPreparator;
-import org.apache.karaf.shell.console.commands.BlueprintCommand;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.project.MavenProject;
-import org.apache.xbean.finder.ClassFinder;
-import org.apache.felix.service.command.CommandSession;
-import org.fusesource.jansi.Ansi;
-
-/**
- * Generates help (in scalate or docbook format) for Karaf commands
- *
- * @goal cmdhelp
- * @phase generate-resources
- * @execute phase="generate-resources"
- * @requiresDependencyResolution runtime
- * @inheritByDefault false
- * @description Generates help for Karaf commands
- */
-public class CmdHelpMojo extends AbstractMojo {
-
-    /**
-     * The maven project.
-     *
-     * @parameter expression="${project}"
-     * @required
-     */
-    protected MavenProject project;
-
-    /**
-     * The output folder
-     *
-     * @parameter default-value="${project.build.directory}/docbkx/sources"
-     */
-    protected File targetFolder;
-
-    /**
-     * The output format
-     *
-     * @parameter default-value="docbx";
-     */
-    protected String format;
-
-    /**
-     * The classloader to use for loading the commands
-     *
-     * @parameter default-value="project"
-     */
-    protected String classLoader;
-
-    /**
-     * Adds the --help option to every commands documentation
-     *
-     * @parameter default-value="true"
-     */
-    protected boolean includeHelpOption;
-
-    private static final String FORMAT_CONF = "conf";
-    private static final String FORMAT_DOCBX = "docbx";
-
-    public void execute() throws MojoExecutionException, MojoFailureException {
-        try {
-            if (!FORMAT_DOCBX.equals(format) && !FORMAT_CONF.equals(format)) {
-                throw new MojoFailureException("Unsupported format: " + format + ". Supported formats are: docbx or conf.");
-            }
-            if (!targetFolder.exists()) {
-                targetFolder.mkdirs();
-            }
-
-            ClassFinder finder;
-            if ("project".equals(classLoader)) {
-                List<URL> urls = new ArrayList<URL>();
-                for (Object object : project.getCompileClasspathElements()) {
-                    String path = (String) object;
-                    urls.add(new File(path).toURI().toURL());
-                }
-                ClassLoader loader = new URLClassLoader(urls.toArray(new URL[urls.size()]), getClass().getClassLoader());
-                finder = new ClassFinder(loader, urls);
-            } else if ("plugin".equals(classLoader)) {
-                finder = new ClassFinder(getClass().getClassLoader());
-            } else {
-                throw new MojoFailureException("classLoader attribute must be 'project' or 'plugin'");
-            }
-            List<Class<?>> classes = finder.findAnnotatedClasses(Command.class);
-            if (classes.isEmpty()) {
-                throw new MojoFailureException("No command found");
-            }
-
-            Map<String, Set<String>> commands = new TreeMap<String, Set<String>>();
-
-            for (Class clazz : classes) {
-                try {
-                    String help = new HelpPrinter(clazz).printHelp(format, includeHelpOption);
-                    Command cmd = (Command) clazz.getAnnotation(Command.class);
-                    File output = null;
-
-                    // skip the *-help command
-                    if (cmd.scope().equals("*")) continue;
-
-                    if (FORMAT_DOCBX.equals(format)) {
-                        output = new File(targetFolder, cmd.scope() + "-" + cmd.name() + ".xml");
-                    } else if (FORMAT_CONF.equals(format)) {
-                        output = new File(targetFolder, cmd.scope() + "-" + cmd.name() + ".conf");
-                    }
-                    Writer writer = new OutputStreamWriter(new FileOutputStream(output));
-                    writer.write(help);
-                    writer.close();
-
-                    Set<String> cmds = commands.get(cmd.scope());
-                    if (cmds == null) {
-                        cmds = new TreeSet<String>();
-                        commands.put(cmd.scope(), cmds);
-                    }
-                    cmds.add(cmd.name());
-                    getLog().info("Found command: " + cmd.scope() + ":" + cmd.name());
-                } catch (Exception e) {
-                    getLog().warn("Unable to write help for " + clazz.getName(), e);
-                }
-            }
-
-            if (FORMAT_DOCBX.equals(format)) {
-                PrintStream writer = new PrintStream(new FileOutputStream(new File(targetFolder, "commands.xml")));
-                writer.println("<chapter id='commands' xmlns:xi=\"http://www.w3.org/2001/XInclude\">");
-                writer.println("  <title>Commands</title>");
-                writer.println("  <toc></toc>");
-                for (String key : commands.keySet()) {
-                    writer.println("  <section id='commands-" + key + "'>");
-                    writer.println("    <title>" + key + "</title>");
-                    for (String cmd : commands.get(key)) {
-                        writer.println("    <xi:include href='" + key + "-" + cmd + ".xml' parse='xml'/>");
-                    }
-                    writer.println("  </section>");
-                }
-                writer.println("</chapter>");
-                writer.close();
-            } else if (FORMAT_CONF.equals(format)) {
-                PrintStream writer = new PrintStream(new FileOutputStream(new File(targetFolder, "commands.conf")));
-                writer.println("h1. Commands");
-                writer.println();
-                for (String key : commands.keySet()) {
-                    writer.println("h2. " + key);
-                    writer.println();
-                    for (String cmd : commands.get(key)) {
-                        writer.println("* [" + key + ":" + cmd + "|" + key + "-" + cmd + "]");
-                    }
-                    writer.println();
-                }
-                writer.close();
-            }
-
-        } catch (Exception e) {
-            throw new MojoExecutionException("Error building commands help", e);
-        }
-    }
-
-    public static class HelpPrinter extends BlueprintCommand {
-
-        private final Class<Action> actionClass;
-
-        public HelpPrinter(Class<Action> actionClass) {
-            this.actionClass = actionClass;
-        }
-
-        public String printHelp(String format, boolean includeHelpOption) throws Exception {
-            PrintStream oldout = System.out;
-            try {
-                Action action = actionClass.newInstance();
-                CommandSession session = new DummyCommandSession();
-                ByteArrayOutputStream baos = new ByteArrayOutputStream();
-                PrintStream newout = new PrintStream(baos);
-                System.setOut(newout);
-                ActionPreparator preparator;
-                if (FORMAT_DOCBX.equals(format)) {
-                    preparator = new DocbxPreparator(includeHelpOption);
-                } else {
-                    preparator = new ConfPreparator(includeHelpOption);
-                }
-                preparator.prepare(action, session, Collections.<Object>singletonList("--help"));
-                newout.close();
-                baos.close();
-                return baos.toString();
-            } finally {
-                System.setOut(oldout);
-            }
-        }
-
-        protected class DocbxPreparator extends BlueprintActionPreparator {
-
-            boolean includeHelpOption;
-
-            DocbxPreparator(boolean includeHelpOption) {
-                this.includeHelpOption = includeHelpOption;
-            }
-
-            @Override
-            protected void printUsage(CommandSession session, Action action, Map<Option,Field> optionsMap, Map<Argument,Field> argsMap, PrintStream out)
-            {
-                Command command = action.getClass().getAnnotation(Command.class);
-                List<Argument> arguments = new ArrayList<Argument>(argsMap.keySet());
-                Collections.sort(arguments, new Comparator<Argument>() {
-                    public int compare(Argument o1, Argument o2) {
-                        return Integer.valueOf(o1.index()).compareTo(Integer.valueOf(o2.index()));
-                    }
-                });
-                Set<Option> options = new HashSet<Option>(optionsMap.keySet());
-                if (includeHelpOption) options.add(HELP);
-
-                out.println("<section>");
-                out.print("  <title>");
-                out.print(command.scope());
-                out.print(":");
-                out.print(command.name());
-                out.println("</title>");
-                out.println("  <section>");
-                out.println("    <title>Description</title>");
-                out.println("    <para>");
-                out.println(command.description());
-                out.println("    </para>");
-                out.println("  </section>");
-
-                StringBuffer syntax = new StringBuffer();
-                syntax.append(String.format("%s:%s", command.scope(), command.name()));
-                if (options.size() > 0) {
-                    syntax.append(" [options]");
-                }
-                if (arguments.size() > 0) {
-                    syntax.append(' ');
-                    for (Argument argument : arguments) {
-                        syntax.append(String.format(argument.required() ? "%s " : "[%s] ", argument.name()));
-                    }
-                }
-                out.println("  <section>");
-                out.println("    <title>Syntax</title>");
-                out.println("    <para>");
-                out.println(syntax.toString());
-                out.println("    </para>");
-                out.println("  </section>");
-
-                if (arguments.size() > 0)
-                {
-                    out.println("  <section>");
-                    out.println("    <title>Arguments</title>");
-                    out.println("    <informaltable>");
-                    for (Argument argument : arguments)
-                    {
-                        out.println("    <tr>");
-                        out.println("      <td>" + argument.name() + "</td>");
-                        String description = argument.description();
-                        if (!argument.required()) {
-                            try {
-                                argsMap.get(argument).setAccessible(true);
-                                Object o = argsMap.get(argument).get(action);
-                                if (o != null
-                                    && (!(o instanceof Boolean) || ((Boolean) o))
-                                    && (!(o instanceof Number) || ((Number) o).doubleValue() != 0.0)) {
-                                    description += " (defaults to " + o.toString() + ")";
-                                }
-                            } catch (Exception e) {
-                                // Ignore
-                            }
-                        }
-                        out.println("     <td>" + description + "</td>");
-                        out.println("    </tr>");
-                    }
-
-                    out.println("    </informaltable>");
-                    out.println("  </section>");
-                }
-                if (options.size() > 0)
-                {
-                    out.println("  <section>");
-                    out.println("    <title>Options</title>");
-                    out.println("    <informaltable>");
-
-                    for (Option option : options)
-                    {
-                        String opt = option.name();
-                        String description = option.description();
-                        for (String alias : option.aliases())
-                        {
-                            opt += ", " + alias;
-                        }
-                        try {
-                            optionsMap.get(option).setAccessible(true);
-                            Object o = optionsMap.get(option).get(action);
-                            if (o != null
-                                && (!(o instanceof Boolean) || ((Boolean) o))
-                                && (!(o instanceof Number) || ((Number) o).doubleValue() != 0.0)) {
-                                description += " (defaults to " + o.toString() + ")";
-                            }
-                        } catch (Exception e) {
-                            // Ignore
-                        }
-                        out.println("    <tr>");
-                        out.println("      <td>" + opt + "</td>");
-                        out.println("      <td>" + description + "</td>");
-                        out.println("    </tr>");
-                    }
-
-                    out.println("    </informaltable>");
-                    out.println("  </section>");
-                }
-
-                if(command.detailedDescription() != null
-                    && command.detailedDescription().trim().length() > 0) {
-                    out.println("<section>");
-                    out.println("    <title>Details</title>");
-                    String description = loadDescription(action.getClass(), command.detailedDescription());
-                    out.println("    <para>");
-                    out.println(description);
-                    out.println("    </para>");
-                    out.println("</section>");
-                }
-                out.println("</section>");
-            }
-
-        }
-
-        protected class ConfPreparator extends BlueprintActionPreparator {
-
-            boolean includeHelpOption;
-
-            ConfPreparator(boolean includeHelpOption) {
-                this.includeHelpOption = includeHelpOption;
-            }
-
-            @Override
-            protected void printUsage(CommandSession session, Action action, Map<Option, Field> optionsMap, Map<Argument,Field> argsMap, PrintStream out)
-            {
-                Command command = action.getClass().getAnnotation(Command.class);
-                List<Argument> arguments = new ArrayList<Argument>(argsMap.keySet());
-                Collections.sort(arguments, new Comparator<Argument>() {
-                    public int compare(Argument o1, Argument o2) {
-                        return Integer.valueOf(o1.index()).compareTo(Integer.valueOf(o2.index()));
-                    }
-                });
-                Set<Option> options = new HashSet<Option>(optionsMap.keySet());
-                if (includeHelpOption) options.add(HELP);
-
-                out.println("h1. " + command.scope() + ":" + command.name());
-                out.println();
-
-                out.println("h2. Description");
-                out.println(command.description());
-                out.println();
-
-                StringBuffer syntax = new StringBuffer();
-                syntax.append(String.format("%s:%s", command.scope(), command.name()));
-                if (options.size() > 0) {
-                    syntax.append(" \\[options\\]");
-                }
-                if (arguments.size() > 0) {
-                    syntax.append(' ');
-                    for (Argument argument : arguments) {
-                        syntax.append(String.format(argument.required() ? "%s " : "\\[%s\\] ", argument.name()));
-                    }
-                }
-                out.println("h2. Syntax");
-                out.println(syntax.toString());
-                out.println();
-
-                if (arguments.size() > 0)
-                {
-                    out.println("h2. Arguments");
-                    out.println("|| Name || Description ||");
-                    for (Argument argument : arguments)
-                    {
-                        String description = argument.description();
-                        if (!argument.required()) {
-                            try {
-                                argsMap.get(argument).setAccessible(true);
-                                Object o = argsMap.get(argument).get(action);
-                                if (o != null
-                                        && (!(o instanceof Boolean) || ((Boolean) o))
-                                        && (!(o instanceof Number) || ((Number) o).doubleValue() != 0.0)) {
-                                    description += " (defaults to " + o.toString() + ")";
-                                }
-                            } catch (Throwable t) {
-                                // Ignore
-                            }
-                        }
-                        out.println("| " + argument.name() + " | " + description + " |");
-                    }
-                    out.println();
-                }
-                if (options.size() > 0)
-                {
-                    out.println("h2. Options");
-                    out.println("|| Name || Description ||");
-                    for (Option option : options)
-                    {
-                        String opt = option.name();
-                        String desc = option.description();
-                        for (String alias : option.aliases())
-                        {
-                            opt += ", " + alias;
-                        }
-                        try {
-                            optionsMap.get(option).setAccessible(true);
-                            Object o = optionsMap.get(option).get(action);
-                            if (o != null
-                                    && (!(o instanceof Boolean) || ((Boolean) o))
-                                    && (!(o instanceof Number) || ((Number) o).doubleValue() != 0.0)) {
-                                desc += " (defaults to " + o.toString() + ")";
-                            }
-                        } catch (Throwable t) {
-                            // Ignore
-                        }
-                        out.println("| " + opt + " | " + desc + " |");
-                    }
-                    out.println();
-                }
-                if (command.detailedDescription().length() > 0) {
-                    out.println("h2. Details");
-                    String desc = loadDescription(action.getClass(), command.detailedDescription());
-                    out.println(desc);
-                }
-                out.println();
-            }
-
-        }
-
-        protected static class DummyCommandSession implements CommandSession {
-            public Object convert(Class<?> type, Object instance) {
-                return null;
-            }
-            public CharSequence format(Object target, int level) {
-                return null;
-            }
-            public void put(String name, Object value) {
-            }
-            public Object get(String name) {
-                return null;
-            }
-            public PrintStream getConsole() {
-                return null;
-            }
-            public InputStream getKeyboard() {
-                return null;
-            }
-            public void close() {
-            }
-            public Object execute(CharSequence commandline) throws Exception {
-                return null;
-            }
-        }
-
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/container/NOTICE b/karaf-2.3.x/tooling/exam/container/NOTICE
deleted file mode 100644
index d08156c..0000000
--- a/karaf-2.3.x/tooling/exam/container/NOTICE
+++ /dev/null
@@ -1,48 +0,0 @@
-Apache Karaf

-Copyright 2010-2012 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

diff --git a/karaf-2.3.x/tooling/exam/container/pom.xml b/karaf-2.3.x/tooling/exam/container/pom.xml
deleted file mode 100644
index 5555b49..0000000
--- a/karaf-2.3.x/tooling/exam/container/pom.xml
+++ /dev/null
@@ -1,121 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.tooling.exam</groupId>
-        <artifactId>exam</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.tooling.exam</groupId>
-    <artifactId>org.apache.karaf.tooling.exam.container</artifactId>
-    <packaging>jar</packaging>
-    <name>Apache Karaf :: Tooling :: Exam Testing Framework :: Container</name>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.exam</groupId>
-            <artifactId>pax-exam</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.exam</groupId>
-            <artifactId>pax-exam-extender-service</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.exam</groupId>
-            <artifactId>pax-exam-container-rbc</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.exam</groupId>
-            <artifactId>pax-exam-invoker-junit</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.exam</groupId>
-            <artifactId>pax-exam-container-remote</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.exam</groupId>
-            <artifactId>pax-exam-spi</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.exam</groupId>
-            <artifactId>pax-exam-container-rbc-client</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.url</groupId>
-            <artifactId>pax-url-mvn</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.base</groupId>
-            <artifactId>ops4j-base-lang</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.base</groupId>
-            <artifactId>ops4j-base-net</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-compress</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.google.guava</groupId>
-            <artifactId>guava</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.geronimo.specs</groupId>
-            <artifactId>geronimo-atinject_1.0_spec</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.exam</groupId>
-            <artifactId>pax-exam-inject</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.tooling.exam</groupId>
-            <artifactId>org.apache.karaf.tooling.exam.options</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-                <filtering>true</filtering>
-            </resource>
-        </resources>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/Constants.java b/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/Constants.java
deleted file mode 100644
index 41ba179..0000000
--- a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/Constants.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.container.internal;
-
-public interface Constants {
-
-    static final String FEATURES_CFG_LOCATION = "/etc/org.apache.karaf.features.cfg";
-
-    static final int SYSTEM_BUNDLE = 0;
-
-    static final int DEFAULT_START_LEVEL = 5;
-
-}
diff --git a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/ExamFeaturesFile.java b/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/ExamFeaturesFile.java
deleted file mode 100644
index ee77f8a..0000000
--- a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/ExamFeaturesFile.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.container.internal;
-
-import org.apache.commons.io.FileUtils;
-import org.ops4j.pax.exam.Info;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
-
-public class ExamFeaturesFile {
-
-    private String featuresXml;
-
-    public ExamFeaturesFile() {
-        this("", Constants.DEFAULT_START_LEVEL);
-    }
-
-    public ExamFeaturesFile(String featuresXml) {
-        this(featuresXml, Constants.DEFAULT_START_LEVEL);
-    }
-
-    public ExamFeaturesFile(String extension, int startLevel) {
-        featuresXml =
-                "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
-                        + "<features name=\"pax-exam-features-"
-                        + Info.getPaxExamVersion()
-                        + "\">\n"
-                        + "<feature name=\"exam\" version=\""
-                        + Info.getPaxExamVersion()
-                        + "\">\n"
-                        + extension + "\n"
-                        + "<bundle start-level='" + startLevel + "'>mvn:org.ops4j.base/ops4j-base-lang/"
-                        + Info.getOps4jBaseVersion()
-                        + "</bundle>\n"
-                        + "<bundle start-level='" + startLevel + "'>mvn:org.ops4j.base/ops4j-base-monitors/"
-                        + Info.getOps4jBaseVersion()
-                        + "</bundle>\n"
-                        + "<bundle start-level='" + startLevel + "'>mvn:org.ops4j.base/ops4j-base-net/"
-                        + Info.getOps4jBaseVersion()
-                        + "</bundle>\n"
-                        + "<bundle start-level='" + startLevel + "'>mvn:org.ops4j.base/ops4j-base-store/"
-                        + Info.getOps4jBaseVersion()
-                        + "</bundle>\n"
-                        + "<bundle start-level='" + startLevel + "'>mvn:org.ops4j.base/ops4j-base-io/"
-                        + Info.getOps4jBaseVersion()
-                        + "</bundle>\n"
-                        + "<bundle start-level='" + startLevel + "'>mvn:org.ops4j.base/ops4j-base-spi/"
-                        + Info.getOps4jBaseVersion()
-                        + "</bundle>\n"
-                        + "<bundle start-level='" + startLevel + "'>mvn:org.ops4j.base/ops4j-base-util-property/"
-                        + Info.getOps4jBaseVersion()
-                        + "</bundle>\n"
-                        + "<bundle start-level='" + startLevel + "'>mvn:org.ops4j.pax.swissbox/pax-swissbox-core/"
-                        + Info.getPaxSwissboxVersion()
-                        + "</bundle>\n"
-                        + "<bundle start-level='" + startLevel + "'>mvn:org.ops4j.pax.swissbox/pax-swissbox-extender/"
-                        + Info.getPaxSwissboxVersion()
-                        + "</bundle>\n"
-                        + "<bundle start-level='" + startLevel + "'>mvn:org.ops4j.pax.swissbox/pax-swissbox-lifecycle/"
-                        + Info.getPaxSwissboxVersion()
-                        + "</bundle>\n"
-                        + "<bundle start-level='" + startLevel + "'>mvn:org.ops4j.pax.swissbox/pax-swissbox-framework/"
-                        + Info.getPaxSwissboxVersion()
-                        + "</bundle>\n"
-                        + "<bundle start-level='" + startLevel + "'>mvn:org.ops4j.pax.exam/pax-exam/"
-                        + Info.getPaxExamVersion()
-                        + "</bundle>\n"
-                        + "<bundle start-level='" + startLevel + "'>mvn:org.ops4j.pax.exam/pax-exam-extender-service/"
-                        + Info.getPaxExamVersion()
-                        + "</bundle>\n"
-                        + "<bundle start-level='" + startLevel + "'>mvn:org.ops4j.pax.exam/pax-exam-container-rbc/"
-                        + Info.getPaxExamVersion()
-                        + "</bundle>\n"
-                        + "<bundle start-level='" + startLevel + "'>wrap:mvn:junit/junit/" + getJunitVersion()
-                        + "</bundle>\n"
-                        + "<bundle start-level='" + startLevel + "'>mvn:org.ops4j.pax.exam/pax-exam-invoker-junit/"
-                        + Info.getPaxExamVersion()
-                        + "</bundle>\n"
-                        + "<bundle start-level='" + startLevel
-                        + "'>mvn:org.apache.karaf.tooling.exam/org.apache.karaf.tooling.exam.options/"
-                        + getOptionsVersion()
-                        + "</bundle>\n"
-                        + "<bundle start-level='" + startLevel
-                        + "'>mvn:org.apache.geronimo.specs/geronimo-atinject_1.0_spec/" + getInjectionVersion()
-                        + "</bundle>\n"
-                        + "<bundle start-level='" + startLevel + "'>mvn:org.ops4j.pax.exam/pax-exam-inject/"
-                        + Info.getPaxExamVersion() + "</bundle>\n"
-                        + "</feature>\n"
-                        + "</features>";
-    }
-
-    private String getJunitVersion() {
-        return getNamedVersion("junit.version");
-    }
-
-    private String getInjectionVersion() {
-        return getNamedVersion("injection.version");
-    }
-
-    private String getOptionsVersion() {
-        return getNamedVersion("options.version");
-    }
-
-    private String getNamedVersion(String name) {
-        String optionsVersion = "";
-        try {
-            final InputStream is = ExamFeaturesFile.class.getClassLoader().getResourceAsStream(
-                    "META-INF/versions.properties"
-            );
-            if (is != null) {
-                final Properties properties = new Properties();
-                properties.load(is);
-                optionsVersion = properties.getProperty(name, "").trim();
-            }
-        } catch (Exception ignore) {
-            // use default versions
-        }
-        return optionsVersion;
-    }
-
-    public void writeToFile(File featuresXmlFile) throws IOException {
-        FileUtils.writeStringToFile(featuresXmlFile, featuresXml);
-    }
-
-    public void adaptDistributionToStartExam(File karafHome, File featuresXmlFile) throws IOException {
-        KarafPropertiesFile karafPropertiesFile = new KarafPropertiesFile(karafHome, Constants.FEATURES_CFG_LOCATION);
-        karafPropertiesFile.load();
-        String finalFilePath = ",file:" + featuresXmlFile.toString().replaceAll("\\\\", "/").replaceAll(" ", "%20");
-        karafPropertiesFile.extend("featuresRepositories", finalFilePath);
-        karafPropertiesFile.extend("featuresBoot", ",exam");
-        karafPropertiesFile.store();
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/InternalKarafDistributionConfigurationOption.java b/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/InternalKarafDistributionConfigurationOption.java
deleted file mode 100644
index b14e39d..0000000
--- a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/InternalKarafDistributionConfigurationOption.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.container.internal;
-
-import org.apache.karaf.tooling.exam.options.KarafDistributionBaseConfigurationOption;
-import org.apache.karaf.tooling.exam.options.KarafDistributionConfigurationOption;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.util.Properties;
-
-/**
- * Extends the {@link KarafDistributionConfigurationOption} to add functionality to store those values also in a
- * distribution.info file in the distirbution.
- */
-public class InternalKarafDistributionConfigurationOption extends KarafDistributionConfigurationOption {
-
-    private static final String NAME = "name";
-    private static final String KARAF_VERSION = "karafVersion";
-
-    private File distributionInfo;
-
-    public InternalKarafDistributionConfigurationOption(
-            KarafDistributionBaseConfigurationOption distributionConfigurationOption, File distributionInfo) {
-        super(distributionConfigurationOption);
-        this.distributionInfo = distributionInfo;
-    }
-
-    @Override
-    public String getKarafVersion() {
-        String internalVersion = super.getKarafVersion();
-        if (internalVersion != null && internalVersion.length() != 0) {
-            return internalVersion;
-        }
-        if (!distributionInfo.exists()) {
-            throw new IllegalStateException(
-                    "Either distribution.info or the property itself has to define a karaf version.");
-        }
-        String retrieveProperty = retrieveProperty(KARAF_VERSION);
-        if (retrieveProperty == null || retrieveProperty.length() == 0) {
-            throw new IllegalStateException(
-                    "Either distribution.info or the property itself has to define a karaf version.");
-        }
-        return retrieveProperty;
-    }
-
-    @Override
-    public String getName() {
-        String internalName = super.getName();
-        if (internalName != null && internalName.length() != 0) {
-            return internalName;
-        }
-        if (!distributionInfo.exists()) {
-            throw new IllegalStateException(
-                    "Either distribution.info or the property itself has to define a name for the distribution..");
-        }
-        String retrieveProperty = retrieveProperty(NAME);
-        if (retrieveProperty == null || retrieveProperty.length() == 0) {
-            throw new IllegalStateException(
-                    "Either distribution.info or the property itself has to define a name for the distribution..");
-        }
-        return retrieveProperty;
-    }
-
-    private String retrieveProperty(String key) {
-        try {
-            FileInputStream fileInputStream = new FileInputStream(distributionInfo);
-            try {
-                Properties props = new Properties();
-                props.load(fileInputStream);
-                return props.getProperty(key);
-            } finally {
-                fileInputStream.close();
-            }
-        } catch (Exception e) {
-            throw new IllegalStateException(e);
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/KarafPropertiesFile.java b/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/KarafPropertiesFile.java
deleted file mode 100644
index 700c5b6..0000000
--- a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/KarafPropertiesFile.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.container.internal;
-
-import org.apache.commons.io.FileUtils;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.Properties;
-
-public class KarafPropertiesFile {
-
-    private final Properties properties;
-    private final File propertyFile;
-
-    public KarafPropertiesFile(File karafHome, String location) {
-        if (location.startsWith("/")) {
-            propertyFile = new File(karafHome + location);
-        } else {
-            propertyFile = new File(karafHome + "/" + location);
-        }
-        properties = new Properties();
-    }
-
-    public void load() throws IOException {
-        if (!propertyFile.exists()) {
-            return;
-        }
-        properties.load(new FileInputStream(propertyFile));
-    }
-
-    public void put(String key, String value) {
-        properties.put(key, value);
-    }
-
-    public void extend(String key, String value) {
-        if (properties.get(key) == null) {
-            properties.put(key, value);
-            return;
-        }
-        properties.put(key, properties.get(key) + value);
-    }
-
-    public String get(String key) {
-        return properties.getProperty(key);
-    }
-
-    public void store() throws IOException {
-        properties.store(new FileOutputStream(propertyFile), "Modified by paxexam");
-    }
-
-    public void replace(File source) {
-        try {
-            FileUtils.copyFile(source, propertyFile);
-        } catch (IOException e) {
-            throw new IllegalStateException("It is required to replace propertyFile");
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/KarafTestContainer.java b/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/KarafTestContainer.java
deleted file mode 100644
index 70da410..0000000
--- a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/KarafTestContainer.java
+++ /dev/null
@@ -1,622 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.container.internal;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import org.apache.commons.compress.archivers.ArchiveEntry;
-import org.apache.commons.compress.archivers.ArchiveInputStream;
-import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
-import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
-import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.io.filefilter.WildcardFileFilter;
-import org.apache.karaf.tooling.exam.container.internal.adaptions.KarafManipulator;
-import org.apache.karaf.tooling.exam.container.internal.adaptions.KarafManipulatorFactory;
-import org.apache.karaf.tooling.exam.container.internal.runner.Runner;
-import org.apache.karaf.tooling.exam.options.*;
-import org.apache.karaf.tooling.exam.options.configs.CustomProperties;
-import org.apache.karaf.tooling.exam.options.configs.FeaturesCfg;
-import org.ops4j.pax.exam.*;
-import org.ops4j.pax.exam.container.remote.RBCRemoteTarget;
-import org.ops4j.pax.exam.options.*;
-import org.ops4j.pax.exam.options.extra.FeaturesScannerProvisionOption;
-import org.ops4j.pax.exam.options.extra.VMOption;
-import org.ops4j.pax.exam.rbc.client.RemoteBundleContextClient;
-import org.osgi.framework.Bundle;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.*;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.*;
-
-import static org.apache.karaf.tooling.exam.options.KarafDistributionOption.editConfigurationFileExtend;
-import static org.ops4j.pax.exam.CoreOptions.options;
-import static org.ops4j.pax.exam.CoreOptions.systemProperty;
-import static org.ops4j.pax.exam.rbc.Constants.*;
-
-public class KarafTestContainer implements TestContainer {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(KarafTestContainer.class);
-
-    private static final String KARAF_TEST_CONTAINER = "KarafTestContainer.start";
-    private static final String EXAM_INVOKER_PROPERTY = "pax.exam.invoker";
-    private static final String EXAM_INJECT_PROPERTY = "pax.exam.inject";
-
-    private final Runner runner;
-    private final RMIRegistry registry;
-    private final ExamSystem system;
-    private KarafDistributionBaseConfigurationOption framework;
-    @SuppressWarnings("unused")
-    private KarafManipulator versionAdaptions;
-
-    private boolean deleteRuntime = true;
-    private boolean started = false;
-    private RBCRemoteTarget target;
-
-    private File targetFolder;
-
-    public KarafTestContainer(ExamSystem system, RMIRegistry registry,
-                              KarafDistributionBaseConfigurationOption framework, Runner runner) {
-        this.framework = framework;
-        this.registry = registry;
-        this.system = system;
-        this.runner = runner;
-    }
-
-    @Override
-    public synchronized TestContainer start() {
-        try {
-            String name = system.createID(KARAF_TEST_CONTAINER);
-
-            KarafExamSystemConfigurationOption[] internalConfigurationOptions =
-                    system.getOptions(KarafExamSystemConfigurationOption.class);
-            Option invokerConfiguration = systemProperty("pax.exam.invoker").value("junit");
-            if (internalConfigurationOptions != null && internalConfigurationOptions.length != 0) {
-                invokerConfiguration =
-                        systemProperty("pax.exam.invoker").value(internalConfigurationOptions[0].getInvoker());
-            }
-
-            ExamSystem subsystem = system.fork(
-                    options(
-                            systemProperty(RMI_HOST_PROPERTY).value(registry.getHost()),
-                            systemProperty(RMI_PORT_PROPERTY).value("" + registry.getPort()),
-                            systemProperty(RMI_NAME_PROPERTY).value(name),
-                            invokerConfiguration,
-                            systemProperty(EXAM_INJECT_PROPERTY).value("true"),
-                            editConfigurationFileExtend("etc/system.properties", "jline.shutdownhook", "true")
-                    ));
-            target = new RBCRemoteTarget(name, registry.getPort(), subsystem.getTimeout());
-
-            System.setProperty("java.protocol.handler.pkgs", "org.ops4j.pax.url");
-
-            URL sourceDistribution = new URL(framework.getFrameworkURL());
-
-            KeepRuntimeFolderOption[] keepRuntimeFolder = subsystem.getOptions(KeepRuntimeFolderOption.class);
-            if (keepRuntimeFolder != null && keepRuntimeFolder.length != 0) {
-                deleteRuntime = false;
-            }
-
-            targetFolder = retrieveFinalTargetFolder(subsystem);
-            extractKarafDistribution(sourceDistribution, targetFolder);
-
-            File javaHome = new File(System.getProperty("java.home"));
-            File karafBase = searchKarafBase(targetFolder);
-            File distributionInfo = new File(karafBase + "/etc/distribution.info");
-            File karafBin = new File(karafBase + "/bin");
-            File featuresXmlFile = new File(targetFolder + "/examfeatures.xml");
-            File karafHome = karafBase;
-            File deploy = new File(karafBase + "/deploy");
-            String karafData = karafHome + "/data";
-
-            framework = new InternalKarafDistributionConfigurationOption(framework, distributionInfo);
-            versionAdaptions = KarafManipulatorFactory.createManipulator(framework.getKarafVersion());
-
-            ArrayList<String> javaOpts = Lists.newArrayList();
-            appendVmSettingsFromSystem(javaOpts, subsystem);
-            String[] javaEndorsedDirs =
-                    new String[]{javaHome + "/jre/lib/endorsed", javaHome + "/lib/endorsed", karafHome + "/lib/endorsed"};
-            String[] javaExtDirs =
-                    new String[]{javaHome + "/jre/lib/ext", javaHome + "/lib/ext", javaHome + "/lib/ext"};
-            String[] karafOpts = new String[]{};
-            ArrayList<String> opts =
-                    Lists.newArrayList("-Dkaraf.startLocalConsole=" + shouldLocalConsoleBeStarted(subsystem),
-                            "-Dkaraf.startRemoteShell=" + shouldRemoteShellBeStarted(subsystem));
-
-            String[] classPath = buildKarafClasspath(karafHome);
-            String main = "org.apache.karaf.main.Main";
-            String options = "";
-            String[] environment = new String[]{};
-            String[] fileEndings = new String[]{"jar", "war", "zip", "kar", "xml"};
-
-            updateLogProperties(karafHome, subsystem);
-            updateUserSetProperties(karafHome, subsystem);
-            copyBootClasspathLibraries(karafHome, subsystem);
-            setupExamProperties(karafHome, subsystem);
-            makeScriptsInBinExec(karafBin);
-
-            int startLevel = Constants.DEFAULT_START_LEVEL;
-            ExamBundlesStartLevel examBundlesStartLevel = system.getSingleOption(ExamBundlesStartLevel.class);
-            if (examBundlesStartLevel != null) {
-                startLevel = examBundlesStartLevel.getStartLevel();
-            }
-
-            ExamFeaturesFile examFeaturesFile;
-            if (framework.isUseDeployFolder()) {
-                copyReferencedArtifactsToDeployFolder(deploy, subsystem, fileEndings);
-                examFeaturesFile = new ExamFeaturesFile("", startLevel);
-            } else {
-                StringBuilder extension = extractExtensionString(subsystem);
-                examFeaturesFile = new ExamFeaturesFile(extension.toString(), startLevel);
-            }
-            examFeaturesFile.writeToFile(featuresXmlFile);
-
-            examFeaturesFile.adaptDistributionToStartExam(karafHome, featuresXmlFile);
-
-            long startedAt = System.currentTimeMillis();
-
-            runner.exec(environment, karafBase, javaHome.toString(), javaOpts.toArray(new String[]{}),
-                    javaEndorsedDirs, javaExtDirs, karafHome.toString(), karafData, karafOpts,
-                    opts.toArray(new String[]{}), classPath, main, options);
-
-            LOGGER.debug("Test Container started in " + (System.currentTimeMillis() - startedAt) + " millis");
-            LOGGER.info("Wait for test container to finish its initialization " + subsystem.getTimeout());
-
-            if (subsystem.getOptions(ServerModeOption.class).length == 0) {
-                waitForState(org.apache.karaf.tooling.exam.container.internal.Constants.SYSTEM_BUNDLE,
-                        Bundle.ACTIVE, subsystem.getTimeout());
-            } else {
-                LOGGER
-                        .info("System runs in Server Mode. Which means, no Test facility bundles available on target system.");
-            }
-
-            started = true;
-        } catch (IOException e) {
-            throw new RuntimeException("Problem starting container", e);
-        }
-        return this;
-    }
-
-    private void copyBootClasspathLibraries(File karafHome, ExamSystem subsystem) throws MalformedURLException,
-            IOException {
-        BootClasspathLibraryOption[] bootClasspathLibraryOptions =
-                subsystem.getOptions(BootClasspathLibraryOption.class);
-        for (BootClasspathLibraryOption bootClasspathLibraryOption : bootClasspathLibraryOptions) {
-            UrlReference libraryUrl = bootClasspathLibraryOption.getLibraryUrl();
-            FileUtils.copyURLToFile(
-                    new URL(libraryUrl.getURL()),
-                    createFileNameWithRandomPrefixFromUrlAtTarget(libraryUrl.getURL(), new File(karafHome + "/lib"),
-                            new String[]{"jar"}));
-        }
-    }
-
-    @SuppressWarnings("rawtypes")
-    private StringBuilder extractExtensionString(ExamSystem subsystem) {
-        ProvisionOption[] provisionOptions = subsystem.getOptions(ProvisionOption.class);
-        StringBuilder extension = new StringBuilder();
-        for (ProvisionOption provisionOption : provisionOptions) {
-            if (provisionOption.getURL().startsWith("link") || provisionOption.getURL().startsWith("scan-features")) {
-                // well those we've already handled at another location...
-                continue;
-            }
-            extension.append("<bundle>").append(provisionOption.getURL()).append("</bundle>\n");
-        }
-        return extension;
-    }
-
-    private String shouldRemoteShellBeStarted(ExamSystem subsystem) {
-        KarafDistributionConfigurationConsoleOption[] consoleOptions =
-                subsystem.getOptions(KarafDistributionConfigurationConsoleOption.class);
-        if (consoleOptions == null) {
-            return "true";
-        }
-        for (KarafDistributionConfigurationConsoleOption consoleOption : consoleOptions) {
-            if (consoleOption.getStartRemoteShell() != null) {
-                return consoleOption.getStartRemoteShell() ? "true" : "false";
-            }
-        }
-        return "true";
-    }
-
-    private String shouldLocalConsoleBeStarted(ExamSystem subsystem) {
-        KarafDistributionConfigurationConsoleOption[] consoleOptions =
-                subsystem.getOptions(KarafDistributionConfigurationConsoleOption.class);
-        if (consoleOptions == null) {
-            return "true";
-        }
-        for (KarafDistributionConfigurationConsoleOption consoleOption : consoleOptions) {
-            if (consoleOption.getStartLocalConsole() != null) {
-                return consoleOption.getStartLocalConsole() ? "true" : "false";
-            }
-        }
-        return "true";
-    }
-
-    private void makeScriptsInBinExec(File karafBin) {
-        if (!karafBin.exists()) {
-            return;
-        }
-        File[] files = karafBin.listFiles();
-        for (File file : files) {
-            file.setExecutable(true);
-        }
-    }
-
-    private File retrieveFinalTargetFolder(ExamSystem subsystem) {
-        if (framework.getUnpackDirectory() == null) {
-            return subsystem.getConfigFolder();
-        } else {
-            File target = new File(framework.getUnpackDirectory() + "/" + UUID.randomUUID().toString());
-            target = transformToAbsolutePath(target);
-            target.mkdirs();
-            return target;
-        }
-    }
-
-    private File transformToAbsolutePath(File file) {
-        return new File(file.getAbsolutePath());
-    }
-
-    private void appendVmSettingsFromSystem(ArrayList<String> opts, ExamSystem subsystem) {
-        VMOption[] options = subsystem.getOptions(VMOption.class);
-        for (VMOption option : options) {
-            opts.add(option.getOption());
-        }
-    }
-
-    @SuppressWarnings("rawtypes")
-    private void copyReferencedArtifactsToDeployFolder(File deploy, ExamSystem subsystem, String[] fileEndings) {
-        ProvisionOption[] options = subsystem.getOptions(ProvisionOption.class);
-        for (ProvisionOption option : options) {
-            try {
-                FileUtils.copyURLToFile(new URL(option.getURL()),
-                        createFileNameWithRandomPrefixFromUrlAtTarget(option.getURL(), deploy, fileEndings));
-            } catch (Exception e) {
-                // well, this can happen...
-            }
-        }
-    }
-
-    private File createFileNameWithRandomPrefixFromUrlAtTarget(String url, File deploy, String[] fileEndings) {
-        String prefix = UUID.randomUUID().toString();
-        String realEnding = extractPossibleFileEndingIfMavenArtifact(url, fileEndings);
-        String fileName = new File(url).getName();
-        return new File(deploy + "/" + prefix + "_" + fileName + "." + realEnding);
-    }
-
-    private String extractPossibleFileEndingIfMavenArtifact(String url, String[] fileEndings) {
-        String realEnding = "jar";
-        for (String ending : fileEndings) {
-            if (url.indexOf("/" + ending + "/") > 0) {
-                realEnding = ending;
-                break;
-            }
-        }
-        return realEnding;
-    }
-
-    private void updateUserSetProperties(File karafHome, ExamSystem subsystem) throws IOException {
-        List<KarafDistributionConfigurationFileOption> options = Lists.newArrayList(
-                subsystem.getOptions(KarafDistributionConfigurationFileOption.class));
-        options.addAll(extractFileOptionsBasedOnFeaturesScannerOptions(subsystem));
-        options.addAll(configureBootDelegation(subsystem));
-        options.addAll(configureSystemBundles(subsystem));
-        HashMap<String, HashMap<String, List<KarafDistributionConfigurationFileOption>>> optionMap = Maps.newHashMap();
-        for (KarafDistributionConfigurationFileOption option : options) {
-            if (!optionMap.containsKey(option.getConfigurationFilePath())) {
-                optionMap.put(option.getConfigurationFilePath(),
-                        new HashMap<String, List<KarafDistributionConfigurationFileOption>>());
-            }
-            HashMap<String, List<KarafDistributionConfigurationFileOption>> optionEntries =
-                    optionMap.get(option.getConfigurationFilePath());
-            if (!optionEntries.containsKey(option.getKey())) {
-                optionEntries.put(option.getKey(), new ArrayList<KarafDistributionConfigurationFileOption>());
-            } else {
-                // if special file warn, replace and continue
-                if (!option.getConfigurationFilePath().equals(FeaturesCfg.FILE_PATH)) {
-                    LOGGER.warn("you're trying to add an additional value to a config file; you're current " +
-                            "value will be replaced.");
-                    optionEntries.put(option.getKey(), new ArrayList<KarafDistributionConfigurationFileOption>());
-                }
-            }
-            optionEntries.get(option.getKey()).add(option);
-        }
-        Set<String> configFiles = optionMap.keySet();
-        for (String configFile : configFiles) {
-
-            KarafPropertiesFile karafPropertiesFile = new KarafPropertiesFile(karafHome, configFile);
-            karafPropertiesFile.load();
-            Collection<List<KarafDistributionConfigurationFileOption>> optionsToApply =
-                    optionMap.get(configFile).values();
-            boolean store = true;
-            for (List<KarafDistributionConfigurationFileOption> optionListToApply : optionsToApply) {
-                for (KarafDistributionConfigurationFileOption optionToApply : optionListToApply) {
-                    if (optionToApply instanceof KarafDistributionConfigurationFilePutOption) {
-                        karafPropertiesFile.put(optionToApply.getKey(), optionToApply.getValue());
-                    } else if (optionToApply instanceof KarafDistributionConfigurationFileReplacementOption) {
-                        karafPropertiesFile
-                                .replace(((KarafDistributionConfigurationFileReplacementOption) optionToApply)
-                                        .getSource());
-                        store = false;
-                        break;
-                    } else {
-                        karafPropertiesFile.extend(optionToApply.getKey(), optionToApply.getValue());
-                    }
-                }
-                if (!store) {
-                    break;
-                }
-            }
-            if (store) {
-                karafPropertiesFile.store();
-            }
-        }
-    }
-
-    private Collection<? extends KarafDistributionConfigurationFileOption> configureSystemBundles(ExamSystem subsystem) {
-        SystemPackageOption[] systemPackageOptions = subsystem.getOptions(SystemPackageOption.class);
-        String systemPackageString = "";
-        for (SystemPackageOption systemPackageOption : systemPackageOptions) {
-            if (!systemPackageString.equals("")) {
-                systemPackageString += ",";
-            }
-            systemPackageString += systemPackageOption.getValue();
-        }
-        if (systemPackageString.equals("")) {
-            return Lists.newArrayList();
-        }
-        return Lists.newArrayList(new KarafDistributionConfigurationFileExtendOption(
-                CustomProperties.SYSTEM_PACKAGES_EXTRA, systemPackageString));
-    }
-
-    private Collection<? extends KarafDistributionConfigurationFileOption>
-    configureBootDelegation(ExamSystem subsystem) {
-        BootDelegationOption[] bootDelegationOptions = subsystem.getOptions(BootDelegationOption.class);
-        String bootDelegationString = "";
-        for (BootDelegationOption bootDelegationOption : bootDelegationOptions) {
-            bootDelegationString += ",";
-            bootDelegationString += bootDelegationOption.getValue();
-        }
-        return Lists.newArrayList(new KarafDistributionConfigurationFileExtendOption(CustomProperties.BOOTDELEGATION,
-                bootDelegationString));
-    }
-
-    private Collection<? extends KarafDistributionConfigurationFileOption>
-    extractFileOptionsBasedOnFeaturesScannerOptions(ExamSystem subsystem) {
-        ArrayList<KarafDistributionConfigurationFileOption> retVal = Lists.newArrayList();
-        FeaturesScannerProvisionOption[] features = subsystem.getOptions(FeaturesScannerProvisionOption.class);
-        for (FeaturesScannerProvisionOption feature : features) {
-            String fullFeatureUrl = feature.getURL();
-            String[] split = fullFeatureUrl.split("\\!/");
-            String url = split[0].replaceAll("scan-features:", "");
-            retVal.add(new KarafDistributionConfigurationFileExtendOption(FeaturesCfg.REPOSITORIES, "," + url));
-            retVal.add(new KarafDistributionConfigurationFileExtendOption(FeaturesCfg.BOOT, "," + split[1]));
-        }
-        return retVal;
-    }
-
-    private void setupExamProperties(File karafHome, ExamSystem system) throws IOException {
-        File customPropertiesFile = new File(karafHome + "/etc/system.properties");
-        SystemPropertyOption[] customProps = system.getOptions(SystemPropertyOption.class);
-        Properties karafPropertyFile = new Properties();
-        karafPropertyFile.load(new FileInputStream(customPropertiesFile));
-        for (SystemPropertyOption systemPropertyOption : customProps) {
-            karafPropertyFile.put(systemPropertyOption.getKey(), systemPropertyOption.getValue());
-        }
-        karafPropertyFile.store(new FileOutputStream(customPropertiesFile), "updated by pax-exam");
-    }
-
-    private void updateLogProperties(File karafHome, ExamSystem system) throws IOException {
-        DoNotModifyLogOption[] modifyLog = system.getOptions(DoNotModifyLogOption.class);
-        if (modifyLog != null && modifyLog.length != 0) {
-            LOGGER.info("Log file should not be modified by the test framework");
-            return;
-        }
-        String realLogLevel = retrieveRealLogLevel(system);
-        File customPropertiesFile = new File(karafHome + "/etc/org.ops4j.pax.logging.cfg");
-        Properties karafPropertyFile = new Properties();
-        karafPropertyFile.load(new FileInputStream(customPropertiesFile));
-        karafPropertyFile.put("log4j.rootLogger", realLogLevel + ", out, stdout, osgi:*");
-        karafPropertyFile.store(new FileOutputStream(customPropertiesFile), "updated by pax-exam");
-    }
-
-    private String retrieveRealLogLevel(ExamSystem system) {
-        LogLevelOption[] logLevelOptions = system.getOptions(LogLevelOption.class);
-        return logLevelOptions != null && logLevelOptions.length != 0 ? logLevelOptions[0].getLogLevel().toString()
-                : "WARN";
-    }
-
-    private String[] buildKarafClasspath(File karafHome) {
-        List<String> cp = new ArrayList<String>();
-        File[] jars = new File(karafHome + "/lib").listFiles((FileFilter) new WildcardFileFilter("*.jar"));
-        for (File jar : jars) {
-            cp.add(jar.toString());
-        }
-        return cp.toArray(new String[]{});
-    }
-
-    /**
-     * Since we might get quite deep use a simple breath first search algorithm
-     */
-    private File searchKarafBase(File targetFolder) {
-        Queue<File> searchNext = new LinkedList<File>();
-        searchNext.add(targetFolder);
-        while (!searchNext.isEmpty()) {
-            File head = searchNext.poll();
-            if (!head.isDirectory()) {
-                continue;
-            }
-            boolean system = false;
-            boolean etc = false;
-            for (File file : head.listFiles()) {
-                if (file.isDirectory() && file.getName().equals("system")) {
-                    system = true;
-                }
-                if (file.isDirectory() && file.getName().equals("etc")) {
-                    etc = true;
-                }
-            }
-            if (system && etc) {
-                return head;
-            }
-            searchNext.addAll(Arrays.asList(head.listFiles()));
-        }
-        throw new IllegalStateException("No karaf base dir found in extracted distribution.");
-    }
-
-    private void extractKarafDistribution(URL sourceDistribution, File targetFolder) throws IOException {
-        if (sourceDistribution.getProtocol().equals("file")) {
-            if (sourceDistribution.getFile().indexOf(".zip") > 0) {
-                extractZipDistribution(sourceDistribution, targetFolder);
-            } else if (sourceDistribution.getFile().indexOf(".tar.gz") > 0) {
-                extractTarGzDistribution(sourceDistribution, targetFolder);
-            } else {
-                throw new IllegalStateException(
-                        "Unknow packaging of distribution; only zip or tar.gz could be handled.");
-            }
-            return;
-        }
-        if (sourceDistribution.toExternalForm().indexOf("/zip") > 0) {
-            extractZipDistribution(sourceDistribution, targetFolder);
-        } else if (sourceDistribution.toExternalForm().indexOf("/tar.gz") > 0) {
-            extractTarGzDistribution(sourceDistribution, targetFolder);
-        } else {
-            throw new IllegalStateException(
-                    "Unknow packaging of distribution; only zip or tar.gz could be handled.");
-        }
-    }
-
-    private void extractTarGzDistribution(URL sourceDistribution, File targetFolder) throws IOException,
-            FileNotFoundException {
-        File uncompressedFile = File.createTempFile("uncompressedTarGz-", ".tar");
-        extractGzArchive(sourceDistribution.openStream(), uncompressedFile);
-        extract(new TarArchiveInputStream(new FileInputStream(uncompressedFile)), targetFolder);
-        FileUtils.forceDelete(uncompressedFile);
-    }
-
-    private void extractZipDistribution(URL sourceDistribution, File targetFolder) throws IOException {
-        extract(new ZipArchiveInputStream(sourceDistribution.openStream()), targetFolder);
-    }
-
-    private void extractGzArchive(InputStream tarGz, File tar) throws IOException {
-        BufferedInputStream in = new BufferedInputStream(tarGz);
-        FileOutputStream out = new FileOutputStream(tar);
-        GzipCompressorInputStream gzIn = new GzipCompressorInputStream(in);
-        final byte[] buffer = new byte[1000];
-        int n = 0;
-        while (-1 != (n = gzIn.read(buffer))) {
-            out.write(buffer, 0, n);
-        }
-        out.close();
-        gzIn.close();
-    }
-
-    private void extract(ArchiveInputStream is, File targetDir) throws IOException {
-        try {
-            if (targetDir.exists()) {
-                FileUtils.forceDelete(targetDir);
-            }
-            targetDir.mkdirs();
-            ArchiveEntry entry = is.getNextEntry();
-            while (entry != null) {
-                String name = entry.getName();
-                name = name.substring(name.indexOf("/") + 1);
-                File file = new File(targetDir, name);
-                if (entry.isDirectory()) {
-                    file.mkdirs();
-                } else {
-                    file.getParentFile().mkdirs();
-                    OutputStream os = new FileOutputStream(file);
-                    try {
-                        IOUtils.copy(is, os);
-                    } finally {
-                        IOUtils.closeQuietly(os);
-                    }
-                }
-                entry = is.getNextEntry();
-            }
-        } finally {
-            is.close();
-        }
-    }
-
-    @Override
-    public synchronized TestContainer stop() {
-        LOGGER.debug("Shutting down the test container (Pax Runner)");
-        try {
-            if (started) {
-                target.stop();
-                RemoteBundleContextClient remoteBundleContextClient = target.getClientRBC();
-                if (remoteBundleContextClient != null) {
-                    remoteBundleContextClient.stop();
-
-                }
-                if (runner != null) {
-                    runner.shutdown();
-                }
-            } else {
-                throw new RuntimeException("Container never came up");
-            }
-        } finally {
-            started = false;
-            target = null;
-            if (deleteRuntime) {
-                system.clear();
-                try {
-                    FileUtils.forceDelete(targetFolder);
-                } catch (IOException e) {
-                    LOGGER.info("Can't remove runtime system; shedule it for exit of the jvm.");
-                    try {
-                        FileUtils.forceDeleteOnExit(targetFolder);
-                    } catch (IOException e1) {
-                        LOGGER.error("Well, this should simply not happen...");
-                    }
-                }
-            }
-        }
-        return this;
-    }
-
-    private void waitForState(final long bundleId, final int state, final RelativeTimeout timeout)
-            throws TimeoutException {
-        target.getClientRBC().waitForState(bundleId, state, timeout);
-    }
-
-    @Override
-    public synchronized void call(TestAddress address) {
-        target.call(address);
-    }
-
-    @Override
-    public synchronized long install(InputStream stream) {
-        return install("local", stream);
-    }
-
-    @Override
-    public synchronized long install(String location, InputStream stream) {
-        return target.install(location, stream);
-    }
-
-    @Override
-    public String toString() {
-        return "KarafTestContainer{" + framework.getFrameworkURL() + "}";
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/KarafTestContainerFactory.java b/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/KarafTestContainerFactory.java
deleted file mode 100644
index 6754d2f..0000000
--- a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/KarafTestContainerFactory.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.container.internal;
-
-import org.apache.karaf.tooling.exam.container.internal.runner.KarafJavaRunner;
-import org.apache.karaf.tooling.exam.container.internal.runner.NixRunner;
-import org.apache.karaf.tooling.exam.container.internal.runner.WindowsRunner;
-import org.apache.karaf.tooling.exam.options.KarafDistributionBaseConfigurationOption;
-import org.apache.karaf.tooling.exam.options.KarafDistributionConfigurationOption;
-import org.apache.karaf.tooling.exam.options.KarafDistributionKitConfigurationOption;
-import org.apache.karaf.tooling.exam.options.KarafDistributionKitConfigurationOption.Platform;
-import org.ops4j.pax.exam.ExamSystem;
-import org.ops4j.pax.exam.TestContainer;
-import org.ops4j.pax.exam.TestContainerFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class KarafTestContainerFactory implements TestContainerFactory {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(KarafTestContainer.class);
-    private static final int DEFAULTPORT = 21412;
-    private static final boolean IS_WINDOWS_OS = System.getProperty("os.name").toLowerCase().contains("windows");
-
-    private RMIRegistry m_rmiRegistry;
-
-    public KarafTestContainerFactory() {
-        m_rmiRegistry = new RMIRegistry(DEFAULTPORT, DEFAULTPORT + 1, DEFAULTPORT + 99).selectGracefully();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public TestContainer[] create(ExamSystem system) {
-        List<TestContainer> containers = new ArrayList<TestContainer>();
-        KarafDistributionKitConfigurationOption[] kitOptions =
-                system.getOptions(KarafDistributionKitConfigurationOption.class);
-        for (KarafDistributionKitConfigurationOption kitOption : kitOptions) {
-            if (kitOption.getPlatform().equals(Platform.WINDOWS)) {
-                if (IS_WINDOWS_OS) {
-                    containers.add(new KarafTestContainer(system, m_rmiRegistry, kitOption, new WindowsRunner(kitOption
-                            .getMakeExec(), kitOption.getExec())));
-                    continue;
-                }
-                LOGGER.info("Ignore windows settings on non windows platforms");
-            } else {
-                if (!IS_WINDOWS_OS) {
-                    containers.add(new KarafTestContainer(system, m_rmiRegistry, kitOption, new NixRunner(kitOption
-                            .getMakeExec(), kitOption.getExec())));
-                    continue;
-                }
-                LOGGER.info("Ignore non windows settings on windows platforms");
-            }
-        }
-        KarafDistributionBaseConfigurationOption[] options =
-                system.getOptions(KarafDistributionConfigurationOption.class);
-        for (KarafDistributionBaseConfigurationOption testContainer : options) {
-            containers.add(new KarafTestContainer(system, m_rmiRegistry, testContainer, new KarafJavaRunner()));
-        }
-        return containers.toArray(new TestContainer[containers.size()]);
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/RMIRegistry.java b/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/RMIRegistry.java
deleted file mode 100644
index bd42993..0000000
--- a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/RMIRegistry.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.container.internal;
-
-import org.ops4j.net.FreePort;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.rmi.registry.LocateRegistry;
-import java.rmi.registry.Registry;
-
-/**
- * Graceful RMI registry creation/reuse. Tries to reuse an existing one but is fine with creating one on another port.
- */
-public class RMIRegistry {
-
-    private static final Logger LOG = LoggerFactory.getLogger(RMIRegistry.class);
-
-    @SuppressWarnings("unused")
-    private final Integer m_defaultPort;
-
-    private static final int UNSELECTED = -1;
-
-    final private String m_host;
-    private Integer m_port = UNSELECTED;
-    private Integer m_altMin;
-    private Integer m_altTo;
-    private static final int TREASURE = 30;
-
-    public RMIRegistry(Integer defaultPort, Integer alternativeRangeFrom, Integer alternativeRangeTo)
-
-    {
-        try {
-            m_host = InetAddress.getLocalHost().getHostName();
-        } catch (UnknownHostException e) {
-            throw new IllegalStateException("Cannot select localhost. That usually not a good sign for networking..");
-        }
-        m_defaultPort = defaultPort;
-        m_altMin = alternativeRangeFrom;
-        m_altTo = alternativeRangeTo;
-    }
-
-    /**
-     * This will make sure a registry exists and is valid m_port. If its not available or does not work for some reason,
-     * it will select another port. This should really not happen usually. But it can.
-     *
-     * @return this for fluent API. Or IllegalStateException if a port has not been detected successfully.
-     */
-    public synchronized RMIRegistry selectGracefully() {
-        // if( ( m_port = select( m_defaultPort ) ) == UNSELECTED ) {
-        int alternativePort = new FreePort(m_altMin, m_altTo).getPort();
-        if ((m_port = select(alternativePort)) == UNSELECTED) {
-            throw new IllegalStateException("No port found for RMI at all. Even though " + alternativePort
-                    + " should have worked. Thats.. not. good. at. all.");
-        }
-        printTakenStatus();
-        // }
-
-        return this;
-    }
-
-    private void printTakenStatus() {
-
-        int in_use = m_port - m_altMin + 1; // the one we just took
-        int max = m_altTo - m_altMin;
-        String info =
-                "Currently " + in_use + " out of " + max + " ports are in use. Port range is from " + m_altMin + " up to "
-                        + m_altTo;
-
-        if (in_use + TREASURE > max) {
-            LOG.warn("--------------");
-            LOG.warn("BEWARE !!! " + info);
-            LOG.warn("--------------");
-        } else {
-            LOG.debug(info);
-        }
-    }
-
-    /**
-     * This contains basically two paths: 1. check if the given port already is valid rmi registry. Use that one if
-     * possible 2. make a new one at that port otherwise. Must also be validated.
-     *
-     * @param port to select.
-     * @return input port if successful or UNSELECTED
-     */
-    private Integer select(int port) {
-        if (reuseRegistry(port)) {
-            LOG.debug("Reuse Registry on " + port);
-            return port;
-
-        } else if (createNewRegistry(port)) {
-            LOG.debug("Created Registry on " + port);
-            return port;
-        }
-        // fail
-        return UNSELECTED;
-
-    }
-
-    private boolean createNewRegistry(int port) {
-        try {
-            Registry registry = LocateRegistry.createRegistry(port);
-
-            return verifyRegistry(registry);
-
-        } catch (Exception e) {
-            //
-        }
-
-        return false;
-    }
-
-    private boolean reuseRegistry(int port) {
-        Registry reg = null;
-        try {
-            reg = LocateRegistry.getRegistry(port);
-            return verifyRegistry(reg);
-
-        } catch (Exception e) {
-            // exception? then its not a fine registry.
-        }
-        return false;
-
-    }
-
-    private boolean verifyRegistry(Registry reg) {
-        if (reg != null) {
-            // test:
-            try {
-                String[] objectsRemote = reg.list();
-
-                for (String r : objectsRemote) {
-                    LOG.info("-- Remotely available already: " + r);
-                }
-                return true;
-
-            } catch (Exception ex) {
-                // exception? then its not a fine registry.
-            }
-        }
-        return false;
-    }
-
-    public String getHost() {
-        return m_host;
-    }
-
-    public int getPort() {
-        return m_port;
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/adaptions/KarafManipulator.java b/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/adaptions/KarafManipulator.java
deleted file mode 100644
index 6d1be5c..0000000
--- a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/adaptions/KarafManipulator.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.container.internal.adaptions;
-
-/**
- * Core interface defining which functions need to be supported by which Karaf manipulators.
- */
-public interface KarafManipulator {
-
-}
diff --git a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/adaptions/KarafManipulatorFactory.java b/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/adaptions/KarafManipulatorFactory.java
deleted file mode 100644
index 9440411..0000000
--- a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/adaptions/KarafManipulatorFactory.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.container.internal.adaptions;
-
-import org.osgi.framework.Version;
-
-/**
- * Factory returning the correct version of the manipulator depending on the added Karaf version.
- */
-public final class KarafManipulatorFactory {
-
-    private KarafManipulatorFactory() {
-        // not required for a final class
-    }
-
-    public static KarafManipulator createManipulator(String karafVersion) {
-        int dots = 0;
-        int i = 0;
-        while ((i = karafVersion.indexOf('.', i)) != -1) {
-            dots++;
-            i++;
-        }
-        Version version;
-        if (dots < 3) {           
-            version = new Version(karafVersion.replaceFirst("-", "."));
-        } else {
-            version = new Version(karafVersion);
-        }        
-        if (version.getMajor() < 2 || version.getMajor() == 2 && version.getMinor() < 2) {
-            throw new IllegalArgumentException("Karaf versions < 2.2.0 are not supported");
-        }
-        return new KarafManipulatorStartingFrom220();
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/adaptions/KarafManipulatorStartingFrom220.java b/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/adaptions/KarafManipulatorStartingFrom220.java
deleted file mode 100644
index 9cdd4a6..0000000
--- a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/adaptions/KarafManipulatorStartingFrom220.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.container.internal.adaptions;
-
-/**
- * This manipulator is currently valid for all Karaf versions starting from 2.2.0 and above. In case that a higher
- * version is not supported any more an additional manipulator will be added.
- */
-public class KarafManipulatorStartingFrom220 implements KarafManipulator {
-
-}
diff --git a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/BaseScriptRunner.java b/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/BaseScriptRunner.java
deleted file mode 100644
index 6eb928a..0000000
--- a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/BaseScriptRunner.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.container.internal.runner;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Abstract implementation of the script runner containging the entire self repeating code.
- */
-public abstract class BaseScriptRunner implements Runner {
-
-    protected InternalRunner runner;
-    protected List<String> makeExec = new ArrayList<String>();
-    protected String exec;
-
-    public BaseScriptRunner(List<String> makeExec, String exec) {
-        this.makeExec = makeExec;
-        this.exec = exec;
-        runner = new InternalRunner();
-    }
-
-    @Override
-    public void exec(final String[] environment, final File karafBase, String javaHome, String[] javaOpts,
-                     String[] javaEndorsedDirs, String[] javaExtDirs, String karafHome,
-                     String karafData, String[] karafOpts, String[] opts, String[] classPath, String main, String options) {
-        makeEnvironmentExecutable(karafBase);
-        startSystem(environment, karafBase);
-    }
-
-    private void startSystem(final String[] environment, final File karafBase) {
-        new Thread("KarafJavaRunner") {
-            @Override
-            public void run() {
-                CommandLineBuilder commandLine = createCommandLine(environment, karafBase);
-                runner.exec(commandLine, karafBase, environment);
-            }
-        }.start();
-    }
-
-    protected abstract CommandLineBuilder createCommandLine(final String[] environment, final File karafBase);
-
-    private void makeEnvironmentExecutable(final File karafBase) {
-        new File(karafBase, exec).setExecutable(true);
-        for (String execEntry : makeExec) {
-            new File(karafBase, execEntry).setExecutable(true);
-        }
-    }
-
-    @Override
-    public void shutdown() {
-        runner.shutdown();
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/CommandLineBuilder.java b/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/CommandLineBuilder.java
deleted file mode 100644
index d2a03c8..0000000
--- a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/CommandLineBuilder.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.container.internal.runner;
-
-public class CommandLineBuilder {
-
-    /**
-     * The command line array.
-     */
-    private String[] m_commandLine;
-
-    /**
-     * Creates a new command line builder.
-     */
-    public CommandLineBuilder() {
-        m_commandLine = new String[0];
-    }
-
-    /**
-     * Appends an array of strings to command line.
-     *
-     * @param segments array to append
-     * @return CommandLineBuilder for fluent api
-     */
-    public CommandLineBuilder append(final String[] segments) {
-        if (segments != null && segments.length > 0) {
-            final String[] command = new String[m_commandLine.length + segments.length];
-            System.arraycopy(m_commandLine, 0, command, 0, m_commandLine.length);
-            System.arraycopy(segments, 0, command, m_commandLine.length, segments.length);
-            m_commandLine = command;
-        }
-        return this;
-    }
-
-    /**
-     * Appends a string to command line.
-     *
-     * @param segment string to append
-     * @return CommandLineBuilder for fluent api
-     */
-    public CommandLineBuilder append(final String segment) {
-        if (segment != null && !segment.isEmpty()) {
-            return append(new String[]{segment});
-        }
-        return this;
-    }
-
-    /**
-     * Returns the command line.
-     *
-     * @return command line
-     */
-    public String[] toArray() {
-        return m_commandLine;
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/InternalRunner.java b/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/InternalRunner.java
deleted file mode 100644
index 814493b..0000000
--- a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/InternalRunner.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.container.internal.runner;
-
-import org.ops4j.io.Pipe;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-public class InternalRunner {
-
-    private Process m_frameworkProcess;
-    private Thread m_shutdownHook;
-
-    public synchronized void exec(CommandLineBuilder commandLine, final File workingDirectory,
-                                  final String[] envOptions) {
-        if (m_frameworkProcess != null) {
-            throw new IllegalStateException("Platform already started");
-        }
-
-        try {
-            m_frameworkProcess =
-                    Runtime.getRuntime().exec(commandLine.toArray(), createEnvironmentVars(envOptions),
-                            workingDirectory);
-        } catch (IOException e) {
-            throw new IllegalStateException("Could not start up the process", e);
-        }
-
-        m_shutdownHook = createShutdownHook(m_frameworkProcess);
-        Runtime.getRuntime().addShutdownHook(m_shutdownHook);
-
-        waitForExit();
-    }
-
-    private String[] createEnvironmentVars(String[] envOptions) {
-        List<String> env = new ArrayList<String>();
-        Map<String, String> getenv = System.getenv();
-        for (String key : getenv.keySet()) {
-            env.add(key + "=" + getenv.get(key));
-        }
-        if (envOptions != null) {
-            Collections.addAll(env, envOptions);
-        }
-        return env.toArray(new String[env.size()]);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void shutdown() {
-        try {
-            if (m_shutdownHook != null) {
-                synchronized (m_shutdownHook) {
-                    if (m_shutdownHook != null) {
-                        Runtime.getRuntime().removeShutdownHook(m_shutdownHook);
-                        m_frameworkProcess = null;
-                        m_shutdownHook.run();
-                        m_shutdownHook = null;
-                    }
-                }
-            }
-        } catch (IllegalStateException ignore) {
-            // just ignore
-        }
-    }
-
-    /**
-     * Wait till the framework process exits.
-     */
-    public void waitForExit() {
-        synchronized (m_frameworkProcess) {
-            try {
-                m_frameworkProcess.waitFor();
-                shutdown();
-            } catch (Throwable e) {
-                shutdown();
-            }
-        }
-    }
-
-    /**
-     * Create helper thread to safely shutdown the external framework process
-     *
-     * @param process framework process
-     * @return stream handler
-     */
-    private Thread createShutdownHook(final Process process) {
-        final Pipe errPipe = new Pipe(process.getErrorStream(), System.err).start("Error pipe");
-        final Pipe outPipe = new Pipe(process.getInputStream(), System.out).start("Out pipe");
-        final Pipe inPipe = new Pipe(process.getOutputStream(), System.in).start("In pipe");
-
-        return new Thread(
-                new Runnable() {
-                    @Override
-                    public void run() {
-                        inPipe.stop();
-                        outPipe.stop();
-                        errPipe.stop();
-
-                        try {
-                            process.destroy();
-                        } catch (Exception e) {
-                            // ignore if already shutting down
-                        }
-                    }
-                },
-                "Pax-Runner shutdown hook");
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/KarafJavaRunner.java b/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/KarafJavaRunner.java
deleted file mode 100644
index 8de2ff9..0000000
--- a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/KarafJavaRunner.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.container.internal.runner;
-
-import java.io.File;
-
-/**
- * Very simple asynchronous implementation of Java Runner. Exec is being invoked in a fresh Thread.
- */
-public class KarafJavaRunner implements Runner {
-
-    private InternalRunner runner;
-
-    public KarafJavaRunner() {
-        runner = new InternalRunner();
-    }
-
-    @Override
-    public synchronized void
-    exec(final String[] environment, final File karafBase, final String javaHome, final String[] javaOpts,
-         final String[] javaEndorsedDirs,
-         final String[] javaExtDirs, final String karafHome, final String karafData, final String[] karafOpts,
-         final String[] opts, final String[] classPath, final String main, final String options) {
-        new Thread("KarafJavaRunner") {
-            @Override
-            public void run() {
-                String cp = buildCmdSeparatedString(classPath);
-                String endDirs = buildCmdSeparatedString(javaEndorsedDirs);
-                String extDirs = buildCmdSeparatedString(javaExtDirs);
-                final CommandLineBuilder commandLine = new CommandLineBuilder()
-                        .append(getJavaExecutable(javaHome))
-                        .append(javaOpts)
-                        .append("-Djava.endorsed.dirs=" + endDirs)
-                        .append("-Djava.ext.dirs=" + extDirs)
-                        .append("-Dkaraf.instances=" + karafHome + "/instances")
-                        .append("-Dkaraf.home=" + karafHome)
-                        .append("-Dkaraf.base=" + karafBase)
-                        .append("-Dkaraf.data=" + karafData)
-                        .append("-Djava.util.logging.config.file=" + karafBase + "/etc/java.util.logging.properties")
-                        .append(karafOpts)
-                        .append(opts)
-                        .append("-cp")
-                        .append(cp)
-                        .append(main)
-                        .append(options);
-                runner.exec(commandLine, karafBase, environment);
-            }
-
-            private String buildCmdSeparatedString(final String[] splitted) {
-                final StringBuilder together = new StringBuilder();
-                for (String path : splitted) {
-                    if (together.length() != 0) {
-                        together.append(File.pathSeparator);
-                    }
-                    together.append(path);
-                }
-                return together.toString();
-            }
-
-            private String getJavaExecutable(final String javaHome) {
-                if (javaHome == null) {
-                    throw new IllegalStateException("JAVA_HOME is not set.");
-                }
-                return javaHome + "/bin/java";
-            }
-        }.start();
-    }
-
-    @Override
-    public synchronized void shutdown() {
-        runner.shutdown();
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/NixRunner.java b/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/NixRunner.java
deleted file mode 100644
index 83157c3..0000000
--- a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/NixRunner.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.container.internal.runner;
-
-import java.io.File;
-import java.util.List;
-
-/**
- * Runner implementation starting karaf based distributions no unix based systems like linux, mac, ...
- */
-public class NixRunner extends BaseScriptRunner {
-
-    public NixRunner(List<String> makeExec, String exec) {
-        super(makeExec, exec);
-    }
-
-    @Override
-    protected CommandLineBuilder createCommandLine(String[] environment, File karafBase) {
-        CommandLineBuilder commandLine = new CommandLineBuilder()
-                .append("/bin/sh")
-                .append(new File(karafBase, exec).getAbsolutePath());
-        return commandLine;
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/Runner.java b/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/Runner.java
deleted file mode 100644
index 5433397..0000000
--- a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/Runner.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.container.internal.runner;
-
-import java.io.File;
-
-/**
- * Abstracts the runner to be able to add different runners easier.
- */
-public interface Runner {
-
-    /**
-     * Starts the environment in the specific environment.
-     */
-    public abstract void
-    exec(final String[] environment, final File karafBase, final String javaHome, final String[] javaOpts,
-         final String[] javaEndorsedDirs,
-         final String[] javaExtDirs, final String karafHome, final String karafData, final String[] karafOpts,
-         final String[] opts, final String[] classPath, final String main, final String options);
-
-    /**
-     * Shutsdown the runner again.
-     */
-    public abstract void shutdown();
-
-}
diff --git a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/WindowsRunner.java b/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/WindowsRunner.java
deleted file mode 100644
index 0bdf27d..0000000
--- a/karaf-2.3.x/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/WindowsRunner.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.container.internal.runner;
-
-import java.io.File;
-import java.util.List;
-
-/**
- * Runner to start the Karaf platform on microsoft windows systems.
- */
-public class WindowsRunner extends BaseScriptRunner {
-
-    public WindowsRunner(List<String> makeExec, String exec) {
-        super(makeExec, exec);
-    }
-
-    @Override
-    protected CommandLineBuilder createCommandLine(String[] environment, File karafBase) {
-        CommandLineBuilder commandLine = new CommandLineBuilder()
-                .append("cmd.exe")
-                .append("/c")
-                .append(new File(karafBase, exec).getAbsolutePath());
-        return commandLine;
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/container/src/main/resources/META-INF/services/org.ops4j.pax.exam.TestContainerFactory b/karaf-2.3.x/tooling/exam/container/src/main/resources/META-INF/services/org.ops4j.pax.exam.TestContainerFactory
deleted file mode 100644
index f700718..0000000
--- a/karaf-2.3.x/tooling/exam/container/src/main/resources/META-INF/services/org.ops4j.pax.exam.TestContainerFactory
+++ /dev/null
@@ -1 +0,0 @@
-org.apache.karaf.tooling.exam.container.internal.KarafTestContainerFactory
\ No newline at end of file
diff --git a/karaf-2.3.x/tooling/exam/container/src/main/resources/META-INF/versions.properties b/karaf-2.3.x/tooling/exam/container/src/main/resources/META-INF/versions.properties
deleted file mode 100644
index d5133f1..0000000
--- a/karaf-2.3.x/tooling/exam/container/src/main/resources/META-INF/versions.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-################################################################################
-#
-#    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.
-#
-################################################################################
-options.version=${project.version}
-junit.version=${junit.version}
-injection.version=${injection.bundle.version}
\ No newline at end of file
diff --git a/karaf-2.3.x/tooling/exam/options/NOTICE b/karaf-2.3.x/tooling/exam/options/NOTICE
deleted file mode 100644
index d08156c..0000000
--- a/karaf-2.3.x/tooling/exam/options/NOTICE
+++ /dev/null
@@ -1,48 +0,0 @@
-Apache Karaf

-Copyright 2010-2012 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

diff --git a/karaf-2.3.x/tooling/exam/options/pom.xml b/karaf-2.3.x/tooling/exam/options/pom.xml
deleted file mode 100644
index d2e53bc..0000000
--- a/karaf-2.3.x/tooling/exam/options/pom.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.tooling.exam</groupId>
-        <artifactId>exam</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.tooling.exam</groupId>
-    <artifactId>org.apache.karaf.tooling.exam.options</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Tooling :: Exam Testing Framework :: Options</name>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.ops4j.pax.exam</groupId>
-            <artifactId>pax-exam</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
-                        <Bundle-Version>${project.version}</Bundle-Version>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/ConfigurationPointer.java b/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/ConfigurationPointer.java
deleted file mode 100644
index 37c303e..0000000
--- a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/ConfigurationPointer.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.options;
-
-/**
- * Bundled configuration for making it easily static accessible via classes.
- */
-public class ConfigurationPointer {
-
-    private String configurationFilePath;
-    private String key;
-
-    public ConfigurationPointer(String configurationFilePath, String key) {
-        this.configurationFilePath = configurationFilePath;
-        this.key = key;
-    }
-
-    public String getConfigurationFilePath() {
-        return configurationFilePath;
-    }
-
-    public String getKey() {
-        return key;
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/DoNotModifyLogOption.java b/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/DoNotModifyLogOption.java
deleted file mode 100644
index 5e69e60..0000000
--- a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/DoNotModifyLogOption.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.options;
-
-import org.ops4j.pax.exam.Option;
-
-/**
- * The karaf pax-logging configuration is typically not a file manipulated very often. Therefore we take the freedom of
- * adding a console logger and changing the log level directly. IF you like to configure the file manually (or had so in
- * your distribution) add this option to avoid any automatic modifications to this file!
- */
-public class DoNotModifyLogOption implements Option {
-
-}
diff --git a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/ExamBundlesStartLevel.java b/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/ExamBundlesStartLevel.java
deleted file mode 100644
index b98c8ef..0000000
--- a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/ExamBundlesStartLevel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.options;
-
-import org.ops4j.pax.exam.Option;
-
-/**
- * This option allows to configure the start level of the bundles in the exam features descriptor.
- */
-public class ExamBundlesStartLevel implements Option {
-
-    private final int startLevel;
-
-    /**
-     * Sets the start level of the bundles in the generated exam features descriptor.
-     */
-    public ExamBundlesStartLevel(int startLevel) {
-        this.startLevel = startLevel;
-    }
-
-    public int getStartLevel() {
-        return startLevel;
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionBaseConfigurationOption.java b/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionBaseConfigurationOption.java
deleted file mode 100644
index b7d755d..0000000
--- a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionBaseConfigurationOption.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.options;
-
-import org.ops4j.pax.exam.Option;
-import org.ops4j.pax.exam.options.MavenUrlReference;
-
-import java.io.File;
-
-public class KarafDistributionBaseConfigurationOption implements Option {
-
-    protected String frameworkURL;
-    protected MavenUrlReference frameworkURLReference;
-    protected String name;
-    protected String karafVersion;
-    protected File unpackDirectory;
-    protected boolean useDeployFolder = true;
-
-    public KarafDistributionBaseConfigurationOption() {
-        frameworkURL = null;
-        frameworkURLReference = null;
-        name = null;
-        karafVersion = null;
-    }
-
-    public KarafDistributionBaseConfigurationOption(String frameworkURL, String name, String karafVersion) {
-        this.frameworkURL = frameworkURL;
-        frameworkURLReference = null;
-        this.name = name;
-        this.karafVersion = karafVersion;
-    }
-
-    public KarafDistributionBaseConfigurationOption(MavenUrlReference frameworkURLReference, String name,
-                                                    String karafVersion) {
-        frameworkURL = null;
-        this.frameworkURLReference = frameworkURLReference;
-        this.name = name;
-        this.karafVersion = karafVersion;
-    }
-
-    public KarafDistributionBaseConfigurationOption(MavenUrlReference frameworkURLReference) {
-        frameworkURL = null;
-        this.frameworkURLReference = frameworkURLReference;
-    }
-
-    /**
-     * Simply clones the insterted {@link KarafDistributionConfigurationOption}
-     */
-    public KarafDistributionBaseConfigurationOption(KarafDistributionBaseConfigurationOption base) {
-        frameworkURL = base.frameworkURL;
-        frameworkURLReference = base.frameworkURLReference;
-        name = base.name;
-        karafVersion = base.karafVersion;
-        unpackDirectory = base.unpackDirectory;
-        useDeployFolder = base.useDeployFolder;
-    }
-
-    /**
-     * Sets the URL of the framework as a String (for example a file).
-     */
-    public KarafDistributionBaseConfigurationOption frameworkUrl(String frameworkURL) {
-        this.frameworkURL = frameworkURL;
-        return this;
-    }
-
-    /**
-     * Sets the URL of the frameworks as a maven reference.
-     */
-    public KarafDistributionBaseConfigurationOption frameworkUrl(MavenUrlReference frameworkURL) {
-        frameworkURLReference = frameworkURL;
-        return this;
-    }
-
-    /**
-     * Set's the name of the framework. This is only used for logging.
-     */
-    public KarafDistributionBaseConfigurationOption name(String name) {
-        this.name = name;
-        return this;
-    }
-
-    /**
-     * The version of karaf used by the framework. That one is required since there is the high possibility that
-     * configuration is different between various karaf versions.
-     */
-    public KarafDistributionBaseConfigurationOption karafVersion(String karafVersion) {
-        this.karafVersion = karafVersion;
-        return this;
-    }
-
-    /**
-     * Define the unpack directory for the karaf distribution. In this directory a UUID named directory will be created
-     * for each environment.
-     */
-    public KarafDistributionBaseConfigurationOption unpackDirectory(File unpackDirectory) {
-        this.unpackDirectory = unpackDirectory;
-        return this;
-    }
-
-    /**
-     * Per default the framework simply copies all referenced artifacts (via Pax Exam DistributionOption) to the deploy
-     * folder of the karaf (based) distribution. If you don't have such a folder (for any reason) you can set this
-     * option to false. PaxExam Karaf will then try to add those deployment urls directly to a features xml instead of
-     * copying those files to the deploy folder.
-     */
-    public KarafDistributionBaseConfigurationOption useDeployFolder(boolean useDeployFolder) {
-        this.useDeployFolder = useDeployFolder;
-        return this;
-    }
-
-    public String getFrameworkURL() {
-        if (frameworkURL == null && frameworkURLReference == null) {
-            throw new IllegalStateException("Either frameworkurl or frameworkUrlReference need to be set.");
-        }
-        return frameworkURL != null ? frameworkURL : frameworkURLReference.getURL();
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public String getKarafVersion() {
-        return karafVersion;
-    }
-
-    public File getUnpackDirectory() {
-        return unpackDirectory;
-    }
-
-    public boolean isUseDeployFolder() {
-        return useDeployFolder;
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionConfigurationConsoleOption.java b/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionConfigurationConsoleOption.java
deleted file mode 100644
index bcc80f4..0000000
--- a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionConfigurationConsoleOption.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.options;
-
-import org.ops4j.pax.exam.Option;
-
-/**
- * Option to configure the Karaf -Dkaraf.startLocalConsole and -Dkaraf.startRemoteShell options. Per default both are
- * started automatically. If you like to change this behavior simply add this option to your container configuration.
- */
-public class KarafDistributionConfigurationConsoleOption implements Option {
-
-    private Boolean startLocalConsole;
-    private Boolean startRemoteShell;
-
-    public KarafDistributionConfigurationConsoleOption(Boolean startLocalConsole, Boolean startRemoteShell) {
-        this.startLocalConsole = startLocalConsole;
-        this.startRemoteShell = startRemoteShell;
-    }
-
-    /**
-     * Sets the -Dkaraf.startLocalConsole to true
-     */
-    public KarafDistributionConfigurationConsoleOption startLocalConsole() {
-        startLocalConsole = true;
-        return this;
-    }
-
-    /**
-     * Sets the -Dkaraf.startLocalConsole to false
-     */
-    public KarafDistributionConfigurationConsoleOption ignoreLocalConsole() {
-        startLocalConsole = false;
-        return this;
-    }
-
-    /**
-     * Sets the -Dkaraf.startRemoteShell to true
-     */
-    public KarafDistributionConfigurationConsoleOption startRemoteShell() {
-        startRemoteShell = true;
-        return this;
-    }
-
-    /**
-     * Sets the -Dkaraf.startRemoteShell to false
-     */
-    public KarafDistributionConfigurationConsoleOption ignoreRemoteShell() {
-        startRemoteShell = false;
-        return this;
-    }
-
-    public Boolean getStartLocalConsole() {
-        return startLocalConsole;
-    }
-
-    public Boolean getStartRemoteShell() {
-        return startRemoteShell;
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionConfigurationFileExtendOption.java b/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionConfigurationFileExtendOption.java
deleted file mode 100644
index 9569680..0000000
--- a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionConfigurationFileExtendOption.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.options;
-
-/**
- * This option allows to extend configurations in each configuration file based on the karaf.home location. The value
- * extends the current value (e.g. a=b to a=a,b) instead of replacing it. If there is no current value it is added.
- * <p/>
- * If you would like to have add or replace functionality please use the
- * {@link KarafDistributionConfigurationFilePutOption} instead.
- */
-public class KarafDistributionConfigurationFileExtendOption extends KarafDistributionConfigurationFileOption {
-
-    public KarafDistributionConfigurationFileExtendOption(String configurationFilePath, String key, String value) {
-        super(configurationFilePath, key, value);
-    }
-
-    public KarafDistributionConfigurationFileExtendOption(ConfigurationPointer pointer, String value) {
-        super(pointer, value);
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionConfigurationFileOption.java b/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionConfigurationFileOption.java
deleted file mode 100644
index f9d7aa3..0000000
--- a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionConfigurationFileOption.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.options;
-
-import org.ops4j.pax.exam.Option;
-
-/**
- * Abstract configuration file option. This one should not used directly but rather via
- * {@link KarafDistributionConfigurationFileExtendOption} or {@link KarafDistributionConfigurationFilePutOption}.
- */
-public abstract class KarafDistributionConfigurationFileOption implements Option {
-
-    private String configurationFilePath;
-    private String key;
-    private String value;
-
-    public KarafDistributionConfigurationFileOption(ConfigurationPointer pointer, String value) {
-        this(pointer.getConfigurationFilePath(), pointer.getKey(), value);
-    }
-
-    public KarafDistributionConfigurationFileOption(String configurationFilePath, String key, String value) {
-        this.configurationFilePath = configurationFilePath;
-        this.key = key;
-        this.value = value;
-    }
-
-    public KarafDistributionConfigurationFileOption(String configurationFilePath) {
-        this.configurationFilePath = configurationFilePath;
-    }
-
-    public String getConfigurationFilePath() {
-        return configurationFilePath;
-    }
-
-    public String getKey() {
-        return key;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionConfigurationFilePutOption.java b/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionConfigurationFilePutOption.java
deleted file mode 100644
index 8325e91..0000000
--- a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionConfigurationFilePutOption.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.options;
-
-/**
- * This option allows to configure each configuration fille based on the karaf.home location. The value is "put". Which
- * means it is either replaced or added.
- * <p/>
- * If you like to extend an option (e.g. make a=b to a=b,c) please make use of the
- * {@link KarafDistributionConfigurationFileExtendOption}.
- */
-public class KarafDistributionConfigurationFilePutOption extends KarafDistributionConfigurationFileOption {
-
-    public KarafDistributionConfigurationFilePutOption(String configurationFilePath, String key, String value) {
-        super(configurationFilePath, key, value);
-    }
-
-    public KarafDistributionConfigurationFilePutOption(ConfigurationPointer pointer, String value) {
-        super(pointer, value);
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionConfigurationFileReplacementOption.java b/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionConfigurationFileReplacementOption.java
deleted file mode 100644
index ef61b9f..0000000
--- a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionConfigurationFileReplacementOption.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.options;
-
-import java.io.File;
-
-/**
- * If you do not want to replace (or extend) values in a file but rather simply want to replace a configuration file
- * "brute force" this option is the one of your choice. It simply removes the original file and replaces it with the one
- * configured here.
- */
-public class KarafDistributionConfigurationFileReplacementOption extends KarafDistributionConfigurationFileOption {
-
-    private File source;
-
-    public KarafDistributionConfigurationFileReplacementOption(String configurationFilePath, File source) {
-        super(configurationFilePath);
-        this.source = source;
-    }
-
-    public File getSource() {
-        return source;
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionConfigurationOption.java b/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionConfigurationOption.java
deleted file mode 100644
index 3b3175b..0000000
--- a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionConfigurationOption.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.options;
-
-import org.ops4j.pax.exam.options.MavenUrlReference;
-
-/**
- * Option describing the karaf distribution to use. Without this option no karaf based distribution can be used in exam
- * tests.
- */
-public class KarafDistributionConfigurationOption extends KarafDistributionBaseConfigurationOption {
-
-    public KarafDistributionConfigurationOption() {
-        super();
-    }
-
-    public KarafDistributionConfigurationOption(KarafDistributionBaseConfigurationOption base) {
-        super(base);
-    }
-
-    public KarafDistributionConfigurationOption(MavenUrlReference frameworkURLReference, String name,
-                                                String karafVersion) {
-        super(frameworkURLReference, name, karafVersion);
-    }
-
-    public KarafDistributionConfigurationOption(String frameworkURL, String name, String karafVersion) {
-        super(frameworkURL, name, karafVersion);
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionKitConfigurationOption.java b/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionKitConfigurationOption.java
deleted file mode 100644
index f2304ee..0000000
--- a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionKitConfigurationOption.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.options;
-
-import org.ops4j.pax.exam.options.MavenUrlReference;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Option describing the karaf distribution to use; This option uses the specified scripts to run the environment
- * depending on the platform. If a platform is defined and run on another platform it is simply ignored.
- */
-public class KarafDistributionKitConfigurationOption extends KarafDistributionBaseConfigurationOption {
-
-    public enum Platform {
-        WINDOWS, NIX
-    }
-
-    private Platform platform;
-    private List<String> makeExec = new ArrayList<String>();
-    private String exec;
-
-    public KarafDistributionKitConfigurationOption(KarafDistributionBaseConfigurationOption base,
-                                                   Platform platform) {
-        super(base);
-        setPlatform(platform);
-    }
-
-    public KarafDistributionKitConfigurationOption(MavenUrlReference frameworkURLReference, String name,
-                                                   String karafVersion, Platform platform) {
-        super(frameworkURLReference, name, karafVersion);
-        setPlatform(platform);
-    }
-
-    public KarafDistributionKitConfigurationOption(MavenUrlReference frameworkURLReference, Platform platform) {
-        super(frameworkURLReference);
-        setPlatform(platform);
-    }
-
-    public KarafDistributionKitConfigurationOption(String frameworkURL, String name, String karafVersion,
-                                                   Platform platform) {
-        super(frameworkURL, name, karafVersion);
-        setPlatform(platform);
-    }
-
-    private void setPlatform(Platform platform) {
-        this.platform = platform;
-        if (platform.equals(Platform.WINDOWS)) {
-            exec = "bin\\karaf.bat";
-        } else {
-            exec = "bin/karaf";
-        }
-    }
-
-    public KarafDistributionKitConfigurationOption filesToMakeExecutable(String... platformRelativeFilePath) {
-        for (String platformRelativePath : platformRelativeFilePath) {
-            makeExec.add(platformRelativePath);
-        }
-        return this;
-    }
-
-    public KarafDistributionKitConfigurationOption executable(String platformRelativeFilePath) {
-        exec = platformRelativeFilePath;
-        return this;
-    }
-
-    public Platform getPlatform() {
-        return platform;
-    }
-
-    public List<String> getMakeExec() {
-        return makeExec;
-    }
-
-    public String getExec() {
-        return exec;
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionOption.java b/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionOption.java
deleted file mode 100644
index 355f96c..0000000
--- a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafDistributionOption.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.options;
-
-import static java.lang.String.format;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-import java.util.Set;
-
-import org.apache.karaf.tooling.exam.options.LogLevelOption.LogLevel;
-import org.ops4j.pax.exam.Option;
-import org.ops4j.pax.exam.options.extra.VMOption;
-
-/**
- * Final class to provide an easy and intuitive way to configure the specific karaf distribution options.
- */
-public final class KarafDistributionOption {
-
-    /**
-     * Per default the folder pax-exam is deleting the test directories after a test is over. If you want to keep those
-     * directories (for later evaluation) simply set this option.
-     */
-    public static Option keepRuntimeFolder() {
-        return new KeepRuntimeFolderOption();
-    }
-
-    /**
-     * Provides an option to configure the internals of the PaxExamKaraf subsystem runner.
-     */
-    public static Option useOwnKarafExamSystemConfiguration(String invoker) {
-        return new KarafExamSystemConfigurationOption(invoker);
-    }
-
-    /**
-     * The karaf pax-logging configuration is typically not a file manipulated very often. Therefore we take the freedom
-     * of adding a console logger and changing the log level directly. IF you like to configure the file manually (or
-     * had so in your distribution) add this option to avoid any automatic modifications to this file!
-     */
-    public static Option doNotModifyLogConfiguration() {
-        return new DoNotModifyLogOption();
-    }
-
-    /**
-     * This option allows to configure the start level of the bundles in the exam features descriptor.
-     */
-    public static Option useOwnExamBundlesStartLevel(int startLevel) {
-        return new ExamBundlesStartLevel(startLevel);
-    }
-
-    /**
-     * Returns an option object which can be used to configure the -Dkaraf.startLocalConsole and
-     * -Dkaraf.startRemoteShell options. By default both are true.
-     */
-    public static KarafDistributionConfigurationConsoleOption configureConsole() {
-        return new KarafDistributionConfigurationConsoleOption(null, null);
-    }
-
-    /**
-     * Configures which distribution options to use. Relevant are the frameworkURL, the frameworkName and the Karaf
-     * version since all of those params are relevant to decide which wrapper configurations to use.
-     */
-    public static KarafDistributionBaseConfigurationOption karafDistributionConfiguration(String frameworkURL,
-                                                                                          String name,
-                                                                                          String karafVersion) {
-        return new KarafDistributionConfigurationOption(frameworkURL, name, karafVersion);
-    }
-
-    /**
-     * Configures which distribution options to use. Relevant are the frameworkURL, the frameworkName and the Karaf
-     * version since all of those params are relevant to decide which wrapper configurations to use.
-     */
-    public static KarafDistributionBaseConfigurationOption karafDistributionConfiguration() {
-        return new KarafDistributionConfigurationOption();
-    }
-
-    /**
-     * This option allows to configure each configuration fille based on the karaf.home location. The value is "put".
-     * Which means it is either replaced or added.
-     *
-     * If you like to extend an option (e.g. make a=b to a=b,c) please make use of the
-     * {@link KarafDistributionConfigurationFileExtendOption}.
-     */
-    public static Option editConfigurationFilePut(String configurationFilePath, String key, String value) {
-        return new KarafDistributionConfigurationFilePutOption(configurationFilePath, key, value);
-    }
-
-    /**
-     * This option allows to configure each configuration fille based on the karaf.home location. The value is "put".
-     * Which means it is either replaced or added.
-     *
-     * If you like to extend an option (e.g. make a=b to a=b,c) please make use of the
-     * {@link KarafDistributionConfigurationFileExtendOption}.
-     */
-    public static Option editConfigurationFilePut(ConfigurationPointer configurationPointer, String value) {
-        return new KarafDistributionConfigurationFilePutOption(configurationPointer, value);
-    }
-
-    /**
-     * This option allows to configure each configuration file based on the karaf.home location. The value is "put"
-     * which means it is either replaced or added. For simpler configuration you can add a file source. If you want to
-     * put all values from this file do not configure any keysToUseFromSource; otherwise define them to use only those
-     * specific values.
-     */
-    public static Option[] editConfigurationFilePut(final String configurationFilePath,
-                                                    File source, String... keysToUseFromSource) {
-        return createOptionListFromFile(source, new FileOptionFactory() {
-            @Override
-            public Option createOption(String key, String value) {
-                return new KarafDistributionConfigurationFilePutOption(configurationFilePath, key, value);
-            }
-        }, keysToUseFromSource);
-    }
-
-    private static interface FileOptionFactory {
-        Option createOption(String key, String value);
-    }
-
-    private static Option[] createOptionListFromFile(File source, FileOptionFactory optionFactory,
-                                                     String... keysToUseFromSource) {
-        Properties props = new Properties();
-        try {
-            props.load(new FileInputStream(source));
-        } catch (FileNotFoundException e) {
-            throw new IllegalStateException(e);
-        } catch (IOException e) {
-            throw new IllegalStateException(e);
-        }
-        List<Option> options =
-                new ArrayList<Option>();
-        if (keysToUseFromSource == null || keysToUseFromSource.length == 0) {
-            Set<Object> keySet = props.keySet();
-            for (Object key : keySet) {
-                Object value = props.get(key);
-                options.add(optionFactory.createOption((String) key, (String) value));
-            }
-        } else {
-            for (String key : keysToUseFromSource) {
-                Object value = props.get(key);
-                options.add(optionFactory.createOption(key, (String) value));
-            }
-        }
-        return options.toArray(new Option[]{});
-    }
-
-    /**
-     * This option allows to extend configurations in each configuration file based on the karaf.home location. The
-     * value extends the current value (e.g. a=b to a=a,b) instead of replacing it. If there is no current value it is
-     * added.
-     *
-     * If you would like to have add or replace functionality please use the
-     * {@link KarafDistributionConfigurationFilePutOption} instead.
-     */
-    public static Option editConfigurationFileExtend(String configurationFilePath, String key, String value) {
-        return new KarafDistributionConfigurationFileExtendOption(configurationFilePath, key, value);
-    }
-
-    /**
-     * This option allows to extend configurations in each configuration file based on the karaf.home location. The
-     * value extends the current value (e.g. a=b to a=a,b) instead of replacing it. If there is no current value it is
-     * added.
-     *
-     * If you would like to have add or replace functionality please use the
-     * {@link KarafDistributionConfigurationFilePutOption} instead.
-     */
-    public static Option editConfigurationFileExtend(ConfigurationPointer configurationPointer, String value) {
-        return new KarafDistributionConfigurationFileExtendOption(configurationPointer, value);
-    }
-
-    /**
-     * This option allows to configure each configuration file based on the karaf.home location. The value is "extend"
-     * which means it is either replaced or added. For simpler configuration you can add a file source. If you want to
-     * put all values from this file do not configure any keysToUseFromSource; otherwise define them to use only those
-     * specific values.
-     */
-    public static Option[] editConfigurationFileExtend(final String configurationFilePath, File source,
-                                                       String... keysToUseFromSource) {
-        return createOptionListFromFile(source, new FileOptionFactory() {
-            @Override
-            public Option createOption(String key, String value) {
-                return new KarafDistributionConfigurationFileExtendOption(configurationFilePath, key, value);
-            }
-        }, keysToUseFromSource);
-    }
-
-    /**
-     * This option allows to simply replace an entire configuration file with your own one. Simply point to the
-     * configuration file you would like to have replaced and add the source file which should replace it.
-     */
-    public static Option replaceConfigurationFile(String configurationFilePath, File source) {
-        return new KarafDistributionConfigurationFileReplacementOption(configurationFilePath, source);
-    }
-
-    /**
-     * Activates debugging on the embedded Karaf container using the standard 5005 port and holds the vm till you've
-     * attached the debugger.
-     */
-    public static Option debugConfiguration() {
-        return debugConfiguration("5005", true);
-    }
-
-    /**
-     * A very simple and convinient method to set a specific log level without the need of configure the specific option
-     * itself.
-     */
-    public static Option logLevel(LogLevel logLevel) {
-        return new LogLevelOption(logLevel);
-    }
-
-    /**
-     * A very simple and convinient method to set a specific log level without the need of configure the specific option
-     * itself.
-     */
-    public static LogLevelOption logLevel() {
-        return new LogLevelOption();
-    }
-
-    /**
-     * Returns an easy option to activate and configure remote debugging for the Karaf container.
-     */
-    public static Option debugConfiguration(String port, boolean hold) {
-        return new VMOption(format("-Xrunjdwp:transport=dt_socket,server=y,suspend=%s,address=%s", hold ? "y" : "n",
-                port));
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafExamSystemConfigurationOption.java b/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafExamSystemConfigurationOption.java
deleted file mode 100644
index 70cfee4..0000000
--- a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KarafExamSystemConfigurationOption.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.options;
-
-import org.ops4j.pax.exam.Option;
-
-/**
- * Option to configure the internal invoker for integration tests to be used.
- */
-public class KarafExamSystemConfigurationOption implements Option {
-
-    private String invoker;
-
-    /**
-     * define the pax.exam.invoker property as system property in the environment during creating the subproject.
-     */
-    public KarafExamSystemConfigurationOption(String invoker) {
-        this.invoker = invoker;
-    }
-
-    public String getInvoker() {
-        return invoker;
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KeepRuntimeFolderOption.java b/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KeepRuntimeFolderOption.java
deleted file mode 100644
index 70c5dd6..0000000
--- a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/KeepRuntimeFolderOption.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.options;
-
-import org.ops4j.pax.exam.Option;
-
-/**
- * Per default the folder pax-exam is deleting the test directories after a test is over. If you want to keep those
- * directories (for later evaluation) simply set this option.
- */
-public class KeepRuntimeFolderOption implements Option {
-
-}
diff --git a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/LogLevelOption.java b/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/LogLevelOption.java
deleted file mode 100644
index 3196e2a..0000000
--- a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/LogLevelOption.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.options;
-
-import org.ops4j.pax.exam.Option;
-
-/**
- * While the log-level could also be configured using the config options in the configuration files we also provide a
- * more easy option here.
- */
-public class LogLevelOption implements Option {
-
-    public static enum LogLevel {
-        TRACE, DEBUG, INFO, WARN, ERROR
-    }
-
-    private LogLevel logLevel;
-
-    public LogLevelOption() {
-    }
-
-    public LogLevelOption(LogLevel logLevel) {
-        this.logLevel = logLevel;
-    }
-
-    public LogLevelOption logLevel(LogLevel logLevel) {
-        this.logLevel = logLevel;
-        return this;
-    }
-
-    public LogLevel getLogLevel() {
-        return logLevel;
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/CustomProperties.java b/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/CustomProperties.java
deleted file mode 100644
index 0ff49f1..0000000
--- a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/CustomProperties.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.options.configs;
-
-import org.apache.karaf.tooling.exam.options.ConfigurationPointer;
-
-/**
- * Pre configured property file pointers to the most commonly used properties in /etc/config.properties and
- * /etc/custom.properties.
- */
-public interface CustomProperties {
-
-    static final String FILE_PATH = "etc/config.properties";
-
-    /**
-     * Possible values here are felix or equinox
-     */
-    static final ConfigurationPointer KARAF_FRAMEWORK = new CustomPropertiesPointer("karaf.framework");
-
-    static final ConfigurationPointer SYSTEM_PACKAGES_EXTRA = new CustomPropertiesPointer(
-            "org.osgi.framework.system.packages.extra");
-
-    static final ConfigurationPointer BOOTDELEGATION = new CustomPropertiesPointer("org.osgi.framework.bootdelegation");
-
-    static class CustomPropertiesPointer extends ConfigurationPointer {
-
-        public CustomPropertiesPointer(String key) {
-            super(FILE_PATH, key);
-        }
-
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/FeaturesCfg.java b/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/FeaturesCfg.java
deleted file mode 100644
index de40aa5..0000000
--- a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/FeaturesCfg.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.options.configs;
-
-import org.apache.karaf.tooling.exam.options.ConfigurationPointer;
-
-/**
- * Pre configured property file pointers to the most commonly used properties in /etc/config.properties and
- * /etc/org.apache.karaf.features.cfg.
- */
-public interface FeaturesCfg {
-
-    static final String FILE_PATH = "etc/org.apache.karaf.features.cfg";
-
-    static final ConfigurationPointer REPOSITORIES = new CustomPropertiesPointer("featuresRepositories");
-    static final ConfigurationPointer BOOT = new CustomPropertiesPointer("featuresBoot");
-
-    static class CustomPropertiesPointer extends ConfigurationPointer {
-
-        public CustomPropertiesPointer(String key) {
-            super(FILE_PATH, key);
-        }
-
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/JreProperties.java b/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/JreProperties.java
deleted file mode 100644
index 4c01be4..0000000
--- a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/JreProperties.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.options.configs;
-
-import org.apache.karaf.tooling.exam.options.ConfigurationPointer;
-
-/**
- * Pre configured property file pointers to the most commonly used properties in /etc/config.properties and
- * /etc/jre.properties.
- */
-public interface JreProperties {
-
-    static final String FILE_PATH = "etc/jre.properties";
-
-    static final ConfigurationPointer JRE15 = new CustomPropertiesPointer("jre-1.5");
-    static final ConfigurationPointer JRE16 = new CustomPropertiesPointer("jre-1.6");
-    static final ConfigurationPointer JRE17 = new CustomPropertiesPointer("jre-1.7");
-
-    static class CustomPropertiesPointer extends ConfigurationPointer {
-
-        public CustomPropertiesPointer(String key) {
-            super(FILE_PATH, key);
-        }
-
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/LoggingCfg.java b/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/LoggingCfg.java
deleted file mode 100644
index 87efe67..0000000
--- a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/LoggingCfg.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.options.configs;
-
-import org.apache.karaf.tooling.exam.options.ConfigurationPointer;
-
-/**
- * Pre configured property file pointers to the most commonly used properties in /etc/config.properties and
- * /etc/org.ops4j.pax.logging.cfg.
- */
-public interface LoggingCfg {
-
-    static final String FILE_PATH = "etc/org.ops4j.pax.logging.cfg";
-
-    static final ConfigurationPointer ROOT_LOGGER = new CustomPropertiesPointer("log4j.rootLogger");
-
-    static class CustomPropertiesPointer extends ConfigurationPointer {
-
-        public CustomPropertiesPointer(String key) {
-            super(FILE_PATH, key);
-        }
-
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/ManagementCfg.java b/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/ManagementCfg.java
deleted file mode 100644
index 4ceabc1..0000000
--- a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/ManagementCfg.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.options.configs;
-
-import org.apache.karaf.tooling.exam.options.ConfigurationPointer;
-
-/**
- * Pre configured property file pointers to the most commonly used properties in /etc/config.properties and
- * /etc/org.apache.karaf.management.cfg.
- */
-public interface ManagementCfg {
-
-    static final String FILE_PATH = "etc/org.apache.karaf.management.cfg";
-
-    /**
-     * Port of the registry for the exported RMI service
-     */
-    static final ConfigurationPointer RMI_REGISTRY_PORT = new CustomPropertiesPointer("rmiRegistryPort");
-
-    /**
-     * Port of the registry for the exported RMI service
-     */
-    static final ConfigurationPointer RMI_SERVER_PORT = new CustomPropertiesPointer("rmiServerPort");
-
-    static class CustomPropertiesPointer extends ConfigurationPointer {
-
-        public CustomPropertiesPointer(String key) {
-            super(FILE_PATH, key);
-        }
-
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/SystemProperties.java b/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/SystemProperties.java
deleted file mode 100644
index 9a910e5..0000000
--- a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/SystemProperties.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.options.configs;
-
-import org.apache.karaf.tooling.exam.options.ConfigurationPointer;
-
-/**
- * Pre configured property file pointers to the most commonly used properties in /etc/config.properties and
- * /etc/system.properties..
- */
-public interface SystemProperties {
-
-    static final String FILE_PATH = "etc/system.properties";
-
-    static final ConfigurationPointer KARAF_NAME = new CustomPropertiesPointer("karaf.name");
-
-    static class CustomPropertiesPointer extends ConfigurationPointer {
-
-        public CustomPropertiesPointer(String key) {
-            super(FILE_PATH, key);
-        }
-
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/UsersProperties.java b/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/UsersProperties.java
deleted file mode 100644
index 8e2527c..0000000
--- a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/UsersProperties.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.options.configs;
-
-import org.apache.karaf.tooling.exam.options.ConfigurationPointer;
-
-/**
- * Pre configured property file pointers to the most commonly used properties in /etc/config.properties and
- * /etc/users.properties.
- */
-public interface UsersProperties {
-
-    static final String FILE_PATH = "etc/users.properties";
-
-    static final ConfigurationPointer KARAF_USER = new CustomPropertiesPointer("karaf");
-
-    static class CustomPropertiesPointer extends ConfigurationPointer {
-
-        public CustomPropertiesPointer(String key) {
-            super(FILE_PATH, key);
-        }
-
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/WebCfg.java b/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/WebCfg.java
deleted file mode 100644
index f992722..0000000
--- a/karaf-2.3.x/tooling/exam/options/src/main/java/org/apache/karaf/tooling/exam/options/configs/WebCfg.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.exam.options.configs;
-
-import org.apache.karaf.tooling.exam.options.ConfigurationPointer;
-
-/**
- * Pre configured property file pointers to the most commonly used properties in /etc/config.properties and
- * /etc/org.ops4j.pax.web.cfg.
- */
-public interface WebCfg {
-
-    static final String FILE_PATH = "etc/org.ops4j.pax.web.cfg";
-
-    static final ConfigurationPointer HTTP_PORT = new CustomPropertiesPointer("org.osgi.service.http.port");
-
-    static class CustomPropertiesPointer extends ConfigurationPointer {
-
-        public CustomPropertiesPointer(String key) {
-            super(FILE_PATH, key);
-        }
-
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/exam/pom.xml b/karaf-2.3.x/tooling/exam/pom.xml
deleted file mode 100644
index b9c8ce6..0000000
--- a/karaf-2.3.x/tooling/exam/pom.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.tooling</groupId>
-        <artifactId>tooling</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.tooling.exam</groupId>
-    <artifactId>exam</artifactId>
-    <packaging>pom</packaging>
-    <name>Apache Karaf :: Tooling :: Exam Testing Framework</name>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <modules>
-        <module>options</module>
-        <module>container</module>
-    </modules>
-
-</project>
\ No newline at end of file
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/NOTICE b/karaf-2.3.x/tooling/features-maven-plugin/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/tooling/features-maven-plugin/pom.xml b/karaf-2.3.x/tooling/features-maven-plugin/pom.xml
deleted file mode 100644
index a27664a..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/pom.xml
+++ /dev/null
@@ -1,180 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.tooling</groupId>
-        <artifactId>tooling</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>features-maven-plugin</artifactId>
-    <packaging>maven-plugin</packaging>
-    <name>Apache Karaf :: Tooling :: Maven2 Features plugin</name>
-
-    <description>
-        A Maven 2 plugin for working with feature descriptors.
-    </description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-jdk14</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.maven</groupId>
-            <artifactId>maven-plugin-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.maven</groupId>
-            <artifactId>maven-project</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>maven-bundle-plugin</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.features</groupId>
-            <artifactId>org.apache.karaf.features.core</artifactId>
-            <exclusions>
-                <exclusion>
-                    <artifactId>org.apache.karaf.shell.console</artifactId>
-                    <groupId>org.apache.karaf.shell</groupId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.url</groupId>
-            <artifactId>pax-url-wrap</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.url</groupId>
-            <artifactId>pax-url-mvn</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.deployer</groupId>
-            <artifactId>org.apache.karaf.deployer.spring</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.deployer</groupId>
-            <artifactId>org.apache.karaf.deployer.blueprint</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.deployer</groupId>
-            <artifactId>org.apache.karaf.deployer.features</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.deployer</groupId>
-            <artifactId>org.apache.karaf.deployer.kar</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicemix.bundles</groupId>
-            <artifactId>org.apache.servicemix.bundles.ant</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymock</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.codehaus.plexus</groupId>
-            <artifactId>plexus-utils</artifactId>
-            <version>${plexus.utils.version}</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <!--<plugin>-->
-            <!--<groupId>org.codehaus.mojo</groupId>-->
-            <!--<artifactId>jaxb2-maven-plugin</artifactId>-->
-            <!--<version>1.3</version>-->
-            <!--<executions>-->
-            <!--<execution>-->
-            <!--<goals>-->
-            <!--<goal>xjc</goal>-->
-            <!--</goals>-->
-            <!--</execution>-->
-            <!--</executions>-->
-            <!--<configuration>-->
-            <!--<schemaDirectory>src/main/resources/org/apache/karaf/features</schemaDirectory>-->
-            <!--<packageName>org.apache.karaf.features.internal</packageName>-->
-            <!--<extension>true</extension>-->
-            <!--</configuration>-->
-            <!--</plugin>-->
-
-        </plugins>
-    </build>
-
-    <profiles>
-        <profile>
-            <id>java5</id>
-            <activation>
-                <jdk>[1.5,1.6)</jdk>
-            </activation>
-            <dependencies>
-                <dependency>
-                    <groupId>org.apache.geronimo.specs</groupId>
-                    <artifactId>geronimo-stax-api_1.2_spec</artifactId>
-                    <version>1.0</version>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.servicemix.specs</groupId>
-                    <artifactId>org.apache.servicemix.specs.activation-api-1.1</artifactId>
-                    <version>1.9.0</version>
-                </dependency>
-                <dependency>
-                    <groupId>org.codehaus.woodstox</groupId>
-                    <artifactId>wstx-asl</artifactId>
-                    <version>3.2.9</version>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.geronimo.specs</groupId>
-                    <artifactId>geronimo-jaxb_2.1_spec</artifactId>
-                    <version>1.0</version>
-                </dependency>
-                <dependency>
-                    <groupId>com.sun.xml.bind</groupId>
-                    <artifactId>jaxb-impl</artifactId>
-                    <version>2.1.12</version>
-                    <exclusions>
-                        <exclusion>
-                            <groupId>javax.xml.bind</groupId>
-                            <artifactId>jaxb-api</artifactId>
-                        </exclusion>
-                    </exclusions>
-                </dependency>
-                <dependency>
-                    <groupId>com.sun.xml.bind</groupId>
-                    <artifactId>jaxb-xjc</artifactId>
-                    <version>2.1.12</version>
-                </dependency>
-            </dependencies>
-        </profile>
-    </profiles>
-
-</project>
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/AddFeaturesToRepoMojo.java b/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/AddFeaturesToRepoMojo.java
deleted file mode 100644
index eb67a07..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/AddFeaturesToRepoMojo.java
+++ /dev/null
@@ -1,516 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.tooling.features;
-
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
-
-/**
- * Add Features necessary bundles into system folder Repo
- *
- * @goal add-features-to-repo
- * @phase compile
- * @execute phase="compile"
- * @requiresDependencyResolution runtime
- * @inheritByDefault true
- * @description Add the features to the repository
- */
-public class AddFeaturesToRepoMojo extends MojoSupport {
-
-    private final static String KARAF_CORE_STANDARD_FEATURE_URL =
-        "mvn:org.apache.karaf.assemblies.features/standard/%s/xml/features";
-    private final static String KARAF_CORE_ENTERPRISE_FEATURE_URL =
-        "mvn:org.apache.karaf.assemblies.features/enterprise/%s/xml/features";
-
-    /**
-     * @parameter
-     */
-    private List<String> descriptors;
-
-    /**
-     * @parameter
-     */
-    private List<String> features;
-
-    /**
-     * @parameter expression="${project.build.directory}/features-repo"
-     */
-    private File repository;
-
-    /**
-     * the target Karaf version used to resolve Karaf core features descriptors
-     *
-     * @parameter
-     */
-    private String karafVersion;
-
-    /**
-     * @parameter
-     */
-    private boolean includeMvnBasedDescriptors = false;
-
-    /**
-     * @parameter
-     */
-    private List<CopyFileBasedDescriptor> copyFileBasedDescriptors;
-
-    /**
-     * @parameter
-     */
-    private boolean skipNonMavenProtocols = true;
-
-    /**
-     * @parameter
-     */
-    private boolean failOnArtifactResolutionError = true;
-
-    /**
-     * @parameter
-     */
-    private boolean resolveDefinedRepositoriesRecursively = true;
-
-    /**
-     * @parameter
-     */
-    private boolean addTransitiveFeatures = true;
-
-    public void execute() throws MojoExecutionException, MojoFailureException {
-        if (karafVersion == null) {
-            Package p = Package.getPackage("org.apache.karaf.tooling.features");
-            karafVersion = p.getImplementationVersion();
-        }
-        String karafCoreStandardFeatureUrl = String.format(KARAF_CORE_STANDARD_FEATURE_URL, karafVersion);
-        Artifact standardFeatureDescriptor = resourceToArtifact(karafCoreStandardFeatureUrl, true);
-        if (standardFeatureDescriptor != null) {
-            try {
-                resolveBundle(standardFeatureDescriptor, remoteRepos);
-                descriptors.add(0, karafCoreStandardFeatureUrl);
-            } catch (Exception e) {
-                getLog().warn("Can't add " + karafCoreStandardFeatureUrl + " in the descriptors set");
-                getLog().debug(e);
-            }
-        }
-        String karafCoreEnterpriseFeatureUrl = String.format(KARAF_CORE_ENTERPRISE_FEATURE_URL, karafVersion);
-        Artifact enterpriseFeatureDescriptor = resourceToArtifact(karafCoreEnterpriseFeatureUrl, true);
-        if (enterpriseFeatureDescriptor != null) {
-            try {
-                resolveBundle(enterpriseFeatureDescriptor, remoteRepos);
-                descriptors.add(0, karafCoreEnterpriseFeatureUrl);
-            } catch (Exception e) {
-                getLog().warn("Can't add " + karafCoreEnterpriseFeatureUrl + " in the descriptors set");
-                getLog().debug(e);
-            }
-        }
-        try {
-            Set<String> bundles = new HashSet<String>();
-            Map<String, Feature> featuresMap = new HashMap<String, Feature>();
-            for (String uri : descriptors) {
-                retrieveDescriptorsRecursively(uri, bundles, featuresMap);
-            }
-
-            // no features specified, handle all of them
-            if (features == null) {
-                features = new ArrayList<String>(featuresMap.keySet());
-            }
-
-            Set<String> featuresBundles = new HashSet<String>();
-            Set<String> transitiveFeatures = new HashSet<String>();
-            addFeatures(features, featuresBundles, transitiveFeatures, featuresMap);
-
-            // add the bundles of the configured features to the bundles list
-            bundles.addAll(featuresBundles);
-
-            // if transitive features are enabled we add the contents of those
-            // features to the bundles list
-            if (addTransitiveFeatures) {
-                for (String feature : transitiveFeatures) {
-                    // transitiveFeatures contains name/version
-                    Feature f = featuresMap.get(feature);
-                    getLog().info("Adding contents of transitive feature: " + feature);
-                    bundles.addAll(f.getBundles());
-                    // Treat the config files as bundles, since it is only copying
-                    bundles.addAll(f.getConfigFiles());
-                }
-            }
-
-            // bundles with explicitely specified remote repos. key -> bundle, value -> remote repo
-            List<Artifact> explicitRepoBundles = new ArrayList<Artifact>();
-
-            getLog().info("Base repo: " + localRepo.getUrl());
-            int currentBundle = 0;
-            for (String bundle : bundles) {
-                Artifact artifact = resourceToArtifact(bundle, skipNonMavenProtocols);
-
-                // Maven ArtifactResolver leaves file handles around so need to clean up
-                // or we will run out of file descriptors
-                if (currentBundle++ % 100 == 0) {
-                    System.gc();
-                    System.runFinalization();
-                }
-
-                if (artifact == null) {
-                    continue;
-                }
-                if (artifact.getRepository() != null) {
-                    explicitRepoBundles.add(artifact);
-                } else {
-                    // bundle URL without repository information are resolved now
-                    resolveBundle(artifact, remoteRepos);
-                }
-            }
-            // resolving all bundles with explicitly specified remote repository
-            for (Artifact explicitBundle : explicitRepoBundles) {
-                resolveBundle(explicitBundle, Collections.singletonList(explicitBundle.getRepository()));
-            }
-            if (copyFileBasedDescriptors != null) {
-                for (CopyFileBasedDescriptor fileBasedDescriptor : copyFileBasedDescriptors) {
-                    copy(new FileInputStream(fileBasedDescriptor.getSourceFile()),
-                        repository,
-                        fileBasedDescriptor.getTargetFileName(),
-                        fileBasedDescriptor.getTargetDirectory(),
-                        new byte[8192]);
-                }
-            }
-        } catch (MojoExecutionException e) {
-            throw e;
-        } catch (MojoFailureException e) {
-            throw e;
-        } catch (Exception e) {
-            throw new MojoExecutionException("Error populating repository", e);
-        }
-    }
-
-    private void retrieveDescriptorsRecursively(String uri, Set<String> bundles, Map<String, Feature> featuresMap)
-        throws Exception {
-        // let's ensure a mvn: based url is sitting in the local repo before we try reading it
-        Artifact descriptor = resourceToArtifact(uri, true);
-        if (descriptor != null) {
-            resolveBundle(descriptor, remoteRepos);
-        }
-        if (includeMvnBasedDescriptors) {
-            bundles.add(uri);
-        }
-        Repository repo = new Repository(URI.create(translateFromMaven(uri.replaceAll(" ", "%20"))));
-        for (Feature f : repo.getFeatures()) {
-            featuresMap.put(f.getName() + "/" + f.getVersion(), f);
-        }
-        if (resolveDefinedRepositoriesRecursively) {
-            for (String r : repo.getDefinedRepositories()) {
-                retrieveDescriptorsRecursively(r, bundles, featuresMap);
-            }
-        }
-    }
-
-    // resolves the bundle in question
-    // TODO neither remoteRepos nor bundle's Repository are used, only the local repo?????
-    private void resolveBundle(Artifact bundle, List<ArtifactRepository> remoteRepos) throws IOException,
-        MojoFailureException {
-        // TODO consider DefaultRepositoryLayout
-        String dir =
-            bundle.getGroupId().replace('.', '/') + "/" + bundle.getArtifactId() + "/" + bundle.getBaseVersion() + "/";
-        String name =
-            bundle.getArtifactId() + "-" + bundle.getBaseVersion()
-                    + (bundle.getClassifier() != null ? "-" + bundle.getClassifier() : "") + "." + bundle.getType();
-
-        try {
-            getLog().info("Copying bundle: " + bundle);
-            resolver.resolve(bundle, remoteRepos, localRepo);
-            copy(new FileInputStream(bundle.getFile()),
-                repository,
-                name,
-                dir,
-                new byte[8192]);
-        } catch (ArtifactResolutionException e) {
-            if (failOnArtifactResolutionError) {
-                throw new MojoFailureException("Can't resolve bundle " + bundle, e);
-            }
-            getLog().error("Can't resolve bundle " + bundle, e);
-        } catch (ArtifactNotFoundException e) {
-            if (failOnArtifactResolutionError) {
-                throw new MojoFailureException("Can't resolve bundle " + bundle, e);
-            }
-            getLog().error("Can't resolve bundle " + bundle, e);
-        }
-    }
-
-    private void addFeatures(List<String> features, Set<String> featuresBundles, Set<String> transitiveFeatures,
-            Map<String, Feature> featuresMap) {
-        for (String feature : features) {
-            
-            // feature could be only the name or name/version
-            int delimIndex = feature.indexOf('/');
-            String version = null;
-            if (delimIndex > 0) {
-                version = feature.substring(delimIndex + 1);
-                feature = feature.substring(0, delimIndex);
-            }
- 
-            Feature f = null;
-            if (version != null) {
-                // looking for a specific feature with name and version
-                f = featuresMap.get(feature + "/" + version);
-            } else {
-                // looking for the feature name (with the greatest version)
-                for (String key : featuresMap.keySet()) {
-                    String[] nameVersion = key.split("/");
-                    if (feature.equals(nameVersion[0])) {
-                        if (f == null || f.getVersion().compareTo(featuresMap.get(key).getVersion()) < 0) {
-                            f = featuresMap.get(key);
-                        }
-                    }
-                }
-            }
-            if (f == null) {
-                throw new IllegalArgumentException("Unable to find the feature '" + feature + "'");
-            }
-            // only add the feature to transitives if it is not
-            // listed in the features list defined by the config
-            if (!this.features.contains(f.getName() + "/" + f.getVersion())) {
-                transitiveFeatures.add(f.getName() + "/" + f.getVersion());
-            } else {
-                // add the bundles of the feature to the bundle set
-                getLog().info("Adding contents for feature: " + f.getName() + "/" + f.getVersion());
-                featuresBundles.addAll(f.getBundles());
-                // Treat the config files as bundles, since it is only copying
-                featuresBundles.addAll(f.getConfigFiles());
-            }
-            addFeatures(f.getDependencies(), featuresBundles, transitiveFeatures, featuresMap);
-        }
-    }
-
-    public static void copy(
-            InputStream is, File dir, String destName, String destDir, byte[] buffer)
-        throws IOException {
-        if (destDir == null) {
-            destDir = "";
-        }
-
-        // Make sure the target directory exists and
-        // that is actually a directory.
-        File targetDir = new File(dir, destDir);
-        if (!targetDir.exists()) {
-            if (!targetDir.mkdirs()) {
-                throw new IOException("Unable to create target directory: "
-                        + targetDir);
-            }
-        } else if (!targetDir.isDirectory()) {
-            throw new IOException("Target is not a directory: "
-                    + targetDir);
-        }
-
-        BufferedOutputStream bos = new BufferedOutputStream(
-            new FileOutputStream(new File(targetDir, destName)));
-        int count = 0;
-        while ((count = is.read(buffer)) > 0) {
-            bos.write(buffer, 0, count);
-        }
-        bos.close();
-    }
-
-    public static class Feature {
-
-        private String name;
-        private String version;
-        private List<String> dependencies = new ArrayList<String>();
-        private List<String> bundles = new ArrayList<String>();
-        private Map<String, Map<String, String>> configs = new HashMap<String, Map<String, String>>();
-        private List<String> configFiles = new ArrayList<String>();
-
-        public Feature(String name) {
-            this.name = name;
-        }
-
-        public String getName() {
-            return name;
-        }
-        
-        public String getVersion() {
-            return version;
-        }
-        
-        public void setVersion(String version) {
-            this.version = version;
-        }
-
-        public List<String> getDependencies() {
-            return dependencies;
-        }
-
-        public List<String> getBundles() {
-            return bundles;
-        }
-
-        public Map<String, Map<String, String>> getConfigurations() {
-            return configs;
-        }
-
-        public List<String> getConfigFiles() {
-            return configFiles;
-        }
-
-        public void addDependency(String dependency) {
-            dependencies.add(dependency);
-        }
-
-        public void addBundle(String bundle) {
-            bundles.add(bundle);
-        }
-
-        public void addConfig(String name, Map<String, String> properties) {
-            configs.put(name, properties);
-        }
-
-        public void addConfigFile(String configFile) {
-            configFiles.add(configFile);
-        }
-    }
-
-    public static class Repository {
-
-        private URI uri;
-        private List<Feature> features;
-        private List<String> repositories;
-
-        public Repository(URI uri) {
-            this.uri = uri;
-        }
-
-        public URI getURI() {
-            return uri;
-        }
-
-        public Feature[] getFeatures() throws Exception {
-            if (features == null) {
-                loadFeatures();
-            }
-            return features.toArray(new Feature[features.size()]);
-        }
-
-        public String[] getDefinedRepositories() throws Exception {
-            if (repositories == null) {
-                loadRepositories();
-            }
-            return repositories.toArray(new String[repositories.size()]);
-        }
-
-        private void loadRepositories() throws IOException {
-            try {
-                repositories = new ArrayList<String>();
-                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-                Document doc = factory.newDocumentBuilder().parse(uri.toURL().openStream());
-                NodeList nodes = doc.getDocumentElement().getChildNodes();
-                for (int i = 0; i < nodes.getLength(); i++) {
-                    org.w3c.dom.Node node = nodes.item(i);
-                    if (!(node instanceof Element) || !"repository".equals(node.getNodeName())) {
-                        continue;
-                    }
-                    Element e = (Element) nodes.item(i);
-                    repositories.add(e.getTextContent().trim());
-                }
-            } catch (SAXException e) {
-                throw (IOException) new IOException().initCause(e);
-            } catch (ParserConfigurationException e) {
-                throw (IOException) new IOException().initCause(e);
-            }
-        }
-
-        private void loadFeatures() throws IOException {
-            try {
-                features = new ArrayList<Feature>();
-                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-                Document doc = factory.newDocumentBuilder().parse(uri.toURL().openStream());
-                NodeList nodes = doc.getDocumentElement().getChildNodes();
-                for (int i = 0; i < nodes.getLength(); i++) {
-                    org.w3c.dom.Node node = nodes.item(i);
-                    if (!(node instanceof Element) || !"feature".equals(node.getNodeName())) {
-                        continue;
-                    }
-                    Element e = (Element) nodes.item(i);
-                    String name = e.getAttribute("name");
-                    String version = e.getAttribute("version");
-                    Feature f = new Feature(name);
-                    f.setVersion(version);
-                    NodeList featureNodes = e.getElementsByTagName("feature");
-                    for (int j = 0; j < featureNodes.getLength(); j++) {
-                        Element b = (Element) featureNodes.item(j);
-                        f.addDependency(b.getTextContent());
-                    }
-                    NodeList configNodes = e.getElementsByTagName("config");
-                    for (int j = 0; j < configNodes.getLength(); j++) {
-                        Element c = (Element) configNodes.item(j);
-                        String cfgName = c.getAttribute("name");
-                        String data = c.getTextContent();
-                        Properties properties = new Properties();
-                        properties.load(new ByteArrayInputStream(data.getBytes()));
-                        Map<String, String> hashtable = new Hashtable<String, String>();
-                        for (Object key : properties.keySet()) {
-                            String n = key.toString();
-                            hashtable.put(n, properties.getProperty(n));
-                        }
-                        f.addConfig(cfgName, hashtable);
-                    }
-                    NodeList configFileNodes = e.getElementsByTagName("configfile");
-                    for (int j = 0; j < configFileNodes.getLength(); j++) {
-                        Element c = (Element) configFileNodes.item(j);
-                        f.addConfigFile(c.getTextContent());
-                    }
-                    NodeList bundleNodes = e.getElementsByTagName("bundle");
-                    for (int j = 0; j < bundleNodes.getLength(); j++) {
-                        Element b = (Element) bundleNodes.item(j);
-                        f.addBundle(b.getTextContent());
-                    }
-                    features.add(f);
-                }
-            } catch (SAXException e) {
-                throw (IOException) new IOException().initCause(e);
-            } catch (ParserConfigurationException e) {
-                throw (IOException) new IOException().initCause(e);
-            }
-        }
-
-    }
-}
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/BlueprintURLHandler.java b/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/BlueprintURLHandler.java
deleted file mode 100644
index aa8ab1b..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/BlueprintURLHandler.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.tooling.features;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLStreamHandler;
-
-import org.apache.karaf.deployer.blueprint.BlueprintTransformer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * As org.apache.karaf.deployer.blueprint.BlueprintURLHandler need run with OSGi container
- * so create this class only used for features-maven-plugin
- */
-public class BlueprintURLHandler extends URLStreamHandler {
-
-	private final Logger logger = LoggerFactory.getLogger(BlueprintURLHandler.class);
-
-	private static String SYNTAX = "blueprint: bp-xml-uri";
-
-	private URL blueprintXmlURL;
-
-    /**
-     * Open the connection for the given URL.
-     *
-     * @param url the url from which to open a connection.
-     * @return a connection on the specified URL.
-     * @throws IOException if an error occurs or if the URL is malformed.
-     */
-    @Override
-	public URLConnection openConnection(URL url) throws IOException {
-		if (url.getPath() == null || url.getPath().trim().length() == 0) {
-			throw new MalformedURLException ("Path cannot be null or empty. Syntax: " + SYNTAX );
-		}
-		blueprintXmlURL = new URL(url.getPath());
-
-		logger.debug("Blueprint xml URL is: [" + blueprintXmlURL + "]");
-		return new Connection(url);
-	}
-	
-	public URL getBlueprintXmlURL() {
-		return blueprintXmlURL;
-	}
-
-    public class Connection extends URLConnection {
-
-        public Connection(URL url) {
-            super(url);
-        }
-
-        @Override
-        public void connect() throws IOException {
-        }
-
-        @Override
-        public InputStream getInputStream() throws IOException {
-            try {
-                ByteArrayOutputStream os = new ByteArrayOutputStream();
-                BlueprintTransformer.transform(blueprintXmlURL, os);
-                os.close();
-                return new ByteArrayInputStream(os.toByteArray());
-            } catch (Exception e) {
-                logger.error("Error opening blueprint xml url", e);
-                throw (IOException) new IOException("Error opening blueprint xml url").initCause(e);
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/CopyFileBasedDescriptor.java b/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/CopyFileBasedDescriptor.java
deleted file mode 100644
index 857adfd..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/CopyFileBasedDescriptor.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.tooling.features;
-
-import java.io.File;
-
-public class CopyFileBasedDescriptor {
-
-    private File sourceFile;
-    private String targetDirectory;
-    private String targetFileName;
-
-    public File getSourceFile() {
-        return sourceFile;
-    }
-
-    public void setSourceFile(File sourceFile) {
-        this.sourceFile = sourceFile;
-    }
-
-    public String getTargetDirectory() {
-        return targetDirectory;
-    }
-
-    public void setTargetDirectory(String targetDirectory) {
-        this.targetDirectory = targetDirectory;
-    }
-
-    public String getTargetFileName() {
-        return targetFileName;
-    }
-
-    public void setTargetFileName(String targetFileName) {
-        this.targetFileName = targetFileName;
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/CreateKarMojo.java b/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/CreateKarMojo.java
deleted file mode 100644
index 59488ca..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/CreateKarMojo.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.features;
-
-import org.apache.karaf.deployer.kar.KarArtifactInstaller;
-import org.apache.karaf.features.BundleInfo;
-import org.apache.karaf.features.ConfigFileInfo;
-import org.apache.karaf.features.Feature;
-import org.apache.karaf.features.internal.RepositoryImpl;
-import org.apache.maven.archiver.MavenArchiveConfiguration;
-import org.apache.maven.archiver.MavenArchiver;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
-import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.codehaus.plexus.archiver.jar.JarArchiver;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Assembles and creates a KAR archive.
- *
- * @goal create-kar
- * @phase package
- * @requiresDependencyResolution runtime
- * @inheritByDefault true
- * @description Assemble and create a KAR archive from a feature.xml file
- */
-public class CreateKarMojo extends MojoSupport {
-
-    /**
-     * The Maven archive configuration to use.
-     * <p/>
-     * See <a href="http://maven.apache.org/ref/current/maven-archiver/apidocs/org/apache/maven/archiver/MavenArchiveConfiguration.html">the Javadocs for MavenArchiveConfiguration</a>
-     *
-     * @parameter
-     */
-    private MavenArchiveConfiguration archive = new MavenArchiveConfiguration();
-
-    /**
-     * The Jar archiver.
-     *
-     * @component role="org.codehaus.plexus.archiver.Archiver" roleHint="jar"
-     * @required
-     * @readonly
-     */
-    private JarArchiver jarArchiver = null;
-
-    /**
-     * Directory containing the generated archive.
-     *
-     * @parameter expression="${project.build.directory}"
-     * @required
-     */
-    private File outputDirectory = null;
-
-    /**
-     * Name of the generated archive.
-     *
-     * @parameter expression="${project.build.finalName}"
-     * @required
-     */
-    private String finalName = null;
-
-    /**
-     * Location of resources directory for additional content to include in the KAR.
-     * Note that it includes everything under classes so as to include maven-remote-resources
-     *
-     * @parameter expression="${project.build.directory}/classes"
-     */
-    private File resourcesDir;
-
-    /**
-     * The features file to use as instructions
-     *
-     * @parameter default-value="${project.build.directory}/feature/feature.xml"
-     */
-    private File featuresFile;
-
-    /**
-     * The internal repository in the kar.
-     *
-     * @parameter default-value="${repositoryPath}"
-     */
-    private String repositoryPath = "repository/";
-
-    public void execute() throws MojoExecutionException, MojoFailureException {
-        List<Artifact> resources = readResources();
-        // build the archive
-        File archive = createArchive(resources);
-
-        // attach the generated archive to install/deploy
-        projectHelper.attachArtifact(project, "kar", null, archive);
-    }
-
-    /**
-     * Read and load the bundles and configuration files contained in the features file.
-     *
-     * @return a list of resources artifact.
-     * @throws MojoExecutionException
-     */
-    private List<Artifact> readResources() throws MojoExecutionException {
-        List<Artifact> resources = new ArrayList<Artifact>();
-        try {
-            RepositoryImpl featuresRepo = new RepositoryImpl(featuresFile.toURI());
-            Feature[] features = featuresRepo.getFeatures();
-            for (Feature feature : features) {
-                for (BundleInfo bundle : feature.getBundles()) {
-                    if (!bundle.isDependency()) {
-                        resources.add(resourceToArtifact(bundle.getLocation(), false));
-                    }
-                }
-                for (ConfigFileInfo configFile : feature.getConfigurationFiles()) {
-                    resources.add(resourceToArtifact(configFile.getLocation(), false));
-                }
-            }
-            return resources;
-        } catch (MojoExecutionException e) {
-            throw e;
-        } catch (Exception e) {
-            throw new MojoExecutionException("Could not interpret features XML file", e);
-        }
-    }
-
-    private File createArchive(List<Artifact> bundles) throws MojoExecutionException {
-        ArtifactRepositoryLayout layout = new DefaultRepositoryLayout();
-        File archiveFile = getArchiveFile(outputDirectory, finalName, null);
-
-        MavenArchiver archiver = new MavenArchiver();
-        MavenArchiveConfiguration configuration = new MavenArchiveConfiguration();
-        archiver.setArchiver(jarArchiver);
-        archiver.setOutputFile(archiveFile);
-
-        try {
-            // include the features XML file
-            Artifact featureArtifact = factory.createArtifactWithClassifier(project.getGroupId(), project.getArtifactId(), project.getVersion(), "xml", KarArtifactInstaller.FEATURES_CLASSIFIER);
-            jarArchiver.addFile(featuresFile, repositoryPath + layout.pathOf(featureArtifact));
-
-            for (Artifact artifact : bundles) {
-                resolver.resolve(artifact, remoteRepos, localRepo);
-                File localFile = artifact.getFile();
-                // TODO this may not be reasonable, but... resolved snapshot artifacts have timestamped versions
-                // which do not work in startup.properties
-                artifact.setVersion(artifact.getBaseVersion());
-                String targetFileName = repositoryPath + layout.pathOf(artifact);
-                jarArchiver.addFile(localFile, targetFileName);
-            }
-
-            if (resourcesDir.isDirectory()) {
-                archiver.getArchiver().addDirectory(resourcesDir);
-            }
-
-            archiver.createArchive(project, configuration);
-
-            return archiveFile;
-        } catch (Exception e) {
-            throw new MojoExecutionException("Failed to create kar archive", e);
-        }
-    }
-
-    protected static File getArchiveFile(final File basedir, final String finalName, String classifier) {
-        if (classifier == null) {
-            classifier = "";
-        } else if (classifier.trim().length() > 0 && !classifier.startsWith("-")) {
-            classifier = "-" + classifier;
-        }
-        return new File(basedir, finalName + classifier + ".kar");
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/CustomBundleURLStreamHandlerFactory.java b/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/CustomBundleURLStreamHandlerFactory.java
deleted file mode 100644
index b06c08b..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/CustomBundleURLStreamHandlerFactory.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.tooling.features;
-
-import java.net.URLStreamHandler;
-import java.net.URLStreamHandlerFactory;
-
-public class CustomBundleURLStreamHandlerFactory implements
-		URLStreamHandlerFactory {
-	private static final String MVN_URI_PREFIX = "mvn";
-	private static final String WRAP_URI_PREFIX = "wrap";
-    private static final String FEATURE_URI_PREFIX = "feature";
-    private static final String SPRING_URI_PREFIX = "spring";
-    private static final String BLUEPRINT_URI_PREFIX = "blueprint";
-    private static final String WAR_URI_PREFIX = "war";
-
-    public URLStreamHandler createURLStreamHandler(String protocol) {
-		if (protocol.equals(MVN_URI_PREFIX)) {
-			return new org.ops4j.pax.url.mvn.Handler();
-		} else if (protocol.equals(WRAP_URI_PREFIX)){
-			return new org.ops4j.pax.url.wrap.Handler();
-		} else if (protocol.equals(FEATURE_URI_PREFIX)){
-			return new FeatureURLHandler();
-		} else if (protocol.equals(SPRING_URI_PREFIX)){
-			return new SpringURLHandler();
-		} else if (protocol.equals(BLUEPRINT_URI_PREFIX)){
-			return new BlueprintURLHandler();
-        } else if (protocol.equals(WAR_URI_PREFIX)) {
-            return new WarURLHandler();
-		} else {
-			return null;
-		}
-	}
-
-}
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/FeatureURLHandler.java b/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/FeatureURLHandler.java
deleted file mode 100644
index 33e8d08..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/FeatureURLHandler.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.features;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLStreamHandler;
-
-import org.apache.karaf.deployer.features.FeatureTransformer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-/**
- * As org.apache.karaf.deployer.features.FeatureURLHandler needs to be run with
- * OSGi container this class was created  for use by the features-maven-plugin
- */
-public class FeatureURLHandler extends URLStreamHandler {
-
-    private final Logger logger = LoggerFactory.getLogger(FeatureURLHandler.class);
-
-    private static String SYNTAX = "feature: xml-uri";
-
-    private URL featureXmlURL;
-
-    /**
-     * Open the connection for the given URL.
-     *
-     * @param url the url from which to open a connection.
-     * @return a connection on the specified URL.
-     * @throws java.io.IOException if an error occurs or if the URL is malformed.
-     */
-    @Override
-    public URLConnection openConnection(URL url) throws IOException {
-        if (url.getPath() == null || url.getPath().trim().length() == 0) {
-            throw new MalformedURLException("Path can not be null or empty. Syntax: " + SYNTAX);
-        }
-        featureXmlURL = new URL(url.getPath());
-
-        logger.debug("Features xml URL is: [" + featureXmlURL + "]");
-        return new Connection(url);
-    }
-
-    public URL getFeatureXmlURL() {
-        return featureXmlURL;
-    }
-
-    public class Connection extends URLConnection {
-
-        public Connection(URL url) {
-            super(url);
-        }
-
-        @Override
-        public void connect() throws IOException {
-        }
-
-        @Override
-        public InputStream getInputStream() throws IOException {
-            try {
-                ByteArrayOutputStream os = new ByteArrayOutputStream();
-                FeatureTransformer.transform(featureXmlURL, os);
-                os.close();
-                return new ByteArrayInputStream(os.toByteArray());
-            } catch (Exception e) {
-                logger.error("Error opening features xml url", e);
-                throw (IOException) new IOException("Error opening features xml url").initCause(e);
-            }
-        }
-    }
-
-
-}
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/GenerateFeaturesFileMojo.java b/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/GenerateFeaturesFileMojo.java
deleted file mode 100644
index a82f1d0..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/GenerateFeaturesFileMojo.java
+++ /dev/null
@@ -1,478 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.tooling.features;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PrintStream;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.jar.Manifest;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipException;
-import java.util.zip.ZipFile;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.InvalidArtifactRTException;
-import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
-import org.apache.maven.artifact.metadata.ResolutionGroup;
-import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
-import org.apache.maven.artifact.versioning.ArtifactVersion;
-import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
-import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
-import org.apache.maven.artifact.versioning.VersionRange;
-import org.apache.maven.model.Dependency;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-
-/**
- * Generates the features XML file
- *
- * @goal generate-features-file
- * @phase compile
- * @execute phase="compile"
- * @requiresDependencyResolution runtime
- * @inheritByDefault true
- * @description Generates the features XML file
- */
-@SuppressWarnings("unchecked")
-public class GenerateFeaturesFileMojo extends MojoSupport {
-    protected static final String SEPARATOR = "/";
-
-    /**
-     * The file to generate
-     * 
-     * @parameter default-value="${project.build.directory}/classes/feature.xml"
-     */
-    private File outputFile;
-
-    /**
-     * The name of the feature, which defaults to the artifact ID if its not
-     * specified
-     * 
-     * @parameter default-value="${project.artifactId}"
-     */
-    private String featureName;
-
-    /**
-     * The artifact type for attaching the generated file to the project
-     * 
-     * @parameter default-value="xml"
-     */
-    private String attachmentArtifactType = "xml";
-
-    /**
-     * The artifact classifier for attaching the generated file to the project
-     * 
-     * @parameter default-value="features"
-     */
-    private String attachmentArtifactClassifier = "features";
-
-    /**
-     * Should we generate a feature for the current project?
-     * 
-     * @parameter default-value="false"
-     */
-    private boolean includeProject = false;
-
-    /**
-     * Should we generate a feature for the current project's dependencies?
-     * 
-     * @parameter default-value="true"
-     */
-    private boolean includeDependencies = true;
-    
-    /**
-     * The kernel version for which to generate the bundle
-     * 
-     * @parameter
-     */
-    private String karafVersion;
-    
-    /**
-     * A properties file containing bundle translations
-     * 
-     * @parameter
-     */
-    private File translation;
-    
-    /*
-     * The translations
-     */
-    private Map<String, Map<VersionRange, String>> translations = new HashMap<String, Map<VersionRange,String>>() {
-    	@Override
-    	public Map<VersionRange, String> get(Object key) {
-    		if (super.get(key) == null) {
-    			super.put(key.toString(), new HashMap<VersionRange, String>());
-    		}
-    		return super.get(key);
-    	}
-    };
-    
-    /*
-     * These bundles are the features that will be built
-     */
-    private Set<Artifact> features = new HashSet<Artifact>();
-
-    /*
-     * These bundles are provided by SMX4 and will be excluded from <feature/>
-     * generation
-     */
-    private Set<Artifact> provided = new HashSet<Artifact>();
-    
-    /*
-     * List of bundles included in the current feature
-     */
-    private Set<Artifact> currentFeature = new HashSet<Artifact>();
-    
-    /*
-     * List of missing bundles
-     */
-    private Set<Artifact> missingBundles = new TreeSet<Artifact>();
-
-    public void execute() throws MojoExecutionException, MojoFailureException {
-        OutputStream out = null;
-        try {
-        	prepare();
-        	getLog().info(String.format("-- Start generating %s --", outputFile.getAbsolutePath()));
-            outputFile.getParentFile().mkdirs();
-            out = new FileOutputStream(outputFile);
-            
-            PrintStream printer = new PrintStream(out);
-            populateProperties(printer);
-            getLog().info(String.format("-- Done generating %s --", outputFile.getAbsolutePath()));
-
-            // now lets attach it
-            projectHelper.attachArtifact(project, attachmentArtifactType, attachmentArtifactClassifier, outputFile);
-        } catch (Exception e) {
-            throw new MojoExecutionException("Unable to create dependencies file: " + e, e);
-        } finally {
-            if (out != null) {
-                try {
-                    out.close();
-                } catch (IOException e) {
-                    getLog().info("Failed to close: " + outputFile + ". Reason: " + e, e);
-                }
-            }
-        }
-    }
-
-    protected void populateProperties(PrintStream out) throws ArtifactResolutionException, ArtifactNotFoundException, IOException {
-        out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
-        out.println("<features>");
-        if (includeProject) {
-            writeCurrentProjectFeature(out);
-        }
-        if (includeDependencies) {
-            writeProjectDependencyFeatures(out);
-        }
-        out.println("</features>");
-    }
-
-    private void prepare() throws ArtifactResolutionException, ArtifactNotFoundException, IOException, InvalidVersionSpecificationException {
-    	if (translation != null) {
-    		InputStream stream = null;
-    		try {
-    			stream = new BufferedInputStream(new FileInputStream(translation));
-    			Properties file = new Properties();
-    			file.load(stream);
-    			ArrayList<String> stringNames = getStringNames(file);
-    			for (String key : stringNames) {
-    				String[] elements = key.split("/");
-    				translations.get(String.format("%s/%s", elements[0], elements[1]))
-    				            .put(VersionRange.createFromVersionSpec(elements[2]), file.getProperty(key));
-    			}
-    			getLog().info("Loaded " + translations.size() + " bundle name translation rules from " + translation.getAbsolutePath());
-    		} finally {
-    			if (stream != null) {
-    				stream.close();
-    			}
-    		}
-    	}
-    	
-    	Artifact kernel = factory.createArtifact("org.apache.karaf", 
-    			                                 "apache-karaf",
-    			                                 karafVersion, Artifact.SCOPE_PROVIDED, "pom");
-    	resolver.resolve(kernel, remoteRepos, localRepo);
-    	getLog().info("-- List of bundles provided by Karaf " + karafVersion + " --");
-        for (Artifact artifact : getDependencies(kernel)) {
-        	getLog().info(" " + artifact);
-            provided.add(artifact);
-        }
-        getLog().info("-- <end of list>  --");
-    }
-
-    private ArrayList<String> getStringNames(Properties file) {
-    	// this method simulate the Properties.stringPropertyNames() of JDK6 in order to make this class 
-    	// compile with jdk5
-    	ArrayList<String> ret = new ArrayList<String>();
-    	Enumeration<?> name = file.propertyNames();
-    	while (name.hasMoreElements()) {
-    		Object ele = name.nextElement();
-    		if (ele instanceof String && file.get(ele) instanceof String) {
-    			ret.add((String)ele);
-    		}
-    	}
-		return ret;
-	}
-
-	private void writeProjectDependencyFeatures(PrintStream out) {
-        Set<Artifact> dependencies = (Set<Artifact>)project.getDependencyArtifacts();
-        dependencies.removeAll(provided);
-        for (Artifact artifact : dependencies) {
-            getLog().info(" Generating feature " + artifact.getArtifactId() + " from " + artifact);
-            out.println("  <feature name='" + artifact.getArtifactId() + "'>");
-            currentFeature.clear();
-            writeBundle(out, artifact);
-            features.add(artifact);
-            out.println("  </feature>");
-        }
-        if (missingBundles.size() > 0) {
-        	getLog().info("-- Some bundles were missing  --");
-        	for (Artifact artifact : missingBundles) {
-        		getLog().info(String.format(" %s", artifact));
-        	}
-        }
-    }
-
-    private void writeBundle(PrintStream out, Artifact artifact) {
-    	Artifact replacement = getReplacement(artifact);
-    	if (replacement != null) {
-    		writeBundle(out, replacement);
-    		return;
-    	}
-        if (isProvided(artifact)) {
-            getLog().debug(String.format("Skipping '%s' -- bundle will be provided at runtime", artifact));
-            return;
-        }
-        if (features.contains(artifact)) {
-            // if we already created a feature for this one, just add that instead of the bundle
-            out.println(String.format("    <feature>%s</feature>", artifact.getArtifactId()));
-            return;
-        }
-        // first write the dependencies
-        for (Artifact dependency : getDependencies(artifact)) {
-            if (dependency.isOptional() || Artifact.SCOPE_TEST.equals(dependency.getScope())) {
-                // omit optional dependencies
-                getLog().debug(String.format("Omitting optional and/or test scoped dependency '%s' for '%s'", 
-                                             dependency, artifact));
-                continue;
-            }
-            getLog().debug(String.format("Adding '%s' as a dependency for '%s'", dependency, artifact));
-            writeBundle(out, dependency);
-        }
-        // skip the bundle if it was already added to this feature previously
-        if (!currentFeature.add(artifact)) {
-            getLog().debug(String.format("Artifact '%s' was already added to the current feature", artifact));
-            return;
-        }
-        // and then write the bundle itself
-        if (isBundle(artifact)) {
-        	getLog().info(String.format("  adding bundle %s", artifact));
-            writeBundle(out, artifact.getGroupId(), artifact.getArtifactId(), artifact.getBaseVersion());
-        } else {
-            Artifact wrapper = findServicemixBundle(artifact);
-            if (wrapper != null) {
-            	getLog().info(String.format("  adding bundle %s (for %s)", wrapper, artifact));
-            	writeBundle(out, wrapper.getGroupId(), wrapper.getArtifactId(), wrapper.getBaseVersion());
-            } else {
-            	getLog().error(String.format(" unable to find suitable bundle for artifact '%s'", artifact));
-            	missingBundles.add(artifact);
-            }
-        }
-    }
-
-	private Artifact getReplacement(Artifact artifact) {
-		String key = String.format("%s/%s", artifact.getGroupId(), artifact.getArtifactId());
-		String bundle = null;
-		for (VersionRange range : translations.get(key).keySet()) {
-			try {
-				if (range.containsVersion(artifact.getSelectedVersion())) {
-					bundle = translations.get(key).get(range);
-					break;
-				}
-			} catch (OverConstrainedVersionException e) {
-				bundle = null;
-			}
-		}
-		if (bundle != null) {
-			String[] split = bundle.split("/");
-			return factory.createArtifact(split[0], split[1], split[2], Artifact.SCOPE_PROVIDED, artifact.getArtifactHandler().getPackaging());
-		} else {
-			return null;
-		}
-	}
-
-	private Artifact findServicemixBundle(Artifact artifact) {
-        Artifact noVersionWrapper = factory.createArtifact("org.apache.servicemix.bundles", 
-                                                  "org.apache.servicemix.bundles." + artifact.getArtifactId(), 
-                                                  "", 
-                                                  artifact.getScope(), artifact.getType());
-        try {
-            List versions = artifactMetadataSource.retrieveAvailableVersions(noVersionWrapper, localRepo, remoteRepos);
-            Artifact wrapper = factory.createArtifact("org.apache.servicemix.bundles", 
-                                                      "org.apache.servicemix.bundles." + artifact.getArtifactId(), 
-                                                      getBestVersionForArtifact(artifact, versions), 
-                                                      artifact.getScope(), artifact.getType());
-            // let's check if the servicemix bundle for this artifact exists
-            resolver.resolve(wrapper, remoteRepos, localRepo);
-            for (Artifact dependency : getDependencies(wrapper)) {
-                //some of these wrapper bundles provide for multiple JAR files, no need to include any of them after adding the wrapper
-                getLog().debug(String.format("'%s' also provides '%s'", wrapper, dependency));
-                currentFeature.add(dependency);
-            }
-            return wrapper;
-        } catch (ArtifactResolutionException e) {
-            getLog().debug("Couldn't find a ServiceMix bundle for " + artifact, e);
-        } catch (ArtifactNotFoundException e) {
-            getLog().debug("Couldn't find a ServiceMix bundle for " + artifact, e);
-        } catch (ArtifactMetadataRetrievalException e) {
-            getLog().debug("Couldn't find a ServiceMix bundle for " + artifact, e);
-        }
-        if (artifact.getArtifactId().contains("-")) {
-            //let's try to see if we can't find a bundle wrapping multiple artifacts (e.g. mina -> mina-core, mina-codec, ...)
-            return findServicemixBundle(factory.createArtifact(artifact.getGroupId(), artifact.getArtifactId().split("-")[0], 
-                                                               artifact.getVersion(), artifact.getScope(), artifact.getType()));
-        } else {
-            return null;
-        }
-    }
-
-    protected String getBestVersionForArtifact(Artifact artifact, List<ArtifactVersion> versions) throws ArtifactMetadataRetrievalException {
-        if (versions.size() == 0) {
-            throw new ArtifactMetadataRetrievalException("No wrapper bundle available for " + artifact);
-        }
-        Collections.sort(versions, Collections.reverseOrder());
-        //check for same version
-        for (ArtifactVersion version : versions) {
-            if (version.toString().startsWith(artifact.getVersion())) {
-                return version.toString();
-            }
-        }
-        //check for same major/minor version
-        for (ArtifactVersion version : versions) {
-            String[] elements = version.toString().split("\\.");
-            if (elements.length >= 2 && artifact.getVersion().startsWith(elements[0] + "." + elements[1])) {
-                return version.toString();
-            }
-        }
-        throw new ArtifactMetadataRetrievalException("No suitable version found for " + artifact + " wrapper bundle");
-    }
-
-    private boolean isProvided(Artifact bundle) {
-        for (Artifact artifact : provided) {
-            if (bundle.getArtifactId().equals(artifact.getArtifactId())
-                && bundle.getGroupId().equals(artifact.getGroupId())) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private boolean isBundle(Artifact artifact) {
-        if (artifact.getArtifactHandler().getPackaging().equals("bundle")) {
-            return true;
-        } else {
-            try {
-                resolver.resolve(artifact, remoteRepos, localRepo);
-                ZipFile file = new ZipFile(artifact.getFile());
-                ZipEntry entry = file.getEntry("META-INF/MANIFEST.MF");
-                Manifest manifest = new Manifest(file.getInputStream(entry));
-                if (ManifestUtils.isBundle(manifest)) {
-                    getLog().debug(String.format("MANIFEST.MF for '%s' contains Bundle-Name '%s'",
-                                                 artifact, ManifestUtils.getBsn(manifest)));
-                    return true;
-                }
-            } catch (ZipException e) {
-                getLog().warn("Unable to determine if " + artifact + " is a bundle; defaulting to false", e);
-            } catch (IOException e) {
-                getLog().warn("Unable to determine if " + artifact + " is a bundle; defaulting to false", e);
-            } catch (Exception e) {
-                getLog().warn("Unable to determine if " + artifact + " is a bundle; defaulting to false", e);
-            }
-        }
-        return false;
-    }
-
-    private List<Artifact> getDependencies(Artifact artifact) {
-        List<Artifact> list = new ArrayList<Artifact>();
-        try {
-            ResolutionGroup pom = artifactMetadataSource.retrieve(artifact, localRepo, remoteRepos);
-            if (pom != null) {
-            	list.addAll(pom.getArtifacts());
-            }
-        } catch (ArtifactMetadataRetrievalException e) {
-            getLog().warn("Unable to retrieve metadata for " + artifact + ", not including dependencies for it");
-        } catch (InvalidArtifactRTException e) {
-            getLog().warn("Unable to retrieve metadata for " + artifact + ", not including dependencies for it");
-        }
-        return list;
-    }
-
-
-    private void writeCurrentProjectFeature(PrintStream out) {
-        out.println("  <feature name='" + featureName + "'>");
-
-        writeBundle(out, project.getGroupId(), project.getArtifactId(), project.getVersion());
-        out.println();
-
-        Iterator iterator = project.getDependencies().iterator();
-        while (iterator.hasNext()) {
-            Dependency dependency = (Dependency)iterator.next();
-
-            if (isValidDependency(dependency)) {
-                out.print("  ");
-                writeBundle(out, dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion());
-            }
-        }
-
-        out.println("  </feature>");
-    }
-
-    protected boolean isValidDependency(Dependency dependency) {
-        // TODO filter out only compile time dependencies which are OSGi
-        // bundles?
-        return true;
-    }
-
-    protected void writeBundle(PrintStream out, String groupId, String artifactId, String version) {
-        out.print("    <bundle>mvn:");
-        out.print(groupId);
-        out.print("/");
-        out.print(artifactId);
-        out.print("/");
-        out.print(version);
-        out.print("</bundle>");
-        out.println();
-    }
-}
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/GenerateFeaturesXmlMojo.java b/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/GenerateFeaturesXmlMojo.java
deleted file mode 100644
index 1891884..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/GenerateFeaturesXmlMojo.java
+++ /dev/null
@@ -1,617 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.tooling.features;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.Stack;
-import java.util.jar.Manifest;
-import java.util.zip.ZipException;
-import java.util.zip.ZipFile;
-
-import org.apache.felix.utils.manifest.Clause;
-import org.apache.felix.utils.version.VersionRange;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.InvalidArtifactRTException;
-import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
-import org.apache.maven.artifact.metadata.ResolutionGroup;
-import org.apache.maven.artifact.resolver.ArtifactCollector;
-import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
-import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.shared.dependency.tree.DependencyNode;
-import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder;
-import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException;
-import org.apache.maven.shared.dependency.tree.traversal.DependencyNodeVisitor;
-
-/**
- * Generates the features XML file
- *
- * @goal generate-features-xml
- * @phase compile
- * @execute phase="compile"
- * @requiresDependencyResolution runtime
- * @inheritByDefault true
- * @description Generates the features XML file
- */
-@SuppressWarnings("unchecked")
-public class GenerateFeaturesXmlMojo extends MojoSupport {
-    protected static final String SEPARATOR = "/";
-    
-    /**
-     * The dependency tree builder to use.
-     * 
-     * @component
-     * @required
-     * @readonly
-     */
-    private DependencyTreeBuilder dependencyTreeBuilder;
-
-    /**
-     * The ArtifactCollector provided by Maven at runtime
-     *
-     * @component
-     * @required
-     * @readonly
-     */
-    private ArtifactCollector collector;
-
-    /**
-     * Installation mode. If present, generate "feature.install" attribute:
-     *
-     * <a href="http://karaf.apache.org/xmlns/features/v1.1.0">Installation mode</a>
-     *
-     * Can be either manual or auto. Specifies whether the feature should be automatically installed when
-     * dropped inside the deploy folder. Note: this attribute doesn't affect feature descriptors that are installed
-     * from the feature:install command or as part of the etc/org.apache.karaf.features.cfg file.
-     *
-     * @parameter
-     */
-    protected String installMode;
-
-    /**
-     * The file to generate
-     * 
-     * @parameter default-value="${project.build.directory}/classes/feature.xml"
-     */
-    private File outputFile;
-
-    /**
-     * The artifact type for attaching the generated file to the project
-     * 
-     * @parameter default-value="xml"
-     */
-    private String attachmentArtifactType = "xml";
-
-    /**
-     * The artifact classifier for attaching the generated file to the project
-     * 
-     * @parameter default-value="features"
-     */
-    private String attachmentArtifactClassifier = "features";
-
-    /**
-     * The kernel version for which to generate the bundle
-     * 
-     * @parameter
-     */
-    private String kernelVersion;
-    
-    /*
-     * A list of packages exported by the kernel
-     */
-    private Map<String, VersionRange> kernelExports = new HashMap<String, VersionRange>();
-
-    /**
-     * A file containing the list of bundles
-     * 
-     * @parameter
-     */
-    private File bundles;
-
-    /*
-     * A set of known bundles
-     */
-    private Set<String> knownBundles = new HashSet<String>();
-    
-    /*
-     * A list of exports by the bundles
-     */
-    private Map<String, Map<VersionRange, Artifact>> bundleExports = new HashMap<String, Map<VersionRange, Artifact>>();
-
-    /*
-     * The set of system exports
-     */
-    private List<String> systemExports = new LinkedList<String>();
-    
-    /*
-     * These bundles are the features that will be built
-     */
-    private Map<Artifact, Feature> features = new HashMap<Artifact, Feature>();
-
-    public void execute() throws MojoExecutionException, MojoFailureException {
-        PrintStream out = null;
-        try {
-            File parent = outputFile.getParentFile();
-            if (!parent.exists()) {
-                parent.mkdirs();
-            }
-            out = new PrintStream(new FileOutputStream(outputFile));
-            readSystemPackages();
-            readKernelBundles();
-            readBundles();
-            discoverBundles();
-            writeFeatures(out);
-            // now lets attach it
-            projectHelper.attachArtifact(project, attachmentArtifactType, attachmentArtifactClassifier, outputFile);
-        } catch (Exception e) {
-            getLog().error(e);
-            throw new MojoExecutionException("Unable to create features.xml file: " + e, e);
-        } finally {
-            if (out != null) {
-                out.close();
-            }
-        }
-    }
-    
-	/*
-     * Read all the system provided packages from the <code>config.properties</code> file 
-     */
-    private void readSystemPackages() throws IOException {
-        Properties properties = new Properties();
-        properties.load(getClass().getClassLoader().getResourceAsStream("config.properties"));
-        readSystemPackages(properties, "jre-1.5");
-        readSystemPackages(properties, "osgi");
-    }
-
-    
-    private void readSystemPackages(Properties properties, String key) {
-        String packages = (String) properties.get(key);
-        for (String pkg : packages.split(";")) {
-            systemExports.add(pkg.trim());
-        }
-    }
-
-    /*
-     * Download a Kernel distro and check the list of bundles provided by the Kernel
-     */
-    private void readKernelBundles() throws ArtifactResolutionException, ArtifactNotFoundException, MojoExecutionException,
-        ZipException, IOException, DependencyTreeBuilderException {
-        final Collection<Artifact> kernelArtifacts;
-        if (kernelVersion == null) {
-           getLog().info("Step 1: Building list of provided bundle exports");
-           kernelArtifacts = new HashSet<Artifact>();
-           DependencyNode tree = dependencyTreeBuilder.buildDependencyTree(project, localRepo, factory, artifactMetadataSource, new ArtifactFilter() {
-
-            public boolean include(Artifact artifact) {
-                return true;
-            }
-               
-           }, collector);
-           tree.accept(new DependencyNodeVisitor() {
-                public boolean endVisit(DependencyNode node) {
-                    // we want the next sibling too
-                    return true;
-                }
-                public boolean visit(DependencyNode node) {
-                    if (node.getState() != DependencyNode.OMITTED_FOR_CONFLICT) {
-                        Artifact artifact = node.getArtifact();
-                        if (Artifact.SCOPE_PROVIDED.equals(artifact.getScope()) && !artifact.getType().equals("pom")) {
-                            kernelArtifacts.add(artifact);
-                        }
-                    }
-                    // we want the children too
-                    return true;
-                }
-            });
-        } else {
-            getLog().info("Step 1 : Building list of kernel exports");
-            getLog().warn("Use of 'kernelVersion' is deprecated -- use a dependency with scope 'provided' instead");
-            Artifact kernel = factory.createArtifact("org.apache.karaf", "apache-karaf", kernelVersion, Artifact.SCOPE_PROVIDED, "pom");
-            resolver.resolve(kernel, remoteRepos, localRepo);
-            kernelArtifacts = getDependencies(kernel);
-        }
-        for (Artifact artifact : kernelArtifacts) {
-            registerKernelBundle(artifact);
-        }
-        getLog().info("...done!");
-    }
-
-    private void registerKernelBundle(Artifact artifact) throws ArtifactResolutionException, ArtifactNotFoundException, ZipException,
-            IOException {
-        Manifest manifest = getManifest(artifact);
-        for (Clause clause : ManifestUtils.getExports(manifest)) {
-        	kernelExports.put(clause.getName(), ManifestUtils.getVersionRange(clause));
-        	getLog().debug(" adding kernel export " + clause.getName() + " (" + ManifestUtils.getVersionRange(clause) + ")");
-        }
-        registerBundle(artifact);
-    }
-
-    /*
-     * Read the list of bundles we can use to satisfy links
-     */
-    private void readBundles() throws IOException, ArtifactResolutionException, ArtifactNotFoundException {        
-        BufferedReader reader = null;
-        try {
-            if (bundles != null) {
-                getLog().info("Step 2 : Building a list of exports for bundles in " + bundles.getAbsolutePath());
-                reader = new BufferedReader(new FileReader(bundles));
-                String line = reader.readLine();
-                while (line != null) {
-                    if (line.contains("/") && !line.startsWith("#")) {
-                        String[] elements = line.split("/");
-                        Artifact artifact = factory.createArtifact(elements[0], elements[1], elements[2], Artifact.SCOPE_PROVIDED,
-                                                                   elements[3]);
-                        registerBundle(artifact);
-                    }
-                    line = reader.readLine();
-                }                
-            } else {
-                getLog().info("Step 2 : No Bundle file supplied for building list of exports");
-            }
-        } finally {
-            if (reader != null) {
-                reader.close();
-            }
-        }
-        getLog().info("...done!");
-    }
-    
-    /*
-     * Auto-discover bundles currently in the dependencies
-     */
-    private void discoverBundles() throws ArtifactResolutionException, ArtifactNotFoundException, ZipException, IOException {
-    	getLog().info("Step 3 : Discovering bundles in Maven dependencies");
-		for (Artifact dependency : (Set<Artifact>) project.getArtifacts()) {
-			// we will generate a feature for this afterwards
-			if (project.getDependencyArtifacts().contains(dependency)) {
-				continue;
-			}
-			// this is a provided bundle, has been handled in step 1
-			if (dependency.getScope().equals(Artifact.SCOPE_PROVIDED)) {
-			    continue;
-			}
-			if (isDiscoverableBundle(dependency)) {
-				getLog().info("  Discovered " + dependency);
-				registerBundle(dependency);
-			}
-		}
-		getLog().info("...done!");
-	}
-
-    /*
-     * Write all project dependencies as feature
-     */
-    private void writeFeatures(PrintStream out) throws ArtifactResolutionException, ArtifactNotFoundException,
-        ZipException, IOException {
-        getLog().info("Step 4 : Generating " + outputFile.getAbsolutePath());
-        out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
-        out.println("<features>");
-        Set<Artifact> dependencies = (Set<Artifact>)project.getDependencyArtifacts();
-        for (Artifact artifact : dependencies) {
-            if (!artifact.getScope().equals(Artifact.SCOPE_PROVIDED) && !artifact.getType().equals("pom")) {
-                getLog().info(" Generating feature " + artifact.getArtifactId() + " from " + artifact);
-                Feature feature = getFeature(artifact);
-                feature.write(out);
-                registerFeature(artifact, feature);
-            }
-        }
-        out.println("</features>");
-        getLog().info("...done!");
-    }
-
-    /*
-     * Get the feature for an artifact 
-     */
-    private Feature getFeature(Artifact artifact) throws ArtifactResolutionException, ArtifactNotFoundException, ZipException, IOException {
-        Feature feature = new Feature(artifact);
-        addRequirements(artifact, feature);
-        return feature;
-    }
-
-    /*
-     * Only auto-discover an OSGi bundle
-     * - if it is not already known as a feature itself
-     * - if it is not another version of an already known bundle
-     */
-    private boolean isDiscoverableBundle(Artifact artifact) {
-        if (isBundle(artifact) && !isFeature(artifact) && !artifact.getScope().equals(Artifact.SCOPE_PROVIDED)) {
-            for (String known : knownBundles) {
-                String[] elements = known.split("/");
-                if (artifact.getGroupId().equals(elements[0]) &&
-                    artifact.getArtifactId().equals(elements[1])) {
-                    getLog().debug(String.format("  Avoid auto-discovery for %s because of existing bundle %s", 
-                                                 toString(artifact), known));
-                    return false;
-                }
-            }
-            return true;
-        }
-        return false;
-    }
-
-    /*
-     * Check if the given artifact is a bundle
-     */
-    private boolean isBundle(Artifact artifact) {
-        if (knownBundles.contains(toString(artifact)) || artifact.getArtifactHandler().getPackaging().equals("bundle")) {
-            return true;
-        } else {
-            try {
-                Manifest manifest = getManifest(artifact);
-                if (ManifestUtils.getBsn(manifest) != null) {
-                    getLog().debug(String.format("MANIFEST.MF for '%s' contains Bundle-Name '%s'",
-                                                 artifact, ManifestUtils.getBsn(manifest)));
-                    return true;
-                }
-            } catch (ZipException e) {
-                getLog().debug("Unable to determine if " + artifact + " is a bundle; defaulting to false", e);
-            } catch (IOException e) {
-                getLog().debug("Unable to determine if " + artifact + " is a bundle; defaulting to false", e);
-            } catch (Exception e) {
-                getLog().debug("Unable to determine if " + artifact + " is a bundle; defaulting to false", e);
-            }
-        }
-        return false;
-     }
-
-    /*
-     * Add requirements for an artifact to a feature
-     */
-    private void addRequirements(Artifact artifact, Feature feature) throws ArtifactResolutionException, ArtifactNotFoundException, ZipException, IOException {
-        Manifest manifest = getManifest(artifact);
-        Collection<Clause> remaining = getRemainingImports(manifest);
-        Artifact previous = null;
-        for (Clause clause : remaining) {
-            Artifact add = null;
-            Map<VersionRange, Artifact> versions = bundleExports.get(clause.getName());
-            if (versions != null) {
-                for (VersionRange range : versions.keySet()) {
-                    add = versions.get(range);
-                    if (range.intersect(ManifestUtils.getVersionRange(clause)) != null) {
-                        add = versions.get(range);
-                    }
-                }
-            }
-            if (add == null) {
-                if (ManifestUtils.isOptional(clause)) {
-                    // debug logging for optional dependency...
-                    getLog().debug(String.format("  Unable to find suitable bundle for optional dependency %s (%s)", 
-                                                 clause.getName(), ManifestUtils.getVersionRange(clause)));
-                } else {
-                    // ...but a warning for a mandatory dependency
-                    getLog().warn(
-                                  String.format("  Unable to find suitable bundle for dependency %s (%s) (required by %s)", 
-                                                clause.getName(), ManifestUtils.getVersionRange(clause), artifact.getArtifactId()));
-                }
-            } else {
-                if (!add.equals(previous) && feature.push(add) && !isFeature(add)) {
-                    //and get requirements for the bundle we just added
-                    getLog().debug("  Getting requirements for " + add);
-                    addRequirements(add, feature);
-                }
-            }
-            previous = add;
-        }
-    }
-
-    /*
-     * Check if a given bundle is itself being generated as a feature
-     */
-    private boolean isFeature(Artifact artifact) {
-        return features.containsKey(artifact);
-    }
-
-   
-    /*
-     * Register a bundle, enlisting all packages it provides
-     */
-    private void registerBundle(Artifact artifact) throws ArtifactResolutionException, ArtifactNotFoundException, ZipException,
-        IOException {
-        getLog().debug("Registering bundle " + artifact);
-        knownBundles.add(toString(artifact));
-        Manifest manifest = getManifest(artifact);
-        for (Clause clause : getManifestEntries(ManifestUtils.getExports(manifest))) {
-            Map<VersionRange, Artifact> versions = bundleExports.get(clause.getName());
-            if (versions == null) {
-                versions = new HashMap<VersionRange, Artifact>();
-            }
-            versions.put(ManifestUtils.getVersionRange(clause), artifact);
-            getLog().debug(String.format(" %s exported by bundle %s", clause.getName(), artifact));
-            bundleExports.put(clause.getName(), versions);
-        }
-    }
-
-    /*
-     * Register a feature and also register the bundle for the feature
-     */
-    private void registerFeature(Artifact artifact, Feature feature) throws ArtifactResolutionException, ArtifactNotFoundException, ZipException,
-        IOException {
-        features.put(artifact, feature);
-        registerBundle(artifact);
-    }
-
-    /*
-     * Determine the list of imports to be resolved
-     */
-    private Collection<Clause> getRemainingImports(Manifest manifest) {
-        // take all imports
-        Collection<Clause> input = getManifestEntries(ManifestUtils.getImports(manifest));
-        Collection<Clause> output = new LinkedList<Clause>(input);
-        // remove imports satisfied by exports in the same bundle
-        for (Clause clause : input) {
-            for (Clause export : getManifestEntries(ManifestUtils.getExports(manifest))) {
-                if (clause.getName().equals(export.getName())) {
-                    output.remove(clause);
-                }
-            }
-        }
-        // remove imports for packages exported by the kernel
-        for (Clause clause : input) {
-            for (String export : kernelExports.keySet()) {
-                if (clause.getName().equals(export)) {
-                    output.remove(clause);
-                }
-            }
-        }
-        // remove imports for packages exported by the system bundle
-        for (Clause clause : input) {
-            if (systemExports.contains(clause.getName())) {
-                output.remove(clause);
-            }
-        }
-        return output;
-    }
-
-    private Collection<Clause> getManifestEntries(List imports) {
-        if (imports == null) {
-            return new LinkedList<Clause>();
-        } else {
-            return (Collection<Clause>)imports;
-        }
-    }
-
-    private Manifest getManifest(Artifact artifact) throws ArtifactResolutionException, ArtifactNotFoundException, ZipException,
-        IOException {
-        File localFile = new File(localRepo.pathOf(artifact));
-        ZipFile file;
-        if (localFile.exists()) {
-            //avoid going over to the repository if the file is already on the disk
-            file = new ZipFile(localFile);
-        } else {
-            resolver.resolve(artifact, remoteRepos, localRepo);
-            file = new ZipFile(artifact.getFile());
-        }
-        return new Manifest(file.getInputStream(file.getEntry("META-INF/MANIFEST.MF")));
-    }
-
-    private List<Artifact> getDependencies(Artifact artifact) {
-        List<Artifact> list = new ArrayList<Artifact>();
-        try {
-            ResolutionGroup pom = artifactMetadataSource.retrieve(artifact, localRepo, remoteRepos);
-            if (pom != null) {
-                list.addAll(pom.getArtifacts());
-            }
-        } catch (ArtifactMetadataRetrievalException e) {
-            getLog().warn("Unable to retrieve metadata for " + artifact + ", not including dependencies for it");
-        } catch (InvalidArtifactRTException e) {
-            getLog().warn("Unable to retrieve metadata for " + artifact + ", not including dependencies for it");
-        }
-        return list;
-    }
-    
-    public static String toString(Artifact artifact) {
-        if (artifact.getType().equals("jar")) {
-            return String.format("%s/%s/%s", artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion());
-        }
-        return String.format("%s/%s/%s/%s", artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), artifact.getType());
-    }
-
-    /*package*/ class Feature {
-
-        private Stack<Artifact> artifacts = new Stack<Artifact>();
-        private final Artifact artifact;
-        
-        /*package*/ Feature(Artifact artifact) {
-            super();
-            this.artifact = artifact;
-            artifacts.push(artifact);
-        }
-
-        public boolean push(Artifact item) {
-            if (artifacts.contains(item)) {
-                artifacts.remove(item);
-                artifacts.push(item);
-                return false;
-            }
-            if (!artifacts.contains(item)) {
-                artifacts.push(item);
-                return true;
-            }
-            return false;
-        }
-        
-        private String writeAttr(String name, String value){
-        	return " " + name + "=" + "'" + value + "'" + " ";
-        }
-
-        public void write(PrintStream out) {
-        	
-            out.print(
-				" <feature " +
-				writeAttr("name", artifact.getArtifactId()) + 
-				writeAttr("version", artifact.getBaseVersion()) +
-				" "
-				);
-
-            if(installMode != null){
-                out.print(writeAttr("install", installMode));
-            }
-            
-            out.println(" > ");
-            
-            Stack<Artifact> resulting = new Stack<Artifact>();
-            resulting.addAll(artifacts);
-
-            // remove dependencies for included features
-            for (Artifact next : artifacts) {
-                if (isFeature(next)) {
-                    resulting.removeAll(features.get(next).getDependencies());
-                }
-            }
-            
-            while (!resulting.isEmpty()) {
-            	Artifact next = resulting.pop();
-                if (isFeature(next)) {
-                    out.println("    <feature version='"
-            		+ next.getBaseVersion() + "'>" + String.format("%s</feature>", next.getArtifactId()));
-                } else {
-                    if (next.getType().equals("jar")) {
-                        out.println(String.format("    <bundle>mvn:%s/%s/%s</bundle>", next.getGroupId(), next.getArtifactId(), next.getBaseVersion()));
-                    } else {
-                        out.println(String.format("    <bundle>mvn:%s/%s/%s/%s</bundle>", next.getGroupId(), next.getArtifactId(), next.getBaseVersion(), next.getType()));
-                    }
-                }
-            }
-            
-            out.println(" </feature>");
-            
-        }
-        
-        public List<Artifact> getDependencies() {
-            List<Artifact> dependencies = new LinkedList<Artifact>(artifacts);
-            dependencies.remove(artifact);
-            return dependencies;
-        }
-    }
-}
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/GraphArtifactCollector.java b/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/GraphArtifactCollector.java
deleted file mode 100644
index d7f256f..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/GraphArtifactCollector.java
+++ /dev/null
@@ -1,432 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.tooling.features;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
-import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
-import org.apache.maven.artifact.metadata.ResolutionGroup;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.ArtifactCollector;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
-import org.apache.maven.artifact.resolver.CyclicDependencyException;
-import org.apache.maven.artifact.resolver.ResolutionListener;
-import org.apache.maven.artifact.resolver.ResolutionNode;
-import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
-import org.apache.maven.artifact.versioning.ArtifactVersion;
-import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
-import org.apache.maven.artifact.versioning.VersionRange;
-
-public class GraphArtifactCollector implements ArtifactCollector {
-    public ArtifactResolutionResult collect(
-            Set artifacts,
-            Artifact originatingArtifact,
-            ArtifactRepository localRepository,
-            List remoteRepositories,
-            ArtifactMetadataSource source,
-            ArtifactFilter filter,
-            List listeners) throws ArtifactResolutionException {
-        return collect(artifacts, originatingArtifact, Collections.EMPTY_MAP,
-                localRepository, remoteRepositories, source, filter, listeners);
-    }
-
-    public ArtifactResolutionResult collect(
-            Set artifacts,
-            Artifact originatingArtifact,
-            Map managedVersions,
-            ArtifactRepository localRepository,
-            List remoteRepositories,
-            ArtifactMetadataSource source,
-            ArtifactFilter filter,
-            List listeners) throws ArtifactResolutionException {
-        Map resolvedArtifacts = new HashMap();
-
-        ResolutionNode root = new ResolutionNode(originatingArtifact, remoteRepositories);
-        root.addDependencies(artifacts, remoteRepositories, filter);
-        recurse(root, resolvedArtifacts, managedVersions, localRepository,
-                remoteRepositories, source, filter, listeners);
-
-        Set set = new HashSet();
-        for (Iterator i = resolvedArtifacts.values().iterator(); i.hasNext();) {
-            List nodes = (List) i.next();
-            for (Iterator j = nodes.iterator(); j.hasNext();) {
-                ResolutionNode node = (ResolutionNode) j.next();
-                Artifact artifact = node.getArtifact();
-                if (!node.equals(root) && node.isActive() && node.filterTrail(filter)
-                        // If it was optional and not a direct dependency,
-                        // we don't add it or its children, just allow the
-                        // update of the version and scope
-                        && (node.isChildOfRootNode() || !artifact.isOptional())) {
-                    artifact.setDependencyTrail(node.getDependencyTrail());
-                    set.add(node);
-                }
-            }
-        }
-
-        ArtifactResolutionResult result = new ArtifactResolutionResult();
-        result.setArtifactResolutionNodes(set);
-        return result;
-    }
-
-    private void recurse(
-            ResolutionNode node,
-            Map resolvedArtifacts,
-            Map managedVersions,
-            ArtifactRepository localRepository,
-            List remoteRepositories,
-            ArtifactMetadataSource source,
-            ArtifactFilter filter,
-            List listeners) throws CyclicDependencyException, ArtifactResolutionException,
-            OverConstrainedVersionException {
-        fireEvent(ResolutionListener.TEST_ARTIFACT, listeners, node);
-
-        // TODO: use as a conflict resolver
-        Object key = node.getKey();
-        if (managedVersions.containsKey(key)) {
-            Artifact artifact = (Artifact) managedVersions.get(key);
-            fireEvent(ResolutionListener.MANAGE_ARTIFACT, listeners, node, artifact);
-            if (artifact.getVersion() != null) {
-                node.getArtifact().setVersion(artifact.getVersion());
-            }
-            if (artifact.getScope() != null) {
-                node.getArtifact().setScope(artifact.getScope());
-            }
-        }
-
-        List previousNodes = (List) resolvedArtifacts.get(key);
-        if (previousNodes != null) {
-            node = checkPreviousNodes(node, listeners, previousNodes);
-        }
-        else {
-            previousNodes = new ArrayList();
-            resolvedArtifacts.put(key, previousNodes);
-        }
-        previousNodes.add(node);
-
-        if (node.isActive()) {
-            fireEvent(ResolutionListener.INCLUDE_ARTIFACT, listeners, node);
-        }
-
-        // don't pull in the transitive deps of a system-scoped dependency.
-        if (node.isActive() && !Artifact.SCOPE_SYSTEM.equals(node.getArtifact().getScope())) {
-            fireEvent(ResolutionListener.PROCESS_CHILDREN, listeners, node);
-            for (Iterator i = node.getChildrenIterator(); i.hasNext();) {
-                ResolutionNode child = (ResolutionNode) i.next();
-                // We leave in optional ones, but don't pick up its dependencies
-                if (!child.isResolved()
-                        && (!child.getArtifact().isOptional() || child.isChildOfRootNode())) {
-                    Artifact artifact = child.getArtifact();
-                    try {
-                        if (artifact.getVersion() == null) {
-                            // set the recommended version
-                            // TODO: maybe its better to just pass the range
-                            // through to retrieval and use a transformation?
-                            ArtifactVersion version;
-                            version = getArtifactVersion(localRepository, remoteRepositories, source, artifact);
-
-                            artifact.selectVersion(version.toString());
-                            fireEvent(ResolutionListener.SELECT_VERSION_FROM_RANGE,
-                                    listeners, child);
-                        }
-
-                        ResolutionGroup rGroup = source.retrieve(artifact,
-                                localRepository, remoteRepositories);
-
-                        // TODO might be better to have source.retreive() throw
-                        // a specific exception for this situation
-                        // and catch here rather than have it return null
-                        if (rGroup == null) {
-                            // relocated dependency artifact is declared
-                            // excluded, no need to add and recurse further
-                            continue;
-                        }
-
-                        child.addDependencies(rGroup.getArtifacts(),
-                                rGroup.getResolutionRepositories(), filter);
-                    }
-                    catch (CyclicDependencyException e) {
-                        // would like to throw this, but we have crappy stuff in
-                        // the repo
-
-                        fireEvent(ResolutionListener.OMIT_FOR_CYCLE, listeners,
-                                new ResolutionNode(e.getArtifact(), remoteRepositories, child));
-                    }
-                    catch (ArtifactMetadataRetrievalException e) {
-                        artifact.setDependencyTrail(node.getDependencyTrail());
-                        throw new ArtifactResolutionException(
-                                "Unable to get dependency information: "
-                                        + e.getMessage(), artifact, e);
-                    }
-
-                    recurse(child, resolvedArtifacts, managedVersions,
-                            localRepository, remoteRepositories, source,
-                            filter, listeners);
-                }
-            }
-            fireEvent(ResolutionListener.FINISH_PROCESSING_CHILDREN, listeners,
-                    node);
-        }
-    }
-
-    private ArtifactVersion getArtifactVersion(
-            ArtifactRepository localRepository,
-            List remoteRepositories,
-            ArtifactMetadataSource source,
-            Artifact artifact) throws OverConstrainedVersionException,
-            ArtifactMetadataRetrievalException {
-        ArtifactVersion version;
-        if (!artifact.isSelectedVersionKnown()) {
-            List versions = artifact.getAvailableVersions();
-            if (versions == null) {
-                versions = source.retrieveAvailableVersions(
-                        artifact, localRepository,
-                        remoteRepositories);
-                artifact.setAvailableVersions(versions);
-            }
-
-            VersionRange versionRange = artifact.getVersionRange();
-
-            version = versionRange.matchVersion(versions);
-
-            if (version == null) {
-                if (versions.isEmpty()) {
-                    throw new OverConstrainedVersionException(
-                            "No versions are present in the repository for the artifact with a range "
-                                    + versionRange, artifact, remoteRepositories);
-                }
-                else {
-                    throw new OverConstrainedVersionException(
-                            "Couldn't find a version in "
-                                    + versions
-                                    + " to match range "
-                                    + versionRange,
-                            artifact, remoteRepositories);
-                }
-            }
-        }
-        else {
-            version = artifact.getSelectedVersion();
-        }
-        return version;
-    }
-
-    private ResolutionNode checkPreviousNodes(
-            ResolutionNode node,
-            List listeners,
-            List previousNodes) throws OverConstrainedVersionException {
-        for (Iterator i = previousNodes.iterator(); i.hasNext();) {
-            ResolutionNode previous = (ResolutionNode) i.next();
-            if (previous.isActive()) {
-                // Version mediation
-                VersionRange previousRange = previous.getArtifact().getVersionRange();
-                VersionRange currentRange = node.getArtifact().getVersionRange();
-                // TODO: why do we force the version on it? what if they
-                // don't match?
-                if (previousRange == null) {
-                    // version was already resolved
-                    node.getArtifact().setVersion(previous.getArtifact().getVersion());
-                }
-                else if (currentRange == null) {
-                    // version was already resolved
-                    previous.getArtifact().setVersion(node.getArtifact().getVersion());
-                }
-                else {
-                    // TODO: shouldn't need to double up on this work, only
-                    // done for simplicity of handling recommended
-                    // version but the restriction is identical
-                    VersionRange newRange = previousRange.restrict(currentRange);
-                    // TODO: ick. this forces the OCE that should have come
-                    // from the previous call. It is still correct
-                    if (newRange.isSelectedVersionKnown(previous.getArtifact())) {
-                        fireEvent(ResolutionListener.RESTRICT_RANGE,
-                                listeners, node, previous.getArtifact(),
-                                newRange);
-                    }
-                    previous.getArtifact().setVersionRange(newRange);
-                    node.getArtifact().setVersionRange(
-                            currentRange.restrict(previousRange));
-
-                    // Select an appropriate available version from the (now
-                    // restricted) range
-                    // Note this version was selected before to get the
-                    // appropriate POM
-                    // But it was reset by the call to setVersionRange on
-                    // restricting the version
-                    ResolutionNode[] resetNodes = {previous, node};
-                    for (int j = 0; j < 2; j++) {
-                        Artifact resetArtifact = resetNodes[j]
-                                .getArtifact();
-                        if (resetArtifact.getVersion() == null
-                                && resetArtifact.getVersionRange() != null
-                                && resetArtifact.getAvailableVersions() != null) {
-
-                            resetArtifact
-                                    .selectVersion(resetArtifact
-                                            .getVersionRange()
-                                            .matchVersion(
-                                                    resetArtifact
-                                                            .getAvailableVersions())
-                                            .toString());
-                            fireEvent(ResolutionListener.SELECT_VERSION_FROM_RANGE,
-                                    listeners, resetNodes[j]);
-                        }
-                    }
-                }
-
-                // Conflict Resolution
-                // TODO: use as conflict resolver(s), chain
-
-                // TODO: should this be part of mediation?
-                // previous one is more dominant
-                if (previous.getDepth() <= node.getDepth()) {
-                    checkScopeUpdate(node, previous, listeners);
-                }
-                else {
-                    checkScopeUpdate(previous, node, listeners);
-                }
-
-                if (previous.getDepth() <= node.getDepth()) {
-                    // previous was nearer
-                    fireEvent(ResolutionListener.OMIT_FOR_NEARER,
-                            listeners, node, previous.getArtifact());
-                    node.disable();
-                    node = previous;
-                }
-                else {
-                    fireEvent(ResolutionListener.OMIT_FOR_NEARER,
-                            listeners, previous, node.getArtifact());
-                    previous.disable();
-                }
-            }
-        }
-        return node;
-    }
-
-    private void checkScopeUpdate(ResolutionNode farthest,
-            ResolutionNode nearest, List listeners) {
-        boolean updateScope = false;
-        Artifact farthestArtifact = farthest.getArtifact();
-        Artifact nearestArtifact = nearest.getArtifact();
-
-        if (Artifact.SCOPE_RUNTIME.equals(farthestArtifact.getScope())
-                && (Artifact.SCOPE_TEST.equals(nearestArtifact.getScope()) || Artifact.SCOPE_PROVIDED
-                .equals(nearestArtifact.getScope()))) {
-            updateScope = true;
-        }
-
-        if (Artifact.SCOPE_COMPILE.equals(farthestArtifact.getScope())
-                && !Artifact.SCOPE_COMPILE.equals(nearestArtifact.getScope())) {
-            updateScope = true;
-        }
-
-        // current POM rules all
-        if (nearest.getDepth() < 2 && updateScope) {
-            updateScope = false;
-
-            fireEvent(ResolutionListener.UPDATE_SCOPE_CURRENT_POM, listeners,
-                    nearest, farthestArtifact);
-        }
-
-        if (updateScope) {
-            fireEvent(ResolutionListener.UPDATE_SCOPE, listeners, nearest,
-                    farthestArtifact);
-
-            // previously we cloned the artifact, but it is more effecient to
-            // just update the scope
-            // if problems are later discovered that the original object needs
-            // its original scope value, cloning may
-            // again be appropriate
-            nearestArtifact.setScope(farthestArtifact.getScope());
-        }
-    }
-
-    private void fireEvent(int event, List listeners, ResolutionNode node) {
-        fireEvent(event, listeners, node, null);
-    }
-
-    private void fireEvent(int event, List listeners, ResolutionNode node,
-            Artifact replacement) {
-        fireEvent(event, listeners, node, replacement, null);
-    }
-
-    private void fireEvent(int event, List listeners, ResolutionNode node,
-            Artifact replacement, VersionRange newRange) {
-        for (Iterator i = listeners.iterator(); i.hasNext();) {
-            ResolutionListener listener = (ResolutionListener) i.next();
-
-            switch (event) {
-                case ResolutionListener.TEST_ARTIFACT:
-                    listener.testArtifact(node.getArtifact());
-                    break;
-                case ResolutionListener.PROCESS_CHILDREN:
-                    listener.startProcessChildren(node.getArtifact());
-                    break;
-                case ResolutionListener.FINISH_PROCESSING_CHILDREN:
-                    listener.endProcessChildren(node.getArtifact());
-                    break;
-                case ResolutionListener.INCLUDE_ARTIFACT:
-                    listener.includeArtifact(node.getArtifact());
-                    break;
-                case ResolutionListener.OMIT_FOR_NEARER:
-                    String version = node.getArtifact().getVersion();
-                    String replacementVersion = replacement.getVersion();
-                    if (version != null ? !version.equals(replacementVersion)
-                            : replacementVersion != null) {
-                        listener.omitForNearer(node.getArtifact(), replacement);
-                    }
-                    break;
-                case ResolutionListener.OMIT_FOR_CYCLE:
-                    listener.omitForCycle(node.getArtifact());
-                    break;
-                case ResolutionListener.UPDATE_SCOPE:
-                    listener
-                            .updateScope(node.getArtifact(), replacement.getScope());
-                    break;
-                case ResolutionListener.UPDATE_SCOPE_CURRENT_POM:
-                    listener.updateScopeCurrentPom(node.getArtifact(), replacement
-                            .getScope());
-                    break;
-                case ResolutionListener.MANAGE_ARTIFACT:
-                    listener.manageArtifact(node.getArtifact(), replacement);
-                    break;
-                case ResolutionListener.SELECT_VERSION_FROM_RANGE:
-                    listener.selectVersionFromRange(node.getArtifact());
-                    break;
-                case ResolutionListener.RESTRICT_RANGE:
-                    if (node.getArtifact().getVersionRange().hasRestrictions()
-                            || replacement.getVersionRange().hasRestrictions()) {
-                        listener.restrictRange(node.getArtifact(), replacement,
-                                newRange);
-                    }
-                    break;
-                default:
-                    throw new IllegalStateException("Unknown event: " + event);
-            }
-        }
-    }
-}
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java b/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java
deleted file mode 100644
index c9062e8..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.features;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.lang.Exception;
-import java.net.URI;
-import java.util.Collection;
-import java.util.EnumSet;
-import java.util.Properties;
-import java.util.Set;
-
-import org.apache.karaf.deployer.kar.KarArtifactInstaller;
-import org.apache.karaf.features.Feature;
-import org.apache.karaf.features.FeaturesService;
-import org.apache.karaf.features.Repository;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-
-/**
- * Installs kar dependencies into a server-under-construction in target/assembly
- *
- * @goal install-kars
- * @phase process-resources
- * @execute phase="process-resources"
- * @requiresDependencyResolution runtime
- * @inheritByDefault true
- * @description Install kar dependencies
- */
-public class InstallKarsMojo extends MojoSupport {
-
-    /**
-     * Directory that resources are copied to during the build.
-     *
-     * @parameter expression="${project.build.directory}/assembly"
-     * @required
-     */
-    protected String workDirectory;
-
-    /**
-     * features config file.
-     *
-     * @parameter expression="${project.build.directory}/assembly/etc/org.apache.karaf.features.cfg"
-     * @required
-     */
-    protected File featuresCfgFile;
-
-    /**
-     * Directory that resources are copied to during the build.
-     *
-     * @parameter expression="${project.build.directory}/assembly/system"
-     * @required
-     */
-    protected String systemRepoDirectory;
-
-    public void execute() throws MojoExecutionException, MojoFailureException {
-        KarArtifactInstaller installer = new KarArtifactInstaller();
-        installer.setBasePath(workDirectory);
-        installer.setLocalRepoPath(systemRepoDirectory);
-        FeaturesService featuresService = new OfflineFeaturesService();
-        installer.setFeaturesService(featuresService);
-        installer.init();
-        Collection<Artifact> dependencies = project.getDependencyArtifacts();
-        StringBuilder buf = new StringBuilder();
-        for (Artifact artifact: dependencies) {
-            if ("kar".equals(artifact.getType()) && "compile".equals(artifact.getScope())) {
-                File file = artifact.getFile();
-                try {
-                    installer.install(file);
-                } catch (Exception e) {
-                    buf.append("Could not install kar: ").append(artifact.toString()).append("\n");
-                    buf.append(e.getMessage()).append("\n\n");
-                }
-            }
-        }
-        if (buf.length() > 0) {
-            throw new MojoExecutionException("Could not unpack all dependencies:\n" + buf.toString());
-        }
-    }
-
-    private class OfflineFeaturesService implements FeaturesService {
-        private static final String FEATURES_REPOSITORIES = "featuresRepositories";
-
-        public void validateRepository(URI uri) throws Exception {
-        }
-
-        public void addRepository(URI url) throws Exception {
-            if (featuresCfgFile.exists()) {
-                Properties properties = new Properties();
-                FileInputStream in = new FileInputStream(featuresCfgFile);
-                try {
-                    properties.load(in);
-                } finally {
-                    in.close();
-                }
-                String existingFeatureRepos = properties.containsKey(FEATURES_REPOSITORIES)? properties.getProperty(FEATURES_REPOSITORIES) + ",": "";
-                existingFeatureRepos = existingFeatureRepos + url.toString();
-                properties.setProperty(FEATURES_REPOSITORIES, existingFeatureRepos);
-                FileOutputStream out = new FileOutputStream(featuresCfgFile);
-                try {
-                    properties.store(out, "Features Service config");
-                } finally {
-                    out.close();
-                }
-            }
-        }
-
-        public void addRepository(URI url, boolean install) throws Exception {
-            addRepository(url);
-        }
-
-        public void removeRepository(URI url) {
-        }
-
-        public void removeRepository(URI url, boolean uninstall) {
-        }
-
-        public void restoreRepository(URI url) throws Exception {
-        }
-
-        public Repository[] listRepositories() {
-            return new Repository[0];
-        }
-
-        public void installFeature(String name) throws Exception {
-        }
-
-        public void installFeature(String name, EnumSet<Option> options) throws Exception {
-        }
-
-        public void installFeature(String name, String version) throws Exception {
-        }
-
-        public void installFeature(String name, String version, EnumSet<Option> options) throws Exception {
-        }
-
-        public void installFeature(Feature f, EnumSet<Option> options) throws Exception {
-        }
-
-        public void installFeatures(Set<Feature> features, EnumSet<Option> options) throws Exception {
-        }
-
-        public void uninstallFeature(String name) throws Exception {
-        }
-
-        public void uninstallFeature(String name, String version) throws Exception {
-        }
-
-        public Feature[] listFeatures() throws Exception {
-            return new Feature[0];
-        }
-
-        public Feature[] listInstalledFeatures() {
-            return new Feature[0];
-        }
-
-        public boolean isInstalled(Feature f) {
-            return false;
-        }
-
-        public Feature getFeature(String name, String version) throws Exception {
-            return null;
-        }
-
-        public Feature getFeature(String name) throws Exception {
-            return null;
-        }
-    }
-}
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ManifestUtils.java b/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ManifestUtils.java
deleted file mode 100644
index ef265a9..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ManifestUtils.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.tooling.features;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.jar.Manifest;
-
-import org.apache.felix.utils.manifest.Clause;
-import org.apache.felix.utils.manifest.Parser;
-import org.apache.felix.utils.version.VersionRange;
-import org.osgi.framework.Constants;
-
-
-/**
- * A set of utility methods to ease working with {@link org.apache.felix.utils.manifest.Parser} and
- * {@link org.apache.felix.utils.manifest.Clause}
- */
-
-public class ManifestUtils {
-
-    private ManifestUtils() {
-        // hide the constructor
-    }
-
-    /**
-     * Get the list of imports from the manifest.  If no imports have been defined, this method returns an empty list.
-     *
-     * @param manifest the manifest
-     * @return the list of imports
-     */
-    public static List<Clause> getImports(Manifest manifest) {
-    	List<Clause> result = new LinkedList<Clause>();
-    	Clause[] clauses = Parser.parseHeader(getHeader(Constants.IMPORT_PACKAGE, manifest));
-    	for (Clause clause : clauses) {
-    		result.add(clause);
-    	}
-    	return result;
-    }
-
-    /**
-     * Get the list of non-optional imports from the manifest.
-     *
-     * @param manifest the manifest
-     * @return the list of non-optional imports
-     */
-    public static List<Clause> getMandatoryImports(Manifest manifest) {
-        List<Clause> result = new LinkedList<Clause>();
-        for (Clause clause : getImports(manifest)) {
-            if (!isOptional(clause)) {
-                result.add(clause);
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Get the list of exports from the manifest.  If no exports have been defined, this method returns an empty list.
-     *
-     * @param manifest the manifest
-     * @return the list of exports
-     */
-    public static List<Clause> getExports(Manifest manifest) {
-    	List<Clause> result = new LinkedList<Clause>();
-    	Clause[] clauses = Parser.parseHeader(getHeader(Constants.EXPORT_PACKAGE, manifest));
-    	for (Clause clause : clauses) {
-    		result.add(clause);
-    	}
-    	return result;
-    }
-
-    /**
-     * Check if a given manifest clause represents an optional import
-     *
-     * @param clause the manifest clause
-     * @return <code>true</code> for an optional import, <code>false</code> for mandatory imports
-     */
-    public static boolean isOptional(Clause clause) {
-        return "optional".equals(clause.getDirective("resolution"));
-    }
-
-    /**
-     * Check if the manifest contains the mandatory Bundle-Symbolic-Name
-     *
-     * @param manifest the manifest
-     * @return <code>true</code> if the manifest specifies a Bundle-Symbolic-Name
-     */
-    public static boolean isBundle(Manifest manifest) {
-        return getBsn(manifest) != null;
-    }
-
-    public static boolean matches(Clause requirement, Clause export) {
-        if (requirement.getName().equals(export.getName())) {
-        	VersionRange importVersionRange = getVersionRange(requirement); 
-        	VersionRange exportVersionRange = getVersionRange(export);
-        	VersionRange intersection = importVersionRange.intersect(exportVersionRange);
-        	return intersection != null;
-        }
-        return false;
-    }
-    
-    public static String getHeader(String name, Manifest manifest) {
-    	String value = manifest.getMainAttributes().getValue(name);
-    	return value;    	
-    }
-    
-    public static String getBsn(Manifest manifest) {
-    	String bsn = getHeader(Constants.BUNDLE_SYMBOLICNAME, manifest);
-        return bsn;
-    }
-    
-    public static VersionRange getVersionRange(Clause clause)
-    {
-        String v = clause.getAttribute(Constants.VERSION_ATTRIBUTE);
-        if (v == null)
-        {
-            v = clause.getAttribute(Constants.PACKAGE_SPECIFICATION_VERSION);
-        }
-        if (v == null)
-        {
-            v = clause.getAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE);
-        }
-        return VersionRange.parseVersionRange(v);
-    }
-}
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/MojoSupport.java b/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/MojoSupport.java
deleted file mode 100644
index 1726f2a..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/MojoSupport.java
+++ /dev/null
@@ -1,447 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.tooling.features;
-
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.factory.ArtifactFactory;
-import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.DefaultArtifactRepository;
-import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
-import org.apache.maven.artifact.resolver.ArtifactCollector;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
-import org.apache.maven.artifact.resolver.ArtifactResolver;
-import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
-import org.apache.maven.artifact.versioning.VersionRange;
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.DependencyManagement;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.project.MavenProjectBuilder;
-import org.apache.maven.project.MavenProjectHelper;
-import org.apache.maven.project.ProjectBuildingException;
-
-public abstract class MojoSupport extends AbstractMojo {
-
-    /**
-     * Maven ProjectHelper
-     *
-     * @component
-     */
-    protected MavenProjectHelper projectHelper;
-
-    /**
-     * The Maven project.
-     *
-     * @parameter expression="${project}"
-     * @required
-     * @readonly
-     */
-    protected MavenProject project;
-
-    /**
-     * Directory that resources are copied to during the build.
-     *
-     * @parameter expression="${project.build.directory}/${project.artifactId}-${project.version}-installer"
-     * @required
-     */
-    protected File workDirectory;
-
-    /**
-     * @component
-     */
-    protected MavenProjectBuilder projectBuilder;
-
-    /**
-     * @parameter default-value="${localRepository}"
-     */
-    protected ArtifactRepository localRepo;
-
-    /**
-     * @parameter default-value="${project.remoteArtifactRepositories}"
-     */
-    protected List<ArtifactRepository> remoteRepos;
-
-    /**
-     * @component
-     */
-    protected ArtifactMetadataSource artifactMetadataSource;
-
-    /**
-     * @component
-     */
-    protected ArtifactResolver resolver;
-
-    protected ArtifactCollector collector = new GraphArtifactCollector();
-
-    /**
-     * @component
-     */
-    protected ArtifactFactory factory;
-    
-    /**
-     * The artifact type of a feature
-     * 
-     * @parameter default-value="xml"
-     */
-    private String featureArtifactType = "xml";
-
-    protected MavenProject getProject() {
-        return project;
-    }
-
-    protected File getWorkDirectory() {
-        return workDirectory;
-    }
-
-    public MavenProjectHelper getProjectHelper() {
-        return projectHelper;
-    }
-
-    protected void removeBranch(ResolutionListenerImpl listener,
-            Artifact artifact) {
-        Node n = listener.getNode(artifact);
-        if (n != null) {
-            for (Iterator it = n.getParents().iterator(); it.hasNext();) {
-                Node parent = (Node) it.next();
-                parent.getChildren().remove(n);
-            }
-        }
-    }
-
-    protected void removeChildren(ResolutionListenerImpl listener,
-            Artifact artifact) {
-        Node n = listener.getNode(artifact);
-        n.getChildren().clear();
-    }
-
-    protected Set getArtifacts(Node n, Set s) {
-        if (!s.contains(n.getArtifact())) {
-            s.add(n.getArtifact());
-            for (Iterator iter = n.getChildren().iterator(); iter.hasNext();) {
-                Node c = (Node) iter.next();
-                getArtifacts(c, s);
-            }
-        }
-        return s;
-    }
-
-    protected void excludeBranch(Node n, Set excludes) {
-        excludes.add(n);
-        for (Iterator iter = n.getChildren().iterator(); iter.hasNext();) {
-            Node c = (Node) iter.next();
-            excludeBranch(c, excludes);
-        }
-    }
-
-    protected void print(Node rootNode) {
-        for (Iterator iter = getArtifacts(rootNode, new HashSet()).iterator(); iter.hasNext();) {
-            Artifact a = (Artifact) iter.next();
-            getLog().info(" " + a);
-        }
-    }
-
-    protected Set retainArtifacts(Set includes, ResolutionListenerImpl listener) {
-        Set finalIncludes = new HashSet();
-        Set filteredArtifacts = getArtifacts(listener.getRootNode(),
-                new HashSet());
-        for (Iterator iter = includes.iterator(); iter.hasNext();) {
-            Artifact artifact = (Artifact) iter.next();
-            for (Iterator iter2 = filteredArtifacts.iterator(); iter2.hasNext();) {
-                Artifact filteredArtifact = (Artifact) iter2.next();
-                if (filteredArtifact.getArtifactId().equals(
-                        artifact.getArtifactId())
-                        && filteredArtifact.getType()
-                                .equals(artifact.getType())
-                        && filteredArtifact.getGroupId().equals(
-                                artifact.getGroupId())) {
-                    if (!filteredArtifact.getVersion().equals(
-                            artifact.getVersion())) {
-                        getLog()
-                                .warn(
-                                        "Resolved artifact "
-                                                + artifact
-                                                + " has a different version from that in dependency management "
-                                                + filteredArtifact
-                                                + ", overriding dependency management");
-                    }
-                    finalIncludes.add(artifact);
-                }
-            }
-
-        }
-
-        return finalIncludes;
-    }
-
-    protected ResolutionListenerImpl resolveProject() {
-        Map managedVersions = null;
-        try {
-            managedVersions = createManagedVersionMap(project.getId(), project
-                    .getDependencyManagement());
-        } catch (ProjectBuildingException e) {
-            getLog().error(
-                    "An error occurred while resolving project dependencies.",
-                    e);
-        }
-        ResolutionListenerImpl listener = new ResolutionListenerImpl();
-        listener.setLog(getLog());
-        try {
-            collector.collect(project.getDependencyArtifacts(), project
-                    .getArtifact(), managedVersions, localRepo, remoteRepos,
-                    artifactMetadataSource, null, Collections
-                            .singletonList(listener));
-        } catch (ArtifactResolutionException e) {
-            getLog().error(
-                    "An error occurred while resolving project dependencies.",
-                    e);
-        }
-        if (getLog().isDebugEnabled()) {
-            getLog().debug("Dependency graph");
-            getLog().debug("================");
-            print(listener.getRootNode());
-            getLog().debug("================");
-        }
-        return listener;
-    }
-
-    protected Map createManagedVersionMap(String projectId,
-            DependencyManagement dependencyManagement) throws ProjectBuildingException {
-        Map map;
-        if (dependencyManagement != null
-                && dependencyManagement.getDependencies() != null) {
-            map = new HashMap();
-            for (Iterator i = dependencyManagement.getDependencies().iterator(); i
-                    .hasNext();) {
-                Dependency d = (Dependency) i.next();
-
-                try {
-                    VersionRange versionRange = VersionRange
-                            .createFromVersionSpec(d.getVersion());
-                    Artifact artifact = factory.createDependencyArtifact(d
-                            .getGroupId(), d.getArtifactId(), versionRange, d
-                            .getType(), d.getClassifier(), d.getScope());
-                    map.put(d.getManagementKey(), artifact);
-                } catch (InvalidVersionSpecificationException e) {
-                    throw new ProjectBuildingException(projectId,
-                            "Unable to parse version '" + d.getVersion()
-                                    + "' for dependency '"
-                                    + d.getManagementKey() + "': "
-                                    + e.getMessage(), e);
-                }
-            }
-        } else {
-            map = Collections.EMPTY_MAP;
-        }
-        return map;
-    }
-
-    /**
-     * Set up a classloader for the execution of the main class.
-     *
-     * @return
-     * @throws MojoExecutionException
-     */
-    protected URLClassLoader getClassLoader() throws MojoExecutionException {
-        try {
-            Set urls = new HashSet();
-
-            URL mainClasses = new File(project.getBuild().getOutputDirectory())
-                    .toURL();
-            getLog().debug("Adding to classpath : " + mainClasses);
-            urls.add(mainClasses);
-
-            URL testClasses = new File(project.getBuild()
-                    .getTestOutputDirectory()).toURL();
-            getLog().debug("Adding to classpath : " + testClasses);
-            urls.add(testClasses);
-
-            Set dependencies = project.getArtifacts();
-            Iterator iter = dependencies.iterator();
-            while (iter.hasNext()) {
-                Artifact classPathElement = (Artifact) iter.next();
-                getLog().debug(
-                        "Adding artifact: " + classPathElement.getFile()
-                                + " to classpath");
-                urls.add(classPathElement.getFile().toURL());
-            }
-            URLClassLoader appClassloader = new URLClassLoader((URL[]) urls
-                    .toArray(new URL[urls.size()]), this.getClass().getClassLoader());
-            return appClassloader;
-        } catch (MalformedURLException e) {
-            throw new MojoExecutionException(
-                    "Error during setting up classpath", e);
-        }
-    }
-    
-    protected String translateFromMaven(String uri) {
-        if (uri.startsWith("mvn:")) {
-            String[] parts = uri.substring("mvn:".length()).split("/");
-            String groupId = parts[0];
-            String artifactId = parts[1];
-            String version = null;
-            String classifier = null;
-            String type = "jar";
-            if (parts.length > 2) {
-                version = parts[2];
-                if (parts.length > 3) {
-                    type = parts[3];
-                    if (parts.length > 4) {
-                        classifier = parts[4];
-                    }
-                }
-            }
-            String dir = groupId.replace('.', '/') + "/" + artifactId + "/" + version + "/";
-            String name = artifactId + "-" + version + (classifier != null ? "-" + classifier : "") + "." + type;
-
-            return getLocalRepoUrl() + "/" + dir + name;
-        }
-        if (System.getProperty("os.name").startsWith("Windows") && uri.startsWith("file:")) {
-                String baseDir = uri.substring(5).replace('\\', '/').replaceAll(" ", "%20");
-                String result = baseDir;
-                if (baseDir.indexOf(":") > 0) {
-                        result = "file:///" + baseDir;
-                }
-                return result;
-        }
-        return uri;
-    }
-
-    protected String getLocalRepoUrl() {
-         if (System.getProperty("os.name").startsWith("Windows")) {
-             String baseDir = localRepo.getBasedir().replace('\\', '/').replaceAll(" ", "%20");
-             return extractProtocolFromLocalMavenRepo()  + ":///" + baseDir;
-         } else {
-             return localRepo.getUrl();
-         }
-    }
-
-    /**
-     * Required because Maven 3 returns null in {@link ArtifactRepository#getProtocol()} (see KARAF-244)
-     */
-    private String extractProtocolFromLocalMavenRepo() {
-        try {
-            return new URL(localRepo.getUrl()).getProtocol();
-        } catch (MalformedURLException e) {
-            // Basically this should not happen; if it does though cancel the process
-            throw new RuntimeException("Repository URL is not valid", e);
-        }
-    }
-    
-    private Dependency findDependency(List<Dependency> dependencies, String artifactId, String groupId) {
-        for(Dependency dep : dependencies) {
-            if (artifactId.equals(dep.getArtifactId()) && groupId.equals(dep.getGroupId()) &&
-                    featureArtifactType.equals(dep.getType())) {
-                if (dep.getVersion() != null) 
-                    return dep;
-            }
-        }
-        return null;
-    }
-
-    protected Artifact resourceToArtifact(String resourceLocation, boolean skipNonMavenProtocols) throws MojoExecutionException {
-        resourceLocation = resourceLocation.replace("\r\n", "").replace("\n", "").replace(" ", "").replace("\t", "");
-        final int index = resourceLocation.indexOf("mvn:");
-        if (index < 0) {
-            if (skipNonMavenProtocols) {
-                return null;
-            }
-            throw new MojoExecutionException("Resource URL is not a maven URL: " + resourceLocation);
-        } else {
-            resourceLocation = resourceLocation.substring(index + "mvn:".length());
-        }
-        // Truncate the URL when a '#', a '?' or a '$' is encountered
-        final int index1 = resourceLocation.indexOf('?');
-        final int index2 = resourceLocation.indexOf('#');
-        int endIndex = -1;
-        if (index1 > 0) {
-            if (index2 > 0) {
-                endIndex = Math.min(index1, index2);
-            } else {
-                endIndex = index1;
-            }
-        } else if (index2 > 0) {
-            endIndex = index2;
-        }
-        if (endIndex >= 0) {
-            resourceLocation = resourceLocation.substring(0, endIndex);
-        }
-        final int index3 = resourceLocation.indexOf('$');
-        if (index3 > 0) {
-            resourceLocation = resourceLocation.substring(0, index3);
-        }
-
-        //check if the resourceLocation descriptor contains also remote repository information.
-        ArtifactRepository repo = null;
-        if (resourceLocation.startsWith("http://")) {
-            final int repoDelimIntex = resourceLocation.indexOf('!');
-            String repoUrl = resourceLocation.substring(0, repoDelimIntex);
-
-            repo = new DefaultArtifactRepository(
-                    repoUrl,
-                    repoUrl,
-                    new DefaultRepositoryLayout());
-            resourceLocation = resourceLocation.substring(repoDelimIntex + 1);
-
-        }
-        String[] parts = resourceLocation.split("/");
-        String groupId = parts[0];
-        String artifactId = parts[1];
-        String version = null;
-        String classifier = null;
-        String type = "jar";
-        if (parts.length > 2) {
-            version = parts[2];
-            if (parts.length > 3) {
-                type = parts[3];
-                if (parts.length > 4) {
-                    classifier = parts[4];
-                }
-            }
-        } else {
-            Dependency dep = findDependency(project.getDependencies(), artifactId, groupId);
-            if (dep == null && project.getDependencyManagement() != null) {
-                dep = findDependency(project.getDependencyManagement().getDependencies(), artifactId, groupId);
-            }
-            if (dep != null) {
-                version = dep.getVersion();
-                classifier = dep.getClassifier();
-                type = dep.getType();
-            }
-        }
-        if (version == null || version.length() == 0) {
-            throw new MojoExecutionException("Cannot find version for: " + resourceLocation);
-        }
-        Artifact artifact = factory.createArtifactWithClassifier(groupId, artifactId, version, type, classifier);
-        artifact.setRepository(repo);
-        return artifact;
-    }
-}
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/Node.java b/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/Node.java
deleted file mode 100644
index 86e296b..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/Node.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.tooling.features;
-
-import java.util.Set;
-import java.util.HashSet;
-
-import org.apache.maven.artifact.Artifact;
-
-public class Node {
-
-    private Set children = new HashSet();
-    private Set parents = new HashSet();
-    private Artifact artifact;
-
-    public Set getChildren() {
-        return children;
-    }
-
-    public Artifact getArtifact() {
-        return artifact;
-    }
-
-    public Set getParents() {
-        return parents;
-    }
-
-    public void setChildren(Set children) {
-        this.children = children;
-    }
-
-    public void setParents(Set parents) {
-        this.parents = parents;
-    }
-
-    public void setArtifact(Artifact artifact) {
-        this.artifact = artifact;
-    }
-}
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ResolutionListenerImpl.java b/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ResolutionListenerImpl.java
deleted file mode 100644
index 3e61254..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ResolutionListenerImpl.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.tooling.features;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Stack;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.resolver.ResolutionListener;
-import org.apache.maven.artifact.versioning.VersionRange;
-import org.apache.maven.plugin.logging.Log;
-
-public class ResolutionListenerImpl implements ResolutionListener {
-
-    private Stack parents = new Stack();
-    private Map artifacts = new HashMap();
-    private Node rootNode;
-    private Log log;
-
-    public void setLog(Log log) {
-        this.log = log;
-    }
-
-    public Log getLog() {
-        return log;
-    }
-
-    public void testArtifact(Artifact artifact) {
-        // getLog().debug("testArtifact: " + artifact);
-        // intentionally blank
-    }
-
-    public void startProcessChildren(Artifact artifact) {
-        // getLog().debug("startProcessChildren: " + artifact);
-        Node node = (Node) artifacts.get(artifact.getDependencyConflictId());
-        if (parents.isEmpty()) {
-            rootNode = node;
-        }
-        parents.push(node);
-    }
-
-    public void endProcessChildren(Artifact artifact) {
-        // getLog().debug("endProcessChildren: " + artifact);
-        Node check = (Node) parents.pop();
-        assert artifact.equals(check.getArtifact());
-    }
-
-    public void omitForNearer(Artifact omitted, Artifact kept) {
-        // getLog().debug("omitForNearer: omitted=" + omitted + ", kept=" +
-        // kept);
-        assert omitted.getDependencyConflictId().equals(
-                kept.getDependencyConflictId());
-        Node node = (Node) artifacts.get(omitted.getDependencyConflictId());
-        assert node != null;
-        node.setArtifact(kept);
-    }
-
-    public void omitForCycle(Artifact artifact) {
-        // getLog().debug("omitForCycle: " + artifact);
-        // intentionally blank
-    }
-
-    public void includeArtifact(Artifact artifact) {
-        // getLog().debug("includeArtifact: " + artifact);
-        Node node = (Node) artifacts.get(artifact.getDependencyConflictId());
-        if (node == null) {
-            node = new Node();
-            artifacts.put(artifact.getDependencyConflictId(), node);
-        }
-        node.setArtifact(artifact);
-        if (!parents.isEmpty()) {
-            Node parent = (Node) parents.peek();
-            parent.getChildren().add(node);
-            node.getParents().add(parent);
-        }
-        if (rootNode != null) {
-            // print(rootNode, "");
-        }
-    }
-
-    protected void print(Node node, String string) {
-        // getLog().debug(string + rootNode.getArtifact());
-        for (Iterator iter = node.getChildren().iterator(); iter.hasNext();) {
-            Node n = (Node) iter.next();
-            print(n, string + "  ");
-        }
-    }
-
-    public void updateScope(Artifact artifact, String scope) {
-        // getLog().debug("updateScope: " + artifact);
-        Node node = (Node) artifacts.get(artifact.getDependencyConflictId());
-
-        node.getArtifact().setScope(scope);
-    }
-
-    public void manageArtifact(Artifact artifact, Artifact replacement) {
-        // getLog().debug("manageArtifact: artifact=" + artifact + ",
-        // replacement=" + replacement);
-        Node node = (Node) artifacts.get(artifact.getDependencyConflictId());
-        if (node != null) {
-            if (replacement.getVersion() != null) {
-                node.getArtifact().setVersion(replacement.getVersion());
-            }
-            if (replacement.getScope() != null) {
-                node.getArtifact().setScope(replacement.getScope());
-            }
-        }
-    }
-
-    public void updateScopeCurrentPom(Artifact artifact, String key) {
-
-        getLog().debug("updateScopeCurrentPom: " + artifact);
-        // intentionally blank
-    }
-
-    public void selectVersionFromRange(Artifact artifact) {
-
-        getLog().debug("selectVersionFromRange: " + artifact);
-        // intentionally blank
-    }
-
-    public void restrictRange(Artifact artifact, Artifact artifact1,
-            VersionRange versionRange) {
-
-        getLog().debug("restrictRange: " + artifact);
-        // intentionally blank
-    }
-
-    public Node getNode(Artifact artifact) {
-        return (Node) artifacts.get(artifact.getDependencyConflictId());
-    }
-
-    public Collection getArtifacts() {
-        return artifacts.values();
-    }
-
-    public Node getRootNode() {
-        return rootNode;
-    }
-}
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/SpringURLHandler.java b/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/SpringURLHandler.java
deleted file mode 100644
index 1597680..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/SpringURLHandler.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.tooling.features;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLStreamHandler;
-
-import org.apache.karaf.deployer.spring.SpringTransformer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * As org.apache.karaf.deployer.spring.SpringURLHandler need run with OSGi container
- * so create this class only used for features-maven-plugin
- */
-public class SpringURLHandler extends URLStreamHandler {
-
-	private final Logger logger = LoggerFactory.getLogger(SpringURLHandler.class);
-
-	private static String SYNTAX = "spring: spring-xml-uri";
-
-	private URL springXmlURL;
-
-    /**
-     * Open the connection for the given URL.
-     *
-     * @param url the url from which to open a connection.
-     * @return a connection on the specified URL.
-     * @throws IOException if an error occurs or if the URL is malformed.
-     */
-    @Override
-	public URLConnection openConnection(URL url) throws IOException {
-		if (url.getPath() == null || url.getPath().trim().length() == 0) {
-			throw new MalformedURLException ("Path can not be null or empty. Syntax: " + SYNTAX );
-		}
-		springXmlURL = new URL(url.getPath());
-
-		logger.debug("Spring xml URL is: [" + springXmlURL + "]");
-		return new Connection(url);
-	}
-	
-	public URL getSpringXmlURL() {
-		return springXmlURL;
-	}
-
-    public class Connection extends URLConnection {
-
-        public Connection(URL url) {
-            super(url);
-        }
-
-        @Override
-        public void connect() throws IOException {
-        }
-
-        @Override
-        public InputStream getInputStream() throws IOException {
-            try {
-                ByteArrayOutputStream os = new ByteArrayOutputStream();
-                SpringTransformer.transform(springXmlURL, os);
-                os.close();
-                return new ByteArrayInputStream(os.toByteArray());
-            } catch (Exception e) {
-                logger.error("Error opening spring xml url", e);
-                throw (IOException) new IOException("Error opening spring xml url").initCause(e);
-            }
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ValidateFeaturesMojo.java b/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ValidateFeaturesMojo.java
deleted file mode 100644
index 8c43826..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ValidateFeaturesMojo.java
+++ /dev/null
@@ -1,676 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.tooling.features;
-
-import org.apache.felix.utils.manifest.Clause;
-import org.apache.karaf.features.BundleInfo;
-import org.apache.karaf.features.Feature;
-import org.apache.karaf.features.Repository;
-import org.apache.karaf.features.internal.FeatureValidationUtil;
-import org.apache.karaf.features.internal.RepositoryImpl;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.DefaultArtifactRepository;
-import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
-import org.apache.maven.artifact.resolver.ArtifactCollector;
-import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
-import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.shared.dependency.tree.DependencyNode;
-import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder;
-import org.apache.maven.shared.dependency.tree.traversal.DependencyNodeVisitor;
-
-import java.io.*;
-import java.net.URI;
-import java.net.URL;
-import java.util.*;
-import java.util.jar.JarInputStream;
-import java.util.jar.Manifest;
-import java.util.zip.ZipException;
-import java.util.zip.ZipFile;
-
-import static org.apache.karaf.tooling.features.ManifestUtils.*;
-
-/**
- * Validates a features XML file
- *
- * @goal validate
- * @execute phase="process-resources"
- * @requiresDependencyResolution runtime
- * @inheritByDefault true
- * @description Validates the features XML file
- */
-@SuppressWarnings("unchecked")
-public class ValidateFeaturesMojo extends MojoSupport {
-
-    private static final String MVN_URI_PREFIX = "mvn:";
-    private static final String MVN_REPO_SEPARATOR = "!";
-
-    private static final String KARAF_CORE_STANDARD_FEATURE_URL = "mvn:org.apache.karaf.assemblies.features/standard/%s/xml/features";
-    private static final String KARAF_CORE_ENTERPRISE_FEATURE_URL = "mvn:org.apache.karaf.assemblies.features/enterprise/%s/xml/features";
-
-    /**
-     * The dependency tree builder to use.
-     *
-     * @component
-     * @required
-     * @readonly
-     */
-    private DependencyTreeBuilder dependencyTreeBuilder;
-
-    /**
-     * The ArtifactCollector provided by Maven at runtime
-     *
-     * @component
-     * @required
-     * @readonly
-     */
-    private ArtifactCollector collector;
-
-    /**
-     * The file to generate
-     *
-     * @parameter default-value="${project.build.directory}/classes/features.xml"
-     */
-    private File file;
-
-    /**
-     * Karaf config.properties
-     *
-     * @parameter default-value="config.properties"
-     */
-    private String karafConfig;
-
-    /**
-     * which JRE version to parse from config.properties to get the JRE exported packages
-     *
-     * @parameter default-value="jre-1.5"
-     */
-    private String jreVersion;
-
-    /**
-     * which Karaf version used for Karaf core features resolution
-     *
-     * @parameter
-     */
-    private String karafVersion;
-
-    /**
-     * The repositories which are included from the plugin config
-     *
-     * @parameter
-     */
-    private List<String> repositories;
-
-    /**
-     * skip non maven protocols or not skip
-     *
-     * @parameter default-value="false"
-     */
-    private boolean skipNonMavenProtocols = false;
-
-    /*
-    * A map to cache the mvn: uris and the artifacts that correspond with them if it's mvn protocol
-    * or just uris itself if it's non mvn protocol
-    */
-    private Map<String, Object> bundles = new HashMap<String, Object>();
-
-    /*
-     * A map to cache manifests that have been extracted from the bundles
-     */
-    private Map<Object, Manifest> manifests = new HashMap<Object, Manifest>();
-
-    /*
-     * The list of features, includes both the features to be validated and the features from included <repository>s
-     */
-    private Features features = new Features();
-
-    /*
-     * The packages exported by the features themselves -- useful when features depend on other features
-     */
-    private Map<String, Set<Clause>> featureExports = new HashMap<String, Set<Clause>>();
-
-    /*
-     * The set of packages exported by the system bundle and by Karaf itself
-     */
-    private Set<String> systemExports = new HashSet<String>();
-
-    /**
-     * The Mojo's main method
-     */
-    public void execute() throws MojoExecutionException, MojoFailureException {
-        try {
-            prepare();
-            URI uri = file.toURI();
-            Repository repository = new RepositoryImpl(uri);
-            schemaCheck(repository, uri);
-            analyze(repository);
-            validate(repository);
-        } catch (Exception e) {
-            throw new MojoExecutionException(String.format("Unable to validate %s: %s", file.getAbsolutePath(), e.getMessage()), e);
-        }
-
-    }
-
-    /**
-     * Checks feature repository with XML Schema.
-     *
-     * @param repository Repository object.
-     * @param uri        Display URI.
-     */
-    private void schemaCheck(Repository repository, URI uri) {
-        try {
-            info(" - validation of %s", uri);
-            FeatureValidationUtil.validate(repository.getURI());
-        } catch (Exception e) {
-            error("Failed to validate repository %s. Schema validation fails. Fix errors to continue validation",
-                    e, uri);
-        }
-    }
-
-    /*
-     * Prepare for validation by determing system and Karaf exports
-     */
-    private void prepare() throws Exception {
-        info("== Preparing for validation ==");
-        URL.setURLStreamHandlerFactory(new CustomBundleURLStreamHandlerFactory());
-        info(" - getting list of system bundle exports");
-        readSystemPackages();
-        info(" - getting list of provided bundle exports");
-        readProvidedBundles();
-        info(" - populating repositories with Karaf core features descriptors");
-        appendKarafCoreFeaturesDescriptors();
-    }
-
-    /**
-     * Add Karaf core features descriptors in the default repositories set.
-     */
-    private void appendKarafCoreFeaturesDescriptors() {
-        if (repositories == null) {
-            repositories = new ArrayList<String>();
-        }
-        if (karafVersion == null) {
-            Package p = Package.getPackage("org.apache.karaf.tooling.features");
-            karafVersion = p.getImplementationVersion();
-        }
-        String karafCoreStandardFeaturesUrl = String.format(KARAF_CORE_STANDARD_FEATURE_URL, karafVersion);
-        String karafCoreEnterpriseFeaturesUrl = String.format(KARAF_CORE_ENTERPRISE_FEATURE_URL, karafVersion);
-
-        try {
-            resolve(karafCoreStandardFeaturesUrl);
-            repositories.add(karafCoreStandardFeaturesUrl);
-        } catch (Exception e) {
-            warn("Can't add " + karafCoreStandardFeaturesUrl + " in the default repositories set");
-        }
-
-        try {
-            resolve(karafCoreEnterpriseFeaturesUrl);
-            repositories.add(karafCoreEnterpriseFeaturesUrl);
-        } catch (Exception e) {
-            warn("Can't add " + karafCoreStandardFeaturesUrl + " in the default repositories set");
-        }
-    }
-
-    /*
-     * Analyse the descriptor and any <repository>s that might be part of it
-     */
-    private void analyze(Repository repository) throws Exception {
-        info("== Analyzing feature descriptor ==");
-        info(" - read %s", file.getAbsolutePath());
-
-        features.add(repository.getFeatures());
-
-        // add the repositories from the plugin configuration
-        if (repositories != null) {
-            for (String uri : repositories) {
-                getLog().info(String.format(" - adding repository from %s", uri));
-                Repository dependency = new RepositoryImpl(URI.create(translateFromMaven(uri)));
-                schemaCheck(dependency, URI.create(uri));
-                features.add(dependency.getFeatures());
-                validateBundlesAvailable(dependency);
-                analyzeExports(dependency);
-            }
-        }
-
-        for (URI uri : repository.getRepositories()) {
-            Artifact artifact = (Artifact) resolve(uri.toString());
-            Repository dependency = new RepositoryImpl(new File(localRepo.getBasedir(), localRepo.pathOf(artifact)).toURI());
-
-            schemaCheck(dependency, uri);
-            getLog().info(String.format(" - adding %d known features from %s", dependency.getFeatures().length, uri));
-            features.add(dependency.getFeatures());
-            // we need to do this to get all the information ready for further processing
-            validateBundlesAvailable(dependency);
-            analyzeExports(dependency);
-        }
-
-    }
-
-    /*
-     * Perform the actual validation
-     */
-    private void validate(Repository repository) throws Exception {
-        info("== Validating feature descriptor ==");
-        info(" - validating %d features", repository.getFeatures().length);
-        info(" - step 1: Checking if all artifacts exist");
-        validateBundlesAvailable(repository);
-        info("    OK: all %d OSGi bundles have been found", bundles.size());
-        info(" - step 2: Checking if all imports for bundles can be resolved");
-        validateImportsExports(repository);
-        info("== Done! ==========================");
-    }
-
-
-    /*
-     * Determine list of exports by bundles that have been marked provided in the pom
-     * //TODO: we probably want to figure this out somewhere from the Karaf build itself instead of putting the burden on the user
-     */
-    private void readProvidedBundles() throws Exception {
-        DependencyNode tree = dependencyTreeBuilder.buildDependencyTree(project, localRepo, factory, artifactMetadataSource, new ArtifactFilter() {
-
-            public boolean include(Artifact artifact) {
-                return true;
-            }
-
-        }, collector);
-        tree.accept(new DependencyNodeVisitor() {
-            public boolean endVisit(DependencyNode node) {
-                // we want the next sibling too
-                return true;
-            }
-
-            public boolean visit(DependencyNode node) {
-                if (node.getState() != DependencyNode.OMITTED_FOR_CONFLICT) {
-                    Artifact artifact = node.getArtifact();
-                    info("    scanning %s for exports", artifact);
-                    if (Artifact.SCOPE_PROVIDED.equals(artifact.getScope()) && !artifact.getType().equals("pom")) {
-                        try {
-                            for (Clause clause : ManifestUtils.getExports(getManifest("", artifact))) {
-                                getLog().debug(" adding " + clause.getName() + " to list of available packages");
-                                systemExports.add(clause.getName());
-                            }
-                        } catch (ArtifactResolutionException e) {
-                            error("Unable to find bundle exports for %s: %s", e, artifact, e.getMessage());
-                        } catch (ArtifactNotFoundException e) {
-                            error("Unable to find bundle exports for %s: %s", e, artifact, e.getMessage());
-                        } catch (IOException e) {
-                            error("Unable to find bundle exports for %s: %s", e, artifact, e.getMessage());
-                        }
-                    }
-                }
-                // we want the children too
-                return true;
-            }
-        });
-    }
-
-    /*
-     * Read system packages from a properties file
-     * //TODO: we should probably grab this file from the Karaf distro itself instead of duplicating it in the plugin
-     */
-    private void readSystemPackages() throws IOException {
-        Properties properties = new Properties();
-        if (karafConfig.equals("config.properties")) {
-            properties.load(getClass().getClassLoader().getResourceAsStream("config.properties"));
-        } else {
-            properties.load(new FileInputStream(new File(karafConfig)));
-        }
-
-        String packages = (String) properties.get(jreVersion);
-        for (String pkg : packages.split(";")) {
-            systemExports.add(pkg.trim());
-        }
-        for (String pkg : packages.split(",")) {
-            systemExports.add(pkg.trim());
-        }
-    }
-
-    /*
-     * Analyze exports in all features in the repository without validating the features
-     * (e.g. used for <repository> elements found in a descriptor)
-     */
-    private void analyzeExports(Repository repository) throws Exception {
-        for (Feature feature : repository.getFeatures()) {
-            info("    scanning feature %s for exports", feature.getName());
-            Set<Clause> exports = new HashSet<Clause>();
-            for (String bundle : getBundleLocations(feature)) {
-                exports.addAll(getExports(getManifest(bundle, bundles.get(bundle))));
-            }
-            // add the dependency feature exports
-            exports.addAll(getDependencyFeatureExports(feature));
-            featureExports.put(feature.getName(), exports);
-        }
-    }
-
-    /*
-     * Check if all the bundles can be downloaded and are actually OSGi bundles and not plain JARs
-     */
-    private void validateBundlesAvailable(Repository repository) throws Exception {
-        for (Feature feature : repository.getFeatures()) {
-            for (String bundle : getBundleLocations(feature)) {
-                if (!isMavenProtocol(bundle) && skipNonMavenProtocols) {
-                    continue;
-                }
-                // this will throw an exception if the artifact can not be resolved
-                final Object artifact = resolve(bundle);
-                bundles.put(bundle, artifact);
-                if (isBundle(bundle, artifact)) {
-                    manifests.put(artifact, getManifest(bundle, artifact));
-                } else {
-                    throw new Exception(String.format("%s is not an OSGi bundle", bundle));
-                }
-            }
-        }
-    }
-
-    /*
-     * Get a list of bundle locations in a feature
-     */
-    private List<String> getBundleLocations(Feature feature) {
-        List<String> result = new LinkedList<String>();
-        if (feature != null && feature.getBundles() != null) {
-            for (BundleInfo bundle : feature.getBundles()) {
-                result.add(bundle.getLocation());
-            }
-        }
-        return result;
-    }
-
-    /*
-     * Validate if all features in a repository have bundles which can be resolved
-     */
-    private void validateImportsExports(Repository repository) throws ArtifactResolutionException, ArtifactNotFoundException, Exception {
-        for (Feature feature : repository.getFeatures()) {
-            // make sure the feature hasn't been validated before as a dependency
-            if (!featureExports.containsKey(feature.getName())) {
-                validateImportsExports(feature);
-            }
-        }
-    }
-
-    private Set<Clause> getDependencyFeatureExports(Feature feature) throws Exception {
-        Set<Clause> exports = new HashSet<Clause>();
-
-        for (Feature dependency : feature.getDependencies()) {
-            if (featureExports.containsKey(dependency.getName())) {
-                exports.addAll(featureExports.get(dependency.getName()));
-            } else {
-                validateImportsExports(dependency);
-                exports.addAll(featureExports.get(dependency.getName()));
-            }
-            exports.addAll(getDependencyFeatureExports(dependency));
-        }
-
-        // add the export of the feature
-        for (String bundle : getBundleLocations(feature)) {
-            Manifest meta = manifests.get(bundles.get(bundle));
-            exports.addAll(getExports(meta));
-        }
-        return exports;
-    }
-
-    /*
-     * Validate if all imports for a feature are being matched with exports
-     */
-    private void validateImportsExports(Feature feature) throws Exception {
-        Map<Clause, String> imports = new HashMap<Clause, String>();
-        Set<Clause> exports = new HashSet<Clause>();
-        for (Feature dependency : feature.getDependencies()) {
-            if (!featureExports.containsKey(dependency.getName())) {
-                validateImportsExports(features.get(dependency.getName(), dependency.getVersion()));
-            }
-        }
-        // add the exports for dependency feature
-        exports.addAll(getDependencyFeatureExports(feature));
-
-        for (String bundle : getBundleLocations(feature)) {
-            Manifest meta = manifests.get(bundles.get(bundle));
-            exports.addAll(getExports(meta));
-            for (Clause clause : getMandatoryImports(meta)) {
-                imports.put(clause, bundle);
-            }
-        }
-
-        // setting up the set of required imports
-        Set<Clause> requirements = new HashSet<Clause>();
-        requirements.addAll(imports.keySet());
-
-        // now, let's remove requirements whenever we find a matching export for them
-        for (Clause element : imports.keySet()) {
-            if (systemExports.contains(element.getName())) {
-                debug("%s is resolved by a system bundle export or provided bundle", element);
-                requirements.remove(element);
-                continue;
-            }
-            for (Clause export : exports) {
-                if (matches(element, export)) {
-                    debug("%s is resolved by export %s", element, export);
-                    requirements.remove(element);
-                    continue;
-                }
-                debug("%s is not resolved by export %s", element, export);
-            }
-        }
-
-        // if there are any more requirements left here, there's a problem with the feature 
-        if (!requirements.isEmpty()) {
-            warn("Failed to validate feature %s", feature.getName());
-            for (Clause entry : requirements) {
-                warn("No export found to match %s (imported by %s)",
-                        entry, imports.get(entry));
-            }
-            throw new Exception(String.format("%d unresolved imports in feature %s",
-                    requirements.size(), feature.getName()));
-        }
-        info("    OK: imports resolved for %s", feature.getName());
-        featureExports.put(feature.getName(), exports);
-    }
-
-    /*
-    * Check if the artifact is an OSGi bundle
-    */
-    private boolean isBundle(String bundle, Object artifact) {
-        if (artifact instanceof Artifact && "bundle".equals(((Artifact) artifact).getArtifactHandler().getPackaging())) {
-            return true;
-        } else {
-            try {
-                return ManifestUtils.isBundle(getManifest(bundle, artifact));
-            } catch (ZipException e) {
-                getLog().debug("Unable to determine if " + artifact + " is a bundle; defaulting to false", e);
-            } catch (IOException e) {
-                getLog().debug("Unable to determine if " + artifact + " is a bundle; defaulting to false", e);
-            } catch (Exception e) {
-                getLog().debug("Unable to determine if " + artifact + " is a bundle; defaulting to false", e);
-            }
-        }
-        return false;
-    }
-
-    /*
-     * Extract the META-INF/MANIFEST.MF file from an artifact
-     */
-    private Manifest getManifest(String bundle, Object artifact) throws ArtifactResolutionException, ArtifactNotFoundException,
-            ZipException, IOException {
-        ZipFile file = null;
-        if (!(artifact instanceof Artifact)) {
-            //not resolved as mvn artifact, so it's non-mvn protocol, just use the CustomBundleURLStreamHandlerFactory
-            // to open stream
-            InputStream is = null;
-            try {
-                is = new BufferedInputStream(new URL(bundle).openStream());
-            } catch (Exception e) {
-                getLog().warn("Error while opening artifact", e);
-            }
-
-            try {
-                is.mark(256 * 1024);
-                JarInputStream jar = new JarInputStream(is);
-                Manifest m = jar.getManifest();
-                if (m == null) {
-                    throw new IOException("Manifest not present in the first entry of the zip");
-                }
-
-                return m;
-            } finally {
-                if (is != null) { // just in case when we did not open bundle
-                    is.close();
-                }
-            }
-        } else {
-            Artifact mvnArtifact = (Artifact) artifact;
-            File localFile = new File(localRepo.pathOf(mvnArtifact));
-            if (localFile.exists()) {
-                // avoid going over to the repository if the file is already on
-                // the disk
-                file = new ZipFile(localFile);
-            } else {
-                resolver.resolve(mvnArtifact, remoteRepos, localRepo);
-                file = new ZipFile(mvnArtifact.getFile());
-            }
-            // let's replace syserr for now to hide warnings being issues by the Manifest reading process
-            PrintStream original = System.err;
-            try {
-                System.setErr(new PrintStream(new ByteArrayOutputStream()));
-                Manifest manifest = new Manifest(file.getInputStream(file.getEntry("META-INF/MANIFEST.MF")));
-                return manifest;
-            } finally {
-                System.setErr(original);
-            }
-        }
-    }
-
-    /*
-     * Resolve an artifact, downloading it from remote repositories when necessary
-     */
-    private Object resolve(String bundle) throws Exception, ArtifactNotFoundException {
-        if (!isMavenProtocol(bundle)) {
-            return bundle;
-        }
-        Artifact artifact = getArtifact(bundle);
-        if (bundle.indexOf(MVN_REPO_SEPARATOR) >= 0) {
-            if (bundle.startsWith(MVN_URI_PREFIX)) {
-                bundle = bundle.substring(MVN_URI_PREFIX.length());
-            }
-            String repo = bundle.substring(0, bundle.indexOf(MVN_REPO_SEPARATOR));
-            ArtifactRepository repository = new DefaultArtifactRepository(artifact.getArtifactId() + "-repo", repo,
-                    new DefaultRepositoryLayout());
-            List<ArtifactRepository> repos = new LinkedList<ArtifactRepository>();
-            repos.add(repository);
-            resolver.resolve(artifact, repos, localRepo);
-        } else {
-            resolver.resolve(artifact, remoteRepos, localRepo);
-        }
-        if (artifact == null) {
-            throw new Exception("Unable to resolve artifact for uri " + bundle);
-        } else {
-            return artifact;
-        }
-    }
-
-    /*
-     * Create an artifact for a given mvn: uri
-     */
-    private Artifact getArtifact(String uri) {
-        // remove the mvn: prefix when necessary
-        if (uri.startsWith(MVN_URI_PREFIX)) {
-            uri = uri.substring(MVN_URI_PREFIX.length());
-        }
-        // remove the repository url when specified
-        if (uri.contains(MVN_REPO_SEPARATOR)) {
-            uri = uri.split(MVN_REPO_SEPARATOR)[1];
-        }
-        String[] elements = uri.split("/");
-
-        switch (elements.length) {
-            case 5:
-                return factory.createArtifactWithClassifier(elements[0], elements[1], elements[2], elements[3], elements[4]);
-            case 3:
-                return factory.createArtifact(elements[0], elements[1], elements[2], Artifact.SCOPE_PROVIDED, "jar");
-            default:
-                return null;
-        }
-
-    }
-
-    /*
-    * see if bundle url is start with mvn protocol
-    */
-    private boolean isMavenProtocol(String bundle) {
-        return bundle.startsWith(MVN_URI_PREFIX);
-    }
-
-    /*
-     * Helper method for debug logging
-     */
-    private void debug(String message, Object... parms) {
-        if (getLog().isDebugEnabled()) {
-            getLog().debug(String.format(message, parms));
-        }
-    }
-
-    /*
-     * Helper method for info logging
-     */
-    private void info(String message, Object... parms) {
-        getLog().info(String.format(message, parms));
-    }
-
-    /*
-     * Helper method for warn logging
-     */
-    private void warn(String message, Object... parms) {
-        getLog().warn(String.format(message, parms));
-    }
-
-    /*
-     * Helper method for error logging
-     */
-    private void error(String message, Exception error, Object... parms) {
-        getLog().error(String.format(message, parms), error);
-    }
-
-    /*
-     * Convenience collection for holding features
-     */
-    private class Features {
-
-        private List<Feature> features = new LinkedList<Feature>();
-
-        public void add(Feature feature) {
-            features.add(feature);
-        }
-
-        public Feature get(String name, String version) throws Exception {
-            for (Feature feature : features) {
-                if (name.equals(feature.getName()) && version.equals(feature.getVersion())) {
-                    return feature;
-                }
-            }
-            throw new Exception(String.format("Unable to find definition for feature %s (version %s)",
-                    name, version));
-        }
-
-        public void add(Feature[] array) {
-            for (Feature feature : array) {
-                add(feature);
-            }
-        }
-    }
-}
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/WarURLHandler.java b/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/WarURLHandler.java
deleted file mode 100644
index 867634c..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/main/java/org/apache/karaf/tooling/features/WarURLHandler.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.tooling.features;
-
-import org.apache.karaf.deployer.blueprint.BlueprintTransformer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLStreamHandler;
-
-/**
- * Simple workaround for "WAR" prefix.
- */
-public class WarURLHandler extends URLStreamHandler {
-
-    private final Logger logger = LoggerFactory.getLogger(WarURLHandler.class);
-
-    private static String SYNTAX = "war: war-uri";
-
-    private URL warURL;
-
-    /**
-     * Open the connection for the given URL.
-     *
-     * @param url the url from which to open a connection.
-     * @return a connection on the specified URL.
-     * @throws java.io.IOException if an error occurs or if the URL is malformed.
-     */
-    @Override
-    public URLConnection openConnection(URL url) throws IOException {
-        if (url.getPath() == null || url.getPath().trim().length() == 0) {
-            throw new MalformedURLException("Path can not be null or empty. Syntax: " + SYNTAX);
-        }
-
-        // We don't resolve any specific data here, just forward it to another URL Stream Handler
-        warURL = new URL(url.getPath());
-        return warURL.openConnection();
-    }
-
-    public URL getWarURL() {
-        return warURL;
-    }
-
-}
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/main/resources/config.properties b/karaf-2.3.x/tooling/features-maven-plugin/src/main/resources/config.properties
deleted file mode 100644
index 870e83c..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/main/resources/config.properties
+++ /dev/null
@@ -1,144 +0,0 @@
-# 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.
-
-jre-1.5= \
- javax.accessibility; \
- javax.activity; \
- javax.crypto; \
- javax.crypto.interfaces; \
- javax.crypto.spec; \
- javax.imageio; \
- javax.imageio.event; \
- javax.imageio.metadata; \
- javax.imageio.plugins.bmp; \
- javax.imageio.plugins.jpeg; \
- javax.imageio.spi; \
- javax.imageio.stream; \
- javax.management; \
- javax.management.loading; \
- javax.management.modelmbean; \
- javax.management.monitor; \
- javax.management.openmbean; \
- javax.management.relation; \
- javax.management.remote; \
- javax.management.remote.rmi; \
- javax.management.timer; \
- javax.naming; \
- javax.naming.directory; \
- javax.naming.event; \
- javax.naming.ldap; \
- javax.naming.spi; \
- javax.net; \
- javax.net.ssl; \
- javax.print; \
- javax.print.attribute; \
- javax.print.attribute.standard; \
- javax.print.event; \
- javax.rmi; \
- javax.rmi.CORBA; \
- javax.rmi.ssl; \
- javax.security.auth; \
- javax.security.auth.callback; \
- javax.security.auth.kerberos; \
- javax.security.auth.login; \
- javax.security.auth.spi; \
- javax.security.auth.x500; \
- javax.security.cert; \
- javax.security.sasl; \
- javax.sound.midi; \
- javax.sound.midi.spi; \
- javax.sound.sampled; \
- javax.sound.sampled.spi; \
- javax.sql; \
- javax.sql.rowset; \
- javax.sql.rowset.serial; \
- javax.sql.rowset.spi; \
- javax.swing; \
- javax.swing.border; \
- javax.swing.colorchooser; \
- javax.swing.event; \
- javax.swing.filechooser; \
- javax.swing.plaf; \
- javax.swing.plaf.basic; \
- javax.swing.plaf.metal; \
- javax.swing.plaf.multi; \
- javax.swing.plaf.synth; \
- javax.swing.table; \
- javax.swing.text; \
- javax.swing.text.html; \
- javax.swing.text.html.parser; \
- javax.swing.text.rtf; \
- javax.swing.tree; \
- javax.swing.undo; \
- javax.xml; \
- javax.xml.datatype; \
- javax.xml.namespace; \
- javax.xml.parsers; \
- javax.xml.transform; \
- javax.xml.transform.dom; \
- javax.xml.transform.sax; \
- javax.xml.transform.stream; \
- javax.xml.validation; \
- javax.xml.xpath; \
- org.ietf.jgss; \
- org.omg.CORBA; \
- org.omg.CORBA_2_3; \
- org.omg.CORBA_2_3.portable; \
- org.omg.CORBA.DynAnyPackage; \
- org.omg.CORBA.ORBPackage; \
- org.omg.CORBA.portable; \
- org.omg.CORBA.TypeCodePackage; \
- org.omg.CosNaming; \
- org.omg.CosNaming.NamingContextExtPackage; \
- org.omg.CosNaming.NamingContextPackage; \
- org.omg.Dynamic; \
- org.omg.DynamicAny; \
- org.omg.DynamicAny.DynAnyFactoryPackage; \
- org.omg.DynamicAny.DynAnyPackage; \
- org.omg.IOP; \
- org.omg.IOP.CodecFactoryPackage; \
- org.omg.IOP.CodecPackage; \
- org.omg.Messaging; \
- org.omg.PortableInterceptor; \
- org.omg.PortableInterceptor.ORBInitInfoPackage; \
- org.omg.PortableServer; \
- org.omg.PortableServer.CurrentPackage; \
- org.omg.PortableServer.POAManagerPackage; \
- org.omg.PortableServer.POAPackage; \
- org.omg.PortableServer.portable; \
- org.omg.PortableServer.ServantLocatorPackage; \
- org.omg.SendingContext; \
- org.omg.stub.java.rmi; \
- org.omg.stub.javax.management.remote.rmi; \
- org.w3c.dom; \
- org.w3c.dom.bootstrap; \
- org.w3c.dom.css; \
- org.w3c.dom.events; \
- org.w3c.dom.html; \
- org.w3c.dom.ls; \
- org.w3c.dom.ranges; \
- org.w3c.dom.stylesheets; \
- org.w3c.dom.traversal; \
- org.w3c.dom.views; \
- org.xml.sax; \
- org.xml.sax.ext; \
- org.xml.sax.helpers; \
- sun.misc; \
- sun.reflect
- 
-osgi= \
- org.osgi.framework;
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/main/resources/org/apache/karaf/features/karaf-features-1.0.0-ordered.xsd b/karaf-2.3.x/tooling/features-maven-plugin/src/main/resources/org/apache/karaf/features/karaf-features-1.0.0-ordered.xsd
deleted file mode 100644
index 4ced416..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/main/resources/org/apache/karaf/features/karaf-features-1.0.0-ordered.xsd
+++ /dev/null
@@ -1,237 +0,0 @@
-<?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.
-
--->
-<xs:schema elementFormDefault="qualified"
-    targetNamespace="http://karaf.apache.org/xmlns/features/v1.0.0"
-    xmlns:tns="http://karaf.apache.org/xmlns/features/v1.0.0"
-    xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
-    <xs:annotation>
-        <xs:documentation><![CDATA[
-Karaf features mechanism. For documentation please visit 
-<a href="http://karaf.apache.org/">Karaf website</a>.
-        ]]></xs:documentation>
-    </xs:annotation>
-
-    <xs:complexType name="features">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Root element of Feature definition. It contains optional attribute which allow
-name of repository. This name will be used in shell to display source repository
-of given feature.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:sequence>
-            <xs:element name="repository" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded">
-                <xs:annotation>
-                    <xs:documentation><![CDATA[
-Additional repositories where dependencies are stored.
-                    ]]></xs:documentation>
-                </xs:annotation>
-            </xs:element>
-            <xs:element name="feature" type="tns:feature" minOccurs="0" maxOccurs="unbounded">
-                <xs:annotation>
-                    <xs:documentation><![CDATA[
-Feature definition.
-                    ]]></xs:documentation>
-                </xs:annotation>
-            </xs:element>
-        </xs:sequence>
-        <xs:attribute name="name" type="xs:string" />
-    </xs:complexType>
-
-    <xs:complexType name="feature">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Definition of the Feature.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:sequence>
-            <!-- Tags with info -->
-            <xs:element name="details" type="xs:string" minOccurs="0" maxOccurs="unbounded">
-                <xs:annotation>
-                    <xs:documentation><![CDATA[
-Long info displayed in features:info command result.
-                    ]]>
-                    </xs:documentation>
-                </xs:annotation>
-            </xs:element>
-            <xs:element name="config" type="tns:config"  minOccurs="0" maxOccurs="unbounded"/>
-            <xs:element name="configfile" type="tns:configFile"  minOccurs="0" maxOccurs="unbounded"/>
-            <xs:element name="feature" type="tns:dependency"  minOccurs="0" maxOccurs="unbounded"/>
-            <xs:element name="bundle" type="tns:bundle"  minOccurs="0" maxOccurs="unbounded"/>
-        </xs:sequence>
-        <xs:attribute name="name" type="tns:featureName" use="required" />
-        <xs:attribute name="version" type="xs:string" default="0.0.0" />
-        <xs:attribute name="description" type="xs:string" />
-        <xs:attribute name="resolver" type="tns:resolver">
-            <xs:annotation>
-                <xs:documentation><![CDATA[
-Karaf allow using dynamic resolvers.
-                ]]>
-                </xs:documentation>
-            </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="install" type="tns:install">
-            <xs:annotation>
-                <xs:documentation><![CDATA[
-If true, marks that the feature should start automatically when placed in the deploy folder.
-                ]]>
-                </xs:documentation>
-            </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="start-level" type="xs:int">
-            <xs:annotation>
-                <xs:documentation><![CDATA[
-Set this attribute to have an OSGi start level for this feature different
-from the default start level defined in Karaf's config.properties.
-                ]]>
-                </xs:documentation>
-            </xs:annotation>
-        </xs:attribute>
-    </xs:complexType>
-
-    <xs:complexType name="bundle">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Deployable element to install.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:simpleContent>
-            <xs:extension base="xs:anyURI">
-                <xs:attribute name="start-level" type="xs:int">
-                    <xs:annotation>
-                        <xs:documentation><![CDATA[
-Bundle start level set to OSGi framework.
-                        ]]>
-                        </xs:documentation>
-                    </xs:annotation>
-                </xs:attribute>
-                <xs:attribute name="start" type="xs:boolean">
-                    <xs:annotation>
-                        <xs:documentation><![CDATA[
-This switch allow you to leave bundle in resolved state.
-                        ]]>
-                        </xs:documentation>
-                    </xs:annotation>
-                </xs:attribute>
-                <xs:attribute name="dependency" type="xs:boolean">
-                    <xs:annotation>
-                        <xs:documentation><![CDATA[
-Mark bundle as dependency for resolver.
-                        ]]>
-                        </xs:documentation>
-                    </xs:annotation>
-                </xs:attribute>
-            </xs:extension>
-        </xs:simpleContent>
-    </xs:complexType>
-
-    <xs:complexType name="dependency">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Dependency of feature.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:simpleContent>
-            <xs:extension base="tns:featureName">
-                <xs:attribute name="version" type="xs:string" default="0.0.0" />
-            </xs:extension>
-        </xs:simpleContent>
-    </xs:complexType>
-
-    <xs:complexType name="config">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Configuration entries which should be created during feature installation. This
-configuration may be used with OSGi Configuration Admin.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:simpleContent>
-            <xs:extension base="xs:string">
-                <xs:attribute name="name" type="xs:string" use="required" />
-            </xs:extension>
-        </xs:simpleContent>
-    </xs:complexType>
-
-    <xs:complexType name="configFile">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Additional configuration files which should be created during feature installation.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:simpleContent>
-            <xs:extension base="xs:anyURI">
-                <xs:attribute name="finalname" type="xs:string" use="required">
-                    <xs:annotation>
-                        <xs:documentation><![CDATA[
-Name of file name where given deployable element should be stored.
-                        ]]></xs:documentation>
-                    </xs:annotation>
-                </xs:attribute>
-                <xs:attribute name="override" type="xs:boolean">
-                    <xs:annotation>
-                        <xs:documentation><![CDATA[
-flag to specify if the finalname file should be overriden
-                        ]]></xs:documentation>
-                    </xs:annotation>
-                </xs:attribute>
-
-            </xs:extension>
-        </xs:simpleContent>
-    </xs:complexType>
-
-    <xs:simpleType name="featureName">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Feature name should be non empty string.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:restriction base="xs:string">
-            <xs:minLength value="1" />
-        </xs:restriction>
-    </xs:simpleType>
-
-    <xs:simpleType name="resolver">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Resolver to use. Karaf will look for OSGi servie which have following properties:
-objectClass: org.apache.karaf.features.Resolver
-name: the value
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:restriction base="xs:string">
-            <xs:minLength value="1" />
-        </xs:restriction>
-    </xs:simpleType>
-    <xs:simpleType name="install">
-        <xs:annotation>
-            <xs:documentation><![CDATA[
-Installation mode. Can be either manual or auto. Specifies whether the feature should be automatically installed when
-dropped inside the deploy folder. Note: This attribute doesn't affect feature descriptors that are installed from the
-command line or as part of the org.apache.karaf.features.cfg.
-            ]]></xs:documentation>
-        </xs:annotation>
-        <xs:restriction base="xs:string">
-            <xs:minLength value="1" />
-        </xs:restriction>
-    </xs:simpleType>
-
-    <xs:element name="features" type="tns:features" />
-
-</xs:schema>
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/test/java/org/apache/karaf/tooling/features/AddFeaturesToRepoMojoTest.java b/karaf-2.3.x/tooling/features-maven-plugin/src/test/java/org/apache/karaf/tooling/features/AddFeaturesToRepoMojoTest.java
deleted file mode 100644
index 3734a88..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/test/java/org/apache/karaf/tooling/features/AddFeaturesToRepoMojoTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.apache.karaf.tooling.features;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.factory.DefaultArtifactFactory;
-import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
-import org.apache.maven.artifact.handler.manager.DefaultArtifactHandlerManager;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.junit.Test;
-
-import java.lang.reflect.Field;
-import java.net.URL;
-import java.util.HashMap;
-
-public class AddFeaturesToRepoMojoTest extends MojoSupport {
-
-    public AddFeaturesToRepoMojoTest() throws NoSuchFieldException, IllegalAccessException {
-        factory = new DefaultArtifactFactory();
-        ArtifactHandlerManager artifactHandlerManager = new DefaultArtifactHandlerManager();
-        Field f = factory.getClass().getDeclaredField("artifactHandlerManager");
-        f.setAccessible(true);
-        f.set(factory, artifactHandlerManager);
-        f.setAccessible(false);
-
-        f = artifactHandlerManager.getClass().getDeclaredField("artifactHandlers");
-        f.setAccessible(true);
-        f.set(artifactHandlerManager, new HashMap());
-        f.setAccessible(false);
-    }
-
-    public void execute() throws MojoExecutionException, MojoFailureException {
-    }
-
-    @Test
-    public void testSimpleURL() throws Exception {
-        URL in = getClass().getClassLoader().getResource("input-repository.xml");
-        AddFeaturesToRepoMojo.Repository repo = new AddFeaturesToRepoMojo.Repository(in.toURI());
-
-        String[] repos = repo.getDefinedRepositories();
-
-        assert repos.length == 1;
-        assert repos[0].equals("http://foo.org");
-    }
-}
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/test/java/org/apache/karaf/tooling/features/BundleToArtifactTest.java b/karaf-2.3.x/tooling/features-maven-plugin/src/test/java/org/apache/karaf/tooling/features/BundleToArtifactTest.java
deleted file mode 100644
index 1b5530c..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/test/java/org/apache/karaf/tooling/features/BundleToArtifactTest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.tooling.features;
-
-import java.lang.reflect.Field;
-import java.util.HashMap;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.factory.DefaultArtifactFactory;
-import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
-import org.apache.maven.artifact.handler.manager.DefaultArtifactHandlerManager;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.junit.Test;
-
-public class BundleToArtifactTest extends MojoSupport {
-
-    public BundleToArtifactTest() throws NoSuchFieldException, IllegalAccessException {
-        factory = new DefaultArtifactFactory();
-        ArtifactHandlerManager artifactHandlerManager = new DefaultArtifactHandlerManager();
-        Field f = factory.getClass().getDeclaredField("artifactHandlerManager");
-        f.setAccessible(true);
-        f.set(factory, artifactHandlerManager);
-        f.setAccessible(false);
-
-        f = artifactHandlerManager.getClass().getDeclaredField("artifactHandlers");
-        f.setAccessible(true);
-        f.set(artifactHandlerManager, new HashMap());
-        f.setAccessible(false);
-    }
-
-    public void execute() throws MojoExecutionException, MojoFailureException {
-    }
-    
-    @Test
-    public void testSimpleURL() throws Exception {
-        Artifact artifact = resourceToArtifact("mvn:org.foo/bar/1.0/kar", false);
-        assert artifact.getGroupId().equals("org.foo");
-        assert artifact.getArtifactId().equals("bar");
-        assert artifact.getBaseVersion().equals("1.0");
-        assert artifact.getType().equals("kar");
-        assert artifact.getRepository() == null;
-        assert artifact.getClassifier() == null;
-    }
-
-    @Test
-    public void testURLWithClassifier() throws Exception {
-        Artifact artifact = resourceToArtifact("mvn:org.foo/bar/1.0/kar/type", false);
-        assert artifact.getGroupId().equals("org.foo");
-        assert artifact.getArtifactId().equals("bar");
-        assert artifact.getBaseVersion().equals("1.0");
-        assert artifact.getType().equals("kar");
-        assert artifact.getRepository() == null;
-        assert artifact.getClassifier().equals("type");
-    }
-
-    @Test
-    public void testRemoteRepoURL() throws Exception {
-        Artifact artifact = resourceToArtifact("mvn:http://baz.com!org.foo/bar/1.0/kar", false);
-        assert artifact.getGroupId().equals("org.foo");
-        assert artifact.getArtifactId().equals("bar");
-        assert artifact.getBaseVersion().equals("1.0");
-        assert artifact.getType().equals("kar");
-        assert artifact.getRepository().getUrl().equals("http://baz.com");
-        assert artifact.getClassifier() == null;
-    }
-}
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/test/java/org/apache/karaf/tooling/features/GenerateFeaturesFileMojoTest.java b/karaf-2.3.x/tooling/features-maven-plugin/src/test/java/org/apache/karaf/tooling/features/GenerateFeaturesFileMojoTest.java
deleted file mode 100644
index bed0b2d..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/test/java/org/apache/karaf/tooling/features/GenerateFeaturesFileMojoTest.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.tooling.features;
-
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
-import org.apache.maven.artifact.versioning.ArtifactVersion;
-import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
-import org.easymock.EasyMock;
-
-/**
- * Test cases for {@link GenerateFeaturesFileMojo} 
- */
-public class GenerateFeaturesFileMojoTest extends TestCase {
-    
-    private GenerateFeaturesFileMojo mojo;
-    
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        mojo = new GenerateFeaturesFileMojo();
-    }
-    
-    public void testGetBestVersionForArtifactWithOneVersion() throws Exception {       
-        final Artifact artifact = EasyMock.createMock(Artifact.class);
-        expect(artifact.getVersion()).andReturn("2.1.6");
-        replay(artifact);
-
-        assertEquals("2.1.6_1-SNAPSHOT", mojo.getBestVersionForArtifact(artifact, createVersionList("2.1.6_1-SNAPSHOT")));
-    }
-    
-    public void testGetBestVersionForArtifactWithTwoVersions() throws Exception {       
-        final Artifact artifact = EasyMock.createMock(Artifact.class);
-        expect(artifact.getVersion()).andReturn("2.1.6");
-        replay(artifact);
-
-        assertEquals("2.1.6_2-SNAPSHOT", mojo.getBestVersionForArtifact(artifact, createVersionList("2.1.6_1-SNAPSHOT", "2.1.6_2-SNAPSHOT")));
-    }
-    
-    public void testGetBestVersionForArtifactWithSameMajorMinor() throws Exception {       
-        final Artifact artifact = EasyMock.createMock(Artifact.class);
-        expect(artifact.getVersion()).andReturn("3.8.2").anyTimes();
-        replay(artifact);        
-
-        assertEquals("3.8.1_1-SNAPSHOT", mojo.getBestVersionForArtifact(artifact, createVersionList("3.8.1_1-SNAPSHOT")));
-    }
-
-    
-    public void testGetBestVersionForArtifactWithOneNonMatchingVersion() throws Exception {
-        final Artifact artifact = EasyMock.createMock(Artifact.class);
-        expect(artifact.getVersion()).andReturn("9.1.0.1").anyTimes();
-        replay(artifact);        
-        
-        try {
-            mojo.getBestVersionForArtifact(artifact, createVersionList("9.0_1-SNAPSHOT"));
-            fail("ArtifactMetadataRetrievalException should have been thrown if no matching version was found");
-        } catch (ArtifactMetadataRetrievalException e) {
-            // this is expected
-        }
-    }
-    
-    public void testGetBestVersionForArtifactWithNoVersions() throws Exception {
-        try {
-            mojo.getBestVersionForArtifact(EasyMock.createMock(Artifact.class), createVersionList());
-            fail("ArtifactMetadataRetrievalException should have been thrown if no matching version was found");
-        } catch (ArtifactMetadataRetrievalException e) {
-            // this is expected
-        }
-    }
-    
-    private List<ArtifactVersion> createVersionList(String... versions) {
-        List<ArtifactVersion> results = new ArrayList<ArtifactVersion>();
-        for (final String version : versions) {
-            results.add(new DefaultArtifactVersion(version));
-        }
-        return results;
-    }
-}
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/test/java/org/apache/karaf/tooling/features/GenerateFeaturesXmlMojoTest.java b/karaf-2.3.x/tooling/features-maven-plugin/src/test/java/org/apache/karaf/tooling/features/GenerateFeaturesXmlMojoTest.java
deleted file mode 100644
index 21846d5..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/test/java/org/apache/karaf/tooling/features/GenerateFeaturesXmlMojoTest.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- * 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.
- */
-package org.apache.karaf.tooling.features;
-
-import java.io.ByteArrayOutputStream;
-import java.io.FileOutputStream;
-import java.io.PrintStream;
-import java.io.StringWriter;
-
-import org.apache.karaf.tooling.features.GenerateFeaturesXmlMojo.Feature;
-import org.apache.maven.artifact.Artifact;
-import org.codehaus.plexus.util.FileUtils;
-import org.easymock.EasyMock;
-
-import static org.easymock.EasyMock.*;
-
-import junit.framework.TestCase;
-
-/**
- * Test cases for {@link GenerateFeaturesXmlMojo}
- */
-public class GenerateFeaturesXmlMojoTest extends TestCase {
-    
-    private GenerateFeaturesXmlMojo mojo;
-    
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        mojo = new GenerateFeaturesXmlMojo();
-    }
-
-    public void testToString() throws Exception {
-        Artifact artifact = EasyMock.createMock(Artifact.class);
-
-        expect(artifact.getGroupId()).andReturn("org.apache.karaf.test");
-        expect(artifact.getArtifactId()).andReturn("test-artifact");
-        expect(artifact.getVersion()).andReturn("1.2.3");
-        expect(artifact.getType()).andReturn("jar");
-        
-        replay(artifact);
-        
-        assertEquals("org.apache.karaf.test/test-artifact/1.2.3", GenerateFeaturesXmlMojo.toString(artifact));
-    } 
-
-    public void testInstallMode() throws Exception {
-    	
-        Artifact artifact = EasyMock.createMock(Artifact.class);
-
-        expect(artifact.getGroupId()).andReturn("org.apache.karaf.test").anyTimes();
-        expect(artifact.getArtifactId()).andReturn("test-artifact").anyTimes();
-        expect(artifact.getBaseVersion()).andReturn("1.2.3").anyTimes();
-        expect(artifact.getVersion()).andReturn("1.2.3").anyTimes();
-        expect(artifact.getType()).andReturn("jar").anyTimes();
-        
-        replay(artifact);
-        
-        mojo.installMode="auto";
-        
-        Feature feature = mojo.new Feature(artifact);
-        
-        ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
-        
-        PrintStream out = new PrintStream(byteStream);
-        
-		feature.write(out);
-		
-		String source = byteStream.toString("UTF-8");
-		
-		System.out.println(source);
-		
-		String target = FileUtils.fileRead("./src/test/resources/features-01.xml", "UTF-8");
-		
-		assertTrue(target.contains(source));
-        
-    } 
-
-}
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/test/java/org/apache/karaf/tooling/features/ManifestUtilsTest.java b/karaf-2.3.x/tooling/features-maven-plugin/src/test/java/org/apache/karaf/tooling/features/ManifestUtilsTest.java
deleted file mode 100644
index f380995..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/test/java/org/apache/karaf/tooling/features/ManifestUtilsTest.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- *
- * 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.
- */
-package org.apache.karaf.tooling.features;
-
-import static org.apache.karaf.tooling.features.ManifestUtils.matches;
-
-import junit.framework.TestCase;
-
-import java.util.HashMap;
-
-import org.apache.felix.utils.manifest.Attribute;
-import org.apache.felix.utils.manifest.Clause;
-import org.apache.felix.utils.manifest.Directive;
-import org.osgi.framework.Constants;
-
-/**
- * Test cased for {@link org.apache.karaf.tooling.features.ManifestUtils} 
- */
-public class ManifestUtilsTest extends TestCase {
-
-    public void testIsOptional() {
-    	Directive[] directive = new Directive[0];
-    	Attribute[] attribute = new Attribute[0];
-        Clause clause = new Clause("org.apache.karaf.test", directive, attribute);
-        assertFalse(ManifestUtils.isOptional(clause));
-
-        directive = new Directive[1];
-        directive[0] = new Directive("resolution", "mandatory");
-        clause = new Clause("org.apache.karaf.test", directive, attribute);
-        
-        assertFalse(ManifestUtils.isOptional(clause));
-
-        directive[0] = new Directive("resolution", "optional");
-        clause = new Clause("org.apache.karaf.test", directive, attribute);
-        assertTrue(ManifestUtils.isOptional(clause));
-    }
-
-    public void testMatches() {
-        assertFalse(matches(clause("org.apache.karaf.dev"), clause("org.apache.karaf.test")));
-        assertTrue(matches(clause("org.apache.karaf.test"), clause("org.apache.karaf.test")));
-
-        assertFalse(matches(clause("org.apache.karaf.test", "1.2.0"), clause("org.apache.karaf.test", "[1.1.0, 1.1.0]")));
-        assertTrue(matches(clause("org.apache.karaf.test", "1.1.0"), clause("org.apache.karaf.test", "[1.1.0, 1.1.0]")));
-
-        // a single version means >= 1.0.0, so 1.1.O should be a match
-        assertTrue(matches(clause("org.apache.karaf.test", "1.0.0"), clause("org.apache.karaf.test", "1.1.0")));
-        assertTrue(matches(clause("org.apache.karaf.test", "1.0.0"), clause("org.apache.karaf.test")));
-
-        assertFalse(matches(clause("org.apache.karaf.test", "[1.1.0, 1.2.0)"), clause("org.apache.karaf.test", "[1.0.0, 1.0.0]")));
-        assertFalse(matches(clause("org.apache.karaf.test", "[1.1.0, 1.2.0)"), clause("org.apache.karaf.test", "[1.2.0, 1.2.0]")));
-        assertTrue(matches(clause("org.apache.karaf.test", "[1.1.0, 1.2.0)"), clause("org.apache.karaf.test", "[1.1.0, 1.1.0]")));
-        assertTrue(matches(clause("org.apache.karaf.test", "[1.1.0, 1.2.0)"), clause("org.apache.karaf.test", "[1.1.1, 1.1.1]")));
-        assertTrue(matches(clause("org.apache.karaf.test", "[1.1.0, 1.1.0]"), clause("org.apache.karaf.test", "[1.1.0, 1.1.0]")));
-        assertFalse(matches(clause("org.apache.karaf.test", "[1.1.0, 1.1.0]"), clause("org.apache.karaf.test", "1.1.1")));
-        assertTrue(matches(clause("org.apache.karaf.test", "[1.1.0, 1.1.0]"), clause("org.apache.karaf.test", "1.0.0")));
-    }
-
-    private Clause clause(String name) {
-        return new Clause(name, new Directive[0], new Attribute[0]);
-    }
-
-    private Clause clause(String name, String version) {
-    	Attribute[] attribute = {new Attribute(Constants.VERSION_ATTRIBUTE, version)};
-        return new Clause(name, new Directive[0], attribute);
-    }
-}
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/test/resources/features-01.xml b/karaf-2.3.x/tooling/features-maven-plugin/src/test/resources/features-01.xml
deleted file mode 100644
index 2f9ea50..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/test/resources/features-01.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!--
-
-    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.
--->
-<features xmlns="http://karaf.apache.org/xmlns/features/v1.0.0" name="test-repo">
-
- <feature  name='test-artifact'  version='1.2.3'   install='auto'  > 
-    <bundle>mvn:org.apache.karaf.test/test-artifact/1.2.3</bundle>
- </feature>
- 
-</features>
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/test/resources/input-features.xml b/karaf-2.3.x/tooling/features-maven-plugin/src/test/resources/input-features.xml
deleted file mode 100644
index 17854c0..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/test/resources/input-features.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!--
-
-    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.
--->
-<features xmlns="http://karaf.apache.org/xmlns/features/v1.0.0" name="geronimo-transaction">
-    <repository>http://foo.org</repository>
-
-</features>
diff --git a/karaf-2.3.x/tooling/features-maven-plugin/src/test/resources/input-repository.xml b/karaf-2.3.x/tooling/features-maven-plugin/src/test/resources/input-repository.xml
deleted file mode 100644
index fa5d4b4..0000000
--- a/karaf-2.3.x/tooling/features-maven-plugin/src/test/resources/input-repository.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!--
-    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.
--->
-<features xmlns="http://karaf.apache.org/xmlns/features/v1.0.0" name="geronimo-transaction">
-    <repository>
-        http://foo.org
-    </repository>
-</features>
diff --git a/karaf-2.3.x/tooling/pom.xml b/karaf-2.3.x/tooling/pom.xml
deleted file mode 100644
index 4af6ff1..0000000
--- a/karaf-2.3.x/tooling/pom.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>karaf</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.tooling</groupId>
-    <artifactId>tooling</artifactId>
-    <packaging>pom</packaging>
-    <name>Apache Karaf :: Tooling</name>
-
-    <modules>
-        <module>features-maven-plugin</module>
-        <module>cmdhelp-maven-plugin</module>
-        <module>exam</module>
-    </modules>
-
-</project>
diff --git a/karaf-2.3.x/util/NOTICE b/karaf-2.3.x/util/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/util/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/util/pom.xml b/karaf-2.3.x/util/pom.xml
deleted file mode 100644
index 177b30e..0000000
--- a/karaf-2.3.x/util/pom.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-    
-    <modelVersion>4.0.0</modelVersion>
-    
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>karaf</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-    
-    <artifactId>org.apache.karaf.util</artifactId>
-    <packaging>jar</packaging>
-    <name>Apache Karaf :: Util</name>
-    <description>Karaf Util contains utility classes used in different Karaf modules.</description>
-    
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/karaf-2.3.x/util/src/main/java/org/apache/karaf/util/DeployerUtils.java b/karaf-2.3.x/util/src/main/java/org/apache/karaf/util/DeployerUtils.java
deleted file mode 100644
index b0870a0..0000000
--- a/karaf-2.3.x/util/src/main/java/org/apache/karaf/util/DeployerUtils.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.util;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Contain various methods that are useful for deploying artifacts
- */
-public final class DeployerUtils {
-
-    /** Private constructors to avoid instantiation */
-    private DeployerUtils() { }
-
-    private static final String DEFAULT_VERSION = "0.0.0";
-
-    private static final Pattern ARTIFACT_MATCHER = Pattern.compile("(.+)(?:-(\\d+)(?:\\.(\\d+)(?:\\.(\\d+))?)?(?:[^a-zA-Z0-9](.*))?)(?:\\.([^\\.]+))", Pattern.DOTALL);
-    private static final Pattern FUZZY_MODIFIDER = Pattern.compile("(?:\\d+[.-])*(.*)", Pattern.DOTALL);
-
-    /**
-     * Heuristic to compute the name and version of a file given it's name on disk
-     *
-     * @param url the name of the file
-     * @return the name and version of that file
-     */
-    public static String[] extractNameVersionType(String url) {
-        Matcher m = ARTIFACT_MATCHER.matcher(url);
-        if (!m.matches()) {
-            return new String[] { url, DEFAULT_VERSION };
-        }
-        else {
-            StringBuffer v = new StringBuffer();
-            String d1 = m.group(1);
-            String d2 = m.group(2);
-            String d3 = m.group(3);
-            String d4 = m.group(4);
-            String d5 = m.group(5);
-            String d6 = m.group(6);
-            if (d2 != null) {
-                v.append(d2);
-                if (d3 != null) {
-                    v.append('.');
-                    v.append(d3);
-                    if (d4 != null) {
-                        v.append('.');
-                        v.append(d4);
-                        if (d5 != null) {
-                            v.append(".");
-                            cleanupModifier(v, d5);
-                        }
-                    } else if (d5 != null) {
-                        v.append(".0.");
-                        cleanupModifier(v, d5);
-                    }
-                } else if (d5 != null) {
-                    v.append(".0.0.");
-                    cleanupModifier(v, d5);
-                }
-            }
-            return new String[] { d1, v.toString(), d6 };
-        }
-    }
-
-    private static void cleanupModifier(StringBuffer result, String modifier) {
-        Matcher m = FUZZY_MODIFIDER.matcher(modifier);
-        if (m.matches()) {
-            modifier = m.group(1);
-        }
-        for (int i = 0; i < modifier.length(); i++) {
-            char c = modifier.charAt(i);
-            if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_' || c == '-') {
-                result.append(c);
-            }
-        }
-    }
-
-
-}
diff --git a/karaf-2.3.x/util/src/main/java/org/apache/karaf/util/InterpolationHelper.java b/karaf-2.3.x/util/src/main/java/org/apache/karaf/util/InterpolationHelper.java
deleted file mode 100644
index 6fb64b9..0000000
--- a/karaf-2.3.x/util/src/main/java/org/apache/karaf/util/InterpolationHelper.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.util;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.osgi.framework.BundleContext;
-
-/**
- * Enhancement of the standard <code>Properties</code>
- * managing the maintain of comments, etc.
- */
-public class InterpolationHelper {
-
-    private InterpolationHelper() {
-    }
-
-    private static final char ESCAPE_CHAR = '\\';
-    private static final String DELIM_START = "${";
-    private static final String DELIM_STOP = "}";
-
-
-    /**
-     * Callback for substitution
-     */
-    public interface SubstitutionCallback {
-
-        public String getValue(String key);
-
-    }
-
-    /**
-     * Perform substitution on a property set
-     *
-     * @param properties the property set to perform substitution on
-     */
-    public static void performSubstitution(Map<String, String> properties) {
-        performSubstitution(properties, (BundleContext) null);
-    }
-
-    /**
-     * Perform substitution on a property set
-     *
-     * @param properties the property set to perform substitution on
-     */
-    public static void performSubstitution(Map<String, String> properties, final BundleContext context) {
-        performSubstitution(properties, new SubstitutionCallback() {
-            public String getValue(String key) {
-                String value = null;
-                if (context != null) {
-                    value = context.getProperty(key);
-                }
-                if (value == null) {
-                    value = System.getProperty(value, "");
-                }
-                return value;
-            }
-        });
-    }
-
-    /**
-     * Perform substitution on a property set
-     *
-     * @param properties the property set to perform substitution on
-     */
-    public static void performSubstitution(Map<String, String> properties, SubstitutionCallback callback) {
-        for (String name : properties.keySet()) {
-            String value = properties.get(name);
-            properties.put(name, substVars(value, name, null, properties, callback));
-        }
-    }
-
-
-    /**
-     * <p>
-     * This method performs property variable substitution on the
-     * specified value. If the specified value contains the syntax
-     * <tt>${&lt;prop-name&gt;}</tt>, where <tt>&lt;prop-name&gt;</tt>
-     * refers to either a configuration property or a system property,
-     * then the corresponding property value is substituted for the variable
-     * placeholder. Multiple variable placeholders may exist in the
-     * specified value as well as nested variable placeholders, which
-     * are substituted from inner most to outer most. Configuration
-     * properties override system properties.
-     * </p>
-     *
-     * @param val         The string on which to perform property substitution.
-     * @param currentKey  The key of the property being evaluated used to
-     *                    detect cycles.
-     * @param cycleMap    Map of variable references used to detect nested cycles.
-     * @param configProps Set of configuration properties.
-     * @param callback    the callback to obtain substitution values
-     * @return The value of the specified string after system property substitution.
-     * @throws IllegalArgumentException If there was a syntax error in the
-     *                                  property placeholder syntax or a recursive variable reference.
-     */
-    public static String substVars(String val,
-                                   String currentKey,
-                                   Map<String, String> cycleMap,
-                                   Map<String, String> configProps,
-                                   SubstitutionCallback callback)
-            throws IllegalArgumentException {
-        if (cycleMap == null) {
-            cycleMap = new HashMap<String, String>();
-        }
-
-        // Put the current key in the cycle map.
-        cycleMap.put(currentKey, currentKey);
-
-        // Assume we have a value that is something like:
-        // "leading ${foo.${bar}} middle ${baz} trailing"
-
-        // Find the first ending '}' variable delimiter, which
-        // will correspond to the first deepest nested variable
-        // placeholder.
-        int stopDelim = val.indexOf(DELIM_STOP);
-        while (stopDelim > 0 && val.charAt(stopDelim - 1) == ESCAPE_CHAR) {
-            stopDelim = val.indexOf(DELIM_STOP, stopDelim + 1);
-        }
-
-        // Find the matching starting "${" variable delimiter
-        // by looping until we find a start delimiter that is
-        // greater than the stop delimiter we have found.
-        int startDelim = val.indexOf(DELIM_START);
-        while (stopDelim >= 0) {
-            int idx = val.indexOf(DELIM_START, startDelim + DELIM_START.length());
-            if ((idx < 0) || (idx > stopDelim)) {
-                break;
-            } else if (idx < stopDelim) {
-                startDelim = idx;
-            }
-        }
-
-        // If we do not have a start or stop delimiter, then just
-        // return the existing value.
-        if ((startDelim < 0) || (stopDelim < 0)) {
-            return unescape(val);
-        }
-
-        // At this point, we have found a variable placeholder so
-        // we must perform a variable substitution on it.
-        // Using the start and stop delimiter indices, extract
-        // the first, deepest nested variable placeholder.
-        String variable = val.substring(startDelim + DELIM_START.length(), stopDelim);
-
-        // Verify that this is not a recursive variable reference.
-        if (cycleMap.get(variable) != null) {
-            throw new IllegalArgumentException("recursive variable reference: " + variable);
-        }
-
-        // Get the value of the deepest nested variable placeholder.
-        // Try to configuration properties first.
-        String substValue = (String) ((configProps != null) ? configProps.get(variable) : null);
-        if (substValue == null) {
-            if (variable.length() <= 0) {
-                substValue = "";
-            } else {
-                if (callback != null) {
-                    substValue = callback.getValue(variable);
-                }
-                if (substValue == null) {
-                    substValue = System.getProperty(variable, "");
-                }
-            }
-        }
-
-        // Remove the found variable from the cycle map, since
-        // it may appear more than once in the value and we don't
-        // want such situations to appear as a recursive reference.
-        cycleMap.remove(variable);
-
-        // Append the leading characters, the substituted value of
-        // the variable, and the trailing characters to get the new
-        // value.
-        val = val.substring(0, startDelim) + substValue + val.substring(stopDelim + DELIM_STOP.length(), val.length());
-
-        // Now perform substitution again, since there could still
-        // be substitutions to make.
-        val = substVars(val, currentKey, cycleMap, configProps, callback);
-
-        // Remove escape characters preceding {, } and \
-        val = unescape(val);
-
-        // Return the value.
-        return val;
-    }
-
-    private static String unescape(String val) {
-        int escape = val.indexOf(ESCAPE_CHAR);
-        while (escape >= 0 && escape < val.length() - 1) {
-            char c = val.charAt(escape + 1);
-            if (c == '{' || c == '}' || c == ESCAPE_CHAR) {
-                val = val.substring(0, escape) + val.substring(escape + 1);
-            }
-            escape = val.indexOf(ESCAPE_CHAR, escape + 1);
-        }
-        return val;
-    }
-
-}
diff --git a/karaf-2.3.x/util/src/main/java/org/apache/karaf/util/MvnUtils.java b/karaf-2.3.x/util/src/main/java/org/apache/karaf/util/MvnUtils.java
deleted file mode 100644
index 85610dd..0000000
--- a/karaf-2.3.x/util/src/main/java/org/apache/karaf/util/MvnUtils.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.util;
-
-import java.net.URL;
-
-public class MvnUtils {
-
-    private MvnUtils() { }
-
-
-    /**
-     * Compute the path of url, expanding it if the url uses the mvn protocol.
-     *
-     * @param url the url
-     * @return the path
-     */
-    public static String getMvnPath(URL url) {
-        if (url.getProtocol().equals("mvn")) {
-            String[] parts = url.toExternalForm().substring(4).split("/");
-            String groupId;
-            String artifactId;
-            String version;
-            String type;
-            String qualifier;
-            if (parts.length < 3 || parts.length > 5) {
-                return url.getPath();
-            }
-            groupId = parts[0];
-            artifactId = parts[1];
-            version = parts[2];
-            type = (parts.length >= 4) ?  "." + parts[3] : ".jar";
-            qualifier = (parts.length >= 5) ? "-" + parts[4] :  "";
-            return groupId.replace('.', '/') + "/" + artifactId + "/"
-                    + version + "/" + artifactId + "-" + version + qualifier + type;
-        }
-        return url.getPath();
-    }
-}
diff --git a/karaf-2.3.x/util/src/main/java/org/apache/karaf/util/StringEscapeUtils.java b/karaf-2.3.x/util/src/main/java/org/apache/karaf/util/StringEscapeUtils.java
deleted file mode 100644
index ac0c984..0000000
--- a/karaf-2.3.x/util/src/main/java/org/apache/karaf/util/StringEscapeUtils.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.util;
-
-import java.util.Locale;
-
-/**
- * Util class to manipulate String, especially around escape/unescape.
- */
-public class StringEscapeUtils {
-
-    /** Constant for the radix of hex numbers.*/
-    private static final int HEX_RADIX = 16;
-
-    /** Constant for the length of a unicode literal.*/
-    private static final int UNICODE_LEN = 4;
-
-    /**
-     * <p>Unescapes any Java literals found in the <code>String</code> to a
-     * <code>Writer</code>.</p> This is a slightly modified version of the
-     * StringEscapeUtils.unescapeJava() function in commons-lang that doesn't
-     * drop escaped separators (i.e '\,').
-     *
-     * @param str  the <code>String</code> to unescape, may be null
-     * @return the processed string
-     * @throws IllegalArgumentException if the Writer is <code>null</code>
-     */
-    public static String unescapeJava(String str) {
-        if (str == null) {
-            return null;
-        }
-        int sz = str.length();
-        StringBuffer out = new StringBuffer(sz);
-        StringBuffer unicode = new StringBuffer(UNICODE_LEN);
-        boolean hadSlash = false;
-        boolean inUnicode = false;
-        for (int i = 0; i < sz; i++) {
-            char ch = str.charAt(i);
-            if (inUnicode) {
-                // if in unicode, then we're reading unicode
-                // values in somehow
-                unicode.append(ch);
-                if (unicode.length() == UNICODE_LEN) {
-                    // unicode now contains the four hex digits
-                    // which represents our unicode character
-                    try {
-                        int value = Integer.parseInt(unicode.toString(), HEX_RADIX);
-                        out.append((char) value);
-                        unicode.setLength(0);
-                        inUnicode = false;
-                        hadSlash = false;
-                    } catch (NumberFormatException nfe) {
-                        throw new IllegalArgumentException("Unable to parse unicode value: " + unicode, nfe);
-                    }
-                }
-                continue;
-            }
-
-            if (hadSlash) {
-                // handle an escaped value
-                hadSlash = false;
-                switch (ch) {
-                    case '\\' :
-                        out.append('\\');
-                        break;
-                    case '\'' :
-                        out.append('\'');
-                        break;
-                    case '\"' :
-                        out.append('"');
-                        break;
-                    case 'r' :
-                        out.append('\r');
-                        break;
-                    case 'f' :
-                        out.append('\f');
-                        break;
-                    case 't' :
-                        out.append('\t');
-                        break;
-                    case 'n' :
-                        out.append('\n');
-                        break;
-                    case 'b' :
-                        out.append('\b');
-                        break;
-                    case 'u' :
-                        // uh-oh, we're in unicode country....
-                        inUnicode = true;
-                        break;
-                    default :
-                        out.append(ch);
-                        break;
-                }
-                continue;
-            } else if (ch == '\\') {
-                hadSlash = true;
-                continue;
-            }
-            out.append(ch);
-        }
-
-        if (hadSlash) {
-            // then we're in the weird case of a \ at the end of the
-            // string, let's output it anyway.
-            out.append('\\');
-        }
-
-        return out.toString();
-    }
-
-    /**
-     * <p>Escapes the characters in a <code>String</code> using Java String rules.</p>
-     *
-     * <p>Deals correctly with quotes and control-chars (tab, backslash, cr, ff, etc.) </p>
-     *
-     * <p>So a tab becomes the characters <code>'\\'</code> and
-     * <code>'t'</code>.</p>
-     *
-     * <p>The only difference between Java strings and JavaScript strings
-     * is that in JavaScript, a single quote must be escaped.</p>
-     *
-     * <p>Example:
-     * <pre>
-     * input string: He didn't say, "Stop!"
-     * output string: He didn't say, \"Stop!\"
-     * </pre>
-     * </p>
-     *
-     * @param str  String to escape values in, may be null
-     * @return String with escaped values, <code>null</code> if null string input
-     */
-    public static String escapeJava(String str) {
-        if (str == null) {
-            return null;
-        }
-        int sz = str.length();
-        StringBuffer out = new StringBuffer(sz * 2);
-        for (int i = 0; i < sz; i++) {
-            char ch = str.charAt(i);
-            // handle unicode
-            if (ch > 0xfff) {
-                out.append("\\u").append(hex(ch));
-            } else if (ch > 0xff) {
-                out.append("\\u0").append(hex(ch));
-            } else if (ch > 0x7f) {
-                out.append("\\u00").append(hex(ch));
-            } else if (ch < 32) {
-                switch (ch) {
-                    case '\b' :
-                        out.append('\\');
-                        out.append('b');
-                        break;
-                    case '\n' :
-                        out.append('\\');
-                        out.append('n');
-                        break;
-                    case '\t' :
-                        out.append('\\');
-                        out.append('t');
-                        break;
-                    case '\f' :
-                        out.append('\\');
-                        out.append('f');
-                        break;
-                    case '\r' :
-                        out.append('\\');
-                        out.append('r');
-                        break;
-                    default :
-                        if (ch > 0xf) {
-                            out.append("\\u00").append(hex(ch));
-                        } else {
-                            out.append("\\u000").append(hex(ch));
-                        }
-                        break;
-                }
-            } else {
-                switch (ch) {
-                    case '"' :
-                        out.append('\\');
-                        out.append('"');
-                        break;
-                    case '\\' :
-                        out.append('\\');
-                        out.append('\\');
-                        break;
-                    default :
-                        out.append(ch);
-                        break;
-                }
-            }
-        }
-        return out.toString();
-    }
-
-    /**
-     * <p>Returns an upper case hexadecimal <code>String</code> for the given
-     * character.</p>
-     *
-     * @param ch The character to convert.
-     * @return An upper case hexadecimal <code>String</code>
-     */
-    public static String hex(char ch) {
-        return Integer.toHexString(ch).toUpperCase(Locale.ENGLISH);
-    }
-
-}
diff --git a/karaf-2.3.x/util/src/main/java/org/apache/karaf/util/collections/CopyOnWriteArrayIdentityList.java b/karaf-2.3.x/util/src/main/java/org/apache/karaf/util/collections/CopyOnWriteArrayIdentityList.java
deleted file mode 100644
index 9b34352..0000000
--- a/karaf-2.3.x/util/src/main/java/org/apache/karaf/util/collections/CopyOnWriteArrayIdentityList.java
+++ /dev/null
@@ -1,1170 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.karaf.util.collections;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.lang.reflect.Array;
-import java.util.Collection;
-import java.util.ConcurrentModificationException;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-import java.util.RandomAccess;
-import java.util.concurrent.locks.ReentrantLock;
-
-/**
- * Implements a {@link java.util.ArrayList} variant that is thread-safe. All
- * write operation result in a new copy of the underlying data being created.
- * Iterators reflect the state of the CopyOnWriteArrayIdentityList at the time they were
- * created. They are not updated to reflect subsequent changes to the list. In
- * addition, these iterators cannot be used for modifying the underlying
- * CopyOnWriteArrayIdentityList.
- *
- * In addition, elements are compared based on reference equality instead of
- * object equality when comparing values.
- *
- * @param <E> the element type
- */
-public class CopyOnWriteArrayIdentityList<E> implements List<E>, RandomAccess, Cloneable, Serializable {
-
-    private static final long serialVersionUID = 8673264195747942595L;
-
-    private transient volatile E[] arr;
-
-    /**
-     * Lock for the queue write methods
-     */
-    private final transient ReentrantLock lock = new ReentrantLock();
-
-    /**
-     * Creates a new, empty instance of CopyOnWriteArrayList.
-     */
-    public CopyOnWriteArrayIdentityList() {
-    }
-
-    /**
-     * Creates a new instance of CopyOnWriteArrayList and fills it with the
-     * contents of a given Collection.
-     *
-     * @param c     the collection the elements of which are to be copied into
-     *              the new instance.
-     */
-    public CopyOnWriteArrayIdentityList(Collection<? extends E> c) {
-        this((E[]) c.toArray());
-    }
-
-    /**
-     * Creates a new instance of CopyOnWriteArrayList and fills it with the
-     * contents of a given array.
-     *
-     * @param array the array the elements of which are to be copied into the
-     *              new instance.
-     */
-    public CopyOnWriteArrayIdentityList(E[] array) {
-        int size = array.length;
-        E[] data = newElementArray(size);
-        for (int i = 0; i < size; i++) {
-            data[i] = array[i];
-        }
-        arr = data;
-    }
-
-    public boolean add(E e) {
-        lock.lock();
-        try {
-            E[] data;
-            E[] old = getData();
-            int size = old.length;
-            data = newElementArray(size + 1);
-            System.arraycopy(old, 0, data, 0, size);
-            data[size] = e;
-            setData(data);
-            return true;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public void add(int index, E e) {
-        lock.lock();
-        try {
-            E[] data;
-            E[] old = getData();
-            int size = old.length;
-            checkIndexInclusive(index, size);
-            data = newElementArray(size+1);
-            System.arraycopy(old, 0, data, 0, index);
-            data[index] = e;
-            if (size > index) {
-                System.arraycopy(old, index, data, index + 1, size - index);
-            }
-            setData(data);
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public boolean addAll(Collection<? extends E> c) {
-        Iterator it = c.iterator();
-        int ssize = c.size();
-        lock.lock();
-        try {
-            int size = size();
-            E[] data;
-            E[] old = getData();
-            int nSize = size + ssize;
-            data = newElementArray(nSize);
-            System.arraycopy(old, 0, data, 0, size);
-            while (it.hasNext()) {
-                data[size++] = (E) it.next();
-            }
-            setData(data);
-        } finally {
-            lock.unlock();
-        }
-        return true;
-    }
-
-    public boolean addAll(int index, Collection<? extends E> c) {
-        Iterator it = c.iterator();
-        int ssize = c.size();
-        lock.lock();
-        try {
-            int size = size();
-            checkIndexInclusive(index, size);
-            E[] data;
-            E[] old = getData();
-            int nSize = size + ssize;
-            data = newElementArray(nSize);
-            System.arraycopy(old, 0, data, 0, index);
-            int i = index;
-            while (it.hasNext()) {
-                data[i++] = (E) it.next();
-            }
-            if (size > index) {
-                System.arraycopy(old, index, data, index + ssize, size - index);
-            }
-            setData(data);
-        } finally {
-            lock.unlock();
-        }
-        return true;
-    }
-
-    /**
-     * Adds to this CopyOnWriteArrayList all those elements from a given
-     * collection that are not yet part of the list.
-     *
-     * @param c     the collection from which the potential new elements are
-     *              taken.
-     *
-     * @return the number of elements actually added to this list.
-     */
-    public int addAllAbsent(Collection<? extends E> c) {
-        if (c.size() == 0) {
-            return 0;
-        }
-        lock.lock();
-        try {
-            E[] old = getData();
-            int size = old.length;
-            E[] toAdd = newElementArray(c.size());
-            int i = 0;
-            for (Iterator it = c.iterator(); it.hasNext();) {
-                E o = (E) it.next();
-                if (indexOf(o) < 0) {
-                    toAdd[i++] = o;
-                }
-            }
-            E[] data = newElementArray(size + i);
-            System.arraycopy(old, 0, data, 0, size);
-            System.arraycopy(toAdd, 0, data, size, i);
-            setData(data);
-            return i;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Adds to this CopyOnWriteArrayList another element, given that this
-     * element is not yet part of the list.
-     *
-     * @param e     the potential new element.
-     *
-     * @return true if the element was added, or false otherwise.
-     */
-    public boolean addIfAbsent(E e) {
-        lock.lock();
-        try {
-            E[] data;
-            E[] old = getData();
-            int size = old.length;
-            if (size != 0) {
-                if (indexOf(e) >= 0) {
-                    return false;
-                }
-            }
-            data = newElementArray(size + 1);
-            System.arraycopy(old, 0, data, 0, size);
-            data[size] = e;
-            setData(data);
-            return true;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public void clear() {
-        lock.lock();
-        try {
-            setData(newElementArray(0));
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    @Override
-    public Object clone() {
-        try {
-            CopyOnWriteArrayIdentityList thisClone = (CopyOnWriteArrayIdentityList) super.clone();
-            thisClone.setData(this.getData());
-            return thisClone;
-        } catch (CloneNotSupportedException e) {
-            throw new RuntimeException("CloneNotSupportedException is not expected here");
-        }
-    }
-
-    public boolean contains(Object o) {
-        return indexOf(o) >= 0;
-    }
-
-    public boolean containsAll(Collection<?> c) {
-        E[] data = getData();
-        return containsAll(c, data, 0, data.length);
-    }
-
-    public boolean equals(Object o) {
-        if (o == this) {
-            return true;
-        }
-        if (!(o instanceof List)) {
-            return false;
-        }
-        List l = (List) o;
-        Iterator it = l.listIterator();
-        Iterator ourIt = listIterator();
-        while (it.hasNext()) {
-            if (!ourIt.hasNext()) {
-                return false;
-            }
-            Object thisListElem = it.next();
-            Object anotherListElem = ourIt.next();
-            if (thisListElem != anotherListElem) {
-                return false;
-            }
-        }
-        if (ourIt.hasNext()) {
-            return false;
-        }
-        return true;
-    }
-
-    public E get(int index) {
-        E[] data = getData();
-        return data[index];
-    }
-
-    public int hashCode() {
-        int hashCode = 1;
-        Iterator it = listIterator();
-        while (it.hasNext()) {
-            Object obj = it.next();
-            hashCode = 31 * hashCode + (obj == null ? 0 : obj.hashCode());
-        }
-        return hashCode;
-    }
-
-    /**
-     * Returns the index of a given element, starting the search from a given
-     * position in the list.
-     *
-     * @param e     the element to search.
-     * @param index the index at which to start the search.
-     *
-     * @return the index of the element or null, if the element has not been
-     * found at or beyond the given start index.
-     */
-    public int indexOf(E e, int index) {
-        E[] data = getData();
-        return indexOf(e, data, index, data.length - index);
-    }
-
-    public int indexOf(Object o) {
-        E[] data = getData();
-        return indexOf(o, data, 0, data.length);
-    }
-
-    public boolean isEmpty() {
-        return size() == 0;
-    }
-
-    public Iterator<E> iterator() {
-        return new ListIteratorImpl(getData(), 0);
-    }
-
-    /**
-     * Returns the last index of a given element, starting the search from
-     * a given position in the list and going backwards.
-     *
-     * @param e     the element to search.
-     * @param index the index at which to start the search.
-     *
-     * @return the index of the element or null, if the element has not been
-     * found at or before the given start index.
-     */
-    public int lastIndexOf(E e, int index) {
-        E[] data = getData();
-        return lastIndexOf(e, data, 0, index);
-    }
-
-    public int lastIndexOf(Object o) {
-        E[] data = getData();
-        return lastIndexOf(o, data, 0, data.length);
-    }
-
-    public ListIterator<E> listIterator() {
-        return new ListIteratorImpl(getData(), 0);
-    }
-
-    public ListIterator<E> listIterator(int index) {
-        E[] data = getData();
-        checkIndexInclusive(index, data.length);
-        return new ListIteratorImpl(data, index);
-    }
-
-    public E remove(int index) {
-        return removeRange(index, 1);
-    }
-
-    public boolean remove(Object o) {
-        lock.lock();
-        try {
-            int index = indexOf(o);
-            if (index == -1) {
-                return false;
-            }
-            remove(index);
-            return true;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public boolean removeAll(Collection<?> c) {
-        lock.lock();
-        try {
-            return removeAll(c, 0, getData().length) != 0;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public boolean retainAll(Collection<?> c) {
-        if (c == null) {
-            throw new NullPointerException();
-        }
-        lock.lock();
-        try {
-            return retainAll(c, 0, getData().length) != 0;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public E set(int index, E e) {
-        lock.lock();
-        try {
-            int size = size();
-            checkIndexExlusive(index, size);
-            E[] data;
-            data = newElementArray(size);
-            E[] oldArr = getData();
-            System.arraycopy(oldArr, 0, data, 0, size);
-            E old = data[index];
-            data[index] = e;
-            setData(data);
-            return old;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public int size() {
-        return getData().length;
-    }
-
-    public List<E> subList(int fromIndex, int toIndex) {
-        return new SubList(this, fromIndex, toIndex);
-    }
-
-    public Object[] toArray() {
-        E[] data = getData();
-        return toArray(data, 0, data.length);
-    }
-
-    public <T> T[] toArray(T[] a) {
-        E[] data = getData();
-        return (T[]) toArray(a, data, 0, data.length);
-    }
-
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder("[");
-
-        Iterator it = listIterator();
-        while (it.hasNext()) {
-            sb.append(String.valueOf(it.next()));
-            sb.append(", ");
-        }
-        if (sb.length() > 1) {
-            sb.setLength(sb.length() - 2);
-        }
-        sb.append("]");
-        return sb.toString();
-    }
-
-    // private and package private methods
-
-    @SuppressWarnings("unchecked")
-    private final E[] newElementArray(int size) {
-        return (E[])new Object[size];
-    }
-
-    /**
-     * sets the internal data array
-     *
-     * @param data array to set
-     */
-    private final void setData(E[] data) {
-        arr = data;
-    }
-
-    /**
-     * gets the internal data array (or a new array if it is null)
-     *
-     * @return the data array
-     */
-    final E[] getData() {
-        if (arr == null) {
-            return newElementArray(0);
-        }
-        return arr;
-    }
-
-    /**
-     * Removes from the specified range of this list
-     * all the elements that are contained in the specified collection
-     * <p/>
-     * !should be called under lock
-     *
-     * @return Returns the number of removed elements
-     */
-    final int removeAll(Collection c, int start, int size) {
-        int ssize = c.size();
-        if (ssize == 0) {
-            return 0;
-        }
-        Object[] old = getData();
-        int arrsize = old.length;
-        if (arrsize == 0) {
-            return 0;
-        }
-        Object[] data = new Object[size];
-        int j = 0;
-        for (int i = start; i < (start + size); i++) {
-            if (!c.contains(old[i])) {
-                data[j++] = old[i];
-            }
-        }
-        if (j != size) {
-            E[] result = newElementArray(arrsize - (size - j));
-            System.arraycopy(old, 0, result, 0, start);
-            System.arraycopy(data, 0, result, start, j);
-            System.arraycopy(old, start + size, result, start + j, arrsize
-                    - (start + size));
-            setData(result);
-            return (size - j);
-        }
-        return 0;
-    }
-
-    /**
-     * Retains only the elements in the specified range of this list
-     * that are contained in the specified collection
-     *
-     * @return Returns the number of removed elements
-     */
-    // should be called under lock
-    int retainAll(Collection c, int start, int size) {
-        Object[] old = getData();
-        if (size == 0) {
-            return 0;
-        }
-        if (c.size() == 0) {
-            E[] data;
-            if (size == old.length) {
-                data = newElementArray(0);
-            } else {
-                data = newElementArray(old.length - size);
-                System.arraycopy(old, 0, data, 0, start);
-                System.arraycopy(old, start + size, data, start, old.length
-                        - start - size);
-            }
-            setData(data);
-            return size;
-        }
-        Object[] temp = new Object[size];
-        int pos = 0;
-        for (int i = start; i < (start + size); i++) {
-            if (c.contains(old[i])) {
-                temp[pos++] = old[i];
-            }
-        }
-        if (pos == size) {
-            return 0;
-        }
-        E[] data = newElementArray(pos + old.length - size);
-        System.arraycopy(old, 0, data, 0, start);
-        System.arraycopy(temp, 0, data, start, pos);
-        System.arraycopy(old, start + size, data, start + pos, old.length
-                - start - size);
-        setData(data);
-        return (size - pos);
-    }
-
-    /**
-     * Removes specified range from this list
-     */
-    E removeRange(int start, int size) {
-        lock.lock();
-        try {
-            int sizeArr = size();
-            checkIndexExlusive(start, sizeArr);
-            checkIndexInclusive(start + size, sizeArr);
-            E[] data;
-            data = newElementArray(sizeArr - size);
-            E[] oldArr = getData();
-            System.arraycopy(oldArr, 0, data, 0, start);
-            E old = oldArr[start];
-            if (sizeArr > (start + size)) {
-                System.arraycopy(oldArr, start + size, data, start, sizeArr
-                        - (start + size));
-            }
-            setData(data);
-            return old;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    // some util static functions to use by iterators and methods
-    /**
-     * Returns an array containing all of the elements
-     * in the specified range of the array in proper sequence
-     */
-    static Object[] toArray(Object[] data, int start, int size) {
-        Object[] result = new Object[size];
-        System.arraycopy(data, start, result, 0, size);
-        return result;
-    }
-
-    /**
-     * Returns an array containing all of the elements
-     * in the specified range of the array in proper sequence,
-     * stores the result in the array, specified by first parameter
-     * (as for public instance method toArray(Object[] to)
-     */
-    static Object[] toArray(Object[] to, Object[] data, int start, int size) {
-        int l = data.length;
-        if (to.length < l) {
-            to = (Object[]) Array.newInstance(to.getClass().getComponentType(),
-                    l);
-        } else {
-            if (to.length > l) {
-                to[l] = null;
-            }
-        }
-        System.arraycopy(data, start, to, 0, size);
-        return to;
-    }
-
-    /**
-     * Checks if the specified range of the
-     * array contains all of the elements in the collection
-     *
-     * @param c     collection with elements
-     * @param data  array where to search the elements
-     * @param start start index
-     * @param size  size of the range
-     */
-    static final boolean containsAll(Collection c, Object[] data, int start,
-                                     int size) {
-        if (size == 0) {
-            return false;
-        }
-        Iterator it = c.iterator();
-        while (it.hasNext()) {
-            Object next = it.next();
-            if (indexOf(next, data, start, size) < 0) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Returns the index in the specified range of the data array
-     * of the last occurrence of the specified element
-     *
-     * @param o     element to search
-     * @param data  array where to search
-     * @param start start index
-     * @param size  size of the range
-     * @return
-     */
-    static final int lastIndexOf(Object o, Object[] data, int start, int size) {
-        if (size == 0) {
-            return -1;
-        }
-        for (int i = start + size - 1; i > start - 1; i--) {
-            if (data[i] == o) {
-                return i;
-            }
-        }
-        return -1;
-    }
-
-    /**
-     * Returns the index in the specified range of the data array
-     * of the first occurrence of the specified element
-     *
-     * @param o     element to search
-     * @param data  array where to search
-     * @param start start index
-     * @param size  end index
-     * @return
-     */
-    static final int indexOf(Object o, Object[] data, int start, int size) {
-        if (size == 0) {
-            return -1;
-        }
-        for (int i = start; i < start + size; i++) {
-            if (data[i] == o) {
-                return i;
-            }
-        }
-        return -1;
-    }
-
-    /**
-     * Throws <code>IndexOutOfBoundsException</code> if <code>index</code>
-     * is out of the list bounds.
-     *
-     * @param index element index to check.
-     */
-    static final void checkIndexInclusive(int index, int size) {
-        if (index < 0 || index > size) {
-            throw new IndexOutOfBoundsException("Index is " + index + ", size is " + size);
-        }
-    }
-
-    /**
-     * Throws <code>IndexOutOfBoundsException</code> if <code>index</code>
-     * is out of the list bounds. Excluding the last element.
-     *
-     * @param index element index to check.
-     */
-    static final void checkIndexExlusive(int index, int size) {
-        if (index < 0 || index >= size) {
-            throw new IndexOutOfBoundsException("Index is " + index + ", size is " + size);
-        }
-    }
-
-    /**
-     * gets the internal data array
-     *
-     * @return the data array
-     */
-    final E[] getArray() {
-        return arr;
-    }
-
-    /**
-     * list iterator implementation,
-     * when created gets snapshot of the list,
-     * so never throws ConcurrentModificationException
-     */
-    private static class ListIteratorImpl implements ListIterator {
-        private final Object[] arr;
-
-        private int current;
-
-        private final int size;
-
-        final int size() {
-            return size;
-        }
-
-        public ListIteratorImpl(Object[] data, int current) {
-            this.current = current;
-            arr = data;
-            size = data.length;
-        }
-
-        public void add(Object o) {
-            throw new UnsupportedOperationException("Unsupported operation add");
-        }
-
-        public boolean hasNext() {
-            if (current < size) {
-                return true;
-            }
-            return false;
-        }
-
-        public boolean hasPrevious() {
-            return current > 0;
-        }
-
-        public Object next() {
-            if (hasNext()) {
-                return arr[current++];
-            }
-            throw new NoSuchElementException("pos is " + current + ", size is " + size);
-        }
-
-        public int nextIndex() {
-            return current;
-        }
-
-        public Object previous() {
-            if (hasPrevious()) {
-                return arr[--current];
-            }
-            throw new NoSuchElementException("pos is " + (current-1) + ", size is " + size);
-        }
-
-        public int previousIndex() {
-            return current - 1;
-        }
-
-        public void remove() {
-            throw new UnsupportedOperationException("Unsupported operation remove");
-        }
-
-        public void set(Object o) {
-            throw new UnsupportedOperationException("Unsupported operation set");
-        }
-
-    }
-
-    /**
-     * Keeps a state of sublist implementation,
-     * size and array declared as final,
-     * so we'll never get the unconsistent state
-     */
-    static final class SubListReadData {
-        final int size;
-
-        final Object[] data;
-
-        SubListReadData(int size, Object[] data) {
-            this.size = size;
-            this.data = data;
-        }
-    }
-
-    /**
-     * Represents a list returned by <code>sublist()</code>.
-     */
-    static class SubList implements List {
-        private final CopyOnWriteArrayIdentityList list;
-
-        private volatile SubListReadData read;
-
-        private final int start;
-
-        /**
-         * Sublist constructor.
-         *
-         * @param list    backing list.
-         * @param fromIdx startingIndex, inclusive
-         * @param toIdx   endIndex, exclusive
-         */
-        public SubList(CopyOnWriteArrayIdentityList list, int fromIdx, int toIdx) {
-            this.list = list;
-            Object[] data = list.getData();
-            int size = toIdx - fromIdx;
-            checkIndexExlusive(fromIdx, data.length);
-            checkIndexInclusive(toIdx, data.length);
-            read = new SubListReadData(size, list.getData());
-            start = fromIdx;
-        }
-
-        /**
-         * throws ConcurrentModificationException when the list
-         * is structurally modified in the other way other than via this subList
-         * <p/>
-         * Should be called under lock!
-         */
-        private void checkModifications() {
-            if (read.data != list.getData()) {
-                throw new ConcurrentModificationException();
-            }
-        }
-
-        /**
-         * @see java.util.List#listIterator(int)
-         */
-        public ListIterator listIterator(int startIdx) {
-            return new SubListIterator(startIdx, read);
-        }
-
-        /**
-         * @see java.util.List#set(int, java.lang.Object)
-         */
-        public Object set(int index, Object obj) {
-            list.lock.lock();
-            try {
-                checkIndexExlusive(index, read.size);
-                checkModifications();
-                Object result = list.set(index + start, obj);
-                read = new SubListReadData(read.size, list.getData());
-                return result;
-            } finally {
-                list.lock.unlock();
-            }
-        }
-
-        /**
-         * @see java.util.List#get(int)
-         */
-        public Object get(int index) {
-            SubListReadData data = read;
-            if (data.data != list.getData()) {
-                list.lock.lock();
-                try {
-                    data = read;
-                    if (data.data != list.getData()) {
-                        throw new ConcurrentModificationException();
-                    }
-                } finally {
-                    list.lock.unlock();
-                }
-            }
-            checkIndexExlusive(index, data.size);
-            return data.data[index + start];
-        }
-
-        /**
-         * @see java.util.Collection#size()
-         */
-        public int size() {
-            return read.size;
-        }
-
-        /**
-         * @see java.util.List#remove(int)
-         */
-        public Object remove(int index) {
-            list.lock.lock();
-            try {
-                checkIndexExlusive(index, read.size);
-                checkModifications();
-                Object obj = list.remove(index + start);
-                read = new SubListReadData(read.size - 1, list.getData());
-                return obj;
-            } finally {
-                list.lock.unlock();
-            }
-        }
-
-        /**
-         * @see java.util.List#add(int, java.lang.Object)
-         */
-        public void add(int index, Object object) {
-            list.lock.lock();
-            try {
-                checkIndexInclusive(index, read.size);
-                checkModifications();
-                list.add(index + start, object);
-                read = new SubListReadData(read.size + 1, list.getData());
-            } finally {
-                list.lock.unlock();
-            }
-        }
-
-        public boolean add(Object o) {
-            list.lock.lock();
-            try {
-                checkModifications();
-                list.add(start + read.size, o);
-                read = new SubListReadData(read.size + 1, list.getData());
-                return true;
-            } finally {
-                list.lock.unlock();
-            }
-        }
-
-        public boolean addAll(Collection c) {
-            list.lock.lock();
-            try {
-                checkModifications();
-                int d = list.size();
-                list.addAll(start + read.size, c);
-                read = new SubListReadData(read.size + (list.size() - d), list
-                        .getData());
-                return true;
-            } finally {
-                list.lock.unlock();
-            }
-        }
-
-        public void clear() {
-            list.lock.lock();
-            try {
-                checkModifications();
-                list.removeRange(start, read.size);
-                read = new SubListReadData(0, list.getData());
-            } finally {
-                list.lock.unlock();
-            }
-        }
-
-        public boolean contains(Object o) {
-            return indexOf(o) != -1;
-        }
-
-        public boolean containsAll(Collection c) {
-            SubListReadData b = read;
-            return CopyOnWriteArrayIdentityList.containsAll(c, b.data, start, b.size);
-        }
-
-        public int indexOf(Object o) {
-            SubListReadData b = read;
-            int ind = CopyOnWriteArrayIdentityList.indexOf(o, b.data, start, b.size)
-                    - start;
-            return ind < 0 ? -1 : ind;
-        }
-
-        public boolean isEmpty() {
-            return read.size == 0;
-        }
-
-        public Iterator iterator() {
-            return new SubListIterator(0, read);
-        }
-
-        public int lastIndexOf(Object o) {
-            SubListReadData b = read;
-            int ind = CopyOnWriteArrayIdentityList
-                    .lastIndexOf(o, b.data, start, b.size)
-                    - start;
-            return ind < 0 ? -1 : ind;
-        }
-
-        public ListIterator listIterator() {
-            return new SubListIterator(0, read);
-        }
-
-        public boolean remove(Object o) {
-            list.lock.lock();
-            try {
-                checkModifications();
-                int i = indexOf(o);
-                if (i == -1) {
-                    return false;
-                }
-                boolean result = list.remove(i + start) != null;
-                if (result) {
-                    read = new SubListReadData(read.size - 1, list.getData());
-                }
-                return result;
-            } finally {
-                list.lock.unlock();
-            }
-        }
-
-        public boolean removeAll(Collection c) {
-            list.lock.lock();
-            try {
-                checkModifications();
-                int removed = list.removeAll(c, start, read.size);
-                if (removed > 0) {
-                    read = new SubListReadData(read.size - removed, list
-                            .getData());
-                    return true;
-                }
-            } finally {
-                list.lock.unlock();
-            }
-            return false;
-        }
-
-        public boolean retainAll(Collection c) {
-            list.lock.lock();
-            try {
-                checkModifications();
-                int removed = list.retainAll(c, start, read.size);
-                if (removed > 0) {
-                    read = new SubListReadData(read.size - removed, list
-                            .getData());
-                    return true;
-                }
-                return false;
-            } finally {
-                list.lock.unlock();
-            }
-        }
-
-        public List subList(int fromIndex, int toIndex) {
-            return new SubList(list, start + fromIndex, start + toIndex);
-        }
-
-        public Object[] toArray() {
-            SubListReadData r = read;
-            return CopyOnWriteArrayIdentityList.toArray(r.data, start, r.size);
-        }
-
-        public Object[] toArray(Object[] a) {
-            SubListReadData r = read;
-            return CopyOnWriteArrayIdentityList.toArray(a, r.data, start, r.size);
-        }
-
-        /**
-         * @see java.util.List#addAll(int, java.util.Collection)
-         */
-        public boolean addAll(int index, Collection collection) {
-            list.lock.lock();
-            try {
-                checkIndexInclusive(index, read.size);
-                checkModifications();
-                int d = list.size();
-                boolean rt = list.addAll(index + start, collection);
-                read = new SubListReadData(read.size + list.size() - d, list
-                        .getData());
-                return rt;
-            } finally {
-                list.lock.unlock();
-            }
-        }
-
-        /**
-         * Implementation of <code>ListIterator</code> for the
-         * <code>SubList</code>
-         * gets a snapshot of the sublist,
-         * never throws ConcurrentModificationException
-         */
-        private class SubListIterator extends ListIteratorImpl {
-            private final SubListReadData dataR;
-
-            /**
-             * Constructs an iterator starting with the given index
-             *
-             * @param index index of the first element to iterate.
-             */
-            private SubListIterator(int index, SubListReadData d) {
-                super(d.data, index + start);
-                this.dataR = d;
-            }
-
-            /**
-             * @see java.util.ListIterator#nextIndex()
-             */
-            public int nextIndex() {
-                return super.nextIndex() - start;
-            }
-
-            /**
-             * @see java.util.ListIterator#previousIndex()
-             */
-            public int previousIndex() {
-                return super.previousIndex() - start;
-            }
-
-            /**
-             * @see java.util.Iterator#hasNext()
-             */
-            public boolean hasNext() {
-                return nextIndex() < dataR.size;
-            }
-
-            /**
-             * @see java.util.ListIterator#hasPrevious()
-             */
-            public boolean hasPrevious() {
-                return previousIndex() > -1;
-            }
-        }
-
-    }
-
-    //serialization support
-    /**
-     * Writes the object state to the ObjectOutputStream.
-     *
-     * @param oos ObjectOutputStream to write object to.
-     * @throws IOException if an I/O error occur.
-     */
-    private void writeObject(ObjectOutputStream oos) throws IOException {
-        E[] back = getData();
-        int size = back.length;
-        oos.defaultWriteObject();
-        oos.writeInt(size);
-        for (int i = 0; i < size; i++) {
-            oos.writeObject(back[i]);
-        }
-    }
-
-    /**
-     * Reads the object state from the ObjectOutputStream.
-     *
-     * @param ois ObjectInputStream to read object from.
-     * @throws IOException if an I/O error occur.
-     */
-    private void readObject(ObjectInputStream ois) throws IOException,
-            ClassNotFoundException {
-        ois.defaultReadObject();
-        int length = ois.readInt();
-        if (length == 0) {
-            setData(newElementArray(0));
-        } else {
-            E[] back = newElementArray(length);
-            for (int i = 0; i < back.length; i++) {
-                back[i] = (E) ois.readObject();
-            }
-            setData(back);
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/karaf-2.3.x/util/src/main/java/org/apache/karaf/util/process/PumpStreamHandler.java b/karaf-2.3.x/util/src/main/java/org/apache/karaf/util/process/PumpStreamHandler.java
deleted file mode 100644
index ff43312..0000000
--- a/karaf-2.3.x/util/src/main/java/org/apache/karaf/util/process/PumpStreamHandler.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.util.process;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.IOException;
-
-/**
- * Copies standard output and error of children streams to standard output and error of the parent.
- */
-public class PumpStreamHandler {
-
-    private final InputStream in;
-
-    private final OutputStream out;
-
-    private final OutputStream err;
-
-    private final String name;
-
-    private StreamPumper outputPump;
-
-    private StreamPumper errorPump;
-
-    private StreamPumper inputPump;
-
-    //
-    // NOTE: May want to use a ThreadPool here, 3 threads per/pair seems kinda expensive :-(
-    //
-
-    public PumpStreamHandler(final InputStream in, final OutputStream out, final OutputStream err, String name) {
-        assert in != null;
-        assert out != null;
-        assert err != null;
-        assert name != null;
-
-        this.in = in;
-        this.out = out;
-        this.err = err;
-        this.name = name;
-    }
-
-    public PumpStreamHandler(final InputStream in, final OutputStream out, final OutputStream err) {
-        this(in, out, err, "<unknown>");
-    }
-
-    public PumpStreamHandler(final OutputStream out, final OutputStream err) {
-        this(null, out, err);
-    }
-
-    public PumpStreamHandler(final OutputStream outAndErr) {
-        this(outAndErr, outAndErr);
-    }
-
-    /**
-     * Set the input stream from which to read the standard output of the child.
-     */
-    public void setChildOutputStream(final InputStream in) {
-        assert in != null;
-
-        createChildOutputPump(in, out);
-    }
-
-    /**
-     * Set the input stream from which to read the standard error of the child.
-     */
-    public void setChildErrorStream(final InputStream in) {
-        assert in != null;
-
-        if (err != null) {
-            createChildErrorPump(in, err);
-        }
-    }
-
-    /**
-     * Set the output stream by means of which input can be sent to the child.
-     */
-    public void setChildInputStream(final OutputStream out) {
-        assert out != null;
-
-        if (in != null) {
-            inputPump = createInputPump(in, out, true);
-        }
-        else {
-            try {
-                out.close();
-            } catch (IOException e) { }
-        }
-    }
-
-    /**
-     * Attach to a child streams from the given process.
-     *
-     * @param p     The process to attach to.
-     */
-    public void attach(final Process p) {
-        assert p != null;
-
-        setChildInputStream(p.getOutputStream());
-        setChildOutputStream(p.getInputStream());
-        setChildErrorStream(p.getErrorStream());
-    }
-    /**
-     * Start pumping the streams.
-     */
-    public void start() {
-        if (outputPump != null) {
-            Thread thread = new Thread(outputPump);
-            thread.setDaemon(true);
-            thread.setName("Output pump for " + this.name);
-            thread.start();
-        }
-
-        if (errorPump != null) {
-            Thread thread = new Thread(errorPump);
-            thread.setDaemon(true);
-            thread.setName("Error pump for " + this.name);
-            thread.start();
-        }
-
-        if (inputPump != null) {
-            Thread thread = new Thread(inputPump);
-            thread.setDaemon(true);
-            thread.setName("Input pump for " + this.name);
-            thread.start();
-        }
-    }
-
-    /**
-     * Stop pumping the streams.
-     */
-    public void stop() {
-        if (outputPump != null) {
-            try {
-                outputPump.stop();
-                outputPump.waitFor();
-            }
-            catch (InterruptedException e) {
-                // ignore
-            }
-        }
-
-        if (errorPump != null) {
-            try {
-                errorPump.stop();
-                errorPump.waitFor();
-            }
-            catch (InterruptedException e) {
-                // ignore
-            }
-        }
-
-        if (inputPump != null) {
-            inputPump.stop();
-        }
-
-        try {
-            err.flush();
-        } catch (IOException e) { }
-        try {
-            out.flush();
-        } catch (IOException e) { }
-    }
-
-    /**
-     * Create the pump to handle child output.
-     */
-    protected void createChildOutputPump(final InputStream in, final OutputStream out) {
-        assert in != null;
-        assert out != null;
-
-        outputPump = createPump(in, out);
-    }
-
-    /**
-     * Create the pump to handle error output.
-     */
-    protected void createChildErrorPump(final InputStream in, final OutputStream out) {
-        assert in != null;
-        assert out != null;
-
-        errorPump = createPump(in, out);
-    }
-
-    /**
-     * Creates a stream pumper to copy the given input stream to the given output stream.
-     */
-    protected StreamPumper createPump(final InputStream in, final OutputStream out) {
-        assert in != null;
-        assert out != null;
-
-        return createPump(in, out, false);
-    }
-
-    /**
-     * Creates a stream pumper to copy the given input stream to the
-     * given output stream.
-     *
-     * @param in                    The input stream to copy from.
-     * @param out                   The output stream to copy to.
-     * @param closeWhenExhausted    If true close the inputstream.
-     * @return                      A thread object that does the pumping.
-     */
-    protected StreamPumper createPump(final InputStream in, final OutputStream out, final boolean closeWhenExhausted) {
-        assert in != null;
-        assert out != null;
-
-        StreamPumper pumper = new StreamPumper(in, out, closeWhenExhausted);
-        return pumper;
-    }
-
-    /**
-     * Creates a stream pumper to copy the given input stream to the
-     * given output stream. Used for standard input.
-     */
-    protected StreamPumper createInputPump(final InputStream in, final OutputStream out, final boolean closeWhenExhausted) {
-        assert in != null;
-        assert out != null;
-
-        StreamPumper pumper = new StreamPumper(in, out, closeWhenExhausted);
-        pumper.setAutoflush(true);
-        return pumper;
-    }
-}
diff --git a/karaf-2.3.x/util/src/main/java/org/apache/karaf/util/process/StreamPumper.java b/karaf-2.3.x/util/src/main/java/org/apache/karaf/util/process/StreamPumper.java
deleted file mode 100644
index c12034a..0000000
--- a/karaf-2.3.x/util/src/main/java/org/apache/karaf/util/process/StreamPumper.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.util.process;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.IOException;
-
-/**
- * Copies all data from an input stream to an output stream.
- */
-public class StreamPumper implements Runnable {
-
-    private InputStream in;
-
-    private OutputStream out;
-
-    private volatile boolean finish;
-
-    private volatile boolean finished;
-
-    private boolean closeWhenExhausted;
-
-    private boolean autoflush;
-
-    private Throwable exception;
-
-    private int bufferSize = 128;
-
-    private boolean started;
-
-    /**
-     * Create a new stream pumper.
-     *
-     * @param in                    Input stream to read data from
-     * @param out                   Output stream to write data to.
-     * @param closeWhenExhausted    If true, the output stream will be closed when
-     *                              the input is exhausted.
-     */
-    public StreamPumper(final InputStream in, final OutputStream out, final boolean closeWhenExhausted) {
-        assert in != null;
-        assert out != null;
-
-        this.in = in;
-        this.out = out;
-        this.closeWhenExhausted = closeWhenExhausted;
-    }
-
-    /**
-     * Create a new stream pumper.
-     *
-     * @param in    Input stream to read data from
-     * @param out   Output stream to write data to.
-     */
-    public StreamPumper(final InputStream in, final OutputStream out) {
-        this(in, out, false);
-    }
-
-    /**
-     * Set whether data should be flushed through to the output stream.
-     *
-     * @param autoflush     If true, push through data; if false, let it be buffered
-     */
-    public void setAutoflush(boolean autoflush) {
-        this.autoflush = autoflush;
-    }
-
-    /**
-     * Copies data from the input stream to the output stream.
-     *
-     * Terminates as soon as the input stream is closed or an error occurs.
-     */
-    public void run() {
-        synchronized (this) {
-            started = true;
-        }
-        finished = false;
-        finish = false;
-
-        final byte[] buf = new byte[bufferSize];
-
-        int length;
-        try {
-            do {
-                while (in.available() > 0) {
-                    length = in.read(buf);
-                    if (length < 1 ) {
-                        break;
-                    }
-                    out.write(buf, 0, length);
-                    if (autoflush) {
-                        out.flush();
-                    }
-                }
-                out.flush();
-                Thread.sleep(200);  // Pause to avoid tight loop if external proc is slow
-            } while (!finish);
-        }
-        catch (Throwable t) {
-            synchronized (this) {
-                exception = t;
-            }
-        }
-        finally {
-            if (closeWhenExhausted) {
-                try {
-                    out.close();
-                } catch (IOException e) { }
-            }
-            finished = true;
-
-            synchronized (this) {
-                notifyAll();
-            }
-        }
-    }
-
-    /**
-     * Tells whether the end of the stream has been reached.
-     *
-     * @return true     If the stream has been exhausted.
-     */
-    public boolean isFinished() {
-        return finished;
-    }
-
-    /**
-     * This method blocks until the stream pumper finishes.
-     *
-     * @see #isFinished()
-     */
-    public synchronized void waitFor() throws InterruptedException {
-        while (!isFinished()) {
-            wait();
-        }
-    }
-
-    /**
-     * Set the size in bytes of the read buffer.
-     *
-     * @param bufferSize the buffer size to use.
-     * @throws IllegalStateException if the StreamPumper is already running.
-     */
-    public synchronized void setBufferSize(final int bufferSize) {
-        if (started) {
-            throw new IllegalStateException("Cannot set buffer size on a running StreamPumper");
-        }
-
-        this.bufferSize = bufferSize;
-    }
-
-    /**
-     * Get the size in bytes of the read buffer.
-     *
-     * @return The size of the read buffer.
-     */
-    public synchronized int getBufferSize() {
-        return bufferSize;
-    }
-
-    /**
-     * Get the exception encountered, if any.
-     *
-     * @return The Exception encountered; or null if there was none.
-     */
-    public synchronized Throwable getException() {
-        return exception;
-    }
-
-    /**
-     * Stop the pumper as soon as possible.
-     *
-     * Note that it may continue to block on the input stream
-     * but it will really stop the thread as soon as it gets EOF
-     * or any byte, and it will be marked as finished.
-     */
-    public synchronized void stop() {
-        finish = true;
-
-        notifyAll();
-    }
-}
diff --git a/karaf-2.3.x/util/src/test/java/org/apache/karaf/util/DeployerUtilsTest.java b/karaf-2.3.x/util/src/test/java/org/apache/karaf/util/DeployerUtilsTest.java
deleted file mode 100644
index 6783790..0000000
--- a/karaf-2.3.x/util/src/test/java/org/apache/karaf/util/DeployerUtilsTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.util;
-
-import junit.framework.TestCase;
-
-public class DeployerUtilsTest extends TestCase {
-
-    public void testVersions() {
-        assertVersion("org.apache.servicemix.bundles.ant-1.7.0-1.0-m3-SNAPSHOT.jar",
-                      "org.apache.servicemix.bundles.ant-1.7.0", "1.0.0.m3-SNAPSHOT", "jar");
-        assertVersion("org.apache.activemq.core-1.0-SNAPSHOT.xml",
-                      "org.apache.activemq.core", "1.0.0.SNAPSHOT", "xml");
-        assertVersion("org.apache.activemq.core-1.0.0-SNAPSHOT.xml",
-                      "org.apache.activemq.core", "1.0.0.SNAPSHOT", "xml");
-        assertVersion("org.apache.activemq.core-1.0.0.xml",
-                      "org.apache.activemq.core", "1.0.0", "xml");
-        assertVersion("geronimo-servlet_2.5_spec-1.1.2.jar",
-                      "geronimo-servlet_2.5_spec", "1.1.2", "jar");
-        assertVersion("spring-aop-2.5.1.jar",
-                      "spring-aop", "2.5.1", "jar");
-    }
-
-    private void assertVersion(String s, String... expectedParts) {
-        String[] parts = DeployerUtils.extractNameVersionType(s);
-        assertEquals(expectedParts.length, parts.length);
-        for (int i = 0; i < expectedParts.length; i++) {
-            assertEquals(expectedParts[i], parts[i]);
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/webconsole/admin/NOTICE b/karaf-2.3.x/webconsole/admin/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/webconsole/admin/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/webconsole/admin/pom.xml b/karaf-2.3.x/webconsole/admin/pom.xml
deleted file mode 100644
index 8588095..0000000
--- a/karaf-2.3.x/webconsole/admin/pom.xml
+++ /dev/null
@@ -1,132 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.webconsole</groupId>
-        <artifactId>webconsole</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.webconsole.admin</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Web Console :: Admin Plugin</name>
-    <description>This bundle provides Karaf admin support in the Web Console.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-simple</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.webconsole</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.admin</groupId>
-            <artifactId>org.apache.karaf.admin.core</artifactId>
-            <version>${project.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.json</groupId>
-            <artifactId>json</artifactId>
-            <version>20070829</version>
-            <scope>compile</scope>
-            <optional>true</optional>
-        </dependency>
-
-        <!-- Only needed while running the unit tests -->
-        <dependency>
-            <groupId>commons-fileupload</groupId>
-            <artifactId>commons-fileupload</artifactId>
-            <version>${commons-fileupload.version}</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            org.apache.felix.webconsole*;version="[3,5)",
-                            org.apache.karaf.admin;resolution:=optional,
-                            *
-                        </Import-Package>
-                        <Embed-Dependency>
-                            <!-- Required for JSON data transfer -->
-                            <!-- TODO: this needs to be put in a common place for reuse. -->
-                            json
-                        </Embed-Dependency>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/webconsole/admin/src/main/java/org/apache/karaf/webconsole/admin/AdminPlugin.java b/karaf-2.3.x/webconsole/admin/src/main/java/org/apache/karaf/webconsole/admin/AdminPlugin.java
deleted file mode 100644
index dd4b140..0000000
--- a/karaf-2.3.x/webconsole/admin/src/main/java/org/apache/karaf/webconsole/admin/AdminPlugin.java
+++ /dev/null
@@ -1,380 +0,0 @@
-/*
- *  Copyright 2009 Marcin.
- * 
- *  Licensed 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.
- *  under the License.
- */
-package org.apache.karaf.webconsole.admin;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.karaf.admin.AdminService;
-import org.apache.karaf.admin.Instance;
-import org.apache.karaf.admin.InstanceSettings;
-import org.apache.felix.webconsole.AbstractWebConsolePlugin;
-import org.json.JSONException;
-import org.json.JSONWriter;
-import org.osgi.framework.BundleContext;
-import org.slf4j.LoggerFactory;
-
-/**
- * Felix Web Console plugin for interacting with the {@link AdminService}
- */
-public class AdminPlugin extends AbstractWebConsolePlugin {
-
-    private final org.slf4j.Logger logger = LoggerFactory.getLogger(AdminPlugin.class);
-
-    public static final String NAME = "admin";
-    public static final String LABEL = "Admin";
-    private String adminJs = "/admin/res/ui/admin.js";
-    private BundleContext bundleContext;
-    private AdminService adminService;
-    private ClassLoader classLoader;
-
-    /**
-     * Blueprint lifecycle callback methods
-     */
-    public void start() {
-        super.activate(bundleContext);
-        this.classLoader = this.getClass().getClassLoader();
-        this.logger.info(LABEL + " plugin activated");
-    }
-
-    public void stop() {
-        this.logger.info(LABEL + " plugin deactivated");
-        super.deactivate();
-    }
-
-    @Override
-    public String getTitle() {
-        return LABEL;
-    }
-
-    @Override
-    public String getLabel() {
-        return NAME;
-    }
-
-    @Override
-    protected void renderContent(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
-        final PrintWriter pw = res.getWriter();
-
-        String appRoot = (String) req.getAttribute("org.apache.felix.webconsole.internal.servlet.OsgiManager.appRoot");
-        final String adminScriptTag = "<script src='" + appRoot + this.adminJs + "' language='JavaScript'></script>";
-        pw.println(adminScriptTag);
-
-        pw.println("<script type='text/javascript'>");
-        pw.println("// <![CDATA[");
-        pw.println("var imgRoot = '" + appRoot + "/res/imgs';");
-        pw.println("// ]]>");
-        pw.println("</script>");
-
-        pw.println("<div id='plugin_content'/>");
-
-        pw.println("<script type='text/javascript'>");
-        pw.println("// <![CDATA[");
-        pw.print("renderAdmin( ");
-        writeJSON(pw);
-        pw.println(" )");
-        pw.println("// ]]>");
-        pw.println("</script>");
-    }
-
-    @Override
-    protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
-        boolean success = false;
-
-        String action = req.getParameter("action");
-        String name = req.getParameter("name");
-
-        if (action == null) {
-            success = true;
-        } else if ("create".equals(action)) {
-            int sshPort = parsePortNumber(req.getParameter("sshPort"));
-            int rmiRegistryPort = parsePortNumber(req.getParameter("rmiRegistryPort"));
-            int rmiServerPort = parsePortNumber(req.getParameter("rmiServerPort"));
-            String location = parseString(req.getParameter("location"));
-            String javaOpts = parseString(req.getParameter("javaOpts"));
-            List<String> featureURLs = parseStringList(req.getParameter("featureURLs"));
-            List<String> features = parseStringList(req.getParameter("features"));
-            InstanceSettings settings = new InstanceSettings(sshPort, rmiRegistryPort, rmiServerPort, location, javaOpts, featureURLs, features);
-            success = createInstance(name, settings);
-        } else if ("destroy".equals(action)) {
-            success = destroyInstance(name);
-        } else if ("start".equals(action)) {
-            String javaOpts = req.getParameter("javaOpts");
-            success = startInstance(name, javaOpts);
-        } else if ("stop".equals(action)) {
-            success = stopInstance(name);
-        }
-
-        if (success) {
-            try {
-                Thread.sleep(1000);
-            } catch (InterruptedException e) {
-            }
-            this.renderJSON(res, null);
-        } else {
-            super.doPost(req, res);
-        }
-    }
-
-    /*
-     * Parse the String value, returning <code>null</code> if the String is empty 
-     */
-    private String parseString(String value) {
-        if (value != null && value.trim().length() == 0) {
-            value = null;
-        }
-        return value;
-    }
-    
-    private List<String> parseStringList(String value) {
-        List<String> list = new ArrayList<String>();
-        if (value != null) {
-            for (String el : value.split(",")) {
-                String trimmed = el.trim();
-                if (trimmed.length() == 0) {
-                    continue;
-                }
-                list.add(trimmed);
-            }            
-        }
-        return list;
-    }
-
-    /*
-     * Parse the port number for the String given, returning 0 if the String does not represent an integer 
-     */
-    private int parsePortNumber(String port) {
-        try {
-            return Integer.parseInt(port);
-        } catch (NumberFormatException e) {
-            return 0;
-        }
-    }
-
-    protected URL getResource(String path) {
-        path = path.substring(NAME.length() + 1);
-        URL url = this.classLoader.getResource(path);
-        if (url != null) {
-            InputStream ins = null;
-            try {
-                ins = url.openStream();
-                if (ins == null) {
-                    this.logger.error("failed to open " + url);
-                    url = null;
-                }
-            } catch (IOException e) {
-                this.logger.error(e.getMessage(), e);
-                url = null;
-            } finally {
-                if (ins != null) {
-                    try {
-                        ins.close();
-                    } catch (IOException e) {
-                        this.logger.error(e.getMessage(), e);
-                    }
-                }
-            }
-        } 
-        return url;
-    }
-
-    private void renderJSON(final HttpServletResponse response, final String feature) throws IOException {
-        response.setContentType("application/json");
-        response.setCharacterEncoding("UTF-8");
-
-        final PrintWriter pw = response.getWriter();
-        writeJSON(pw);
-    }
-
-    private void writeJSON(final PrintWriter pw) {
-        final JSONWriter jw = new JSONWriter(pw);
-        final Instance[] instances = adminService.getInstances();
-        try {
-            jw.object();
-            jw.key("status");
-            jw.value(getStatusLine());
-            jw.key("instances");
-            jw.array();
-            for (Instance i : instances) {
-//                if (!i.isRoot()) {
-                    instanceInfo(jw, i);
-//                }
-            }
-            jw.endArray();
-            jw.endObject();
-        } catch (JSONException ex) {
-            Logger.getLogger(AdminPlugin.class.getName()).log(Level.SEVERE, null, ex);
-        } catch (Exception ex) {
-            Logger.getLogger(AdminPlugin.class.getName()).log(Level.SEVERE, null, ex);
-        }
-    }
-
-    private void instanceInfo(JSONWriter jw, Instance instance) throws JSONException, Exception {
-        jw.object();
-        jw.key("pid");
-        jw.value(instance.getPid());
-        jw.key("name");
-        jw.value(instance.getName());
-        jw.key("sshPort");
-        jw.value(instance.getSshPort());
-        jw.key("rmiRegistryPort");
-        jw.value(instance.getRmiRegistryPort());
-        jw.key("rmiServerPort");
-        jw.value(instance.getRmiServerPort());
-        jw.key("state");
-        jw.value(instance.getState());
-        jw.key("location");
-        jw.value(instance.getJavaOpts() != null ? instance.getJavaOpts() : "");
-        jw.key("javaopts");
-        jw.value(instance.getLocation());
-        jw.key("actions");
-        jw.array();
-        action(jw, "destroy", "Destroy", "delete");
-        if (instance.getState().equals(Instance.STARTED)) {
-            action(jw, "stop", "Stop", "stop");
-        } else if (instance.getState().equals(Instance.STARTING)) {
-            action(jw, "stop", "Stop", "stop");
-        } else if (instance.getState().equals(Instance.STOPPED)) {
-            action(jw, "start", "Start", "start");
-        }
-        jw.endArray();
-        jw.endObject();
-    }
-
-    private void action(JSONWriter jw, String op, String title, String image) throws JSONException {
-        jw.object();
-        jw.key("op").value(op);
-        jw.key("title").value(title);
-        jw.key("image").value(image);
-        jw.endObject();
-    }
-
-    private String getStatusLine() {
-        final Instance[] instances = adminService.getInstances();
-        int started = 0, starting = 0, stopped = 0;
-        for (Instance instance : instances) {
-            try {
-                if (instance.getState().equals(Instance.STARTED)) {
-                    started++;
-                } else if (instance.getState().equals(Instance.STARTING)) {
-                    starting++;
-                } else if (instance.getState().equals(Instance.STOPPED)) {
-                    stopped++;
-                }
-            } catch (Exception ex) {
-                Logger.getLogger(AdminPlugin.class.getName()).log(Level.SEVERE, null, ex);
-            }
-        }
-        final StringBuffer buffer = new StringBuffer();
-        buffer.append("Instance information: ");
-        buffer.append(instances.length);
-        buffer.append(" instance");
-        if (instances.length != 1) {
-            buffer.append('s');
-        }
-        buffer.append(" in total");
-        if (started == instances.length) {
-            buffer.append(" - all started");
-        } else {
-            if (started != 0) {
-                buffer.append(", ");
-                buffer.append(started);
-                buffer.append(" started");
-            }
-            if (starting != 0) {
-                buffer.append(", ");
-                buffer.append(starting);
-                buffer.append(" starting");
-            }
-            buffer.append('.');
-        }
-        return buffer.toString();
-    }
-
-    private boolean createInstance(String name, InstanceSettings settings) {
-        try {
-            adminService.createInstance(name, settings);
-            return true;
-        } catch (Exception ex) {
-            Logger.getLogger(AdminPlugin.class.getName()).log(Level.SEVERE, null, ex);
-        }
-        return false;
-    }
-
-    private boolean destroyInstance(String name) {
-        try {
-            Instance instance = adminService.getInstance(name);
-            if (instance != null) {
-                instance.destroy();
-                return true;
-            }
-        } catch (Exception ex) {
-            Logger.getLogger(AdminPlugin.class.getName()).log(Level.SEVERE, null, ex);
-        }
-        return false;
-    }
-
-    private boolean startInstance(String name, String javaOpts) {
-        try {
-            Instance instance = adminService.getInstance(name);
-            if (instance != null) {
-                instance.start(javaOpts);
-                return true;
-            }
-        } catch (Exception ex) {
-            Logger.getLogger(AdminPlugin.class.getName()).log(Level.SEVERE, null, ex);
-        }
-        return false;
-    }
-
-    private boolean stopInstance(String name) {
-        try {
-            Instance instance = adminService.getInstance(name);
-            if (instance != null) {
-                instance.stop();
-                return true;
-            }
-        } catch (Exception ex) {
-            Logger.getLogger(AdminPlugin.class.getName()).log(Level.SEVERE, null, ex);
-        }
-        return false;
-    }
-
-    /**
-     * @param adminService the adminService to set
-     */
-    public void setAdminService(AdminService adminService) {
-        this.adminService = adminService;
-    }
-
-    /**
-     * @param bundleContext the bundleContext to set
-     */
-    public void setBundleContext(BundleContext bundleContext) {
-        this.bundleContext = bundleContext;
-    }
-}
diff --git a/karaf-2.3.x/webconsole/admin/src/main/resources/OSGI-INF/blueprint/webconsole-admin.xml b/karaf-2.3.x/webconsole/admin/src/main/resources/OSGI-INF/blueprint/webconsole-admin.xml
deleted file mode 100644
index dec11cd..0000000
--- a/karaf-2.3.x/webconsole/admin/src/main/resources/OSGI-INF/blueprint/webconsole-admin.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
-
-    <reference id="adminService" interface="org.apache.karaf.admin.AdminService" />
-
-    <bean id="adminPlugin" class="org.apache.karaf.webconsole.admin.AdminPlugin" init-method="start" destroy-method="stop">
-        <property name="adminService" ref="adminService" />
-        <property name="bundleContext" ref="blueprintBundleContext" />
-    </bean>
-
-    <service ref="adminPlugin" interface="javax.servlet.Servlet" >
-        <service-properties>
-            <entry key="felix.webconsole.label" value="admin"/>
-        </service-properties>
-    </service>
-
-</blueprint>
diff --git a/karaf-2.3.x/webconsole/admin/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/webconsole/admin/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 158ad6d..0000000
--- a/karaf-2.3.x/webconsole/admin/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,14 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides usage of admin commands (to manipulate Karaf instances) in the
-    Karaf Web Console.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mWeb console\u001B[0m section in the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/webconsole/admin/src/main/resources/res/ui/admin.js b/karaf-2.3.x/webconsole/admin/src/main/resources/res/ui/admin.js
deleted file mode 100644
index 7489865..0000000
--- a/karaf-2.3.x/webconsole/admin/src/main/resources/res/ui/admin.js
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * 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.
- */
-
-function renderAdmin( data ) {
-    $(document).ready( function() {
-        renderView();
-        renderData( data );
-    } );
-}
-
-function renderView() {
-    renderStatusLine();
-    var txt = "<form method='post'><div class='ui-widget-header ui-corner-top buttonGroup'><table id='create_instance_table' class='nicetable ui-widget'><thead>" +
-    "<tr><input type='hidden' name='action' value='create'/>" +
-    "<th>Name: <input id='name' type='text' name='name' style='width:70%' colspan='2'/></th>" +
-    "<th>SSH Port: <input id='sshPort' type='text' name='sshPort' style='width:70%' colspan='2'/></th>" +
-    "<th>RMI Registry Port: <input id='rmiRegistryPort' type='text' name='rmiRegistryPort' style='width:70%' colspan='2'/></th>" +
-    "<th>RMI Server Port: <input id='rmiServerPort' type='text' name='rmiServerPort' style='width:70%' colspan='2'/></th>" +
-    "<th>Location: <input id='location' type='text' name='location' style='width:70%' colspan='2'/></th>" +
-    "<th>JavaOpts: <input id='javaOpts' type='text' name='javaOpts' style='width:70%' colspan='2'/></th>" +
-    "<th />" +
-    "</tr><tr><th>Features: <input id='features' type='text' name='features' style='width:70%' colspan='2'" + 
-    " title='Specify initial features separated by commas.'/></th>" + 
-    "<th colspan='2'>Feature URLs: <input id='featureURLs' type='text' name='featureURLs' style='width:80%' colspan='2'" + 
-    " title='Specify additional feature URLs separate by commas.'/></th>" +
-    "<th class='col_Actions'><input type='button' value='Create' onclick='createInstance()'/></th>" +
-    "</tr></thead></table></div></form>";
-    $("#plugin_content").append( txt );
-    renderTable( "Karaf Instances", "instances_table", ["Pid", "Name", "SSH Port", "RMI Registry Port", "RMI Server Port", "State", "JavaOpts", "Location", "Actions"] );
-    renderStatusLine();
-}
-
-function createInstance() {
-    var name = document.getElementById( "name" ).value;
-    var sshPort = document.getElementById( "sshPort" ).value;
-    var rmiRegistryPort = document.getElementById("rmiRegistryPort").value;
-    var rmiServerPort = document.getElementById("rmiServerPort").value;
-    var location = document.getElementById( "location" ).value;
-    var javaOpts = document.getElementById( "javaOpts" ).value;
-    var features = document.getElementById( "features" ).value;
-    var featureURLs = document.getElementById( "featureURLs" ).value;
-    postCreateInstance( name, sshPort, rmiRegistryPort, rmiServerPort, location, javaOpts, features, featureURLs );
-}
-
-function postCreateInstance( /* String */ name, /* String */ sshPort, /* String */ rmiRegistryPort, /* String */ rmiServerPort,  /* String */ location,
-		/* String */ javaOpts, /* String */ features, /* String */ featureURLs ) {
-    $.post( pluginRoot, {"action": "create", "name": name, "sshPort": sshPort, "rmiRegistryPort": rmiRegistryPort, "rmiServerPort": rmiServerPort, "location": location,
-                             "javaOpts": javaOpts, "features": features, "featureURLs": featureURLs }, function( data ) {
-        renderData( data );
-    }, "json" );
-}
-
-function renderStatusLine() {
-    $("#plugin_content").append( "<div class='fullwidth'><div class='statusline'/></div>" );
-}
-
-function renderTable( /* String */ title, /* String */ id, /* array of Strings */ columns ) {
-    var txt = "<table class='ui-widget-header nicetable noauto ui-widget'><thead><tr>" +
-    "<th>" +
-    title + "</th></tr></thead></table>" +
-    "<table id='" + id + "' class='tablesorter nicetable noauto ui-widget'><thead><tr>";
-    for ( var name in columns ) {
-        txt = txt + "<th class='col_" + columns[name] + " ui-widget-header header' >" + columns[name] + "</th>";
-    }
-    txt = txt + "</tr></thead><tbody></tbody></table>";
-    $("#plugin_content").append( txt );
-}
-
-function renderData( /* Object */ data ) {
-    renderStatusData( data.status );
-    renderInstancesTableData( data.instances );
-    $("#instances_table").tablesorter( {
-        headers: {
-            5: { 
-                sorter: false
-            }
-        },
-        sortList: [[0,0]],
-    } );
-}
-
-function renderStatusData( /* String */ status )  {
-    $(".statusline").empty().append( status );
-}
-
-function renderInstancesTableData( /* array of Objects */ instances ) {
-    $("#instances_table > tbody > tr").remove();
-    for ( var idx in instances ) {
-        var trElement = tr( null, { 
-            id: instances[idx].pid
-        } );
-        renderInstanceData( trElement, instances[idx] );
-        $("#instances_table > tbody").append( trElement );
-    }
-    $("#instances_table").trigger( "update" );
-}
-
-function renderInstanceData( /* Element */ parent, /* Object */ instance ) {
-    parent.appendChild( td( null, null, [ text( instance.pid ) ] ) );
-    parent.appendChild( td( null, null, [ text( instance.name ) ] ) );
-    parent.appendChild( td( null, null, [ text( instance.sshPort ) ] ) );
-    parent.appendChild( td( null, null, [ text( instance.rmiRegistryPort ) ] ) );
-    parent.appendChild( td( null, null, [ text( instance.rmiServerPort ) ] ) );
-    parent.appendChild( td( null, null, [ text( instance.state ) ] ) );
-    parent.appendChild( td( null, null, [ text( instance.location ) ] ) );
-    parent.appendChild( td( null, null, [ text( instance.javaOpts ) ] ) );
-    var actionsTd = td( null, null );
-    var div = createElement( "div", null, {
-        style: { 
-            "text-align": "left"
-        }
-    } );
-    actionsTd.appendChild( div );
-
-    for ( var a in instance.actions ) {
-        instanceButton( div, instance.name, instance.actions[a] );
-    }
-    parent.appendChild( actionsTd );
-}
-
-function instanceButton( /* Element */ parent, /* String */ name, /* Obj */ action ) {
-    var input = createElement( "input", null, {
-        type: 'image',
-        style: {
-            "margin-left": "10px"
-        },
-        title: action.title,
-        alt: action.title,
-        src: imgRoot + '/bundle_' + action.image + '.png'
-    } );
-    $(input).click( function() {
-        changeInstanceState( action.op, name )
-    } );
-    parent.appendChild( input );
-}
-
-function changeInstanceState( /* String */ action, /* String */ name) {
-    $.post( pluginRoot, {
-        "action": action,
-        "name": name
-    }, function( data ) {
-        renderData( data );
-    }, "json" );
-}
-
-
diff --git a/karaf-2.3.x/webconsole/admin/src/test/java/org/apache/karaf/webconsole/admin/AdminPluginTest.java b/karaf-2.3.x/webconsole/admin/src/test/java/org/apache/karaf/webconsole/admin/AdminPluginTest.java
deleted file mode 100644
index 7b777de..0000000
--- a/karaf-2.3.x/webconsole/admin/src/test/java/org/apache/karaf/webconsole/admin/AdminPluginTest.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.webconsole.admin;
-
-import java.io.ByteArrayOutputStream;
-import java.io.PrintWriter;
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import junit.framework.TestCase;
-
-import org.apache.karaf.admin.AdminService;
-import org.apache.karaf.admin.Instance;
-import org.apache.karaf.admin.InstanceSettings;
-import org.easymock.EasyMock;
-import org.easymock.IAnswer;
-
-public class AdminPluginTest extends TestCase {
-    public void testParseStringList() throws Exception {
-        assertEquals(Arrays.asList("a", "b"), testParseStringList(" a ,b"));
-        assertEquals(Collections.emptyList(), testParseStringList(null));
-        assertEquals(Arrays.asList("hello"), testParseStringList("hello"));
-        assertEquals(Arrays.asList("b"), testParseStringList(",b,"));
-    }
-    
-    @SuppressWarnings("unchecked")
-    private List<String> testParseStringList(String s) throws Exception {
-        AdminPlugin ap = new AdminPlugin();
-        Method m = ap.getClass().getDeclaredMethod("parseStringList", new Class [] {String.class});
-        m.setAccessible(true);
-        return (List<String>) m.invoke(ap, s);
-    }
-    
-    public void testDoPostCreate() throws Exception {
-        InstanceSettings is = 
-            new InstanceSettings(123, 456, 789,  null, null, Collections.singletonList("http://someURL"), Arrays.asList("abc", "def"));
-        AdminService adminService = EasyMock.createMock(AdminService.class);
-        EasyMock.expect(adminService.createInstance("instance1", is)).andReturn(null);
-        EasyMock.expect(adminService.getInstances()).andReturn(new Instance[] {}).anyTimes();
-        EasyMock.replay(adminService);
-        
-        AdminPlugin ap = new AdminPlugin();
-        ap.setAdminService(adminService);
-
-        final Map<String, String> params = new HashMap<String, String>();
-        params.put("action", "create");
-        params.put("name", "instance1");
-        params.put("sshPort", "123");
-        params.put("rmiRegistryPort", "456");
-        params.put("rmiServerPort", "789");
-        params.put("featureURLs", "http://someURL");
-        params.put("features", "abc,def");
-        HttpServletRequest req = EasyMock.createMock(HttpServletRequest.class);
-        EasyMock.expect(req.getParameter((String) EasyMock.anyObject())).andAnswer(new IAnswer<String>() {
-            public String answer() throws Throwable {
-                return params.get(EasyMock.getCurrentArguments()[0]);
-            }
-        }).anyTimes();
-        
-        HttpServletResponse res = EasyMock.createNiceMock(HttpServletResponse.class);
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        PrintWriter pw = new PrintWriter(baos);
-        EasyMock.expect(res.getWriter()).andReturn(pw);
-        
-        EasyMock.replay(req);
-        EasyMock.replay(res);
-        ap.doPost(req, res);        
-        EasyMock.verify(adminService);
-        
-        // Check that the operation has succeeded. This will cause some information to be written to 
-        // the outputstream...
-        pw.flush();
-        String s = new String(baos.toByteArray());
-        assertTrue(s.contains("instance"));
-    }
-}
diff --git a/karaf-2.3.x/webconsole/branding/NOTICE b/karaf-2.3.x/webconsole/branding/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/webconsole/branding/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/webconsole/branding/pom.xml b/karaf-2.3.x/webconsole/branding/pom.xml
deleted file mode 100644
index 18d7302..0000000
--- a/karaf-2.3.x/webconsole/branding/pom.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-  
-    <parent>
-        <groupId>org.apache.karaf.webconsole</groupId>
-        <artifactId>webconsole</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.webconsole.branding</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Web Console :: Branding</name>
-    <description>This bundle provides Karaf branding for the Felix web console.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-          <groupId>org.apache.karaf.webconsole</groupId>
-          <artifactId>org.apache.karaf.webconsole.console</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.webconsole</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <version>${felix.plugin.version}</version>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Bundle-DocURL>http://felix.apache.org/site/apache-karaf.html</Bundle-DocURL>
-                        <Fragment-Host>org.apache.karaf.webconsole.console;bundle-version="[2,3)"</Fragment-Host>
-                        <Export-Package>!*</Export-Package>
-                        <Import-Package>
-                            javax.servlet;version=2.4,
-                            javax.servlet.http;version=2.4,
-                            !org.apache.felix.webconsole*,*
-                        </Import-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/webconsole/branding/src/main/java/org/apache/karaf/webconsole/JaasSecurityProvider.java b/karaf-2.3.x/webconsole/branding/src/main/java/org/apache/karaf/webconsole/JaasSecurityProvider.java
deleted file mode 100644
index ee8e30c..0000000
--- a/karaf-2.3.x/webconsole/branding/src/main/java/org/apache/karaf/webconsole/JaasSecurityProvider.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.webconsole;
-
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.security.GeneralSecurityException;
-import java.security.Principal;
-import javax.security.auth.Subject;
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.NameCallback;
-import javax.security.auth.callback.PasswordCallback;
-import javax.security.auth.callback.UnsupportedCallbackException;
-import javax.security.auth.login.AccountException;
-import javax.security.auth.login.FailedLoginException;
-import javax.security.auth.login.LoginContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.felix.webconsole.WebConsoleSecurityProvider2;
-import org.apache.felix.webconsole.internal.KarafOsgiManager;
-import org.apache.felix.webconsole.internal.servlet.Base64;
-import org.osgi.service.http.HttpContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class JaasSecurityProvider implements WebConsoleSecurityProvider2 {
-
-	private static final Logger LOG = LoggerFactory.getLogger(JaasSecurityProvider.class);
-
-    private static final String HEADER_WWW_AUTHENTICATE = "WWW-Authenticate";
-
-    private static final String HEADER_AUTHORIZATION = "Authorization";
-
-    private static final String AUTHENTICATION_SCHEME_BASIC = "Basic";
-
-    private String realm;
-    private String role;
-
-    public String getRealm() {
-        return realm;
-    }
-
-    public void setRealm(String realm) {
-        this.realm = realm;
-    }
-
-    public String getRole() {
-        return role;
-    }
-
-    public void setRole(String role) {
-        this.role = role;
-    }
-
-    public Object authenticate(final String username, final String password) {
-        return doAuthenticate( username, password );
-    }
-
-    public Subject doAuthenticate(final String username, final String password) {
-        try {
-            Subject subject = new Subject();
-            LoginContext loginContext = new LoginContext(realm, subject, new CallbackHandler() {
-                public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
-                    for (int i = 0; i < callbacks.length; i++) {
-                        if (callbacks[i] instanceof NameCallback) {
-                            ((NameCallback) callbacks[i]).setName(username);
-                        } else if (callbacks[i] instanceof PasswordCallback) {
-                            ((PasswordCallback) callbacks[i]).setPassword(password.toCharArray());
-                        } else {
-                            throw new UnsupportedCallbackException(callbacks[i]);
-                        }
-                    }
-                }
-            });
-            loginContext.login();
-            if (role != null && role.length() > 0) {
-                String clazz = "org.apache.karaf.jaas.boot.principal.RolePrincipal";
-                String name = role;
-                int idx = role.indexOf(':');
-                if (idx > 0) {
-                    clazz = role.substring(0, idx);
-                    name = role.substring(idx + 1);
-                }
-                boolean found = false;
-                for (Principal p : subject.getPrincipals()) {
-                    if (p.getClass().getName().equals(clazz)
-                            && p.getName().equals(name)) {
-                        found = true;
-                        break;
-                    }
-                }
-                if (!found) {
-                    throw new FailedLoginException("User does not have the required role " + role);
-                }
-            }
-            return subject;
-        } catch (FailedLoginException e) {
-            LOG.debug("Login failed", e);
-            return null;
-        } catch (AccountException e) {
-            LOG.warn("Account failure", e);
-            return null;
-        } catch (GeneralSecurityException e) {
-            LOG.error("General Security Exception", e);
-            return null;
-        }
-    }
-
-    public boolean authorize(Object o, String s) {
-        return true;
-    }
-
-    public boolean authenticate( HttpServletRequest request, HttpServletResponse response )
-    {
-        // Return immediately if the header is missing
-        String authHeader = request.getHeader( HEADER_AUTHORIZATION );
-        if ( authHeader != null && authHeader.length() > 0 )
-        {
-
-            // Get the authType (Basic, Digest) and authInfo (user/password)
-            // from the header
-            authHeader = authHeader.trim();
-            int blank = authHeader.indexOf( ' ' );
-            if ( blank > 0 )
-            {
-                String authType = authHeader.substring( 0, blank );
-                String authInfo = authHeader.substring( blank ).trim();
-
-                // Check whether authorization type matches
-                if ( authType.equalsIgnoreCase( AUTHENTICATION_SCHEME_BASIC ) )
-                {
-                    try
-                    {
-                        String srcString = base64Decode( authInfo );
-                        int i = srcString.indexOf( ':' );
-                        String username = srcString.substring( 0, i );
-                        String password = srcString.substring( i + 1 );
-
-                        // authenticate
-                        Subject subject = doAuthenticate( username, password );
-                        if ( subject != null )
-                        {
-                            // as per the spec, set attributes
-                            request.setAttribute( HttpContext.AUTHENTICATION_TYPE, HttpServletRequest.BASIC_AUTH );
-                            request.setAttribute( HttpContext.REMOTE_USER, username );
-
-                            // set web console user attribute
-                            request.setAttribute( WebConsoleSecurityProvider2.USER_ATTRIBUTE, username );
-
-                            // set the JAAS subject
-                            request.setAttribute( KarafOsgiManager.SUBJECT_RUN_AS, subject );
-
-                            // succeed
-                            return true;
-                        }
-                    }
-                    catch ( Exception e )
-                    {
-                        // Ignore
-                    }
-                }
-            }
-        }
-
-        // request authentication
-        try
-        {
-            response.setHeader( HEADER_WWW_AUTHENTICATE, AUTHENTICATION_SCHEME_BASIC + " realm=\"" + this.realm + "\"" );
-            response.setStatus( HttpServletResponse.SC_UNAUTHORIZED );
-            response.setContentLength( 0 );
-            response.flushBuffer();
-        }
-        catch ( IOException ioe )
-        {
-            // failed sending the response ... cannot do anything about it
-        }
-
-        // inform HttpService that authentication failed
-        return false;
-    }
-
-
-    private static String base64Decode( String srcString )
-    {
-        byte[] transformed = Base64.decodeBase64(srcString);
-        try
-        {
-            return new String( transformed, "ISO-8859-1" );
-        }
-        catch ( UnsupportedEncodingException uee )
-        {
-            return new String( transformed );
-        }
-    }
-
-
-}
diff --git a/karaf-2.3.x/webconsole/branding/src/main/resources/META-INF/webconsole.properties b/karaf-2.3.x/webconsole/branding/src/main/resources/META-INF/webconsole.properties
deleted file mode 100644
index afdb30e..0000000
--- a/karaf-2.3.x/webconsole/branding/src/main/resources/META-INF/webconsole.properties
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-#  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.
-#
-
-
-#
-# This file contains branding properties to overwrite the default
-# branding of the Apache Felix Web Console when deployed in an
-# Apache Karaf application.
-
-
-webconsole.brand.name = Apache Karaf Web Console
-
-webconsole.product.name = Apache Karaf
-webconsole.product.url = http://karaf.apache.org/
-webconsole.product.image = /res/karaf/imgs/logo.png
-
-webconsole.vendor.name = The Apache Software Foundation
-webconsole.vendor.url = http://www.apache.org
-webconsole.vendor.image = /res/karaf/imgs/logo.png
-
-webconsole.favicon = /res/karaf/imgs/favicon.ico
-webconsole.stylesheet = /res/karaf/ui/webconsole.css
diff --git a/karaf-2.3.x/webconsole/branding/src/main/resources/OSGI-INF/blueprint/webconsole.xml b/karaf-2.3.x/webconsole/branding/src/main/resources/OSGI-INF/blueprint/webconsole.xml
deleted file mode 100644
index cf5abad..0000000
--- a/karaf-2.3.x/webconsole/branding/src/main/resources/OSGI-INF/blueprint/webconsole.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
-           xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"
-           default-activation="lazy">
-
-    <ext:property-placeholder placeholder-prefix="$[" placeholder-suffix="]">
-        <ext:default-properties>
-            <ext:property name="karaf.admin.role" value="admin" />
-        </ext:default-properties>
-    </ext:property-placeholder>
-
-
-    <cm:property-placeholder persistent-id="org.apache.karaf.webconsole">
-        <cm:default-properties>
-            <cm:property name="realm" value="karaf"/>
-            <cm:property name="role" value="$[karaf.admin.role]"/>
-        </cm:default-properties>
-    </cm:property-placeholder>
-
-    <bean id="securityProvider" class="org.apache.karaf.webconsole.JaasSecurityProvider">
-        <property name="realm" value="${realm}"/>
-        <property name="role" value="${role}"/>
-    </bean>
-
-    <service auto-export="interfaces" ref="securityProvider" />
-
-</blueprint>
diff --git a/karaf-2.3.x/webconsole/branding/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/webconsole/branding/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index ee2c5bd..0000000
--- a/karaf-2.3.x/webconsole/branding/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,15 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    Apache Karaf branding for the Apache Felix Web Console. This fragment attaches to the
-    org.apache.felix.webconsole bundle to provide branding through the
-    /META-INF/webconsole.properties.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mWeb console\u001B[0m section in the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/webconsole/branding/src/main/resources/OSGI-INF/metatype/metatype.properties b/karaf-2.3.x/webconsole/branding/src/main/resources/OSGI-INF/metatype/metatype.properties
deleted file mode 100644
index f2fddfb..0000000
--- a/karaf-2.3.x/webconsole/branding/src/main/resources/OSGI-INF/metatype/metatype.properties
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-#  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.
-#
-
-#
-# This file contains localization strings for configuration labels and
-# descriptions as used in the metatype.xml descriptor
-
-webconsole.name = Apache Karaf WebConsole
-webconsole.description = Configuration of Apache Karaf WebConsole
-
-realm.name = Realm
-realm.description = The JAAS realm name to use for authentication
diff --git a/karaf-2.3.x/webconsole/branding/src/main/resources/OSGI-INF/metatype/metatype.xml b/karaf-2.3.x/webconsole/branding/src/main/resources/OSGI-INF/metatype/metatype.xml
deleted file mode 100644
index f6abcfd..0000000
--- a/karaf-2.3.x/webconsole/branding/src/main/resources/OSGI-INF/metatype/metatype.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?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.
-
--->
-<metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.0.0" localization="OSGI-INF/metatype/metatype">
-    <OCD id="org.apache.karaf.webconsole" name="%webconsole.name" description="%webconsole.description">
-        <AD id="realm" type="String" default="karaf" name="%realm.name" description="%realm.description"/>
-    </OCD>
-    <Designate pid="org.apache.karaf.webconsole">
-        <Object ocdref="org.apache.karaf.webconsole"/>
-    </Designate>
-</metatype:MetaData>
diff --git a/karaf-2.3.x/webconsole/branding/src/main/resources/res/karaf/imgs/favicon.ico b/karaf-2.3.x/webconsole/branding/src/main/resources/res/karaf/imgs/favicon.ico
deleted file mode 100644
index cb02612..0000000
--- a/karaf-2.3.x/webconsole/branding/src/main/resources/res/karaf/imgs/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/webconsole/branding/src/main/resources/res/karaf/imgs/logo.png b/karaf-2.3.x/webconsole/branding/src/main/resources/res/karaf/imgs/logo.png
deleted file mode 100644
index 066ab86..0000000
--- a/karaf-2.3.x/webconsole/branding/src/main/resources/res/karaf/imgs/logo.png
+++ /dev/null
Binary files differ
diff --git a/karaf-2.3.x/webconsole/branding/src/main/resources/res/karaf/ui/webconsole.css b/karaf-2.3.x/webconsole/branding/src/main/resources/res/karaf/ui/webconsole.css
deleted file mode 100644
index a31e6bc..0000000
--- a/karaf-2.3.x/webconsole/branding/src/main/resources/res/karaf/ui/webconsole.css
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * 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.
- */
-
-/*
- * The webconsole.css is the main CSS which sets up the following parts
- *
- *   div main -> outermost div just inside body
- *   div lead -> the page lead with title and logo
- *   div technav -> the top navigation
- *   div content -> the div surrounding the content being rendered by
- *      the plugin in the renderContent (or service) method
- *
- * See also http://felix.apache.org/site/branding-the-web-console.html
- */
-#main {
-	width: 90% !important;
-	margin-left: 5%;
-}
-#main img { border: none }
-
-
-/* LOGO & BRANDING */
-#lead {
-	padding-top: 10px;
-	margin: 0;
-	height: 73px; /* must be the same as logo (#lead p) height */
-}
-#lead h1 { /* This contains the page title */
-	font-size: 26px;
-	font-weight: bold;
-	float: left;
-}
-#lead p { /* This contains the logo */
-	float: right;
-	height: 73px; /* must be the same as #lead height */
-}
-#lead p img { /* This is the logo */
-	height: 63px; /* must be #lead.height - #lead.padding-top */
-}
-
-
-/* TOP NAVIGATION */
-#technav {
-	font-size: 10px;
-	line-height: 21px;
-	padding: 0;
-	margin: 0;
-}
-#technav div {
-	display: inline;
-	padding: .2em 1em;
-	white-space: nowrap;
-}
-
-/* CENTRAL CONTENT AREA STYLING */
-#content, .ui-widget, .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-size: 8pt }
-
-
-/* used in some plugins - showing ID (long) element in tables */
-.col_Id {
-	width: 5em;
-}
-
-/* styling button groups like in the bundles & log plugins */
-.buttonGroup {
-	text-align: right;
-	padding: .5em 1em .5em 0;
-	vertical-align: middle;
-}
-.buttonGroup select {
-	display: inline;
-	float: none;
-	margin: 0;
-}
-
-/* The following styles are not complete. They usually apply only padding,
- * margin... mostly *WHERE* the elements are visualised. Visual styling like
- * colors and fonts are applied automatically by a JavaScript that borrows
- * the visual element styles from the JQuery UI theme
- */
-
-/* input box, checkbox & buttons styling */
-.inputText, input.text, input.password, input.file, textarea, select {
-	color: #184054;
-	background-color: #f0f0f0;
-}
-.inputText, input.text, input.password, textarea {
-	border: 1px solid #999999;
-	border-bottom: 1px solid #cccccc;
-	border-right: 1px solid #cccccc;
-}
-
-/* tables styling - must be in synch with tablesorter CSS */
-td, th { vertical-align: top }
-table.nicetable {
-	width: 100%;
-	text-align: left;
-}
-table.nicetable th, table.nicetable td {
-	border-bottom: 1px solid #cccccc;
-	text-align: left;
-	padding: .2em;
-	padding-left: .8em;
-}
-
-/* tablesorter styling */
-tr .header {
-	background-image: url(../lib/bg.gif);
-	background-repeat: no-repeat;
-	background-position: center right;
-	cursor: pointer;
-}
-tr .headerSortUp {
-	background-image: url(../lib/asc.gif);
-}
-tr .headerSortDown {
-	background-image: url(../lib/desc.gif);
-}
-
-/* status line */
-.statline {
-	margin-top: .5em !important;
-	margin-bottom: .5em !important;
-	padding: .2em;
-}
-
-/* zebra tables */
-.even {
-	/* default background unmodified from JQuery UI Theme */
-}
-
-.odd {
-	/* overwrite background from JQuery UI Theme */
-	background: none !important;
-}
-
-/*
- * Common UI style to define button icons like in bundles plugin. The HTML markup is:
- * <ul class="icons ui-widget">
- *   <li class="dynhover" title="tooltip comes here"><span class="ui-icon ui-icon-refresh">&nbsp;</span></li>
- * </ul>
- */
-ul.icons {
-	margin: 0;
-	padding: 0
-}
-ul.icons span.ui-icon {
-	float: left;
-	margin: 0 1px
-}
-ul.icons li {
-	margin: 1px;
-	position: relative;
-	padding: 1px 0;
-	cursor: pointer;
-	float: left;
-	list-style: none
-}
-/* language selection element */
-#langSelect { position: absolute;	top: 5px; right: 5px }
-#langSelect img   { display: block; padding: 2px 0 }
diff --git a/karaf-2.3.x/webconsole/console/NOTICE b/karaf-2.3.x/webconsole/console/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/webconsole/console/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/webconsole/console/pom.xml b/karaf-2.3.x/webconsole/console/pom.xml
deleted file mode 100644
index fc72eaf..0000000
--- a/karaf-2.3.x/webconsole/console/pom.xml
+++ /dev/null
@@ -1,174 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-  
-    <parent>
-        <groupId>org.apache.karaf.webconsole</groupId>
-        <artifactId>webconsole</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.webconsole.console</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Web Console :: Console</name>
-    <description>This bundle is a repackaging of the Felix Web console with small security related changed.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-          <groupId>org.apache.geronimo.specs</groupId>
-          <artifactId>geronimo-servlet_2.5_spec</artifactId>
-        </dependency>
-        <dependency>
-          <groupId>org.osgi</groupId>
-          <artifactId>org.osgi.core</artifactId>
-        </dependency>
-        <dependency>
-          <groupId>org.osgi</groupId>
-          <artifactId>org.osgi.compendium</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.webconsole</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>commons-fileupload</groupId>
-            <artifactId>commons-fileupload</artifactId>
-            <version>1.2.2</version>
-            <scope>provided</scope>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.json</groupId>
-            <artifactId>json</artifactId>
-            <version>20070829</version>
-            <scope>provided</scope>
-            <optional>true</optional>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <version>${felix.plugin.version}</version>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Bundle-SymbolicName>
-                            ${project.artifactId}
-                        </Bundle-SymbolicName>
-                        <Bundle-Vendor>
-                            The Apache Software Foundation
-                        </Bundle-Vendor>
-                        <Bundle-DocURL>
-                            http://felix.apache.org/site/apache-felix-web-console.html
-                        </Bundle-DocURL>
-                        <Bundle-Activator>
-                            org.apache.felix.webconsole.internal.KarafOsgiManagerActivator
-                        </Bundle-Activator>
-                        <Export-Package>
-                            org.apache.felix.webconsole;version=${felix.webconsole.version}
-                        </Export-Package>
-                        <Private-Package>
-                            !org.apache.felix.webconsole,
-                            org.apache.felix.webconsole.*;-split-package:=merge-first
-                        </Private-Package>
-                        <Import-Package>
-                            org.osgi.service.metatype;version=1.0,
-                            org.apache.felix.scr;version=1.0;resolution:=optional,
-                            org.osgi.service.http,
-                            org.apache.felix.shell;
-                            org.osgi.service.*;resolution:=optional,
-                            javax.portlet;resolution:=optional,
-                            javax.servlet.*;version=2.4,
-                            *
-                        </Import-Package>
-                        <DynamicImport-Package>
-                            org.apache.felix.bundlerepository,
-                            org.osgi.service.obr
-                        </DynamicImport-Package>
-                        <Embed-Dependency>
-                            <!-- Webconsole -->
-                            org.apache.felix.webconsole;inline=**,
-
-                            <!-- Import/Export-Package parsing -->
-                            org.apache.felix.utils;inline=org/apache/felix/utils/manifest/**,
-                            org.apache.felix.framework;inline=org/apache/felix/framework/util/VersionRange**,
-
-                            <!-- ServiceTracker -->
-                            org.osgi.compendium;
-                                inline=org/osgi/util/tracker/*,
-
-                            <!-- Required for JSON data transfer -->
-                            json,
-
-                            <!-- File Upload functionality -->
-                            commons-fileupload,
-
-                            <!-- Required by FileUpload and Util -->
-                            commons-io
-                        </Embed-Dependency>
-
-                        <_removeheaders>
-                            Embed-Dependency,Private-Package,Include-Resource
-                        </_removeheaders>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/webconsole/console/src/main/java/org/apache/felix/webconsole/internal/KarafOsgiManager.java b/karaf-2.3.x/webconsole/console/src/main/java/org/apache/felix/webconsole/internal/KarafOsgiManager.java
deleted file mode 100644
index 5b40d56..0000000
--- a/karaf-2.3.x/webconsole/console/src/main/java/org/apache/felix/webconsole/internal/KarafOsgiManager.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * 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.
- */
-package org.apache.felix.webconsole.internal;
-
-import java.io.IOException;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import javax.security.auth.Subject;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-
-import org.apache.felix.webconsole.internal.servlet.OsgiManager;
-import org.osgi.framework.BundleContext;
-
-public class KarafOsgiManager extends OsgiManager {
-
-    public static final String SUBJECT_RUN_AS = "karaf.subject.runas";
-
-    public KarafOsgiManager(BundleContext bundleContext) {
-        super(bundleContext);
-    }
-
-    @Override
-    public void service(final ServletRequest req, final ServletResponse res) throws ServletException, IOException {
-        Object obj = req.getAttribute(SUBJECT_RUN_AS);
-        if (obj instanceof Subject) {
-            try {
-                Subject.doAs((Subject) obj, new PrivilegedExceptionAction<Object>() {
-                    public Object run() throws Exception {
-                        doService(req, res);
-                        return null;
-                    }
-                });
-            } catch (PrivilegedActionException e) {
-                Exception cause = e.getException();
-                if (cause instanceof ServletException) {
-                    throw (ServletException) cause;
-                }
-                if (cause instanceof IOException) {
-                    throw (IOException) cause;
-                }
-                throw new ServletException(cause);
-            }
-        } else {
-            super.service(req, res);
-        }
-    }
-
-    protected void doService(final ServletRequest req, final ServletResponse res) throws ServletException, IOException {
-        super.service(req, res);
-    }
-}
diff --git a/karaf-2.3.x/webconsole/console/src/main/java/org/apache/felix/webconsole/internal/KarafOsgiManagerActivator.java b/karaf-2.3.x/webconsole/console/src/main/java/org/apache/felix/webconsole/internal/KarafOsgiManagerActivator.java
deleted file mode 100644
index 2d4b49e..0000000
--- a/karaf-2.3.x/webconsole/console/src/main/java/org/apache/felix/webconsole/internal/KarafOsgiManagerActivator.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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.
- */
-package org.apache.felix.webconsole.internal;
-
-
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-
-
-/**
- * This is the main, starting class of the Bundle. It initializes and disposes
- * the Apache Web Console upon bundle lifecycle requests.
- */
-public class KarafOsgiManagerActivator implements BundleActivator
-{
-
-    private KarafOsgiManager osgiManager;
-
-
-    /**
-     * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
-     */
-    public void start( BundleContext bundleContext )
-    {
-        osgiManager = new KarafOsgiManager( bundleContext );
-    }
-
-
-    /**
-     * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
-     */
-    public void stop( BundleContext arg0 )
-    {
-        if ( osgiManager != null )
-        {
-            osgiManager.dispose();
-        }
-    }
-
-}
diff --git a/karaf-2.3.x/webconsole/console/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/webconsole/console/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index 48a3e63..0000000
--- a/karaf-2.3.x/webconsole/console/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,14 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides a rebundled Apache Felix Web Console with some changes around
-    security.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mWeb console\u001B[0m section of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/webconsole/features/NOTICE b/karaf-2.3.x/webconsole/features/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/webconsole/features/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/webconsole/features/pom.xml b/karaf-2.3.x/webconsole/features/pom.xml
deleted file mode 100644
index e3b590f..0000000
--- a/karaf-2.3.x/webconsole/features/pom.xml
+++ /dev/null
@@ -1,116 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.webconsole</groupId>
-        <artifactId>webconsole</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.webconsole.features</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Web Console :: Features Plugin</name>
-    <description>This bundle provides Karaf features plugin for the Web Console.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.webconsole</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.features</groupId>
-            <artifactId>org.apache.karaf.features.core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicemix.bundles</groupId>
-            <artifactId>org.apache.servicemix.bundles.junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.json</groupId>
-            <artifactId>json</artifactId>
-            <version>20070829</version>
-            <scope>compile</scope>
-            <optional>true</optional>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            org.apache.felix.webconsole*;version="[3,5)",
-                            *
-                        </Import-Package>
-                        <Embed-Dependency>
-                            <!-- Required for JSON data transfer -->
-                            <!-- TODO: this needs to be put in a common place for reuse. -->
-                            json
-                        </Embed-Dependency>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/webconsole/features/src/main/java/org/apache/karaf/webconsole/features/ExtendedFeature.java b/karaf-2.3.x/webconsole/features/src/main/java/org/apache/karaf/webconsole/features/ExtendedFeature.java
deleted file mode 100644
index 8cac6f9..0000000
--- a/karaf-2.3.x/webconsole/features/src/main/java/org/apache/karaf/webconsole/features/ExtendedFeature.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.webconsole.features;
-
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.karaf.features.BundleInfo;
-import org.apache.karaf.features.ConfigFileInfo;
-import org.apache.karaf.features.Feature;
-
-
-/**
- * 
- */
-public class ExtendedFeature implements Feature
-{
-
-    public enum State
-    {
-        INSTALLED, UNINSTALLED;
-
-        @Override
-        public String toString()
-        {
-            //only capitalize the first letter
-            String s = super.toString();
-            return s.substring( 0, 1 ) + s.substring( 1 ).toLowerCase();
-        }
-    };
-
-    protected State state;
-    protected String repository;
-    protected Feature feature;
-
-
-    //
-    // Constructors
-    //
-
-    public ExtendedFeature( State state, String repository, Feature feature )
-    {
-        this.state = state;
-        this.repository = repository;
-        this.feature = feature;
-    }
-
-
-    //
-    // Feature interface
-    //
-
-
-    public List<BundleInfo> getBundles()
-    {
-        return this.feature.getBundles();
-    }
-
-
-    public Map<String, Map<String, String>> getConfigurations()
-    {
-        return this.feature.getConfigurations();
-    }
-
-    public List<ConfigFileInfo> getConfigurationFiles() {
-		return this.feature.getConfigurationFiles();
-	}
-    
-    public List<Feature> getDependencies()
-    {
-        return this.feature.getDependencies();
-    }
-
-
-    public String getId()
-    {
-        return this.feature.getId();
-    }
-
-
-    public String getName()
-    {
-        return this.feature.getName();
-    }
-
-
-    public String getVersion()
-    {
-        return this.feature.getVersion();
-    }
-
-    public String getResolver()
-    {
-        return this.feature.getResolver();
-    }
-
-    public String getDescription() {
-        return this.feature.getDescription();
-    }
-
-    public String getDetails() {
-        return this.feature.getDetails();
-    }
-
-
-    //
-    // Additional methods
-    //
-
-
-    public String getRepository() {
-        return this.repository;
-    }
-
-    public String getInstall() {
-        return feature.getInstall();
-    }
-
-    public State getState() {
-        return this.state;
-    }
-}
diff --git a/karaf-2.3.x/webconsole/features/src/main/java/org/apache/karaf/webconsole/features/FeaturesPlugin.java b/karaf-2.3.x/webconsole/features/src/main/java/org/apache/karaf/webconsole/features/FeaturesPlugin.java
deleted file mode 100644
index 640d0fa..0000000
--- a/karaf-2.3.x/webconsole/features/src/main/java/org/apache/karaf/webconsole/features/FeaturesPlugin.java
+++ /dev/null
@@ -1,553 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.webconsole.features;
-
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.net.URI;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.karaf.features.Feature;
-import org.apache.karaf.features.FeaturesService;
-import org.apache.karaf.features.Repository;
-import org.apache.felix.webconsole.AbstractWebConsolePlugin;
-import org.json.JSONException;
-import org.json.JSONWriter;
-import org.osgi.framework.BundleContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-/**
- * The <code>FeaturesPlugin</code>
- */
-public class FeaturesPlugin extends AbstractWebConsolePlugin
-{
-
-    /** Pseudo class version ID to keep the IDE quite. */
-    private static final long serialVersionUID = 1L;
-
-    private final Logger log = LoggerFactory.getLogger(FeaturesPlugin.class);
-
-    public static final String NAME = "features";
-
-    public static final String LABEL = "Features";
-
-    private ClassLoader classLoader;
-
-    private String featuresJs = "/features/res/ui/features.js";
-
-    private FeaturesService featuresService;
-    
-    private BundleContext bundleContext;
-
-
-    //
-    // Blueprint lifecycle callback methods
-    //
-    
-    public void start()
-    {
-        super.activate( bundleContext );
-
-        this.classLoader = this.getClass().getClassLoader();
-
-        this.log.info( LABEL + " plugin activated" );
-    }
-
-
-    public void stop()
-    {
-        this.log.info( LABEL + " plugin deactivated" );
-        super.deactivate();
-    }
-
-
-    //
-    // AbstractWebConsolePlugin interface
-    //
-
-    public String getLabel()
-    {
-        return NAME;
-    }
-
-
-    public String getTitle()
-    {
-        return LABEL;
-    }
-
-
-    protected void doPost( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException
-    {
-        boolean success = false;
-
-        final String action = req.getParameter( "action" );
-        final String feature = req.getParameter( "feature" );
-        final String version = req.getParameter( "version" );
-        final String url = req.getParameter( "url" );
-
-        if ( action == null )
-        {
-            success = true;
-        }
-        else if ( "installFeature".equals( action ) )
-        {
-            success = this.installFeature(feature, version);
-        }
-        else if ( "uninstallFeature".equals( action ) )
-        {
-            success = this.uninstallFeature( feature, version );
-        }
-        else if ( "refreshRepository".equals( action ) )
-        {
-            success = this.refreshRepository( url );
-        }
-        else if ( "removeRepository".equals( action ) )
-        {
-            success = this.removeRepository( url );
-        }
-        else if ( "addRepository".equals( action ) )
-        {
-            success = this.addRepository( url );
-        }
-
-        if ( success )
-        {
-            // let's wait a little bit to give the framework time
-            // to process our request
-            try
-            {
-                Thread.sleep( 800 );
-            }
-            catch ( InterruptedException e )
-            {
-                // we ignore this
-            }
-            this.renderJSON( resp, null );
-        }
-        else
-        {
-            super.doPost( req, resp );
-        }
-    }
-
-
-    protected void renderContent( HttpServletRequest request, HttpServletResponse response ) throws IOException
-    {
-
-        // get request info from request attribute
-        final PrintWriter pw = response.getWriter();
-
-        String appRoot = ( String ) request
-            .getAttribute( "org.apache.felix.webconsole.internal.servlet.OsgiManager.appRoot" );
-        final String featuresScriptTag = "<script src='" + appRoot + this.featuresJs
-            + "' language='JavaScript'></script>";
-        pw.println( featuresScriptTag );
-
-        pw.println( "<script type='text/javascript'>" );
-        pw.println( "// <![CDATA[" );
-        pw.println( "var imgRoot = '" + appRoot + "/res/imgs';" );
-        pw.println( "// ]]>" );
-        pw.println( "</script>" );
-
-        pw.println( "<div id='plugin_content'/>" );
-
-        pw.println( "<script type='text/javascript'>" );
-        pw.println( "// <![CDATA[" );
-        pw.print( "renderFeatures( " );
-        writeJSON( pw );
-        pw.println( " )" );
-        pw.println( "// ]]>" );
-        pw.println( "</script>" );
-    }
-
-
-    //
-    // Additional methods
-    //
-
-    protected URL getResource( String path )
-    {
-        path = path.substring( NAME.length() + 1 );
-        URL url = this.classLoader.getResource( path );
-        if (url != null) {
-            InputStream ins = null;
-            try {
-                ins = url.openStream();
-                if (ins == null) {
-                    this.log.error("failed to open " + url);
-                    url = null;
-                }
-            } catch (IOException e) {
-                this.log.error(e.getMessage(), e);
-                url = null;
-            } finally {
-                if (ins != null) {
-                    try {
-                        ins.close();
-                    } catch (IOException e) {
-                        this.log.error(e.getMessage(), e);
-                    }
-                }
-            }
-        }
-
-        return url;
-    }
-
-
-    private boolean installFeature(String feature, String version) {
-        boolean success = false;
-        if ( featuresService == null )
-        {
-            this.log.error( "Shell Features service is unavailable." );
-        }
-        try
-        {
-            featuresService.installFeature( feature, version );
-            success = true;
-        }
-        catch ( Exception e )
-        {
-            this.log.error( "failed to install feature: ", e );
-        }
-        return success;
-    }
-
-
-    private boolean uninstallFeature(String feature, String version) {
-        boolean success = false;
-        if ( featuresService == null )
-        {
-            this.log.error( "Shell Features service is unavailable." );
-        }
-        try
-        {
-            featuresService.uninstallFeature( feature, version );
-            success = true;
-        }
-        catch ( Exception e )
-        {
-            this.log.error( "failed to install feature: ", e );
-        }
-        return success;
-    }
-
-
-    private boolean removeRepository(String url) {
-        boolean success = false;
-        if ( featuresService == null )
-        {
-            this.log.error( "Shell Features service is unavailable." );
-        }
-        try
-        {
-            featuresService.removeRepository( new URI( url ) );
-            success = true;
-        }
-        catch ( Exception e )
-        {
-            this.log.error( "failed to install feature: ", e );
-        }
-        return success;
-    }
-
-
-    private boolean refreshRepository(String url) {
-        boolean success = false;
-        if ( featuresService == null )
-        {
-            this.log.error( "Shell Features service is unavailable." );
-        }
-        try
-        {
-            featuresService.removeRepository( new URI( url ) );
-            featuresService.addRepository( new URI( url ) );
-            success = true;
-        }
-        catch ( Exception e )
-        {
-            this.log.error( "failed to install feature: ", e );
-        }
-        return success;
-    }
-
-
-    private boolean addRepository(String url) {
-        boolean success = false;
-        if ( featuresService == null )
-        {
-            this.log.error( "Shell Features service is unavailable." );
-        }
-        try
-        {
-            featuresService.addRepository( new URI( url ) );
-            success = true;
-        }
-        catch ( Exception e )
-        {
-            this.log.error( "failed to install feature: ", e );
-        }
-        return success;
-    }
-
-
-    private void renderJSON( final HttpServletResponse response, final String feature ) throws IOException
-    {
-        response.setContentType( "application/json" );
-        response.setCharacterEncoding( "UTF-8" );
-
-        final PrintWriter pw = response.getWriter();
-        writeJSON( pw );
-    }
-
-
-    private void writeJSON( final PrintWriter pw ) throws IOException
-    {
-        final List<Repository> repositories = this.getRepositories();
-        final List<ExtendedFeature> features = this.getFeatures( repositories );
-        final String statusLine = this.getStatusLine( features );
-
-        final JSONWriter jw = new JSONWriter( pw );
-
-        try
-        {
-            jw.object();
-
-            jw.key( "status" );
-            jw.value( statusLine );
-
-            jw.key( "repositories" );
-            jw.array();
-            for ( Repository r : repositories )
-            {
-                jw.object();
-                jw.key( "name" );
-                jw.value( r.getName() );
-                jw.key( "url" );
-                String uri = r.getURI().toString();
-                jw.value( uri );
-                jw.key( "actions" );
-                jw.array();
-                boolean enable = true;
-                if ( uri.startsWith( "bundle" ) ) {
-                    enable = false;
-                }
-                action( jw, enable, "refreshRepository", "Refresh", "refresh" );
-                action( jw, enable, "removeRepository", "Remove", "delete" );
-                jw.endArray();
-                jw.endObject();
-            }
-            jw.endArray();
-
-            jw.key( "features" );
-            jw.array();
-            for ( ExtendedFeature f : features )
-            {
-                featureInfo( jw, f );
-            }
-            jw.endArray();
-
-            jw.endObject();
-
-        }
-        catch ( JSONException je )
-        {
-            throw new IOException( je.toString() );
-        }
-
-    }
-
-
-    private List<Repository> getRepositories()
-    {
-        List<Repository> repositories = new ArrayList<Repository>();
-
-        if ( featuresService == null )
-        {
-            this.log.error( "Shell Features service is unavailable." );
-            return repositories;
-        }
-
-        try
-        {
-            for ( Repository r : featuresService.listRepositories() ) {
-                repositories.add( r );
-            }
-        }
-        catch ( Exception e )
-        {
-            this.log.error( e.getMessage() );
-        }
-
-        return repositories;
-    }
-
-
-    private List<ExtendedFeature> getFeatures( List<Repository> repositories )
-    {
-        List<ExtendedFeature> features = new ArrayList<ExtendedFeature>();
-
-        if ( featuresService == null )
-        {
-            this.log.error( "Shell Features service is unavailable." );
-            return features;
-        }
-
-        try
-        {
-            for ( Repository r : repositories )
-            {
-                for ( Feature f : r.getFeatures() )
-                {
-                    ExtendedFeature.State state =
-                        featuresService.isInstalled(f) ? ExtendedFeature.State.INSTALLED : ExtendedFeature.State.UNINSTALLED;
-                    features.add( new ExtendedFeature(  state, r.getName(), f ) );
-                }
-            }
-        }
-        catch ( Exception e )
-        {
-            this.log.error( e.getMessage() );
-        }
-
-        Collections.sort( features, new ExtendedFeatureComparator() );
-        return features;
-    }
-
-
-    class ExtendedFeatureComparator implements Comparator<ExtendedFeature>
-    {
-        public int compare( ExtendedFeature o1, ExtendedFeature o2 )
-        {
-            return o1.getName().toLowerCase().compareTo( o2.getName().toLowerCase() );
-        }
-    }
-
-
-    private String getStatusLine( final List<ExtendedFeature> features )
-    {
-        int installed = 0;
-        for ( ExtendedFeature f : features )
-        {
-            if ( f.getState() == ExtendedFeature.State.INSTALLED )
-            {
-                installed++;
-            }
-        }
-        final StringBuffer buffer = new StringBuffer();
-        buffer.append( "Feature information: " );
-        appendFeatureInfoCount( buffer, "in total", features.size() );
-        if ( installed == features.size() )
-        {
-            buffer.append( " - all " );
-            appendFeatureInfoCount( buffer, "active.", features.size() );
-        }
-        else
-        {
-            if ( installed != 0 )
-            {
-                buffer.append( ", " );
-                appendFeatureInfoCount( buffer, "installed", installed );
-            }
-            buffer.append( '.' );
-        }
-        return buffer.toString();
-    }
-
-
-    private void appendFeatureInfoCount( final StringBuffer buf, String msg, int count )
-    {
-        buf.append( count );
-        buf.append( " feature" );
-        if ( count != 1 )
-            buf.append( 's' );
-        buf.append( ' ' );
-        buf.append( msg );
-    }
-
-
-    private void featureInfo( JSONWriter jw, ExtendedFeature feature ) throws JSONException
-    {
-        jw.object();
-        jw.key( "id" );
-        jw.value( feature.getId() );
-        jw.key( "name" );
-        jw.value( feature.getName() );
-        jw.key( "version" );
-        jw.value( feature.getVersion() );
-        jw.key( "repository" );
-        jw.value( feature.getRepository() );
-        jw.key( "state" );
-        ExtendedFeature.State state = feature.getState();
-        jw.value( state.toString() );
-
-        jw.key( "actions" );
-        jw.array();
-
-        if ( state == ExtendedFeature.State.INSTALLED )
-        {
-            action( jw, true, "uninstallFeature", "Uninstall", "delete" );
-        }
-        else if ( state == ExtendedFeature.State.UNINSTALLED )
-        {
-            action( jw, true, "installFeature", "Install", "start" );
-        }
-        jw.endArray();
-
-        jw.endObject();
-    }
-
-
-    private void action( JSONWriter jw, boolean enabled, String op, String title, String image ) throws JSONException
-    {
-        jw.object();
-        jw.key( "enabled" ).value( enabled );
-        jw.key( "op" ).value( op );
-        jw.key( "title" ).value( title );
-        jw.key( "image" ).value( image );
-        jw.endObject();
-    }
-
-
-    //
-    // Dependency Injection setters
-    //
-
-    public void setFeaturesService(FeaturesService featuresService) 
-    {
-        this.featuresService = featuresService;
-    }
-
-
-    public void setBundleContext(BundleContext bundleContext) 
-    {
-        this.bundleContext = bundleContext;
-    }
-}
diff --git a/karaf-2.3.x/webconsole/features/src/main/resources/OSGI-INF/blueprint/webconsole-features.xml b/karaf-2.3.x/webconsole/features/src/main/resources/OSGI-INF/blueprint/webconsole-features.xml
deleted file mode 100644
index 7589531..0000000
--- a/karaf-2.3.x/webconsole/features/src/main/resources/OSGI-INF/blueprint/webconsole-features.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0">
-
-    <reference id="featuresService" interface="org.apache.karaf.features.FeaturesService" />
-
-    <bean id="featuresPlugin" class="org.apache.karaf.webconsole.features.FeaturesPlugin" init-method="start" destroy-method="stop">
-        <property name="featuresService" ref="featuresService" />
-        <property name="bundleContext" ref="blueprintBundleContext" />
-    </bean>
-
-    <service ref="featuresPlugin" interface="javax.servlet.Servlet" >
-        <service-properties>
-            <entry key="felix.webconsole.label" value="features"/>
-        </service-properties>
-    </service>
-
-</blueprint>
diff --git a/karaf-2.3.x/webconsole/features/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/webconsole/features/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index e8bbb2e..0000000
--- a/karaf-2.3.x/webconsole/features/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,13 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides the Karaf features plugin for the Felix Web Console.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mWeb console\u001B[0m section of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/webconsole/features/src/main/resources/res/ui/features.js b/karaf-2.3.x/webconsole/features/src/main/resources/res/ui/features.js
deleted file mode 100644
index c9af6ec..0000000
--- a/karaf-2.3.x/webconsole/features/src/main/resources/res/ui/features.js
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * 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.
- */
-
-function renderFeatures( data ) {
-    $(document).ready( function() {
-        renderView();
-        renderData( data );
-    } );
-}
-
-function renderView() {
-    renderStatusLine();
-    renderTable( "Feature Repositories", "repository_table", ["Name", "URL", "Actions"] );
-    var txt = "<form method='post'><table id='repository_table_footer' class='ui-widget-header nicetable noauto ui-widget'><tbody>" +
-        "<tr><input type='hidden' name='action' value='addRepository'/>" +
-        "<td><input id='url' type='text' name='url' style='width:100%' colspan='2'/></td>" +
-        "<td class='col_Actions'><input type='button' value='Add URL' onclick='addRepositoryUrl()'/></td>" +
-        "</tr></tbody></table></form><br/>";
-    $("#plugin_content").append( txt );
-    renderTable( "Features", "feature_table", ["Name", "Version", "Repository", "Status", "Actions"] );
-    renderStatusLine();
-}
-
-function addRepositoryUrl() {
-    var url = document.getElementById( "url" ).value;
-    changeRepositoryState( "addRepository", url );
-}
-
-function renderStatusLine() {
-    $("#plugin_content").append( "<div class='fullwidth'><div class='statusline'/></div>" );
-}
-
-function renderTable( /* String */ title, /* String */ id, /* array of Strings */ columns ) {
-    var txt = "<div class='ui-widget-header ui-corner-top buttonGroup'><table class='nicetable ui-widget'><thead><tr>" +
-        "<th>" +
-        title + "</th></tr></thead></table></div>" +
-        "<table id='" + id + "' class='nicetable ui-widget'><thead><tr>";
-    for ( var name in columns ) {
-      txt = txt + "<th class='col_" + columns[name] + " ui-widget-header header' >" + columns[name] + "</th>";
-    }
-    txt = txt + "</tr></thead><tbody></tbody></table>";
-    $("#plugin_content").append( txt );
-}
-
-function renderData( /* Object */ data ) {
-    renderStatusData( data.status );
-    renderRepositoryTableData( data.repositories );
-    renderFeatureTableData( data.features );
-    $("#repository_table").tablesorter( {
-        headers: {
-            2: { sorter: false }
-        },
-        sortList: [[0,0]],
-    } );
-    $("#feature_table").tablesorter( {
-        headers: {
-           4: { sorter: false }
-        },
-        sortList: [[0,0]],
-    } );
-}
-
-function renderStatusData( /* String */ status )  {
-    $(".statusline").empty().append( status );
-}
-
-function renderRepositoryTableData( /* array of Objects */ repositories ) {
-    var trElement;
-    var input;
-    var needsLegend = false;
-    $("#repository_table > tbody > tr").remove();
-    for ( var idx in repositories ) {
-        var name = repositories[idx].name;
-        trElement = tr( null, { id: "repository-" + name } );
-        renderRepositoryData( trElement, repositories[idx] );
-        $("#repository_table > tbody").append( trElement );
-        if ( name[ name.length - 1 ] == "*" ) {
-            needsLegend = true;
-        }
-    }
-    $("#repository_table").trigger( "update" );
-    if ( needsLegend ) {
-        trElement = tr( null, null ) ;
-        trElement.appendChild( td( null, { colspan: 3 },
-                                   [ text( "* Installed via deploy directory" ) ] ) );
-        $("#repository_table_footer > tbody").prepend( trElement );
-    }
-    $("#repository_table_footer").trigger( "update" );
-}
-
-function renderRepositoryData( /* Element */ parent, /* Object */ repository ) {
-    parent.appendChild( td( null, null, [ text( repository.name ) ] ) );
-    parent.appendChild( td( null, null, [ text( repository.url ) ] ) );
-
-    var actionsTd = td( null, null );
-    var div = createElement( "div", null, {
-      style: { "text-align": "left"}
-    } );
-    actionsTd.appendChild( div );
-    
-    for ( var a in repository.actions ) {
-      repositoryButton( div, repository.url, repository.actions[a] );
-    }
-    parent.appendChild( actionsTd );
-}
-
-function repositoryButton( /* Element */ parent, /* String */ url, /* Obj */ action ) {
-    if ( !action.enabled ) {
-        return;
-    }
-  
-    var input = createElement( "input", null, {
-        type: 'image',
-        style: {"margin-left": "10px"},
-        title: action.title,
-        alt: action.title,
-        src: imgRoot + '/bundle_' + action.image + '.png'
-    } );
-    $(input).click( function() {changeRepositoryState( action.op, url )} );
-
-    if ( !action.enabled ) {
-        $(input).attr( "disabled", true );
-    }
-    parent.appendChild( input );
-}
-
-function changeRepositoryState( /* String */ action, /* String */ url ) {
-    $.post( pluginRoot, {"action": action, "url": url}, function( data ) {
-        renderData( data );
-    }, "json" ); 
-}
-
-function renderFeatureTableData( /* array of Objects */ features ) {
-    $("#feature_table > tbody > tr").remove();
-    for ( var idx in features ) {
-        var trElement = tr( null, { id: "feature-" + features[idx].id } );
-        renderFeatureData( trElement, features[idx] );
-        $("#feature_table > tbody").append( trElement ); 
-    }
-    $("#feature_table").trigger( "update" );
-}
-
-function renderFeatureData( /* Element */ parent, /* Object */ feature ) {
-    parent.appendChild( td( null, null, [ text( feature.name ) ] ) );
-    parent.appendChild( td( null, null, [ text( feature.version ) ] ) );
-    parent.appendChild( td( null, null, [ text( feature.repository ) ] ) );
-    parent.appendChild( td( null, null, [ text( feature.state ) ] ) );
-    var actionsTd = td( null, null );
-    var div = createElement( "div", null, {
-        style: { "text-align": "left"}
-    } );
-    actionsTd.appendChild( div );
-    
-    for ( var a in feature.actions ) {
-        featureButton( div, feature.name, feature.version, feature.actions[a] );
-    }
-    parent.appendChild( actionsTd );
-}
-
-function featureButton( /* Element */ parent, /* String */ name, /* String */ version, /* Obj */ action ) {
-    if ( !action.enabled ) {
-        return;
-    }
-  
-    var input = createElement( "input", null, {
-        type: 'image',
-        style: {"margin-left": "10px"},
-        title: action.title,
-        alt: action.title,
-        src: imgRoot + '/bundle_' + action.image + '.png'
-    } );
-    $(input).click( function() {changeFeatureState( action.op, name, version )} );
-
-    if ( !action.enabled ) {
-        $(input).attr( "disabled", true );
-    }
-    parent.appendChild( input );
-}
-
-function changeFeatureState( /* String */ action, /* String */ feature, /* String */ version ) {
-    $.post( pluginRoot, {"action": action, "feature": feature, "version": version}, function( data ) {
-        renderData( data );
-    }, "json" ); 
-}
diff --git a/karaf-2.3.x/webconsole/gogo/NOTICE b/karaf-2.3.x/webconsole/gogo/NOTICE
deleted file mode 100644
index 9df772d..0000000
--- a/karaf-2.3.x/webconsole/gogo/NOTICE
+++ /dev/null
@@ -1,71 +0,0 @@
-Apache Karaf

-Copyright 2010-2013 The Apache Software Foundation

-

-

-I. Included Software

-

-This product includes software developed at

-The Apache Software Foundation (http://www.apache.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-The OSGi Alliance (http://www.osgi.org/).

-Copyright (c) OSGi Alliance (2000, 2010).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-OW2 (http://www.ow2.org/).

-Licensed under the BSD License.

-

-This product includes software developed at

-OPS4J (http://www.ops4j.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software developed at

-Eclipse Foundation (http://www.eclipse.org/).

-Licensed under the EPL.

-

-This product includes software written by

-Antony Lesuisse.

-Licensed under Public Domain.

-

-

-II. Used Software

-

-This product uses software developed at

-FUSE Source (http://www.fusesource.org/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-AOP Alliance (http://aopalliance.sourceforge.net/).

-Licensed under Public Domain.

-

-This product uses software developed at

-Tanuki Software (http://www.tanukisoftware.com/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-Jasypt (http://jasypt.sourceforge.net/).

-Licensed under the Apache License 2.0.

-

-This product uses software developed at

-JLine (http://jline.sourceforge.net).

-Licensed under the BSD License.

-

-This product uses software developed at

-SLF4J (http://www.slf4j.org/).

-Licensed under the MIT License.

-

-This product uses software developed at

-SpringSource (http://www.springsource.org/).

-Licensed under the Apache License 2.0.

-

-This product includes software from http://www.json.org.

-Copyright (c) 2002 JSON.org

-

-

-III. License Summary

-- Apache License 2.0

-- BSD License

-- EPL License

-- MIT License

diff --git a/karaf-2.3.x/webconsole/gogo/pom.xml b/karaf-2.3.x/webconsole/gogo/pom.xml
deleted file mode 100644
index a7eb6bb..0000000
--- a/karaf-2.3.x/webconsole/gogo/pom.xml
+++ /dev/null
@@ -1,122 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.webconsole</groupId>
-        <artifactId>webconsole</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>org.apache.karaf.webconsole.gogo</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Karaf :: Web Console :: Gogo Plugin</name>
-    <description>This bundle provides Gogo plugin for the Karaf Web console.</description>
-
-    <properties>
-        <appendedResourcesDirectory>${basedir}/../../etc/appended-resources</appendedResourcesDirectory>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.webconsole</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.servicemix.bundles</groupId>
-            <artifactId>org.apache.servicemix.bundles.junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.json</groupId>
-            <artifactId>json</artifactId>
-            <version>20070829</version>
-            <scope>compile</scope>
-            <optional>true</optional>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>${project.basedir}/src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.info</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            org.apache.felix.webconsole*;version="[3,5)",
-                            jline;version="[${jline.version}, ${jline.version}]",
-                            *
-                        </Import-Package>
-                        <Embed-Dependency>
-                            <!-- Required for JSON data transfer -->
-                            <!-- TODO: this needs to be put in a common place for reuse. -->
-                            json
-                        </Embed-Dependency>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/karaf-2.3.x/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/GogoPlugin.java b/karaf-2.3.x/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/GogoPlugin.java
deleted file mode 100644
index 79829cf..0000000
--- a/karaf-2.3.x/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/GogoPlugin.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * Based on http://antony.lesuisse.org/software/ajaxterm/
- *  Public Domain License
- */
-
-package org.apache.karaf.webconsole.gogo;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.InterruptedIOException;
-import java.io.PipedInputStream;
-import java.io.PipedOutputStream;
-import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.net.URL;
-import java.util.zip.GZIPOutputStream;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.felix.service.command.CommandProcessor;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.karaf.shell.console.jline.Console;
-import org.apache.felix.webconsole.AbstractWebConsolePlugin;
-import org.osgi.framework.BundleContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * The <code>GogoPlugin</code>
- */
-public class GogoPlugin extends AbstractWebConsolePlugin {
-
-    /** Pseudo class version ID to keep the IDE quite. */
-    private static final long serialVersionUID = 1L;
-
-    private final Logger logger = LoggerFactory.getLogger(GogoPlugin.class);
-
-    public static final String NAME = "gogo";
-
-    public static final String LABEL = "Gogo";
-
-    public static final int TERM_WIDTH = 120;
-    public static final int TERM_HEIGHT = 39;
-
-
-
-    private BundleContext bundleContext;
-
-    private CommandProcessor commandProcessor;
-
-    public void setBundleContext(BundleContext bundleContext)
-    {
-        this.bundleContext = bundleContext;
-    }
-
-    public void setCommandProcessor(CommandProcessor commandProcessor)
-    {
-        this.commandProcessor = commandProcessor;
-    }
-
-    /*
-    * Blueprint lifecycle callback methods
-    */
-
-    public void start()
-    {
-        super.activate( bundleContext );
-        this.logger.info( LABEL + " plugin activated" );
-    }
-
-    public void stop()
-    {
-        this.logger.info( LABEL + " plugin deactivated" );
-        super.deactivate();
-    }
-
-    //
-    // AbstractWebConsolePlugin interface
-    //
-    public String getLabel()
-    {
-        return NAME;
-    }
-
-
-    public String getTitle()
-    {
-        return LABEL;
-    }
-
-
-    protected void renderContent( HttpServletRequest request, HttpServletResponse response ) throws IOException
-    {
-        PrintWriter pw = response.getWriter();
-
-        String appRoot = request.getContextPath() + request.getServletPath();
-        pw.println( "<link href=\"" + appRoot + "/gogo/res/ui/gogo.css\" rel=\"stylesheet\" type=\"text/css\" />" );
-        pw.println( "<script src=\"" + appRoot + "/gogo/res/ui/gogo.js\" type=\"text/javascript\"></script>" );
-        pw.println( "<div id='console'><div id='term'></div></div>" );
-        pw.println( "<script type=\"text/javascript\"><!--" );
-        pw.println( "window.onload = function() { gogo.Terminal(document.getElementById(\"term\"), " + TERM_WIDTH + ", " + TERM_HEIGHT + "); }" );
-        pw.println( "--></script>" );
-    }
-
-    protected URL getResource( String path )
-    {
-        path = path.substring( NAME.length() + 1 );
-        URL url = this.getClass().getClassLoader().getResource( path );
-        if (url != null) {
-            InputStream ins = null;
-            try {
-                ins = url.openStream();
-                if (ins == null) {
-                    this.logger.error("failed to open " + url);
-                    url = null;
-                }
-            } catch (IOException e) {
-                this.logger.error(e.getMessage(), e);
-                url = null;
-            } finally {
-                if (ins != null) {
-                    try {
-                        ins.close();
-                    } catch (IOException e) {
-                        this.logger.error(e.getMessage(), e);
-                    }
-                }
-            }
-        }
-        return url;
-    }
-
-    @Override
-    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-        String encoding = request.getHeader("Accept-Encoding");
-        boolean supportsGzip = (encoding != null && encoding.toLowerCase().indexOf("gzip") > -1);
-        SessionTerminal st = (SessionTerminal) request.getSession(true).getAttribute("terminal");
-        if (st == null || st.isClosed()) {
-            st = new SessionTerminal();
-            request.getSession().setAttribute("terminal", st);
-        }
-        String str = request.getParameter("k");
-        String f = request.getParameter("f");
-        String dump = st.handle(str, f != null && f.length() > 0);
-        if (dump != null) {
-            if (supportsGzip) {
-                response.setHeader("Content-Encoding", "gzip");
-                response.setHeader("Content-Type", "text/html");
-                try {
-                    GZIPOutputStream gzos =  new GZIPOutputStream(response.getOutputStream());
-                    gzos.write(dump.getBytes());
-                    gzos.close();
-                } catch (IOException ie) {
-                    // handle the error here
-                    ie.printStackTrace();
-                }
-            } else {
-                response.getOutputStream().write(dump.getBytes());
-            }
-        }
-    }
-
-
-    public class SessionTerminal implements Runnable {
-
-        private Terminal terminal;
-        private Console console;
-        private PipedOutputStream in;
-        private PipedInputStream out;
-        private boolean closed;
-
-        public SessionTerminal() throws IOException {
-            try {
-                this.terminal = new Terminal(TERM_WIDTH, TERM_HEIGHT);
-                terminal.write("\u001b\u005B20\u0068"); // set newline mode on
-
-                in = new PipedOutputStream();
-                out = new PipedInputStream();
-                PrintStream pipedOut = new PrintStream(new PipedOutputStream(out), true);
-
-                console = new Console(commandProcessor,
-                                      new PipedInputStream(in),
-                                      pipedOut,
-                                      pipedOut,
-                                      new WebTerminal(TERM_WIDTH, TERM_HEIGHT),
-                                      null,
-                                      null);
-                CommandSession session = console.getSession();
-                session.put("APPLICATION", System.getProperty("karaf.name", "root"));
-                session.put("USER", "karaf");
-                session.put("COLUMNS", Integer.toString(TERM_WIDTH));
-                session.put("LINES", Integer.toString(TERM_HEIGHT));
-            } catch (IOException e) {
-                e.printStackTrace();
-                throw e;
-            } catch (Exception e) {
-                e.printStackTrace();
-                throw (IOException) new IOException().initCause(e);
-            }
-            new Thread(console).start();
-            new Thread(this).start();
-        }
-
-        public boolean isClosed() {
-            return closed;
-        }
-
-        public String handle(String str, boolean forceDump) throws IOException {
-            try {
-                if (str != null && str.length() > 0) {
-                    String d = terminal.pipe(str);
-                    for (byte b : d.getBytes()) {
-                        in.write(b);
-                    }
-                    in.flush();
-                }
-            } catch (IOException e) {
-                closed = true;
-                throw e;
-            }
-            try {
-                return terminal.dump(10, forceDump);
-            } catch (InterruptedException e) {
-                throw new InterruptedIOException(e.toString());
-            }
-        }
-
-        public void run() {
-            try {
-                for (;;) {
-                    byte[] buf = new byte[8192];
-                    int l = out.read(buf);
-                    InputStreamReader r = new InputStreamReader(new ByteArrayInputStream(buf, 0, l));
-                    StringBuilder sb = new StringBuilder();
-                    for (;;) {
-                        int c = r.read();
-                        if (c == -1) {
-                            break;
-                        }
-                        sb.append((char) c);
-                    }
-                    if (sb.length() > 0) {
-                        terminal.write(sb.toString());
-                    }
-                    String s = terminal.read();
-                    if (s != null && s.length() > 0) {
-                        for (byte b : s.getBytes()) {
-                            in.write(b);
-                        }
-                    }
-                }
-            } catch (IOException e) {
-                closed = true;
-                e.printStackTrace();
-            }
-        }
-
-    }
-}
diff --git a/karaf-2.3.x/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/Terminal.java b/karaf-2.3.x/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/Terminal.java
deleted file mode 100644
index 3318482..0000000
--- a/karaf-2.3.x/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/Terminal.java
+++ /dev/null
@@ -1,1502 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * Based on http://antony.lesuisse.org/software/ajaxterm/
- *  Public Domain License
- */
-
-/**
- * See http://www.ecma-international.org/publications/standards/Ecma-048.htm
- *       and http://vt100.net/docs/vt510-rm/
- */
-
-package org.apache.karaf.webconsole.gogo;
-
-import java.util.Arrays;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-public class Terminal {
-
-    enum State {
-        None,
-        Esc,
-        Str,
-        Csi,
-    }
-
-    private int width;
-    private int height;
-    private int attr;
-    private boolean eol;
-    private int cx;
-    private int cy;
-    private int[] screen;
-    private int[] screen2;
-    private State vt100_parse_state = State.None;
-    private int vt100_parse_len;
-    private int vt100_lastchar;
-    private int vt100_parse_func;
-    private String vt100_parse_param;
-    private boolean vt100_mode_autowrap;
-    private boolean vt100_mode_insert;
-    private boolean vt100_charset_is_single_shift;
-    private boolean vt100_charset_is_graphical;
-    private boolean vt100_mode_lfnewline;
-    private boolean vt100_mode_origin;
-    private boolean vt100_mode_inverse;
-    private boolean vt100_mode_cursorkey;
-    private boolean vt100_mode_cursor;
-    private boolean vt100_mode_alt_screen;
-    private boolean vt100_mode_backspace;
-    private boolean vt100_mode_column_switch;
-    private boolean vt100_keyfilter_escape;
-    private int[] vt100_charset_graph = new int[] {
-            0x25ca, 0x2026, 0x2022, 0x3f,
-            0xb6, 0x3f, 0xb0, 0xb1,
-            0x3f, 0x3f, 0x2b, 0x2b,
-            0x2b, 0x2b, 0x2b, 0xaf,
-            0x2014, 0x2014, 0x2014, 0x5f,
-            0x2b, 0x2b, 0x2b, 0x2b,
-            0x7c, 0x2264, 0x2265, 0xb6,
-            0x2260, 0xa3, 0xb7, 0x7f
-    };
-    private int vt100_charset_g_sel;
-    private int[] vt100_charset_g = { 0, 0 };
-    private Map<String, Object> vt100_saved;
-    private Map<String, Object> vt100_saved2;
-    private int vt100_saved_cx;
-    private int vt100_saved_cy;
-    private String vt100_out;
-
-    private int scroll_area_y0;
-    private int scroll_area_y1;
-
-    private List<Integer> tab_stops;
-
-    private int utf8_char;
-    private int utf8_units_count;
-    private int utf8_units_received;
-
-    private AtomicBoolean dirty = new AtomicBoolean(true);
-
-    public Terminal() {
-        this(80, 24);
-    }
-
-    public Terminal(int width, int height) {
-        this.width = width;
-        this.height = height;
-        reset_hard();
-    }
-
-    private void reset_hard() {
-		// Attribute mask: 0x0XFB0000
-		//	X:	Bit 0 - Underlined
-		//		Bit 1 - Negative
-		//		Bit 2 - Concealed
-		//	F:	Foreground
-		//	B:	Background
-		attr = 0x00fe0000;
-		// UTF-8 decoder
-		utf8_units_count = 0;
-		utf8_units_received = 0;
-		utf8_char = 0;
-		// Key filter
-		vt100_keyfilter_escape = false;
-		// Last char
-		vt100_lastchar = 0;
-		// Control sequences
-		vt100_parse_len = 0;
-		vt100_parse_state = State.None;
-		vt100_parse_func = 0;
-		vt100_parse_param = "";
-		// Buffers
-		vt100_out = "";
-		// Invoke other resets
-        reset_screen();
-        reset_soft();
-    }
-
-    private void reset_soft() {
-        // Attribute mask: 0x0XFB0000
-        //	X:	Bit 0 - Underlined
-        //		Bit 1 - Negative
-        //		Bit 2 - Concealed
-        //	F:	Foreground
-        //	B:	Background
-        attr = 0x00fe0000;
-        // Scroll parameters
-        scroll_area_y0 = 0;
-        scroll_area_y1 = height;
-        // Character sets
-        vt100_charset_is_single_shift = false;
-        vt100_charset_is_graphical = false;
-        vt100_charset_g_sel = 0;
-        vt100_charset_g = new int[] { 0, 0 };
-		// Modes
-		vt100_mode_insert = false;
-		vt100_mode_lfnewline = false;
-		vt100_mode_cursorkey = false;
-		vt100_mode_column_switch = false;
-		vt100_mode_inverse = false;
-		vt100_mode_origin = false;
-		vt100_mode_autowrap = true;
-		vt100_mode_cursor = true;
-		vt100_mode_alt_screen = false;
-		vt100_mode_backspace = false;
-		// Init DECSC state
-		esc_DECSC();
-		vt100_saved2 = vt100_saved;
-		esc_DECSC();
-    }
-
-    private void reset_screen() {
-        // Screen
-        screen = new int[width * height];
-        Arrays.fill(screen, attr | 0x0020);
-        screen2 = new int[width * height];
-        Arrays.fill(screen2, attr | 0x0020);
-        // Scroll parameters
-        scroll_area_y0 = 0;
-        scroll_area_y1 = height;
-        // Cursor position
-        cx = 0;
-        cy = 0;
-        // Tab stops
-        tab_stops = new ArrayList<Integer>();
-        for (int i = 7; i < width; i += 8) {
-            tab_stops.add(i);
-        }
-    }
-
-    //
-    // UTF-8 functions
-    //
-
-    private String utf8_decode(String d) {
-        StringBuilder o = new StringBuilder();
-        for (char c : d.toCharArray()) {
-            if (utf8_units_count != utf8_units_received) {
-                utf8_units_received++;
-                if ((c & 0xc0) == 0x80) {
-                    utf8_char = (utf8_char << 6) | (c & 0x3f);
-                    if (utf8_units_count == utf8_units_received) {
-                        if (utf8_char < 0x10000) {
-                            o.append((char) utf8_char);
-                        }
-                        utf8_units_count = utf8_units_received = 0;
-                    }
-                } else {
-                    o.append('?');
-                    while (utf8_units_received-- > 0) {
-                        o.append('?');
-                    }
-                    utf8_units_count = 0;
-                }
-            } else {
-                if ((c & 0x80) == 0x00) {
-                    o.append(c);
-                } else if ((c & 0xe0) == 0xc0) {
-                    utf8_units_count = 1;
-                    utf8_char = c & 0x1f;
-                } else if ((c & 0xf0) == 0xe0) {
-                    utf8_units_count = 2;
-                    utf8_char = c & 0x0f;
-                } else if ((c & 0xf8) == 0xf0) {
-                    utf8_units_count = 3;
-                    utf8_char = c & 0x07;
-                } else {
-                    o.append('?');
-                }
-
-            }
-        }
-        return o.toString();
-    }
-
-    private int utf8_charwidth(int c) {
-        if (c >= 0x2e80) {
-            return 2;
-        } else {
-            return 1;
-        }
-    }
-
-    //
-    // Low-level terminal functions
-    //
-
-    private int[] peek(int y0, int x0, int y1, int x1) {
-        int from = width * y0 + x0;
-        int to = width * (y1 - 1) + x1; 
-        int newLength = to - from;
-        if (newLength < 0)
-            throw new IllegalArgumentException(from + " > " + to);
-        int[] copy = new int[newLength];
-        System.arraycopy(screen, from, copy, 0,
-                         Math.min(screen.length - from, newLength));
-        return copy;
-    }
-
-    private void poke(int y, int x, int[] s) {
-        System.arraycopy(s, 0, screen, width * y + x, s.length);
-        setDirty();
-    }
-
-    private void fill(int y0, int x0, int y1, int x1, int c) {
-        int d0 = width * y0 + x0;
-        int d1 = width * (y1 - 1) + x1;
-        if (d0 <= d1) {
-            Arrays.fill(screen, width * y0 + x0,  width * (y1 - 1) + x1, c);
-            setDirty();
-        }
-    }
-
-    private void clear(int y0, int x0, int y1, int x1) {
-        fill(y0, x0, y1, x1, attr | 0x20);
-    }
-
-    //
-    // Scrolling functions
-    //
-
-    private void scroll_area_up(int y0, int y1) {
-        scroll_area_up(y0, y1, 1);
-    }
-
-    private void scroll_area_up(int y0, int y1, int n) {
-        n = Math.min(y1 - y0, n);
-        poke(y0, 0, peek(y0 + n, 0, y1, width));
-        clear(y1-n, 0, y1, width);
-    }
-
-    private void scroll_area_down(int y0, int y1) {
-        scroll_area_down(y0, y1, 1);
-    }
-
-    private void scroll_area_down(int y0, int y1, int n) {
-        n = Math.min(y1 - y0, n);
-        poke(y0 + n, 0, peek(y0, 0, y1-n, width));
-        clear(y0, 0, y0 + n, width);
-    }
-
-    private void scroll_area_set(int y0, int y1) {
-        y0 = Math.max(0, Math.min(height - 1, y0));
-        y1 = Math.max(1, Math.min(height, y1));
-        if (y1 > y0) {
-            scroll_area_y0 = y0;
-            scroll_area_y1 = y1;
-        }
-    }
-
-    private void scroll_line_right(int y, int x) {
-        scroll_line_right(y, x, 1);
-    }
-
-    private void scroll_line_right(int y, int x, int n) {
-        if (x < width) {
-            n = Math.min(width - cx, n);
-            poke(y, x + n, peek(y, x, y + 1, width - n));
-            clear(y, x, y + 1, x + n);
-        }
-    }
-
-    private void scroll_line_left(int y, int x) {
-        scroll_line_left(y, x, 1);
-    }
-
-    private void scroll_line_left(int y, int x, int n) {
-        if (x < width) {
-            n = Math.min(width - cx, n);
-            poke(y, x, peek(y, x + n, y + 1, width));
-            clear(y, width - n, y + 1, width);
-        }
-    }
-
-    //
-	// Cursor functions
-    //
-
-    private int[] cursor_line_width(int next_char) {
-        int wx = utf8_charwidth(next_char);
-        int lx = 0;
-        for (int x = 0; x < Math.min(cx, width); x++) {
-            int c = peek(cy, x, cy + 1, x + 1)[0] & 0xffff;
-            wx += utf8_charwidth(c);
-            lx += 1;
-        }
-        return new int[] { wx, lx };
-    }
-
-    private void cursor_up() {
-        cursor_up(1);
-    }
-
-    private void cursor_up(int n) {
-        cy = Math.max(scroll_area_y0, cy - n);
-        setDirty();
-    }
-
-    private void cursor_down() {
-        cursor_down(1);
-    }
-
-    private void cursor_down(int n) {
-        cy = Math.min(scroll_area_y1 - 1, cy + n);
-        setDirty();
-    }
-
-    private void cursor_left() {
-        cursor_left(1);
-    }
-
-    private void cursor_left(int n) {
-        eol = false;
-        cx = Math.max(0, cx - n);
-        setDirty();
-    }
-
-    private void cursor_right() {
-        cursor_right(1);
-    }
-
-    private void cursor_right(int n) {
-        eol = cx + n >= width;
-        cx = Math.min(width - 1, cx + n);
-        setDirty();
-    }
-
-    private void cursor_set_x(int x) {
-        eol = false;
-        cx = Math.max(0, x);
-        setDirty();
-    }
-
-    private void cursor_set_y(int y) {
-        cy = Math.max(0, Math.min(height - 1, y));
-        setDirty();
-    }
-
-    private void cursor_set(int y, int x) {
-        cursor_set_x(x);
-        cursor_set_y(y);
-    }
-
-    //
-    // Dumb terminal
-    //
-
-    private void ctrl_BS() {
-        int dy = (cx - 1) / width;
-        cursor_set(Math.max(scroll_area_y0, cy + dy), (cx - 1) % width);
-    }
-
-    private void ctrl_HT() {
-        ctrl_HT(1);
-    }
-
-    private void ctrl_HT(int n) {
-        if (n > 0 && cx >= width) {
-            return;
-        }
-        if (n <= 0 && cx == 0) {
-            return;
-        }
-        int ts = -1;
-        for (int i = 0; i < tab_stops.size(); i++) {
-            if (cx >= tab_stops.get(i)) {
-                ts = i;
-            }
-        }
-        ts += n;
-        if (ts < tab_stops.size() && ts >= 0) {
-            cursor_set_x(tab_stops.get(ts));
-        } else {
-            cursor_set_x(width - 1);
-        }
-    }
-
-    private void ctrl_LF() {
-        if (vt100_mode_lfnewline) {
-            ctrl_CR();
-        }
-        if (cy == scroll_area_y1 - 1) {
-            scroll_area_up(scroll_area_y0, scroll_area_y1);
-        } else {
-            cursor_down();
-        }
-    }
-
-    private void ctrl_CR() {
-        cursor_set_x(0);
-    }
-
-    private boolean dumb_write(int c) {
-        if (c < 32) {
-            if (c == 8) {
-                ctrl_BS();
-            } else if (c == 9) {
-                ctrl_HT();
-            } else if (c >= 10 && c <= 12) {
-                ctrl_LF();
-            } else if (c == 13) {
-                ctrl_CR();
-            }
-            return true;
-        }
-        return false;
-    }
-
-    private void dumb_echo(int c) {
-        if (eol) {
-            if (vt100_mode_autowrap) {
-                ctrl_CR();
-                ctrl_LF();
-            } else {
-                cx = cursor_line_width(c)[1] - 1;
-            }
-        }
-        if (vt100_mode_insert) {
-            scroll_line_right(cy, cx);
-        }
-        if (vt100_charset_is_single_shift) {
-            vt100_charset_is_single_shift = false;
-        } else if (vt100_charset_is_graphical && ((c & 0xffe0) == 0x0060)) {
-            c = vt100_charset_graph[c - 0x60];
-        }
-        poke(cy, cx, new int[] { attr | c });
-        cursor_right();
-    }
-
-    //
-    // VT100
-    //
-
-    private void vt100_charset_update() {
-        vt100_charset_is_graphical = (vt100_charset_g[vt100_charset_g_sel] == 2);
-    }
-
-    private void vt100_charset_set(int g) {
-        // Invoke active character set
-        vt100_charset_g_sel = g;
-        vt100_charset_update();
-    }
-
-    private void vt100_charset_select(int g, int charset) {
-        // Select charset
-        vt100_charset_g[g] = charset;
-        vt100_charset_update();
-    }
-
-    private void vt100_setmode(String p, boolean state) {
-        // Set VT100 mode
-        String[] ps = vt100_parse_params(p, new String[0]);
-        for (String m : ps) {
-            // 1 : GATM: Guarded area transfer
-            // 2 : KAM: Keyboard action
-            // 3 : CRM: Control representation
-            if ("4".equals(m)) {
-                // Insertion replacement mode
-                vt100_mode_insert = state;
-            // 5 : SRTM: Status reporting transfer
-            // 7 : VEM: Vertical editing
-            // 10 : HEM: Horizontal editing
-            // 11 : PUM: Positioning nit
-            // 12 : SRM: Send/receive
-            // 13 : FEAM: Format effector action
-            // 14 : FETM: Format effector transfer
-            // 15 : MATM: Multiple area transfer
-            // 16 : TTM: Transfer termination
-            // 17 : SATM: Selected area transfer
-            // 18 : TSM: Tabulation stop
-            // 19 : EBM: Editing boundary
-            } else if ("20".equals(m)) {
-                // LNM: Line feed/new line
-                vt100_mode_lfnewline = state;
-            } else if ("?1".equals(m)) {
-                // DECCKM: Cursor keys
-                vt100_mode_cursorkey = state;
-            // ?2 : DECANM: ANSI
-            } else if ("?3".equals(m)) {
-                // DECCOLM: Column
-                if (vt100_mode_column_switch) {
-                    if (state) {
-                        width = 132;
-                    } else {
-                        width = 80;
-                    }
-                    reset_screen();
-                }
-            // ?4 : DECSCLM: Scrolling
-            } else if ("?5".equals(m)) {
-                // DECSCNM: Screen
-                vt100_mode_inverse = state;
-            } else if ("?6".equals(m)) {
-                // DECOM: Origin
-                vt100_mode_origin = state;
-                if (state) {
-                    cursor_set(scroll_area_y0, 0);
-                } else {
-                    cursor_set(0, 0);
-                }
-            } else if ("?7".equals(m)) {
-                // DECAWM: Autowrap
-                vt100_mode_autowrap = state;
-            // ?8 : DECARM: Autorepeat
-            // ?9 : Interlacing
-            // ?18 : DECPFF: Print form feed
-            // ?19 : DECPEX: Printer extent
-            } else if ("?25".equals(m)) {
-                // DECTCEM: Text cursor enable
-                vt100_mode_cursor = state;
-            // ?34 : DECRLM: Cursor direction, right to left
-            // ?35 : DECHEBM: Hebrew keyboard mapping
-            // ?36 : DECHEM: Hebrew encoding mode
-            } else if ("?40".equals(m)) {
-                // Column switch control
-                vt100_mode_column_switch = state;
-            // ?42 : DECNRCM: National replacement character set
-            } else if ("?47".equals(m)) {
-                // Alternate screen mode
-                if ((state && !vt100_mode_alt_screen) || (!state && vt100_mode_alt_screen)) {
-                    int[] s = screen; screen = screen2; screen2 = s;
-                    Map<String, Object> map = vt100_saved; vt100_saved = vt100_saved2; vt100_saved2 = map;
-                }
-                vt100_mode_alt_screen = state;
-            // ?57 : DECNAKB: Greek keyboard mapping
-            } else if ("?67".equals(m)) {
-                // DECBKM: Backarrow key
-                vt100_mode_backspace = state;
-            }
-            // ?98 : DECARSM: auto-resize
-            // ?101 : DECCANSM: Conceal answerback message
-            // ?109 : DECCAPSLK: caps lock
-        }
-    }
-
-    private void ctrl_SO() {
-        vt100_charset_set(1);
-    }
-
-    private void ctrl_SI() {
-        vt100_charset_set(0);
-    }
-
-    private void esc_CSI() {
-        vt100_parse_reset(State.Csi);
-    }
-
-    private void esc_DECALN() {
-        fill(0, 0, height, width, 0x00fe0045);
-    }
-
-    private void esc_G0_0() {
-        vt100_charset_select(0, 0);
-    }
-    private void esc_G0_1() {
-        vt100_charset_select(0, 1);
-    }
-    private void esc_G0_2() {
-        vt100_charset_select(0, 2);
-    }
-    private void esc_G0_3() {
-        vt100_charset_select(0, 3);
-    }
-    private void esc_G0_4() {
-        vt100_charset_select(0, 4);
-    }
-
-    private void esc_G1_0() {
-        vt100_charset_select(1, 0);
-    }
-    private void esc_G1_1() {
-        vt100_charset_select(1, 1);
-    }
-    private void esc_G1_2() {
-        vt100_charset_select(1, 2);
-    }
-    private void esc_G1_3() {
-        vt100_charset_select(1, 3);
-    }
-    private void esc_G1_4() {
-        vt100_charset_select(1, 4);
-    }
-
-    private void esc_DECSC() {
-        vt100_saved = new HashMap<String, Object>();
-        vt100_saved.put("cx", cx);
-        vt100_saved.put("cy", cy);
-        vt100_saved.put("attr", attr);
-        vt100_saved.put("vt100_charset_g_sel", vt100_charset_g_sel);
-        vt100_saved.put("vt100_charset_g", vt100_charset_g);
-        vt100_saved.put("vt100_mode_autowrap", vt100_mode_autowrap);
-        vt100_saved.put("vt100_mode_origin", vt100_mode_origin);
-    }
-
-    private void esc_DECRC() {
-        cx = (Integer) vt100_saved.get("cx");
-        cy = (Integer) vt100_saved.get("cy");
-        attr = (Integer) vt100_saved.get("attr");
-        vt100_charset_g_sel = (Integer) vt100_saved.get("vt100_charset_g_sel");
-        vt100_charset_g = (int[]) vt100_saved.get("vt100_charset_g");
-        vt100_charset_update();
-        vt100_mode_autowrap = (Boolean) vt100_saved.get("vt100_mode_autowrap");
-        vt100_mode_origin = (Boolean) vt100_saved.get("vt100_mode_origin");
-    }
-
-    private void esc_IND() {
-        ctrl_LF();
-    }
-
-    private void esc_NEL() {
-        ctrl_CR();
-        ctrl_LF();
-    }
-
-    private void esc_HTS() {
-        csi_CTC("0");
-    }
-
-    private void esc_RI() {
-        if (cy == scroll_area_y0) {
-            scroll_area_down(scroll_area_y0, scroll_area_y1);
-        } else {
-            cursor_up();
-        }
-    }
-
-    private void esc_SS2() {
-        vt100_charset_is_single_shift = true;
-    }
-
-    private void esc_SS3() {
-        vt100_charset_is_single_shift = true;
-    }
-
-    private void esc_DCS() {
-        vt100_parse_reset(State.Str);
-    }
-
-    private void esc_SOS() {
-        vt100_parse_reset(State.Str);
-    }
-
-    private void esc_DECID() {
-        csi_DA("0");
-    }
-
-    private void esc_ST() {
-    }
-
-    private void esc_OSC() {
-        vt100_parse_reset(State.Str);
-    }
-
-    private void esc_PM() {
-        vt100_parse_reset(State.Str);
-    }
-
-    private void esc_APC() {
-        vt100_parse_reset(State.Str);
-    }
-
-    private void esc_RIS() {
-        reset_hard();
-    }
-
-    private void csi_ICH(String p) {
-        int[] ps = vt100_parse_params(p, new int[] { 1 });
-        scroll_line_right(cy, cx, ps[0]);
-    }
-
-    private void csi_CUU(String p) {
-        int[] ps = vt100_parse_params(p, new int[] { 1 });
-        cursor_up(Math.max(1, ps[0]));
-    }
-
-    private void csi_CUD(String p) {
-        int[] ps = vt100_parse_params(p, new int[] { 1 });
-        cursor_down(Math.max(1, ps[0]));
-    }
-
-    private void csi_CUF(String p) {
-        int[] ps = vt100_parse_params(p, new int[] { 1 });
-        cursor_right(Math.max(1, ps[0]));
-    }
-
-    private void csi_CUB(String p) {
-        int[] ps = vt100_parse_params(p, new int[] { 1 });
-        cursor_left(Math.max(1, ps[0]));
-    }
-
-    private void csi_CNL(String p) {
-        csi_CUD(p);
-        ctrl_CR();
-    }
-
-    private void csi_CPL(String p) {
-        csi_CUU(p);
-        ctrl_CR();
-    }
-
-    private void csi_CHA(String p) {
-        int[] ps = vt100_parse_params(p, new int[] { 1 });
-        cursor_set_x(ps[0] - 1);
-    }
-
-    private void csi_CUP(String p) {
-        int[] ps = vt100_parse_params(p, new int[] { 1, 1 });
-        if (vt100_mode_origin) {
-            cursor_set(scroll_area_y0 + ps[0] - 1, ps[1] - 1);
-        } else {
-            cursor_set(ps[0] - 1, ps[1] - 1);
-        }
-    }
-
-    private void csi_CHT(String p) {
-        int[] ps = vt100_parse_params(p, new int[] { 1 });
-        ctrl_HT(Math.max(1, ps[0]));
-    }
-
-    private void csi_ED(String p) {
-        String[] ps = vt100_parse_params(p, new String[] { "0" });
-        if ("0".equals(ps[0])) {
-            clear(cy, cx, height, width);
-        } else if ("1".equals(ps[0])) {
-            clear(0, 0, cy + 1, cx + 1);
-        } else if ("2".equals(ps[0])) {
-            clear(0, 0, height, width);
-        }
-    }
-
-    private void csi_EL(String p) {
-        String[] ps = vt100_parse_params(p, new String[] { "0" });
-        if ("0".equals(ps[0])) {
-            clear(cy, cx, cy + 1, width);
-        } else if ("1".equals(ps[0])) {
-            clear(cy, 0, cy + 1, cx + 1);
-        } else if ("2".equals(ps[0])) {
-            clear(cy, 0, cy + 1, width);
-        }
-    }
-
-    private void csi_IL(String p) {
-        int[] ps = vt100_parse_params(p, new int[] { 1 });
-        if (cy >= scroll_area_y0 && cy < scroll_area_y1) {
-            scroll_area_down(cy, scroll_area_y1, Math.max(1, ps[0]));
-        }
-    }
-
-    private void csi_DL(String p) {
-        int[] ps = vt100_parse_params(p, new int[] { 1 });
-        if (cy >= scroll_area_y0 && cy < scroll_area_y1) {
-            scroll_area_up(cy, scroll_area_y1, Math.max(1, ps[0]));
-        }
-    }
-
-    private void csi_DCH(String p) {
-        int[] ps = vt100_parse_params(p, new int[] { 1 });
-        scroll_line_left(cy, cx, Math.max(1, ps[0]));
-    }
-
-    private void csi_SU(String p) {
-        int[] ps = vt100_parse_params(p, new int[] { 1 });
-        scroll_area_up(scroll_area_y0, scroll_area_y1, Math.max(1, ps[0]));
-    }
-
-    private void csi_SD(String p) {
-        int[] ps = vt100_parse_params(p, new int[] { 1 });
-        scroll_area_down(scroll_area_y0, scroll_area_y1, Math.max(1, ps[0]));
-    }
-
-    private void csi_CTC(String p) {
-        String[] ps = vt100_parse_params(p, new String[] { "0" });
-        for (String m : ps) {
-            if ("0".equals(m)) {
-                if (tab_stops.indexOf(cx) < 0) {
-                    tab_stops.add(cx);
-                    Collections.sort(tab_stops);
-                }
-            } else if ("2".equals(m)) {
-                tab_stops.remove(Integer.valueOf(cx));
-            } else if ("5".equals(m)) {
-                tab_stops = new ArrayList<Integer>();
-            }
-        }
-    }
-
-    private void csi_ECH(String p) {
-        int[] ps = vt100_parse_params(p, new int[] { 1 });
-        int n = Math.min(width - cx, Math.max(1, ps[0]));
-        clear(cy, cx, cy + 1, cx + n);
-    }
-
-    private void csi_CBT(String p) {
-        int[] ps = vt100_parse_params(p, new int[] { 1 });
-        ctrl_HT(1 - Math.max(1, ps[0]));
-    }
-
-    private void csi_HPA(String p) {
-        int[] ps = vt100_parse_params(p, new int[] { 1 });
-        cursor_set_x(ps[0] - 1);
-    }
-
-    private void csi_HPR(String p) {
-        csi_CUF(p);
-    }
-
-    private void csi_REP(String p) {
-        int[] ps = vt100_parse_params(p, new int[] { 1 });
-        if (vt100_lastchar < 32) {
-            return;
-        }
-        int n = Math.min(2000, Math.max(1, ps[0]));
-        while (n-- > 0) {
-            dumb_echo(vt100_lastchar);
-        }
-        vt100_lastchar = 0;
-    }
-
-    private void csi_DA(String p) {
-        String[] ps = vt100_parse_params(p, new String[] { "0" });
-        if ("0".equals(ps[0])) {
-            vt100_out = "\u001b[?1;2c";
-        } else if (">0".equals(ps[0]) || ">".equals(ps[0])) {
-            vt100_out = "\u001b[>0;184;0c";
-        }
-    }
-
-    private void csi_VPA(String p) {
-        int[] ps = vt100_parse_params(p, new int[] { 1 });
-        cursor_set_y(ps[0] - 1);
-    }
-
-    private void csi_VPR(String p) {
-        csi_CUD(p);
-    }
-
-    private void csi_HVP(String p) {
-        csi_CUP(p);
-    }
-
-    private void csi_TBC(String p) {
-        String[] ps = vt100_parse_params(p, new String[] { "0" });
-        if ("0".equals(ps[0])) {
-            csi_CTC("2");
-        } else if ("3".equals(ps[0])) {
-            csi_CTC("5");
-        }
-    }
-
-    private void csi_SM(String p) {
-        vt100_setmode(p, true);
-    }
-
-    private void csi_RM(String p) {
-        vt100_setmode(p, false);
-    }
-
-    private void csi_SGR(String p) {
-        int[] ps = vt100_parse_params(p, new int[] { 0 });
-        for (int m : ps) {
-            if (m == 0) {
-                attr = 0x00fe0000;
-            } else if (m == 1) {
-                attr |= 0x08000000;
-            } else if (m == 4) {
-                attr |= 0x01000000;
-            } else if (m == 7) {
-                attr |= 0x02000000;
-            } else if (m == 8) {
-                attr |= 0x04000000;
-            } else if (m == 24) {
-                attr &= 0x7eff0000;
-            } else if (m == 27) {
-                attr &= 0x7dff0000;
-            } else if (m == 28) {
-                attr &= 0x7bff0000;
-            } else if (m >= 30 && m <= 37) {
-                attr = (attr & 0x7f0f0000) | ((m - 30) << 20);
-            } else if (m == 39) {
-                attr = (attr & 0x7f0f0000) | 0x00f00000;
-            } else if (m >= 40 && m <= 47) {
-                attr = (attr & 0x7ff00000) | ((m - 40) << 16);
-            } else if (m == 49) {
-                attr = (attr & 0x7ff00000) | 0x000e0000;
-            }
-        }
-    }
-
-    private void csi_DSR(String p) {
-        String[] ps = vt100_parse_params(p, new String[] { "0" });
-        if ("5".equals(ps[0])) {
-            vt100_out = "\u001b[0n";
-        } else if ("6".equals(ps[0])) {
-            vt100_out = "\u001b[" + (cy + 1) + ";" + (cx + 1) + "R";
-        } else if ("7".equals(ps[0])) {
-            vt100_out = "gogo-term";
-        } else if ("8".equals(ps[0])) {
-            vt100_out = "1.0-SNAPSHOT";
-        } else if ("?6".equals(ps[0])) {
-            vt100_out = "\u001b[" + (cy + 1) + ";" + (cx + 1) + ";0R";
-        } else if ("?15".equals(ps[0])) {
-            vt100_out = "\u001b[?13n";
-        } else if ("?25".equals(ps[0])) {
-            vt100_out = "\u001b[?20n";
-        } else if ("?26".equals(ps[0])) {
-            vt100_out = "\u001b[?27;1n";
-        } else if ("?53".equals(ps[0])) {
-            vt100_out = "\u001b[?53n";
-        }
-        // ?75 : Data Integrity report
-        // ?62 : Macro Space report
-        // ?63 : Memory Checksum report
-    }
-
-    private void csi_DECSTBM(String p) {
-        int[] ps = vt100_parse_params(p, new int[] { 1, height });
-        scroll_area_set(ps[0] - 1, ps[1]);
-        if (vt100_mode_origin) {
-            cursor_set(scroll_area_y0, 0);
-        } else {
-            cursor_set(0, 0);
-        }
-    }
-
-    private void csi_SCP(String p) {
-        vt100_saved_cx = cx;
-        vt100_saved_cy = cy;
-    }
-
-    private void csi_RCP(String p) {
-        cx = vt100_saved_cx;
-        cy = vt100_saved_cy;
-    }
-
-    private void csi_DECREQTPARM(String p) {
-        String[] ps = vt100_parse_params(p, new String[0]);
-        if ("0".equals(ps[0])) {
-            vt100_out = "\u001b[2;1;1;112;112;1;0x";
-        } else if ("1".equals(ps[0])) {
-            vt100_out = "\u001b[3;1;1;112;112;1;0x";
-        }
-    }
-
-    private void csi_DECSTR(String p) {
-        reset_soft();
-    }
-
-    //
-    // VT100 parser
-    //
-
-    private String[] vt100_parse_params(String p, String[] defaults) {
-        String prefix = "";
-        if (p.length() > 0) {
-            if (p.charAt(0) >= '<' && p.charAt(0) <= '?') {
-                prefix = "" + p.charAt(0);
-                p = p.substring(1);
-            }
-        }
-        String[] ps = p.split(";");
-        int n = Math.max(ps.length, defaults.length);
-        String[] values = new String[n];
-        for (int i = 0; i < n; i++) {
-            String value = null;
-            if (i < ps.length && ps[i].length() > 0) {
-                value = prefix + ps[i];
-            }
-            if (value == null && i < defaults.length) {
-                value = defaults[i];
-            }
-            if (value == null) {
-                value = "";
-            }
-            values[i] = value;
-        }
-        return values;
-    }
-
-    private int[] vt100_parse_params(String p, int[] defaults) {
-        String prefix = "";
-        p = p == null ? "" : p;
-        if (p.length() > 0) {
-            if (p.charAt(0) >= '<' && p.charAt(0) <= '?') {
-                prefix = p.substring(0, 1);
-                p = p.substring(1);
-            }
-        }
-        String[] ps = p.split(";");
-        int n = Math.max(ps.length, defaults.length);
-        int[] values = new int[n];
-        for (int i = 0; i < n; i++) {
-            Integer value = null;
-            if (i < ps.length) {
-                String v = prefix + ps[i];
-                try {
-                    value = Integer.parseInt(v);
-                } catch (NumberFormatException e) {
-                }
-            }
-            if (value == null && i < defaults.length) {
-                value = defaults[i];
-            }
-            if (value == null) {
-                value = 0;
-            }
-            values[i] = value;
-        }
-        return values;
-    }
-
-    private void vt100_parse_reset() {
-        vt100_parse_reset(State.None);
-    }
-
-    private void vt100_parse_reset(State state) {
-        vt100_parse_state = state;
-        vt100_parse_len = 0;
-        vt100_parse_func = 0;
-        vt100_parse_param = "";
-    }
-
-    private void vt100_parse_process() {
-        if (vt100_parse_state == State.Esc) {
-            switch (vt100_parse_func) {
-                case 0x0036: /* DECBI */ break;
-                case 0x0037: esc_DECSC(); break;
-                case 0x0038: esc_DECRC(); break;
-                case 0x0042: /* BPH */ break;
-                case 0x0043: /* NBH */ break;
-                case 0x0044: esc_IND(); break;
-                case 0x0045: esc_NEL(); break;
-                case 0x0046: /* SSA */ esc_NEL(); break;
-                case 0x0048: esc_HTS(); break;
-                case 0x0049: /* HTJ */ break;
-                case 0x004A: /* VTS */ break;
-                case 0x004B: /* PLD */ break;
-                case 0x004C: /* PLU */ break;
-                case 0x004D: esc_RI(); break;
-                case 0x004E: esc_SS2(); break;
-                case 0x004F: esc_SS3(); break;
-                case 0x0050: esc_DCS(); break;
-                case 0x0051: /* PU1 */ break;
-                case 0x0052: /* PU2 */ break;
-                case 0x0053: /* STS */ break;
-                case 0x0054: /* CCH */ break;
-                case 0x0055: /* MW */ break;
-                case 0x0056: /* SPA */ break;
-                case 0x0057: /* ESA */ break;
-                case 0x0058: esc_SOS(); break;
-                case 0x005A: /* SCI */ break;
-                case 0x005B: esc_CSI(); break;
-                case 0x005C: esc_ST(); break;
-                case 0x005D: esc_OSC(); break;
-                case 0x005E: esc_PM(); break;
-                case 0x005F: esc_APC(); break;
-                case 0x0060: /* DMI */ break;
-                case 0x0061: /* INT */ break;
-                case 0x0062: /* EMI */ break;
-                case 0x0063: esc_RIS(); break;
-                case 0x0064: /* CMD */ break;
-                case 0x006C: /* RM */ break;
-                case 0x006E: /* LS2 */ break;
-                case 0x006F: /* LS3 */ break;
-                case 0x007C: /* LS3R */ break;
-                case 0x007D: /* LS2R */ break;
-                case 0x007E: /* LS1R */ break;
-                case 0x2338: esc_DECALN(); break;
-                case 0x2841: esc_G0_0(); break;
-                case 0x2842: esc_G0_1(); break;
-                case 0x2830: esc_G0_2(); break;
-                case 0x2831: esc_G0_3(); break;
-                case 0x2832: esc_G0_4(); break;
-                case 0x2930: esc_G1_2(); break;
-                case 0x2931: esc_G1_3(); break;
-                case 0x2932: esc_G1_4(); break;
-                case 0x2941: esc_G1_0(); break;
-                case 0x2942: esc_G1_1(); break;
-            }
-            if (vt100_parse_state == State.Esc) {
-                vt100_parse_reset();
-            }
-        } else {
-            switch (vt100_parse_func) {
-                case 0x0040: csi_ICH(vt100_parse_param); break;
-                case 0x0041: csi_CUU(vt100_parse_param); break;
-                case 0x0042: csi_CUD(vt100_parse_param); break;
-                case 0x0043: csi_CUF(vt100_parse_param); break;
-                case 0x0044: csi_CUB(vt100_parse_param); break;
-                case 0x0045: csi_CNL(vt100_parse_param); break;
-                case 0x0046: csi_CPL(vt100_parse_param); break;
-                case 0x0047: csi_CHA(vt100_parse_param); break;
-                case 0x0048: csi_CUP(vt100_parse_param); break;
-                case 0x0049: csi_CHT(vt100_parse_param); break;
-                case 0x004A: csi_ED(vt100_parse_param); break;
-                case 0x004B: csi_EL(vt100_parse_param); break;
-                case 0x004C: csi_IL(vt100_parse_param); break;
-                case 0x004D: csi_DL(vt100_parse_param); break;
-                case 0x004E: /* EF */ break;
-                case 0x004F: /* EA */ break;
-                case 0x0050: csi_DCH(vt100_parse_param); break;
-                case 0x0051: /* SEE */ break;
-                case 0x0052: /* CPR */ break;
-                case 0x0053: csi_SU(vt100_parse_param); break;
-                case 0x0054: csi_SD(vt100_parse_param); break;
-                case 0x0055: /* NP */ break;
-                case 0x0056: /* PP */ break;
-                case 0x0057: csi_CTC(vt100_parse_param); break;
-                case 0x0058: csi_ECH(vt100_parse_param); break;
-                case 0x0059: /* CVT */ break;
-                case 0x005A: csi_CBT(vt100_parse_param); break;
-                case 0x005B: /* SRS */ break;
-                case 0x005C: /* PTX */ break;
-                case 0x005D: /* SDS */ break;
-                case 0x005E: /* SIMD */ break;
-                case 0x0060: csi_HPA(vt100_parse_param); break;
-                case 0x0061: csi_HPR(vt100_parse_param); break;
-                case 0x0062: csi_REP(vt100_parse_param); break;
-                case 0x0063: csi_DA(vt100_parse_param); break;
-                case 0x0064: csi_VPA(vt100_parse_param); break;
-                case 0x0065: csi_VPR(vt100_parse_param); break;
-                case 0x0066: csi_HVP(vt100_parse_param); break;
-                case 0x0067: csi_TBC(vt100_parse_param); break;
-                case 0x0068: csi_SM(vt100_parse_param); break;
-                case 0x0069: /* MC */ break;
-                case 0x006A: /* HPB */ break;
-                case 0x006B: /* VPB */ break;
-                case 0x006C: csi_RM(vt100_parse_param); break;
-                case 0x006D: csi_SGR(vt100_parse_param); break;
-                case 0x006E: csi_DSR(vt100_parse_param); break;
-                case 0x006F: /* DAQ */ break;
-                case 0x0072: csi_DECSTBM(vt100_parse_param); break;
-                case 0x0073: csi_SCP(vt100_parse_param); break;
-                case 0x0075: csi_RCP(vt100_parse_param); break;
-                case 0x0078: csi_DECREQTPARM(vt100_parse_param); break;
-                case 0x2040: /* SL */ break;
-                case 0x2041: /* SR */ break;
-                case 0x2042: /* GSM */ break;
-                case 0x2043: /* GSS */ break;
-                case 0x2044: /* FNT */ break;
-                case 0x2045: /* TSS */ break;
-                case 0x2046: /* JFY */ break;
-                case 0x2047: /* SPI */ break;
-                case 0x2048: /* QUAD */ break;
-                case 0x2049: /* SSU */ break;
-                case 0x204A: /* PFS */ break;
-                case 0x204B: /* SHS */ break;
-                case 0x204C: /* SVS */ break;
-                case 0x204D: /* IGS */ break;
-                case 0x204E: /* deprecated: HTSA */ break;
-                case 0x204F: /* IDCS */ break;
-                case 0x2050: /* PPA */ break;
-                case 0x2051: /* PPR */ break;
-                case 0x2052: /* PPB */ break;
-                case 0x2053: /* SPD */ break;
-                case 0x2054: /* DTA */ break;
-                case 0x2055: /* SLH */ break;
-                case 0x2056: /* SLL */ break;
-                case 0x2057: /* FNK */ break;
-                case 0x2058: /* SPQR */ break;
-                case 0x2059: /* SEF */ break;
-                case 0x205A: /* PEC */ break;
-                case 0x205B: /* SSW */ break;
-                case 0x205C: /* SACS */ break;
-                case 0x205D: /* SAPV */ break;
-                case 0x205E: /* STAB */ break;
-                case 0x205F: /* GCC */ break;
-                case 0x2060: /* TAPE */ break;
-                case 0x2061: /* TALE */ break;
-                case 0x2062: /* TAC */ break;
-                case 0x2063: /* TCC */ break;
-                case 0x2064: /* TSR */ break;
-                case 0x2065: /* SCO */ break;
-                case 0x2066: /* SRCS */ break;
-                case 0x2067: /* SCS */ break;
-                case 0x2068: /* SLS */ break;
-                case 0x2069: /* SPH */ break;
-                case 0x206A: /* SPL */ break;
-                case 0x206B: /* SCP */ break;
-                case 0x2170: csi_DECSTR(vt100_parse_param); break;
-                case 0x2472: /* DECCARA */ break;
-                case 0x2477: /* DECRQPSR */ break;
-            }
-            if (vt100_parse_state == State.Csi) {
-                vt100_parse_reset();
-            }
-        }
-    }
-
-    private boolean vt100_write(int c) {
-        if (c < 32) {
-            if (c == 27) {
-                vt100_parse_reset(State.Esc);
-                return true;
-            } else if (c == 14) {
-                ctrl_SO();
-            } else if (c == 15) {
-                ctrl_SI();
-            }
-        } else if ((c & 0xffe0) == 0x0080) {
-            vt100_parse_reset(State.Esc);
-            vt100_parse_func = (char)(c - 0x0040);
-            vt100_parse_process();
-            return true;
-        }
-        if (vt100_parse_state != State.None) {
-            if (vt100_parse_state == State.Str) {
-                if (c >= 32) {
-                    return true;
-                }
-                vt100_parse_reset();
-            } else {
-                if (c < 32) {
-                    if (c == 24 || c == 26) {
-                        vt100_parse_reset();
-                        return true;
-                    }
-                } else {
-                    vt100_parse_len += 1;
-                    if (vt100_parse_len > 32) {
-                        vt100_parse_reset();
-                    } else {
-                        int msb = c & 0xf0;
-                        if (msb == 0x20) {
-                            vt100_parse_func <<= 8;
-                            vt100_parse_func += (char) c;
-                        } else if (msb == 0x30 && vt100_parse_state == State.Csi) {
-                            vt100_parse_param += new String(new char[] { (char) c } );
-                        } else {
-                            vt100_parse_func <<= 8;
-                            vt100_parse_func += (char) c;
-                            vt100_parse_process();
-                        }
-                        return true;
-                    }
-                }
-            }
-        }
-        vt100_lastchar = c;
-        return false;
-    }
-
-    //
-    // Dirty
-    //
-
-    private synchronized void setDirty() {
-        dirty.set(true);
-        notifyAll();
-    }
-
-    //
-    // External interface
-    //
-
-    public synchronized boolean setSize(int w, int h) {
-        if (w < 2 || w > 256 || h < 2 || h > 256) {
-            return false;
-        }
-        this.width = w;
-        this.height = h;
-        reset_screen();
-        return true;
-    }
-
-    public synchronized String read() {
-        String d = vt100_out;
-        vt100_out = "";
-        return d;
-    }
-
-    public synchronized String pipe(String d) {
-        String o = "";
-        for (char c : d.toCharArray()) {
-            if (vt100_keyfilter_escape) {
-                vt100_keyfilter_escape = false;
-                if (vt100_mode_cursorkey) {
-                    switch (c) {
-                        case '~': o += "~"; break;
-                        case 'A': o += "\u001bOA"; break;
-                        case 'B': o += "\u001bOB"; break;
-                        case 'C': o += "\u001bOC"; break;
-                        case 'D': o += "\u001bOD"; break;
-                        case 'F': o += "\u001bOF"; break;
-                        case 'H': o += "\u001bOH"; break;
-                        case '1': o += "\u001b[5~"; break;
-                        case '2': o += "\u001b[6~"; break;
-                        case '3': o += "\u001b[2~"; break;
-                        case '4': o += "\u001b[3~"; break;
-                        case 'a': o += "\u001bOP"; break;
-                        case 'b': o += "\u001bOQ"; break;
-                        case 'c': o += "\u001bOR"; break;
-                        case 'd': o += "\u001bOS"; break;
-                        case 'e': o += "\u001b[15~"; break;
-                        case 'f': o += "\u001b[17~"; break;
-                        case 'g': o += "\u001b[18~"; break;
-                        case 'h': o += "\u001b[19~"; break;
-                        case 'i': o += "\u001b[20~"; break;
-                        case 'j': o += "\u001b[21~"; break;
-                        case 'k': o += "\u001b[23~"; break;
-                        case 'l': o += "\u001b[24~"; break;
-                    }
-                } else {
-                    switch (c) {
-                        case '~': o += "~"; break;
-                        case 'A': o += "\u001b[A"; break;
-                        case 'B': o += "\u001b[B"; break;
-                        case 'C': o += "\u001b[C"; break;
-                        case 'D': o += "\u001b[D"; break;
-                        case 'F': o += "\u001b[F"; break;
-                        case 'H': o += "\u001b[H"; break;
-                        case '1': o += "\u001b[5~"; break;
-                        case '2': o += "\u001b[6~"; break;
-                        case '3': o += "\u001b[2~"; break;
-                        case '4': o += "\u001b[3~"; break;
-                        case 'a': o += "\u001bOP"; break;
-                        case 'b': o += "\u001bOQ"; break;
-                        case 'c': o += "\u001bOR"; break;
-                        case 'd': o += "\u001bOS"; break;
-                        case 'e': o += "\u001b[15~"; break;
-                        case 'f': o += "\u001b[17~"; break;
-                        case 'g': o += "\u001b[18~"; break;
-                        case 'h': o += "\u001b[19~"; break;
-                        case 'i': o += "\u001b[20~"; break;
-                        case 'j': o += "\u001b[21~"; break;
-                        case 'k': o += "\u001b[23~"; break;
-                        case 'l': o += "\u001b[24~"; break;
-                    }
-                }
-            } else if (c == '~') {
-                vt100_keyfilter_escape = true;
-            } else if (c == 127) {
-                if (vt100_mode_backspace) {
-                    o += (char) 8;
-                } else {
-                    o += (char) 127;
-                }
-            } else {
-                o += c;
-                if (vt100_mode_lfnewline && c == 13) {
-                    o += (char) 10;
-                }
-            }
-        }
-        return o;
-    }
-
-    public synchronized boolean write(String d) {
-        d = utf8_decode(d);
-        for (int c : d.toCharArray()) {
-            if (vt100_write(c)) {
-                continue;
-            }
-            if (dumb_write(c)) {
-                continue;
-            }
-            if (c <= 0xffff) {
-                dumb_echo(c);
-            }
-        }
-        return true;
-    }
-
-    public synchronized String dump(long timeout, boolean forceDump) throws InterruptedException {
-        if (!dirty.get() && timeout > 0) {
-            wait(timeout);
-        }
-        if (dirty.compareAndSet(true, false) || forceDump) {
-            StringBuilder sb = new StringBuilder();
-            int prev_attr = -1;
-            int cx = Math.min(this.cx, width - 1);
-            int cy = this.cy;
-            sb.append("<div><pre class='term'>");
-            for (int y = 0; y < height; y++) {
-                int wx = 0;
-                for (int x = 0; x < width; x++) {
-                    int d = screen[y * width + x];
-                    int c = d & 0xffff;
-                    int a = d >> 16;
-                    if (cy == y && cx == x && vt100_mode_cursor) {
-                        a = a & 0xfff0 | 0x000c;
-                    }
-                    if (a != prev_attr) {
-                        if (prev_attr != -1) {
-                            sb.append("</span>");
-                        }
-                        int bg = a & 0x000f;
-                        int fg = (a & 0x00f0) >> 4;
-                        boolean inv = (a & 0x0200) != 0;
-                        boolean inv2 = vt100_mode_inverse;
-                        if (inv && !inv2 || inv2 && !inv) {
-                            int i = fg; fg = bg; bg = i;
-                        }
-                        if ((a & 0x0400) != 0) {
-                            fg = 0x0c;
-                        }
-                        String ul;
-                        if ((a & 0x0100) != 0) {
-                            ul = " ul";
-                        } else {
-                            ul = "";
-                        }
-                        String b;
-                        if ((a & 0x0800) != 0) {
-                            b = " b";
-                        } else {
-                            b = "";
-                        }
-                        sb.append("<span class='f").append(fg).append(" b").append(bg).append(ul).append(b).append("'>");
-                        prev_attr = a;
-                    }
-                    switch (c) {
-                        case '&': sb.append("&amp;"); break;
-                        case '<': sb.append("&lt;"); break;
-                        case '>': sb.append("&gt;"); break;
-                        default:
-                            wx += utf8_charwidth(c);
-                            if (wx <= width) {
-                                sb.append((char) c);
-                            }
-                            break;
-                    }
-                }
-                sb.append("\n");
-            }
-            sb.append("</span></pre></div>");
-            return sb.toString();
-        }
-        return null;
-    }
-
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-        for (int y = 0; y < height; y++) {
-            for (int x = 0; x < width; x++) {
-                sb.append((char) (screen[y * width + x] & 0xffff));
-            }
-            sb.append("\n");
-        }
-        return sb.toString();
-    }
-}
diff --git a/karaf-2.3.x/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/WebTerminal.java b/karaf-2.3.x/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/WebTerminal.java
deleted file mode 100644
index 325664d..0000000
--- a/karaf-2.3.x/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/WebTerminal.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.
- */
-package org.apache.karaf.webconsole.gogo;
-
-import jline.TerminalSupport;
-
-public class WebTerminal extends TerminalSupport {
-
-    private int width;
-    private int height;
-
-    public WebTerminal(int width, int height) {
-        super(true);
-        this.width = width;
-        this.height = height;
-    }
-
-    public void init() throws Exception {
-    }
-
-    public void restore() throws Exception {
-    }
-
-    public int getWidth() {
-        return width;
-    }
-
-    public int getHeight() {
-        return height;
-    }
-
-}
diff --git a/karaf-2.3.x/webconsole/gogo/src/main/resources/OSGI-INF/blueprint/webconsole-gogo.xml b/karaf-2.3.x/webconsole/gogo/src/main/resources/OSGI-INF/blueprint/webconsole-gogo.xml
deleted file mode 100644
index e66919e..0000000
--- a/karaf-2.3.x/webconsole/gogo/src/main/resources/OSGI-INF/blueprint/webconsole-gogo.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
-
-    <reference id="commandProcessor" interface="org.apache.felix.service.command.CommandProcessor" />
-
-    <bean id="gogoPlugin" class="org.apache.karaf.webconsole.gogo.GogoPlugin" init-method="start" destroy-method="stop">
-        <property name="commandProcessor" ref="commandProcessor" />
-        <property name="bundleContext" ref="blueprintBundleContext" />
-    </bean>
-
-    <service ref="gogoPlugin" interface="javax.servlet.Servlet" >
-        <service-properties>
-            <entry key="felix.webconsole.label" value="gogo"/>
-        </service-properties>
-    </service>
-
-</blueprint>
diff --git a/karaf-2.3.x/webconsole/gogo/src/main/resources/OSGI-INF/bundle.info b/karaf-2.3.x/webconsole/gogo/src/main/resources/OSGI-INF/bundle.info
deleted file mode 100644
index f87818a..0000000
--- a/karaf-2.3.x/webconsole/gogo/src/main/resources/OSGI-INF/bundle.info
+++ /dev/null
@@ -1,13 +0,0 @@
-\u001B[1mSYNOPSIS\u001B[0m
-    ${project.name}
-
-    ${project.description}
-
-    Maven URL:
-        \u001B[33mmvn:${project.groupId}/${project.artifactId}/${project.version}\u001B[0m
-
-\u001B[1mDESCRIPTION\u001B[0m
-    This bundle provides Gogo plugin for the Apache Felix Web console.
-
-\u001B[1mSEE ALSO\u001B[0m
-    \u001B[36mWeb console\u001B[0m section of the Karaf User Guide.
\ No newline at end of file
diff --git a/karaf-2.3.x/webconsole/gogo/src/main/resources/res/ui/gogo.css b/karaf-2.3.x/webconsole/gogo/src/main/resources/res/ui/gogo.css
deleted file mode 100644
index b15ece8..0000000
--- a/karaf-2.3.x/webconsole/gogo/src/main/resources/res/ui/gogo.css
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * Based on http://antony.lesuisse.org/software/ajaxterm/
- *  Public Domain License
- */
-
-div#console {
-    font-size: 12px;
-    margin: 12px;
-}
-
-div#term {
-    display: inline-block;
-}
-
-pre.stat {
-	margin: 0px;
-	padding: 4px;
-	display: block;
-	font-family: monospace;
-	white-space: pre;
-	background-color: black;
-	border-top: 1px solid black;
-	color: white;
-}
-pre.stat span {
-	padding: 0px;
-}
-pre.stat .on {
-	background-color: #080;
-	font-weight: bold;
-	color: white;
-	cursor: pointer;
-}
-pre.stat .off {
-	background-color: #888;
-	font-weight: bold;
-	color: white;
-	cursor: pointer;
-}
-pre.term {
-	margin: 0px;
-	padding: 4px;
-	display: block;
-	font-family: monospace;
-	white-space: pre;
-    background:#000;
-	border-top: 1px solid white;
-	color: #eee;
-}
-pre.term span.f0  { color: #000000; }
-pre.term span.f1  { color: #c00006; }
-pre.term span.f2  { color: #1bc806; }
-pre.term span.f3  { color: #c3c609; }
-pre.term span.f4  { color: #0000c2; }
-pre.term span.f5  { color: #bf00c2; }
-pre.term span.f6  { color: #19c4c2; }
-pre.term span.f7  { color: #f2f2f2; }
-pre.term span.f12 { color: transparent; }
-pre.term span.f14 { color: #000000; }
-pre.term span.f15 { color: #bbbbbb; }
-pre.term span.b0  { background-color: #000000; }
-pre.term span.b1  { background-color: #cc2300; }
-pre.term span.b2  { background-color: #00cc00; }
-pre.term span.b3  { background-color: #cccc00; }
-pre.term span.b4  { background-color: #0e2acc; }
-pre.term span.b5  { background-color: #cc34cc; }
-pre.term span.b6  { background-color: #00cccc; }
-pre.term span.b7  { background-color: #f5f5f5; }
-pre.term span.b12 { background-color: #555555; }
-pre.term span.b14 { background-color: transparent; }
-pre.term span.b15 { background-color: #ffffff; }
-pre.term span.ul  { text-decoration: underline; }
-pre.term span.b   { font-weight:900; }
-
diff --git a/karaf-2.3.x/webconsole/gogo/src/main/resources/res/ui/gogo.js b/karaf-2.3.x/webconsole/gogo/src/main/resources/res/ui/gogo.js
deleted file mode 100644
index b951a6f..0000000
--- a/karaf-2.3.x/webconsole/gogo/src/main/resources/res/ui/gogo.js
+++ /dev/null
@@ -1,245 +0,0 @@
-//
-// 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.
-//
-
-//
-// Based on http://antony.lesuisse.org/software/ajaxterm/
-//  Public Domain License
-//
-
-gogo = { };
-
-gogo.Terminal_ctor = function(div, width, height) {
-
-   var query0 = "w=" + width + "&h=" + height;
-   var query1 = query0 + "&k=";
-   var buf = "";
-   var timeout;
-   var error_timeout;
-   var keybuf = [];
-   var sending = 0;
-   var rmax = 1;
-   var force = 1;
-
-   var dstat = document.createElement('pre');
-   var sled = document.createElement('span');
-   var sdebug = document.createElement('span');
-   var dterm = document.createElement('div');
-
-   function debug(s) {
-       sdebug.innerHTML = s;
-   }
-
-   function error() {
-       sled.className = 'off';
-       debug("Connection lost timeout ts:" + ((new Date).getTime()));
-   }
-
-   function update() {
-       if (sending == 0) {
-           sending = 1;
-           sled.className = 'on';
-           var r = new XMLHttpRequest();
-           var send = "";
-           while (keybuf.length > 0) {
-               send += keybuf.pop();
-           }
-           var query = query1 + send;
-           if (force) {
-               query = query + "&f=1";
-               force = 0;
-           }
-           r.open("POST", "gogo", true);
-           r.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
-           r.onreadystatechange = function () {
-               if (r.readyState == 4) {
-                   if (r.status == 200) {
-                       window.clearTimeout(error_timeout);
-                       if (r.responseText.length > 0) {
-                           dterm.innerHTML = r.responseText;
-                           rmax = 100;
-                       } else {
-                           rmax *= 2;
-                           if (rmax > 2000)
-                               rmax = 2000;
-                       }
-                       sending=0;
-                       sled.className = 'off';
-                       timeout = window.setTimeout(update, rmax);
-                   } else {
-                       debug("Connection error status:" + r.status);
-                   }
-               }
-           }
-           error_timeout = window.setTimeout(error, 5000);
-           r.send(query);
-       }
-   }
-
-   function queue(s) {
-       keybuf.unshift(s);
-       if (sending == 0) {
-           window.clearTimeout(timeout);
-           timeout = window.setTimeout(update, 1);
-       }
-   }
-
-   function keypress(ev, fromkeydown) {
-        // Translate to standard keycodes
-        if (!ev)
-            ev = window.event;
-        var kc;
-        if (ev.keyCode)
-            kc = ev.keyCode;
-        if (!fromkeydown && ev.which)
-            kc = ev.which;
-        if (ev.ctrlKey) {
-            if (kc >= 0 && kc <= 32)
-                kc = kc;
-            else if (kc >= 65 && kc <= 90)
-                kc -= 64;
-            else if (kc >= 97 && kc <= 122)
-                kc -= 96;
-            else {
-                switch (kc) {
-                    case 54:  kc=30; break;	// Ctrl-^
-                    case 109: kc=31; break;	// Ctrl-_
-                    case 219: kc=27; break;	// Ctrl-[
-                    case 220: kc=28; break;	// Ctrl-\
-                    case 221: kc=29; break;	// Ctrl-]
-                    default: return true;
-                }
-            }
-        } else if (fromkeydown) {
-            switch(kc) {
-                case 8: break;			     // Backspace
-                case 9: break;               // Tab
-                case 27: break;			     // ESC
-                case 33:  kc = 63276; break; // PgUp
-                case 34:  kc = 63277; break; // PgDn
-                case 35:  kc = 63275; break; // End
-                case 36:  kc = 63273; break; // Home
-                case 37:  kc = 63234; break; // Left
-                case 38:  kc = 63232; break; // Up
-                case 39:  kc = 63235; break; // Right
-                case 40:  kc = 63233; break; // Down
-                case 45:  kc = 63302; break; // Ins
-                case 46:  kc = 63272; break; // Del
-                case 112: kc = 63236; break; // F1
-                case 113: kc = 63237; break; // F2
-                case 114: kc = 63238; break; // F3
-                case 115: kc = 63239; break; // F4
-                case 116: kc = 63240; break; // F5
-                case 117: kc = 63241; break; // F6
-                case 118: kc = 63242; break; // F7
-                case 119: kc = 63243; break; // F8
-                case 120: kc = 63244; break; // F9
-                case 121: kc = 63245; break; // F10
-                case 122: kc = 63246; break; // F11
-                case 123: kc = 63247; break; // F12
-                default: return true;
-            }
-        }
-
-        var k = "";
-        // Build character
-        switch (kc) {
-            case 126:   k = "~~"; break;
-            case 63232: k = "~A"; break; // Up
-            case 63233: k = "~B"; break; // Down
-            case 63234: k = "~D"; break; // Left
-            case 63235: k = "~C"; break; // Right
-            case 63276: k = "~1"; break; // PgUp
-            case 63277: k = "~2"; break; // PgDn
-            case 63273: k = "~H"; break; // Home
-            case 63275: k = "~F"; break; // End
-            case 63302: k = "~3"; break; // Ins
-            case 63272: k = "~4"; break; // Del
-            case 63236: k = "~a"; break; // F1
-            case 63237: k = "~b"; break; // F2
-            case 63238: k = "~c"; break; // F3
-            case 63239: k = "~d"; break; // F4
-            case 63240: k = "~e"; break; // F5
-            case 63241: k = "~f"; break; // F6
-            case 63242: k = "~g"; break; // F7
-            case 63243: k = "~h"; break; // F8
-            case 63244: k = "~i"; break; // F9
-            case 63245: k = "~j"; break; // F10
-            case 63246: k = "~k"; break; // F11
-            case 63247: k = "~l"; break; // F12
-            default:    k = String.fromCharCode(kc); break;
-        }
-
-//        debug("fromkeydown=" + fromkeydown + ", ev.keyCode=" + ev.keyCode + ", " +
-//              "ev.which=" + ev.which + ", ev.ctrlKey=" + ev.ctrlKey + ", " +
-//              "kc=" + kc + ", k=" + k);
-
-        queue(encodeURIComponent(k));
-
-        ev.cancelBubble = true;
-        if (ev.stopPropagation) ev.stopPropagation();
-        if (ev.preventDefault) ev.preventDefault();
-
-        return true;
-   }
-
-   function keydown(ev) {
-       if (!ev)
-          ev = window.event;
-           o = { 9:1, 8:1, 27:1, 33:1, 34:1, 35:1, 36:1, 37:1, 38:1, 39:1, 40:1, 45:1, 46:1, 112:1,
-                 113:1, 114:1, 115:1, 116:1, 117:1, 118:1, 119:1, 120:1, 121:1, 122:1, 123:1 };
-           if (o[ev.keyCode] || ev.ctrlKey || ev.altKey) {
-               keypress(ev, true);
-           }
-   }
-
-   function init() {
-       if (typeof(XMLHttpRequest) == "undefined") {
-         XMLHttpRequest = function() {
-           try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); }
-             catch(e) {}
-           try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }
-             catch(e) {}
-           try { return new ActiveXObject("Msxml2.XMLHTTP"); }
-             catch(e) {}
-           try { return new ActiveXObject("Microsoft.XMLHTTP"); }
-             catch(e) {}
-           throw new Error("This browser does not support XMLHttpRequest.");
-         };
-       }
-       sled.appendChild(document.createTextNode('\xb7'));
-       sled.className = 'off';
-       dstat.appendChild(sled);
-       dstat.appendChild(document.createTextNode(' '));
-       dstat.appendChild(sdebug);
-       dstat.className = 'stat';
-       div.appendChild(dstat);
-       var d = document.createElement('div');
-       d.appendChild(dterm);
-       div.appendChild(d);
-       document.onkeypress = keypress;
-       document.onkeydown = keydown;
-       timeout = window.setTimeout(update, 100);
-   }
-
-   init();
-
-}
-
-gogo.Terminal = function(div, width, height) {
-   return new this.Terminal_ctor(div, width, height);
-}
-
diff --git a/karaf-2.3.x/webconsole/pom.xml b/karaf-2.3.x/webconsole/pom.xml
deleted file mode 100644
index 29dd7a2..0000000
--- a/karaf-2.3.x/webconsole/pom.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf</groupId>
-        <artifactId>karaf</artifactId>
-        <version>2.3.1</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <groupId>org.apache.karaf.webconsole</groupId>
-    <artifactId>webconsole</artifactId>
-    <packaging>pom</packaging>
-    <name>Apache Karaf :: Web Console</name>
-
-    <modules>
-        <module>console</module>
-        <module>branding</module>
-        <module>features</module>
-        <module>gogo</module>
-        <module>admin</module>
-    </modules>
-
-</project>