[379084] Contributes I18N coding assistances

Contributes the following plug-ins for extending the Eclipse Java IDE with smart tools for reducing the effort of Internationalization.

* `org.eclipse.babel.tapiji.tools.core`: Core plug-in for I18N tooling
* `org.eclipse.babel.tapiji.tools.core.ui`: Common UI elements for I18N tooling
* `org.eclipse.babel.tapiji.tools.java`: Java programming language specific I18N assistances
* `org.eclipse.babel.tapiji.tools.java.ui`: UI elements for Java I18N

Internationalization based on the basic Java API is a tedious task and introduces additional complexity into development. For example, typical faults are:

* The export of culture-neutral configuration strings
* The incomplete export of constant string literals
* To hard code constant string literals
* To build static format strings and
* To reuse externalized literals in different contexts

These problems are addressed by the contributed tooling with the goal of making I18N tasks more transparent. For example, hard coded cultural aspects as well as broken Internationalizations are reported to the problem view and can be immediately resolved with a rich set of quick fixes.

close 379084
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/.classpath b/org.eclipse.babel.tapiji.tools.core.ui/.classpath
new file mode 100644
index 0000000..8a8f166
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/org.eclipse.babel.tapiji.tools.core.ui/.project b/org.eclipse.babel.tapiji.tools.core.ui/.project
new file mode 100644
index 0000000..8dce816
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.babel.tapiji.tools.core.ui</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+	</natures>

+</projectDescription>

diff --git a/org.eclipse.babel.tapiji.tools.core.ui/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.babel.tapiji.tools.core.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..8fba022
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Fri Mar 16 22:52:15 CET 2012

+eclipse.preferences.version=1

+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6

+org.eclipse.jdt.core.compiler.compliance=1.6

+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

+org.eclipse.jdt.core.compiler.source=1.6

diff --git a/org.eclipse.babel.tapiji.tools.core.ui/META-INF/MANIFEST.MF b/org.eclipse.babel.tapiji.tools.core.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..8f5d695
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,42 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: TapiJI Tools Core UI
+Bundle-SymbolicName: org.eclipse.babel.tapiji.tools.core.ui;singleton:=true
+Bundle-Version: 0.0.2.qualifier
+Bundle-Activator: org.eclipse.babel.tapiji.tools.core.ui.Activator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.jdt.ui;bundle-version="3.6.2",
+ org.eclipse.babel.tapiji.tools.core;bundle-version="0.0.2";visibility:=reexport,
+ org.eclipse.ui.ide;bundle-version="3.6.2",
+ org.eclipse.jface.text;bundle-version="3.6.1",
+ org.eclipse.jdt.core;bundle-version="3.6.2",
+ org.eclipse.core.resources;bundle-version="3.6.1",
+ org.eclipse.ui.editors,
+ org.eclipse.babel.editor;bundle-version="0.8.0";visibility:=reexport
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Export-Package: org.eclipse.babel.tapiji.tools.core.ui,
+ org.eclipse.babel.tapiji.tools.core.ui.analyzer,
+ org.eclipse.babel.tapiji.tools.core.ui.builder,
+ org.eclipse.babel.tapiji.tools.core.ui.decorators,
+ org.eclipse.babel.tapiji.tools.core.ui.dialogs,
+ org.eclipse.babel.tapiji.tools.core.ui.extensions,
+ org.eclipse.babel.tapiji.tools.core.ui.filters,
+ org.eclipse.babel.tapiji.tools.core.ui.markers,
+ org.eclipse.babel.tapiji.tools.core.ui.memento,
+ org.eclipse.babel.tapiji.tools.core.ui.menus,
+ org.eclipse.babel.tapiji.tools.core.ui.preferences,
+ org.eclipse.babel.tapiji.tools.core.ui.quickfix,
+ org.eclipse.babel.tapiji.tools.core.ui.utils,
+ org.eclipse.babel.tapiji.tools.core.ui.views.messagesview,
+ org.eclipse.babel.tapiji.tools.core.ui.views.messagesview.dnd,
+ org.eclipse.babel.tapiji.tools.core.ui.widgets,
+ org.eclipse.babel.tapiji.tools.core.ui.widgets.event,
+ org.eclipse.babel.tapiji.tools.core.ui.widgets.filter,
+ org.eclipse.babel.tapiji.tools.core.ui.widgets.listener,
+ org.eclipse.babel.tapiji.tools.core.ui.widgets.provider,
+ org.eclipse.babel.tapiji.tools.core.ui.widgets.sorter
+Import-Package: org.eclipse.core.filebuffers,
+ org.eclipse.ui.texteditor
+Bundle-Vendor: Vienna University of Technology
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/about.html b/org.eclipse.babel.tapiji.tools.core.ui/about.html
new file mode 100644
index 0000000..f47dbdd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>

+<title>About</title>

+</head>

+<body lang="EN-US">

+<h2>About This Content</h2>

+ 

+<p>June 5, 2006</p>	

+<h3>License</h3>

+

+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 

+indicated below, the Content is provided to you under the terms and conditions of the

+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 

+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.

+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>

+

+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 

+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may

+apply to your use of any object code in the Content.  Check the Redistributor's license that was 

+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise

+indicated below, the terms and conditions of the EPL still apply to any source code in the Content

+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>

+

+</body>

+</html>
\ No newline at end of file
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/build.properties b/org.eclipse.babel.tapiji.tools.core.ui/build.properties
new file mode 100644
index 0000000..285b8bf
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/build.properties
@@ -0,0 +1,6 @@
+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .,\

+               plugin.xml,\

+               icons/

diff --git a/org.eclipse.babel.tapiji.tools.core.ui/epl-v10.html b/org.eclipse.babel.tapiji.tools.core.ui/epl-v10.html
new file mode 100644
index 0000000..84ec251
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/epl-v10.html
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+  body {
+    size: 8.5in 11.0in;
+    margin: 0.25in 0.5in 0.25in 0.5in;
+    tab-interval: 0.5in;
+    }
+  p {  	
+    margin-left: auto;
+    margin-top:  0.5em;
+    margin-bottom: 0.5em;
+    }
+  p.list {
+  	margin-left: 0.5in;
+    margin-top:  0.05em;
+    margin-bottom: 0.05em;
+    }
+  </style>
+
+</head>
+
+<body lang="EN-US">
+
+<p align=center><b>Eclipse Public License - v 1.0</b></p>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>&quot;Contribution&quot; means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">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.</p>
+
+<p>&quot;Contributor&quot; means any person or entity that distributes
+the Program.</p>
+
+<p>&quot;Licensed Patents&quot; 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.</p>
+
+<p>&quot;Program&quot; means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>&quot;Recipient&quot; means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">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.</p>
+
+<p class="list">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.</p>
+
+<p class="list">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.</p>
+
+<p class="list">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.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">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;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">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.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>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.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>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
+(&quot;Commercial Contributor&quot;) hereby agrees to defend and
+indemnify every other Contributor (&quot;Indemnified Contributor&quot;)
+against any losses, damages and costs (collectively &quot;Losses&quot;)
+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.</p>
+
+<p>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.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN &quot;AS IS&quot; 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.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>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.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+</body>
+
+</html>
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/Folder.png b/org.eclipse.babel.tapiji.tools.core.ui/icons/Folder.png
new file mode 100644
index 0000000..a699bfc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/Folder.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/Glossary.psd b/org.eclipse.babel.tapiji.tools.core.ui/icons/Glossary.psd
new file mode 100644
index 0000000..9da95ac
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/Glossary.psd
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/NewGlossary.png b/org.eclipse.babel.tapiji.tools.core.ui/icons/NewGlossary.png
new file mode 100644
index 0000000..ac91bf1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/NewGlossary.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/OpenGlossary.png b/org.eclipse.babel.tapiji.tools.core.ui/icons/OpenGlossary.png
new file mode 100644
index 0000000..85917f4
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/OpenGlossary.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/OpenGlossary2.png b/org.eclipse.babel.tapiji.tools.core.ui/icons/OpenGlossary2.png
new file mode 100644
index 0000000..e02b952
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/OpenGlossary2.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/OpenGlossary3.png b/org.eclipse.babel.tapiji.tools.core.ui/icons/OpenGlossary3.png
new file mode 100644
index 0000000..e8a0b0a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/OpenGlossary3.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/OpenGlossary4.png b/org.eclipse.babel.tapiji.tools.core.ui/icons/OpenGlossary4.png
new file mode 100644
index 0000000..7a2ddc7
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/OpenGlossary4.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/OpenGlossary5.png b/org.eclipse.babel.tapiji.tools.core.ui/icons/OpenGlossary5.png
new file mode 100644
index 0000000..020c1ad
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/OpenGlossary5.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/Resource16.png b/org.eclipse.babel.tapiji.tools.core.ui/icons/Resource16.png
new file mode 100644
index 0000000..1b0966c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/Resource16.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/Resource16_small.png b/org.eclipse.babel.tapiji.tools.core.ui/icons/Resource16_small.png
new file mode 100644
index 0000000..da9f603
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/Resource16_small.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/Resource16_warning_small.png b/org.eclipse.babel.tapiji.tools.core.ui/icons/Resource16_warning_small.png
new file mode 100644
index 0000000..ec47a9a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/Resource16_warning_small.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/TapiJI.png b/org.eclipse.babel.tapiji.tools.core.ui/icons/TapiJI.png
new file mode 100644
index 0000000..e274c0c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/TapiJI.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/TapiJI_128.png b/org.eclipse.babel.tapiji.tools.core.ui/icons/TapiJI_128.png
new file mode 100644
index 0000000..98514e0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/TapiJI_128.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/TapiJI_16.png b/org.eclipse.babel.tapiji.tools.core.ui/icons/TapiJI_16.png
new file mode 100644
index 0000000..73b82c2
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/TapiJI_16.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/TapiJI_32.png b/org.eclipse.babel.tapiji.tools.core.ui/icons/TapiJI_32.png
new file mode 100644
index 0000000..3984eba
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/TapiJI_32.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/TapiJI_48.png b/org.eclipse.babel.tapiji.tools.core.ui/icons/TapiJI_48.png
new file mode 100644
index 0000000..190a92e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/TapiJI_48.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/TapiJI_64.png b/org.eclipse.babel.tapiji.tools.core.ui/icons/TapiJI_64.png
new file mode 100644
index 0000000..8998807
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/TapiJI_64.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/.cvsignore b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/.cvsignore
new file mode 100644
index 0000000..f47afba
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/.cvsignore
@@ -0,0 +1 @@
+Thumbs.db

diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/__.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/__.gif
new file mode 100644
index 0000000..6516784
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/__.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/_f.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/_f.gif
new file mode 100644
index 0000000..a5f340d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/_f.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ad.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ad.gif
new file mode 100644
index 0000000..0b24054
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ad.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ae.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ae.gif
new file mode 100644
index 0000000..a4a82ff
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ae.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/af.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/af.gif
new file mode 100644
index 0000000..70e1a15
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/af.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ag.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ag.gif
new file mode 100644
index 0000000..2dc04e5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ag.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/al.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/al.gif
new file mode 100644
index 0000000..1384f59
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/al.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/am.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/am.gif
new file mode 100644
index 0000000..eda901e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/am.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ao.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ao.gif
new file mode 100644
index 0000000..56f02bb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ao.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/aq.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/aq.gif
new file mode 100644
index 0000000..d8e99da
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/aq.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ar.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ar.gif
new file mode 100644
index 0000000..0231d50
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ar.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/at.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/at.gif
new file mode 100644
index 0000000..ecf48b9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/at.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/au.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/au.gif
new file mode 100644
index 0000000..7776124
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/au.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/az.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/az.gif
new file mode 100644
index 0000000..bc77ff2
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/az.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ba.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ba.gif
new file mode 100644
index 0000000..8e4e549
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ba.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bb.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bb.gif
new file mode 100644
index 0000000..54928a6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bb.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bd.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bd.gif
new file mode 100644
index 0000000..25890b9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/be.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/be.gif
new file mode 100644
index 0000000..f917f39
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/be.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bf.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bf.gif
new file mode 100644
index 0000000..53afd44
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bf.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bg.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bg.gif
new file mode 100644
index 0000000..5ce1db1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bh.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bh.gif
new file mode 100644
index 0000000..ba39230
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bi.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bi.gif
new file mode 100644
index 0000000..ee3d6a4
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bi.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bj.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bj.gif
new file mode 100644
index 0000000..55463ef
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/blank.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/blank.gif
new file mode 100644
index 0000000..314b863
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/blank.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bn.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bn.gif
new file mode 100644
index 0000000..ed11638
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bo.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bo.gif
new file mode 100644
index 0000000..f179698
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bo.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/br.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/br.gif
new file mode 100644
index 0000000..e1069e0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/br.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bs.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bs.gif
new file mode 100644
index 0000000..30c32c3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bs.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bt.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bt.gif
new file mode 100644
index 0000000..b53dddf
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bw.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bw.gif
new file mode 100644
index 0000000..d73ad71
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/by.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/by.gif
new file mode 100644
index 0000000..3335ae0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/by.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bz.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bz.gif
new file mode 100644
index 0000000..ec05637
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/bz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ca.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ca.gif
new file mode 100644
index 0000000..547011a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ca.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cd.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cd.gif
new file mode 100644
index 0000000..44fa441
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cf.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cf.gif
new file mode 100644
index 0000000..41405ce
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cf.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cg.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cg.gif
new file mode 100644
index 0000000..00fa29c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ch.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ch.gif
new file mode 100644
index 0000000..b0dc176
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ch.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ci.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ci.gif
new file mode 100644
index 0000000..b1167c0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ci.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cl.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cl.gif
new file mode 100644
index 0000000..31dcb03
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cl.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cm.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cm.gif
new file mode 100644
index 0000000..f361dbd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cn.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cn.gif
new file mode 100644
index 0000000..f12f17d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/co.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/co.gif
new file mode 100644
index 0000000..d9f14e7
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/co.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cr.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cr.gif
new file mode 100644
index 0000000..2a5f0b9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cs.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cs.gif
new file mode 100644
index 0000000..580d26f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cs.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cu.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cu.gif
new file mode 100644
index 0000000..823befc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cv.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cv.gif
new file mode 100644
index 0000000..d21a45c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cy.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cy.gif
new file mode 100644
index 0000000..1a332d9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cy.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cz.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cz.gif
new file mode 100644
index 0000000..2faee5e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/cz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/dd.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/dd.gif
new file mode 100644
index 0000000..99eda38
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/dd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/de.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/de.gif
new file mode 100644
index 0000000..c7b2840
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/de.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/dj.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/dj.gif
new file mode 100644
index 0000000..94fc2eb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/dj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/dk.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/dk.gif
new file mode 100644
index 0000000..4f01ec9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/dk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/dm.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/dm.gif
new file mode 100644
index 0000000..b4fed90
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/dm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/do.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/do.gif
new file mode 100644
index 0000000..85d7be8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/do.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/dz.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/dz.gif
new file mode 100644
index 0000000..622ff6b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/dz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ec.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ec.gif
new file mode 100644
index 0000000..5d1641b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ec.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ee.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ee.gif
new file mode 100644
index 0000000..c678c73
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ee.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/eg.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/eg.gif
new file mode 100644
index 0000000..a740c66
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/eg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/eh.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/eh.gif
new file mode 100644
index 0000000..6a75cc3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/eh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/er.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/er.gif
new file mode 100644
index 0000000..71297d6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/er.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/es.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/es.gif
new file mode 100644
index 0000000..6dee15c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/es.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/et.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/et.gif
new file mode 100644
index 0000000..4188e4f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/et.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/eu.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/eu.gif
new file mode 100644
index 0000000..45caabf
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/eu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/fi.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/fi.gif
new file mode 100644
index 0000000..b8311ca
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/fi.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/fj.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/fj.gif
new file mode 100644
index 0000000..f5481b7
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/fj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/fm.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/fm.gif
new file mode 100644
index 0000000..050eca0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/fm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/fr.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/fr.gif
new file mode 100644
index 0000000..a2a2354
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/fr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ga.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ga.gif
new file mode 100644
index 0000000..54fb251
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ga.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gb.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gb.gif
new file mode 100644
index 0000000..4ae2d0f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gb.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gd.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gd.gif
new file mode 100644
index 0000000..0095032
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ge.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ge.gif
new file mode 100644
index 0000000..f3927c8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ge.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gh.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gh.gif
new file mode 100644
index 0000000..6d3b614
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gm.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gm.gif
new file mode 100644
index 0000000..2ecf0b0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gn.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gn.gif
new file mode 100644
index 0000000..8317935
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gq.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gq.gif
new file mode 100644
index 0000000..6c2bc47
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gq.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gr.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gr.gif
new file mode 100644
index 0000000..1599add
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gt.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gt.gif
new file mode 100644
index 0000000..c306f25
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gw.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gw.gif
new file mode 100644
index 0000000..6cba590
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gy.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gy.gif
new file mode 100644
index 0000000..a4b4da9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/gy.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/hk.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/hk.gif
new file mode 100644
index 0000000..230723a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/hk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/hn.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/hn.gif
new file mode 100644
index 0000000..0550157
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/hn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/hr.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/hr.gif
new file mode 100644
index 0000000..893778a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/hr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ht.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ht.gif
new file mode 100644
index 0000000..e5cf780
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ht.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/hu.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/hu.gif
new file mode 100644
index 0000000..0777883
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/hu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/id.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/id.gif
new file mode 100644
index 0000000..9fed764
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/id.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ie.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ie.gif
new file mode 100644
index 0000000..82ec553
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ie.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/il.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/il.gif
new file mode 100644
index 0000000..554a761
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/il.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/in.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/in.gif
new file mode 100644
index 0000000..430b37b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/in.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/iq.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/iq.gif
new file mode 100644
index 0000000..dae4d59
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/iq.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ir.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ir.gif
new file mode 100644
index 0000000..50f5432
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ir.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/is.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/is.gif
new file mode 100644
index 0000000..e9580e0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/is.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/it.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/it.gif
new file mode 100644
index 0000000..4256b46
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/it.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/jm.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/jm.gif
new file mode 100644
index 0000000..f1459fe
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/jm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/jo.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/jo.gif
new file mode 100644
index 0000000..a9d3612
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/jo.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/jp.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/jp.gif
new file mode 100644
index 0000000..ddad6e3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/jp.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ke.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ke.gif
new file mode 100644
index 0000000..6e06f4a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ke.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/kg.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/kg.gif
new file mode 100644
index 0000000..e47fb0f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/kg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/kh.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/kh.gif
new file mode 100644
index 0000000..31f5be1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/kh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ki.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ki.gif
new file mode 100644
index 0000000..9f12bb0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ki.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/km.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/km.gif
new file mode 100644
index 0000000..027276b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/km.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/kn.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/kn.gif
new file mode 100644
index 0000000..f690875
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/kn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/kp.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/kp.gif
new file mode 100644
index 0000000..42584ef
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/kp.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/kr.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/kr.gif
new file mode 100644
index 0000000..800c6cd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/kr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/kw.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/kw.gif
new file mode 100644
index 0000000..ff083b5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/kw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/kz.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/kz.gif
new file mode 100644
index 0000000..9b13afe
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/kz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/la.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/la.gif
new file mode 100644
index 0000000..3c6f2f1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/la.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/lb.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/lb.gif
new file mode 100644
index 0000000..f3c4552
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/lb.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/lc.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/lc.gif
new file mode 100644
index 0000000..fdcbd97
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/lc.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/li.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/li.gif
new file mode 100644
index 0000000..eb9d938
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/li.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/lk.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/lk.gif
new file mode 100644
index 0000000..3aa25aa
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/lk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/lr.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/lr.gif
new file mode 100644
index 0000000..f54468f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/lr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ls.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ls.gif
new file mode 100644
index 0000000..c1ad8d2
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ls.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/lt.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/lt.gif
new file mode 100644
index 0000000..78447f0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/lt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/lu.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/lu.gif
new file mode 100644
index 0000000..d74df5a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/lu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/lv.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/lv.gif
new file mode 100644
index 0000000..5f7419c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/lv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ly.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ly.gif
new file mode 100644
index 0000000..8ca9e0a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ly.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ma.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ma.gif
new file mode 100644
index 0000000..3aab8cb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ma.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mc.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mc.gif
new file mode 100644
index 0000000..c22c171
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mc.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/md.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/md.gif
new file mode 100644
index 0000000..4951b21
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/md.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mg.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mg.gif
new file mode 100644
index 0000000..24281d8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mh.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mh.gif
new file mode 100644
index 0000000..c472aee
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mk.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mk.gif
new file mode 100644
index 0000000..88c077f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ml.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ml.gif
new file mode 100644
index 0000000..4eb75ae
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ml.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mm.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mm.gif
new file mode 100644
index 0000000..bd37855
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mn.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mn.gif
new file mode 100644
index 0000000..de3029b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mr.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mr.gif
new file mode 100644
index 0000000..d7cbb38
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mt.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mt.gif
new file mode 100644
index 0000000..677969a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mu.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mu.gif
new file mode 100644
index 0000000..d102ab7
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mv.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mv.gif
new file mode 100644
index 0000000..69ac686
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mw.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mw.gif
new file mode 100644
index 0000000..a0f0320
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mx.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mx.gif
new file mode 100644
index 0000000..bbcb376
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mx.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/my.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/my.gif
new file mode 100644
index 0000000..8874751
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/my.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mz.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mz.gif
new file mode 100644
index 0000000..b63af28
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/mz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/na.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/na.gif
new file mode 100644
index 0000000..bee7072
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/na.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ne.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ne.gif
new file mode 100644
index 0000000..fc1b74b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ne.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ng.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ng.gif
new file mode 100644
index 0000000..43af12c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ng.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ni.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ni.gif
new file mode 100644
index 0000000..cac0042
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ni.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/nl.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/nl.gif
new file mode 100644
index 0000000..c4258e6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/nl.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/no.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/no.gif
new file mode 100644
index 0000000..873baca
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/no.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/np.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/np.gif
new file mode 100644
index 0000000..f01f2f9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/np.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/nr.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/nr.gif
new file mode 100644
index 0000000..d485c4b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/nr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/nu.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/nu.gif
new file mode 100644
index 0000000..7317705
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/nu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/nz.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/nz.gif
new file mode 100644
index 0000000..49f8464
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/nz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/om.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/om.gif
new file mode 100644
index 0000000..d90ca33
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/om.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/pa.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/pa.gif
new file mode 100644
index 0000000..cae5432
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/pa.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/pe.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/pe.gif
new file mode 100644
index 0000000..e6cc734
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/pe.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/pg.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/pg.gif
new file mode 100644
index 0000000..108204f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/pg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ph.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ph.gif
new file mode 100644
index 0000000..b141cd8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ph.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/pk.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/pk.gif
new file mode 100644
index 0000000..f612b97
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/pk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/pl.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/pl.gif
new file mode 100644
index 0000000..6ff3ba6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/pl.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ps.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ps.gif
new file mode 100644
index 0000000..71717cc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ps.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/pt.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/pt.gif
new file mode 100644
index 0000000..9bfc8ca
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/pt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/pw.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/pw.gif
new file mode 100644
index 0000000..0a52091
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/pw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/py.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/py.gif
new file mode 100644
index 0000000..b52de24
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/py.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/qa.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/qa.gif
new file mode 100644
index 0000000..e078e46
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/qa.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ro.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ro.gif
new file mode 100644
index 0000000..6bdbad1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ro.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ru.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ru.gif
new file mode 100644
index 0000000..cf4d30c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ru.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/rw.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/rw.gif
new file mode 100644
index 0000000..02cf0cb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/rw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sa.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sa.gif
new file mode 100644
index 0000000..4b7632e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sa.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sb.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sb.gif
new file mode 100644
index 0000000..eb8acc0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sb.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sc.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sc.gif
new file mode 100644
index 0000000..4324c21
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sc.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sd.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sd.gif
new file mode 100644
index 0000000..2d74f62
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/se.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/se.gif
new file mode 100644
index 0000000..9bbcb1f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/se.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sg.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sg.gif
new file mode 100644
index 0000000..b81f461
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/si.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/si.gif
new file mode 100644
index 0000000..f6afb67
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/si.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sk.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sk.gif
new file mode 100644
index 0000000..b0c4ab1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sl.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sl.gif
new file mode 100644
index 0000000..00d59d3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sl.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sm.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sm.gif
new file mode 100644
index 0000000..8d9d76b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/__.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/__.gif
new file mode 100644
index 0000000..e077f11
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/__.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/_f.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/_f.gif
new file mode 100644
index 0000000..06c1146
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/_f.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ad.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ad.gif
new file mode 100644
index 0000000..578acbb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ad.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ae.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ae.gif
new file mode 100644
index 0000000..9e6f62a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ae.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/af.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/af.gif
new file mode 100644
index 0000000..9fe3975
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/af.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ag.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ag.gif
new file mode 100644
index 0000000..dff85d5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ag.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/al.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/al.gif
new file mode 100644
index 0000000..3cd0dbc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/al.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/am.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/am.gif
new file mode 100644
index 0000000..b5968d0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/am.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ao.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ao.gif
new file mode 100644
index 0000000..cf5f1bb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ao.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/aq.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/aq.gif
new file mode 100644
index 0000000..8394537
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/aq.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ar.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ar.gif
new file mode 100644
index 0000000..7101d18
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ar.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/at.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/at.gif
new file mode 100644
index 0000000..b302cb9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/at.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/au.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/au.gif
new file mode 100644
index 0000000..1e7d95c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/au.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/az.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/az.gif
new file mode 100644
index 0000000..02d9ee9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/az.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ba.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ba.gif
new file mode 100644
index 0000000..1007efd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ba.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bb.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bb.gif
new file mode 100644
index 0000000..29a51f9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bb.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bd.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bd.gif
new file mode 100644
index 0000000..e6f4dc5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/be.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/be.gif
new file mode 100644
index 0000000..55ec17f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/be.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bf.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bf.gif
new file mode 100644
index 0000000..fc26ebb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bf.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bg.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bg.gif
new file mode 100644
index 0000000..04664c0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bh.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bh.gif
new file mode 100644
index 0000000..9dc18e6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bi.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bi.gif
new file mode 100644
index 0000000..6aed037
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bi.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bj.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bj.gif
new file mode 100644
index 0000000..c4d0f86
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/blank.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/blank.gif
new file mode 100644
index 0000000..93f9113
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/blank.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bn.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bn.gif
new file mode 100644
index 0000000..e9481fe
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bo.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bo.gif
new file mode 100644
index 0000000..f083da3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bo.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/br.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/br.gif
new file mode 100644
index 0000000..b44b857
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/br.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bs.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bs.gif
new file mode 100644
index 0000000..dd013c4
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bs.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bt.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bt.gif
new file mode 100644
index 0000000..c12cc45
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bw.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bw.gif
new file mode 100644
index 0000000..0bd4935
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/by.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/by.gif
new file mode 100644
index 0000000..495e17a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/by.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bz.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bz.gif
new file mode 100644
index 0000000..ebc5a1f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/bz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ca.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ca.gif
new file mode 100644
index 0000000..111f6b5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ca.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cd.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cd.gif
new file mode 100644
index 0000000..48a5d4b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cf.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cf.gif
new file mode 100644
index 0000000..82dfeb8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cf.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cg.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cg.gif
new file mode 100644
index 0000000..bc4ce41
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ch.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ch.gif
new file mode 100644
index 0000000..c1daa8c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ch.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ci.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ci.gif
new file mode 100644
index 0000000..01ce79f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ci.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cl.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cl.gif
new file mode 100644
index 0000000..579c737
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cl.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cm.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cm.gif
new file mode 100644
index 0000000..5093f62
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cn.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cn.gif
new file mode 100644
index 0000000..e064426
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/co.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/co.gif
new file mode 100644
index 0000000..ea33538
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/co.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cr.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cr.gif
new file mode 100644
index 0000000..1c3175b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cs.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cs.gif
new file mode 100644
index 0000000..88b6598
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cs.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cu.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cu.gif
new file mode 100644
index 0000000..3333434
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cv.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cv.gif
new file mode 100644
index 0000000..9b13e53
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cy.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cy.gif
new file mode 100644
index 0000000..249719a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cy.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cz.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cz.gif
new file mode 100644
index 0000000..0ae066c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/cz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/dd.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/dd.gif
new file mode 100644
index 0000000..4a47e19
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/dd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/de.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/de.gif
new file mode 100644
index 0000000..6cc466d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/de.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/dj.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/dj.gif
new file mode 100644
index 0000000..e62e277
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/dj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/dk.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/dk.gif
new file mode 100644
index 0000000..f3803a0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/dk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/dm.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/dm.gif
new file mode 100644
index 0000000..69f8079
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/dm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/do.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/do.gif
new file mode 100644
index 0000000..4b9a269
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/do.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/dz.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/dz.gif
new file mode 100644
index 0000000..e88ec91
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/dz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ec.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ec.gif
new file mode 100644
index 0000000..7060478
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ec.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ee.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ee.gif
new file mode 100644
index 0000000..1eb1079
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ee.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/eg.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/eg.gif
new file mode 100644
index 0000000..4efa288
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/eg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/eh.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/eh.gif
new file mode 100644
index 0000000..9acceed
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/eh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/er.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/er.gif
new file mode 100644
index 0000000..30550a3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/er.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/es.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/es.gif
new file mode 100644
index 0000000..9d01bd4
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/es.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/et.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/et.gif
new file mode 100644
index 0000000..7352fca
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/et.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/eu.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/eu.gif
new file mode 100644
index 0000000..1eadf21
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/eu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/fi.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/fi.gif
new file mode 100644
index 0000000..d61952f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/fi.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/fj.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/fj.gif
new file mode 100644
index 0000000..2bcd330
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/fj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/fm.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/fm.gif
new file mode 100644
index 0000000..7f5dbf1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/fm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/fr.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/fr.gif
new file mode 100644
index 0000000..5b9680b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/fr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ga.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ga.gif
new file mode 100644
index 0000000..10322d2
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ga.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gb.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gb.gif
new file mode 100644
index 0000000..03a7414
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gb.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gd.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gd.gif
new file mode 100644
index 0000000..69e2b79
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ge.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ge.gif
new file mode 100644
index 0000000..daeade3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ge.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gh.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gh.gif
new file mode 100644
index 0000000..b1ee6cc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gm.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gm.gif
new file mode 100644
index 0000000..0540321
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gn.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gn.gif
new file mode 100644
index 0000000..18c9211
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gq.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gq.gif
new file mode 100644
index 0000000..21b35aa
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gq.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gr.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gr.gif
new file mode 100644
index 0000000..e690519
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gt.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gt.gif
new file mode 100644
index 0000000..5c3d061
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gw.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gw.gif
new file mode 100644
index 0000000..5d8901f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gy.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gy.gif
new file mode 100644
index 0000000..42483db
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/gy.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/hk.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/hk.gif
new file mode 100644
index 0000000..c745c14
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/hk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/hn.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/hn.gif
new file mode 100644
index 0000000..e43bd5e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/hn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/hr.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/hr.gif
new file mode 100644
index 0000000..a6f704c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/hr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ht.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ht.gif
new file mode 100644
index 0000000..854c969
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ht.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/hu.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/hu.gif
new file mode 100644
index 0000000..04ddf9f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/hu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/id.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/id.gif
new file mode 100644
index 0000000..dcc678e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/id.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ie.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ie.gif
new file mode 100644
index 0000000..b82a61b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ie.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/il.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/il.gif
new file mode 100644
index 0000000..e53b062
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/il.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/in.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/in.gif
new file mode 100644
index 0000000..929e0c2
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/in.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/iq.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/iq.gif
new file mode 100644
index 0000000..f084587
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/iq.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ir.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ir.gif
new file mode 100644
index 0000000..fbfdf31
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ir.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/is.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/is.gif
new file mode 100644
index 0000000..3f490ab
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/is.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/it.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/it.gif
new file mode 100644
index 0000000..5bc1bb2
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/it.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/jm.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/jm.gif
new file mode 100644
index 0000000..6e97f20
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/jm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/jo.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/jo.gif
new file mode 100644
index 0000000..8dfb714
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/jo.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/jp.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/jp.gif
new file mode 100644
index 0000000..6ecf4ff
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/jp.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ke.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ke.gif
new file mode 100644
index 0000000..742aab8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ke.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/kg.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/kg.gif
new file mode 100644
index 0000000..88608a3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/kg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/kh.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/kh.gif
new file mode 100644
index 0000000..ee7ec64
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/kh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ki.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ki.gif
new file mode 100644
index 0000000..5eab4ed
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ki.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/km.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/km.gif
new file mode 100644
index 0000000..f529c42
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/km.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/kn.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/kn.gif
new file mode 100644
index 0000000..20f55e9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/kn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/kp.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/kp.gif
new file mode 100644
index 0000000..2c99418
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/kp.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/kr.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/kr.gif
new file mode 100644
index 0000000..139cf5c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/kr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/kw.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/kw.gif
new file mode 100644
index 0000000..27a43e4
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/kw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/kz.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/kz.gif
new file mode 100644
index 0000000..81cc714
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/kz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/la.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/la.gif
new file mode 100644
index 0000000..86dc6af
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/la.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/lb.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/lb.gif
new file mode 100644
index 0000000..f39803f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/lb.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/lc.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/lc.gif
new file mode 100644
index 0000000..95f6ba6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/lc.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/li.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/li.gif
new file mode 100644
index 0000000..cdfe54c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/li.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/lk.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/lk.gif
new file mode 100644
index 0000000..5486bf0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/lk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/lr.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/lr.gif
new file mode 100644
index 0000000..a70179a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/lr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ls.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ls.gif
new file mode 100644
index 0000000..e4611d0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ls.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/lt.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/lt.gif
new file mode 100644
index 0000000..eca2f15
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/lt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/lu.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/lu.gif
new file mode 100644
index 0000000..c8e2e76
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/lu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/lv.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/lv.gif
new file mode 100644
index 0000000..8e2cabe
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/lv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ly.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ly.gif
new file mode 100644
index 0000000..b31fbec
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ly.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ma.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ma.gif
new file mode 100644
index 0000000..c982926
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ma.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mc.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mc.gif
new file mode 100644
index 0000000..6bd1424
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mc.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/md.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/md.gif
new file mode 100644
index 0000000..a19ff5c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/md.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mg.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mg.gif
new file mode 100644
index 0000000..a0bed49
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mh.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mh.gif
new file mode 100644
index 0000000..b5f879a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mk.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mk.gif
new file mode 100644
index 0000000..776a1a6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ml.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ml.gif
new file mode 100644
index 0000000..7ea931a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ml.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mm.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mm.gif
new file mode 100644
index 0000000..2f8adbd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mn.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mn.gif
new file mode 100644
index 0000000..4d812a0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mr.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mr.gif
new file mode 100644
index 0000000..d92a464
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mt.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mt.gif
new file mode 100644
index 0000000..aa5a729
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mu.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mu.gif
new file mode 100644
index 0000000..98d3bd9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mv.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mv.gif
new file mode 100644
index 0000000..dbd7591
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mw.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mw.gif
new file mode 100644
index 0000000..9ba7c7b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mx.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mx.gif
new file mode 100644
index 0000000..e5e70bb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mx.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/my.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/my.gif
new file mode 100644
index 0000000..4bb4e26
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/my.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mz.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mz.gif
new file mode 100644
index 0000000..fe3df69
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/mz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/na.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/na.gif
new file mode 100644
index 0000000..e4c953a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/na.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ne.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ne.gif
new file mode 100644
index 0000000..dd61657
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ne.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ng.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ng.gif
new file mode 100644
index 0000000..498b3d5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ng.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ni.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ni.gif
new file mode 100644
index 0000000..b6c8e20
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ni.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/nl.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/nl.gif
new file mode 100644
index 0000000..9053bfc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/nl.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/no.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/no.gif
new file mode 100644
index 0000000..8ca359a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/no.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/np.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/np.gif
new file mode 100644
index 0000000..d0fd2f7
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/np.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/nr.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/nr.gif
new file mode 100644
index 0000000..d82bc57
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/nr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/nu.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/nu.gif
new file mode 100644
index 0000000..755c1b3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/nu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/nz.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/nz.gif
new file mode 100644
index 0000000..2ebcec8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/nz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/om.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/om.gif
new file mode 100644
index 0000000..9984131
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/om.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/pa.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/pa.gif
new file mode 100644
index 0000000..016a227
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/pa.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/pe.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/pe.gif
new file mode 100644
index 0000000..b8f37c6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/pe.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/pg.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/pg.gif
new file mode 100644
index 0000000..fffb351
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/pg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ph.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ph.gif
new file mode 100644
index 0000000..1b12694
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ph.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/pk.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/pk.gif
new file mode 100644
index 0000000..9f5ca27
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/pk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/pl.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/pl.gif
new file mode 100644
index 0000000..e4252c5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/pl.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ps.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ps.gif
new file mode 100644
index 0000000..31d1aef
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ps.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/pt.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/pt.gif
new file mode 100644
index 0000000..2614c82
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/pt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/pw.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/pw.gif
new file mode 100644
index 0000000..8da1b47
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/pw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/py.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/py.gif
new file mode 100644
index 0000000..23738a4
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/py.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/qa.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/qa.gif
new file mode 100644
index 0000000..b4f9f55
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/qa.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ro.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ro.gif
new file mode 100644
index 0000000..94c6ade
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ro.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ru.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ru.gif
new file mode 100644
index 0000000..a6e7872
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ru.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/rw.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/rw.gif
new file mode 100644
index 0000000..a925bee
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/rw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sa.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sa.gif
new file mode 100644
index 0000000..afcb768
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sa.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sb.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sb.gif
new file mode 100644
index 0000000..d2f2079
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sb.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sc.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sc.gif
new file mode 100644
index 0000000..815a8ce
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sc.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sd.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sd.gif
new file mode 100644
index 0000000..47b2e6a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/se.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/se.gif
new file mode 100644
index 0000000..333f7f1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/se.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sg.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sg.gif
new file mode 100644
index 0000000..ad264e4
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/si.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/si.gif
new file mode 100644
index 0000000..ebc6c9b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/si.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sk.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sk.gif
new file mode 100644
index 0000000..78e654b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sl.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sl.gif
new file mode 100644
index 0000000..dacd1f0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sl.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sm.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sm.gif
new file mode 100644
index 0000000..c12e13a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sn.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sn.gif
new file mode 100644
index 0000000..c6ffb1d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/so.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/so.gif
new file mode 100644
index 0000000..7bec928
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/so.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sr.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sr.gif
new file mode 100644
index 0000000..ba6269f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/st.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/st.gif
new file mode 100644
index 0000000..d29916f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/st.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/su.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/su.gif
new file mode 100644
index 0000000..c64c7b6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/su.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sv.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sv.gif
new file mode 100644
index 0000000..199699e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sy.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sy.gif
new file mode 100644
index 0000000..56d8117
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sy.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sz.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sz.gif
new file mode 100644
index 0000000..9a7f9aa
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/sz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/td.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/td.gif
new file mode 100644
index 0000000..be3c4e4
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/td.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tg.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tg.gif
new file mode 100644
index 0000000..d15557f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/th.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/th.gif
new file mode 100644
index 0000000..f6b68f6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/th.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tj.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tj.gif
new file mode 100644
index 0000000..26c9c6a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tm.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tm.gif
new file mode 100644
index 0000000..09a0f66
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tn.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tn.gif
new file mode 100644
index 0000000..ff2ce46
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/to.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/to.gif
new file mode 100644
index 0000000..eb45eaf
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/to.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tp.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tp.gif
new file mode 100644
index 0000000..fd58832
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tp.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tr.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tr.gif
new file mode 100644
index 0000000..a8d150a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tt.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tt.gif
new file mode 100644
index 0000000..bbf1729
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tv.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tv.gif
new file mode 100644
index 0000000..df58585
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tw.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tw.gif
new file mode 100644
index 0000000..01f360e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tz.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tz.gif
new file mode 100644
index 0000000..ae33cb9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/tz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ua.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ua.gif
new file mode 100644
index 0000000..1666575
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ua.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ug.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ug.gif
new file mode 100644
index 0000000..6a8f9df
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ug.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/un.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/un.gif
new file mode 100644
index 0000000..683897e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/un.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/us.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/us.gif
new file mode 100644
index 0000000..1273967
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/us.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/uy.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/uy.gif
new file mode 100644
index 0000000..2339df5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/uy.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/uz.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/uz.gif
new file mode 100644
index 0000000..96d13fd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/uz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/va.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/va.gif
new file mode 100644
index 0000000..2e4757e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/va.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/vc.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/vc.gif
new file mode 100644
index 0000000..5e2edfb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/vc.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ve.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ve.gif
new file mode 100644
index 0000000..f4d1491
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ve.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/vn.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/vn.gif
new file mode 100644
index 0000000..527ab1e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/vn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/vu.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/vu.gif
new file mode 100644
index 0000000..38dca34
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/vu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ws.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ws.gif
new file mode 100644
index 0000000..af159f3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ws.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ya.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ya.gif
new file mode 100644
index 0000000..07bad2d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ya.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ye.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ye.gif
new file mode 100644
index 0000000..b5fbb0f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ye.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ye0.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ye0.gif
new file mode 100644
index 0000000..aa1942e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/ye0.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/yu.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/yu.gif
new file mode 100644
index 0000000..d127d27
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/yu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/za.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/za.gif
new file mode 100644
index 0000000..9554d12
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/za.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/zm.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/zm.gif
new file mode 100644
index 0000000..ff76b8d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/zm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/zw.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/zw.gif
new file mode 100644
index 0000000..571bac8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/small/zw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sn.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sn.gif
new file mode 100644
index 0000000..1a54174
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/so.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/so.gif
new file mode 100644
index 0000000..7f1dba3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/so.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sr.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sr.gif
new file mode 100644
index 0000000..de781c1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/st.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/st.gif
new file mode 100644
index 0000000..cd9036f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/st.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/su.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/su.gif
new file mode 100644
index 0000000..23e162a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/su.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sv.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sv.gif
new file mode 100644
index 0000000..bef488e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sy.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sy.gif
new file mode 100644
index 0000000..a3a53cd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sy.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sz.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sz.gif
new file mode 100644
index 0000000..b3a20ba
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/sz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/td.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/td.gif
new file mode 100644
index 0000000..3ccc8df
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/td.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tg.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tg.gif
new file mode 100644
index 0000000..674e68f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/th.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/th.gif
new file mode 100644
index 0000000..83318c0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/th.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tj.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tj.gif
new file mode 100644
index 0000000..1f44255
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tm.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tm.gif
new file mode 100644
index 0000000..a603afd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tn.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tn.gif
new file mode 100644
index 0000000..083238d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/to.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/to.gif
new file mode 100644
index 0000000..603aa8e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/to.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tp.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tp.gif
new file mode 100644
index 0000000..40599d5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tp.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tr.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tr.gif
new file mode 100644
index 0000000..2eac730
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tt.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tt.gif
new file mode 100644
index 0000000..f715419
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tv.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tv.gif
new file mode 100644
index 0000000..9b018e8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tw.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tw.gif
new file mode 100644
index 0000000..57a0482
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tz.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tz.gif
new file mode 100644
index 0000000..6d28d40
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/tz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ua.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ua.gif
new file mode 100644
index 0000000..bebd670
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ua.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ug.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ug.gif
new file mode 100644
index 0000000..151e303
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ug.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/un.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/un.gif
new file mode 100644
index 0000000..135b528
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/un.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/us.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/us.gif
new file mode 100644
index 0000000..850094e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/us.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/uy.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/uy.gif
new file mode 100644
index 0000000..4d129fc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/uy.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/uz.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/uz.gif
new file mode 100644
index 0000000..d9cc88e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/uz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/va.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/va.gif
new file mode 100644
index 0000000..5db146d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/va.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/vc.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/vc.gif
new file mode 100644
index 0000000..6519018
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/vc.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ve.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ve.gif
new file mode 100644
index 0000000..4abf999
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ve.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/vn.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/vn.gif
new file mode 100644
index 0000000..e7d1e5b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/vn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/vu.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/vu.gif
new file mode 100644
index 0000000..f8736a1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/vu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ws.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ws.gif
new file mode 100644
index 0000000..b2bc2f7
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ws.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ya.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ya.gif
new file mode 100644
index 0000000..9153613
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ya.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ye.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ye.gif
new file mode 100644
index 0000000..f183847
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ye.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ye0.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ye0.gif
new file mode 100644
index 0000000..b9c28b3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/ye0.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/yu.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/yu.gif
new file mode 100644
index 0000000..c91bf1e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/yu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/za.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/za.gif
new file mode 100644
index 0000000..8579793
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/za.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/zm.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/zm.gif
new file mode 100644
index 0000000..fc686bb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/zm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/zw.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/zw.gif
new file mode 100644
index 0000000..9821c41
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/countries/zw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/duplicate.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/duplicate.gif
new file mode 100644
index 0000000..3366a27
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/duplicate.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/entry.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/entry.gif
new file mode 100644
index 0000000..442539f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/entry.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/exclude.png b/org.eclipse.babel.tapiji.tools.core.ui/icons/exclude.png
new file mode 100644
index 0000000..d110529
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/exclude.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/file_obj.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/file_obj.gif
new file mode 100644
index 0000000..7ccc6a7
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/file_obj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/flatLayout.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/flatLayout.gif
new file mode 100644
index 0000000..1ef74cf
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/flatLayout.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/fldr_obj.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/fldr_obj.gif
new file mode 100644
index 0000000..51e703b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/fldr_obj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/hierarchicalLayout.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/hierarchicalLayout.gif
new file mode 100644
index 0000000..2344861
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/hierarchicalLayout.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/icon_new_memory_view.png b/org.eclipse.babel.tapiji.tools.core.ui/icons/icon_new_memory_view.png
new file mode 100644
index 0000000..2ceac48
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/icon_new_memory_view.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/incomplete.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/incomplete.gif
new file mode 100644
index 0000000..6583d36
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/incomplete.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/int.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/int.gif
new file mode 100644
index 0000000..7d24707
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/int.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/key.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/key.gif
new file mode 100644
index 0000000..bdb8e97
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/key.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/keyCommented.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/keyCommented.gif
new file mode 100644
index 0000000..869eb6b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/keyCommented.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/keyNone.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/keyNone.gif
new file mode 100644
index 0000000..dd1bd7c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/keyNone.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/newpropertiesfile.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/newpropertiesfile.gif
new file mode 100644
index 0000000..11e436b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/newpropertiesfile.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/no_int1.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/no_int1.gif
new file mode 100644
index 0000000..a1b1748
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/no_int1.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/no_int2.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/no_int2.gif
new file mode 100644
index 0000000..98a2dbc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/no_int2.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/original/entry.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/original/entry.gif
new file mode 100644
index 0000000..d26afe5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/original/entry.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/original/entry.psd b/org.eclipse.babel.tapiji.tools.core.ui/icons/original/entry.psd
new file mode 100644
index 0000000..eaa418a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/original/entry.psd
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/propertiesfile.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/propertiesfile.gif
new file mode 100644
index 0000000..9090c04
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/propertiesfile.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/read_only.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/read_only.gif
new file mode 100644
index 0000000..dde3cbd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/read_only.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/resourcebundle.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/resourcebundle.gif
new file mode 100644
index 0000000..fe05bad
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/resourcebundle.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/sample.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/sample.gif
new file mode 100644
index 0000000..34fb3c9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/sample.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/similar.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/similar.gif
new file mode 100644
index 0000000..74cf98e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/similar.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/toc_open.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/toc_open.gif
new file mode 100644
index 0000000..9e665d5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/toc_open.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/warning.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/warning.gif
new file mode 100644
index 0000000..801a1f8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/warning.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/icons/warningGrey.gif b/org.eclipse.babel.tapiji.tools.core.ui/icons/warningGrey.gif
new file mode 100644
index 0000000..e11147e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/icons/warningGrey.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/plugin.xml b/org.eclipse.babel.tapiji.tools.core.ui/plugin.xml
new file mode 100644
index 0000000..ab2227c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/plugin.xml
@@ -0,0 +1,243 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.4"?>

+<plugin>

+   <extension

+         id="I18NBuilder"

+         point="org.eclipse.core.resources.builders">

+      <builder hasNature="true">

+         <run class="org.eclipse.babel.tapiji.tools.core.ui.builder.I18nBuilder" />

+      </builder>

+   </extension>

+   

+   <extension

+         id="org.eclipse.babel.tapiji.tools.core.ui.nature"

+         name="Internationalization Nature"

+         point="org.eclipse.core.resources.natures">

+      <runtime>

+         <run class="org.eclipse.babel.tapiji.tools.core.ui.builder.InternationalizationNature" />

+      </runtime>

+      <builder id="org.eclipse.babel.tapiji.tools.core.ui.I18NBuilder" />

+<!--      <requires-nature id="org.eclipse.jdt.core.javanature"/> -->

+   </extension>

+   

+   <extension

+         point="org.eclipse.ui.views">

+      <category

+            id="org.eclipse.babel.tapiji"

+            name="Internationalization">

+      </category>

+      <view

+            category="org.eclipse.babel.tapiji"

+            class="org.eclipse.babel.tapiji.tools.core.ui.views.messagesview.MessagesView"

+            icon="icons/resourcebundle.gif"

+            id="org.eclipse.babel.tapiji.tools.core.views.MessagesView"

+            name="Resource-Bundle">

+      </view>

+   </extension>

+   <extension

+         point="org.eclipse.ui.perspectiveExtensions">

+      <perspectiveExtension

+            targetID="org.eclipse.jdt.ui.JavaPerspective">

+         <view

+               id="org.eclipse.babel.tapiji.tools.core.views.MessagesView"

+               ratio="0.5"

+               relationship="right"

+               relative="org.eclipse.ui.views.TaskList">

+         </view>

+      </perspectiveExtension>

+   </extension>

+   <extension

+         point="org.eclipse.ui.menus">

+      <menuContribution

+            locationURI="popup:org.eclipse.ui.popup.any?before=additions">

+         <menu

+               id="org.eclipse.babel.tapiji.tools.core.ui.menus.Internationalization"

+               label="Internationalization"

+               tooltip="Java Internationalization assistance">

+         </menu>

+      </menuContribution>

+      <menuContribution

+            locationURI="popup:org.eclipse.babel.tapiji.tools.core.ui.menus.Internationalization?after=additions">

+         <dynamic

+               class="org.eclipse.babel.tapiji.tools.core.ui.menus.InternationalizationMenu"

+               id="org.eclipse.babel.tapiji.tools.core.ui.menus.ExcludeResource">

+         </dynamic>

+      </menuContribution>

+   </extension>

+   <extension

+         point="org.eclipse.ui.ide.markerResolution">

+      <markerResolutionGenerator

+            class="org.eclipse.babel.tapiji.tools.core.ui.builder.ViolationResolutionGenerator"

+            markerType="org.eclipse.babel.tapiji.tools.core.ui.StringLiteralAuditMarker">

+      </markerResolutionGenerator>

+      <markerResolutionGenerator

+            class="org.eclipse.babel.tapiji.tools.core.ui.builder.ViolationResolutionGenerator"

+            markerType="org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleAuditMarker">

+      </markerResolutionGenerator>

+   </extension>

+   <extension

+         point="org.eclipse.jdt.ui.javaElementFilters">

+      <filter

+            class="org.eclipse.babel.tapiji.tools.core.ui.filters.PropertiesFileFilter"

+            description="Filters only resource bundles"

+            enabled="false"

+            id="ResourceBundleFilter"

+            name="ResourceBundleFilter">

+      </filter>

+   </extension>

+   <extension

+         point="org.eclipse.ui.decorators">

+      <decorator

+            adaptable="true"

+            class="org.eclipse.babel.tapiji.tools.core.ui.decorators.ExcludedResource"

+            id="org.eclipse.babel.tapiji.tools.core.decorators.ExcludedResource"

+            label="Resource is excluded from Internationalization"

+            lightweight="false"

+            state="true">

+         <enablement>

+            <and>

+               <objectClass

+                     name="org.eclipse.core.resources.IResource">

+               </objectClass>

+               <or>

+                  <objectClass

+                        name="org.eclipse.core.resources.IFolder">

+                  </objectClass>

+                  <objectClass

+                        name="org.eclipse.core.resources.IFile">

+                  </objectClass>

+               </or>

+            </and>

+         </enablement>

+      </decorator>

+   </extension>

+   <extension

+         point="org.eclipse.ui.preferencePages">

+      <page

+            class="org.eclipse.babel.tapiji.tools.core.ui.preferences.TapiHomePreferencePage"

+            id="org.eclipse.babel.tapiji.tools.core.TapiJIGeneralPrefPage"

+            name="TapiJI">

+      </page>

+      <page

+            category="org.eclipse.babel.tapiji.tools.core.TapiJIGeneralPrefPage"

+            class="org.eclipse.babel.tapiji.tools.core.ui.preferences.FilePreferencePage"

+            id="org.eclipse.babel.tapiji.tools.core.FilePrefPage"

+            name="File Settings">

+      </page>

+      <page

+            category="org.eclipse.babel.tapiji.tools.core.TapiJIGeneralPrefPage"

+            class="org.eclipse.babel.tapiji.tools.core.ui.preferences.BuilderPreferencePage"

+            id="org.eclipse.babel.tapiji.tools.core.BuilderPrefPage"

+            name="Builder Settings">

+      </page>

+   </extension>

+  

+   <extension

+         point="org.eclipse.ui.editors.markerUpdaters">

+      <updater

+            class="org.eclipse.babel.tapiji.tools.core.ui.markers.MarkerUpdater"

+            id="org.eclipse.babel.tapiji.tools.core.ui.MarkerUpdater"

+            markerType="org.eclipse.core.resources.problemmarker">

+      </updater>

+    </extension>

+   <extension

+         point="org.eclipse.babel.tapiji.tools.core.stateLoader">

+      <IStateLoader

+            class="org.eclipse.babel.tapiji.tools.core.ui.memento.ResourceBundleManagerStateLoader">

+      </IStateLoader>

+   </extension>

+   <extension

+         id="StringLiteralAuditMarker"

+         name="String Literal Audit Marker"

+         point="org.eclipse.core.resources.markers">

+      <super

+            type="org.eclipse.core.resources.problemmarker">

+      </super>

+      <super

+            type="org.eclipse.core.resources.textmarker">

+      </super>

+      <persistent

+            value="true">

+      </persistent>

+      <attribute

+            name="stringLiteral">

+      </attribute>

+      <attribute

+            name="violation">

+      </attribute>

+      <attribute

+            name="context">

+      </attribute>

+      <attribute

+            name="cause">

+      </attribute>

+      <attribute

+            name="key">

+      </attribute>

+      <attribute

+            name="location">

+      </attribute>

+      <attribute

+            name="bundleName">

+      </attribute>

+      <attribute

+            name="bundleStart">

+      </attribute>

+      <attribute

+            name="bundleEnd">

+      </attribute>

+   </extension>

+   <extension

+         id="ResourceBundleAuditMarker"

+         name="Resource-Bundle Audit Marker"

+         point="org.eclipse.core.resources.markers">

+      <super

+            type="org.eclipse.core.resources.problemmarker">

+      </super>

+      <super

+            type="org.eclipse.core.resources.textmarker">

+      </super>

+      <persistent

+            value="true">

+      </persistent>

+      <attribute

+            name="stringLiteral">

+      </attribute>

+      <attribute

+            name="violation">

+      </attribute>

+      <attribute

+            name="context">

+      </attribute>

+      <attribute

+            name="cause">

+      </attribute>

+      <attribute

+            name="key">

+      </attribute>

+      <attribute

+            name="location">

+      </attribute>

+      <attribute

+            name="language">

+      </attribute>

+      <attribute

+            name="bundleLine">

+      </attribute>

+      <attribute

+            name="problemPartner">

+      </attribute>

+   </extension>

+   <extension

+         point="org.eclipse.core.runtime.preferences">

+      <initializer

+            class="org.eclipse.babel.tapiji.tools.core.ui.preferences.TapiJIPreferenceInitializer">

+      </initializer>

+   </extension>

+   <extension

+         point="org.eclipse.babel.core.babelConfiguration">

+      <IConfiguration

+            class="org.eclipse.babel.tapiji.tools.core.ui.preferences.TapiJIPreferences">

+      </IConfiguration>

+   </extension>	

+</plugin>

diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/Activator.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/Activator.java
new file mode 100644
index 0000000..c3fdae7
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/Activator.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+    // The plug-in ID
+    public static final String PLUGIN_ID = "org.eclipse.babel.tapiji.tools.core.ui"; //$NON-NLS-1$
+
+    // The shared instance
+    private static Activator plugin;
+
+    /**
+     * The constructor
+     */
+    public Activator() {
+    }
+
+    /**
+     * Returns an image descriptor for the image file at the given plug-in
+     * relative path
+     * 
+     * @param path
+     *            the path
+     * @return the image descriptor
+     */
+    public static ImageDescriptor getImageDescriptor(String path) {
+	if (path.indexOf("icons/") < 0) {
+	    path = "icons/" + path;
+	}
+
+	return imageDescriptorFromPlugin(PLUGIN_ID, path);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
+     * )
+     */
+    @Override
+    public void start(BundleContext context) throws Exception {
+	super.start(context);
+	plugin = this;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
+     * )
+     */
+    @Override
+    public void stop(BundleContext context) throws Exception {
+	// save state of ResourceBundleManager
+	ResourceBundleManager.saveManagerState();
+
+	plugin = null;
+	super.stop(context);
+    }
+
+    /**
+     * Returns the shared instance
+     * 
+     * @return the shared instance
+     */
+    public static Activator getDefault() {
+	return plugin;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/ResourceBundleManager.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/ResourceBundleManager.java
new file mode 100644
index 0000000..05abe44
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/ResourceBundleManager.java
@@ -0,0 +1,818 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer, Alexej Strelzow.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ *     Alexej Strelzow - moved object management to RBManager, Babel integration
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.babel.core.configuration.DirtyHack;
+import org.eclipse.babel.core.factory.MessageFactory;
+import org.eclipse.babel.core.message.IMessage;
+import org.eclipse.babel.core.message.IMessagesBundle;
+import org.eclipse.babel.core.message.IMessagesBundleGroup;
+import org.eclipse.babel.core.message.manager.IResourceDeltaListener;
+import org.eclipse.babel.core.message.manager.RBManager;
+import org.eclipse.babel.core.util.FileUtils;
+import org.eclipse.babel.core.util.NameUtils;
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.babel.tapiji.tools.core.model.IResourceBundleChangedListener;
+import org.eclipse.babel.tapiji.tools.core.model.IResourceDescriptor;
+import org.eclipse.babel.tapiji.tools.core.model.IResourceExclusionListener;
+import org.eclipse.babel.tapiji.tools.core.model.ResourceDescriptor;
+import org.eclipse.babel.tapiji.tools.core.model.exception.ResourceBundleException;
+import org.eclipse.babel.tapiji.tools.core.model.manager.IStateLoader;
+import org.eclipse.babel.tapiji.tools.core.model.manager.ResourceBundleChangedEvent;
+import org.eclipse.babel.tapiji.tools.core.model.manager.ResourceExclusionEvent;
+import org.eclipse.babel.tapiji.tools.core.ui.analyzer.ResourceBundleDetectionVisitor;
+import org.eclipse.babel.tapiji.tools.core.util.FragmentProjectUtils;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceVisitor;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.JavaCore;
+
+public class ResourceBundleManager {
+
+    public static String defaultLocaleTag = "[default]"; // TODO externalize
+
+    /*** CONFIG SECTION ***/
+    private static boolean checkResourceExclusionRoot = false;
+
+    /*** MEMBER SECTION ***/
+    private static Map<IProject, ResourceBundleManager> rbmanager = new HashMap<IProject, ResourceBundleManager>();
+
+    public static final String RESOURCE_BUNDLE_EXTENSION = ".properties";
+
+    // project-specific
+    private Map<String, Set<IResource>> resources = new HashMap<String, Set<IResource>>();
+
+    private Map<String, String> bundleNames = new HashMap<String, String>();
+
+    private Map<String, List<IResourceBundleChangedListener>> listeners = new HashMap<String, List<IResourceBundleChangedListener>>();
+
+    private List<IResourceExclusionListener> exclusionListeners = new ArrayList<IResourceExclusionListener>();
+
+    // global
+    private static Set<IResourceDescriptor> excludedResources = new HashSet<IResourceDescriptor>();
+
+    private static Map<String, Set<IResource>> allBundles = new HashMap<String, Set<IResource>>();
+
+    // private static IResourceChangeListener changelistener; //
+    // RBChangeListener -> see stateLoader!
+
+    public static final String NATURE_ID = "org.eclipse.babel.tapiji.tools.core.ui.nature";
+
+    public static final String BUILDER_ID = Activator.PLUGIN_ID
+	    + ".I18NBuilder";
+
+    /* Host project */
+    private IProject project = null;
+
+    /** State-Serialization Information **/
+    private static boolean state_loaded = false;
+
+    private static IStateLoader stateLoader;
+
+    // Define private constructor
+    private ResourceBundleManager(IProject project) {
+	this.project = project;
+
+	RBManager.getInstance(project).addResourceDeltaListener(
+		new IResourceDeltaListener() {
+
+		    /**
+		     * {@inheritDoc}
+		     */
+		    @Override
+		    public void onDelete(IMessagesBundleGroup bundleGroup) {
+			resources.remove(bundleGroup.getResourceBundleId());
+		    }
+
+		    /**
+		     * {@inheritDoc}
+		     */
+		    @Override
+		    public void onDelete(String resourceBundleId,
+			    IResource resource) {
+			resources.get(resourceBundleId).remove(resource);
+		    }
+		});
+    }
+
+    public static ResourceBundleManager getManager(IProject project) {
+	// check if persistant state has been loaded
+	if (!state_loaded) {
+	    stateLoader = getStateLoader();
+	    stateLoader.loadState();
+	    state_loaded = true;
+	    excludedResources = stateLoader.getExcludedResources();
+	}
+
+	// set host-project
+	if (FragmentProjectUtils.isFragment(project)) {
+	    project = FragmentProjectUtils.getFragmentHost(project);
+	}
+
+	ResourceBundleManager manager = rbmanager.get(project);
+	if (manager == null) {
+	    manager = new ResourceBundleManager(project);
+	    rbmanager.put(project, manager);
+	    manager.detectResourceBundles();
+	}
+	return manager;
+    }
+
+    public Set<Locale> getProvidedLocales(String bundleName) {
+	RBManager instance = RBManager.getInstance(project);
+
+	Set<Locale> locales = new HashSet<Locale>();
+	IMessagesBundleGroup group = instance
+		.getMessagesBundleGroup(bundleName);
+	if (group == null) {
+	    return locales;
+	}
+
+	for (IMessagesBundle bundle : group.getMessagesBundles()) {
+	    locales.add(bundle.getLocale());
+	}
+	return locales;
+    }
+
+    public static String getResourceBundleName(IResource res) {
+	String name = res.getName();
+	String regex = "^(.*?)" //$NON-NLS-1$
+		+ "((_[a-z]{2,3})|(_[a-z]{2,3}_[A-Z]{2})" //$NON-NLS-1$
+		+ "|(_[a-z]{2,3}_[A-Z]{2}_\\w*))?(\\." //$NON-NLS-1$
+		+ res.getFileExtension() + ")$"; //$NON-NLS-1$
+	return name.replaceFirst(regex, "$1"); //$NON-NLS-1$
+    }
+
+    protected boolean isResourceBundleLoaded(String bundleName) {
+	return RBManager.getInstance(project).containsMessagesBundleGroup(
+		bundleName);
+    }
+
+    protected void unloadResource(String bundleName, IResource resource) {
+	// TODO implement more efficient
+	unloadResourceBundle(bundleName);
+	// loadResourceBundle(bundleName);
+    }
+
+    public static String getResourceBundleId(IResource resource) {
+	String packageFragment = "";
+
+	IJavaElement propertyFile = JavaCore.create(resource.getParent());
+	if (propertyFile != null && propertyFile instanceof IPackageFragment) {
+	    packageFragment = ((IPackageFragment) propertyFile)
+		    .getElementName();
+	}
+
+	return (packageFragment.length() > 0 ? packageFragment + "." : "")
+		+ getResourceBundleName(resource);
+    }
+
+    public void addBundleResource(IResource resource) {
+	if (resource.isDerived()) {
+	    return;
+	}
+
+	String bundleName = getResourceBundleId(resource);
+	Set<IResource> res;
+
+	if (!resources.containsKey(bundleName)) {
+	    res = new HashSet<IResource>();
+	} else {
+	    res = resources.get(bundleName);
+	}
+
+	res.add(resource);
+	resources.put(bundleName, res);
+	allBundles.put(bundleName, new HashSet<IResource>(res));
+	bundleNames.put(bundleName, getResourceBundleName(resource));
+
+	// Fire resource changed event
+	ResourceBundleChangedEvent event = new ResourceBundleChangedEvent(
+		ResourceBundleChangedEvent.ADDED, bundleName,
+		resource.getProject());
+	this.fireResourceBundleChangedEvent(bundleName, event);
+    }
+
+    protected void removeAllBundleResources(String bundleName) {
+	unloadResourceBundle(bundleName);
+	resources.remove(bundleName);
+	// allBundles.remove(bundleName);
+	listeners.remove(bundleName);
+    }
+
+    public void unloadResourceBundle(String name) {
+	RBManager instance = RBManager.getInstance(project);
+	instance.deleteMessagesBundleGroup(name);
+    }
+
+    public IMessagesBundleGroup getResourceBundle(String name) {
+	RBManager instance = RBManager.getInstance(project);
+	return instance.getMessagesBundleGroup(name);
+    }
+
+    public Collection<IResource> getResourceBundles(String bundleName) {
+	return resources.get(bundleName);
+    }
+
+    public List<String> getResourceBundleNames() {
+	List<String> returnList = new ArrayList<String>();
+
+	Iterator<String> it = resources.keySet().iterator();
+	while (it.hasNext()) {
+	    returnList.add(it.next());
+	}
+	return returnList;
+    }
+
+    public IResource getResourceFile(String file) {
+	String regex = "^(.*?)" + "((_[a-z]{2,3})|(_[a-z]{2,3}_[A-Z]{2})"
+		+ "|(_[a-z]{2,3}_[A-Z]{2}_\\w*))?(\\." + "properties" + ")$";
+	String bundleName = file.replaceFirst(regex, "$1");
+	IResource resource = null;
+
+	for (IResource res : resources.get(bundleName)) {
+	    if (res.getName().equalsIgnoreCase(file)) {
+		resource = res;
+		break;
+	    }
+	}
+
+	return resource;
+    }
+
+    public void fireResourceBundleChangedEvent(String bundleName,
+	    ResourceBundleChangedEvent event) {
+	List<IResourceBundleChangedListener> l = listeners.get(bundleName);
+
+	if (l == null) {
+	    return;
+	}
+
+	for (IResourceBundleChangedListener listener : l) {
+	    listener.resourceBundleChanged(event);
+	}
+    }
+
+    public void registerResourceBundleChangeListener(String bundleName,
+	    IResourceBundleChangedListener listener) {
+	List<IResourceBundleChangedListener> l = listeners.get(bundleName);
+	if (l == null) {
+	    l = new ArrayList<IResourceBundleChangedListener>();
+	}
+	l.add(listener);
+	listeners.put(bundleName, l);
+    }
+
+    public void unregisterResourceBundleChangeListener(String bundleName,
+	    IResourceBundleChangedListener listener) {
+	List<IResourceBundleChangedListener> l = listeners.get(bundleName);
+	if (l == null) {
+	    return;
+	}
+	l.remove(listener);
+	listeners.put(bundleName, l);
+    }
+
+    protected void detectResourceBundles() {
+	try {
+	    project.accept(new ResourceBundleDetectionVisitor(getProject()));
+
+	    IProject[] fragments = FragmentProjectUtils.lookupFragment(project);
+	    if (fragments != null) {
+		for (IProject p : fragments) {
+		    p.accept(new ResourceBundleDetectionVisitor(getProject()));
+		}
+	    }
+	} catch (CoreException e) {
+	}
+    }
+
+    public IProject getProject() {
+	return project;
+    }
+
+    public List<String> getResourceBundleIdentifiers() {
+	List<String> returnList = new ArrayList<String>();
+
+	// TODO check other resource bundles that are available on the curren
+	// class path
+	Iterator<String> it = this.resources.keySet().iterator();
+	while (it.hasNext()) {
+	    returnList.add(it.next());
+	}
+
+	return returnList;
+    }
+
+    public static List<String> getAllResourceBundleNames() {
+	List<String> returnList = new ArrayList<String>();
+
+	for (IProject p : getAllSupportedProjects()) {
+	    if (!FragmentProjectUtils.isFragment(p)) {
+		Iterator<String> it = getManager(p).resources.keySet()
+			.iterator();
+		while (it.hasNext()) {
+		    returnList.add(p.getName() + "/" + it.next());
+		}
+	    }
+	}
+	return returnList;
+    }
+
+    public static Set<IProject> getAllSupportedProjects() {
+	IProject[] projects = ResourcesPlugin.getWorkspace().getRoot()
+		.getProjects();
+	Set<IProject> projs = new HashSet<IProject>();
+
+	for (IProject p : projects) {
+	    try {
+		if (p.isOpen() && p.hasNature(NATURE_ID)) {
+		    projs.add(p);
+		}
+	    } catch (CoreException e) {
+		// TODO Auto-generated catch block
+		e.printStackTrace();
+	    }
+	}
+	return projs;
+    }
+
+    public String getKeyHoverString(String rbName, String key) {
+	try {
+	    RBManager instance = RBManager.getInstance(project);
+	    IMessagesBundleGroup bundleGroup = instance
+		    .getMessagesBundleGroup(rbName);
+	    if (!bundleGroup.containsKey(key)) {
+		return null;
+	    }
+
+	    String hoverText = "<html><head></head><body>";
+
+	    for (IMessage message : bundleGroup.getMessages(key)) {
+		String displayName = message.getLocale() == null ? "Default"
+			: message.getLocale().getDisplayName();
+		String value = message.getValue();
+		hoverText += "<b><i>" + displayName + "</i></b><br/>"
+			+ value.replace("\n", "<br/>") + "<br/><br/>";
+	    }
+	    return hoverText + "</body></html>";
+	} catch (Exception e) {
+	    // silent catch
+	    return "";
+	}
+    }
+
+    public boolean isKeyBroken(String rbName, String key) {
+	IMessagesBundleGroup messagesBundleGroup = RBManager.getInstance(
+		project).getMessagesBundleGroup(rbName);
+	if (messagesBundleGroup == null) {
+	    return true;
+	} else {
+	    return !messagesBundleGroup.containsKey(key);
+	}
+
+	// if (!resourceBundles.containsKey(rbName))
+	// return true;
+	// return !this.isResourceExisting(rbName, key);
+    }
+
+    protected void excludeSingleResource(IResource res) {
+	IResourceDescriptor rd = new ResourceDescriptor(res);
+	org.eclipse.babel.tapiji.tools.core.ui.utils.EditorUtils
+		.deleteAuditMarkersForResource(res);
+
+	// exclude resource
+	excludedResources.add(rd);
+	Collection<Object> changedExclusoins = new HashSet<Object>();
+	changedExclusoins.add(res);
+	fireResourceExclusionEvent(new ResourceExclusionEvent(changedExclusoins));
+
+	// Check if the excluded resource represents a resource-bundle
+	if (org.eclipse.babel.tapiji.tools.core.ui.utils.RBFileUtils
+		.isResourceBundleFile(res)) {
+	    String bundleName = getResourceBundleId(res);
+	    Set<IResource> resSet = resources.remove(bundleName);
+	    if (resSet != null) {
+		resSet.remove(res);
+
+		if (!resSet.isEmpty()) {
+		    resources.put(bundleName, resSet);
+		    unloadResource(bundleName, res);
+		} else {
+		    rd.setBundleId(bundleName);
+		    unloadResourceBundle(bundleName);
+		    try {
+			res.getProject().build(
+				IncrementalProjectBuilder.FULL_BUILD,
+				BUILDER_ID, null, null);
+		    } catch (CoreException e) {
+			Logger.logError(e);
+		    }
+		}
+
+		fireResourceBundleChangedEvent(getResourceBundleId(res),
+			new ResourceBundleChangedEvent(
+				ResourceBundleChangedEvent.EXCLUDED,
+				bundleName, res.getProject()));
+	    }
+	}
+    }
+
+    public void excludeResource(IResource res, IProgressMonitor monitor) {
+	try {
+	    if (monitor == null) {
+		monitor = new NullProgressMonitor();
+	    }
+
+	    final List<IResource> resourceSubTree = new ArrayList<IResource>();
+	    res.accept(new IResourceVisitor() {
+
+		@Override
+		public boolean visit(IResource resource) throws CoreException {
+		    Logger.logInfo("Excluding resource '"
+			    + resource.getFullPath().toOSString() + "'");
+		    resourceSubTree.add(resource);
+		    return true;
+		}
+
+	    });
+
+	    // Iterate previously retrieved resource and exclude them from
+	    // Internationalization
+	    monitor.beginTask(
+		    "Exclude resources from Internationalization context",
+		    resourceSubTree.size());
+	    try {
+		for (IResource resource : resourceSubTree) {
+		    excludeSingleResource(resource);
+		    org.eclipse.babel.tapiji.tools.core.ui.utils.EditorUtils
+			    .deleteAuditMarkersForResource(resource);
+		    monitor.worked(1);
+		}
+	    } catch (Exception e) {
+		Logger.logError(e);
+	    } finally {
+		monitor.done();
+	    }
+	} catch (CoreException e) {
+	    Logger.logError(e);
+	}
+    }
+
+    public void includeResource(IResource res, IProgressMonitor monitor) {
+	if (monitor == null) {
+	    monitor = new NullProgressMonitor();
+	}
+
+	final Collection<Object> changedResources = new HashSet<Object>();
+	IResource resource = res;
+
+	if (!excludedResources.contains(new ResourceDescriptor(res))) {
+	    while (!(resource instanceof IProject || resource instanceof IWorkspaceRoot)) {
+		if (excludedResources
+			.contains(new ResourceDescriptor(resource))) {
+		    excludeResource(resource, monitor);
+		    changedResources.add(resource);
+		    break;
+		} else {
+		    resource = resource.getParent();
+		}
+	    }
+	}
+
+	try {
+	    res.accept(new IResourceVisitor() {
+
+		@Override
+		public boolean visit(IResource resource) throws CoreException {
+		    changedResources.add(resource);
+		    return true;
+		}
+	    });
+
+	    monitor.beginTask("Add resources to Internationalization context",
+		    changedResources.size());
+	    try {
+		for (Object r : changedResources) {
+		    excludedResources.remove(new ResourceDescriptor(
+			    (IResource) r));
+		    monitor.worked(1);
+		}
+
+	    } catch (Exception e) {
+		Logger.logError(e);
+	    } finally {
+		monitor.done();
+	    }
+	} catch (Exception e) {
+	    Logger.logError(e);
+	}
+
+	try {
+	    res.touch(null);
+	} catch (CoreException e) {
+	    Logger.logError(e);
+	}
+
+	// Check if the included resource represents a resource-bundle
+	if (org.eclipse.babel.tapiji.tools.core.ui.utils.RBFileUtils
+		.isResourceBundleFile(res)) {
+	    String bundleName = getResourceBundleId(res);
+	    boolean newRB = resources.containsKey(bundleName);
+
+	    this.addBundleResource(res);
+	    this.unloadResourceBundle(bundleName);
+	    // this.loadResourceBundle(bundleName);
+
+	    if (newRB) {
+		try {
+		    resource.getProject().build(
+			    IncrementalProjectBuilder.FULL_BUILD, BUILDER_ID,
+			    null, null);
+		} catch (CoreException e) {
+		    Logger.logError(e);
+		}
+	    }
+	    fireResourceBundleChangedEvent(getResourceBundleId(res),
+		    new ResourceBundleChangedEvent(
+			    ResourceBundleChangedEvent.INCLUDED, bundleName,
+			    res.getProject()));
+	}
+
+	fireResourceExclusionEvent(new ResourceExclusionEvent(changedResources));
+    }
+
+    protected void fireResourceExclusionEvent(ResourceExclusionEvent event) {
+	for (IResourceExclusionListener listener : exclusionListeners) {
+	    listener.exclusionChanged(event);
+	}
+    }
+
+    public static boolean isResourceExcluded(IResource res) {
+	IResource resource = res;
+
+	if (!state_loaded) {
+	    stateLoader.loadState();
+	}
+
+	boolean isExcluded = false;
+
+	do {
+	    if (excludedResources.contains(new ResourceDescriptor(resource))) {
+		if (org.eclipse.babel.tapiji.tools.core.ui.utils.RBFileUtils
+			.isResourceBundleFile(resource)) {
+		    Set<IResource> resources = allBundles
+			    .remove(getResourceBundleName(resource));
+		    if (resources == null) {
+			resources = new HashSet<IResource>();
+		    }
+		    resources.add(resource);
+		    allBundles.put(getResourceBundleName(resource), resources);
+		}
+
+		isExcluded = true;
+		break;
+	    }
+	    resource = resource.getParent();
+	} while (resource != null
+		&& !(resource instanceof IProject || resource instanceof IWorkspaceRoot)
+		&& checkResourceExclusionRoot);
+
+	return isExcluded; // excludedResources.contains(new
+	// ResourceDescriptor(res));
+    }
+
+    public IFile getRandomFile(String bundleName) {
+	try {
+	    Collection<IMessagesBundle> messagesBundles = RBManager
+		    .getInstance(project).getMessagesBundleGroup(bundleName)
+		    .getMessagesBundles();
+	    IMessagesBundle bundle = messagesBundles.iterator().next();
+	    return FileUtils.getFile(bundle);
+	} catch (Exception e) {
+	    e.printStackTrace();
+	}
+	return null;
+    }
+
+    @Deprecated
+    protected static boolean isResourceExcluded(IProject project, String bname) {
+	Iterator<IResourceDescriptor> itExcl = excludedResources.iterator();
+	while (itExcl.hasNext()) {
+	    IResourceDescriptor rd = itExcl.next();
+	    if (project.getName().equals(rd.getProjectName())
+		    && bname.equals(rd.getBundleId())) {
+		return true;
+	    }
+	}
+	return false;
+    }
+
+    public static ResourceBundleManager getManager(String projectName) {
+	for (IProject p : getAllSupportedProjects()) {
+	    if (p.getName().equalsIgnoreCase(projectName)) {
+		// check if the projectName is a fragment and return the manager
+		// for the host
+		if (FragmentProjectUtils.isFragment(p)) {
+		    return getManager(FragmentProjectUtils.getFragmentHost(p));
+		} else {
+		    return getManager(p);
+		}
+	    }
+	}
+	return null;
+    }
+
+    public IFile getResourceBundleFile(String resourceBundle, Locale l) {
+	IFile res = null;
+	Set<IResource> resSet = resources.get(resourceBundle);
+
+	if (resSet != null) {
+	    for (IResource resource : resSet) {
+		Locale refLoc = NameUtils.getLocaleByName(resourceBundle,
+			resource.getName());
+		if (refLoc == null
+			&& l == null
+			|| (refLoc != null && refLoc.equals(l) || l != null
+				&& l.equals(refLoc))) {
+		    res = resource.getProject().getFile(
+			    resource.getProjectRelativePath());
+		    break;
+		}
+	    }
+	}
+
+	return res;
+    }
+
+    public Set<IResource> getAllResourceBundleResources(String resourceBundle) {
+	return allBundles.get(resourceBundle);
+    }
+
+    public void registerResourceExclusionListener(
+	    IResourceExclusionListener listener) {
+	exclusionListeners.add(listener);
+    }
+
+    public void unregisterResourceExclusionListener(
+	    IResourceExclusionListener listener) {
+	exclusionListeners.remove(listener);
+    }
+
+    public boolean isResourceExclusionListenerRegistered(
+	    IResourceExclusionListener listener) {
+	return exclusionListeners.contains(listener);
+    }
+
+    public static void unregisterResourceExclusionListenerFromAllManagers(
+	    IResourceExclusionListener excludedResource) {
+	for (ResourceBundleManager mgr : rbmanager.values()) {
+	    mgr.unregisterResourceExclusionListener(excludedResource);
+	}
+    }
+
+    public void addResourceBundleEntry(String resourceBundleId, String key,
+	    Locale locale, String message) throws ResourceBundleException {
+
+	RBManager instance = RBManager.getInstance(project);
+	IMessagesBundleGroup bundleGroup = instance
+		.getMessagesBundleGroup(resourceBundleId);
+	IMessage entry = bundleGroup.getMessage(key, locale);
+
+	if (entry == null) {
+	    DirtyHack.setFireEnabled(false);
+
+	    IMessagesBundle messagesBundle = bundleGroup
+		    .getMessagesBundle(locale);
+	    IMessage m = MessageFactory.createMessage(key, locale);
+	    m.setText(message);
+	    messagesBundle.addMessage(m);
+
+	    FileUtils.writeToFile(messagesBundle);
+	    instance.fireResourceChanged(messagesBundle);
+
+	    DirtyHack.setFireEnabled(true);
+
+	    // notify the PropertyKeySelectionTree
+	    instance.fireEditorChanged();
+	}
+    }
+
+    public void saveResourceBundle(String resourceBundleId,
+	    IMessagesBundleGroup newBundleGroup) throws ResourceBundleException {
+
+	// RBManager.getInstance().
+    }
+
+    public void removeResourceBundleEntry(String resourceBundleId,
+	    List<String> keys) throws ResourceBundleException {
+
+	RBManager instance = RBManager.getInstance(project);
+	IMessagesBundleGroup messagesBundleGroup = instance
+		.getMessagesBundleGroup(resourceBundleId);
+
+	DirtyHack.setFireEnabled(false);
+
+	for (String key : keys) {
+	    messagesBundleGroup.removeMessages(key);
+	}
+
+	instance.writeToFile(messagesBundleGroup);
+
+	DirtyHack.setFireEnabled(true);
+
+	// notify the PropertyKeySelectionTree
+	instance.fireEditorChanged();
+    }
+
+    public boolean isResourceExisting(String bundleId, String key) {
+	boolean keyExists = false;
+	IMessagesBundleGroup bGroup = getResourceBundle(bundleId);
+
+	if (bGroup != null) {
+	    keyExists = bGroup.isKey(key);
+	}
+
+	return keyExists;
+    }
+
+    public static void rebuildProject(IResource resource) {
+	try {
+	    resource.touch(null);
+	} catch (CoreException e) {
+	    Logger.logError(e);
+	}
+    }
+
+    public Set<Locale> getProjectProvidedLocales() {
+	Set<Locale> locales = new HashSet<Locale>();
+
+	for (String bundleId : getResourceBundleNames()) {
+	    Set<Locale> rb_l = getProvidedLocales(bundleId);
+	    if (!rb_l.isEmpty()) {
+		Object[] bundlelocales = rb_l.toArray();
+		for (Object l : bundlelocales) {
+		    /* TODO check if useful to add the default */
+		    if (!locales.contains(l)) {
+			locales.add((Locale) l);
+		    }
+		}
+	    }
+	}
+	return locales;
+    }
+
+    private static IStateLoader getStateLoader() {
+
+	IExtensionPoint extp = Platform.getExtensionRegistry()
+		.getExtensionPoint(
+			"org.eclipse.babel.tapiji.tools.core" + ".stateLoader");
+	IConfigurationElement[] elements = extp.getConfigurationElements();
+
+	if (elements.length != 0) {
+	    try {
+		return (IStateLoader) elements[0]
+			.createExecutableExtension("class");
+	    } catch (CoreException e) {
+		e.printStackTrace();
+	    }
+	}
+	return null;
+    }
+
+    public static void saveManagerState() {
+	stateLoader.saveState();
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/analyzer/RBAuditor.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/analyzer/RBAuditor.java
new file mode 100644
index 0000000..0cd1afc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/analyzer/RBAuditor.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.analyzer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.babel.tapiji.tools.core.extensions.ILocation;
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.extensions.I18nResourceAuditor;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.RBFileUtils;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.ui.IMarkerResolution;
+
+public class RBAuditor extends I18nResourceAuditor {
+
+    @Override
+    public void audit(IResource resource) {
+	if (RBFileUtils.isResourceBundleFile(resource)) {
+	    ResourceBundleManager.getManager(resource.getProject())
+		    .addBundleResource(resource);
+	}
+    }
+
+    @Override
+    public String[] getFileEndings() {
+	return new String[] { "properties" };
+    }
+
+    @Override
+    public List<ILocation> getConstantStringLiterals() {
+	return new ArrayList<ILocation>();
+    }
+
+    @Override
+    public List<ILocation> getBrokenResourceReferences() {
+	return new ArrayList<ILocation>();
+    }
+
+    @Override
+    public List<ILocation> getBrokenBundleReferences() {
+	return new ArrayList<ILocation>();
+    }
+
+    @Override
+    public String getContextId() {
+	return "resource_bundle";
+    }
+
+    @Override
+    public List<IMarkerResolution> getMarkerResolutions(IMarker marker) {
+	return null;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/analyzer/ResourceBundleDetectionVisitor.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/analyzer/ResourceBundleDetectionVisitor.java
new file mode 100644
index 0000000..66fe8b5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/analyzer/ResourceBundleDetectionVisitor.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.analyzer;
+
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.RBFileUtils;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.IResourceVisitor;
+import org.eclipse.core.runtime.CoreException;
+
+public class ResourceBundleDetectionVisitor implements IResourceVisitor,
+	IResourceDeltaVisitor {
+
+    private IProject project = null;
+
+    public ResourceBundleDetectionVisitor(IProject project) {
+	this.project = project;
+    }
+
+    @Override
+    public boolean visit(IResource resource) throws CoreException {
+	try {
+	    if (RBFileUtils.isResourceBundleFile(resource)) {
+		Logger.logInfo("Loading Resource-Bundle file '"
+			+ resource.getName() + "'");
+		if (!ResourceBundleManager.isResourceExcluded(resource)) {
+		    ResourceBundleManager.getManager(project)
+			    .addBundleResource(resource);
+		}
+		return false;
+	    } else {
+		return true;
+	    }
+	} catch (Exception e) {
+	    return false;
+	}
+    }
+
+    @Override
+    public boolean visit(IResourceDelta delta) throws CoreException {
+	IResource resource = delta.getResource();
+
+	if (RBFileUtils.isResourceBundleFile(resource)) {
+	    // ResourceBundleManager.getManager(resource.getProject()).bundleResourceModified(delta);
+	    return false;
+	}
+
+	return true;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/analyzer/ResourceFinder.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/analyzer/ResourceFinder.java
new file mode 100644
index 0000000..61fe27b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/analyzer/ResourceFinder.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.analyzer;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.babel.tapiji.tools.core.ui.builder.I18nBuilder;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.IResourceVisitor;
+import org.eclipse.core.runtime.CoreException;
+
+public class ResourceFinder implements IResourceVisitor, IResourceDeltaVisitor {
+
+    List<IResource> javaResources = null;
+    Set<String> supportedExtensions = null;
+
+    public ResourceFinder(Set<String> ext) {
+	javaResources = new ArrayList<IResource>();
+	supportedExtensions = ext;
+    }
+
+    @Override
+    public boolean visit(IResource resource) throws CoreException {
+	if (I18nBuilder.isResourceAuditable(resource, supportedExtensions)) {
+	    Logger.logInfo("Audit necessary for resource '"
+		    + resource.getFullPath().toOSString() + "'");
+	    javaResources.add(resource);
+	    return false;
+	} else
+	    return true;
+    }
+
+    public List<IResource> getResources() {
+	return javaResources;
+    }
+
+    @Override
+    public boolean visit(IResourceDelta delta) throws CoreException {
+	visit(delta.getResource());
+	return true;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/builder/BuilderPropertyChangeListener.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/builder/BuilderPropertyChangeListener.java
new file mode 100644
index 0000000..3f3c7c1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/builder/BuilderPropertyChangeListener.java
@@ -0,0 +1,134 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.builder;
+
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.babel.tapiji.tools.core.extensions.IMarkerConstants;
+import org.eclipse.babel.tapiji.tools.core.ui.preferences.TapiJIPreferences;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.EditorUtils;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.swt.widgets.Display;
+
+public class BuilderPropertyChangeListener implements IPropertyChangeListener {
+
+    @Override
+    public void propertyChange(PropertyChangeEvent event) {
+	if (event.getNewValue().equals(true) && isTapiJIPropertyp(event))
+	    rebuild();
+
+	if (event.getProperty().equals(TapiJIPreferences.NON_RB_PATTERN))
+	    rebuild();
+
+	if (event.getNewValue().equals(false)) {
+	    if (event.getProperty().equals(TapiJIPreferences.AUDIT_RESOURCE)) {
+		deleteMarkersByCause(EditorUtils.MARKER_ID, -1);
+	    }
+	    if (event.getProperty().equals(TapiJIPreferences.AUDIT_RB)) {
+		deleteMarkersByCause(EditorUtils.RB_MARKER_ID, -1);
+	    }
+	    if (event.getProperty().equals(
+		    TapiJIPreferences.AUDIT_UNSPEZIFIED_KEY)) {
+		deleteMarkersByCause(EditorUtils.RB_MARKER_ID,
+			IMarkerConstants.CAUSE_UNSPEZIFIED_KEY);
+	    }
+	    if (event.getProperty().equals(TapiJIPreferences.AUDIT_SAME_VALUE)) {
+		deleteMarkersByCause(EditorUtils.RB_MARKER_ID,
+			IMarkerConstants.CAUSE_SAME_VALUE);
+	    }
+	    if (event.getProperty().equals(
+		    TapiJIPreferences.AUDIT_MISSING_LANGUAGE)) {
+		deleteMarkersByCause(EditorUtils.RB_MARKER_ID,
+			IMarkerConstants.CAUSE_MISSING_LANGUAGE);
+	    }
+	}
+
+    }
+
+    private boolean isTapiJIPropertyp(PropertyChangeEvent event) {
+	if (event.getProperty().equals(TapiJIPreferences.AUDIT_RESOURCE)
+		|| event.getProperty().equals(TapiJIPreferences.AUDIT_RB)
+		|| event.getProperty().equals(
+			TapiJIPreferences.AUDIT_UNSPEZIFIED_KEY)
+		|| event.getProperty().equals(
+			TapiJIPreferences.AUDIT_SAME_VALUE)
+		|| event.getProperty().equals(
+			TapiJIPreferences.AUDIT_MISSING_LANGUAGE))
+	    return true;
+	else
+	    return false;
+    }
+
+    /*
+     * cause == -1 ignores the attribute 'case'
+     */
+    private void deleteMarkersByCause(final String markertype, final int cause) {
+	final IWorkspace workspace = ResourcesPlugin.getWorkspace();
+	BusyIndicator.showWhile(Display.getCurrent(), new Runnable() {
+	    @Override
+	    public void run() {
+		IMarker[] marker;
+		try {
+		    marker = workspace.getRoot().findMarkers(markertype, true,
+			    IResource.DEPTH_INFINITE);
+
+		    for (IMarker m : marker) {
+			if (m.exists()) {
+			    if (m.getAttribute("cause", -1) == cause)
+				m.delete();
+			    if (cause == -1)
+				m.getResource().deleteMarkers(markertype, true,
+					IResource.DEPTH_INFINITE);
+			}
+		    }
+		} catch (CoreException e) {
+		}
+	    }
+	});
+    }
+
+    private void rebuild() {
+	final IWorkspace workspace = ResourcesPlugin.getWorkspace();
+
+	new Job("Audit source files") {
+	    @Override
+	    protected IStatus run(IProgressMonitor monitor) {
+		try {
+		    for (IResource res : workspace.getRoot().members()) {
+			final IProject p = (IProject) res;
+			try {
+			    p.build(I18nBuilder.FULL_BUILD,
+				    I18nBuilder.BUILDER_ID, null, monitor);
+			} catch (CoreException e) {
+			    Logger.logError(e);
+			}
+		    }
+		} catch (CoreException e) {
+		    Logger.logError(e);
+		}
+		return Status.OK_STATUS;
+	    }
+
+	}.schedule();
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/builder/ExtensionManager.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/builder/ExtensionManager.java
new file mode 100644
index 0000000..0b1cc8c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/builder/ExtensionManager.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.builder;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.babel.tapiji.tools.core.Activator;
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.babel.tapiji.tools.core.ui.analyzer.RBAuditor;
+import org.eclipse.babel.tapiji.tools.core.ui.extensions.I18nAuditor;
+import org.eclipse.babel.tapiji.tools.core.ui.preferences.TapiJIPreferences;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.util.IPropertyChangeListener;
+
+public class ExtensionManager {
+
+    // list of registered extension plug-ins
+    private static List<I18nAuditor> extensions = null;
+
+    // change listener for builder property change events
+    private static IPropertyChangeListener propertyChangeListener = null;
+
+    // file-endings supported by the registered extension plug-ins
+    private static Set<String> supportedFileEndings = new HashSet<String>();
+
+    public static List<I18nAuditor> getRegisteredI18nAuditors() {
+	if (extensions == null) {
+	    extensions = new ArrayList<I18nAuditor>();
+
+	    // init default auditors
+	    extensions.add(new RBAuditor());
+
+	    // lookup registered auditor extensions
+	    IConfigurationElement[] config = Platform
+		    .getExtensionRegistry()
+		    .getConfigurationElementsFor(Activator.BUILDER_EXTENSION_ID);
+
+	    try {
+		for (IConfigurationElement e : config) {
+		    addExtensionPlugIn((I18nAuditor) e
+			    .createExecutableExtension("class"));
+		}
+	    } catch (CoreException ex) {
+		Logger.logError(ex);
+	    }
+	}
+
+	// init builder property change listener
+	if (propertyChangeListener == null) {
+	    propertyChangeListener = new BuilderPropertyChangeListener();
+	    TapiJIPreferences.addPropertyChangeListener(propertyChangeListener);
+	}
+
+	return extensions;
+    }
+
+    public static Set<String> getSupportedFileEndings() {
+	return supportedFileEndings;
+    }
+
+    private static void addExtensionPlugIn(I18nAuditor extension) {
+	I18nAuditor a = extension;
+	extensions.add(a);
+	supportedFileEndings.addAll(Arrays.asList(a.getFileEndings()));
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/builder/I18nBuilder.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/builder/I18nBuilder.java
new file mode 100644
index 0000000..40bc2f3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/builder/I18nBuilder.java
@@ -0,0 +1,466 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.builder;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.babel.core.configuration.ConfigurationManager;
+import org.eclipse.babel.core.configuration.IConfiguration;
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.babel.tapiji.tools.core.extensions.ILocation;
+import org.eclipse.babel.tapiji.tools.core.extensions.IMarkerConstants;
+import org.eclipse.babel.tapiji.tools.core.model.exception.NoSuchResourceAuditorException;
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.analyzer.ResourceFinder;
+import org.eclipse.babel.tapiji.tools.core.ui.extensions.I18nAuditor;
+import org.eclipse.babel.tapiji.tools.core.ui.extensions.I18nRBAuditor;
+import org.eclipse.babel.tapiji.tools.core.ui.extensions.I18nResourceAuditor;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.EditorUtils;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.RBFileUtils;
+import org.eclipse.core.resources.ICommand;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+
+public class I18nBuilder extends IncrementalProjectBuilder {
+
+    public static final String BUILDER_ID = ResourceBundleManager.BUILDER_ID;
+
+    public static I18nAuditor getI18nAuditorByContext(String contextId)
+	    throws NoSuchResourceAuditorException {
+	for (I18nAuditor auditor : ExtensionManager.getRegisteredI18nAuditors()) {
+	    if (auditor.getContextId().equals(contextId)) {
+		return auditor;
+	    }
+	}
+	throw new NoSuchResourceAuditorException();
+    }
+
+    public static boolean isResourceAuditable(IResource resource,
+	    Set<String> supportedExtensions) {
+	for (String ext : supportedExtensions) {
+	    if (resource.getType() == IResource.FILE && !resource.isDerived()
+		    && resource.getFileExtension() != null
+		    && (resource.getFileExtension().equalsIgnoreCase(ext))) {
+		return true;
+	    }
+	}
+	return false;
+    }
+
+    @Override
+    protected IProject[] build(final int kind, Map args,
+	    IProgressMonitor monitor) throws CoreException {
+
+	ResourcesPlugin.getWorkspace().run(new IWorkspaceRunnable() {
+	    @Override
+	    public void run(IProgressMonitor monitor) throws CoreException {
+		if (kind == FULL_BUILD) {
+		    fullBuild(monitor);
+		} else {
+		    // only perform audit if the resource delta is not empty
+		    IResourceDelta resDelta = getDelta(getProject());
+
+		    if (resDelta == null) {
+			return;
+		    }
+
+		    if (resDelta.getAffectedChildren() == null) {
+			return;
+		    }
+
+		    incrementalBuild(monitor, resDelta);
+		}
+	    }
+	}, monitor);
+
+	return null;
+    }
+
+    private void incrementalBuild(IProgressMonitor monitor,
+	    IResourceDelta resDelta) throws CoreException {
+	try {
+	    // inspect resource delta
+	    ResourceFinder csrav = new ResourceFinder(
+		    ExtensionManager.getSupportedFileEndings());
+	    resDelta.accept(csrav);
+	    auditResources(csrav.getResources(), monitor, getProject());
+	} catch (CoreException e) {
+	    Logger.logError(e);
+	}
+    }
+
+    public void buildResource(IResource resource, IProgressMonitor monitor) {
+	if (isResourceAuditable(resource,
+		ExtensionManager.getSupportedFileEndings())) {
+	    List<IResource> resources = new ArrayList<IResource>();
+	    resources.add(resource);
+	    // TODO: create instance of progressmonitor and hand it over to
+	    // auditResources
+	    try {
+		auditResources(resources, monitor, resource.getProject());
+	    } catch (Exception e) {
+		Logger.logError(e);
+	    }
+	}
+    }
+
+    public void buildProject(IProgressMonitor monitor, IProject proj) {
+	try {
+	    ResourceFinder csrav = new ResourceFinder(
+		    ExtensionManager.getSupportedFileEndings());
+	    proj.accept(csrav);
+	    auditResources(csrav.getResources(), monitor, proj);
+	} catch (CoreException e) {
+	    Logger.logError(e);
+	}
+    }
+
+    private void fullBuild(IProgressMonitor monitor) {
+	buildProject(monitor, getProject());
+    }
+
+    private void auditResources(List<IResource> resources,
+	    IProgressMonitor monitor, IProject project) {
+	IConfiguration configuration = ConfigurationManager.getInstance()
+		.getConfiguration();
+
+	int work = resources.size();
+	int actWork = 0;
+	if (monitor == null) {
+	    monitor = new NullProgressMonitor();
+	}
+
+	monitor.beginTask(
+		"Audit resource file for Internationalization problems", work);
+
+	for (IResource resource : resources) {
+	    monitor.subTask("'" + resource.getFullPath().toOSString() + "'");
+	    if (monitor.isCanceled()) {
+		throw new OperationCanceledException();
+	    }
+
+	    if (!EditorUtils.deleteAuditMarkersForResource(resource)) {
+		continue;
+	    }
+
+	    if (ResourceBundleManager.isResourceExcluded(resource)) {
+		continue;
+	    }
+
+	    if (!resource.exists()) {
+		continue;
+	    }
+
+	    for (I18nAuditor ra : ExtensionManager.getRegisteredI18nAuditors()) {
+		if (ra instanceof I18nResourceAuditor
+			&& !(configuration.getAuditResource())) {
+		    continue;
+		}
+		if (ra instanceof I18nRBAuditor
+			&& !(configuration.getAuditRb())) {
+		    continue;
+		}
+
+		try {
+		    if (monitor.isCanceled()) {
+			monitor.done();
+			break;
+		    }
+
+		    if (ra.isResourceOfType(resource)) {
+			ra.audit(resource);
+		    }
+		} catch (Exception e) {
+		    Logger.logError(
+			    "Error during auditing '" + resource.getFullPath()
+				    + "'", e);
+		}
+	    }
+
+	    if (monitor != null) {
+		monitor.worked(1);
+	    }
+	}
+
+	for (I18nAuditor a : ExtensionManager.getRegisteredI18nAuditors()) {
+	    if (a instanceof I18nResourceAuditor) {
+		handleI18NAuditorMarkers((I18nResourceAuditor) a);
+	    }
+	    if (a instanceof I18nRBAuditor) {
+		handleI18NAuditorMarkers((I18nRBAuditor) a);
+		((I18nRBAuditor) a).resetProblems();
+	    }
+	}
+
+	monitor.done();
+    }
+
+    private void handleI18NAuditorMarkers(I18nResourceAuditor ra) {
+	try {
+	    for (ILocation problem : ra.getConstantStringLiterals()) {
+		EditorUtils
+			.reportToMarker(
+				org.eclipse.babel.tapiji.tools.core.util.EditorUtils
+					.getFormattedMessage(
+						org.eclipse.babel.tapiji.tools.core.util.EditorUtils.MESSAGE_NON_LOCALIZED_LITERAL,
+						new String[] { problem
+							.getLiteral() }),
+				problem,
+				IMarkerConstants.CAUSE_CONSTANT_LITERAL, "",
+				(ILocation) problem.getData(), ra
+					.getContextId());
+	    }
+
+	    // Report all broken Resource-Bundle references
+	    for (ILocation brokenLiteral : ra.getBrokenResourceReferences()) {
+		EditorUtils
+			.reportToMarker(
+				org.eclipse.babel.tapiji.tools.core.util.EditorUtils
+					.getFormattedMessage(
+						org.eclipse.babel.tapiji.tools.core.util.EditorUtils.MESSAGE_BROKEN_RESOURCE_REFERENCE,
+						new String[] {
+							brokenLiteral
+								.getLiteral(),
+							((ILocation) brokenLiteral
+								.getData())
+								.getLiteral() }),
+				brokenLiteral,
+				IMarkerConstants.CAUSE_BROKEN_REFERENCE,
+				brokenLiteral.getLiteral(),
+				(ILocation) brokenLiteral.getData(), ra
+					.getContextId());
+	    }
+
+	    // Report all broken definitions to Resource-Bundle
+	    // references
+	    for (ILocation brokenLiteral : ra.getBrokenBundleReferences()) {
+		EditorUtils
+			.reportToMarker(
+				org.eclipse.babel.tapiji.tools.core.util.EditorUtils
+					.getFormattedMessage(
+						org.eclipse.babel.tapiji.tools.core.util.EditorUtils.MESSAGE_BROKEN_RESOURCE_BUNDLE_REFERENCE,
+						new String[] { brokenLiteral
+							.getLiteral() }),
+				brokenLiteral,
+				IMarkerConstants.CAUSE_BROKEN_RB_REFERENCE,
+				brokenLiteral.getLiteral(),
+				(ILocation) brokenLiteral.getData(), ra
+					.getContextId());
+	    }
+	} catch (Exception e) {
+	    Logger.logError(
+		    "Exception during reporting of Internationalization errors",
+		    e);
+	}
+    }
+
+    private void handleI18NAuditorMarkers(I18nRBAuditor ra) {
+	IConfiguration configuration = ConfigurationManager.getInstance()
+		.getConfiguration();
+	try {
+	    // Report all unspecified keys
+	    if (configuration.getAuditMissingValue()) {
+		for (ILocation problem : ra.getUnspecifiedKeyReferences()) {
+		    EditorUtils
+			    .reportToRBMarker(
+				    org.eclipse.babel.tapiji.tools.core.util.EditorUtils
+					    .getFormattedMessage(
+						    org.eclipse.babel.tapiji.tools.core.util.EditorUtils.MESSAGE_UNSPECIFIED_KEYS,
+						    new String[] {
+							    problem.getLiteral(),
+							    problem.getFile()
+								    .getName() }),
+				    problem,
+				    IMarkerConstants.CAUSE_UNSPEZIFIED_KEY,
+				    problem.getLiteral(), "",
+				    (ILocation) problem.getData(), ra
+					    .getContextId());
+		}
+	    }
+
+	    // Report all same values
+	    if (configuration.getAuditSameValue()) {
+		Map<ILocation, ILocation> sameValues = ra
+			.getSameValuesReferences();
+		for (ILocation problem : sameValues.keySet()) {
+		    EditorUtils
+			    .reportToRBMarker(
+				    org.eclipse.babel.tapiji.tools.core.util.EditorUtils
+					    .getFormattedMessage(
+						    org.eclipse.babel.tapiji.tools.core.util.EditorUtils.MESSAGE_SAME_VALUE,
+						    new String[] {
+							    problem.getFile()
+								    .getName(),
+							    sameValues
+								    .get(problem)
+								    .getFile()
+								    .getName(),
+							    problem.getLiteral() }),
+				    problem,
+				    IMarkerConstants.CAUSE_SAME_VALUE,
+				    problem.getLiteral(),
+				    sameValues.get(problem).getFile().getName(),
+				    (ILocation) problem.getData(), ra
+					    .getContextId());
+		}
+	    }
+	    // Report all missing languages
+	    if (configuration.getAuditMissingLanguage()) {
+		for (ILocation problem : ra.getMissingLanguageReferences()) {
+		    EditorUtils
+			    .reportToRBMarker(
+				    org.eclipse.babel.tapiji.tools.core.util.EditorUtils
+					    .getFormattedMessage(
+						    org.eclipse.babel.tapiji.tools.core.util.EditorUtils.MESSAGE_MISSING_LANGUAGE,
+						    new String[] {
+							    RBFileUtils
+								    .getCorrespondingResourceBundleId(problem
+									    .getFile()),
+							    problem.getLiteral() }),
+				    problem,
+				    IMarkerConstants.CAUSE_MISSING_LANGUAGE,
+				    problem.getLiteral(), "",
+				    (ILocation) problem.getData(), ra
+					    .getContextId());
+		}
+	    }
+	} catch (Exception e) {
+	    Logger.logError(
+		    "Exception during reporting of Internationalization errors",
+		    e);
+	}
+    }
+
+    @SuppressWarnings("unused")
+    private void setProgress(IProgressMonitor monitor, int progress)
+	    throws InterruptedException {
+	monitor.worked(progress);
+
+	if (monitor.isCanceled()) {
+	    throw new OperationCanceledException();
+	}
+
+	if (isInterrupted()) {
+	    throw new InterruptedException();
+	}
+    }
+
+    @Override
+    protected void clean(IProgressMonitor monitor) throws CoreException {
+	// TODO Auto-generated method stub
+	super.clean(monitor);
+    }
+
+    public static void addBuilderToProject(IProject project) {
+	Logger.logInfo("Internationalization-Builder registered for '"
+		+ project.getName() + "'");
+
+	// Only for open projects
+	if (!project.isOpen()) {
+	    return;
+	}
+
+	IProjectDescription description = null;
+	try {
+	    description = project.getDescription();
+	} catch (CoreException e) {
+	    Logger.logError(e);
+	    return;
+	}
+
+	// Check if the builder is already associated to the specified project
+	ICommand[] commands = description.getBuildSpec();
+	for (ICommand command : commands) {
+	    if (command.getBuilderName().equals(BUILDER_ID)) {
+		return;
+	    }
+	}
+
+	// Associate the builder with the project
+	ICommand builderCmd = description.newCommand();
+	builderCmd.setBuilderName(BUILDER_ID);
+	List<ICommand> newCommands = new ArrayList<ICommand>();
+	newCommands.addAll(Arrays.asList(commands));
+	newCommands.add(builderCmd);
+	description.setBuildSpec(newCommands.toArray(new ICommand[newCommands
+		.size()]));
+
+	try {
+	    project.setDescription(description, null);
+	} catch (CoreException e) {
+	    Logger.logError(e);
+	}
+    }
+
+    public static void removeBuilderFromProject(IProject project) {
+	// Only for open projects
+	if (!project.isOpen()) {
+	    return;
+	}
+
+	try {
+	    project.deleteMarkers(EditorUtils.MARKER_ID, false,
+		    IResource.DEPTH_INFINITE);
+	    project.deleteMarkers(EditorUtils.RB_MARKER_ID, false,
+		    IResource.DEPTH_INFINITE);
+	} catch (CoreException e1) {
+	    Logger.logError(e1);
+	}
+
+	IProjectDescription description = null;
+	try {
+	    description = project.getDescription();
+	} catch (CoreException e) {
+	    Logger.logError(e);
+	    return;
+	}
+
+	// remove builder from project
+	int idx = -1;
+	ICommand[] commands = description.getBuildSpec();
+	for (int i = 0; i < commands.length; i++) {
+	    if (commands[i].getBuilderName().equals(BUILDER_ID)) {
+		idx = i;
+		break;
+	    }
+	}
+	if (idx == -1) {
+	    return;
+	}
+
+	List<ICommand> newCommands = new ArrayList<ICommand>();
+	newCommands.addAll(Arrays.asList(commands));
+	newCommands.remove(idx);
+	description.setBuildSpec(newCommands.toArray(new ICommand[newCommands
+		.size()]));
+
+	try {
+	    project.setDescription(description, null);
+	} catch (CoreException e) {
+	    Logger.logError(e);
+	}
+
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/builder/InternationalizationNature.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/builder/InternationalizationNature.java
new file mode 100644
index 0000000..21f7841
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/builder/InternationalizationNature.java
@@ -0,0 +1,142 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.builder;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IProjectNature;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+
+public class InternationalizationNature implements IProjectNature {
+
+    private static final String NATURE_ID = ResourceBundleManager.NATURE_ID;
+
+    private IProject project;
+
+    @Override
+    public void configure() throws CoreException {
+	I18nBuilder.addBuilderToProject(project);
+	new Job("Audit source files") {
+
+	    @Override
+	    protected IStatus run(IProgressMonitor monitor) {
+		try {
+		    project.build(I18nBuilder.FULL_BUILD,
+			    I18nBuilder.BUILDER_ID, null, monitor);
+		} catch (CoreException e) {
+		    Logger.logError(e);
+		}
+		return Status.OK_STATUS;
+	    }
+
+	}.schedule();
+    }
+
+    @Override
+    public void deconfigure() throws CoreException {
+	I18nBuilder.removeBuilderFromProject(project);
+    }
+
+    @Override
+    public IProject getProject() {
+	return project;
+    }
+
+    @Override
+    public void setProject(IProject project) {
+	this.project = project;
+    }
+
+    public static void addNature(IProject project) {
+	if (!project.isOpen())
+	    return;
+
+	IProjectDescription description = null;
+
+	try {
+	    description = project.getDescription();
+	} catch (CoreException e) {
+	    Logger.logError(e);
+	    return;
+	}
+
+	// Check if the project has already this nature
+	List<String> newIds = new ArrayList<String>();
+	newIds.addAll(Arrays.asList(description.getNatureIds()));
+	int index = newIds.indexOf(NATURE_ID);
+	if (index != -1)
+	    return;
+
+	// Add the nature
+	newIds.add(NATURE_ID);
+	description.setNatureIds(newIds.toArray(new String[newIds.size()]));
+
+	try {
+	    project.setDescription(description, null);
+	} catch (CoreException e) {
+	    Logger.logError(e);
+	}
+    }
+
+    public static boolean supportsNature(IProject project) {
+	return project.isOpen();
+    }
+
+    public static boolean hasNature(IProject project) {
+	try {
+	    return project.isOpen() && project.hasNature(NATURE_ID);
+	} catch (CoreException e) {
+	    Logger.logError(e);
+	    return false;
+	}
+    }
+
+    public static void removeNature(IProject project) {
+	if (!project.isOpen())
+	    return;
+
+	IProjectDescription description = null;
+
+	try {
+	    description = project.getDescription();
+	} catch (CoreException e) {
+	    Logger.logError(e);
+	    return;
+	}
+
+	// Check if the project has already this nature
+	List<String> newIds = new ArrayList<String>();
+	newIds.addAll(Arrays.asList(description.getNatureIds()));
+	int index = newIds.indexOf(NATURE_ID);
+	if (index == -1)
+	    return;
+
+	// remove the nature
+	newIds.remove(NATURE_ID);
+	description.setNatureIds(newIds.toArray(new String[newIds.size()]));
+
+	try {
+	    project.setDescription(description, null);
+	} catch (CoreException e) {
+	    Logger.logError(e);
+	}
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/builder/ViolationResolutionGenerator.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/builder/ViolationResolutionGenerator.java
new file mode 100644
index 0000000..da1fad4
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/builder/ViolationResolutionGenerator.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.builder;
+
+import java.util.List;
+
+import org.eclipse.babel.tapiji.tools.core.model.exception.NoSuchResourceAuditorException;
+import org.eclipse.babel.tapiji.tools.core.ui.extensions.I18nAuditor;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.EditorUtils;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.ui.IMarkerResolution;
+import org.eclipse.ui.IMarkerResolutionGenerator2;
+
+public class ViolationResolutionGenerator implements
+	IMarkerResolutionGenerator2 {
+
+    @Override
+    public boolean hasResolutions(IMarker marker) {
+	return true;
+    }
+
+    @Override
+    public IMarkerResolution[] getResolutions(IMarker marker) {
+
+	EditorUtils.updateMarker(marker);
+
+	String contextId = marker.getAttribute("context", "");
+
+	// find resolution generator for the given context
+	try {
+	    I18nAuditor auditor = I18nBuilder
+		    .getI18nAuditorByContext(contextId);
+	    List<IMarkerResolution> resolutions = auditor
+		    .getMarkerResolutions(marker);
+	    return resolutions
+		    .toArray(new IMarkerResolution[resolutions.size()]);
+	} catch (NoSuchResourceAuditorException e) {
+	}
+
+	return new IMarkerResolution[0];
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/decorators/ExcludedResource.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/decorators/ExcludedResource.java
new file mode 100644
index 0000000..bf11968
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/decorators/ExcludedResource.java
@@ -0,0 +1,115 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.decorators;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.babel.tapiji.tools.core.model.IResourceExclusionListener;
+import org.eclipse.babel.tapiji.tools.core.model.manager.ResourceExclusionEvent;
+import org.eclipse.babel.tapiji.tools.core.ui.Activator;
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.builder.InternationalizationNature;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.ImageUtils;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.jface.viewers.DecorationOverlayIcon;
+import org.eclipse.jface.viewers.IDecoration;
+import org.eclipse.jface.viewers.ILabelDecorator;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.LabelProviderChangedEvent;
+import org.eclipse.swt.graphics.Image;
+
+public class ExcludedResource implements ILabelDecorator,
+	IResourceExclusionListener {
+
+    private static final String ENTRY_SUFFIX = "[no i18n]";
+    private static final Image OVERLAY_IMAGE_ON = ImageUtils
+	    .getImage(ImageUtils.IMAGE_EXCLUDED_RESOURCE_ON);
+    private static final Image OVERLAY_IMAGE_OFF = ImageUtils
+	    .getImage(ImageUtils.IMAGE_EXCLUDED_RESOURCE_OFF);
+    private final List<ILabelProviderListener> label_provider_listener = new ArrayList<ILabelProviderListener>();
+
+    public boolean decorate(Object element) {
+	boolean needsDecoration = false;
+	if (element instanceof IFolder || element instanceof IFile) {
+	    IResource resource = (IResource) element;
+	    if (!InternationalizationNature.hasNature(resource.getProject()))
+		return false;
+	    try {
+		ResourceBundleManager manager = ResourceBundleManager
+			.getManager(resource.getProject());
+		if (!manager.isResourceExclusionListenerRegistered(this))
+		    manager.registerResourceExclusionListener(this);
+		if (ResourceBundleManager.isResourceExcluded(resource)) {
+		    needsDecoration = true;
+		}
+	    } catch (Exception e) {
+		Logger.logError(e);
+	    }
+	}
+	return needsDecoration;
+    }
+
+    @Override
+    public void addListener(ILabelProviderListener listener) {
+	label_provider_listener.add(listener);
+    }
+
+    @Override
+    public void dispose() {
+	ResourceBundleManager
+		.unregisterResourceExclusionListenerFromAllManagers(this);
+    }
+
+    @Override
+    public boolean isLabelProperty(Object element, String property) {
+	return false;
+    }
+
+    @Override
+    public void removeListener(ILabelProviderListener listener) {
+	label_provider_listener.remove(listener);
+    }
+
+    @Override
+    public void exclusionChanged(ResourceExclusionEvent event) {
+	LabelProviderChangedEvent labelEvent = new LabelProviderChangedEvent(
+		this, event.getChangedResources().toArray());
+	for (ILabelProviderListener l : label_provider_listener)
+	    l.labelProviderChanged(labelEvent);
+    }
+
+    @Override
+    public Image decorateImage(Image image, Object element) {
+	if (decorate(element)) {
+	    DecorationOverlayIcon overlayIcon = new DecorationOverlayIcon(
+		    image,
+		    Activator
+			    .getImageDescriptor(ImageUtils.IMAGE_EXCLUDED_RESOURCE_OFF),
+		    IDecoration.TOP_RIGHT);
+	    return overlayIcon.createImage();
+	} else {
+	    return image;
+	}
+    }
+
+    @Override
+    public String decorateText(String text, Object element) {
+	if (decorate(element)) {
+	    return text + " " + ENTRY_SUFFIX;
+	} else
+	    return text;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/AddLanguageDialoge.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/AddLanguageDialoge.java
new file mode 100644
index 0000000..c592586
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/AddLanguageDialoge.java
@@ -0,0 +1,168 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.dialogs;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.LocaleUtils;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+public class AddLanguageDialoge extends Dialog {
+    private Locale locale;
+    private Shell shell;
+
+    private Text titelText;
+    private Text descriptionText;
+    private Combo cmbLanguage;
+    private Text language;
+    private Text country;
+    private Text variant;
+
+    public AddLanguageDialoge(Shell parentShell) {
+	super(parentShell);
+	shell = parentShell;
+    }
+
+    @Override
+    protected Control createDialogArea(Composite parent) {
+	Composite titelArea = new Composite(parent, SWT.NO_BACKGROUND);
+	Composite dialogArea = (Composite) super.createDialogArea(parent);
+	GridLayout layout = new GridLayout(1, true);
+	dialogArea.setLayout(layout);
+
+	initDescription(titelArea);
+	initCombo(dialogArea);
+	initTextArea(dialogArea);
+
+	titelArea.pack();
+	dialogArea.pack();
+	parent.pack();
+
+	return dialogArea;
+    }
+
+    private void initDescription(Composite titelArea) {
+	titelArea.setEnabled(false);
+	titelArea.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, true, true,
+		1, 1));
+	titelArea.setLayout(new GridLayout(1, true));
+	titelArea.setBackground(new Color(shell.getDisplay(), 255, 255, 255));
+
+	titelText = new Text(titelArea, SWT.LEFT);
+	titelText.setFont(new Font(shell.getDisplay(), shell.getFont()
+		.getFontData()[0].getName(), 11, SWT.BOLD));
+	titelText.setText("Please, specify the desired language");
+
+	descriptionText = new Text(titelArea, SWT.WRAP);
+	descriptionText.setLayoutData(new GridData(450, 60)); // TODO improve
+	descriptionText
+		.setText("Note: "
+			+ "In all ResourceBundles of the project/plug-in will be created a new properties-file with the basename of the ResourceBundle and the corresponding locale-extension. "
+			+ "If the locale is just provided of a ResourceBundle, no new file will be created.");
+    }
+
+    private void initCombo(Composite dialogArea) {
+	cmbLanguage = new Combo(dialogArea, SWT.DROP_DOWN);
+	cmbLanguage.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true,
+		true, 1, 1));
+
+	final Locale[] locales = Locale.getAvailableLocales();
+	final Set<Locale> localeSet = new HashSet<Locale>();
+	List<String> localeNames = new LinkedList<String>();
+
+	for (Locale l : locales) {
+	    localeNames.add(l.getDisplayName());
+	    localeSet.add(l);
+	}
+
+	Collections.sort(localeNames);
+
+	String[] s = new String[localeNames.size()];
+	cmbLanguage.setItems(localeNames.toArray(s));
+	cmbLanguage.add(ResourceBundleManager.defaultLocaleTag, 0);
+
+	cmbLanguage.addSelectionListener(new SelectionListener() {
+	    @Override
+	    public void widgetSelected(SelectionEvent e) {
+		int selectIndex = ((Combo) e.getSource()).getSelectionIndex();
+		if (!cmbLanguage.getItem(selectIndex).equals(
+			ResourceBundleManager.defaultLocaleTag)) {
+		    Locale l = LocaleUtils.getLocaleByDisplayName(localeSet,
+			    cmbLanguage.getItem(selectIndex));
+
+		    language.setText(l.getLanguage());
+		    country.setText(l.getCountry());
+		    variant.setText(l.getVariant());
+		} else {
+		    language.setText("");
+		    country.setText("");
+		    variant.setText("");
+		}
+	    }
+
+	    @Override
+	    public void widgetDefaultSelected(SelectionEvent e) {
+		// TODO Auto-generated method stub
+	    }
+	});
+    }
+
+    private void initTextArea(Composite dialogArea) {
+	final Group group = new Group(dialogArea, SWT.SHADOW_ETCHED_IN);
+	group.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true, 1,
+		1));
+	group.setLayout(new GridLayout(3, true));
+	group.setText("Locale");
+
+	Label languageLabel = new Label(group, SWT.SINGLE);
+	languageLabel.setText("Language");
+	Label countryLabel = new Label(group, SWT.SINGLE);
+	countryLabel.setText("Country");
+	Label variantLabel = new Label(group, SWT.SINGLE);
+	variantLabel.setText("Variant");
+
+	language = new Text(group, SWT.SINGLE);
+	country = new Text(group, SWT.SINGLE);
+	variant = new Text(group, SWT.SINGLE);
+    }
+
+    @Override
+    protected void okPressed() {
+	locale = new Locale(language.getText(), country.getText(),
+		variant.getText());
+
+	super.okPressed();
+    }
+
+    public Locale getSelectedLanguage() {
+	return locale;
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/CreatePatternDialoge.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/CreatePatternDialoge.java
new file mode 100644
index 0000000..cda61c0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/CreatePatternDialoge.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.dialogs;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+public class CreatePatternDialoge extends Dialog {
+    private String pattern;
+    private Text patternText;
+
+    public CreatePatternDialoge(Shell shell) {
+	this(shell, "");
+    }
+
+    public CreatePatternDialoge(Shell shell, String pattern) {
+	super(shell);
+	this.pattern = pattern;
+	// setShellStyle(SWT.RESIZE);
+    }
+
+    @Override
+    protected Control createDialogArea(Composite parent) {
+	Composite composite = new Composite(parent, SWT.NONE);
+	composite.setLayout(new GridLayout(1, true));
+	composite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));
+
+	Label descriptionLabel = new Label(composite, SWT.NONE);
+	descriptionLabel.setText("Enter a regular expression:");
+
+	patternText = new Text(composite, SWT.WRAP | SWT.MULTI);
+	GridData gData = new GridData(SWT.FILL, SWT.FILL, true, false);
+	gData.widthHint = 400;
+	gData.heightHint = 60;
+	patternText.setLayoutData(gData);
+	patternText.setText(pattern);
+
+	return composite;
+    }
+
+    @Override
+    protected void okPressed() {
+	pattern = patternText.getText();
+
+	super.okPressed();
+    }
+
+    public String getPattern() {
+	return pattern;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/CreateResourceBundleEntryDialog.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/CreateResourceBundleEntryDialog.java
new file mode 100644
index 0000000..fa66c12
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/CreateResourceBundleEntryDialog.java
@@ -0,0 +1,481 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer, Clemente Lodi-Fe, Alexej Strelzow.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ *     Clemente Lodi-Fe - bug fix
+ *     Alexej Strelzow - added DialogConfiguration
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.dialogs;
+
+import java.util.Collection;
+import java.util.Locale;
+import java.util.Set;
+
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.babel.tapiji.tools.core.model.exception.ResourceBundleException;
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.LocaleUtils;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.ResourceUtils;
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+public class CreateResourceBundleEntryDialog extends TitleAreaDialog {
+
+    private static int WIDTH_LEFT_COLUMN = 100;
+
+    private static final String DEFAULT_KEY = "defaultkey";
+
+    private String projectName;
+
+    private Text txtKey;
+    private Combo cmbRB;
+    private Text txtDefaultText;
+    private Combo cmbLanguage;
+
+    private Button okButton;
+    private Button cancelButton;
+
+    /*** Dialog Model ***/
+    String selectedRB = "";
+    String selectedLocale = "";
+    String selectedKey = "";
+    String selectedDefaultText = "";
+
+    /*** MODIFY LISTENER ***/
+    ModifyListener rbModifyListener;
+
+    public class DialogConfiguration {
+
+	String projectName;
+
+	String preselectedKey;
+	String preselectedMessage;
+	String preselectedBundle;
+	String preselectedLocale;
+
+	public String getProjectName() {
+	    return projectName;
+	}
+
+	public void setProjectName(String projectName) {
+	    this.projectName = projectName;
+	}
+
+	public String getPreselectedKey() {
+	    return preselectedKey;
+	}
+
+	public void setPreselectedKey(String preselectedKey) {
+	    this.preselectedKey = preselectedKey;
+	}
+
+	public String getPreselectedMessage() {
+	    return preselectedMessage;
+	}
+
+	public void setPreselectedMessage(String preselectedMessage) {
+	    this.preselectedMessage = preselectedMessage;
+	}
+
+	public String getPreselectedBundle() {
+	    return preselectedBundle;
+	}
+
+	public void setPreselectedBundle(String preselectedBundle) {
+	    this.preselectedBundle = preselectedBundle;
+	}
+
+	public String getPreselectedLocale() {
+	    return preselectedLocale;
+	}
+
+	public void setPreselectedLocale(String preselectedLocale) {
+	    this.preselectedLocale = preselectedLocale;
+	}
+
+    }
+
+    public CreateResourceBundleEntryDialog(Shell parentShell) {
+	super(parentShell);
+    }
+
+    public void setDialogConfiguration(DialogConfiguration config) {
+	String preselectedKey = config.getPreselectedKey();
+	this.selectedKey = preselectedKey != null ? preselectedKey.trim()
+		: preselectedKey;
+	if ("".equals(this.selectedKey)) {
+	    this.selectedKey = DEFAULT_KEY;
+	}
+
+	this.selectedDefaultText = config.getPreselectedMessage();
+	this.selectedRB = config.getPreselectedBundle();
+	this.selectedLocale = config.getPreselectedLocale();
+	this.projectName = config.getProjectName();
+    }
+
+    public String getSelectedResourceBundle() {
+	return selectedRB;
+    }
+
+    public String getSelectedKey() {
+	return selectedKey;
+    }
+
+    @Override
+    protected Control createDialogArea(Composite parent) {
+	Composite dialogArea = (Composite) super.createDialogArea(parent);
+	initLayout(dialogArea);
+	constructRBSection(dialogArea);
+	constructDefaultSection(dialogArea);
+	initContent();
+	return dialogArea;
+    }
+
+    protected void initContent() {
+	cmbRB.removeAll();
+	int iSel = -1;
+	int index = 0;
+
+	Collection<String> availableBundles = ResourceBundleManager.getManager(
+		projectName).getResourceBundleNames();
+
+	for (String bundle : availableBundles) {
+	    cmbRB.add(bundle);
+	    if (bundle.equals(selectedRB)) {
+		cmbRB.select(index);
+		iSel = index;
+		cmbRB.setEnabled(false);
+	    }
+	    index++;
+	}
+
+	if (availableBundles.size() > 0 && iSel < 0) {
+	    cmbRB.select(0);
+	    selectedRB = cmbRB.getText();
+	    cmbRB.setEnabled(true);
+	}
+
+	rbModifyListener = new ModifyListener() {
+
+	    @Override
+	    public void modifyText(ModifyEvent e) {
+		selectedRB = cmbRB.getText();
+		validate();
+	    }
+	};
+	cmbRB.removeModifyListener(rbModifyListener);
+	cmbRB.addModifyListener(rbModifyListener);
+
+	cmbRB.addSelectionListener(new SelectionListener() {
+
+	    @Override
+	    public void widgetSelected(SelectionEvent e) {
+		selectedLocale = "";
+		updateAvailableLanguages();
+	    }
+
+	    @Override
+	    public void widgetDefaultSelected(SelectionEvent e) {
+
+		selectedLocale = "";
+		updateAvailableLanguages();
+	    }
+	});
+	updateAvailableLanguages();
+	validate();
+    }
+
+    protected void updateAvailableLanguages() {
+	cmbLanguage.removeAll();
+	String selectedBundle = cmbRB.getText();
+
+	if ("".equals(selectedBundle.trim())) {
+	    return;
+	}
+
+	ResourceBundleManager manager = ResourceBundleManager
+		.getManager(projectName);
+
+	// Retrieve available locales for the selected resource-bundle
+	Set<Locale> locales = manager.getProvidedLocales(selectedBundle);
+	int index = 0;
+	int iSel = -1;
+	for (Locale l : manager.getProvidedLocales(selectedBundle)) {
+	    String displayName = l == null ? ResourceBundleManager.defaultLocaleTag
+		    : l.getDisplayName();
+	    if (displayName.equals(selectedLocale))
+		iSel = index;
+	    if (displayName.equals(""))
+		displayName = ResourceBundleManager.defaultLocaleTag;
+	    cmbLanguage.add(displayName);
+	    if (index == iSel)
+		cmbLanguage.select(iSel);
+	    index++;
+	}
+
+	if (locales.size() > 0) {
+	    cmbLanguage.select(0);
+	    selectedLocale = cmbLanguage.getText();
+	}
+
+	cmbLanguage.addModifyListener(new ModifyListener() {
+	    @Override
+	    public void modifyText(ModifyEvent e) {
+		selectedLocale = cmbLanguage.getText();
+		validate();
+	    }
+	});
+    }
+
+    protected void initLayout(Composite parent) {
+	final GridLayout layout = new GridLayout(1, true);
+	parent.setLayout(layout);
+    }
+
+    protected void constructRBSection(Composite parent) {
+	final Group group = new Group(parent, SWT.SHADOW_ETCHED_IN);
+	group.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true,
+		false, 1, 1));
+	group.setText("Resource Bundle");
+
+	// define grid data for this group
+	GridData gridData = new GridData();
+	gridData.horizontalAlignment = SWT.FILL;
+	gridData.grabExcessHorizontalSpace = true;
+	group.setLayoutData(gridData);
+	group.setLayout(new GridLayout(2, false));
+
+	final Label spacer = new Label(group, SWT.NONE | SWT.LEFT);
+	spacer.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER,
+		false, false, 1, 1));
+
+	final Label infoLabel = new Label(group, SWT.NONE | SWT.LEFT);
+	infoLabel.setLayoutData(new GridData(GridData.BEGINNING,
+		GridData.CENTER, false, false, 1, 1));
+	infoLabel
+		.setText("Specify the key of the new resource as well as the Resource-Bundle in\n"
+			+ "which the resource" + "should be added.\n");
+
+	// Schl�ssel
+	final Label lblKey = new Label(group, SWT.NONE | SWT.RIGHT);
+	GridData lblKeyGrid = new GridData(GridData.END, GridData.CENTER,
+		false, false, 1, 1);
+	lblKeyGrid.widthHint = WIDTH_LEFT_COLUMN;
+	lblKey.setLayoutData(lblKeyGrid);
+	lblKey.setText("Key:");
+	txtKey = new Text(group, SWT.BORDER);
+	txtKey.setText(selectedKey);
+	// grey ouut textfield if there already is a preset key
+	txtKey.setEditable(selectedKey.trim().length() == 0
+		|| selectedKey.indexOf("[Platzhalter]") >= 0
+		|| selectedKey.equals(DEFAULT_KEY));
+	txtKey.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true,
+		false, 1, 1));
+	txtKey.addModifyListener(new ModifyListener() {
+
+	    @Override
+	    public void modifyText(ModifyEvent e) {
+		selectedKey = txtKey.getText();
+		validate();
+	    }
+	});
+
+	// Resource-Bundle
+	final Label lblRB = new Label(group, SWT.NONE);
+	lblRB.setLayoutData(new GridData(GridData.END, GridData.CENTER, false,
+		false, 1, 1));
+	lblRB.setText("Resource-Bundle:");
+
+	cmbRB = new Combo(group, SWT.DROP_DOWN | SWT.SIMPLE);
+	cmbRB.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true,
+		false, 1, 1));
+    }
+
+    protected void constructDefaultSection(Composite parent) {
+	final Group group = new Group(parent, SWT.SHADOW_ETCHED_IN);
+	group.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true,
+		true, 1, 1));
+	group.setText("Default-Text");
+
+	// define grid data for this group
+	GridData gridData = new GridData();
+	gridData.horizontalAlignment = SWT.FILL;
+	gridData.grabExcessHorizontalSpace = true;
+	group.setLayoutData(gridData);
+	group.setLayout(new GridLayout(2, false));
+
+	final Label spacer = new Label(group, SWT.NONE | SWT.LEFT);
+	spacer.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER,
+		false, false, 1, 1));
+
+	final Label infoLabel = new Label(group, SWT.NONE | SWT.LEFT);
+	infoLabel.setLayoutData(new GridData(GridData.BEGINNING,
+		GridData.CENTER, false, false, 1, 1));
+	infoLabel
+		.setText("Define a default text for the specified resource. Moreover, you need to\n"
+			+ "select the locale for which the default text should be defined.");
+
+	// Text
+	final Label lblText = new Label(group, SWT.NONE | SWT.RIGHT);
+	GridData lblTextGrid = new GridData(GridData.END, GridData.CENTER,
+		false, false, 1, 1);
+	lblTextGrid.heightHint = 80;
+	lblTextGrid.widthHint = 100;
+	lblText.setLayoutData(lblTextGrid);
+	lblText.setText("Text:");
+
+	txtDefaultText = new Text(group, SWT.MULTI | SWT.BORDER);
+	txtDefaultText.setText(selectedDefaultText);
+	txtDefaultText.setLayoutData(new GridData(GridData.FILL, GridData.FILL,
+		true, true, 1, 1));
+	txtDefaultText.addModifyListener(new ModifyListener() {
+
+	    @Override
+	    public void modifyText(ModifyEvent e) {
+		selectedDefaultText = txtDefaultText.getText();
+		validate();
+	    }
+	});
+
+	// Sprache
+	final Label lblLanguage = new Label(group, SWT.NONE);
+	lblLanguage.setLayoutData(new GridData(GridData.END, GridData.CENTER,
+		false, false, 1, 1));
+	lblLanguage.setText("Language (Country):");
+
+	cmbLanguage = new Combo(group, SWT.DROP_DOWN | SWT.SIMPLE);
+	cmbLanguage.setLayoutData(new GridData(GridData.FILL, GridData.CENTER,
+		true, false, 1, 1));
+    }
+
+    @Override
+    protected void okPressed() {
+	super.okPressed();
+	// TODO debug
+	ResourceBundleManager manager = ResourceBundleManager
+		.getManager(projectName);
+	// Insert new Resource-Bundle reference
+	Locale locale = LocaleUtils.getLocaleByDisplayName(
+		manager.getProvidedLocales(selectedRB), selectedLocale); // new
+									 // Locale("");
+									 // //
+									 // retrieve
+									 // locale
+
+	try {
+	    manager.addResourceBundleEntry(selectedRB, selectedKey, locale,
+		    selectedDefaultText);
+	} catch (ResourceBundleException e) {
+	    Logger.logError(e);
+	}
+    }
+
+    @Override
+    protected void configureShell(Shell newShell) {
+	super.configureShell(newShell);
+	newShell.setText("Create Resource-Bundle entry");
+    }
+
+    @Override
+    public void create() {
+	// TODO Auto-generated method stub
+	super.create();
+	this.setTitle("New Resource-Bundle entry");
+	this.setMessage("Please, specify details about the new Resource-Bundle entry");
+    }
+
+    /**
+     * Validates all inputs of the CreateResourceBundleEntryDialog
+     */
+    protected void validate() {
+	// Check Resource-Bundle ids
+	boolean keyValid = false;
+	boolean keyValidChar = ResourceUtils.isValidResourceKey(selectedKey);
+	boolean rbValid = false;
+	boolean textValid = false;
+	ResourceBundleManager manager = ResourceBundleManager
+		.getManager(projectName);
+	boolean localeValid = LocaleUtils.containsLocaleByDisplayName(
+		manager.getProvidedLocales(selectedRB), selectedLocale);
+
+	for (String rbId : manager.getResourceBundleNames()) {
+	    if (rbId.equals(selectedRB)) {
+		rbValid = true;
+		break;
+	    }
+	}
+
+	if (!manager.isResourceExisting(selectedRB, selectedKey))
+	    keyValid = true;
+
+	if (selectedDefaultText.trim().length() > 0)
+	    textValid = true;
+
+	// print Validation summary
+	String errorMessage = null;
+	if (selectedKey.trim().length() == 0)
+	    errorMessage = "No resource key specified.";
+	else if (!keyValidChar)
+	    errorMessage = "The specified resource key contains invalid characters.";
+	else if (!keyValid)
+	    errorMessage = "The specified resource key is already existing.";
+	else if (!rbValid)
+	    errorMessage = "The specified Resource-Bundle does not exist.";
+	else if (!localeValid)
+	    errorMessage = "The specified Locale does not exist for the selected Resource-Bundle.";
+	else if (!textValid)
+	    errorMessage = "No default translation specified.";
+	else {
+	    if (okButton != null)
+		okButton.setEnabled(true);
+	}
+
+	setErrorMessage(errorMessage);
+	if (okButton != null && errorMessage != null)
+	    okButton.setEnabled(false);
+    }
+
+    @Override
+    protected void createButtonsForButtonBar(Composite parent) {
+	okButton = createButton(parent, OK, "Ok", true);
+	okButton.addSelectionListener(new SelectionAdapter() {
+	    public void widgetSelected(SelectionEvent e) {
+		// Set return code
+		setReturnCode(OK);
+		close();
+	    }
+	});
+
+	cancelButton = createButton(parent, CANCEL, "Cancel", false);
+	cancelButton.addSelectionListener(new SelectionAdapter() {
+	    public void widgetSelected(SelectionEvent e) {
+		setReturnCode(CANCEL);
+		close();
+	    }
+	});
+
+	okButton.setEnabled(this.getErrorMessage() == null);
+	cancelButton.setEnabled(true);
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/FragmentProjectSelectionDialog.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/FragmentProjectSelectionDialog.java
new file mode 100644
index 0000000..14b637d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/FragmentProjectSelectionDialog.java
@@ -0,0 +1,124 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.dialogs;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.ListDialog;
+
+public class FragmentProjectSelectionDialog extends ListDialog {
+    private IProject hostproject;
+    private List<IProject> allProjects;
+
+    public FragmentProjectSelectionDialog(Shell parent, IProject hostproject,
+	    List<IProject> fragmentprojects) {
+	super(parent);
+	this.hostproject = hostproject;
+	this.allProjects = new ArrayList<IProject>(fragmentprojects);
+	allProjects.add(0, hostproject);
+
+	init();
+    }
+
+    private void init() {
+	this.setAddCancelButton(true);
+	this.setMessage("Select one of the following plug-ins:");
+	this.setTitle("Project Selector");
+	this.setContentProvider(new IProjectContentProvider());
+	this.setLabelProvider(new IProjectLabelProvider());
+
+	this.setInput(allProjects);
+    }
+
+    public IProject getSelectedProject() {
+	Object[] selection = this.getResult();
+	if (selection != null && selection.length > 0)
+	    return (IProject) selection[0];
+	return null;
+    }
+
+    // private classes--------------------------------------------------------
+    class IProjectContentProvider implements IStructuredContentProvider {
+
+	@Override
+	public Object[] getElements(Object inputElement) {
+	    List<IProject> resources = (List<IProject>) inputElement;
+	    return resources.toArray();
+	}
+
+	@Override
+	public void dispose() {
+	    // TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+	    // TODO Auto-generated method stub
+	}
+
+    }
+
+    class IProjectLabelProvider implements ILabelProvider {
+
+	@Override
+	public Image getImage(Object element) {
+	    return PlatformUI.getWorkbench().getSharedImages()
+		    .getImage(ISharedImages.IMG_OBJ_PROJECT);
+	}
+
+	@Override
+	public String getText(Object element) {
+	    IProject p = ((IProject) element);
+	    String text = p.getName();
+	    if (p.equals(hostproject))
+		text += " [host project]";
+	    else
+		text += " [fragment project]";
+	    return text;
+	}
+
+	@Override
+	public void addListener(ILabelProviderListener listener) {
+	    // TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void dispose() {
+	    // TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public boolean isLabelProperty(Object element, String property) {
+	    // TODO Auto-generated method stub
+	    return false;
+	}
+
+	@Override
+	public void removeListener(ILabelProviderListener listener) {
+	    // TODO Auto-generated method stub
+
+	}
+
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/GenerateBundleAccessorDialog.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/GenerateBundleAccessorDialog.java
new file mode 100644
index 0000000..ac9fce7
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/GenerateBundleAccessorDialog.java
@@ -0,0 +1,146 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.dialogs;
+
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+public class GenerateBundleAccessorDialog extends TitleAreaDialog {
+
+    private static int WIDTH_LEFT_COLUMN = 100;
+
+    private Text bundleAccessor;
+    private Text packageName;
+
+    public GenerateBundleAccessorDialog(Shell parentShell) {
+	super(parentShell);
+    }
+
+    @Override
+    protected Control createDialogArea(Composite parent) {
+	Composite dialogArea = (Composite) super.createDialogArea(parent);
+	initLayout(dialogArea);
+	constructBASection(dialogArea);
+	// constructDefaultSection (dialogArea);
+	initContent();
+	return dialogArea;
+    }
+
+    protected void initLayout(Composite parent) {
+	final GridLayout layout = new GridLayout(1, true);
+	parent.setLayout(layout);
+    }
+
+    protected void constructBASection(Composite parent) {
+	final Group group = new Group(parent, SWT.SHADOW_ETCHED_IN);
+	group.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true,
+		false, 1, 1));
+	group.setText("Resource Bundle");
+
+	// define grid data for this group
+	GridData gridData = new GridData();
+	gridData.horizontalAlignment = SWT.FILL;
+	gridData.grabExcessHorizontalSpace = true;
+	group.setLayoutData(gridData);
+	group.setLayout(new GridLayout(2, false));
+
+	final Label spacer = new Label(group, SWT.NONE | SWT.LEFT);
+	spacer.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER,
+		false, false, 1, 1));
+
+	final Label infoLabel = new Label(group, SWT.NONE | SWT.LEFT);
+	infoLabel.setLayoutData(new GridData(GridData.BEGINNING,
+		GridData.CENTER, false, false, 1, 1));
+	infoLabel
+		.setText("Diese Zeile stellt einen Platzhalter f�r einen kurzen Infotext dar.\nDiese Zeile stellt einen Platzhalter f�r einen kurzen Infotext dar.");
+
+	// Schl�ssel
+	final Label lblBA = new Label(group, SWT.NONE | SWT.RIGHT);
+	GridData lblBAGrid = new GridData(GridData.END, GridData.CENTER, false,
+		false, 1, 1);
+	lblBAGrid.widthHint = WIDTH_LEFT_COLUMN;
+	lblBA.setLayoutData(lblBAGrid);
+	lblBA.setText("Class-Name:");
+
+	bundleAccessor = new Text(group, SWT.BORDER);
+	bundleAccessor.setLayoutData(new GridData(GridData.FILL,
+		GridData.CENTER, true, false, 1, 1));
+
+	// Resource-Bundle
+	final Label lblPkg = new Label(group, SWT.NONE);
+	lblPkg.setLayoutData(new GridData(GridData.END, GridData.CENTER, false,
+		false, 1, 1));
+	lblPkg.setText("Package:");
+
+	packageName = new Text(group, SWT.BORDER);
+	packageName.setLayoutData(new GridData(GridData.FILL, GridData.CENTER,
+		true, false, 1, 1));
+    }
+
+    protected void initContent() {
+	bundleAccessor.setText("BundleAccessor");
+	packageName.setText("a.b");
+    }
+
+    /*
+     * protected void constructDefaultSection(Composite parent) { final Group
+     * group = new Group (parent, SWT.SHADOW_ETCHED_IN); group.setLayoutData(new
+     * GridData(GridData.FILL, GridData.CENTER, true, true, 1, 1));
+     * group.setText("Basis-Text");
+     * 
+     * // define grid data for this group GridData gridData = new GridData();
+     * gridData.horizontalAlignment = SWT.FILL;
+     * gridData.grabExcessHorizontalSpace = true; group.setLayoutData(gridData);
+     * group.setLayout(new GridLayout(2, false));
+     * 
+     * final Label spacer = new Label (group, SWT.NONE | SWT.LEFT);
+     * spacer.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER,
+     * false, false, 1, 1));
+     * 
+     * final Label infoLabel = new Label (group, SWT.NONE | SWT.LEFT);
+     * infoLabel.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER,
+     * false, false, 1, 1)); infoLabel.setText(
+     * "Diese Zeile stellt einen Platzhalter f�r einen kurzen Infotext dar.\nDiese Zeile stellt einen Platzhalter f�r einen kurzen Infotext dar."
+     * );
+     * 
+     * // Text final Label lblText = new Label (group, SWT.NONE | SWT.RIGHT);
+     * GridData lblTextGrid = new GridData(GridData.END, GridData.CENTER, false,
+     * false, 1, 1); lblTextGrid.heightHint = 80; lblTextGrid.widthHint = 100;
+     * lblText.setLayoutData(lblTextGrid); lblText.setText("Text:");
+     * 
+     * txtDefaultText = new Text (group, SWT.MULTI | SWT.BORDER);
+     * txtDefaultText.setLayoutData(new GridData(GridData.FILL, GridData.FILL,
+     * true, true, 1, 1));
+     * 
+     * // Sprache final Label lblLanguage = new Label (group, SWT.NONE);
+     * lblLanguage.setLayoutData(new GridData(GridData.END, GridData.CENTER,
+     * false, false, 1, 1)); lblLanguage.setText("Sprache (Land):");
+     * 
+     * cmbLanguage = new Combo (group, SWT.DROP_DOWN | SWT.SIMPLE);
+     * cmbLanguage.setLayoutData(new GridData(GridData.FILL, GridData.CENTER,
+     * true, false, 1, 1)); }
+     */
+
+    @Override
+    protected void configureShell(Shell newShell) {
+	super.configureShell(newShell);
+	newShell.setText("Create Resource-Bundle Accessor");
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/QueryResourceBundleEntryDialog.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/QueryResourceBundleEntryDialog.java
new file mode 100644
index 0000000..2106194
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/QueryResourceBundleEntryDialog.java
@@ -0,0 +1,462 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.dialogs;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Set;
+
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.widgets.ResourceSelector;
+import org.eclipse.babel.tapiji.tools.core.ui.widgets.event.ResourceSelectionEvent;
+import org.eclipse.babel.tapiji.tools.core.ui.widgets.listener.IResourceSelectionListener;
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+public class QueryResourceBundleEntryDialog extends TitleAreaDialog {
+
+    private static int WIDTH_LEFT_COLUMN = 100;
+    private static int SEARCH_FULLTEXT = 0;
+    private static int SEARCH_KEY = 1;
+
+    private ResourceBundleManager manager;
+    private Collection<String> availableBundles;
+    private int searchOption = SEARCH_FULLTEXT;
+    private String resourceBundle = "";
+
+    private Combo cmbRB;
+
+    private Text txtKey;
+    private Button btSearchText;
+    private Button btSearchKey;
+    private Combo cmbLanguage;
+    private ResourceSelector resourceSelector;
+    private Text txtPreviewText;
+
+    private Button okButton;
+    private Button cancelButton;
+
+    /*** DIALOG MODEL ***/
+    private String selectedRB = "";
+    private String preselectedRB = "";
+    private Locale selectedLocale = null;
+    private String selectedKey = "";
+
+    public QueryResourceBundleEntryDialog(Shell parentShell,
+	    ResourceBundleManager manager, String bundleName) {
+	super(parentShell);
+	this.manager = manager;
+	// init available resource bundles
+	this.availableBundles = manager.getResourceBundleNames();
+	this.preselectedRB = bundleName;
+    }
+
+    @Override
+    protected Control createDialogArea(Composite parent) {
+	Composite dialogArea = (Composite) super.createDialogArea(parent);
+	initLayout(dialogArea);
+	constructSearchSection(dialogArea);
+	initContent();
+	return dialogArea;
+    }
+
+    protected void initContent() {
+	// init available resource bundles
+	cmbRB.removeAll();
+	int i = 0;
+	for (String bundle : availableBundles) {
+	    cmbRB.add(bundle);
+	    if (bundle.equals(preselectedRB)) {
+		cmbRB.select(i);
+		cmbRB.setEnabled(false);
+	    }
+	    i++;
+	}
+
+	if (availableBundles.size() > 0) {
+	    if (preselectedRB.trim().length() == 0) {
+		cmbRB.select(0);
+		cmbRB.setEnabled(true);
+	    }
+	}
+
+	cmbRB.addSelectionListener(new SelectionListener() {
+
+	    @Override
+	    public void widgetSelected(SelectionEvent e) {
+		// updateAvailableLanguages();
+		updateResourceSelector();
+	    }
+
+	    @Override
+	    public void widgetDefaultSelected(SelectionEvent e) {
+		// updateAvailableLanguages();
+		updateResourceSelector();
+	    }
+	});
+
+	// init available translations
+	// updateAvailableLanguages();
+
+	// init resource selector
+	updateResourceSelector();
+
+	// update search options
+	updateSearchOptions();
+    }
+
+    protected void updateResourceSelector() {
+	resourceBundle = cmbRB.getText();
+	resourceSelector.setResourceBundle(resourceBundle);
+    }
+
+    protected void updateSearchOptions() {
+	searchOption = (btSearchKey.getSelection() ? SEARCH_KEY
+		: SEARCH_FULLTEXT);
+	// cmbLanguage.setEnabled(searchOption == SEARCH_FULLTEXT);
+	// lblLanguage.setEnabled(cmbLanguage.getEnabled());
+
+	// update ResourceSelector
+	resourceSelector
+		.setDisplayMode(searchOption == SEARCH_FULLTEXT ? ResourceSelector.DISPLAY_TEXT
+			: ResourceSelector.DISPLAY_KEYS);
+    }
+
+    protected void updateAvailableLanguages() {
+	cmbLanguage.removeAll();
+	String selectedBundle = cmbRB.getText();
+
+	if (selectedBundle.trim().equals(""))
+	    return;
+
+	// Retrieve available locales for the selected resource-bundle
+	Set<Locale> locales = manager.getProvidedLocales(selectedBundle);
+	for (Locale l : locales) {
+	    String displayName = l.getDisplayName();
+	    if (displayName.equals(""))
+		displayName = ResourceBundleManager.defaultLocaleTag;
+	    cmbLanguage.add(displayName);
+	}
+
+	// if (locales.size() > 0) {
+	// cmbLanguage.select(0);
+	updateSelectedLocale();
+	// }
+    }
+
+    protected void updateSelectedLocale() {
+	String selectedBundle = cmbRB.getText();
+
+	if (selectedBundle.trim().equals(""))
+	    return;
+
+	Set<Locale> locales = manager.getProvidedLocales(selectedBundle);
+	Iterator<Locale> it = locales.iterator();
+	String selectedLocale = cmbLanguage.getText();
+	while (it.hasNext()) {
+	    Locale l = it.next();
+	    if (l.getDisplayName().equals(selectedLocale)) {
+		resourceSelector.setDisplayLocale(l);
+		break;
+	    }
+	}
+    }
+
+    protected void initLayout(Composite parent) {
+	final GridLayout layout = new GridLayout(1, true);
+	parent.setLayout(layout);
+    }
+
+    protected void constructSearchSection(Composite parent) {
+	final Group group = new Group(parent, SWT.NONE);
+	group.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true,
+		false, 1, 1));
+	group.setText("Resource selection");
+
+	// define grid data for this group
+	GridData gridData = new GridData();
+	gridData.horizontalAlignment = SWT.FILL;
+	gridData.grabExcessHorizontalSpace = true;
+	group.setLayoutData(gridData);
+	group.setLayout(new GridLayout(2, false));
+	// TODO export as help text
+
+	final Label spacer = new Label(group, SWT.NONE | SWT.LEFT);
+	spacer.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER,
+		false, false, 1, 1));
+
+	final Label infoLabel = new Label(group, SWT.NONE | SWT.LEFT);
+	GridData infoGrid = new GridData(GridData.BEGINNING,
+		GridData.BEGINNING, false, false, 1, 1);
+	infoGrid.heightHint = 70;
+	infoLabel.setLayoutData(infoGrid);
+	infoLabel
+		.setText("Select the resource that needs to be refrenced. This is achieved in two\n"
+			+ "steps. First select the Resource-Bundle in which the resource is located. \n"
+			+ "In a last step you need to choose the required resource.");
+
+	// Resource-Bundle
+	final Label lblRB = new Label(group, SWT.NONE);
+	lblRB.setLayoutData(new GridData(GridData.END, GridData.CENTER, false,
+		false, 1, 1));
+	lblRB.setText("Resource-Bundle:");
+
+	cmbRB = new Combo(group, SWT.DROP_DOWN | SWT.SIMPLE);
+	cmbRB.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true,
+		false, 1, 1));
+	cmbRB.addModifyListener(new ModifyListener() {
+	    @Override
+	    public void modifyText(ModifyEvent e) {
+		selectedRB = cmbRB.getText();
+		validate();
+	    }
+	});
+
+	// Search-Options
+	final Label spacer2 = new Label(group, SWT.NONE | SWT.LEFT);
+	spacer2.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER,
+		false, false, 1, 1));
+
+	Composite searchOptions = new Composite(group, SWT.NONE);
+	searchOptions.setLayout(new GridLayout(2, true));
+
+	btSearchText = new Button(searchOptions, SWT.RADIO);
+	btSearchText.setText("Full-text");
+	btSearchText.setSelection(searchOption == SEARCH_FULLTEXT);
+	btSearchText.addSelectionListener(new SelectionListener() {
+
+	    @Override
+	    public void widgetSelected(SelectionEvent e) {
+		updateSearchOptions();
+	    }
+
+	    @Override
+	    public void widgetDefaultSelected(SelectionEvent e) {
+		updateSearchOptions();
+	    }
+	});
+
+	btSearchKey = new Button(searchOptions, SWT.RADIO);
+	btSearchKey.setText("Key");
+	btSearchKey.setSelection(searchOption == SEARCH_KEY);
+	btSearchKey.addSelectionListener(new SelectionListener() {
+
+	    @Override
+	    public void widgetSelected(SelectionEvent e) {
+		updateSearchOptions();
+	    }
+
+	    @Override
+	    public void widgetDefaultSelected(SelectionEvent e) {
+		updateSearchOptions();
+	    }
+	});
+
+	// Sprache
+	// lblLanguage = new Label (group, SWT.NONE);
+	// lblLanguage.setLayoutData(new GridData(GridData.END, GridData.CENTER,
+	// false, false, 1, 1));
+	// lblLanguage.setText("Language (Country):");
+	//
+	// cmbLanguage = new Combo (group, SWT.DROP_DOWN | SWT.SIMPLE);
+	// cmbLanguage.setLayoutData(new GridData(GridData.FILL,
+	// GridData.CENTER, true, false, 1, 1));
+	// cmbLanguage.addSelectionListener(new SelectionListener () {
+	//
+	// @Override
+	// public void widgetDefaultSelected(SelectionEvent e) {
+	// updateSelectedLocale();
+	// }
+	//
+	// @Override
+	// public void widgetSelected(SelectionEvent e) {
+	// updateSelectedLocale();
+	// }
+	//
+	// });
+	// cmbLanguage.addModifyListener(new ModifyListener() {
+	// @Override
+	// public void modifyText(ModifyEvent e) {
+	// selectedLocale =
+	// LocaleUtils.getLocaleByDisplayName(manager.getProvidedLocales(selectedRB),
+	// cmbLanguage.getText());
+	// validate();
+	// }
+	// });
+
+	// Filter
+	final Label lblKey = new Label(group, SWT.NONE | SWT.RIGHT);
+	GridData lblKeyGrid = new GridData(GridData.END, GridData.CENTER,
+		false, false, 1, 1);
+	lblKeyGrid.widthHint = WIDTH_LEFT_COLUMN;
+	lblKey.setLayoutData(lblKeyGrid);
+	lblKey.setText("Filter:");
+
+	txtKey = new Text(group, SWT.BORDER);
+	txtKey.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true,
+		false, 1, 1));
+
+	// Add selector for property keys
+	final Label lblKeys = new Label(group, SWT.NONE);
+	lblKeys.setLayoutData(new GridData(GridData.END, GridData.BEGINNING,
+		false, false, 1, 1));
+	lblKeys.setText("Resource:");
+
+	resourceSelector = new ResourceSelector(group, SWT.NONE);
+
+	resourceSelector.setProjectName(manager.getProject().getName());
+	resourceSelector.setResourceBundle(cmbRB.getText());
+	resourceSelector.setDisplayMode(searchOption);
+
+	GridData resourceSelectionData = new GridData(GridData.FILL,
+		GridData.CENTER, true, false, 1, 1);
+	resourceSelectionData.heightHint = 150;
+	resourceSelectionData.widthHint = 400;
+	resourceSelector.setLayoutData(resourceSelectionData);
+	resourceSelector
+		.addSelectionChangedListener(new IResourceSelectionListener() {
+
+		    @Override
+		    public void selectionChanged(ResourceSelectionEvent e) {
+			selectedKey = e.getSelectedKey();
+			updatePreviewLabel(e.getSelectionSummary());
+			validate();
+		    }
+		});
+
+	// final Label spacer = new Label (group, SWT.SEPARATOR |
+	// SWT.HORIZONTAL);
+	// spacer.setLayoutData(new GridData(GridData.BEGINNING,
+	// GridData.CENTER, true, false, 2, 1));
+
+	// Preview
+	final Label lblText = new Label(group, SWT.NONE | SWT.RIGHT);
+	GridData lblTextGrid = new GridData(GridData.END, GridData.CENTER,
+		false, false, 1, 1);
+	lblTextGrid.heightHint = 120;
+	lblTextGrid.widthHint = 100;
+	lblText.setLayoutData(lblTextGrid);
+	lblText.setText("Preview:");
+
+	txtPreviewText = new Text(group, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
+	txtPreviewText.setEditable(false);
+	GridData lblTextGrid2 = new GridData(GridData.FILL, GridData.FILL,
+		true, true, 1, 1);
+	txtPreviewText.setLayoutData(lblTextGrid2);
+    }
+
+    @Override
+    protected void configureShell(Shell newShell) {
+	super.configureShell(newShell);
+	newShell.setText("Insert Resource-Bundle-Reference");
+    }
+
+    @Override
+    public void create() {
+	// TODO Auto-generated method stub
+	super.create();
+	this.setTitle("Reference a Resource");
+	this.setMessage("Please, specify details about the required Resource-Bundle reference");
+    }
+
+    protected void updatePreviewLabel(String previewText) {
+	txtPreviewText.setText(previewText);
+    }
+
+    protected void validate() {
+	// Check Resource-Bundle ids
+	boolean rbValid = false;
+	boolean localeValid = false;
+	boolean keyValid = false;
+
+	for (String rbId : this.availableBundles) {
+	    if (rbId.equals(selectedRB)) {
+		rbValid = true;
+		break;
+	    }
+	}
+
+	if (selectedLocale != null)
+	    localeValid = true;
+
+	if (manager.isResourceExisting(selectedRB, selectedKey))
+	    keyValid = true;
+
+	// print Validation summary
+	String errorMessage = null;
+	if (!rbValid)
+	    errorMessage = "The specified Resource-Bundle does not exist";
+	// else if (! localeValid)
+	// errorMessage =
+	// "The specified Locale does not exist for the selecte Resource-Bundle";
+	else if (!keyValid)
+	    errorMessage = "No resource selected";
+	else {
+	    if (okButton != null)
+		okButton.setEnabled(true);
+	}
+
+	setErrorMessage(errorMessage);
+	if (okButton != null && errorMessage != null)
+	    okButton.setEnabled(false);
+    }
+
+    @Override
+    protected void createButtonsForButtonBar(Composite parent) {
+	okButton = createButton(parent, OK, "Ok", true);
+	okButton.addSelectionListener(new SelectionAdapter() {
+	    public void widgetSelected(SelectionEvent e) {
+		// Set return code
+		setReturnCode(OK);
+		close();
+	    }
+	});
+
+	cancelButton = createButton(parent, CANCEL, "Cancel", false);
+	cancelButton.addSelectionListener(new SelectionAdapter() {
+	    public void widgetSelected(SelectionEvent e) {
+		setReturnCode(CANCEL);
+		close();
+	    }
+	});
+
+	okButton.setEnabled(false);
+	cancelButton.setEnabled(true);
+    }
+
+    public String getSelectedResourceBundle() {
+	return selectedRB;
+    }
+
+    public String getSelectedResource() {
+	return selectedKey;
+    }
+
+    public Locale getSelectedLocale() {
+	return selectedLocale;
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/RemoveLanguageDialoge.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/RemoveLanguageDialoge.java
new file mode 100644
index 0000000..b9a8d81
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/RemoveLanguageDialoge.java
@@ -0,0 +1,123 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.dialogs;
+
+import java.util.Locale;
+import java.util.Set;
+
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.ImageUtils;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.ListDialog;
+
+public class RemoveLanguageDialoge extends ListDialog {
+    private IProject project;
+
+    public RemoveLanguageDialoge(IProject project, Shell shell) {
+	super(shell);
+	this.project = project;
+
+	initDialog();
+    }
+
+    protected void initDialog() {
+	this.setAddCancelButton(true);
+	this.setMessage("Select one of the following languages to delete:");
+	this.setTitle("Language Selector");
+	this.setContentProvider(new RBContentProvider());
+	this.setLabelProvider(new RBLabelProvider());
+
+	this.setInput(ResourceBundleManager.getManager(project)
+		.getProjectProvidedLocales());
+    }
+
+    public Locale getSelectedLanguage() {
+	Object[] selection = this.getResult();
+	if (selection != null && selection.length > 0)
+	    return (Locale) selection[0];
+	return null;
+    }
+
+    // private
+    // classes-------------------------------------------------------------------------------------
+    class RBContentProvider implements IStructuredContentProvider {
+
+	@Override
+	public Object[] getElements(Object inputElement) {
+	    Set<Locale> resources = (Set<Locale>) inputElement;
+	    return resources.toArray();
+	}
+
+	@Override
+	public void dispose() {
+	    // TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+	    // TODO Auto-generated method stub
+
+	}
+
+    }
+
+    class RBLabelProvider implements ILabelProvider {
+
+	@Override
+	public Image getImage(Object element) {
+	    return ImageUtils.getImage(ImageUtils.IMAGE_RESOURCE_BUNDLE);
+	}
+
+	@Override
+	public String getText(Object element) {
+	    Locale l = ((Locale) element);
+	    String text = l.getDisplayName();
+	    if (text == null || text.equals(""))
+		text = "default";
+	    else
+		text += " - " + l.getLanguage() + " " + l.getCountry() + " "
+			+ l.getVariant();
+	    return text;
+	}
+
+	@Override
+	public void addListener(ILabelProviderListener listener) {
+	    // TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void dispose() {
+	    // TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public boolean isLabelProperty(Object element, String property) {
+	    // TODO Auto-generated method stub
+	    return false;
+	}
+
+	@Override
+	public void removeListener(ILabelProviderListener listener) {
+	    // TODO Auto-generated method stub
+
+	}
+
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/ResourceBundleEntrySelectionDialog.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/ResourceBundleEntrySelectionDialog.java
new file mode 100644
index 0000000..9d2895a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/ResourceBundleEntrySelectionDialog.java
@@ -0,0 +1,474 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.dialogs;
+
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Set;
+
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.widgets.ResourceSelector;
+import org.eclipse.babel.tapiji.tools.core.ui.widgets.event.ResourceSelectionEvent;
+import org.eclipse.babel.tapiji.tools.core.ui.widgets.listener.IResourceSelectionListener;
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+public class ResourceBundleEntrySelectionDialog extends TitleAreaDialog {
+
+    private static int WIDTH_LEFT_COLUMN = 100;
+    private static int SEARCH_FULLTEXT = 0;
+    private static int SEARCH_KEY = 1;
+
+    private String projectName;
+    private String bundleName;
+
+    private int searchOption = SEARCH_FULLTEXT;
+    private String resourceBundle = "";
+
+    private Combo cmbRB;
+
+    private Button btSearchText;
+    private Button btSearchKey;
+    private Combo cmbLanguage;
+    private ResourceSelector resourceSelector;
+    private Text txtPreviewText;
+
+    private Button okButton;
+    private Button cancelButton;
+
+    /*** DIALOG MODEL ***/
+    private String selectedRB = "";
+    private String preselectedRB = "";
+    private Locale selectedLocale = null;
+    private String selectedKey = "";
+
+    public ResourceBundleEntrySelectionDialog(Shell parentShell) {
+	super(parentShell);
+    }
+
+    @Override
+    protected Control createDialogArea(Composite parent) {
+	Composite dialogArea = (Composite) super.createDialogArea(parent);
+	initLayout(dialogArea);
+	constructSearchSection(dialogArea);
+	initContent();
+	return dialogArea;
+    }
+
+    protected void initContent() {
+	// init available resource bundles
+	cmbRB.removeAll();
+	int i = 0;
+	for (String bundle : ResourceBundleManager.getManager(projectName)
+		.getResourceBundleNames()) {
+	    cmbRB.add(bundle);
+	    if (bundle.equals(preselectedRB)) {
+		cmbRB.select(i);
+		cmbRB.setEnabled(false);
+	    }
+	    i++;
+	}
+
+	if (ResourceBundleManager.getManager(projectName)
+		.getResourceBundleNames().size() > 0) {
+	    if (preselectedRB.trim().length() == 0) {
+		cmbRB.select(0);
+		cmbRB.setEnabled(true);
+	    }
+	}
+
+	cmbRB.addSelectionListener(new SelectionListener() {
+
+	    @Override
+	    public void widgetSelected(SelectionEvent e) {
+		// updateAvailableLanguages();
+		updateResourceSelector();
+	    }
+
+	    @Override
+	    public void widgetDefaultSelected(SelectionEvent e) {
+		// updateAvailableLanguages();
+		updateResourceSelector();
+	    }
+	});
+
+	// init available translations
+	// updateAvailableLanguages();
+
+	// init resource selector
+	updateResourceSelector();
+
+	// update search options
+	updateSearchOptions();
+    }
+
+    protected void updateResourceSelector() {
+	resourceBundle = cmbRB.getText();
+	resourceSelector.setResourceBundle(resourceBundle);
+    }
+
+    protected void updateSearchOptions() {
+	searchOption = (btSearchKey.getSelection() ? SEARCH_KEY
+		: SEARCH_FULLTEXT);
+	// cmbLanguage.setEnabled(searchOption == SEARCH_FULLTEXT);
+	// lblLanguage.setEnabled(cmbLanguage.getEnabled());
+
+	// update ResourceSelector
+	resourceSelector
+		.setDisplayMode(searchOption == SEARCH_FULLTEXT ? ResourceSelector.DISPLAY_TEXT
+			: ResourceSelector.DISPLAY_KEYS);
+    }
+
+    protected void updateAvailableLanguages() {
+	cmbLanguage.removeAll();
+	String selectedBundle = cmbRB.getText();
+
+	if (selectedBundle.trim().equals(""))
+	    return;
+
+	// Retrieve available locales for the selected resource-bundle
+	Set<Locale> locales = ResourceBundleManager.getManager(projectName)
+		.getProvidedLocales(selectedBundle);
+	for (Locale l : locales) {
+	    String displayName = l.getDisplayName();
+	    if (displayName.equals(""))
+		displayName = ResourceBundleManager.defaultLocaleTag;
+	    cmbLanguage.add(displayName);
+	}
+
+	// if (locales.size() > 0) {
+	// cmbLanguage.select(0);
+	updateSelectedLocale();
+	// }
+    }
+
+    protected void updateSelectedLocale() {
+	String selectedBundle = cmbRB.getText();
+
+	if (selectedBundle.trim().equals(""))
+	    return;
+
+	Set<Locale> locales = ResourceBundleManager.getManager(projectName)
+		.getProvidedLocales(selectedBundle);
+	Iterator<Locale> it = locales.iterator();
+	String selectedLocale = cmbLanguage.getText();
+	while (it.hasNext()) {
+	    Locale l = it.next();
+	    if (l.getDisplayName().equals(selectedLocale)) {
+		resourceSelector.setDisplayLocale(l);
+		break;
+	    }
+	}
+    }
+
+    protected void initLayout(Composite parent) {
+	final GridLayout layout = new GridLayout(1, true);
+	parent.setLayout(layout);
+    }
+
+    protected void constructSearchSection(Composite parent) {
+	final Group group = new Group(parent, SWT.NONE);
+	group.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true,
+		false, 1, 1));
+	group.setText("Resource selection");
+
+	// define grid data for this group
+	GridData gridData = new GridData();
+	gridData.horizontalAlignment = SWT.FILL;
+	gridData.grabExcessHorizontalSpace = true;
+	group.setLayoutData(gridData);
+	group.setLayout(new GridLayout(2, false));
+	// TODO export as help text
+
+	final Label spacer = new Label(group, SWT.NONE | SWT.LEFT);
+	spacer.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER,
+		false, false, 1, 1));
+
+	final Label infoLabel = new Label(group, SWT.NONE | SWT.LEFT);
+	GridData infoGrid = new GridData(GridData.BEGINNING,
+		GridData.BEGINNING, false, false, 1, 1);
+	infoGrid.heightHint = 70;
+	infoLabel.setLayoutData(infoGrid);
+	infoLabel
+		.setText("Select the resource that needs to be refrenced. This is accomplished in two\n"
+			+ "steps. First select the Resource-Bundle in which the resource is located. \n"
+			+ "In a last step you need to choose a particular resource.");
+
+	// Resource-Bundle
+	final Label lblRB = new Label(group, SWT.NONE);
+	lblRB.setLayoutData(new GridData(GridData.END, GridData.CENTER, false,
+		false, 1, 1));
+	lblRB.setText("Resource-Bundle:");
+
+	cmbRB = new Combo(group, SWT.DROP_DOWN | SWT.SIMPLE);
+	cmbRB.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true,
+		false, 1, 1));
+	cmbRB.addModifyListener(new ModifyListener() {
+	    @Override
+	    public void modifyText(ModifyEvent e) {
+		selectedRB = cmbRB.getText();
+		validate();
+	    }
+	});
+
+	// Search-Options
+	final Label spacer2 = new Label(group, SWT.NONE | SWT.LEFT);
+	spacer2.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER,
+		false, false, 1, 1));
+
+	Composite searchOptions = new Composite(group, SWT.NONE);
+	searchOptions.setLayout(new GridLayout(2, true));
+
+	btSearchText = new Button(searchOptions, SWT.RADIO);
+	btSearchText.setText("Flat");
+	btSearchText.setSelection(searchOption == SEARCH_FULLTEXT);
+	btSearchText.addSelectionListener(new SelectionListener() {
+
+	    @Override
+	    public void widgetSelected(SelectionEvent e) {
+		updateSearchOptions();
+	    }
+
+	    @Override
+	    public void widgetDefaultSelected(SelectionEvent e) {
+		updateSearchOptions();
+	    }
+	});
+
+	btSearchKey = new Button(searchOptions, SWT.RADIO);
+	btSearchKey.setText("Hierarchical");
+	btSearchKey.setSelection(searchOption == SEARCH_KEY);
+	btSearchKey.addSelectionListener(new SelectionListener() {
+
+	    @Override
+	    public void widgetSelected(SelectionEvent e) {
+		updateSearchOptions();
+	    }
+
+	    @Override
+	    public void widgetDefaultSelected(SelectionEvent e) {
+		updateSearchOptions();
+	    }
+	});
+
+	// Sprache
+	// lblLanguage = new Label (group, SWT.NONE);
+	// lblLanguage.setLayoutData(new GridData(GridData.END, GridData.CENTER,
+	// false, false, 1, 1));
+	// lblLanguage.setText("Language (Country):");
+	//
+	// cmbLanguage = new Combo (group, SWT.DROP_DOWN | SWT.SIMPLE);
+	// cmbLanguage.setLayoutData(new GridData(GridData.FILL,
+	// GridData.CENTER, true, false, 1, 1));
+	// cmbLanguage.addSelectionListener(new SelectionListener () {
+	//
+	// @Override
+	// public void widgetDefaultSelected(SelectionEvent e) {
+	// updateSelectedLocale();
+	// }
+	//
+	// @Override
+	// public void widgetSelected(SelectionEvent e) {
+	// updateSelectedLocale();
+	// }
+	//
+	// });
+	// cmbLanguage.addModifyListener(new ModifyListener() {
+	// @Override
+	// public void modifyText(ModifyEvent e) {
+	// selectedLocale =
+	// LocaleUtils.getLocaleByDisplayName(manager.getProvidedLocales(selectedRB),
+	// cmbLanguage.getText());
+	// validate();
+	// }
+	// });
+
+	// Filter
+	// final Label lblKey = new Label (group, SWT.NONE | SWT.RIGHT);
+	// GridData lblKeyGrid = new GridData(GridData.END, GridData.CENTER,
+	// false, false, 1, 1);
+	// lblKeyGrid.widthHint = WIDTH_LEFT_COLUMN;
+	// lblKey.setLayoutData(lblKeyGrid);
+	// lblKey.setText("Filter:");
+	//
+	// txtKey = new Text (group, SWT.BORDER);
+	// txtKey.setLayoutData(new GridData(GridData.FILL, GridData.CENTER,
+	// true, false, 1, 1));
+
+	// Add selector for property keys
+	final Label lblKeys = new Label(group, SWT.NONE);
+	lblKeys.setLayoutData(new GridData(GridData.END, GridData.BEGINNING,
+		false, false, 1, 1));
+	lblKeys.setText("Resource:");
+
+	resourceSelector = new ResourceSelector(group, SWT.NONE);
+
+	resourceSelector.setProjectName(projectName);
+	resourceSelector.setResourceBundle(cmbRB.getText());
+	resourceSelector.setDisplayMode(searchOption);
+
+	GridData resourceSelectionData = new GridData(GridData.FILL,
+		GridData.CENTER, true, false, 1, 1);
+	resourceSelectionData.heightHint = 150;
+	resourceSelectionData.widthHint = 400;
+	resourceSelector.setLayoutData(resourceSelectionData);
+	resourceSelector
+		.addSelectionChangedListener(new IResourceSelectionListener() {
+
+		    @Override
+		    public void selectionChanged(ResourceSelectionEvent e) {
+			selectedKey = e.getSelectedKey();
+			updatePreviewLabel(e.getSelectionSummary());
+			validate();
+		    }
+		});
+
+	// final Label spacer = new Label (group, SWT.SEPARATOR |
+	// SWT.HORIZONTAL);
+	// spacer.setLayoutData(new GridData(GridData.BEGINNING,
+	// GridData.CENTER, true, false, 2, 1));
+
+	// Preview
+	final Label lblText = new Label(group, SWT.NONE | SWT.RIGHT);
+	GridData lblTextGrid = new GridData(GridData.END, GridData.CENTER,
+		false, false, 1, 1);
+	lblTextGrid.heightHint = 120;
+	lblTextGrid.widthHint = 100;
+	lblText.setLayoutData(lblTextGrid);
+	lblText.setText("Preview:");
+
+	txtPreviewText = new Text(group, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
+	txtPreviewText.setEditable(false);
+	GridData lblTextGrid2 = new GridData(GridData.FILL, GridData.FILL,
+		true, true, 1, 1);
+	txtPreviewText.setLayoutData(lblTextGrid2);
+    }
+
+    @Override
+    protected void configureShell(Shell newShell) {
+	super.configureShell(newShell);
+	newShell.setText("Select Resource-Bundle entry");
+    }
+
+    @Override
+    public void create() {
+	// TODO Auto-generated method stub
+	super.create();
+	this.setTitle("Select a Resource-Bundle entry");
+	this.setMessage("Please, select a resource of a particular Resource-Bundle");
+    }
+
+    protected void updatePreviewLabel(String previewText) {
+	txtPreviewText.setText(previewText);
+    }
+
+    protected void validate() {
+	// Check Resource-Bundle ids
+	boolean rbValid = false;
+	boolean localeValid = false;
+	boolean keyValid = false;
+
+	for (String rbId : ResourceBundleManager.getManager(projectName)
+		.getResourceBundleNames()) {
+	    if (rbId.equals(selectedRB)) {
+		rbValid = true;
+		break;
+	    }
+	}
+
+	if (selectedLocale != null)
+	    localeValid = true;
+
+	if (ResourceBundleManager.getManager(projectName).isResourceExisting(
+		selectedRB, selectedKey))
+	    keyValid = true;
+
+	// print Validation summary
+	String errorMessage = null;
+	if (!rbValid)
+	    errorMessage = "The specified Resource-Bundle does not exist";
+	// else if (! localeValid)
+	// errorMessage =
+	// "The specified Locale does not exist for the selecte Resource-Bundle";
+	else if (!keyValid)
+	    errorMessage = "No resource selected";
+	else {
+	    if (okButton != null)
+		okButton.setEnabled(true);
+	}
+
+	setErrorMessage(errorMessage);
+	if (okButton != null && errorMessage != null)
+	    okButton.setEnabled(false);
+    }
+
+    @Override
+    protected void createButtonsForButtonBar(Composite parent) {
+	okButton = createButton(parent, OK, "Ok", true);
+	okButton.addSelectionListener(new SelectionAdapter() {
+	    public void widgetSelected(SelectionEvent e) {
+		// Set return code
+		setReturnCode(OK);
+		close();
+	    }
+	});
+
+	cancelButton = createButton(parent, CANCEL, "Cancel", false);
+	cancelButton.addSelectionListener(new SelectionAdapter() {
+	    public void widgetSelected(SelectionEvent e) {
+		setReturnCode(CANCEL);
+		close();
+	    }
+	});
+
+	okButton.setEnabled(false);
+	cancelButton.setEnabled(true);
+    }
+
+    public String getSelectedResourceBundle() {
+	return selectedRB;
+    }
+
+    public String getSelectedResource() {
+	return selectedKey;
+    }
+
+    public Locale getSelectedLocale() {
+	return selectedLocale;
+    }
+
+    public void setProjectName(String projectName) {
+	this.projectName = projectName;
+    }
+
+    public void setBundleName(String bundleName) {
+	this.bundleName = bundleName;
+
+	if (preselectedRB.isEmpty()) {
+	    preselectedRB = this.bundleName;
+	}
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/ResourceBundleSelectionDialog.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/ResourceBundleSelectionDialog.java
new file mode 100644
index 0000000..de01395
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/dialogs/ResourceBundleSelectionDialog.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer, Matthias Lettmayer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ *     Matthias Lettmayer - adapt setInput, so only existing RB get displayed (fixed issue 40)
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.dialogs;
+
+import java.util.List;
+
+import org.eclipse.babel.core.message.manager.RBManager;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.ImageUtils;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.ListDialog;
+
+public class ResourceBundleSelectionDialog extends ListDialog {
+
+    private IProject project;
+
+    public ResourceBundleSelectionDialog(Shell parent, IProject project) {
+	super(parent);
+	this.project = project;
+
+	initDialog();
+    }
+
+    protected void initDialog() {
+	this.setAddCancelButton(true);
+	this.setMessage("Select one of the following Resource-Bundle to open:");
+	this.setTitle("Resource-Bundle Selector");
+	this.setContentProvider(new RBContentProvider());
+	this.setLabelProvider(new RBLabelProvider());
+	this.setBlockOnOpen(true);
+
+	if (project != null)
+	    this.setInput(RBManager.getInstance(project)
+		    .getMessagesBundleGroupNames());
+	else
+	    this.setInput(RBManager.getAllMessagesBundleGroupNames());
+    }
+
+    public String getSelectedBundleId() {
+	Object[] selection = this.getResult();
+	if (selection != null && selection.length > 0)
+	    return (String) selection[0];
+	return null;
+    }
+
+    class RBContentProvider implements IStructuredContentProvider {
+
+	@Override
+	public Object[] getElements(Object inputElement) {
+	    List<String> resources = (List<String>) inputElement;
+	    return resources.toArray();
+	}
+
+	@Override
+	public void dispose() {
+	    // TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+	    // TODO Auto-generated method stub
+
+	}
+
+    }
+
+    class RBLabelProvider implements ILabelProvider {
+
+	@Override
+	public Image getImage(Object element) {
+	    // TODO Auto-generated method stub
+	    return ImageUtils.getImage(ImageUtils.IMAGE_RESOURCE_BUNDLE);
+	}
+
+	@Override
+	public String getText(Object element) {
+	    // TODO Auto-generated method stub
+	    return ((String) element);
+	}
+
+	@Override
+	public void addListener(ILabelProviderListener listener) {
+	    // TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void dispose() {
+	    // TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public boolean isLabelProperty(Object element, String property) {
+	    // TODO Auto-generated method stub
+	    return false;
+	}
+
+	@Override
+	public void removeListener(ILabelProviderListener listener) {
+	    // TODO Auto-generated method stub
+
+	}
+
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/extensions/I18nAuditor.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/extensions/I18nAuditor.java
new file mode 100644
index 0000000..61b9615
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/extensions/I18nAuditor.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.extensions;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.ui.IMarkerResolution;
+
+public abstract class I18nAuditor {
+
+    /**
+     * Audits a project resource for I18N problems. This method is triggered
+     * during the project's build process.
+     * 
+     * @param resource
+     *            The project resource
+     */
+    public abstract void audit(IResource resource);
+
+    /**
+     * Returns a characterizing identifier of the implemented auditing
+     * functionality. The specified identifier is used for discriminating
+     * registered builder extensions.
+     * 
+     * @return The String id of the implemented auditing functionality
+     */
+    public abstract String getContextId();
+
+    /**
+     * Returns a list of supported file endings.
+     * 
+     * @return The supported file endings
+     */
+    public abstract String[] getFileEndings();
+
+    /**
+     * Returns a list of quick fixes of a reported Internationalization problem.
+     * 
+     * @param marker
+     *            The warning marker of the Internationalization problem
+     * @param cause
+     *            The problem type
+     * @return The list of marker resolution proposals
+     */
+    public abstract List<IMarkerResolution> getMarkerResolutions(IMarker marker);
+
+    /**
+     * Checks if the provided resource auditor is responsible for a particular
+     * resource.
+     * 
+     * @param resource
+     *            The resource reference
+     * @return True if the resource auditor is responsible for the referenced
+     *         resource
+     */
+    public boolean isResourceOfType(IResource resource) {
+	for (String ending : getFileEndings()) {
+	    if (resource.getFileExtension().equalsIgnoreCase(ending))
+		return true;
+	}
+	return false;
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/extensions/I18nRBAuditor.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/extensions/I18nRBAuditor.java
new file mode 100644
index 0000000..eb10382
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/extensions/I18nRBAuditor.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.extensions;
+
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.babel.tapiji.tools.core.extensions.ILocation;
+
+/**
+ * 
+ * 
+ */
+public abstract class I18nRBAuditor extends I18nAuditor {
+
+    /**
+     * Mark the end of a audit and reset all problemlists
+     */
+    public abstract void resetProblems();
+
+    /**
+     * Returns the list of missing keys or no specified Resource-Bundle-key
+     * refernces. Each list entry describes the textual position on which this
+     * type of error has been detected.
+     * 
+     * @return The list of positions of no specified RB-key refernces
+     */
+    public abstract List<ILocation> getUnspecifiedKeyReferences();
+
+    /**
+     * Returns the list of same Resource-Bundle-value refernces. Each list entry
+     * describes the textual position on which this type of error has been
+     * detected.
+     * 
+     * @return The list of positions of same RB-value refernces
+     */
+    public abstract Map<ILocation, ILocation> getSameValuesReferences();
+
+    /**
+     * Returns the list of missing Resource-Bundle-languages compared with the
+     * Resource-Bundles of the hole project. Each list entry describes the
+     * textual position on which this type of error has been detected.
+     * 
+     * @return
+     */
+    public abstract List<ILocation> getMissingLanguageReferences();
+
+    // public abstract List<ILocation> getUnusedKeyReferences();
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/extensions/I18nResourceAuditor.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/extensions/I18nResourceAuditor.java
new file mode 100644
index 0000000..ac69fc0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/extensions/I18nResourceAuditor.java
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.extensions;
+
+import java.util.List;
+
+import org.eclipse.babel.tapiji.tools.core.extensions.ILocation;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.ui.IMarkerResolution;
+
+/**
+ * Auditor class for finding I18N problems within source code resources. The
+ * objects audit method is called for a particular resource. Found errors are
+ * stored within the object's internal data structure and can be queried with
+ * the help of problem categorized getter methods.
+ */
+public abstract class I18nResourceAuditor extends I18nAuditor {
+    /**
+     * Audits a project resource for I18N problems. This method is triggered
+     * during the project's build process.
+     * 
+     * @param resource
+     *            The project resource
+     */
+    public abstract void audit(IResource resource);
+
+    /**
+     * Returns a list of supported file endings.
+     * 
+     * @return The supported file endings
+     */
+    public abstract String[] getFileEndings();
+
+    /**
+     * Returns the list of found need-to-translate string literals. Each list
+     * entry describes the textual position on which this type of error has been
+     * detected.
+     * 
+     * @return The list of need-to-translate string literal positions
+     */
+    public abstract List<ILocation> getConstantStringLiterals();
+
+    /**
+     * Returns the list of broken Resource-Bundle references. Each list entry
+     * describes the textual position on which this type of error has been
+     * detected.
+     * 
+     * @return The list of positions of broken Resource-Bundle references
+     */
+    public abstract List<ILocation> getBrokenResourceReferences();
+
+    /**
+     * Returns the list of broken references to Resource-Bundle entries. Each
+     * list entry describes the textual position on which this type of error has
+     * been detected
+     * 
+     * @return The list of positions of broken references to locale-sensitive
+     *         resources
+     */
+    public abstract List<ILocation> getBrokenBundleReferences();
+
+    /**
+     * Returns a characterizing identifier of the implemented auditing
+     * functionality. The specified identifier is used for discriminating
+     * registered builder extensions.
+     * 
+     * @return The String id of the implemented auditing functionality
+     */
+    public abstract String getContextId();
+
+    /**
+     * Returns a list of quick fixes of a reported Internationalization problem.
+     * 
+     * @param marker
+     *            The warning marker of the Internationalization problem
+     * @param cause
+     *            The problem type
+     * @return The list of marker resolution proposals
+     */
+    public abstract List<IMarkerResolution> getMarkerResolutions(IMarker marker);
+
+    /**
+     * Checks if the provided resource auditor is responsible for a particular
+     * resource.
+     * 
+     * @param resource
+     *            The resource reference
+     * @return True if the resource auditor is responsible for the referenced
+     *         resource
+     */
+    public boolean isResourceOfType(IResource resource) {
+	for (String ending : getFileEndings()) {
+	    if (resource.getFileExtension().equalsIgnoreCase(ending))
+		return true;
+	}
+	return false;
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/filters/PropertiesFileFilter.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/filters/PropertiesFileFilter.java
new file mode 100644
index 0000000..d79d4be
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/filters/PropertiesFileFilter.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.filters;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+
+public class PropertiesFileFilter extends ViewerFilter {
+
+    private boolean debugEnabled = true;
+
+    public PropertiesFileFilter() {
+
+    }
+
+    @Override
+    public boolean select(Viewer viewer, Object parentElement, Object element) {
+	if (debugEnabled)
+	    return true;
+
+	if (element.getClass().getSimpleName().equals("CompilationUnit"))
+	    return false;
+
+	if (!(element instanceof IFile))
+	    return true;
+
+	IFile file = (IFile) element;
+
+	return file.getFileExtension().equalsIgnoreCase("properties");
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/markers/MarkerUpdater.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/markers/MarkerUpdater.java
new file mode 100644
index 0000000..6c6ec3f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/markers/MarkerUpdater.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Matthias Lettmayer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Matthias Lettmayer - created a marker updater, which updates it's position (fixes Issue 8)
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.markers;
+
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.Position;
+import org.eclipse.ui.texteditor.IMarkerUpdater;
+
+public class MarkerUpdater implements IMarkerUpdater {
+
+    @Override
+    public String getMarkerType() {
+	return "org.eclipse.core.resources.problemmarker";
+    }
+
+    @Override
+    public String[] getAttribute() {
+	// TODO Auto-generated method stub
+	return null;
+    }
+
+    @Override
+    public boolean updateMarker(IMarker marker, IDocument document,
+	    Position position) {
+	try {
+	    int start = position.getOffset();
+	    int end = position.getOffset() + position.getLength();
+	    marker.setAttribute(IMarker.CHAR_START, start);
+	    marker.setAttribute(IMarker.CHAR_END, end);
+	    return true;
+	} catch (CoreException e) {
+	    Logger.logError(e);
+	    return false;
+	}
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/memento/ResourceBundleManagerStateLoader.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/memento/ResourceBundleManagerStateLoader.java
new file mode 100644
index 0000000..65b9211
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/memento/ResourceBundleManagerStateLoader.java
@@ -0,0 +1,120 @@
+/*******************************************************************************

+ * Copyright (c) 2012 Alexej Strelzow.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ * 

+ * Contributors:

+ *     Alexej Strelzow - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.babel.tapiji.tools.core.ui.memento;

+

+import java.io.FileReader;

+import java.io.FileWriter;

+import java.util.HashSet;

+import java.util.Iterator;

+import java.util.Set;

+

+import org.eclipse.babel.tapiji.tools.core.Logger;

+import org.eclipse.babel.tapiji.tools.core.model.IResourceDescriptor;

+import org.eclipse.babel.tapiji.tools.core.model.ResourceDescriptor;

+import org.eclipse.babel.tapiji.tools.core.model.manager.IStateLoader;

+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;

+import org.eclipse.babel.tapiji.tools.core.util.FileUtils;

+import org.eclipse.ui.IMemento;

+import org.eclipse.ui.XMLMemento;

+

+/**

+ * Loads the state of the {@link ResourceBundleManager}.<br>

+ * <br>

+ * 

+ * @author Alexej Strelzow

+ */

+public class ResourceBundleManagerStateLoader implements IStateLoader {

+

+    private static final String TAG_INTERNATIONALIZATION = "Internationalization";

+    private static final String TAG_EXCLUDED = "Excluded";

+    private static final String TAG_RES_DESC = "ResourceDescription";

+    private static final String TAG_RES_DESC_ABS = "AbsolutePath";

+    private static final String TAG_RES_DESC_REL = "RelativePath";

+    private static final String TAB_RES_DESC_PRO = "ProjectName";

+    private static final String TAB_RES_DESC_BID = "BundleId";

+

+    private HashSet<IResourceDescriptor> excludedResources;

+

+    /**

+     * {@inheritDoc}

+     */

+    @Override

+    public void loadState() {

+

+	excludedResources = new HashSet<IResourceDescriptor>();

+	FileReader reader = null;

+	try {

+	    reader = new FileReader(FileUtils.getRBManagerStateFile());

+	    loadManagerState(XMLMemento.createReadRoot(reader));

+	} catch (Exception e) {

+	    Logger.logError(e);

+	}

+    }

+

+    private void loadManagerState(XMLMemento memento) {

+	IMemento excludedChild = memento.getChild(TAG_EXCLUDED);

+	for (IMemento excluded : excludedChild.getChildren(TAG_RES_DESC)) {

+	    IResourceDescriptor descriptor = new ResourceDescriptor();

+	    descriptor.setAbsolutePath(excluded.getString(TAG_RES_DESC_ABS));

+	    descriptor.setRelativePath(excluded.getString(TAG_RES_DESC_REL));

+	    descriptor.setProjectName(excluded.getString(TAB_RES_DESC_PRO));

+	    descriptor.setBundleId(excluded.getString(TAB_RES_DESC_BID));

+	    excludedResources.add(descriptor);

+	}

+    }

+

+    /**

+     * {@inheritDoc}

+     */

+    @Override

+    public Set<IResourceDescriptor> getExcludedResources() {

+	return excludedResources;

+    }

+

+    /**

+     * {@inheritDoc}

+     */

+    @Override

+    public void saveState() {

+	if (excludedResources == null) {

+	    return;

+	}

+	XMLMemento memento = XMLMemento

+		.createWriteRoot(TAG_INTERNATIONALIZATION);

+	IMemento exclChild = memento.createChild(TAG_EXCLUDED);

+

+	Iterator<IResourceDescriptor> itExcl = excludedResources.iterator();

+	while (itExcl.hasNext()) {

+	    IResourceDescriptor desc = itExcl.next();

+	    IMemento resDesc = exclChild.createChild(TAG_RES_DESC);

+	    resDesc.putString(TAB_RES_DESC_PRO, desc.getProjectName());

+	    resDesc.putString(TAG_RES_DESC_ABS, desc.getAbsolutePath());

+	    resDesc.putString(TAG_RES_DESC_REL, desc.getRelativePath());

+	    resDesc.putString(TAB_RES_DESC_BID, desc.getBundleId());

+	}

+	FileWriter writer = null;

+	try {

+	    writer = new FileWriter(FileUtils.getRBManagerStateFile());

+	    memento.save(writer);

+	} catch (Exception e) {

+	    Logger.logError(e);

+	} finally {

+	    try {

+		if (writer != null) {

+		    writer.close();

+		}

+	    } catch (Exception e) {

+		Logger.logError(e);

+	    }

+	}

+    }

+

+}

diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/menus/InternationalizationMenu.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/menus/InternationalizationMenu.java
new file mode 100644
index 0000000..64053b4
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/menus/InternationalizationMenu.java
@@ -0,0 +1,433 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.menus;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.builder.InternationalizationNature;
+import org.eclipse.babel.tapiji.tools.core.ui.dialogs.AddLanguageDialoge;
+import org.eclipse.babel.tapiji.tools.core.ui.dialogs.FragmentProjectSelectionDialog;
+import org.eclipse.babel.tapiji.tools.core.ui.dialogs.GenerateBundleAccessorDialog;
+import org.eclipse.babel.tapiji.tools.core.ui.dialogs.RemoveLanguageDialoge;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.LanguageUtils;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.RBFileUtils;
+import org.eclipse.babel.tapiji.tools.core.util.FragmentProjectUtils;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jface.action.ContributionItem;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.swt.events.MenuAdapter;
+import org.eclipse.swt.events.MenuEvent;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.progress.IProgressService;
+
+public class InternationalizationMenu extends ContributionItem {
+    private boolean excludeMode = true;
+    private boolean internationalizationEnabled = false;
+
+    private MenuItem mnuToggleInt;
+    private MenuItem excludeResource;
+    private MenuItem addLanguage;
+    private MenuItem removeLanguage;
+
+    public InternationalizationMenu() {
+    }
+
+    public InternationalizationMenu(String id) {
+	super(id);
+    }
+
+    @Override
+    public void fill(Menu menu, int index) {
+	if (getSelectedProjects().size() == 0 || !projectsSupported()) {
+	    return;
+	}
+
+	// Toggle Internatinalization
+	mnuToggleInt = new MenuItem(menu, SWT.PUSH);
+	mnuToggleInt.addSelectionListener(new SelectionAdapter() {
+
+	    @Override
+	    public void widgetSelected(SelectionEvent e) {
+		runToggleInt();
+	    }
+
+	});
+
+	// Exclude Resource
+	excludeResource = new MenuItem(menu, SWT.PUSH);
+	excludeResource.addSelectionListener(new SelectionAdapter() {
+
+	    @Override
+	    public void widgetSelected(SelectionEvent e) {
+		runExclude();
+	    }
+
+	});
+
+	new MenuItem(menu, SWT.SEPARATOR);
+
+	// Add Language
+	addLanguage = new MenuItem(menu, SWT.PUSH);
+	addLanguage.addSelectionListener(new SelectionAdapter() {
+
+	    @Override
+	    public void widgetSelected(SelectionEvent e) {
+		runAddLanguage();
+	    }
+
+	});
+
+	// Remove Language
+	removeLanguage = new MenuItem(menu, SWT.PUSH);
+	removeLanguage.addSelectionListener(new SelectionAdapter() {
+
+	    @Override
+	    public void widgetSelected(SelectionEvent e) {
+		runRemoveLanguage();
+	    }
+
+	});
+
+	menu.addMenuListener(new MenuAdapter() {
+	    @Override
+	    public void menuShown(MenuEvent e) {
+		updateStateToggleInt(mnuToggleInt);
+		// updateStateGenRBAccessor (generateAccessor);
+		updateStateExclude(excludeResource);
+		updateStateAddLanguage(addLanguage);
+		updateStateRemoveLanguage(removeLanguage);
+	    }
+	});
+    }
+
+    protected void runGenRBAccessor() {
+	GenerateBundleAccessorDialog dlg = new GenerateBundleAccessorDialog(
+		Display.getDefault().getActiveShell());
+	if (dlg.open() != InputDialog.OK) {
+	    return;
+	}
+    }
+
+    protected void updateStateGenRBAccessor(MenuItem menuItem) {
+	Collection<IPackageFragment> frags = getSelectedPackageFragments();
+	menuItem.setEnabled(frags.size() > 0);
+    }
+
+    protected void updateStateToggleInt(MenuItem menuItem) {
+	Collection<IProject> projects = getSelectedProjects();
+	boolean enabled = projects.size() > 0;
+	menuItem.setEnabled(enabled);
+	setVisible(enabled);
+	internationalizationEnabled = InternationalizationNature
+		.hasNature(projects.iterator().next());
+	// menuItem.setSelection(enabled && internationalizationEnabled);
+
+	if (internationalizationEnabled) {
+	    menuItem.setText("Disable Internationalization");
+	} else {
+	    menuItem.setText("Enable Internationalization");
+	}
+    }
+
+    private Collection<IPackageFragment> getSelectedPackageFragments() {
+	Collection<IPackageFragment> frags = new HashSet<IPackageFragment>();
+	IWorkbenchWindow window = PlatformUI.getWorkbench()
+		.getActiveWorkbenchWindow();
+	ISelection selection = window.getActivePage().getSelection();
+	if (selection instanceof IStructuredSelection) {
+	    for (Iterator<?> iter = ((IStructuredSelection) selection)
+		    .iterator(); iter.hasNext();) {
+		Object elem = iter.next();
+		if (elem instanceof IPackageFragment) {
+		    IPackageFragment frag = (IPackageFragment) elem;
+		    if (!frag.isReadOnly()) {
+			frags.add(frag);
+		    }
+		}
+	    }
+	}
+	return frags;
+    }
+
+    private Collection<IProject> getSelectedProjects() {
+	Collection<IProject> projects = new HashSet<IProject>();
+	IWorkbenchWindow window = PlatformUI.getWorkbench()
+		.getActiveWorkbenchWindow();
+	ISelection selection = window.getActivePage().getSelection();
+	if (selection instanceof IStructuredSelection) {
+	    for (Iterator<?> iter = ((IStructuredSelection) selection)
+		    .iterator(); iter.hasNext();) {
+		Object elem = iter.next();
+		if (!(elem instanceof IResource)) {
+		    if (!(elem instanceof IAdaptable)) {
+			continue;
+		    }
+		    elem = ((IAdaptable) elem).getAdapter(IResource.class);
+		    if (!(elem instanceof IResource)) {
+			continue;
+		    }
+		}
+		if (!(elem instanceof IProject)) {
+		    elem = ((IResource) elem).getProject();
+		    if (!(elem instanceof IProject)) {
+			continue;
+		    }
+		}
+		if (((IProject) elem).isAccessible()) {
+		    projects.add((IProject) elem);
+		}
+
+	    }
+	}
+	return projects;
+    }
+
+    protected boolean projectsSupported() {
+	Collection<IProject> projects = getSelectedProjects();
+	for (IProject project : projects) {
+	    if (!InternationalizationNature.supportsNature(project)) {
+		return false;
+	    }
+	}
+
+	return true;
+    }
+
+    protected void runToggleInt() {
+	Collection<IProject> projects = getSelectedProjects();
+	for (IProject project : projects) {
+	    toggleNature(project);
+	}
+    }
+
+    private void toggleNature(IProject project) {
+	if (InternationalizationNature.hasNature(project)) {
+	    InternationalizationNature.removeNature(project);
+	} else {
+	    InternationalizationNature.addNature(project);
+	}
+    }
+
+    protected void updateStateExclude(MenuItem menuItem) {
+	Collection<IResource> resources = getSelectedResources();
+	menuItem.setEnabled(resources.size() > 0 && internationalizationEnabled);
+	ResourceBundleManager manager = null;
+	excludeMode = false;
+
+	for (IResource res : resources) {
+	    if (manager == null || (manager.getProject() != res.getProject())) {
+		manager = ResourceBundleManager.getManager(res.getProject());
+	    }
+	    try {
+		if (!ResourceBundleManager.isResourceExcluded(res)) {
+		    excludeMode = true;
+		}
+	    } catch (Exception e) {
+	    }
+	}
+
+	if (!excludeMode) {
+	    menuItem.setText("Include Resource");
+	} else {
+	    menuItem.setText("Exclude Resource");
+	}
+    }
+
+    private Collection<IResource> getSelectedResources() {
+	Collection<IResource> resources = new HashSet<IResource>();
+	IWorkbenchWindow window = PlatformUI.getWorkbench()
+		.getActiveWorkbenchWindow();
+	ISelection selection = window.getActivePage().getSelection();
+	if (selection instanceof IStructuredSelection) {
+	    for (Iterator<?> iter = ((IStructuredSelection) selection)
+		    .iterator(); iter.hasNext();) {
+		Object elem = iter.next();
+		if (elem instanceof IProject) {
+		    continue;
+		}
+
+		if (elem instanceof IResource) {
+		    resources.add((IResource) elem);
+		} else if (elem instanceof IJavaElement) {
+		    resources.add(((IJavaElement) elem).getResource());
+		}
+	    }
+	}
+	return resources;
+    }
+
+    protected void runExclude() {
+	final Collection<IResource> selectedResources = getSelectedResources();
+
+	IWorkbench wb = PlatformUI.getWorkbench();
+	IProgressService ps = wb.getProgressService();
+	try {
+	    ps.busyCursorWhile(new IRunnableWithProgress() {
+		@Override
+		public void run(IProgressMonitor pm) {
+
+		    ResourceBundleManager manager = null;
+		    pm.beginTask("Including resources to Internationalization",
+			    selectedResources.size());
+
+		    for (IResource res : selectedResources) {
+			if (manager == null
+				|| (manager.getProject() != res.getProject())) {
+			    manager = ResourceBundleManager.getManager(res
+				    .getProject());
+			}
+			if (excludeMode) {
+			    manager.excludeResource(res, pm);
+			} else {
+			    manager.includeResource(res, pm);
+			}
+			pm.worked(1);
+		    }
+		    pm.done();
+		}
+	    });
+	} catch (Exception e) {
+	}
+    }
+
+    protected void updateStateAddLanguage(MenuItem menuItem) {
+	Collection<IProject> projects = getSelectedProjects();
+	boolean hasResourceBundles = false;
+	for (IProject p : projects) {
+	    ResourceBundleManager rbmanager = ResourceBundleManager
+		    .getManager(p);
+	    hasResourceBundles = rbmanager.getResourceBundleIdentifiers()
+		    .size() > 0 ? true : false;
+	}
+
+	menuItem.setText("Add Language To Project");
+	menuItem.setEnabled(projects.size() > 0 && hasResourceBundles);
+    }
+
+    protected void runAddLanguage() {
+	AddLanguageDialoge dialog = new AddLanguageDialoge(new Shell(
+		Display.getCurrent()));
+	if (dialog.open() == InputDialog.OK) {
+	    final Locale locale = dialog.getSelectedLanguage();
+
+	    Collection<IProject> selectedProjects = getSelectedProjects();
+	    for (IProject project : selectedProjects) {
+		// check if project is fragmentproject and continue working with
+		// the hostproject, if host not member of selectedProjects
+		if (FragmentProjectUtils.isFragment(project)) {
+		    IProject host = FragmentProjectUtils
+			    .getFragmentHost(project);
+		    if (!selectedProjects.contains(host)) {
+			project = host;
+		    } else {
+			continue;
+		    }
+		}
+
+		List<IProject> fragments = FragmentProjectUtils
+			.getFragments(project);
+
+		if (!fragments.isEmpty()) {
+		    FragmentProjectSelectionDialog fragmentDialog = new FragmentProjectSelectionDialog(
+			    Display.getCurrent().getActiveShell(), project,
+			    fragments);
+
+		    if (fragmentDialog.open() == InputDialog.OK) {
+			project = fragmentDialog.getSelectedProject();
+		    }
+		}
+
+		final IProject selectedProject = project;
+		BusyIndicator.showWhile(Display.getCurrent(), new Runnable() {
+		    @Override
+		    public void run() {
+			LanguageUtils.addLanguageToProject(selectedProject,
+				locale);
+		    }
+
+		});
+
+	    }
+	}
+    }
+
+    protected void updateStateRemoveLanguage(MenuItem menuItem) {
+	Collection<IProject> projects = getSelectedProjects();
+	boolean hasResourceBundles = false;
+	if (projects.size() == 1) {
+	    IProject project = projects.iterator().next();
+	    ResourceBundleManager rbmanager = ResourceBundleManager
+		    .getManager(project);
+	    hasResourceBundles = rbmanager.getResourceBundleIdentifiers()
+		    .size() > 0 ? true : false;
+	}
+	menuItem.setText("Remove Language From Project");
+	menuItem.setEnabled(projects.size() == 1 && hasResourceBundles/*
+								       * && more
+								       * than
+								       * one
+								       * common
+								       * languages
+								       * contained
+								       */);
+    }
+
+    protected void runRemoveLanguage() {
+	final IProject project = getSelectedProjects().iterator().next();
+	RemoveLanguageDialoge dialog = new RemoveLanguageDialoge(project,
+		new Shell(Display.getCurrent()));
+
+	if (dialog.open() == InputDialog.OK) {
+	    final Locale locale = dialog.getSelectedLanguage();
+	    if (locale != null) {
+		if (MessageDialog.openConfirm(Display.getCurrent()
+			.getActiveShell(), "Confirm",
+			"Do you really want remove all properties-files for "
+				+ locale.getDisplayName() + "?")) {
+		    BusyIndicator.showWhile(Display.getCurrent(),
+			    new Runnable() {
+				@Override
+				public void run() {
+				    RBFileUtils.removeLanguageFromProject(
+					    project, locale);
+				}
+			    });
+		}
+
+	    }
+	}
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/preferences/BuilderPreferencePage.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/preferences/BuilderPreferencePage.java
new file mode 100644
index 0000000..d749330
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/preferences/BuilderPreferencePage.java
@@ -0,0 +1,156 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.preferences;
+
+import org.eclipse.babel.tapiji.tools.core.ui.Activator;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+public class BuilderPreferencePage extends PreferencePage implements
+	IWorkbenchPreferencePage {
+    private static final int INDENT = 20;
+
+    private Button checkSameValueButton;
+    private Button checkMissingValueButton;
+    private Button checkMissingLanguageButton;
+
+    private Button rbAuditButton;
+
+    private Button sourceAuditButton;
+
+    @Override
+    public void init(IWorkbench workbench) {
+	setPreferenceStore(Activator.getDefault().getPreferenceStore());
+    }
+
+    @Override
+    protected Control createContents(Composite parent) {
+	IPreferenceStore prefs = getPreferenceStore();
+	Composite composite = new Composite(parent, SWT.SHADOW_OUT);
+
+	composite.setLayout(new GridLayout(1, false));
+	composite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));
+
+	Composite field = createComposite(parent, 0, 10);
+	Label descriptionLabel = new Label(composite, SWT.NONE);
+	descriptionLabel.setText("Select types of reported problems:");
+
+	field = createComposite(composite, 0, 0);
+	sourceAuditButton = new Button(field, SWT.CHECK);
+	sourceAuditButton.setSelection(prefs
+		.getBoolean(TapiJIPreferences.AUDIT_RESOURCE));
+	sourceAuditButton
+		.setText("Check source code for non externalizated Strings");
+
+	field = createComposite(composite, 0, 0);
+	rbAuditButton = new Button(field, SWT.CHECK);
+	rbAuditButton
+		.setSelection(prefs.getBoolean(TapiJIPreferences.AUDIT_RB));
+	rbAuditButton
+		.setText("Check ResourceBundles on the following problems:");
+	rbAuditButton.addSelectionListener(new SelectionAdapter() {
+	    @Override
+	    public void widgetSelected(SelectionEvent event) {
+		setRBAudits();
+	    }
+	});
+
+	field = createComposite(composite, INDENT, 0);
+	checkMissingValueButton = new Button(field, SWT.CHECK);
+	checkMissingValueButton.setSelection(prefs
+		.getBoolean(TapiJIPreferences.AUDIT_UNSPEZIFIED_KEY));
+	checkMissingValueButton.setText("Missing translation for a key");
+
+	field = createComposite(composite, INDENT, 0);
+	checkSameValueButton = new Button(field, SWT.CHECK);
+	checkSameValueButton.setSelection(prefs
+		.getBoolean(TapiJIPreferences.AUDIT_SAME_VALUE));
+	checkSameValueButton
+		.setText("Same translations for one key in diffrent languages");
+
+	field = createComposite(composite, INDENT, 0);
+	checkMissingLanguageButton = new Button(field, SWT.CHECK);
+	checkMissingLanguageButton.setSelection(prefs
+		.getBoolean(TapiJIPreferences.AUDIT_MISSING_LANGUAGE));
+	checkMissingLanguageButton
+		.setText("Missing languages in a ResourceBundle");
+
+	setRBAudits();
+
+	composite.pack();
+
+	return composite;
+    }
+
+    @Override
+    protected void performDefaults() {
+	IPreferenceStore prefs = getPreferenceStore();
+
+	sourceAuditButton.setSelection(prefs
+		.getDefaultBoolean(TapiJIPreferences.AUDIT_RESOURCE));
+	rbAuditButton.setSelection(prefs
+		.getDefaultBoolean(TapiJIPreferences.AUDIT_RB));
+	checkMissingValueButton.setSelection(prefs
+		.getDefaultBoolean(TapiJIPreferences.AUDIT_UNSPEZIFIED_KEY));
+	checkSameValueButton.setSelection(prefs
+		.getDefaultBoolean(TapiJIPreferences.AUDIT_SAME_VALUE));
+	checkMissingLanguageButton.setSelection(prefs
+		.getDefaultBoolean(TapiJIPreferences.AUDIT_MISSING_LANGUAGE));
+    }
+
+    @Override
+    public boolean performOk() {
+	IPreferenceStore prefs = getPreferenceStore();
+
+	prefs.setValue(TapiJIPreferences.AUDIT_RESOURCE,
+		sourceAuditButton.getSelection());
+	prefs.setValue(TapiJIPreferences.AUDIT_RB, rbAuditButton.getSelection());
+	prefs.setValue(TapiJIPreferences.AUDIT_UNSPEZIFIED_KEY,
+		checkMissingValueButton.getSelection());
+	prefs.setValue(TapiJIPreferences.AUDIT_SAME_VALUE,
+		checkSameValueButton.getSelection());
+	prefs.setValue(TapiJIPreferences.AUDIT_MISSING_LANGUAGE,
+		checkMissingLanguageButton.getSelection());
+
+	return super.performOk();
+    }
+
+    private Composite createComposite(Composite parent, int marginWidth,
+	    int marginHeight) {
+	Composite composite = new Composite(parent, SWT.NONE);
+
+	GridLayout indentLayout = new GridLayout(1, false);
+	indentLayout.marginWidth = marginWidth;
+	indentLayout.marginHeight = marginHeight;
+	indentLayout.verticalSpacing = 0;
+	composite.setLayout(indentLayout);
+
+	return composite;
+    }
+
+    protected void setRBAudits() {
+	boolean selected = rbAuditButton.getSelection();
+	checkMissingValueButton.setEnabled(selected);
+	checkSameValueButton.setEnabled(selected);
+	checkMissingLanguageButton.setEnabled(selected);
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/preferences/CheckItem.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/preferences/CheckItem.java
new file mode 100644
index 0000000..541f804
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/preferences/CheckItem.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer, Alexej Strelzow.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ *     Alexej Strelzow - moved SWT code to FilePreferencePage
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.preferences;
+
+public class CheckItem {
+    boolean checked;
+    String name;
+
+    public CheckItem(String item, boolean checked) {
+	this.name = item;
+	this.checked = checked;
+    }
+
+    public String getName() {
+	return name;
+    }
+
+    public boolean getChecked() {
+	return checked;
+    }
+
+    public boolean equals(CheckItem item) {
+	return name.equals(item.getName());
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/preferences/FilePreferencePage.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/preferences/FilePreferencePage.java
new file mode 100644
index 0000000..aa382f1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/preferences/FilePreferencePage.java
@@ -0,0 +1,227 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.preferences;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.babel.tapiji.tools.core.ui.Activator;
+import org.eclipse.babel.tapiji.tools.core.ui.dialogs.CreatePatternDialoge;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+public class FilePreferencePage extends PreferencePage implements
+	IWorkbenchPreferencePage {
+
+    private Table table;
+    protected Object dialoge;
+
+    private Button editPatternButton;
+    private Button removePatternButton;
+
+    @Override
+    public void init(IWorkbench workbench) {
+	setPreferenceStore(Activator.getDefault().getPreferenceStore());
+    }
+
+    @Override
+    protected Control createContents(Composite parent) {
+	IPreferenceStore prefs = getPreferenceStore();
+	Composite composite = new Composite(parent, SWT.SHADOW_OUT);
+
+	composite.setLayout(new GridLayout(2, false));
+	composite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));
+
+	Label descriptionLabel = new Label(composite, SWT.WRAP);
+	GridData descriptionData = new GridData(SWT.FILL, SWT.TOP, false, false);
+	descriptionData.horizontalSpan = 2;
+	descriptionLabel.setLayoutData(descriptionData);
+	descriptionLabel
+		.setText("Properties-files which match the following pattern, will not be interpreted as ResourceBundle-files");
+
+	table = new Table(composite, SWT.SINGLE | SWT.BORDER
+		| SWT.FULL_SELECTION | SWT.CHECK);
+	GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+	table.setLayoutData(data);
+
+	table.addSelectionListener(new SelectionListener() {
+	    @Override
+	    public void widgetSelected(SelectionEvent e) {
+		TableItem[] selection = table.getSelection();
+		if (selection.length > 0) {
+		    editPatternButton.setEnabled(true);
+		    removePatternButton.setEnabled(true);
+		} else {
+		    editPatternButton.setEnabled(false);
+		    removePatternButton.setEnabled(false);
+		}
+	    }
+
+	    @Override
+	    public void widgetDefaultSelected(SelectionEvent e) {
+		// TODO Auto-generated method stub
+	    }
+	});
+
+	List<CheckItem> patternItems = TapiJIPreferences
+		.getNonRbPatternAsList();
+	for (CheckItem s : patternItems) {
+	    toTableItem(table, s);
+	}
+
+	Composite sitebar = new Composite(composite, SWT.NONE);
+	sitebar.setLayout(new GridLayout(1, false));
+	sitebar.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, true));
+
+	Button addPatternButton = new Button(sitebar, SWT.NONE);
+	addPatternButton.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true,
+		true));
+	addPatternButton.setText("Add Pattern");
+	addPatternButton.addMouseListener(new MouseListener() {
+	    @Override
+	    public void mouseUp(MouseEvent e) {
+		// TODO Auto-generated method stub
+	    }
+
+	    @Override
+	    public void mouseDown(MouseEvent e) {
+		String pattern = "^.*/<BASENAME>"
+			+ "((_[a-z]{2,3})|(_[a-z]{2,3}_[A-Z]{2})|(_[a-z]{2,3}_[A-Z]{2}_\\w*))?"
+			+ "\\.properties$";
+		CreatePatternDialoge dialog = new CreatePatternDialoge(Display
+			.getDefault().getActiveShell(), pattern);
+		if (dialog.open() == InputDialog.OK) {
+		    pattern = dialog.getPattern();
+
+		    TableItem item = new TableItem(table, SWT.NONE);
+		    item.setText(pattern);
+		    item.setChecked(true);
+		}
+	    }
+
+	    @Override
+	    public void mouseDoubleClick(MouseEvent e) {
+		// TODO Auto-generated method stub
+	    }
+	});
+
+	editPatternButton = new Button(sitebar, SWT.NONE);
+	editPatternButton.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true,
+		true));
+	editPatternButton.setText("Edit");
+	editPatternButton.addMouseListener(new MouseListener() {
+	    @Override
+	    public void mouseUp(MouseEvent e) {
+		// TODO Auto-generated method stub
+	    }
+
+	    @Override
+	    public void mouseDown(MouseEvent e) {
+		TableItem[] selection = table.getSelection();
+		if (selection.length > 0) {
+		    String pattern = selection[0].getText();
+
+		    CreatePatternDialoge dialog = new CreatePatternDialoge(
+			    Display.getDefault().getActiveShell(), pattern);
+		    if (dialog.open() == InputDialog.OK) {
+			pattern = dialog.getPattern();
+			TableItem item = selection[0];
+			item.setText(pattern);
+		    }
+		}
+	    }
+
+	    @Override
+	    public void mouseDoubleClick(MouseEvent e) {
+		// TODO Auto-generated method stub
+	    }
+	});
+
+	removePatternButton = new Button(sitebar, SWT.NONE);
+	removePatternButton.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true,
+		true));
+	removePatternButton.setText("Remove");
+	removePatternButton.addMouseListener(new MouseListener() {
+	    @Override
+	    public void mouseUp(MouseEvent e) {
+		// TODO Auto-generated method stub
+	    }
+
+	    @Override
+	    public void mouseDown(MouseEvent e) {
+		TableItem[] selection = table.getSelection();
+		if (selection.length > 0) {
+		    table.remove(table.indexOf(selection[0]));
+		}
+	    }
+
+	    @Override
+	    public void mouseDoubleClick(MouseEvent e) {
+		// TODO Auto-generated method stub
+	    }
+	});
+
+	composite.pack();
+
+	return composite;
+    }
+
+    @Override
+    protected void performDefaults() {
+	IPreferenceStore prefs = getPreferenceStore();
+
+	table.removeAll();
+
+	List<CheckItem> patterns = TapiJIPreferences.convertStringToList(prefs
+		.getDefaultString(TapiJIPreferences.NON_RB_PATTERN));
+	for (CheckItem s : patterns) {
+	    toTableItem(table, s);
+	}
+    }
+
+    @Override
+    public boolean performOk() {
+	IPreferenceStore prefs = getPreferenceStore();
+	List<CheckItem> patterns = new LinkedList<CheckItem>();
+	for (TableItem i : table.getItems()) {
+	    patterns.add(new CheckItem(i.getText(), i.getChecked()));
+	}
+
+	prefs.setValue(TapiJIPreferences.NON_RB_PATTERN,
+		TapiJIPreferences.convertListToString(patterns));
+
+	return super.performOk();
+    }
+
+    private TableItem toTableItem(Table table, CheckItem s) {
+	TableItem item = new TableItem(table, SWT.NONE);
+	item.setText(s.getName());
+	item.setChecked(s.getChecked());
+	return item;
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/preferences/TapiHomePreferencePage.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/preferences/TapiHomePreferencePage.java
new file mode 100644
index 0000000..107e777
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/preferences/TapiHomePreferencePage.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.preferences;
+
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+public class TapiHomePreferencePage extends PreferencePage implements
+	IWorkbenchPreferencePage {
+
+    @Override
+    public void init(IWorkbench workbench) {
+	// TODO Auto-generated method stub
+
+    }
+
+    @Override
+    protected Control createContents(Composite parent) {
+	Composite composite = new Composite(parent, SWT.NONE);
+	composite.setLayout(new GridLayout(1, true));
+	composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+	Label description = new Label(composite, SWT.WRAP);
+	description.setText("See sub-pages for settings.");
+
+	return parent;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/preferences/TapiJIPreferenceInitializer.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/preferences/TapiJIPreferenceInitializer.java
new file mode 100644
index 0000000..b22c86e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/preferences/TapiJIPreferenceInitializer.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.preferences;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.babel.tapiji.tools.core.ui.Activator;
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.jface.preference.IPreferenceStore;
+
+public class TapiJIPreferenceInitializer extends AbstractPreferenceInitializer {
+
+    public TapiJIPreferenceInitializer() {
+	// TODO Auto-generated constructor stub
+    }
+
+    @Override
+    public void initializeDefaultPreferences() {
+	IPreferenceStore prefs = Activator.getDefault().getPreferenceStore();
+
+	// ResourceBundle-Settings
+	List<CheckItem> patterns = new LinkedList<CheckItem>();
+	patterns.add(new CheckItem("^(.)*/build\\.properties", true));
+	patterns.add(new CheckItem("^(.)*/config\\.properties", true));
+	patterns.add(new CheckItem("^(.)*/targetplatform/(.)*", true));
+	prefs.setDefault(TapiJIPreferences.NON_RB_PATTERN,
+		TapiJIPreferences.convertListToString(patterns));
+
+	// Builder
+	prefs.setDefault(TapiJIPreferences.AUDIT_RESOURCE, true);
+	prefs.setDefault(TapiJIPreferences.AUDIT_RB, true);
+	prefs.setDefault(TapiJIPreferences.AUDIT_UNSPEZIFIED_KEY, true);
+	prefs.setDefault(TapiJIPreferences.AUDIT_SAME_VALUE, false);
+	prefs.setDefault(TapiJIPreferences.AUDIT_MISSING_LANGUAGE, true);
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/preferences/TapiJIPreferences.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/preferences/TapiJIPreferences.java
new file mode 100644
index 0000000..e8035f1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/preferences/TapiJIPreferences.java
@@ -0,0 +1,124 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.preferences;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import org.eclipse.babel.core.configuration.IConfiguration;
+import org.eclipse.babel.tapiji.tools.core.ui.Activator;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.util.IPropertyChangeListener;
+
+public class TapiJIPreferences implements IConfiguration {
+
+    public static final String AUDIT_SAME_VALUE = "auditSameValue";
+    public static final String AUDIT_UNSPEZIFIED_KEY = "auditMissingValue";
+    public static final String AUDIT_MISSING_LANGUAGE = "auditMissingLanguage";
+    public static final String AUDIT_RB = "auditResourceBundle";
+    public static final String AUDIT_RESOURCE = "auditResource";
+
+    public static final String NON_RB_PATTERN = "NoRBPattern";
+
+    private static final IPreferenceStore PREF = Activator.getDefault()
+	    .getPreferenceStore();
+
+    private static final String DELIMITER = ";";
+    private static final String ATTRIBUTE_DELIMITER = ":";
+
+    @Override
+    public boolean getAuditSameValue() {
+	return PREF.getBoolean(AUDIT_SAME_VALUE);
+    }
+
+    @Override
+    public boolean getAuditMissingValue() {
+	return PREF.getBoolean(AUDIT_UNSPEZIFIED_KEY);
+    }
+
+    @Override
+    public boolean getAuditMissingLanguage() {
+	return PREF.getBoolean(AUDIT_MISSING_LANGUAGE);
+    }
+
+    @Override
+    public boolean getAuditRb() {
+	return PREF.getBoolean(AUDIT_RB);
+    }
+
+    @Override
+    public boolean getAuditResource() {
+	return PREF.getBoolean(AUDIT_RESOURCE);
+    }
+
+    @Override
+    public String getNonRbPattern() {
+	return PREF.getString(NON_RB_PATTERN);
+    }
+
+    public static List<CheckItem> getNonRbPatternAsList() {
+	return convertStringToList(PREF.getString(NON_RB_PATTERN));
+    }
+
+    public static List<CheckItem> convertStringToList(String string) {
+	StringTokenizer tokenizer = new StringTokenizer(string, DELIMITER);
+	int tokenCount = tokenizer.countTokens();
+	List<CheckItem> elements = new LinkedList<CheckItem>();
+
+	for (int i = 0; i < tokenCount; i++) {
+	    StringTokenizer attribute = new StringTokenizer(
+		    tokenizer.nextToken(), ATTRIBUTE_DELIMITER);
+	    String name = attribute.nextToken();
+	    boolean checked;
+	    if (attribute.nextToken().equals("true")) {
+		checked = true;
+	    } else {
+		checked = false;
+	    }
+
+	    elements.add(new CheckItem(name, checked));
+	}
+	return elements;
+    }
+
+    public static String convertListToString(List<CheckItem> patterns) {
+	StringBuilder sb = new StringBuilder();
+	int tokenCount = 0;
+
+	for (CheckItem s : patterns) {
+	    sb.append(s.getName());
+	    sb.append(ATTRIBUTE_DELIMITER);
+	    if (s.checked) {
+		sb.append("true");
+	    } else {
+		sb.append("false");
+	    }
+
+	    if (++tokenCount != patterns.size()) {
+		sb.append(DELIMITER);
+	    }
+	}
+	return sb.toString();
+    }
+
+    public static void addPropertyChangeListener(
+	    IPropertyChangeListener listener) {
+	Activator.getDefault().getPreferenceStore()
+		.addPropertyChangeListener(listener);
+    }
+
+    public static void removePropertyChangeListener(
+	    IPropertyChangeListener listener) {
+	Activator.getDefault().getPreferenceStore()
+		.removePropertyChangeListener(listener);
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/quickfix/CreateResourceBundle.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/quickfix/CreateResourceBundle.java
new file mode 100644
index 0000000..2e8ee6e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/quickfix/CreateResourceBundle.java
@@ -0,0 +1,201 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.quickfix;
+
+import org.eclipse.babel.editor.wizards.IResourceBundleWizard;
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.builder.I18nBuilder;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.ResourceUtils;
+import org.eclipse.core.filebuffers.FileBuffers;
+import org.eclipse.core.filebuffers.ITextFileBuffer;
+import org.eclipse.core.filebuffers.ITextFileBufferManager;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IMarkerResolution2;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.wizards.IWizardDescriptor;
+
+public class CreateResourceBundle implements IMarkerResolution2 {
+
+    private IResource resource;
+    private int start;
+    private int end;
+    private String key;
+    private boolean jsfContext;
+    private final String newBunldeWizard = "org.eclipse.babel.editor.wizards.ResourceBundleWizard";
+
+    public CreateResourceBundle(String key, IResource resource, int start,
+	    int end) {
+	this.key = ResourceUtils.deriveNonExistingRBName(key,
+		ResourceBundleManager.getManager(resource.getProject()));
+	this.resource = resource;
+	this.start = start;
+	this.end = end;
+	this.jsfContext = jsfContext;
+    }
+
+    @Override
+    public String getDescription() {
+	return "Creates a new Resource-Bundle with the id '" + key + "'";
+    }
+
+    @Override
+    public Image getImage() {
+	// TODO Auto-generated method stub
+	return null;
+    }
+
+    @Override
+    public String getLabel() {
+	return "Create Resource-Bundle '" + key + "'";
+    }
+
+    @Override
+    public void run(IMarker marker) {
+	runAction();
+    }
+
+    protected void runAction() {
+	// First see if this is a "new wizard".
+	IWizardDescriptor descriptor = PlatformUI.getWorkbench()
+		.getNewWizardRegistry().findWizard(newBunldeWizard);
+	// If not check if it is an "import wizard".
+	if (descriptor == null) {
+	    descriptor = PlatformUI.getWorkbench().getImportWizardRegistry()
+		    .findWizard(newBunldeWizard);
+	}
+	// Or maybe an export wizard
+	if (descriptor == null) {
+	    descriptor = PlatformUI.getWorkbench().getExportWizardRegistry()
+		    .findWizard(newBunldeWizard);
+	}
+	try {
+	    // Then if we have a wizard, open it.
+	    if (descriptor != null) {
+		IWizard wizard = descriptor.createWizard();
+		if (!(wizard instanceof IResourceBundleWizard)) {
+		    return;
+		}
+
+		IResourceBundleWizard rbw = (IResourceBundleWizard) wizard;
+		String[] keySilbings = key.split("\\.");
+		String rbName = keySilbings[keySilbings.length - 1];
+		String packageName = "";
+
+		rbw.setBundleId(rbName);
+
+		// Set the default path according to the specified package name
+		String pathName = "";
+		if (keySilbings.length > 1) {
+		    try {
+			IJavaProject jp = JavaCore
+				.create(resource.getProject());
+			packageName = key.substring(0, key.lastIndexOf("."));
+
+			for (IPackageFragmentRoot fr : jp
+				.getAllPackageFragmentRoots()) {
+			    IPackageFragment pf = fr
+				    .getPackageFragment(packageName);
+			    if (pf.exists()) {
+				pathName = pf.getResource().getFullPath()
+					.removeFirstSegments(0).toOSString();
+				break;
+			    }
+			}
+		    } catch (Exception e) {
+			pathName = "";
+		    }
+		}
+
+		try {
+		    IJavaProject jp = JavaCore.create(resource.getProject());
+		    if (pathName.trim().equals("")) {
+			for (IPackageFragmentRoot fr : jp
+				.getAllPackageFragmentRoots()) {
+			    if (!fr.isReadOnly()) {
+				pathName = fr.getResource().getFullPath()
+					.removeFirstSegments(0).toOSString();
+				break;
+			    }
+			}
+		    }
+		} catch (Exception e) {
+		    pathName = "";
+		}
+
+		rbw.setDefaultPath(pathName);
+
+		WizardDialog wd = new WizardDialog(Display.getDefault()
+			.getActiveShell(), wizard);
+		wd.setTitle(wizard.getWindowTitle());
+		if (wd.open() == WizardDialog.OK) {
+		    try {
+			resource.getProject().build(
+				IncrementalProjectBuilder.FULL_BUILD,
+				I18nBuilder.BUILDER_ID, null, null);
+		    } catch (CoreException e) {
+			Logger.logError(e);
+		    }
+
+		    ITextFileBufferManager bufferManager = FileBuffers
+			    .getTextFileBufferManager();
+		    IPath path = resource.getRawLocation();
+		    try {
+			bufferManager.connect(path, null);
+			ITextFileBuffer textFileBuffer = bufferManager
+				.getTextFileBuffer(path);
+			IDocument document = textFileBuffer.getDocument();
+
+			if (document.get().charAt(start - 1) == '"'
+				&& document.get().charAt(start) != '"') {
+			    start--;
+			    end++;
+			}
+			if (document.get().charAt(end + 1) == '"'
+				&& document.get().charAt(end) != '"') {
+			    end++;
+			}
+
+			document.replace(start, end - start, "\""
+				+ (packageName.equals("") ? "" : packageName
+					+ ".") + rbName + "\"");
+
+			textFileBuffer.commit(null, false);
+		    } catch (Exception e) {
+			Logger.logError(e);
+		    } finally {
+			try {
+			    bufferManager.disconnect(path, null);
+			} catch (CoreException e) {
+			    Logger.logError(e);
+			}
+		    }
+		}
+	    }
+	} catch (CoreException e) {
+	    Logger.logError(e);
+	}
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/quickfix/CreateResourceBundleEntry.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/quickfix/CreateResourceBundleEntry.java
new file mode 100644
index 0000000..14a3f30
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/quickfix/CreateResourceBundleEntry.java
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer, Alexej Strelzow.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ *     Alexej Strelzow - modified CreateResourceBundleEntryDialog instantiation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.quickfix;
+
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.babel.tapiji.tools.core.ui.builder.I18nBuilder;
+import org.eclipse.babel.tapiji.tools.core.ui.dialogs.CreateResourceBundleEntryDialog;
+import org.eclipse.babel.tapiji.tools.core.ui.dialogs.CreateResourceBundleEntryDialog.DialogConfiguration;
+import org.eclipse.core.filebuffers.FileBuffers;
+import org.eclipse.core.filebuffers.ITextFileBuffer;
+import org.eclipse.core.filebuffers.ITextFileBufferManager;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IMarkerResolution2;
+
+public class CreateResourceBundleEntry implements IMarkerResolution2 {
+
+    private String key;
+    private String bundleId;
+
+    public CreateResourceBundleEntry(String key, String bundleId) {
+	this.key = key;
+	this.bundleId = bundleId;
+    }
+
+    @Override
+    public String getDescription() {
+	return "Creates a new Resource-Bundle entry for the property-key '"
+		+ key + "'";
+    }
+
+    @Override
+    public Image getImage() {
+	// TODO Auto-generated method stub
+	return null;
+    }
+
+    @Override
+    public String getLabel() {
+	return "Create Resource-Bundle entry for '" + key + "'";
+    }
+
+    @Override
+    public void run(IMarker marker) {
+	int startPos = marker.getAttribute(IMarker.CHAR_START, 0);
+	int endPos = marker.getAttribute(IMarker.CHAR_END, 0) - startPos;
+	IResource resource = marker.getResource();
+
+	ITextFileBufferManager bufferManager = FileBuffers
+		.getTextFileBufferManager();
+	IPath path = resource.getRawLocation();
+	try {
+	    bufferManager.connect(path, null);
+	    ITextFileBuffer textFileBuffer = bufferManager
+		    .getTextFileBuffer(path);
+	    IDocument document = textFileBuffer.getDocument();
+
+	    CreateResourceBundleEntryDialog dialog = new CreateResourceBundleEntryDialog(
+		    Display.getDefault().getActiveShell());
+
+	    DialogConfiguration config = dialog.new DialogConfiguration();
+	    config.setPreselectedKey(key != null ? key : "");
+	    config.setPreselectedMessage("");
+	    config.setPreselectedBundle(bundleId);
+	    config.setPreselectedLocale("");
+	    config.setProjectName(resource.getProject().getName());
+
+	    dialog.setDialogConfiguration(config);
+
+	    if (dialog.open() != InputDialog.OK) {
+		return;
+	    }
+	} catch (Exception e) {
+	    Logger.logError(e);
+	} finally {
+	    try {
+		resource.getProject().build(
+			IncrementalProjectBuilder.FULL_BUILD,
+			I18nBuilder.BUILDER_ID, null, null);
+	    } catch (CoreException e) {
+		Logger.logError(e);
+	    }
+	}
+
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/quickfix/IncludeResource.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/quickfix/IncludeResource.java
new file mode 100644
index 0000000..d4d389c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/quickfix/IncludeResource.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.quickfix;
+
+import java.util.Set;
+
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IMarkerResolution2;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.progress.IProgressService;
+
+public class IncludeResource implements IMarkerResolution2 {
+
+    private String bundleName;
+    private Set<IResource> bundleResources;
+
+    public IncludeResource(String bundleName, Set<IResource> bundleResources) {
+	this.bundleResources = bundleResources;
+	this.bundleName = bundleName;
+    }
+
+    @Override
+    public String getDescription() {
+	return "The Resource-Bundle with id '"
+		+ bundleName
+		+ "' has been "
+		+ "excluded from Internationalization. Based on this fact, no internationalization "
+		+ "supoort is provided for this Resource-Bundle. Performing this action, internationalization "
+		+ "support for '" + bundleName + "' will be enabled";
+    }
+
+    @Override
+    public Image getImage() {
+	// TODO Auto-generated method stub
+	return null;
+    }
+
+    @Override
+    public String getLabel() {
+	return "Include excluded Resource-Bundle '" + bundleName + "'";
+    }
+
+    @Override
+    public void run(final IMarker marker) {
+	IWorkbench wb = PlatformUI.getWorkbench();
+	IProgressService ps = wb.getProgressService();
+	try {
+	    ps.busyCursorWhile(new IRunnableWithProgress() {
+		public void run(IProgressMonitor pm) {
+		    ResourceBundleManager manager = ResourceBundleManager
+			    .getManager(marker.getResource().getProject());
+		    pm.beginTask("Including resources to Internationalization",
+			    bundleResources.size());
+		    for (IResource resource : bundleResources) {
+			manager.includeResource(resource, pm);
+			pm.worked(1);
+		    }
+		    pm.done();
+		}
+	    });
+	} catch (Exception e) {
+	}
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/utils/EditorUtils.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/utils/EditorUtils.java
new file mode 100644
index 0000000..151a854
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/utils/EditorUtils.java
@@ -0,0 +1,190 @@
+package org.eclipse.babel.tapiji.tools.core.ui.utils;

+

+import java.util.Iterator;

+

+import org.eclipse.babel.editor.IMessagesEditor;

+import org.eclipse.babel.tapiji.tools.core.Logger;

+import org.eclipse.babel.tapiji.tools.core.extensions.ILocation;

+import org.eclipse.babel.tapiji.tools.core.ui.Activator;

+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;

+import org.eclipse.core.resources.IFile;

+import org.eclipse.core.resources.IMarker;

+import org.eclipse.core.resources.IResource;

+import org.eclipse.core.runtime.CoreException;

+import org.eclipse.jdt.ui.JavaUI;

+import org.eclipse.jface.text.IDocument;

+import org.eclipse.jface.text.Position;

+import org.eclipse.jface.text.source.IAnnotationModel;

+import org.eclipse.ui.IEditorPart;

+import org.eclipse.ui.IWorkbenchPage;

+import org.eclipse.ui.PartInitException;

+import org.eclipse.ui.ide.IDE;

+import org.eclipse.ui.part.FileEditorInput;

+import org.eclipse.ui.texteditor.AbstractMarkerAnnotationModel;

+import org.eclipse.ui.texteditor.SimpleMarkerAnnotation;

+

+public class EditorUtils {

+

+	/** Marker constants **/

+	public static final String MARKER_ID = Activator.PLUGIN_ID

+	        + ".StringLiteralAuditMarker";

+	public static final String RB_MARKER_ID = Activator.PLUGIN_ID

+	        + ".ResourceBundleAuditMarker";

+

+	/** Editor ids **/

+	public static final String RESOURCE_BUNDLE_EDITOR = "com.essiembre.rbe.eclipse.editor.ResourceBundleEditor";

+

+	public static IEditorPart openEditor(IWorkbenchPage page, IFile file,

+	        String editor) {

+		// open the rb-editor for this file type

+		try {

+			return IDE.openEditor(page, file, editor);

+		} catch (PartInitException e) {

+			Logger.logError(e);

+		}

+		return null;

+	}

+

+	public static IEditorPart openEditor(IWorkbenchPage page, IFile file,

+	        String editor, String key) {

+		// open the rb-editor for this file type and selects given msg key

+		IEditorPart part = openEditor(page, file, editor);

+		if (part instanceof IMessagesEditor) {

+			IMessagesEditor msgEditor = (IMessagesEditor) part;

+			msgEditor.setSelectedKey(key);

+		}

+		return part;

+	}

+

+	public static void updateMarker(IMarker marker) {

+		FileEditorInput input = new FileEditorInput(

+		        (IFile) marker.getResource());

+

+		AbstractMarkerAnnotationModel model = (AbstractMarkerAnnotationModel) getAnnotationModel(marker);

+		IDocument doc = JavaUI.getDocumentProvider().getDocument(input);

+

+		try {

+			model.updateMarker(doc, marker, getCurPosition(marker, model));

+		} catch (CoreException e) {

+			Logger.logError(e);

+		}

+	}

+

+	public static IAnnotationModel getAnnotationModel(IMarker marker) {

+		FileEditorInput input = new FileEditorInput(

+		        (IFile) marker.getResource());

+

+		return JavaUI.getDocumentProvider().getAnnotationModel(input);

+	}

+

+	private static Position getCurPosition(IMarker marker,

+	        IAnnotationModel model) {

+		Iterator iter = model.getAnnotationIterator();

+		Logger.logInfo("Updates Position!");

+		while (iter.hasNext()) {

+			Object curr = iter.next();

+			if (curr instanceof SimpleMarkerAnnotation) {

+				SimpleMarkerAnnotation annot = (SimpleMarkerAnnotation) curr;

+				if (marker.equals(annot.getMarker())) {

+					return model.getPosition(annot);

+				}

+			}

+		}

+		return null;

+	}

+

+	public static boolean deleteAuditMarkersForResource(IResource resource) {

+		try {

+			if (resource != null && resource.exists()) {

+				resource.deleteMarkers(MARKER_ID, false,

+				        IResource.DEPTH_INFINITE);

+				deleteAllAuditRBMarkersFromRB(resource);

+			}

+		} catch (CoreException e) {

+			Logger.logError(e);

+			return false;

+		}

+		return true;

+	}

+

+	/*

+	 * Delete all RB_MARKER from the hole resourcebundle

+	 */

+	private static boolean deleteAllAuditRBMarkersFromRB(IResource resource)

+	        throws CoreException {

+		// if (resource.findMarkers(RB_MARKER_ID, false,

+		// IResource.DEPTH_INFINITE).length > 0)

+		if (RBFileUtils.isResourceBundleFile(resource)) {

+			String rbId = RBFileUtils

+			        .getCorrespondingResourceBundleId((IFile) resource);

+			if (rbId == null) {

+				return true; // file in no resourcebundle

+			}

+

+			ResourceBundleManager rbmanager = ResourceBundleManager

+			        .getManager(resource.getProject());

+			for (IResource r : rbmanager.getResourceBundles(rbId)) {

+				r.deleteMarkers(RB_MARKER_ID, false, IResource.DEPTH_INFINITE);

+			}

+		}

+		return true;

+	}

+

+	public static void reportToMarker(String string, ILocation problem,

+	        int cause, String key, ILocation data, String context) {

+		try {

+			IMarker marker = problem.getFile().createMarker(MARKER_ID);

+			marker.setAttribute(IMarker.MESSAGE, string);

+			marker.setAttribute(IMarker.CHAR_START, problem.getStartPos());

+			marker.setAttribute(IMarker.CHAR_END, problem.getEndPos());

+			marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_WARNING);

+			marker.setAttribute("cause", cause);

+			marker.setAttribute("key", key);

+			marker.setAttribute("context", context);

+			if (data != null) {

+				marker.setAttribute("bundleName", data.getLiteral());

+				marker.setAttribute("bundleStart", data.getStartPos());

+				marker.setAttribute("bundleEnd", data.getEndPos());

+			}

+

+			// TODO: init attributes

+			marker.setAttribute("stringLiteral", string);

+		} catch (CoreException e) {

+			Logger.logError(e);

+			return;

+		}

+

+		Logger.logInfo(string);

+	}

+

+	public static void reportToRBMarker(String string, ILocation problem,

+	        int cause, String key, String problemPartnerFile, ILocation data,

+	        String context) {

+		try {

+			if (!problem.getFile().exists()) {

+				return;

+			}

+			IMarker marker = problem.getFile().createMarker(RB_MARKER_ID);

+			marker.setAttribute(IMarker.MESSAGE, string);

+			marker.setAttribute(IMarker.LINE_NUMBER, problem.getStartPos()); // TODO

+			                                                                 // better-dirty

+			                                                                 // implementation

+			marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_WARNING);

+			marker.setAttribute("cause", cause);

+			marker.setAttribute("key", key);

+			marker.setAttribute("context", context);

+			if (data != null) {

+				marker.setAttribute("language", data.getLiteral());

+				marker.setAttribute("bundleLine", data.getStartPos());

+			}

+			marker.setAttribute("stringLiteral", string);

+			marker.setAttribute("problemPartner", problemPartnerFile);

+		} catch (CoreException e) {

+			Logger.logError(e);

+			return;

+		}

+

+		Logger.logInfo(string);

+	}

+

+}

diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/utils/FontUtils.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/utils/FontUtils.java
new file mode 100644
index 0000000..858644a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/utils/FontUtils.java
@@ -0,0 +1,102 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.utils;
+
+import org.eclipse.babel.tapiji.tools.core.ui.Activator;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+
+public class FontUtils {
+
+    /**
+     * Gets a system color.
+     * 
+     * @param colorId
+     *            SWT constant
+     * @return system color
+     */
+    public static Color getSystemColor(int colorId) {
+	return Activator.getDefault().getWorkbench().getDisplay()
+		.getSystemColor(colorId);
+    }
+
+    /**
+     * Creates a font by altering the font associated with the given control and
+     * applying the provided style (size is unaffected).
+     * 
+     * @param control
+     *            control we base our font data on
+     * @param style
+     *            style to apply to the new font
+     * @return newly created font
+     */
+    public static Font createFont(Control control, int style) {
+	// TODO consider dropping in favor of control-less version?
+	return createFont(control, style, 0);
+    }
+
+    /**
+     * Creates a font by altering the font associated with the given control and
+     * applying the provided style and relative size.
+     * 
+     * @param control
+     *            control we base our font data on
+     * @param style
+     *            style to apply to the new font
+     * @param relSize
+     *            size to add or remove from the control size
+     * @return newly created font
+     */
+    public static Font createFont(Control control, int style, int relSize) {
+	// TODO consider dropping in favor of control-less version?
+	FontData[] fontData = control.getFont().getFontData();
+	for (int i = 0; i < fontData.length; i++) {
+	    fontData[i].setHeight(fontData[i].getHeight() + relSize);
+	    fontData[i].setStyle(style);
+	}
+	return new Font(control.getDisplay(), fontData);
+    }
+
+    /**
+     * Creates a font by altering the system font and applying the provided
+     * style and relative size.
+     * 
+     * @param style
+     *            style to apply to the new font
+     * @return newly created font
+     */
+    public static Font createFont(int style) {
+	return createFont(style, 0);
+    }
+
+    /**
+     * Creates a font by altering the system font and applying the provided
+     * style and relative size.
+     * 
+     * @param style
+     *            style to apply to the new font
+     * @param relSize
+     *            size to add or remove from the control size
+     * @return newly created font
+     */
+    public static Font createFont(int style, int relSize) {
+	Display display = Activator.getDefault().getWorkbench().getDisplay();
+	FontData[] fontData = display.getSystemFont().getFontData();
+	for (int i = 0; i < fontData.length; i++) {
+	    fontData[i].setHeight(fontData[i].getHeight() + relSize);
+	    fontData[i].setStyle(style);
+	}
+	return new Font(display, fontData);
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/utils/ImageUtils.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/utils/ImageUtils.java
new file mode 100644
index 0000000..409e374
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/utils/ImageUtils.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Pascal Essiembre.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Pascal Essiembre - initial API and implementation
+ *    Martin Reiterer - extracting image handling from UIUtils
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.utils;
+
+import org.eclipse.babel.tapiji.tools.core.ui.Activator;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.swt.graphics.Image;
+
+public final class ImageUtils {
+
+	/** Name of resource bundle image. */
+	public static final String IMAGE_RESOURCE_BUNDLE = "icons/resourcebundle.gif"; //$NON-NLS-1$
+	/** Name of properties file image. */
+	public static final String IMAGE_PROPERTIES_FILE = "icons/propertiesfile.gif"; //$NON-NLS-1$
+	/** Name of properties file entry image */
+	public static final String IMAGE_PROPERTIES_FILE_ENTRY = "icons/key.gif";
+	/** Name of new properties file image. */
+	public static final String IMAGE_NEW_PROPERTIES_FILE = "icons/newpropertiesfile.gif"; //$NON-NLS-1$
+	/** Name of hierarchical layout image. */
+	public static final String IMAGE_LAYOUT_HIERARCHICAL = "icons/hierarchicalLayout.gif"; //$NON-NLS-1$
+	/** Name of flat layout image. */
+	public static final String IMAGE_LAYOUT_FLAT = "icons/flatLayout.gif"; //$NON-NLS-1$
+	public static final String IMAGE_INCOMPLETE_ENTRIES = "icons/incomplete.gif"; //$NON-NLS-1$
+	public static final String IMAGE_EXCLUDED_RESOURCE_ON = "icons/int.gif"; //$NON-NLS-1$
+	public static final String IMAGE_EXCLUDED_RESOURCE_OFF = "icons/exclude.png"; //$NON-NLS-1$
+	public static final String ICON_RESOURCE = "icons/Resource16_small.png";
+	public static final String ICON_RESOURCE_INCOMPLETE = "icons/Resource16_warning_small.png";
+
+	/** Image registry. */
+	private static final ImageRegistry imageRegistry = new ImageRegistry();
+
+	/**
+	 * Constructor.
+	 */
+	private ImageUtils() {
+		super();
+	}
+
+	/**
+	 * Gets an image.
+	 * 
+	 * @param imageName
+	 *            image name
+	 * @return image
+	 */
+	public static Image getImage(String imageName) {
+		Image image = imageRegistry.get(imageName);
+		if (image == null) {
+			image = Activator.getImageDescriptor(imageName).createImage();
+			imageRegistry.put(imageName, image);
+		}
+		return image;
+	}
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/utils/LanguageUtils.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/utils/LanguageUtils.java
new file mode 100644
index 0000000..ecadce3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/utils/LanguageUtils.java
@@ -0,0 +1,137 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.utils;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringBufferInputStream;
+import java.util.Locale;
+
+import org.eclipse.babel.core.message.resource.ser.PropertiesSerializer;
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+
+public class LanguageUtils {
+    private static final String INITIALISATION_STRING = PropertiesSerializer.GENERATED_BY;
+
+    private static IFile createFile(IContainer container, String fileName,
+	    IProgressMonitor monitor) throws CoreException, IOException {
+	if (!container.exists()) {
+	    if (container instanceof IFolder) {
+		((IFolder) container).create(false, false, monitor);
+	    }
+	}
+
+	IFile file = container.getFile(new Path(fileName));
+	if (!file.exists()) {
+	    InputStream s = new StringBufferInputStream(INITIALISATION_STRING);
+	    file.create(s, true, monitor);
+	    s.close();
+	}
+
+	return file;
+    }
+
+    /**
+     * Checks if ResourceBundle provides a given locale. If the locale is not
+     * provided, creates a new properties-file with the ResourceBundle-basename
+     * and the index of the given locale.
+     * 
+     * @param project
+     * @param rbId
+     * @param locale
+     */
+    public static void addLanguageToResourceBundle(IProject project,
+	    final String rbId, final Locale locale) {
+	ResourceBundleManager rbManager = ResourceBundleManager
+		.getManager(project);
+
+	if (rbManager.getProvidedLocales(rbId).contains(locale)) {
+	    return;
+	}
+
+	final IResource file = rbManager.getRandomFile(rbId);
+	final IContainer c = ResourceUtils.getCorrespondingFolders(
+		file.getParent(), project);
+
+	new Job("create new propertfile") {
+	    @Override
+	    protected IStatus run(IProgressMonitor monitor) {
+		try {
+		    String newFilename = ResourceBundleManager
+			    .getResourceBundleName(file);
+		    if (locale.getLanguage() != null
+			    && !locale.getLanguage().equalsIgnoreCase(
+				    ResourceBundleManager.defaultLocaleTag)
+			    && !locale.getLanguage().equals("")) {
+			newFilename += "_" + locale.getLanguage();
+		    }
+		    if (locale.getCountry() != null
+			    && !locale.getCountry().equals("")) {
+			newFilename += "_" + locale.getCountry();
+		    }
+		    if (locale.getVariant() != null
+			    && !locale.getCountry().equals("")) {
+			newFilename += "_" + locale.getVariant();
+		    }
+		    newFilename += ".properties";
+
+		    createFile(c, newFilename, monitor);
+		} catch (CoreException e) {
+		    Logger.logError(
+			    "File for locale "
+				    + locale
+				    + " could not be created in ResourceBundle "
+				    + rbId, e);
+		} catch (IOException e) {
+		    Logger.logError(
+			    "File for locale "
+				    + locale
+				    + " could not be created in ResourceBundle "
+				    + rbId, e);
+		}
+		monitor.done();
+		return Status.OK_STATUS;
+	    }
+	}.schedule();
+    }
+
+    /**
+     * Adds new properties-files for a given locale to all ResourceBundles of a
+     * project. If a ResourceBundle already contains the language, happens
+     * nothing.
+     * 
+     * @param project
+     * @param locale
+     */
+    public static void addLanguageToProject(IProject project, Locale locale) {
+	ResourceBundleManager rbManager = ResourceBundleManager
+		.getManager(project);
+
+	// Audit if all resourecbundles provide this locale. if not - add new
+	// file
+	for (String rbId : rbManager.getResourceBundleIdentifiers()) {
+	    addLanguageToResourceBundle(project, rbId, locale);
+	}
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/utils/LocaleUtils.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/utils/LocaleUtils.java
new file mode 100644
index 0000000..6f0bb4f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/utils/LocaleUtils.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.utils;
+
+import java.util.Locale;
+import java.util.Set;
+
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+
+public class LocaleUtils {
+
+    public static Locale getLocaleByDisplayName(Set<Locale> locales,
+	    String displayName) {
+	for (Locale l : locales) {
+	    String name = l == null ? ResourceBundleManager.defaultLocaleTag
+		    : l.getDisplayName();
+	    if (name.equals(displayName)
+		    || (name.trim().length() == 0 && displayName
+			    .equals(ResourceBundleManager.defaultLocaleTag))) {
+		return l;
+	    }
+	}
+
+	return null;
+    }
+
+    public static boolean containsLocaleByDisplayName(Set<Locale> locales,
+	    String displayName) {
+	for (Locale l : locales) {
+	    String name = l == null ? ResourceBundleManager.defaultLocaleTag
+		    : l.getDisplayName();
+	    if (name.equals(displayName)
+		    || (name.trim().length() == 0 && displayName
+			    .equals(ResourceBundleManager.defaultLocaleTag))) {
+		return true;
+	    }
+	}
+
+	return false;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/utils/RBFileUtils.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/utils/RBFileUtils.java
new file mode 100644
index 0000000..5f8ff62
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/utils/RBFileUtils.java
@@ -0,0 +1,249 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.utils;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.babel.tapiji.tools.core.ui.Activator;
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.preferences.CheckItem;
+import org.eclipse.babel.tapiji.tools.core.ui.preferences.TapiJIPreferences;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.preference.IPreferenceStore;
+
+/**
+ * 
+ * @author mgasser
+ * 
+ */
+public class RBFileUtils extends Action {
+    public static final String PROPERTIES_EXT = "properties";
+
+    /**
+     * Returns true if a file is a ResourceBundle-file
+     */
+    public static boolean isResourceBundleFile(IResource file) {
+	boolean isValied = false;
+
+	if (file != null && file instanceof IFile && !file.isDerived()
+		&& file.getFileExtension() != null
+		&& file.getFileExtension().equalsIgnoreCase("properties")) {
+	    isValied = true;
+
+	    // Check if file is not in the blacklist
+	    IPreferenceStore pref = null;
+	    if (Activator.getDefault() != null) {
+		pref = Activator.getDefault().getPreferenceStore();
+	    }
+
+	    if (pref != null) {
+		List<CheckItem> list = TapiJIPreferences
+			.getNonRbPatternAsList();
+		for (CheckItem item : list) {
+		    if (item.getChecked()
+			    && file.getFullPath().toString()
+				    .matches(item.getName())) {
+			isValied = false;
+
+			// if properties-file is not RB-file and has
+			// ResouceBundleMarker, deletes all ResouceBundleMarker
+			// of the file
+			if (org.eclipse.babel.tapiji.tools.core.util.RBFileUtils
+				.hasResourceBundleMarker(file)) {
+			    try {
+				file.deleteMarkers(EditorUtils.RB_MARKER_ID,
+					true, IResource.DEPTH_INFINITE);
+			    } catch (CoreException e) {
+			    }
+			}
+		    }
+		}
+	    }
+	}
+
+	return isValied;
+    }
+
+    /**
+     * @param container
+     * @return Set with all ResourceBundles in this container
+     */
+    public static Set<String> getResourceBundleIds(IContainer container) {
+	Set<String> resourcebundles = new HashSet<String>();
+
+	try {
+	    for (IResource r : container.members()) {
+		if (r instanceof IFile) {
+		    String resourcebundle = getCorrespondingResourceBundleId((IFile) r);
+		    if (resourcebundle != null) {
+			resourcebundles.add(resourcebundle);
+		    }
+		}
+	    }
+	} catch (CoreException e) {/* resourcebundle.size()==0 */
+	}
+
+	return resourcebundles;
+    }
+
+    /**
+     * 
+     * @param file
+     * @return ResourceBundle-name or null if no ResourceBundle contains the
+     *         file
+     */
+    // TODO integrate in ResourceBundleManager
+    public static String getCorrespondingResourceBundleId(IFile file) {
+	ResourceBundleManager rbmanager = ResourceBundleManager.getManager(file
+		.getProject());
+	String possibleRBId = null;
+
+	if (isResourceBundleFile(file)) {
+	    possibleRBId = ResourceBundleManager.getResourceBundleId(file);
+
+	    for (String rbId : rbmanager.getResourceBundleIdentifiers()) {
+		if (possibleRBId.equals(rbId)) {
+		    return possibleRBId;
+		}
+	    }
+	}
+	return null;
+    }
+
+    /**
+     * Removes the properties-file of a given locale from a ResourceBundle, if
+     * the ResourceBundle provides the locale.
+     * 
+     * @param project
+     * @param rbId
+     * @param locale
+     */
+    public static void removeFileFromResourceBundle(IProject project,
+	    String rbId, Locale locale) {
+	ResourceBundleManager rbManager = ResourceBundleManager
+		.getManager(project);
+
+	if (!rbManager.getProvidedLocales(rbId).contains(locale)) {
+	    return;
+	}
+
+	final IFile file = rbManager.getResourceBundleFile(rbId, locale);
+	final String filename = file.getName();
+
+	new Job("remove properties-file") {
+	    @Override
+	    protected IStatus run(IProgressMonitor monitor) {
+		try {
+		    EditorUtils.deleteAuditMarkersForResource(file);
+		    file.delete(true, monitor);
+		} catch (CoreException e) {
+		    // MessageDialog.openError(Display.getCurrent().getActiveShell(),
+		    // "Confirm", "File could not be deleted");
+		    Logger.logError("File could not be deleted", e);
+		}
+		return Status.OK_STATUS;
+	    }
+	}.schedule();
+    }
+
+    /**
+     * Removes all properties-files of a given locale from all ResourceBundles
+     * of a project.
+     * 
+     * @param rbManager
+     * @param locale
+     * @return
+     */
+    public static void removeLanguageFromProject(IProject project, Locale locale) {
+	ResourceBundleManager rbManager = ResourceBundleManager
+		.getManager(project);
+
+	for (String rbId : rbManager.getResourceBundleIdentifiers()) {
+	    removeFileFromResourceBundle(project, rbId, locale);
+	}
+
+    }
+
+    /**
+     * @return the locale of a given properties-file
+     */
+    public static Locale getLocale(IFile file) {
+	String localeID = file.getName();
+	localeID = localeID.substring(0,
+		localeID.length() - "properties".length() - 1);
+	String baseBundleName = ResourceBundleManager
+		.getResourceBundleName(file);
+
+	Locale locale;
+	if (localeID.length() == baseBundleName.length()) {
+	    locale = null; // Default locale
+	} else {
+	    localeID = localeID.substring(baseBundleName.length() + 1);
+	    String[] localeTokens = localeID.split("_");
+	    switch (localeTokens.length) {
+	    case 1:
+		locale = new Locale(localeTokens[0]);
+		break;
+	    case 2:
+		locale = new Locale(localeTokens[0], localeTokens[1]);
+		break;
+	    case 3:
+		locale = new Locale(localeTokens[0], localeTokens[1],
+			localeTokens[2]);
+		break;
+	    default:
+		locale = new Locale("");
+		break;
+	    }
+	}
+	return locale;
+    }
+
+    /**
+     * @return number of ResourceBundles in the subtree
+     */
+    public static int countRecursiveResourceBundle(IContainer container) {
+	return getSubResourceBundle(container).size();
+    }
+
+    private static List<String> getSubResourceBundle(IContainer container) {
+	ResourceBundleManager rbmanager = ResourceBundleManager
+		.getManager(container.getProject());
+
+	String conatinerId = container.getFullPath().toString();
+	List<String> subResourceBundles = new ArrayList<String>();
+
+	for (String rbId : rbmanager.getResourceBundleIdentifiers()) {
+	    for (IResource r : rbmanager.getResourceBundles(rbId)) {
+		if (r.getFullPath().toString().contains(conatinerId)
+			&& (!subResourceBundles.contains(rbId))) {
+		    subResourceBundles.add(rbId);
+		}
+	    }
+	}
+	return subResourceBundles;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/utils/ResourceUtils.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/utils/ResourceUtils.java
new file mode 100644
index 0000000..d43d840
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/utils/ResourceUtils.java
@@ -0,0 +1,120 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IPath;
+
+public class ResourceUtils {
+
+    private final static String REGEXP_RESOURCE_KEY = "[\\p{Alnum}\\.]*";
+    private final static String REGEXP_RESOURCE_NO_BUNDLENAME = "[^\\p{Alnum}\\.]*";
+
+    public static boolean isValidResourceKey(String key) {
+	boolean isValid = false;
+
+	if (key != null && key.trim().length() > 0) {
+	    isValid = key.matches(REGEXP_RESOURCE_KEY);
+	}
+
+	return isValid;
+    }
+
+    public static String deriveNonExistingRBName(String nameProposal,
+	    ResourceBundleManager manager) {
+	// Adapt the proposal to the requirements for Resource-Bundle names
+	nameProposal = nameProposal.replaceAll(REGEXP_RESOURCE_NO_BUNDLENAME,
+		"");
+
+	int i = 0;
+	do {
+	    if (manager.getResourceBundleIdentifiers().contains(nameProposal)
+		    || nameProposal.length() == 0) {
+		nameProposal = nameProposal + (++i);
+	    } else {
+		break;
+	    }
+	} while (true);
+
+	return nameProposal;
+    }
+
+    public static boolean isJavaCompUnit(IResource res) {
+	boolean result = false;
+
+	if (res.getType() == IResource.FILE && !res.isDerived()
+		&& res.getFileExtension().equalsIgnoreCase("java")) {
+	    result = true;
+	}
+
+	return result;
+    }
+
+    public static boolean isJSPResource(IResource res) {
+	boolean result = false;
+
+	if (res.getType() == IResource.FILE
+		&& !res.isDerived()
+		&& (res.getFileExtension().equalsIgnoreCase("jsp") || res
+			.getFileExtension().equalsIgnoreCase("xhtml"))) {
+	    result = true;
+	}
+
+	return result;
+    }
+
+    /**
+     * 
+     * @param baseFolder
+     * @param targetProjects
+     *            Projects with a same structure
+     * @return List of
+     */
+    public static List<IContainer> getCorrespondingFolders(
+	    IContainer baseFolder, List<IProject> targetProjects) {
+	List<IContainer> correspondingFolder = new ArrayList<IContainer>();
+
+	for (IProject p : targetProjects) {
+	    IContainer c = getCorrespondingFolders(baseFolder, p);
+	    if (c.exists()) {
+		correspondingFolder.add(c);
+	    }
+	}
+
+	return correspondingFolder;
+    }
+
+    /**
+     * 
+     * @param baseFolder
+     * @param targetProject
+     * @return a Container with the corresponding path as the baseFolder. The
+     *         Container doesn't must exist.
+     */
+    public static IContainer getCorrespondingFolders(IContainer baseFolder,
+	    IProject targetProject) {
+	IPath relativ_folder = baseFolder.getFullPath().makeRelativeTo(
+		baseFolder.getProject().getFullPath());
+
+	if (!relativ_folder.isEmpty()) {
+	    return targetProject.getFolder(relativ_folder);
+	} else {
+	    return targetProject;
+	}
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/MessagesView.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/MessagesView.java
new file mode 100644
index 0000000..a91ca06
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/MessagesView.java
@@ -0,0 +1,541 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.views.messagesview;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.babel.tapiji.tools.core.model.IResourceBundleChangedListener;
+import org.eclipse.babel.tapiji.tools.core.model.manager.ResourceBundleChangedEvent;
+import org.eclipse.babel.tapiji.tools.core.ui.Activator;
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.dialogs.ResourceBundleSelectionDialog;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.ImageUtils;
+import org.eclipse.babel.tapiji.tools.core.ui.widgets.PropertyKeySelectionTree;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Scale;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.part.ViewPart;
+import org.eclipse.ui.progress.UIJob;
+
+public class MessagesView extends ViewPart implements
+	IResourceBundleChangedListener {
+
+    /**
+     * The ID of the view as specified by the extension.
+     */
+    public static final String ID = "org.eclipse.babel.tapiji.tools.core.views.MessagesView";
+
+    // View State
+    private MessagesViewState viewState;
+
+    // Search-Bar
+    private Text filter;
+
+    // Property-Key widget
+    private PropertyKeySelectionTree treeViewer;
+    private Scale fuzzyScaler;
+    private Label lblScale;
+
+    /*** ACTIONS ***/
+    private List<Action> visibleLocaleActions;
+    private Action selectResourceBundle;
+    private Action enableFuzzyMatching;
+    private Action editable;
+
+    // Parent component
+    Composite parent;
+
+    // context-dependent menu actions
+    ResourceBundleEntry contextDependentMenu;
+
+    /**
+     * The constructor.
+     */
+    public MessagesView() {
+    }
+
+    /**
+     * This is a callback that will allow us to create the viewer and initialize
+     * it.
+     */
+    public void createPartControl(Composite parent) {
+	this.parent = parent;
+
+	initLayout(parent);
+	initSearchBar(parent);
+	initMessagesTree(parent);
+	makeActions();
+	hookContextMenu();
+	contributeToActionBars();
+	initListener(parent);
+    }
+
+    protected void initListener(Composite parent) {
+	filter.addModifyListener(new ModifyListener() {
+
+	    @Override
+	    public void modifyText(ModifyEvent e) {
+		treeViewer.setSearchString(filter.getText());
+	    }
+	});
+    }
+
+    protected void initLayout(Composite parent) {
+	GridLayout mainLayout = new GridLayout();
+	mainLayout.numColumns = 1;
+	parent.setLayout(mainLayout);
+
+    }
+
+    protected void initSearchBar(Composite parent) {
+	// Construct a new parent container
+	Composite parentComp = new Composite(parent, SWT.BORDER);
+	parentComp.setLayout(new GridLayout(4, false));
+	parentComp
+		.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+
+	Label lblSearchText = new Label(parentComp, SWT.NONE);
+	lblSearchText.setText("Search expression:");
+
+	// define the grid data for the layout
+	GridData gridData = new GridData();
+	gridData.horizontalAlignment = SWT.FILL;
+	gridData.grabExcessHorizontalSpace = false;
+	gridData.horizontalSpan = 1;
+	lblSearchText.setLayoutData(gridData);
+
+	filter = new Text(parentComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+	if (viewState.getSearchString() != null) {
+	    if (viewState.getSearchString().length() > 1
+		    && viewState.getSearchString().startsWith("*")
+		    && viewState.getSearchString().endsWith("*"))
+		filter.setText(viewState.getSearchString().substring(1)
+			.substring(0, viewState.getSearchString().length() - 2));
+	    else
+		filter.setText(viewState.getSearchString());
+
+	}
+	GridData gridDatas = new GridData();
+	gridDatas.horizontalAlignment = SWT.FILL;
+	gridDatas.grabExcessHorizontalSpace = true;
+	gridDatas.horizontalSpan = 3;
+	filter.setLayoutData(gridDatas);
+
+	lblScale = new Label(parentComp, SWT.None);
+	lblScale.setText("\nPrecision:");
+	GridData gdScaler = new GridData();
+	gdScaler.verticalAlignment = SWT.CENTER;
+	gdScaler.grabExcessVerticalSpace = true;
+	gdScaler.horizontalSpan = 1;
+	// gdScaler.widthHint = 150;
+	lblScale.setLayoutData(gdScaler);
+
+	// Add a scale for specification of fuzzy Matching precision
+	fuzzyScaler = new Scale(parentComp, SWT.None);
+	fuzzyScaler.setMaximum(100);
+	fuzzyScaler.setMinimum(0);
+	fuzzyScaler.setIncrement(1);
+	fuzzyScaler.setPageIncrement(5);
+	fuzzyScaler
+		.setSelection(Math.round((treeViewer != null ? treeViewer
+			.getMatchingPrecision() : viewState
+			.getMatchingPrecision()) * 100.f));
+	fuzzyScaler.addListener(SWT.Selection, new Listener() {
+	    public void handleEvent(Event event) {
+		float val = 1f - (Float.parseFloat((fuzzyScaler.getMaximum()
+			- fuzzyScaler.getSelection() + fuzzyScaler.getMinimum())
+			+ "") / 100.f);
+		treeViewer.setMatchingPrecision(val);
+	    }
+	});
+	fuzzyScaler.setSize(100, 10);
+
+	GridData gdScalers = new GridData();
+	gdScalers.verticalAlignment = SWT.BEGINNING;
+	gdScalers.horizontalAlignment = SWT.FILL;
+	gdScalers.horizontalSpan = 3;
+	fuzzyScaler.setLayoutData(gdScalers);
+	refreshSearchbarState();
+    }
+
+    protected void refreshSearchbarState() {
+	lblScale.setVisible(treeViewer != null ? treeViewer
+		.isFuzzyMatchingEnabled() : viewState.isFuzzyMatchingEnabled());
+	fuzzyScaler.setVisible(treeViewer != null ? treeViewer
+		.isFuzzyMatchingEnabled() : viewState.isFuzzyMatchingEnabled());
+	if (treeViewer != null ? treeViewer.isFuzzyMatchingEnabled()
+		: viewState.isFuzzyMatchingEnabled()) {
+	    ((GridData) lblScale.getLayoutData()).heightHint = 40;
+	    ((GridData) fuzzyScaler.getLayoutData()).heightHint = 40;
+	} else {
+	    ((GridData) lblScale.getLayoutData()).heightHint = 0;
+	    ((GridData) fuzzyScaler.getLayoutData()).heightHint = 0;
+	}
+
+	lblScale.getParent().layout();
+	lblScale.getParent().getParent().layout();
+    }
+
+    protected void initMessagesTree(Composite parent) {
+	if (viewState.getSelectedProjectName() != null
+		&& viewState.getSelectedProjectName().trim().length() > 0) {
+	    try {
+		ResourceBundleManager.getManager(
+			viewState.getSelectedProjectName())
+			.registerResourceBundleChangeListener(
+				viewState.getSelectedBundleId(), this);
+
+	    } catch (Exception e) {
+	    }
+	}
+	treeViewer = new PropertyKeySelectionTree(getViewSite(), getSite(),
+		parent, SWT.NONE, viewState.getSelectedProjectName(),
+		viewState.getSelectedBundleId(), viewState.getVisibleLocales());
+	if (viewState.getSelectedProjectName() != null
+		&& viewState.getSelectedProjectName().trim().length() > 0) {
+	    if (viewState.getVisibleLocales() == null)
+		viewState.setVisibleLocales(treeViewer.getVisibleLocales());
+
+	    if (viewState.getSortings() != null)
+		treeViewer.setSortInfo(viewState.getSortings());
+
+	    treeViewer.enableFuzzyMatching(viewState.isFuzzyMatchingEnabled());
+	    treeViewer.setMatchingPrecision(viewState.getMatchingPrecision());
+	    treeViewer.setEditable(viewState.isEditable());
+
+	    if (viewState.getSearchString() != null)
+		treeViewer.setSearchString(viewState.getSearchString());
+	}
+	// define the grid data for the layout
+	GridData gridData = new GridData();
+	gridData.horizontalAlignment = SWT.FILL;
+	gridData.verticalAlignment = SWT.FILL;
+	gridData.grabExcessHorizontalSpace = true;
+	gridData.grabExcessVerticalSpace = true;
+	treeViewer.setLayoutData(gridData);
+    }
+
+    /**
+     * Passing the focus request to the viewer's control.
+     */
+    public void setFocus() {
+	treeViewer.setFocus();
+    }
+
+    protected void redrawTreeViewer() {
+	parent.setRedraw(false);
+	treeViewer.dispose();
+	try {
+	    initMessagesTree(parent);
+	    makeActions();
+	    contributeToActionBars();
+	    hookContextMenu();
+	} catch (Exception e) {
+	    Logger.logError(e);
+	}
+	parent.setRedraw(true);
+	parent.layout(true);
+	treeViewer.layout(true);
+	refreshSearchbarState();
+    }
+
+    /*** ACTIONS ***/
+    private void makeVisibleLocalesActions() {
+	if (viewState.getSelectedProjectName() == null) {
+	    return;
+	}
+
+	visibleLocaleActions = new ArrayList<Action>();
+	Set<Locale> locales = ResourceBundleManager.getManager(
+		viewState.getSelectedProjectName()).getProvidedLocales(
+		viewState.getSelectedBundleId());
+	List<Locale> visibleLocales = treeViewer.getVisibleLocales();
+	for (final Locale locale : locales) {
+	    Action langAction = new Action() {
+
+		@Override
+		public void run() {
+		    super.run();
+		    List<Locale> visibleL = treeViewer.getVisibleLocales();
+		    if (this.isChecked()) {
+			if (!visibleL.contains(locale)) {
+			    visibleL.add(locale);
+			}
+		    } else {
+			visibleL.remove(locale);
+		    }
+		    viewState.setVisibleLocales(visibleL);
+		    redrawTreeViewer();
+		}
+
+	    };
+	    if (locale != null && locale.getDisplayName().trim().length() > 0) {
+		langAction.setText(locale.getDisplayName(Locale.US));
+	    } else {
+		langAction.setText("Default");
+	    }
+	    langAction.setChecked(visibleLocales.contains(locale));
+	    visibleLocaleActions.add(langAction);
+	}
+    }
+
+    private void makeActions() {
+	makeVisibleLocalesActions();
+
+	selectResourceBundle = new Action() {
+
+	    @Override
+	    public void run() {
+		super.run();
+		ResourceBundleSelectionDialog sd = new ResourceBundleSelectionDialog(
+			getViewSite().getShell(), null);
+		if (sd.open() == InputDialog.OK) {
+		    String resourceBundle = sd.getSelectedBundleId();
+
+		    if (resourceBundle != null) {
+			int iSep = resourceBundle.indexOf("/");
+			viewState.setSelectedProjectName(resourceBundle
+				.substring(0, iSep));
+			viewState.setSelectedBundleId(resourceBundle
+				.substring(iSep + 1));
+			viewState.setVisibleLocales(null);
+			redrawTreeViewer();
+			setTitleToolTip(resourceBundle);
+		    }
+		}
+	    }
+	};
+
+	selectResourceBundle.setText("Resource-Bundle ...");
+	selectResourceBundle
+		.setDescription("Allows you to select the Resource-Bundle which is used as message-source.");
+	selectResourceBundle.setImageDescriptor(Activator
+		.getImageDescriptor(ImageUtils.IMAGE_RESOURCE_BUNDLE));
+
+	contextDependentMenu = new ResourceBundleEntry(treeViewer, treeViewer
+		.getViewer().getSelection());
+
+	enableFuzzyMatching = new Action() {
+	    public void run() {
+		super.run();
+		treeViewer.enableFuzzyMatching(!treeViewer
+			.isFuzzyMatchingEnabled());
+		viewState.setFuzzyMatchingEnabled(treeViewer
+			.isFuzzyMatchingEnabled());
+		refreshSearchbarState();
+	    }
+	};
+	enableFuzzyMatching.setText("Fuzzy-Matching");
+	enableFuzzyMatching
+		.setDescription("Enables Fuzzy matching for searching Resource-Bundle entries.");
+	enableFuzzyMatching.setChecked(viewState.isFuzzyMatchingEnabled());
+	enableFuzzyMatching
+		.setToolTipText(enableFuzzyMatching.getDescription());
+
+	editable = new Action() {
+	    public void run() {
+		super.run();
+		treeViewer.setEditable(!treeViewer.isEditable());
+		viewState.setEditable(treeViewer.isEditable());
+	    }
+	};
+	editable.setText("Editable");
+	editable.setDescription("Allows you to edit Resource-Bundle entries.");
+	editable.setChecked(viewState.isEditable());
+	editable.setToolTipText(editable.getDescription());
+    }
+
+    private void contributeToActionBars() {
+	IActionBars bars = getViewSite().getActionBars();
+	fillLocalPullDown(bars.getMenuManager());
+	fillLocalToolBar(bars.getToolBarManager());
+    }
+
+    private void fillLocalPullDown(IMenuManager manager) {
+	manager.removeAll();
+	manager.add(selectResourceBundle);
+	manager.add(enableFuzzyMatching);
+	manager.add(editable);
+	manager.add(new Separator());
+
+	manager.add(contextDependentMenu);
+	manager.add(new Separator());
+
+	if (visibleLocaleActions == null)
+	    return;
+
+	for (Action loc : visibleLocaleActions) {
+	    manager.add(loc);
+	}
+    }
+
+    /*** CONTEXT MENU ***/
+    private void hookContextMenu() {
+	new UIJob("set PopupMenu") {
+	    @Override
+	    public IStatus runInUIThread(IProgressMonitor monitor) {
+		if (!treeViewer.isDisposed()) {
+		    MenuManager menuMgr = new MenuManager("#PopupMenu");
+		    menuMgr.setRemoveAllWhenShown(true);
+		    menuMgr.addMenuListener(new IMenuListener() {
+			public void menuAboutToShow(IMenuManager manager) {
+			    fillContextMenu(manager);
+			}
+		    });
+		    Menu menu = menuMgr.createContextMenu(treeViewer
+			    .getViewer().getControl());
+		    treeViewer.getViewer().getControl().setMenu(menu);
+		    getViewSite().registerContextMenu(menuMgr,
+			    treeViewer.getViewer());
+		}
+		return Status.OK_STATUS;
+	    }
+	}.schedule();
+    }
+
+    private void fillContextMenu(IMenuManager manager) {
+	manager.removeAll();
+	manager.add(selectResourceBundle);
+	manager.add(enableFuzzyMatching);
+	manager.add(editable);
+	manager.add(new Separator());
+
+	manager.add(new ResourceBundleEntry(treeViewer, treeViewer.getViewer()
+		.getSelection()));
+	manager.add(new Separator());
+
+	for (Action loc : visibleLocaleActions) {
+	    manager.add(loc);
+	}
+	// Other plug-ins can contribute there actions here
+	// manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+    }
+
+    private void fillLocalToolBar(IToolBarManager manager) {
+	manager.add(selectResourceBundle);
+    }
+
+    @Override
+    public void saveState(IMemento memento) {
+	super.saveState(memento);
+	try {
+	    viewState.setEditable(treeViewer.isEditable());
+	    viewState.setSortings(treeViewer.getSortInfo());
+	    viewState.setSearchString(treeViewer.getSearchString());
+	    viewState.setFuzzyMatchingEnabled(treeViewer
+		    .isFuzzyMatchingEnabled());
+	    viewState.setMatchingPrecision(treeViewer.getMatchingPrecision());
+	    viewState.saveState(memento);
+	} catch (Exception e) {
+	}
+    }
+
+    @Override
+    public void init(IViewSite site, IMemento memento) throws PartInitException {
+	super.init(site, memento);
+
+	// init Viewstate
+	viewState = new MessagesViewState(null, null, false, null);
+	viewState.init(memento);
+    }
+
+    @Override
+    public void resourceBundleChanged(ResourceBundleChangedEvent event) {
+	try {
+	    if (!event.getBundle().equals(treeViewer.getResourceBundle()))
+		return;
+
+	    switch (event.getType()) {
+	    case ResourceBundleChangedEvent.ADDED:
+		// update visible locales within the context menu
+		makeVisibleLocalesActions();
+		hookContextMenu();
+		break;
+	    case ResourceBundleChangedEvent.DELETED:
+	    case ResourceBundleChangedEvent.EXCLUDED:
+		if (viewState.getSelectedProjectName().trim().length() > 0) {
+		    try {
+			ResourceBundleManager.getManager(
+				viewState.getSelectedProjectName())
+				.unregisterResourceBundleChangeListener(
+					viewState.getSelectedBundleId(), this);
+
+		    } catch (Exception e) {
+		    }
+		}
+		viewState = new MessagesViewState(null, null, false, null);
+
+		new Thread(new Runnable() {
+
+		    public void run() {
+			try {
+			    Thread.sleep(500);
+			} catch (Exception e) {
+			}
+			Display.getDefault().asyncExec(new Runnable() {
+			    public void run() {
+				try {
+				    redrawTreeViewer();
+				} catch (Exception e) {
+				    Logger.logError(e);
+				}
+			    }
+			});
+
+		    }
+		}).start();
+	    }
+	} catch (Exception e) {
+	    Logger.logError(e);
+	}
+    }
+
+    @Override
+    public void dispose() {
+	try {
+	    super.dispose();
+	    treeViewer.dispose();
+	    ResourceBundleManager
+		    .getManager(viewState.getSelectedProjectName())
+		    .unregisterResourceBundleChangeListener(
+			    viewState.getSelectedBundleId(), this);
+	} catch (Exception e) {
+	}
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/MessagesViewState.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/MessagesViewState.java
new file mode 100644
index 0000000..6c7a2d4
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/MessagesViewState.java
@@ -0,0 +1,217 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.views.messagesview;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+import org.eclipse.ui.IMemento;
+
+public class MessagesViewState {
+
+    private static final String TAG_VISIBLE_LOCALES = "visible_locales";
+    private static final String TAG_LOCALE = "locale";
+    private static final String TAG_LOCALE_LANGUAGE = "language";
+    private static final String TAG_LOCALE_COUNTRY = "country";
+    private static final String TAG_LOCALE_VARIANT = "variant";
+    private static final String TAG_FUZZY_MATCHING = "fuzzy_matching";
+    private static final String TAG_MATCHING_PRECISION = "matching_precision";
+    private static final String TAG_SELECTED_PROJECT = "selected_project";
+    private static final String TAG_SELECTED_BUNDLE = "selected_bundle";
+    private static final String TAG_ENABLED = "enabled";
+    private static final String TAG_VALUE = "value";
+    private static final String TAG_SEARCH_STRING = "search_string";
+    private static final String TAG_EDITABLE = "editable";
+
+    private List<Locale> visibleLocales;
+    private SortInfo sortings;
+    private boolean fuzzyMatchingEnabled;
+    private float matchingPrecision = .75f;
+    private String selectedProjectName;
+    private String selectedBundleId;
+    private String searchString;
+    private boolean editable;
+
+    public void saveState(IMemento memento) {
+	try {
+	    if (memento == null)
+		return;
+
+	    if (visibleLocales != null) {
+		IMemento memVL = memento.createChild(TAG_VISIBLE_LOCALES);
+		for (Locale loc : visibleLocales) {
+		    IMemento memLoc = memVL.createChild(TAG_LOCALE);
+		    memLoc.putString(TAG_LOCALE_LANGUAGE, loc.getLanguage());
+		    memLoc.putString(TAG_LOCALE_COUNTRY, loc.getCountry());
+		    memLoc.putString(TAG_LOCALE_VARIANT, loc.getVariant());
+		}
+	    }
+
+	    if (sortings != null) {
+		sortings.saveState(memento);
+	    }
+
+	    IMemento memFuzzyMatching = memento.createChild(TAG_FUZZY_MATCHING);
+	    memFuzzyMatching.putBoolean(TAG_ENABLED, fuzzyMatchingEnabled);
+
+	    IMemento memMatchingPrec = memento
+		    .createChild(TAG_MATCHING_PRECISION);
+	    memMatchingPrec.putFloat(TAG_VALUE, matchingPrecision);
+
+	    selectedProjectName = selectedProjectName != null ? selectedProjectName
+		    : "";
+	    selectedBundleId = selectedBundleId != null ? selectedBundleId : "";
+
+	    IMemento memSP = memento.createChild(TAG_SELECTED_PROJECT);
+	    memSP.putString(TAG_VALUE, selectedProjectName);
+
+	    IMemento memSB = memento.createChild(TAG_SELECTED_BUNDLE);
+	    memSB.putString(TAG_VALUE, selectedBundleId);
+
+	    IMemento memSStr = memento.createChild(TAG_SEARCH_STRING);
+	    memSStr.putString(TAG_VALUE, searchString);
+
+	    IMemento memEditable = memento.createChild(TAG_EDITABLE);
+	    memEditable.putBoolean(TAG_ENABLED, editable);
+	} catch (Exception e) {
+
+	}
+    }
+
+    public void init(IMemento memento) {
+	if (memento == null)
+	    return;
+
+	if (memento.getChild(TAG_VISIBLE_LOCALES) != null) {
+	    if (visibleLocales == null)
+		visibleLocales = new ArrayList<Locale>();
+	    IMemento[] mLocales = memento.getChild(TAG_VISIBLE_LOCALES)
+		    .getChildren(TAG_LOCALE);
+	    for (IMemento mLocale : mLocales) {
+		if (mLocale.getString(TAG_LOCALE_LANGUAGE) == null
+			&& mLocale.getString(TAG_LOCALE_COUNTRY) == null
+			&& mLocale.getString(TAG_LOCALE_VARIANT) == null) {
+		    continue;
+		}
+		Locale newLocale = new Locale(
+			mLocale.getString(TAG_LOCALE_LANGUAGE),
+			mLocale.getString(TAG_LOCALE_COUNTRY),
+			mLocale.getString(TAG_LOCALE_VARIANT));
+		if (!this.visibleLocales.contains(newLocale)) {
+		    visibleLocales.add(newLocale);
+		}
+	    }
+	}
+
+	if (sortings == null)
+	    sortings = new SortInfo();
+	sortings.init(memento);
+
+	IMemento mFuzzyMatching = memento.getChild(TAG_FUZZY_MATCHING);
+	if (mFuzzyMatching != null)
+	    fuzzyMatchingEnabled = mFuzzyMatching.getBoolean(TAG_ENABLED);
+
+	IMemento mMP = memento.getChild(TAG_MATCHING_PRECISION);
+	if (mMP != null)
+	    matchingPrecision = mMP.getFloat(TAG_VALUE);
+
+	IMemento mSelProj = memento.getChild(TAG_SELECTED_PROJECT);
+	if (mSelProj != null)
+	    selectedProjectName = mSelProj.getString(TAG_VALUE);
+
+	IMemento mSelBundle = memento.getChild(TAG_SELECTED_BUNDLE);
+	if (mSelBundle != null)
+	    selectedBundleId = mSelBundle.getString(TAG_VALUE);
+
+	IMemento mSStr = memento.getChild(TAG_SEARCH_STRING);
+	if (mSStr != null)
+	    searchString = mSStr.getString(TAG_VALUE);
+
+	IMemento mEditable = memento.getChild(TAG_EDITABLE);
+	if (mEditable != null)
+	    editable = mEditable.getBoolean(TAG_ENABLED);
+    }
+
+    public MessagesViewState(List<Locale> visibleLocales, SortInfo sortings,
+	    boolean fuzzyMatchingEnabled, String selectedBundleId) {
+	super();
+	this.visibleLocales = visibleLocales;
+	this.sortings = sortings;
+	this.fuzzyMatchingEnabled = fuzzyMatchingEnabled;
+	this.selectedBundleId = selectedBundleId;
+    }
+
+    public List<Locale> getVisibleLocales() {
+	return visibleLocales;
+    }
+
+    public void setVisibleLocales(List<Locale> visibleLocales) {
+	this.visibleLocales = visibleLocales;
+    }
+
+    public SortInfo getSortings() {
+	return sortings;
+    }
+
+    public void setSortings(SortInfo sortings) {
+	this.sortings = sortings;
+    }
+
+    public boolean isFuzzyMatchingEnabled() {
+	return fuzzyMatchingEnabled;
+    }
+
+    public void setFuzzyMatchingEnabled(boolean fuzzyMatchingEnabled) {
+	this.fuzzyMatchingEnabled = fuzzyMatchingEnabled;
+    }
+
+    public void setSelectedBundleId(String selectedBundleId) {
+	this.selectedBundleId = selectedBundleId;
+    }
+
+    public void setSelectedProjectName(String selectedProjectName) {
+	this.selectedProjectName = selectedProjectName;
+    }
+
+    public void setSearchString(String searchString) {
+	this.searchString = searchString;
+    }
+
+    public String getSelectedBundleId() {
+	return selectedBundleId;
+    }
+
+    public String getSelectedProjectName() {
+	return selectedProjectName;
+    }
+
+    public String getSearchString() {
+	return searchString;
+    }
+
+    public boolean isEditable() {
+	return editable;
+    }
+
+    public void setEditable(boolean editable) {
+	this.editable = editable;
+    }
+
+    public float getMatchingPrecision() {
+	return matchingPrecision;
+    }
+
+    public void setMatchingPrecision(float value) {
+	this.matchingPrecision = value;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/ResourceBundleEntry.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/ResourceBundleEntry.java
new file mode 100644
index 0000000..9bc7dec
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/ResourceBundleEntry.java
@@ -0,0 +1,124 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.views.messagesview;
+
+import org.eclipse.babel.tapiji.tools.core.ui.widgets.PropertyKeySelectionTree;
+import org.eclipse.jface.action.ContributionItem;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+
+public class ResourceBundleEntry extends ContributionItem implements
+	ISelectionChangedListener {
+
+    private PropertyKeySelectionTree parentView;
+    private ISelection selection;
+    private boolean legalSelection = false;
+
+    // Menu-Items
+    private MenuItem addItem;
+    private MenuItem editItem;
+    private MenuItem removeItem;
+
+    public ResourceBundleEntry() {
+    }
+
+    public ResourceBundleEntry(PropertyKeySelectionTree view,
+	    ISelection selection) {
+	this.selection = selection;
+	this.legalSelection = !selection.isEmpty();
+	this.parentView = view;
+	parentView.addSelectionChangedListener(this);
+    }
+
+    @Override
+    public void fill(Menu menu, int index) {
+
+	// MenuItem for adding a new entry
+	addItem = new MenuItem(menu, SWT.NONE, index);
+	addItem.setText("Add ...");
+	addItem.setImage(PlatformUI.getWorkbench().getSharedImages()
+		.getImageDescriptor(ISharedImages.IMG_OBJ_ADD).createImage());
+	addItem.addSelectionListener(new SelectionListener() {
+
+	    @Override
+	    public void widgetSelected(SelectionEvent e) {
+		parentView.addNewItem(selection);
+	    }
+
+	    @Override
+	    public void widgetDefaultSelected(SelectionEvent e) {
+
+	    }
+	});
+
+	if ((parentView == null && legalSelection) || parentView != null) {
+	    // MenuItem for editing the currently selected entry
+	    editItem = new MenuItem(menu, SWT.NONE, index + 1);
+	    editItem.setText("Edit");
+	    editItem.addSelectionListener(new SelectionListener() {
+
+		@Override
+		public void widgetSelected(SelectionEvent e) {
+		    parentView.editSelectedItem();
+		}
+
+		@Override
+		public void widgetDefaultSelected(SelectionEvent e) {
+
+		}
+	    });
+
+	    // MenuItem for deleting the currently selected entry
+	    removeItem = new MenuItem(menu, SWT.NONE, index + 2);
+	    removeItem.setText("Remove");
+	    removeItem.setImage(PlatformUI.getWorkbench().getSharedImages()
+		    .getImageDescriptor(ISharedImages.IMG_ETOOL_DELETE)
+		    .createImage());
+	    removeItem.addSelectionListener(new SelectionListener() {
+
+		@Override
+		public void widgetSelected(SelectionEvent e) {
+		    parentView.deleteSelectedItems();
+		}
+
+		@Override
+		public void widgetDefaultSelected(SelectionEvent e) {
+
+		}
+	    });
+	    enableMenuItems();
+	}
+    }
+
+    protected void enableMenuItems() {
+	try {
+	    editItem.setEnabled(legalSelection);
+	    removeItem.setEnabled(legalSelection);
+	} catch (Exception e) {
+	    // silent catch
+	}
+    }
+
+    @Override
+    public void selectionChanged(SelectionChangedEvent event) {
+	legalSelection = !event.getSelection().isEmpty();
+	// enableMenuItems ();
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/SortInfo.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/SortInfo.java
new file mode 100644
index 0000000..0744235
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/SortInfo.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.views.messagesview;
+
+import java.util.List;
+import java.util.Locale;
+
+import org.eclipse.ui.IMemento;
+
+public class SortInfo {
+
+    public static final String TAG_SORT_INFO = "sort_info";
+    public static final String TAG_COLUMN_INDEX = "col_idx";
+    public static final String TAG_ORDER = "order";
+
+    private int colIdx;
+    private boolean DESC;
+    private List<Locale> visibleLocales;
+
+    public void setDESC(boolean dESC) {
+	DESC = dESC;
+    }
+
+    public boolean isDESC() {
+	return DESC;
+    }
+
+    public void setColIdx(int colIdx) {
+	this.colIdx = colIdx;
+    }
+
+    public int getColIdx() {
+	return colIdx;
+    }
+
+    public void setVisibleLocales(List<Locale> visibleLocales) {
+	this.visibleLocales = visibleLocales;
+    }
+
+    public List<Locale> getVisibleLocales() {
+	return visibleLocales;
+    }
+
+    public void saveState(IMemento memento) {
+	IMemento mCI = memento.createChild(TAG_SORT_INFO);
+	mCI.putInteger(TAG_COLUMN_INDEX, colIdx);
+	mCI.putBoolean(TAG_ORDER, DESC);
+    }
+
+    public void init(IMemento memento) {
+	IMemento mCI = memento.getChild(TAG_SORT_INFO);
+	if (mCI == null)
+	    return;
+	colIdx = mCI.getInteger(TAG_COLUMN_INDEX);
+	DESC = mCI.getBoolean(TAG_ORDER);
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/dnd/KeyTreeItemDropTarget.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/dnd/KeyTreeItemDropTarget.java
new file mode 100644
index 0000000..3033bad
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/dnd/KeyTreeItemDropTarget.java
@@ -0,0 +1,180 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer, Matthias Lettmayer, Alexej Strelzow.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ *     Matthias Lettmayer - added functionality to dnd a tree with children (fixed issue 5) 
+ *     Alexej Strelzow - dnd bug fixes
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.views.messagesview.dnd;
+
+import org.eclipse.babel.core.configuration.DirtyHack;
+import org.eclipse.babel.core.factory.MessageFactory;
+import org.eclipse.babel.core.message.IMessage;
+import org.eclipse.babel.core.message.IMessagesBundle;
+import org.eclipse.babel.core.message.IMessagesBundleGroup;
+import org.eclipse.babel.core.message.internal.MessagesBundleGroup;
+import org.eclipse.babel.core.message.manager.RBManager;
+import org.eclipse.babel.core.message.tree.IAbstractKeyTreeModel;
+import org.eclipse.babel.core.message.tree.IKeyTreeNode;
+import org.eclipse.babel.editor.api.IValuedKeyTreeNode;
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.babel.tapiji.tools.core.ui.widgets.provider.ResKeyTreeContentProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTargetAdapter;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.TreeItem;
+
+public class KeyTreeItemDropTarget extends DropTargetAdapter {
+    private final TreeViewer target;
+
+    public KeyTreeItemDropTarget(TreeViewer viewer) {
+	super();
+	this.target = viewer;
+    }
+
+    public void dragEnter(DropTargetEvent event) {
+	// if (((DropTarget)event.getSource()).getControl() instanceof Tree)
+	// event.detail = DND.DROP_MOVE;
+    }
+
+    private void addBundleEntries(final String keyPrefix, // new prefix
+	    final IKeyTreeNode children, final IMessagesBundleGroup bundleGroup) {
+
+	try {
+	    String oldKey = children.getMessageKey();
+	    String key = children.getName();
+	    String newKey = keyPrefix + "." + key;
+
+	    IMessage[] messages = bundleGroup.getMessages(oldKey);
+	    for (IMessage message : messages) {
+		IMessagesBundle messagesBundle = bundleGroup
+			.getMessagesBundle(message.getLocale());
+		IMessage m = MessageFactory.createMessage(newKey,
+			message.getLocale());
+		m.setText(message.getValue());
+		m.setComment(message.getComment());
+		messagesBundle.addMessage(m);
+	    }
+
+	    if (messages.length == 0) {
+		bundleGroup.addMessages(newKey);
+	    }
+
+	    for (IKeyTreeNode childs : children.getChildren()) {
+		addBundleEntries(keyPrefix + "." + key, childs, bundleGroup);
+	    }
+
+	} catch (Exception e) {
+	    Logger.logError(e);
+	}
+
+    }
+
+    private void remBundleEntries(IKeyTreeNode children,
+	    IMessagesBundleGroup group) {
+	String key = children.getMessageKey();
+
+	for (IKeyTreeNode childs : children.getChildren()) {
+	    remBundleEntries(childs, group);
+	}
+
+	group.removeMessagesAddParentKey(key);
+    }
+
+    public void drop(final DropTargetEvent event) {
+	Display.getDefault().asyncExec(new Runnable() {
+	    public void run() {
+		try {
+
+		    if (TextTransfer.getInstance().isSupportedType(
+			    event.currentDataType)) {
+			String newKeyPrefix = "";
+
+			if (event.item instanceof TreeItem
+				&& ((TreeItem) event.item).getData() instanceof IValuedKeyTreeNode) {
+			    IValuedKeyTreeNode targetTreeNode = (IValuedKeyTreeNode) ((TreeItem) event.item)
+				    .getData();
+			    newKeyPrefix = targetTreeNode.getMessageKey();
+			}
+
+			String message = (String) event.data;
+			String oldKey = message.replaceAll("\"", "");
+
+			String[] keyArr = (oldKey).split("\\.");
+			String key = keyArr[keyArr.length - 1];
+
+			ResKeyTreeContentProvider contentProvider = (ResKeyTreeContentProvider) target
+				.getContentProvider();
+			IAbstractKeyTreeModel keyTree = (IAbstractKeyTreeModel) target
+				.getInput();
+
+			// key gets dropped into it's parent node
+			if (oldKey.equals(newKeyPrefix + "." + key))
+			    return; // TODO: give user feedback
+
+			// prevent cycle loop if key gets dropped into its child
+			// node
+			if (newKeyPrefix.contains(oldKey))
+			    return; // TODO: give user feedback
+
+			// source node already exists in target
+			IKeyTreeNode targetTreeNode = keyTree
+				.getChild(newKeyPrefix);
+			for (IKeyTreeNode targetChild : targetTreeNode
+				.getChildren()) {
+			    if (targetChild.getName().equals(key))
+				return; // TODO: give user feedback
+			}
+
+			IKeyTreeNode sourceTreeNode = keyTree.getChild(oldKey);
+
+			IMessagesBundleGroup bundleGroup = contentProvider
+				.getBundle();
+
+			DirtyHack.setFireEnabled(false);
+			DirtyHack.setEditorModificationEnabled(false); // editor
+								       // won't
+								       // get
+								       // dirty
+
+			// add new bundle entries of source node + all children
+			addBundleEntries(newKeyPrefix, sourceTreeNode,
+				bundleGroup);
+
+			// if drag & drop is move event, delete source entry +
+			// it's children
+			if (event.detail == DND.DROP_MOVE) {
+			    remBundleEntries(sourceTreeNode, bundleGroup);
+			}
+
+			// Store changes
+			RBManager manager = RBManager
+				.getInstance(((MessagesBundleGroup) bundleGroup)
+					.getProjectName());
+
+			manager.writeToFile(bundleGroup);
+			manager.fireEditorChanged(); // refresh the View
+
+			target.refresh();
+		    } else {
+			event.detail = DND.DROP_NONE;
+		    }
+
+		} catch (Exception e) {
+		    Logger.logError(e);
+		} finally {
+		    DirtyHack.setFireEnabled(true);
+		    DirtyHack.setEditorModificationEnabled(true);
+		}
+	    }
+	});
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/dnd/KeyTreeItemTransfer.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/dnd/KeyTreeItemTransfer.java
new file mode 100644
index 0000000..0739878
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/dnd/KeyTreeItemTransfer.java
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.views.messagesview.dnd;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.babel.core.message.tree.IKeyTreeNode;
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.swt.dnd.ByteArrayTransfer;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.TransferData;
+
+public class KeyTreeItemTransfer extends ByteArrayTransfer {
+
+    private static final String KEY_TREE_ITEM = "keyTreeItem";
+
+    private static final int TYPEID = registerType(KEY_TREE_ITEM);
+
+    private static KeyTreeItemTransfer transfer = new KeyTreeItemTransfer();
+
+    public static KeyTreeItemTransfer getInstance() {
+	return transfer;
+    }
+
+    public void javaToNative(Object object, TransferData transferData) {
+	if (!checkType(object) || !isSupportedType(transferData)) {
+	    DND.error(DND.ERROR_INVALID_DATA);
+	}
+	IKeyTreeNode[] terms = (IKeyTreeNode[]) object;
+	try {
+	    ByteArrayOutputStream out = new ByteArrayOutputStream();
+	    ObjectOutputStream oOut = new ObjectOutputStream(out);
+	    for (int i = 0, length = terms.length; i < length; i++) {
+		oOut.writeObject(terms[i]);
+	    }
+	    byte[] buffer = out.toByteArray();
+	    oOut.close();
+
+	    super.javaToNative(buffer, transferData);
+	} catch (IOException e) {
+	    Logger.logError(e);
+	}
+    }
+
+    public Object nativeToJava(TransferData transferData) {
+	if (isSupportedType(transferData)) {
+
+	    byte[] buffer;
+	    try {
+		buffer = (byte[]) super.nativeToJava(transferData);
+	    } catch (Exception e) {
+		Logger.logError(e);
+		buffer = null;
+	    }
+	    if (buffer == null)
+		return null;
+
+	    List<IKeyTreeNode> terms = new ArrayList<IKeyTreeNode>();
+	    try {
+		ByteArrayInputStream in = new ByteArrayInputStream(buffer);
+		ObjectInputStream readIn = new ObjectInputStream(in);
+		// while (readIn.available() > 0) {
+		IKeyTreeNode newTerm = (IKeyTreeNode) readIn.readObject();
+		terms.add(newTerm);
+		// }
+		readIn.close();
+	    } catch (Exception ex) {
+		Logger.logError(ex);
+		return null;
+	    }
+	    return terms.toArray(new IKeyTreeNode[terms.size()]);
+	}
+
+	return null;
+    }
+
+    protected String[] getTypeNames() {
+	return new String[] { KEY_TREE_ITEM };
+    }
+
+    protected int[] getTypeIds() {
+	return new int[] { TYPEID };
+    }
+
+    boolean checkType(Object object) {
+	if (object == null || !(object instanceof IKeyTreeNode[])
+		|| ((IKeyTreeNode[]) object).length == 0) {
+	    return false;
+	}
+	IKeyTreeNode[] myTypes = (IKeyTreeNode[]) object;
+	for (int i = 0; i < myTypes.length; i++) {
+	    if (myTypes[i] == null) {
+		return false;
+	    }
+	}
+	return true;
+    }
+
+    protected boolean validate(Object object) {
+	return checkType(object);
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/dnd/MessagesDragSource.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/dnd/MessagesDragSource.java
new file mode 100644
index 0000000..d6c0094
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/dnd/MessagesDragSource.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.views.messagesview.dnd;
+
+import org.eclipse.babel.core.message.tree.IKeyTreeNode;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.swt.dnd.DragSourceListener;
+
+public class MessagesDragSource implements DragSourceListener {
+
+    private final TreeViewer source;
+    private String bundleId;
+
+    public MessagesDragSource(TreeViewer sourceView, String bundleId) {
+	source = sourceView;
+	this.bundleId = bundleId;
+    }
+
+    @Override
+    public void dragFinished(DragSourceEvent event) {
+
+    }
+
+    @Override
+    public void dragSetData(DragSourceEvent event) {
+	IKeyTreeNode selectionObject = (IKeyTreeNode) ((IStructuredSelection) source
+		.getSelection()).toList().get(0);
+
+	String key = selectionObject.getMessageKey();
+
+	// TODO Solve the problem that its not possible to retrieve the editor
+	// position of the drop event
+
+	// event.data = "(new ResourceBundle(\"" + bundleId +
+	// "\")).getString(\"" + key + "\")";
+	event.data = "\"" + key + "\"";
+    }
+
+    @Override
+    public void dragStart(DragSourceEvent event) {
+	event.doit = !source.getSelection().isEmpty();
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/dnd/MessagesDropTarget.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/dnd/MessagesDropTarget.java
new file mode 100644
index 0000000..8d0906a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/views/messagesview/dnd/MessagesDropTarget.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer, Alexej Strelzow.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ *     Alexej Strelzow - modified CreateResourceBundleEntryDialog instantiation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.views.messagesview.dnd;
+
+import org.eclipse.babel.editor.api.IValuedKeyTreeNode;
+import org.eclipse.babel.tapiji.tools.core.ui.dialogs.CreateResourceBundleEntryDialog;
+import org.eclipse.babel.tapiji.tools.core.ui.dialogs.CreateResourceBundleEntryDialog.DialogConfiguration;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTargetAdapter;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.TreeItem;
+
+public class MessagesDropTarget extends DropTargetAdapter {
+    private final String projectName;
+    private String bundleName;
+
+    public MessagesDropTarget(TreeViewer viewer, String projectName,
+	    String bundleName) {
+	super();
+	this.projectName = projectName;
+	this.bundleName = bundleName;
+    }
+
+    public void dragEnter(DropTargetEvent event) {
+    }
+
+    public void drop(DropTargetEvent event) {
+	if (event.detail != DND.DROP_COPY)
+	    return;
+
+	if (TextTransfer.getInstance().isSupportedType(event.currentDataType)) {
+	    // event.feedback = DND.FEEDBACK_INSERT_BEFORE;
+	    String newKeyPrefix = "";
+
+	    if (event.item instanceof TreeItem
+		    && ((TreeItem) event.item).getData() instanceof IValuedKeyTreeNode) {
+		newKeyPrefix = ((IValuedKeyTreeNode) ((TreeItem) event.item)
+			.getData()).getMessageKey();
+	    }
+
+	    String message = (String) event.data;
+
+	    CreateResourceBundleEntryDialog dialog = new CreateResourceBundleEntryDialog(
+		    Display.getDefault().getActiveShell());
+
+	    DialogConfiguration config = dialog.new DialogConfiguration();
+	    config.setPreselectedKey(newKeyPrefix.trim().length() > 0 ? newKeyPrefix
+		    + "." + "[Platzhalter]"
+		    : "");
+	    config.setPreselectedMessage(message);
+	    config.setPreselectedBundle(bundleName);
+	    config.setPreselectedLocale("");
+	    config.setProjectName(projectName);
+
+	    dialog.setDialogConfiguration(config);
+
+	    if (dialog.open() != InputDialog.OK)
+		return;
+	} else
+	    event.detail = DND.DROP_NONE;
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/MVTextTransfer.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/MVTextTransfer.java
new file mode 100644
index 0000000..17381c2
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/MVTextTransfer.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.widgets;
+
+public class MVTextTransfer {
+
+    private MVTextTransfer() {
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/PropertyKeySelectionTree.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/PropertyKeySelectionTree.java
new file mode 100644
index 0000000..b4900a4
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/PropertyKeySelectionTree.java
@@ -0,0 +1,815 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer, Clemente Lodi-Fe, Matthias Lettmayer, Alexej Strelzow.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ *     Clemente Lodi-Fe - bug fix
+ *     Matthias Lettmayer - key traversal + updating tree improvement (fixed issue 22)
+ *                        - fixed editSelectedItem() to open an editor and select the key (fixed issue 59)
+ *     Alexej Strelzow - modified CreateResourceBundleEntryDialog instantiation
+ *                     - tree expand, Babel integration
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.widgets;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+import org.eclipse.babel.core.configuration.DirtyHack;
+import org.eclipse.babel.core.factory.MessageFactory;
+import org.eclipse.babel.core.message.IMessage;
+import org.eclipse.babel.core.message.IMessagesBundle;
+import org.eclipse.babel.core.message.IMessagesBundleGroup;
+import org.eclipse.babel.core.message.manager.IMessagesEditorListener;
+import org.eclipse.babel.core.message.manager.RBManager;
+import org.eclipse.babel.core.message.tree.IAbstractKeyTreeModel;
+import org.eclipse.babel.core.message.tree.IKeyTreeNode;
+import org.eclipse.babel.core.message.tree.TreeType;
+import org.eclipse.babel.core.util.FileUtils;
+import org.eclipse.babel.editor.api.IValuedKeyTreeNode;
+import org.eclipse.babel.editor.api.KeyTreeFactory;
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.babel.tapiji.tools.core.model.IResourceBundleChangedListener;
+import org.eclipse.babel.tapiji.tools.core.model.manager.ResourceBundleChangedEvent;
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.dialogs.CreateResourceBundleEntryDialog;
+import org.eclipse.babel.tapiji.tools.core.ui.dialogs.CreateResourceBundleEntryDialog.DialogConfiguration;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.EditorUtils;
+import org.eclipse.babel.tapiji.tools.core.ui.views.messagesview.SortInfo;
+import org.eclipse.babel.tapiji.tools.core.ui.views.messagesview.dnd.KeyTreeItemDropTarget;
+import org.eclipse.babel.tapiji.tools.core.ui.views.messagesview.dnd.MessagesDragSource;
+import org.eclipse.babel.tapiji.tools.core.ui.views.messagesview.dnd.MessagesDropTarget;
+import org.eclipse.babel.tapiji.tools.core.ui.widgets.filter.ExactMatcher;
+import org.eclipse.babel.tapiji.tools.core.ui.widgets.filter.FuzzyMatcher;
+import org.eclipse.babel.tapiji.tools.core.ui.widgets.provider.ResKeyTreeContentProvider;
+import org.eclipse.babel.tapiji.tools.core.ui.widgets.provider.ResKeyTreeLabelProvider;
+import org.eclipse.babel.tapiji.tools.core.ui.widgets.sorter.ValuedKeyTreeItemSorter;
+import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.layout.TreeColumnLayout;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.EditingSupport;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.IElementComparer;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TextCellEditor;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.TreeViewerColumn;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DragSource;
+import org.eclipse.swt.dnd.DropTarget;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.events.TraverseEvent;
+import org.eclipse.swt.events.TraverseListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+public class PropertyKeySelectionTree extends Composite implements
+	IResourceBundleChangedListener {
+
+    private final int KEY_COLUMN_WEIGHT = 1;
+    private final int LOCALE_COLUMN_WEIGHT = 1;
+
+    private List<Locale> visibleLocales = new ArrayList<Locale>();
+    private boolean editable;
+    private String resourceBundle;
+
+    private IWorkbenchPartSite site;
+    private TreeColumnLayout basicLayout;
+    private TreeViewer treeViewer;
+    private TreeColumn keyColumn;
+    private boolean grouped = true;
+    private boolean fuzzyMatchingEnabled = false;
+    private float matchingPrecision = .75f;
+    private Locale uiLocale = new Locale("en");
+
+    private SortInfo sortInfo;
+
+    private ResKeyTreeContentProvider contentProvider;
+    private ResKeyTreeLabelProvider labelProvider;
+    private TreeType treeType = TreeType.Tree;
+
+    private IMessagesEditorListener editorListener;
+
+    /*** MATCHER ***/
+    ExactMatcher matcher;
+
+    /*** SORTER ***/
+    ValuedKeyTreeItemSorter sorter;
+
+    /*** ACTIONS ***/
+    private Action doubleClickAction;
+
+    /*** LISTENERS ***/
+    private ISelectionChangedListener selectionChangedListener;
+    private String projectName;
+
+    public PropertyKeySelectionTree(IViewSite viewSite,
+	    IWorkbenchPartSite site, Composite parent, int style,
+	    String projectName, String resources, List<Locale> locales) {
+	super(parent, style);
+	this.site = site;
+	this.resourceBundle = resources;
+	this.projectName = projectName;
+
+	if (resourceBundle != null && resourceBundle.trim().length() > 0) {
+	    if (locales == null)
+		initVisibleLocales();
+	    else
+		this.visibleLocales = locales;
+	}
+
+	constructWidget();
+
+	if (resourceBundle != null && resourceBundle.trim().length() > 0) {
+	    initTreeViewer();
+	    initMatchers();
+	    initSorters();
+	    treeViewer.expandAll();
+	}
+
+	hookDragAndDrop();
+	registerListeners();
+    }
+
+    @Override
+    public void dispose() {
+	super.dispose();
+	unregisterListeners();
+    }
+
+    protected void initSorters() {
+	sorter = new ValuedKeyTreeItemSorter(treeViewer, sortInfo);
+	treeViewer.setSorter(sorter);
+    }
+
+    public void enableFuzzyMatching(boolean enable) {
+	String pattern = "";
+	if (matcher != null) {
+	    pattern = matcher.getPattern();
+
+	    if (!fuzzyMatchingEnabled && enable) {
+		if (matcher.getPattern().trim().length() > 1
+			&& matcher.getPattern().startsWith("*")
+			&& matcher.getPattern().endsWith("*"))
+		    pattern = pattern.substring(1).substring(0,
+			    pattern.length() - 2);
+		matcher.setPattern(null);
+	    }
+	}
+	fuzzyMatchingEnabled = enable;
+	initMatchers();
+
+	matcher.setPattern(pattern);
+	treeViewer.refresh();
+    }
+
+    public boolean isFuzzyMatchingEnabled() {
+	return fuzzyMatchingEnabled;
+    }
+
+    protected void initMatchers() {
+	treeViewer.resetFilters();
+
+	if (fuzzyMatchingEnabled) {
+	    matcher = new FuzzyMatcher(treeViewer);
+	    ((FuzzyMatcher) matcher).setMinimumSimilarity(matchingPrecision);
+	} else
+	    matcher = new ExactMatcher(treeViewer);
+
+    }
+
+    protected void initTreeViewer() {
+	this.setRedraw(false);
+	// init content provider
+	contentProvider = new ResKeyTreeContentProvider(visibleLocales,
+		projectName, resourceBundle, treeType);
+	treeViewer.setContentProvider(contentProvider);
+
+	// init label provider
+	labelProvider = new ResKeyTreeLabelProvider(visibleLocales);
+	treeViewer.setLabelProvider(labelProvider);
+
+	// we need this to keep the tree expanded
+	treeViewer.setComparer(new IElementComparer() {
+
+	    @Override
+	    public int hashCode(Object element) {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result
+			+ ((toString() == null) ? 0 : toString().hashCode());
+		return result;
+	    }
+
+	    @Override
+	    public boolean equals(Object a, Object b) {
+		if (a == b) {
+		    return true;
+		}
+		if (a instanceof IKeyTreeNode && b instanceof IKeyTreeNode) {
+		    IKeyTreeNode nodeA = (IKeyTreeNode) a;
+		    IKeyTreeNode nodeB = (IKeyTreeNode) b;
+		    return nodeA.equals(nodeB);
+		}
+		return false;
+	    }
+	});
+
+	setTreeStructure();
+	this.setRedraw(true);
+    }
+
+    public void setTreeStructure() {
+	IAbstractKeyTreeModel model = KeyTreeFactory
+		.createModel(ResourceBundleManager.getManager(projectName)
+			.getResourceBundle(resourceBundle));
+	if (treeViewer.getInput() == null) {
+	    treeViewer.setUseHashlookup(true);
+	}
+	org.eclipse.jface.viewers.TreePath[] expandedTreePaths = treeViewer
+		.getExpandedTreePaths();
+	treeViewer.setInput(model);
+	treeViewer.refresh();
+	treeViewer.setExpandedTreePaths(expandedTreePaths);
+    }
+
+    protected void refreshContent(ResourceBundleChangedEvent event) {
+	if (visibleLocales == null) {
+	    initVisibleLocales();
+	}
+	ResourceBundleManager manager = ResourceBundleManager
+		.getManager(projectName);
+
+	// update content provider
+	contentProvider.setLocales(visibleLocales);
+	contentProvider.setProjectName(manager.getProject().getName());
+	contentProvider.setBundleId(resourceBundle);
+
+	// init label provider
+	IMessagesBundleGroup group = manager.getResourceBundle(resourceBundle);
+	labelProvider.setLocales(visibleLocales);
+	if (treeViewer.getLabelProvider() != labelProvider)
+	    treeViewer.setLabelProvider(labelProvider);
+
+	// define input of treeviewer
+	setTreeStructure();
+    }
+
+    protected void initVisibleLocales() {
+	SortedMap<String, Locale> locSorted = new TreeMap<String, Locale>();
+	ResourceBundleManager manager = ResourceBundleManager
+		.getManager(projectName);
+	sortInfo = new SortInfo();
+	visibleLocales.clear();
+	if (resourceBundle != null) {
+	    for (Locale l : manager.getProvidedLocales(resourceBundle)) {
+		if (l == null) {
+		    locSorted.put("Default", null);
+		} else {
+		    locSorted.put(l.getDisplayName(uiLocale), l);
+		}
+	    }
+	}
+
+	for (String lString : locSorted.keySet()) {
+	    visibleLocales.add(locSorted.get(lString));
+	}
+	sortInfo.setVisibleLocales(visibleLocales);
+    }
+
+    protected void constructWidget() {
+	basicLayout = new TreeColumnLayout();
+	this.setLayout(basicLayout);
+
+	treeViewer = new TreeViewer(this, SWT.FULL_SELECTION | SWT.SINGLE
+		| SWT.BORDER);
+	Tree tree = treeViewer.getTree();
+
+	if (resourceBundle != null) {
+	    tree.setHeaderVisible(true);
+	    tree.setLinesVisible(true);
+
+	    // create tree-columns
+	    constructTreeColumns(tree);
+	} else {
+	    tree.setHeaderVisible(false);
+	    tree.setLinesVisible(false);
+	}
+
+	makeActions();
+	hookDoubleClickAction();
+
+	// register messages table as selection provider
+	site.setSelectionProvider(treeViewer);
+    }
+
+    protected void constructTreeColumns(Tree tree) {
+	tree.removeAll();
+	// tree.getColumns().length;
+
+	// construct key-column
+	keyColumn = new TreeColumn(tree, SWT.NONE);
+	keyColumn.setText("Key");
+	keyColumn.addSelectionListener(new SelectionListener() {
+
+	    @Override
+	    public void widgetSelected(SelectionEvent e) {
+		updateSorter(0);
+	    }
+
+	    @Override
+	    public void widgetDefaultSelected(SelectionEvent e) {
+		updateSorter(0);
+	    }
+	});
+	basicLayout.setColumnData(keyColumn, new ColumnWeightData(
+		KEY_COLUMN_WEIGHT));
+
+	if (visibleLocales != null) {
+	    final ResourceBundleManager manager = ResourceBundleManager
+		    .getManager(projectName);
+	    for (final Locale l : visibleLocales) {
+		TreeColumn col = new TreeColumn(tree, SWT.NONE);
+
+		// Add editing support to this table column
+		TreeViewerColumn tCol = new TreeViewerColumn(treeViewer, col);
+		tCol.setEditingSupport(new EditingSupport(treeViewer) {
+
+		    TextCellEditor editor = null;
+
+		    @Override
+		    protected void setValue(Object element, Object value) {
+
+			if (element instanceof IValuedKeyTreeNode) {
+			    IValuedKeyTreeNode vkti = (IValuedKeyTreeNode) element;
+			    String activeKey = vkti.getMessageKey();
+
+			    if (activeKey != null) {
+				IMessagesBundleGroup bundleGroup = manager
+					.getResourceBundle(resourceBundle);
+				IMessage entry = bundleGroup.getMessage(
+					activeKey, l);
+
+				if (entry == null
+					|| !value.equals(entry.getValue())) {
+				    String comment = null;
+				    if (entry != null) {
+					comment = entry.getComment();
+				    }
+
+				    IMessagesBundle messagesBundle = bundleGroup
+					    .getMessagesBundle(l);
+
+				    DirtyHack.setFireEnabled(false);
+
+				    IMessage message = messagesBundle
+					    .getMessage(activeKey);
+				    if (message == null) {
+					IMessage newMessage = MessageFactory
+						.createMessage(activeKey, l);
+					newMessage.setText(String
+						.valueOf(value));
+					newMessage.setComment(comment);
+					messagesBundle.addMessage(newMessage);
+				    } else {
+					message.setText(String.valueOf(value));
+					message.setComment(comment);
+				    }
+
+				    FileUtils.writeToFile(messagesBundle);
+				    RBManager
+					    .getInstance(manager.getProject())
+					    .fireResourceChanged(messagesBundle);
+
+				    // update TreeViewer
+				    vkti.setValue(l, String.valueOf(value));
+				    treeViewer.refresh();
+
+				    DirtyHack.setFireEnabled(true);
+				}
+			    }
+			}
+		    }
+
+		    @Override
+		    protected Object getValue(Object element) {
+			return labelProvider.getColumnText(element,
+				visibleLocales.indexOf(l) + 1);
+		    }
+
+		    @Override
+		    protected CellEditor getCellEditor(Object element) {
+			if (editor == null) {
+			    Composite tree = (Composite) treeViewer
+				    .getControl();
+			    editor = new TextCellEditor(tree);
+			    editor.getControl().addTraverseListener(
+				    new TraverseListener() {
+
+					@Override
+					public void keyTraversed(TraverseEvent e) {
+					    Logger.logInfo("CELL_EDITOR: "
+						    + e.toString());
+					    if (e.detail == SWT.TRAVERSE_TAB_NEXT
+						    || e.detail == SWT.TRAVERSE_TAB_PREVIOUS) {
+
+						e.doit = false;
+						int colIndex = visibleLocales
+							.indexOf(l) + 1;
+						Object sel = ((IStructuredSelection) treeViewer
+							.getSelection())
+							.getFirstElement();
+						int noOfCols = treeViewer
+							.getTree()
+							.getColumnCount();
+
+						// go to next cell
+						if (e.detail == SWT.TRAVERSE_TAB_NEXT) {
+						    int nextColIndex = colIndex + 1;
+						    if (nextColIndex < noOfCols)
+							treeViewer.editElement(
+								sel,
+								nextColIndex);
+						    // go to previous cell
+						} else if (e.detail == SWT.TRAVERSE_TAB_PREVIOUS) {
+						    int prevColIndex = colIndex - 1;
+						    if (prevColIndex > 0)
+							treeViewer.editElement(
+								sel,
+								colIndex - 1);
+						}
+					    }
+					}
+				    });
+			}
+			return editor;
+		    }
+
+		    @Override
+		    protected boolean canEdit(Object element) {
+			return editable;
+		    }
+		});
+
+		String displayName = l == null ? ResourceBundleManager.defaultLocaleTag
+			: l.getDisplayName(uiLocale);
+
+		col.setText(displayName);
+		col.addSelectionListener(new SelectionListener() {
+
+		    @Override
+		    public void widgetSelected(SelectionEvent e) {
+			updateSorter(visibleLocales.indexOf(l) + 1);
+		    }
+
+		    @Override
+		    public void widgetDefaultSelected(SelectionEvent e) {
+			updateSorter(visibleLocales.indexOf(l) + 1);
+		    }
+		});
+		basicLayout.setColumnData(col, new ColumnWeightData(
+			LOCALE_COLUMN_WEIGHT));
+	    }
+	}
+    }
+
+    protected void updateSorter(int idx) {
+	SortInfo sortInfo = sorter.getSortInfo();
+	if (idx == sortInfo.getColIdx())
+	    sortInfo.setDESC(!sortInfo.isDESC());
+	else {
+	    sortInfo.setColIdx(idx);
+	    sortInfo.setDESC(false);
+	}
+	sortInfo.setVisibleLocales(visibleLocales);
+	sorter.setSortInfo(sortInfo);
+	treeType = idx == 0 ? TreeType.Tree : TreeType.Flat;
+	setTreeStructure();
+	treeViewer.refresh();
+    }
+
+    @Override
+    public boolean setFocus() {
+	return treeViewer.getControl().setFocus();
+    }
+
+    /*** DRAG AND DROP ***/
+    protected void hookDragAndDrop() {
+	// KeyTreeItemDragSource ktiSource = new KeyTreeItemDragSource
+	// (treeViewer);
+	KeyTreeItemDropTarget ktiTarget = new KeyTreeItemDropTarget(treeViewer);
+	MessagesDragSource source = new MessagesDragSource(treeViewer,
+		this.resourceBundle);
+	MessagesDropTarget target = new MessagesDropTarget(treeViewer,
+		projectName, resourceBundle);
+
+	// Initialize drag source for copy event
+	DragSource dragSource = new DragSource(treeViewer.getControl(),
+		DND.DROP_COPY | DND.DROP_MOVE);
+	dragSource.setTransfer(new Transfer[] { TextTransfer.getInstance() });
+	// dragSource.addDragListener(ktiSource);
+	dragSource.addDragListener(source);
+
+	// Initialize drop target for copy event
+	DropTarget dropTarget = new DropTarget(treeViewer.getControl(),
+		DND.DROP_MOVE | DND.DROP_COPY);
+	dropTarget.setTransfer(new Transfer[] { TextTransfer.getInstance(),
+		JavaUI.getJavaElementClipboardTransfer() });
+	dropTarget.addDropListener(ktiTarget);
+	dropTarget.addDropListener(target);
+    }
+
+    /*** ACTIONS ***/
+
+    private void makeActions() {
+	doubleClickAction = new Action() {
+
+	    @Override
+	    public void run() {
+		editSelectedItem();
+	    }
+
+	};
+    }
+
+    private void hookDoubleClickAction() {
+	treeViewer.addDoubleClickListener(new IDoubleClickListener() {
+
+	    public void doubleClick(DoubleClickEvent event) {
+		doubleClickAction.run();
+	    }
+	});
+    }
+
+    /*** SELECTION LISTENER ***/
+
+    protected void registerListeners() {
+
+	this.editorListener = new MessagesEditorListener();
+	ResourceBundleManager manager = ResourceBundleManager
+		.getManager(projectName);
+	if (manager != null) {
+	    RBManager.getInstance(manager.getProject())
+		    .addMessagesEditorListener(editorListener);
+	}
+
+	treeViewer.getControl().addKeyListener(new KeyAdapter() {
+
+	    public void keyPressed(KeyEvent event) {
+		if (event.character == SWT.DEL && event.stateMask == 0) {
+		    deleteSelectedItems();
+		}
+	    }
+	});
+    }
+
+    protected void unregisterListeners() {
+	ResourceBundleManager manager = ResourceBundleManager
+		.getManager(projectName);
+	if (manager != null) {
+	    RBManager.getInstance(manager.getProject())
+		    .removeMessagesEditorListener(editorListener);
+	}
+	treeViewer.removeSelectionChangedListener(selectionChangedListener);
+    }
+
+    public void addSelectionChangedListener(ISelectionChangedListener listener) {
+	treeViewer.addSelectionChangedListener(listener);
+	selectionChangedListener = listener;
+    }
+
+    @Override
+    public void resourceBundleChanged(final ResourceBundleChangedEvent event) {
+	if (event.getType() != ResourceBundleChangedEvent.MODIFIED
+		|| !event.getBundle().equals(this.getResourceBundle()))
+	    return;
+
+	if (Display.getCurrent() != null) {
+	    refreshViewer(event, true);
+	    return;
+	}
+
+	Display.getDefault().asyncExec(new Runnable() {
+
+	    public void run() {
+		refreshViewer(event, true);
+	    }
+	});
+    }
+
+    private void refreshViewer(ResourceBundleChangedEvent event,
+	    boolean computeVisibleLocales) {
+	// manager.loadResourceBundle(resourceBundle);
+	if (computeVisibleLocales) {
+	    refreshContent(event);
+	}
+
+	// Display.getDefault().asyncExec(new Runnable() {
+	// public void run() {
+	treeViewer.refresh();
+	// }
+	// });
+    }
+
+    public StructuredViewer getViewer() {
+	return this.treeViewer;
+    }
+
+    public void setSearchString(String pattern) {
+	matcher.setPattern(pattern);
+	treeType = matcher.getPattern().trim().length() > 0 ? TreeType.Flat
+		: TreeType.Tree;
+	labelProvider.setSearchEnabled(treeType.equals(TreeType.Flat));
+	// WTF?
+	treeType = treeType.equals(TreeType.Tree)
+		&& sorter.getSortInfo().getColIdx() == 0 ? TreeType.Tree
+		: TreeType.Flat;
+	treeViewer.refresh();
+
+	this.refreshContent(null);
+
+	// highlight the search results
+	labelProvider.updateTreeViewer(treeViewer);
+    }
+
+    public SortInfo getSortInfo() {
+	if (this.sorter != null)
+	    return this.sorter.getSortInfo();
+	else
+	    return null;
+    }
+
+    public void setSortInfo(SortInfo sortInfo) {
+	sortInfo.setVisibleLocales(visibleLocales);
+	if (sorter != null) {
+	    sorter.setSortInfo(sortInfo);
+	    treeType = sortInfo.getColIdx() == 0 ? TreeType.Tree
+		    : TreeType.Flat;
+	    treeViewer.refresh();
+	}
+    }
+
+    public String getSearchString() {
+	return matcher.getPattern();
+    }
+
+    public boolean isEditable() {
+	return editable;
+    }
+
+    public void setEditable(boolean editable) {
+	this.editable = editable;
+    }
+
+    public List<Locale> getVisibleLocales() {
+	return visibleLocales;
+    }
+
+    public String getResourceBundle() {
+	return resourceBundle;
+    }
+
+    public void editSelectedItem() {
+	String key = "";
+	ISelection selection = treeViewer.getSelection();
+	if (selection instanceof IStructuredSelection) {
+	    IStructuredSelection structSel = (IStructuredSelection) selection;
+	    if (structSel.getFirstElement() instanceof IKeyTreeNode) {
+		IKeyTreeNode keyTreeNode = (IKeyTreeNode) structSel
+			.getFirstElement();
+		key = keyTreeNode.getMessageKey();
+	    }
+	}
+
+	ResourceBundleManager manager = ResourceBundleManager
+		.getManager(projectName);
+	EditorUtils.openEditor(site.getPage(),
+		manager.getRandomFile(resourceBundle),
+		EditorUtils.RESOURCE_BUNDLE_EDITOR, key);
+    }
+
+    public void deleteSelectedItems() {
+	List<String> keys = new ArrayList<String>();
+
+	IWorkbenchWindow window = PlatformUI.getWorkbench()
+		.getActiveWorkbenchWindow();
+	ISelection selection = window.getActivePage().getSelection();
+	if (selection instanceof IStructuredSelection) {
+	    for (Iterator<?> iter = ((IStructuredSelection) selection)
+		    .iterator(); iter.hasNext();) {
+		Object elem = iter.next();
+		if (elem instanceof IKeyTreeNode) {
+		    addKeysToRemove((IKeyTreeNode) elem, keys);
+		}
+	    }
+	}
+
+	try {
+	    ResourceBundleManager manager = ResourceBundleManager
+		    .getManager(projectName);
+	    manager.removeResourceBundleEntry(getResourceBundle(), keys);
+	} catch (Exception ex) {
+	    Logger.logError(ex);
+	}
+    }
+
+    private void addKeysToRemove(IKeyTreeNode node, List<String> keys) {
+	keys.add(node.getMessageKey());
+	for (IKeyTreeNode ktn : node.getChildren()) {
+	    addKeysToRemove(ktn, keys);
+	}
+    }
+
+    public void addNewItem(ISelection selection) {
+	// event.feedback = DND.FEEDBACK_INSERT_BEFORE;
+	String newKeyPrefix = "";
+
+	if (selection instanceof IStructuredSelection) {
+	    for (Iterator<?> iter = ((IStructuredSelection) selection)
+		    .iterator(); iter.hasNext();) {
+		Object elem = iter.next();
+		if (elem instanceof IKeyTreeNode) {
+		    newKeyPrefix = ((IKeyTreeNode) elem).getMessageKey();
+		    break;
+		}
+	    }
+	}
+
+	CreateResourceBundleEntryDialog dialog = new CreateResourceBundleEntryDialog(
+		Display.getDefault().getActiveShell());
+
+	DialogConfiguration config = dialog.new DialogConfiguration();
+	config.setPreselectedKey(newKeyPrefix.trim().length() > 0 ? newKeyPrefix
+		+ "." + "[Platzhalter]"
+		: "");
+	config.setPreselectedMessage("");
+	config.setPreselectedBundle(getResourceBundle());
+	config.setPreselectedLocale("");
+	config.setProjectName(projectName);
+
+	dialog.setDialogConfiguration(config);
+
+	if (dialog.open() != InputDialog.OK)
+	    return;
+    }
+
+    public void setMatchingPrecision(float value) {
+	matchingPrecision = value;
+	if (matcher instanceof FuzzyMatcher) {
+	    ((FuzzyMatcher) matcher).setMinimumSimilarity(value);
+	    treeViewer.refresh();
+	}
+    }
+
+    public float getMatchingPrecision() {
+	return matchingPrecision;
+    }
+
+    private class MessagesEditorListener implements IMessagesEditorListener {
+	@Override
+	public void onSave() {
+	    if (resourceBundle != null) {
+		setTreeStructure();
+	    }
+	}
+
+	@Override
+	public void onModify() {
+	    if (resourceBundle != null) {
+		setTreeStructure();
+	    }
+	}
+
+	@Override
+	public void onResourceChanged(IMessagesBundle bundle) {
+	    // TODO Auto-generated method stub
+
+	}
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/ResourceSelector.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/ResourceSelector.java
new file mode 100644
index 0000000..d14feb6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/ResourceSelector.java
@@ -0,0 +1,270 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.widgets;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Set;
+
+import org.eclipse.babel.core.message.IMessagesBundleGroup;
+import org.eclipse.babel.core.message.tree.IAbstractKeyTreeModel;
+import org.eclipse.babel.core.message.tree.IKeyTreeNode;
+import org.eclipse.babel.core.message.tree.TreeType;
+import org.eclipse.babel.editor.api.KeyTreeFactory;
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.widgets.event.ResourceSelectionEvent;
+import org.eclipse.babel.tapiji.tools.core.ui.widgets.listener.IResourceSelectionListener;
+import org.eclipse.babel.tapiji.tools.core.ui.widgets.provider.ResKeyTreeContentProvider;
+import org.eclipse.babel.tapiji.tools.core.ui.widgets.provider.ResKeyTreeLabelProvider;
+import org.eclipse.babel.tapiji.tools.core.ui.widgets.provider.ValueKeyTreeLabelProvider;
+import org.eclipse.jface.layout.TreeColumnLayout;
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.IElementComparer;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StyledCellLabelProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+
+public class ResourceSelector extends Composite {
+
+    public static final int DISPLAY_KEYS = 0;
+    public static final int DISPLAY_TEXT = 1;
+
+    private Locale displayLocale = null; // default
+    private int displayMode;
+    private String resourceBundle;
+    private String projectName;
+    private boolean showTree = true;
+
+    private TreeViewer viewer;
+    private TreeColumnLayout basicLayout;
+    private TreeColumn entries;
+    private Set<IResourceSelectionListener> listeners = new HashSet<IResourceSelectionListener>();
+
+    // Viewer model
+    private TreeType treeType = TreeType.Tree;
+    private StyledCellLabelProvider labelProvider;
+
+    public ResourceSelector(Composite parent, int style) {
+	super(parent, style);
+
+	initLayout(this);
+	initViewer(this);
+    }
+
+    protected void updateContentProvider(IMessagesBundleGroup group) {
+	// define input of treeviewer
+	if (!showTree || displayMode == DISPLAY_TEXT) {
+	    treeType = TreeType.Flat;
+	}
+
+	ResourceBundleManager manager = ResourceBundleManager
+		.getManager(projectName);
+
+	IAbstractKeyTreeModel model = KeyTreeFactory.createModel(manager
+		.getResourceBundle(resourceBundle));
+	ResKeyTreeContentProvider contentProvider = (ResKeyTreeContentProvider) viewer
+		.getContentProvider();
+	contentProvider.setProjectName(manager.getProject().getName());
+	contentProvider.setBundleId(resourceBundle);
+	contentProvider.setTreeType(treeType);
+	if (viewer.getInput() == null) {
+	    viewer.setUseHashlookup(true);
+	}
+
+	// viewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);
+	org.eclipse.jface.viewers.TreePath[] expandedTreePaths = viewer
+		.getExpandedTreePaths();
+	viewer.setInput(model);
+	viewer.refresh();
+	viewer.setExpandedTreePaths(expandedTreePaths);
+    }
+
+    protected void updateViewer(boolean updateContent) {
+	IMessagesBundleGroup group = ResourceBundleManager.getManager(
+		projectName).getResourceBundle(resourceBundle);
+
+	if (group == null)
+	    return;
+
+	if (displayMode == DISPLAY_TEXT) {
+	    labelProvider = new ValueKeyTreeLabelProvider(
+		    group.getMessagesBundle(displayLocale));
+	    treeType = TreeType.Flat;
+	    ((ResKeyTreeContentProvider) viewer.getContentProvider())
+		    .setTreeType(treeType);
+	} else {
+	    labelProvider = new ResKeyTreeLabelProvider(null);
+	    treeType = TreeType.Tree;
+	    ((ResKeyTreeContentProvider) viewer.getContentProvider())
+		    .setTreeType(treeType);
+	}
+
+	viewer.setLabelProvider(labelProvider);
+	if (updateContent)
+	    updateContentProvider(group);
+    }
+
+    protected void initLayout(Composite parent) {
+	basicLayout = new TreeColumnLayout();
+	parent.setLayout(basicLayout);
+    }
+
+    protected void initViewer(Composite parent) {
+	viewer = new TreeViewer(parent, SWT.BORDER | SWT.SINGLE
+		| SWT.FULL_SELECTION);
+	Tree table = viewer.getTree();
+
+	// Init table-columns
+	entries = new TreeColumn(table, SWT.NONE);
+	basicLayout.setColumnData(entries, new ColumnWeightData(1));
+
+	viewer.setContentProvider(new ResKeyTreeContentProvider());
+	viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+
+	    @Override
+	    public void selectionChanged(SelectionChangedEvent event) {
+		ISelection selection = event.getSelection();
+		String selectionSummary = "";
+		String selectedKey = "";
+		ResourceBundleManager manager = ResourceBundleManager
+			.getManager(projectName);
+
+		if (selection instanceof IStructuredSelection) {
+		    Iterator<IKeyTreeNode> itSel = ((IStructuredSelection) selection)
+			    .iterator();
+		    if (itSel.hasNext()) {
+			IKeyTreeNode selItem = itSel.next();
+			IMessagesBundleGroup group = manager
+				.getResourceBundle(resourceBundle);
+			selectedKey = selItem.getMessageKey();
+
+			if (group == null)
+			    return;
+			Iterator<Locale> itLocales = manager
+				.getProvidedLocales(resourceBundle).iterator();
+			while (itLocales.hasNext()) {
+			    Locale l = itLocales.next();
+			    try {
+				selectionSummary += (l == null ? ResourceBundleManager.defaultLocaleTag
+					: l.getDisplayLanguage())
+					+ ":\n";
+				selectionSummary += "\t"
+					+ group.getMessagesBundle(l)
+						.getMessage(
+							selItem.getMessageKey())
+						.getValue() + "\n";
+			    } catch (Exception e) {
+			    }
+			}
+		    }
+		}
+
+		// construct ResourceSelectionEvent
+		ResourceSelectionEvent e = new ResourceSelectionEvent(
+			selectedKey, selectionSummary);
+		fireSelectionChanged(e);
+	    }
+	});
+
+	// we need this to keep the tree expanded
+	viewer.setComparer(new IElementComparer() {
+
+	    @Override
+	    public int hashCode(Object element) {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result
+			+ ((toString() == null) ? 0 : toString().hashCode());
+		return result;
+	    }
+
+	    @Override
+	    public boolean equals(Object a, Object b) {
+		if (a == b) {
+		    return true;
+		}
+		if (a instanceof IKeyTreeNode && b instanceof IKeyTreeNode) {
+		    IKeyTreeNode nodeA = (IKeyTreeNode) a;
+		    IKeyTreeNode nodeB = (IKeyTreeNode) b;
+		    return nodeA.equals(nodeB);
+		}
+		return false;
+	    }
+	});
+    }
+
+    public Locale getDisplayLocale() {
+	return displayLocale;
+    }
+
+    public void setDisplayLocale(Locale displayLocale) {
+	this.displayLocale = displayLocale;
+	updateViewer(false);
+    }
+
+    public int getDisplayMode() {
+	return displayMode;
+    }
+
+    public void setDisplayMode(int displayMode) {
+	this.displayMode = displayMode;
+	updateViewer(true);
+    }
+
+    public void setResourceBundle(String resourceBundle) {
+	this.resourceBundle = resourceBundle;
+	updateViewer(true);
+    }
+
+    public String getResourceBundle() {
+	return resourceBundle;
+    }
+
+    public void addSelectionChangedListener(IResourceSelectionListener l) {
+	listeners.add(l);
+    }
+
+    public void removeSelectionChangedListener(IResourceSelectionListener l) {
+	listeners.remove(l);
+    }
+
+    private void fireSelectionChanged(ResourceSelectionEvent event) {
+	Iterator<IResourceSelectionListener> itResList = listeners.iterator();
+	while (itResList.hasNext()) {
+	    itResList.next().selectionChanged(event);
+	}
+    }
+
+    public void setProjectName(String projectName) {
+	this.projectName = projectName;
+    }
+
+    public boolean isShowTree() {
+	return showTree;
+    }
+
+    public void setShowTree(boolean showTree) {
+	if (this.showTree != showTree) {
+	    this.showTree = showTree;
+	    this.treeType = showTree ? TreeType.Tree : TreeType.Flat;
+	    updateViewer(false);
+	}
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/event/ResourceSelectionEvent.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/event/ResourceSelectionEvent.java
new file mode 100644
index 0000000..586ce13
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/event/ResourceSelectionEvent.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.widgets.event;
+
+public class ResourceSelectionEvent {
+
+    private String selectionSummary;
+    private String selectedKey;
+
+    public ResourceSelectionEvent(String selectedKey, String selectionSummary) {
+	this.setSelectionSummary(selectionSummary);
+	this.setSelectedKey(selectedKey);
+    }
+
+    public void setSelectedKey(String key) {
+	selectedKey = key;
+    }
+
+    public void setSelectionSummary(String selectionSummary) {
+	this.selectionSummary = selectionSummary;
+    }
+
+    public String getSelectionSummary() {
+	return selectionSummary;
+    }
+
+    public String getSelectedKey() {
+	return selectedKey;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/filter/ExactMatcher.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/filter/ExactMatcher.java
new file mode 100644
index 0000000..da60456
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/filter/ExactMatcher.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.widgets.filter;
+
+import java.util.Locale;
+
+import org.eclipse.babel.editor.api.IValuedKeyTreeNode;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+
+public class ExactMatcher extends ViewerFilter {
+
+    protected final StructuredViewer viewer;
+    protected String pattern = "";
+    protected StringMatcher matcher;
+
+    public ExactMatcher(StructuredViewer viewer) {
+	this.viewer = viewer;
+    }
+
+    public String getPattern() {
+	return pattern;
+    }
+
+    public void setPattern(String p) {
+	boolean filtering = matcher != null;
+	if (p != null && p.trim().length() > 0) {
+	    pattern = p;
+	    matcher = new StringMatcher("*" + pattern + "*", true, false);
+	    if (!filtering)
+		viewer.addFilter(this);
+	    else
+		viewer.refresh();
+	} else {
+	    pattern = "";
+	    matcher = null;
+	    if (filtering) {
+		viewer.removeFilter(this);
+	    }
+	}
+    }
+
+    @Override
+    public boolean select(Viewer viewer, Object parentElement, Object element) {
+	IValuedKeyTreeNode vEle = (IValuedKeyTreeNode) element;
+	FilterInfo filterInfo = new FilterInfo();
+	boolean selected = matcher.match(vEle.getMessageKey());
+
+	if (selected) {
+	    int start = -1;
+	    while ((start = vEle.getMessageKey().toLowerCase()
+		    .indexOf(pattern.toLowerCase(), start + 1)) >= 0) {
+		filterInfo.addKeyOccurrence(start, pattern.length());
+	    }
+	    filterInfo.setFoundInKey(selected);
+	    filterInfo.setFoundInKey(true);
+	} else
+	    filterInfo.setFoundInKey(false);
+
+	// Iterate translations
+	for (Locale l : vEle.getLocales()) {
+	    String value = vEle.getValue(l);
+	    if (matcher.match(value)) {
+		filterInfo.addFoundInLocale(l);
+		filterInfo.addSimilarity(l, 1d);
+		int start = -1;
+		while ((start = value.toLowerCase().indexOf(
+			pattern.toLowerCase(), start + 1)) >= 0) {
+		    filterInfo
+			    .addFoundInLocaleRange(l, start, pattern.length());
+		}
+		selected = true;
+	    }
+	}
+
+	vEle.setInfo(filterInfo);
+	return selected;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/filter/FilterInfo.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/filter/FilterInfo.java
new file mode 100644
index 0000000..e53959a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/filter/FilterInfo.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.widgets.filter;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import org.eclipse.jface.text.Region;
+
+public class FilterInfo {
+
+    private boolean foundInKey;
+    private List<Locale> foundInLocales = new ArrayList<Locale>();
+    private List<Region> keyOccurrences = new ArrayList<Region>();
+    private Double keySimilarity;
+    private Map<Locale, List<Region>> occurrences = new HashMap<Locale, List<Region>>();
+    private Map<Locale, Double> localeSimilarity = new HashMap<Locale, Double>();
+
+    public FilterInfo() {
+
+    }
+
+    public void setKeySimilarity(Double similarity) {
+	keySimilarity = similarity;
+    }
+
+    public Double getKeySimilarity() {
+	return keySimilarity;
+    }
+
+    public void addSimilarity(Locale l, Double similarity) {
+	localeSimilarity.put(l, similarity);
+    }
+
+    public Double getSimilarityLevel(Locale l) {
+	return localeSimilarity.get(l);
+    }
+
+    public void setFoundInKey(boolean foundInKey) {
+	this.foundInKey = foundInKey;
+    }
+
+    public boolean isFoundInKey() {
+	return foundInKey;
+    }
+
+    public void addFoundInLocale(Locale loc) {
+	foundInLocales.add(loc);
+    }
+
+    public void removeFoundInLocale(Locale loc) {
+	foundInLocales.remove(loc);
+    }
+
+    public void clearFoundInLocale() {
+	foundInLocales.clear();
+    }
+
+    public boolean hasFoundInLocale(Locale l) {
+	return foundInLocales.contains(l);
+    }
+
+    public List<Region> getFoundInLocaleRanges(Locale locale) {
+	List<Region> reg = occurrences.get(locale);
+	return (reg == null ? new ArrayList<Region>() : reg);
+    }
+
+    public void addFoundInLocaleRange(Locale locale, int start, int length) {
+	List<Region> regions = occurrences.get(locale);
+	if (regions == null)
+	    regions = new ArrayList<Region>();
+	regions.add(new Region(start, length));
+	occurrences.put(locale, regions);
+    }
+
+    public List<Region> getKeyOccurrences() {
+	return keyOccurrences;
+    }
+
+    public void addKeyOccurrence(int start, int length) {
+	keyOccurrences.add(new Region(start, length));
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/filter/FuzzyMatcher.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/filter/FuzzyMatcher.java
new file mode 100644
index 0000000..aee3c11
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/filter/FuzzyMatcher.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.widgets.filter;
+
+import java.util.Locale;
+
+import org.eclipse.babel.core.message.checks.proximity.IProximityAnalyzer;
+import org.eclipse.babel.editor.api.AnalyzerFactory;
+import org.eclipse.babel.editor.api.IValuedKeyTreeNode;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+public class FuzzyMatcher extends ExactMatcher {
+
+    protected IProximityAnalyzer lvda;
+    protected float minimumSimilarity = 0.75f;
+
+    public FuzzyMatcher(StructuredViewer viewer) {
+	super(viewer);
+	lvda = AnalyzerFactory.getLevenshteinDistanceAnalyzer();
+	;
+    }
+
+    public double getMinimumSimilarity() {
+	return minimumSimilarity;
+    }
+
+    public void setMinimumSimilarity(float similarity) {
+	this.minimumSimilarity = similarity;
+    }
+
+    @Override
+    public boolean select(Viewer viewer, Object parentElement, Object element) {
+	boolean exactMatch = super.select(viewer, parentElement, element);
+	boolean match = exactMatch;
+
+	IValuedKeyTreeNode vkti = (IValuedKeyTreeNode) element;
+	FilterInfo filterInfo = (FilterInfo) vkti.getInfo();
+
+	for (Locale l : vkti.getLocales()) {
+	    String value = vkti.getValue(l);
+	    if (filterInfo.hasFoundInLocale(l))
+		continue;
+	    double dist = lvda.analyse(value, getPattern());
+	    if (dist >= minimumSimilarity) {
+		filterInfo.addFoundInLocale(l);
+		filterInfo.addSimilarity(l, dist);
+		match = true;
+		filterInfo.addFoundInLocaleRange(l, 0, value.length());
+	    }
+	}
+
+	vkti.setInfo(filterInfo);
+	return match;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/filter/StringMatcher.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/filter/StringMatcher.java
new file mode 100644
index 0000000..841f0d9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/filter/StringMatcher.java
@@ -0,0 +1,496 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.widgets.filter;
+
+import java.util.Vector;
+
+/**
+ * A string pattern matcher, suppporting "*" and "?" wildcards.
+ */
+public class StringMatcher {
+    protected String fPattern;
+
+    protected int fLength; // pattern length
+
+    protected boolean fIgnoreWildCards;
+
+    protected boolean fIgnoreCase;
+
+    protected boolean fHasLeadingStar;
+
+    protected boolean fHasTrailingStar;
+
+    protected String fSegments[]; // the given pattern is split into * separated
+				  // segments
+
+    /* boundary value beyond which we don't need to search in the text */
+    protected int fBound = 0;
+
+    protected static final char fSingleWildCard = '\u0000';
+
+    public static class Position {
+	int start; // inclusive
+
+	int end; // exclusive
+
+	public Position(int start, int end) {
+	    this.start = start;
+	    this.end = end;
+	}
+
+	public int getStart() {
+	    return start;
+	}
+
+	public int getEnd() {
+	    return end;
+	}
+    }
+
+    /**
+     * StringMatcher constructor takes in a String object that is a simple
+     * pattern which may contain '*' for 0 and many characters and '?' for
+     * exactly one character.
+     * 
+     * Literal '*' and '?' characters must be escaped in the pattern e.g.,
+     * "\*" means literal "*", etc.
+     * 
+     * Escaping any other character (including the escape character itself),
+     * just results in that character in the pattern. e.g., "\a" means "a" and
+     * "\\" means "\"
+     * 
+     * If invoking the StringMatcher with string literals in Java, don't forget
+     * escape characters are represented by "\\".
+     * 
+     * @param pattern
+     *            the pattern to match text against
+     * @param ignoreCase
+     *            if true, case is ignored
+     * @param ignoreWildCards
+     *            if true, wild cards and their escape sequences are ignored
+     *            (everything is taken literally).
+     */
+    public StringMatcher(String pattern, boolean ignoreCase,
+	    boolean ignoreWildCards) {
+	if (pattern == null) {
+	    throw new IllegalArgumentException();
+	}
+	fIgnoreCase = ignoreCase;
+	fIgnoreWildCards = ignoreWildCards;
+	fPattern = pattern;
+	fLength = pattern.length();
+
+	if (fIgnoreWildCards) {
+	    parseNoWildCards();
+	} else {
+	    parseWildCards();
+	}
+    }
+
+    /**
+     * Find the first occurrence of the pattern between <code>start</code
+     * )(inclusive) and <code>end</code>(exclusive).
+     * 
+     * @param text
+     *            the String object to search in
+     * @param start
+     *            the starting index of the search range, inclusive
+     * @param end
+     *            the ending index of the search range, exclusive
+     * @return an <code>StringMatcher.Position</code> object that keeps the
+     *         starting (inclusive) and ending positions (exclusive) of the
+     *         first occurrence of the pattern in the specified range of the
+     *         text; return null if not found or subtext is empty (start==end).
+     *         A pair of zeros is returned if pattern is empty string Note that
+     *         for pattern like "*abc*" with leading and trailing stars,
+     *         position of "abc" is returned. For a pattern like"*??*" in text
+     *         "abcdf", (1,3) is returned
+     */
+    public StringMatcher.Position find(String text, int start, int end) {
+	if (text == null) {
+	    throw new IllegalArgumentException();
+	}
+
+	int tlen = text.length();
+	if (start < 0) {
+	    start = 0;
+	}
+	if (end > tlen) {
+	    end = tlen;
+	}
+	if (end < 0 || start >= end) {
+	    return null;
+	}
+	if (fLength == 0) {
+	    return new Position(start, start);
+	}
+	if (fIgnoreWildCards) {
+	    int x = posIn(text, start, end);
+	    if (x < 0) {
+		return null;
+	    }
+	    return new Position(x, x + fLength);
+	}
+
+	int segCount = fSegments.length;
+	if (segCount == 0) {
+	    return new Position(start, end);
+	}
+
+	int curPos = start;
+	int matchStart = -1;
+	int i;
+	for (i = 0; i < segCount && curPos < end; ++i) {
+	    String current = fSegments[i];
+	    int nextMatch = regExpPosIn(text, curPos, end, current);
+	    if (nextMatch < 0) {
+		return null;
+	    }
+	    if (i == 0) {
+		matchStart = nextMatch;
+	    }
+	    curPos = nextMatch + current.length();
+	}
+	if (i < segCount) {
+	    return null;
+	}
+	return new Position(matchStart, curPos);
+    }
+
+    /**
+     * match the given <code>text</code> with the pattern
+     * 
+     * @return true if matched otherwise false
+     * @param text
+     *            a String object
+     */
+    public boolean match(String text) {
+	if (text == null) {
+	    return false;
+	}
+	return match(text, 0, text.length());
+    }
+
+    /**
+     * Given the starting (inclusive) and the ending (exclusive) positions in
+     * the <code>text</code>, determine if the given substring matches with
+     * aPattern
+     * 
+     * @return true if the specified portion of the text matches the pattern
+     * @param text
+     *            a String object that contains the substring to match
+     * @param start
+     *            marks the starting position (inclusive) of the substring
+     * @param end
+     *            marks the ending index (exclusive) of the substring
+     */
+    public boolean match(String text, int start, int end) {
+	if (null == text) {
+	    throw new IllegalArgumentException();
+	}
+
+	if (start > end) {
+	    return false;
+	}
+
+	if (fIgnoreWildCards) {
+	    return (end - start == fLength)
+		    && fPattern.regionMatches(fIgnoreCase, 0, text, start,
+			    fLength);
+	}
+	int segCount = fSegments.length;
+	if (segCount == 0 && (fHasLeadingStar || fHasTrailingStar)) {
+	    return true;
+	}
+	if (start == end) {
+	    return fLength == 0;
+	}
+	if (fLength == 0) {
+	    return start == end;
+	}
+
+	int tlen = text.length();
+	if (start < 0) {
+	    start = 0;
+	}
+	if (end > tlen) {
+	    end = tlen;
+	}
+
+	int tCurPos = start;
+	int bound = end - fBound;
+	if (bound < 0) {
+	    return false;
+	}
+	int i = 0;
+	String current = fSegments[i];
+	int segLength = current.length();
+
+	/* process first segment */
+	if (!fHasLeadingStar) {
+	    if (!regExpRegionMatches(text, start, current, 0, segLength)) {
+		return false;
+	    } else {
+		++i;
+		tCurPos = tCurPos + segLength;
+	    }
+	}
+	if ((fSegments.length == 1) && (!fHasLeadingStar)
+		&& (!fHasTrailingStar)) {
+	    // only one segment to match, no wildcards specified
+	    return tCurPos == end;
+	}
+	/* process middle segments */
+	while (i < segCount) {
+	    current = fSegments[i];
+	    int currentMatch;
+	    int k = current.indexOf(fSingleWildCard);
+	    if (k < 0) {
+		currentMatch = textPosIn(text, tCurPos, end, current);
+		if (currentMatch < 0) {
+		    return false;
+		}
+	    } else {
+		currentMatch = regExpPosIn(text, tCurPos, end, current);
+		if (currentMatch < 0) {
+		    return false;
+		}
+	    }
+	    tCurPos = currentMatch + current.length();
+	    i++;
+	}
+
+	/* process final segment */
+	if (!fHasTrailingStar && tCurPos != end) {
+	    int clen = current.length();
+	    return regExpRegionMatches(text, end - clen, current, 0, clen);
+	}
+	return i == segCount;
+    }
+
+    /**
+     * This method parses the given pattern into segments seperated by wildcard
+     * '*' characters. Since wildcards are not being used in this case, the
+     * pattern consists of a single segment.
+     */
+    private void parseNoWildCards() {
+	fSegments = new String[1];
+	fSegments[0] = fPattern;
+	fBound = fLength;
+    }
+
+    /**
+     * Parses the given pattern into segments seperated by wildcard '*'
+     * characters.
+     * 
+     * @param p
+     *            , a String object that is a simple regular expression with '*'
+     *            and/or '?'
+     */
+    private void parseWildCards() {
+	if (fPattern.startsWith("*")) { //$NON-NLS-1$
+	    fHasLeadingStar = true;
+	}
+	if (fPattern.endsWith("*")) {//$NON-NLS-1$
+	    /* make sure it's not an escaped wildcard */
+	    if (fLength > 1 && fPattern.charAt(fLength - 2) != '\\') {
+		fHasTrailingStar = true;
+	    }
+	}
+
+	Vector temp = new Vector();
+
+	int pos = 0;
+	StringBuffer buf = new StringBuffer();
+	while (pos < fLength) {
+	    char c = fPattern.charAt(pos++);
+	    switch (c) {
+	    case '\\':
+		if (pos >= fLength) {
+		    buf.append(c);
+		} else {
+		    char next = fPattern.charAt(pos++);
+		    /* if it's an escape sequence */
+		    if (next == '*' || next == '?' || next == '\\') {
+			buf.append(next);
+		    } else {
+			/* not an escape sequence, just insert literally */
+			buf.append(c);
+			buf.append(next);
+		    }
+		}
+		break;
+	    case '*':
+		if (buf.length() > 0) {
+		    /* new segment */
+		    temp.addElement(buf.toString());
+		    fBound += buf.length();
+		    buf.setLength(0);
+		}
+		break;
+	    case '?':
+		/* append special character representing single match wildcard */
+		buf.append(fSingleWildCard);
+		break;
+	    default:
+		buf.append(c);
+	    }
+	}
+
+	/* add last buffer to segment list */
+	if (buf.length() > 0) {
+	    temp.addElement(buf.toString());
+	    fBound += buf.length();
+	}
+
+	fSegments = new String[temp.size()];
+	temp.copyInto(fSegments);
+    }
+
+    /**
+     * @param text
+     *            a string which contains no wildcard
+     * @param start
+     *            the starting index in the text for search, inclusive
+     * @param end
+     *            the stopping point of search, exclusive
+     * @return the starting index in the text of the pattern , or -1 if not
+     *         found
+     */
+    protected int posIn(String text, int start, int end) {// no wild card in
+							  // pattern
+	int max = end - fLength;
+
+	if (!fIgnoreCase) {
+	    int i = text.indexOf(fPattern, start);
+	    if (i == -1 || i > max) {
+		return -1;
+	    }
+	    return i;
+	}
+
+	for (int i = start; i <= max; ++i) {
+	    if (text.regionMatches(true, i, fPattern, 0, fLength)) {
+		return i;
+	    }
+	}
+
+	return -1;
+    }
+
+    /**
+     * @param text
+     *            a simple regular expression that may only contain '?'(s)
+     * @param start
+     *            the starting index in the text for search, inclusive
+     * @param end
+     *            the stopping point of search, exclusive
+     * @param p
+     *            a simple regular expression that may contains '?'
+     * @return the starting index in the text of the pattern , or -1 if not
+     *         found
+     */
+    protected int regExpPosIn(String text, int start, int end, String p) {
+	int plen = p.length();
+
+	int max = end - plen;
+	for (int i = start; i <= max; ++i) {
+	    if (regExpRegionMatches(text, i, p, 0, plen)) {
+		return i;
+	    }
+	}
+	return -1;
+    }
+
+    /**
+     * 
+     * @return boolean
+     * @param text
+     *            a String to match
+     * @param start
+     *            int that indicates the starting index of match, inclusive
+     * @param end
+     *            </code> int that indicates the ending index of match,
+     *            exclusive
+     * @param p
+     *            String, String, a simple regular expression that may contain
+     *            '?'
+     * @param ignoreCase
+     *            boolean indicating wether code>p</code> is case sensitive
+     */
+    protected boolean regExpRegionMatches(String text, int tStart, String p,
+	    int pStart, int plen) {
+	while (plen-- > 0) {
+	    char tchar = text.charAt(tStart++);
+	    char pchar = p.charAt(pStart++);
+
+	    /* process wild cards */
+	    if (!fIgnoreWildCards) {
+		/* skip single wild cards */
+		if (pchar == fSingleWildCard) {
+		    continue;
+		}
+	    }
+	    if (pchar == tchar) {
+		continue;
+	    }
+	    if (fIgnoreCase) {
+		if (Character.toUpperCase(tchar) == Character
+			.toUpperCase(pchar)) {
+		    continue;
+		}
+		// comparing after converting to upper case doesn't handle all
+		// cases;
+		// also compare after converting to lower case
+		if (Character.toLowerCase(tchar) == Character
+			.toLowerCase(pchar)) {
+		    continue;
+		}
+	    }
+	    return false;
+	}
+	return true;
+    }
+
+    /**
+     * @param text
+     *            the string to match
+     * @param start
+     *            the starting index in the text for search, inclusive
+     * @param end
+     *            the stopping point of search, exclusive
+     * @param p
+     *            a pattern string that has no wildcard
+     * @return the starting index in the text of the pattern , or -1 if not
+     *         found
+     */
+    protected int textPosIn(String text, int start, int end, String p) {
+
+	int plen = p.length();
+	int max = end - plen;
+
+	if (!fIgnoreCase) {
+	    int i = text.indexOf(p, start);
+	    if (i == -1 || i > max) {
+		return -1;
+	    }
+	    return i;
+	}
+
+	for (int i = start; i <= max; ++i) {
+	    if (text.regionMatches(true, i, p, 0, plen)) {
+		return i;
+	    }
+	}
+
+	return -1;
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/listener/IResourceSelectionListener.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/listener/IResourceSelectionListener.java
new file mode 100644
index 0000000..4d8de8a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/listener/IResourceSelectionListener.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.widgets.listener;
+
+import org.eclipse.babel.tapiji.tools.core.ui.widgets.event.ResourceSelectionEvent;
+
+public interface IResourceSelectionListener {
+
+    public void selectionChanged(ResourceSelectionEvent e);
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/provider/KeyTreeLabelProvider.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/provider/KeyTreeLabelProvider.java
new file mode 100644
index 0000000..876dc35
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/provider/KeyTreeLabelProvider.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Alexej Strelzow.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Alexej Strelzow - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.widgets.provider;
+
+import org.eclipse.jface.viewers.IColorProvider;
+import org.eclipse.jface.viewers.IFontProvider;
+import org.eclipse.jface.viewers.StyledCellLabelProvider;
+import org.eclipse.jface.viewers.ViewerCell;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * Label provider for key tree viewer.
+ * 
+ * @author Alexej Strelzow
+ */
+public abstract class KeyTreeLabelProvider extends StyledCellLabelProvider implements
+		IFontProvider, IColorProvider {
+
+	public KeyTreeLabelProvider() {
+		setOwnerDrawEnabled(true);
+	}
+	
+	/**
+	 * @see org.eclipse.jface.viewers.IFontProvider#getFont(java.lang.Object)
+	 */
+	public Font getFont(Object element) {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object)
+	 */
+	public Color getForeground(Object element) {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IColorProvider#getBackground(java.lang.Object)
+	 */
+	public Color getBackground(Object element) {
+		return null;
+	}
+	
+	public abstract String getColumnText(Object element, int columnIndex);
+	
+	public abstract Image getColumnImage(Object element, int columnIndex);
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void update(ViewerCell cell) {
+		cell.setText(getColumnText(cell.getElement(), cell.getColumnIndex()));
+		cell.setImage(getColumnImage(cell.getElement(), cell.getColumnIndex()));
+		super.update(cell);
+	}
+	
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/provider/ResKeyTreeContentProvider.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/provider/ResKeyTreeContentProvider.java
new file mode 100644
index 0000000..a2dc85a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/provider/ResKeyTreeContentProvider.java
@@ -0,0 +1,230 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer, Alexej Strelzow.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ *     Alexej Strelzow - Babel integration
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.widgets.provider;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Locale;
+
+import org.eclipse.babel.core.message.IMessage;
+import org.eclipse.babel.core.message.IMessagesBundleGroup;
+import org.eclipse.babel.core.message.manager.RBManager;
+import org.eclipse.babel.core.message.tree.IAbstractKeyTreeModel;
+import org.eclipse.babel.core.message.tree.IKeyTreeNode;
+import org.eclipse.babel.core.message.tree.IKeyTreeVisitor;
+import org.eclipse.babel.core.message.tree.TreeType;
+import org.eclipse.babel.editor.api.IValuedKeyTreeNode;
+import org.eclipse.babel.editor.api.KeyTreeFactory;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+public class ResKeyTreeContentProvider implements ITreeContentProvider {
+
+    private IAbstractKeyTreeModel keyTreeModel;
+    private Viewer viewer;
+
+    private TreeType treeType = TreeType.Tree;
+
+    /** Viewer this provided act upon. */
+    protected TreeViewer treeViewer;
+
+    private List<Locale> locales;
+    private String bundleId;
+    private String projectName;
+
+    public ResKeyTreeContentProvider(List<Locale> locales, String projectName,
+	    String bundleId, TreeType treeType) {
+	this.locales = locales;
+	this.projectName = projectName;
+	this.bundleId = bundleId;
+	this.treeType = treeType;
+    }
+
+    public void setBundleId(String bundleId) {
+	this.bundleId = bundleId;
+    }
+
+    public void setProjectName(String projectName) {
+	this.projectName = projectName;
+    }
+
+    public ResKeyTreeContentProvider() {
+	locales = new ArrayList<Locale>();
+    }
+
+    public void setLocales(List<Locale> locales) {
+	this.locales = locales;
+    }
+
+    @Override
+    public Object[] getChildren(Object parentElement) {
+	IKeyTreeNode parentNode = (IKeyTreeNode) parentElement;
+	switch (treeType) {
+	case Tree:
+	    return convertKTItoVKTI(keyTreeModel.getChildren(parentNode));
+	case Flat:
+	    return new IKeyTreeNode[0];
+	default:
+	    // Should not happen
+	    return new IKeyTreeNode[0];
+	}
+    }
+
+    protected Object[] convertKTItoVKTI(Object[] children) {
+	Collection<IValuedKeyTreeNode> items = new ArrayList<IValuedKeyTreeNode>();
+	IMessagesBundleGroup messagesBundleGroup = RBManager.getInstance(
+		this.projectName).getMessagesBundleGroup(this.bundleId);
+
+	for (Object o : children) {
+	    if (o instanceof IValuedKeyTreeNode)
+		items.add((IValuedKeyTreeNode) o);
+	    else {
+		IKeyTreeNode kti = (IKeyTreeNode) o;
+		IValuedKeyTreeNode vkti = KeyTreeFactory.createKeyTree(
+			kti.getParent(), kti.getName(), kti.getMessageKey(),
+			messagesBundleGroup);
+
+		for (IKeyTreeNode k : kti.getChildren()) {
+		    vkti.addChild(k);
+		}
+
+		// init translations
+		for (Locale l : locales) {
+		    try {
+			IMessage message = messagesBundleGroup
+				.getMessagesBundle(l).getMessage(
+					kti.getMessageKey());
+			if (message != null) {
+			    vkti.addValue(l, message.getValue());
+			}
+		    } catch (Exception e) {
+		    }
+		}
+		items.add(vkti);
+	    }
+	}
+
+	return items.toArray();
+    }
+
+    @Override
+    public Object[] getElements(Object inputElement) {
+	switch (treeType) {
+	case Tree:
+	    return convertKTItoVKTI(keyTreeModel.getRootNodes());
+	case Flat:
+	    final Collection<IKeyTreeNode> actualKeys = new ArrayList<IKeyTreeNode>();
+	    IKeyTreeVisitor visitor = new IKeyTreeVisitor() {
+		public void visitKeyTreeNode(IKeyTreeNode node) {
+		    if (node.isUsedAsKey()) {
+			actualKeys.add(node);
+		    }
+		}
+	    };
+	    keyTreeModel.accept(visitor, keyTreeModel.getRootNode());
+
+	    return actualKeys.toArray();
+	default:
+	    // Should not happen
+	    return new IKeyTreeNode[0];
+	}
+    }
+
+    @Override
+    public Object getParent(Object element) {
+	IKeyTreeNode node = (IKeyTreeNode) element;
+	switch (treeType) {
+	case Tree:
+	    return keyTreeModel.getParent(node);
+	case Flat:
+	    return keyTreeModel;
+	default:
+	    // Should not happen
+	    return null;
+	}
+    }
+
+    /**
+     * @see ITreeContentProvider#hasChildren(Object)
+     */
+    public boolean hasChildren(Object element) {
+	switch (treeType) {
+	case Tree:
+	    return keyTreeModel.getChildren((IKeyTreeNode) element).length > 0;
+	case Flat:
+	    return false;
+	default:
+	    // Should not happen
+	    return false;
+	}
+    }
+
+    public int countChildren(Object element) {
+
+	if (element instanceof IKeyTreeNode) {
+	    return ((IKeyTreeNode) element).getChildren().length;
+	} else if (element instanceof IValuedKeyTreeNode) {
+	    return ((IValuedKeyTreeNode) element).getChildren().length;
+	} else {
+	    System.out.println("wait a minute");
+	    return 1;
+	}
+    }
+
+    /**
+     * Gets the selected key tree item.
+     * 
+     * @return key tree item
+     */
+    private IKeyTreeNode getTreeSelection() {
+	IStructuredSelection selection = (IStructuredSelection) treeViewer
+		.getSelection();
+	return ((IKeyTreeNode) selection.getFirstElement());
+    }
+
+    @Override
+    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+	this.viewer = (TreeViewer) viewer;
+	this.keyTreeModel = (IAbstractKeyTreeModel) newInput;
+    }
+
+    public IMessagesBundleGroup getBundle() {
+	return RBManager.getInstance(projectName).getMessagesBundleGroup(
+		this.bundleId);
+    }
+
+    public String getBundleId() {
+	return bundleId;
+    }
+
+    @Override
+    public void dispose() {
+	// TODO Auto-generated method stub
+
+    }
+
+    public TreeType getTreeType() {
+	return treeType;
+    }
+
+    public void setTreeType(TreeType treeType) {
+	if (this.treeType != treeType) {
+	    this.treeType = treeType;
+	    if (viewer != null) {
+		viewer.refresh();
+	    }
+	}
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/provider/ResKeyTreeLabelProvider.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/provider/ResKeyTreeLabelProvider.java
new file mode 100644
index 0000000..9b74191
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/provider/ResKeyTreeLabelProvider.java
@@ -0,0 +1,191 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer, Alexej Strelzow.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ *     Alexej Strelzow - Babel integration
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.widgets.provider;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+import org.eclipse.babel.core.message.IMessage;
+import org.eclipse.babel.core.message.tree.IKeyTreeNode;
+import org.eclipse.babel.editor.api.IValuedKeyTreeNode;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.FontUtils;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.ImageUtils;
+import org.eclipse.babel.tapiji.tools.core.ui.widgets.filter.FilterInfo;
+import org.eclipse.jface.text.Region;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.ViewerCell;
+import org.eclipse.jface.viewers.ViewerRow;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StyleRange;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.TreeItem;
+
+public class ResKeyTreeLabelProvider extends KeyTreeLabelProvider {
+
+    private List<Locale> locales;
+    private boolean searchEnabled = false;
+
+    /*** COLORS ***/
+    private Color gray = FontUtils.getSystemColor(SWT.COLOR_GRAY);
+    private Color black = FontUtils.getSystemColor(SWT.COLOR_BLACK);
+    private Color info_color = FontUtils.getSystemColor(SWT.COLOR_YELLOW);
+
+    public ResKeyTreeLabelProvider(List<Locale> locales) {
+	this.locales = locales;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public Image getColumnImage(Object element, int columnIndex) {
+	if (columnIndex == 0) {
+	    IKeyTreeNode kti = (IKeyTreeNode) element;
+	    IMessage[] be = kti.getMessagesBundleGroup().getMessages(
+		    kti.getMessageKey());
+	    boolean incomplete = false;
+
+	    if (be.length != kti.getMessagesBundleGroup()
+		    .getMessagesBundleCount())
+		incomplete = true;
+	    else {
+		for (IMessage b : be) {
+		    if (b.getValue() == null
+			    || b.getValue().trim().length() == 0) {
+			incomplete = true;
+			break;
+		    }
+		}
+	    }
+
+	    if (incomplete) {
+		return ImageUtils.getImage(ImageUtils.ICON_RESOURCE_INCOMPLETE);
+	    } else {
+		return ImageUtils.getImage(ImageUtils.ICON_RESOURCE);
+	    }
+	}
+	return null;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String getColumnText(Object element, int columnIndex) {
+	if (columnIndex == 0) {
+	    return ((IKeyTreeNode) element).getName();
+	}
+
+	if (columnIndex <= locales.size()) {
+	    IValuedKeyTreeNode item = (IValuedKeyTreeNode) element;
+	    String entry = item.getValue(locales.get(columnIndex - 1));
+	    if (entry != null) {
+		return entry;
+	    }
+	}
+	return "";
+    }
+
+    public void setSearchEnabled(boolean enabled) {
+	this.searchEnabled = enabled;
+    }
+
+    public boolean isSearchEnabled() {
+	return this.searchEnabled;
+    }
+
+    public void setLocales(List<Locale> visibleLocales) {
+	locales = visibleLocales;
+    }
+
+    protected boolean isMatchingToPattern(Object element, int columnIndex) {
+	boolean matching = false;
+
+	if (element instanceof IValuedKeyTreeNode) {
+	    IValuedKeyTreeNode vkti = (IValuedKeyTreeNode) element;
+
+	    if (vkti.getInfo() == null)
+		return false;
+
+	    FilterInfo filterInfo = (FilterInfo) vkti.getInfo();
+
+	    if (columnIndex == 0) {
+		matching = filterInfo.isFoundInKey();
+	    } else {
+		matching = filterInfo.hasFoundInLocale(locales
+			.get(columnIndex - 1));
+	    }
+	}
+
+	return matching;
+    }
+
+    protected boolean isSearchEnabled(Object element) {
+	return (element instanceof IValuedKeyTreeNode && searchEnabled);
+    }
+
+    public void updateTreeViewer(TreeViewer treeViewer) {
+
+	for (TreeItem item : treeViewer.getTree().getItems()) {
+	    Rectangle bounds = item.getBounds();
+	    ViewerCell cell = treeViewer.getCell(new Point(bounds.x, bounds.y));
+	    ViewerRow viewerRow = cell.getViewerRow();
+
+	    for (int i = 0; i < viewerRow.getColumnCount(); i++) {
+		updateCell(viewerRow.getCell(i));
+	    }
+	}
+    }
+
+    private void updateCell(ViewerCell cell) {
+	Object element = cell.getElement();
+	int columnIndex = cell.getColumnIndex();
+
+	if (isSearchEnabled(element)) {
+	    if (isMatchingToPattern(element, columnIndex)) {
+		List<StyleRange> styleRanges = new ArrayList<StyleRange>();
+		FilterInfo filterInfo = (FilterInfo) ((IValuedKeyTreeNode) element)
+			.getInfo();
+
+		if (columnIndex > 0) {
+		    for (Region reg : filterInfo.getFoundInLocaleRanges(locales
+			    .get(columnIndex - 1))) {
+			styleRanges.add(new StyleRange(reg.getOffset(), reg
+				.getLength(), black, info_color, SWT.BOLD));
+		    }
+		} else {
+		    // check if the pattern has been found within the key
+		    // section
+		    if (filterInfo.isFoundInKey()) {
+			for (Region reg : filterInfo.getKeyOccurrences()) {
+			    StyleRange sr = new StyleRange(reg.getOffset(),
+				    reg.getLength(), black, info_color,
+				    SWT.BOLD);
+			    styleRanges.add(sr);
+			}
+		    }
+		}
+		cell.setStyleRanges(styleRanges
+			.toArray(new StyleRange[styleRanges.size()]));
+	    } else {
+		cell.setForeground(gray);
+	    }
+	} else if (columnIndex == 0) {
+	    super.update(cell);
+	}
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/provider/ValueKeyTreeLabelProvider.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/provider/ValueKeyTreeLabelProvider.java
new file mode 100644
index 0000000..4efa9f2
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/provider/ValueKeyTreeLabelProvider.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.widgets.provider;
+
+import org.eclipse.babel.core.message.IMessage;
+import org.eclipse.babel.core.message.IMessagesBundle;
+import org.eclipse.babel.core.message.tree.IKeyTreeNode;
+import org.eclipse.jface.viewers.ITableColorProvider;
+import org.eclipse.jface.viewers.ITableFontProvider;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+
+public class ValueKeyTreeLabelProvider extends KeyTreeLabelProvider implements
+	ITableColorProvider, ITableFontProvider {
+
+    private IMessagesBundle locale;
+
+    public ValueKeyTreeLabelProvider(IMessagesBundle iBundle) {
+	this.locale = iBundle;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public Image getColumnImage(Object element, int columnIndex) {
+	return null;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String getColumnText(Object element, int columnIndex) {
+	try {
+	    IKeyTreeNode item = (IKeyTreeNode) element;
+	    IMessage entry = locale.getMessage(item.getMessageKey());
+	    if (entry != null) {
+		String value = entry.getValue();
+		if (value.length() > 40)
+		    value = value.substring(0, 39) + "...";
+	    }
+	} catch (Exception e) {
+	}
+	return "";
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public Color getBackground(Object element, int columnIndex) {
+	return null;// return new Color(Display.getDefault(), 255, 0, 0);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public Color getForeground(Object element, int columnIndex) {
+	return null;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public Font getFont(Object element, int columnIndex) {
+	return null; // UIUtils.createFont(SWT.BOLD);
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/sorter/ValuedKeyTreeItemSorter.java b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/sorter/ValuedKeyTreeItemSorter.java
new file mode 100644
index 0000000..824f7b4
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core.ui/src/org/eclipse/babel/tapiji/tools/core/ui/widgets/sorter/ValuedKeyTreeItemSorter.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.ui.widgets.sorter;
+
+import java.util.Locale;
+
+import org.eclipse.babel.editor.api.IValuedKeyTreeNode;
+import org.eclipse.babel.tapiji.tools.core.ui.views.messagesview.SortInfo;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+
+public class ValuedKeyTreeItemSorter extends ViewerSorter {
+
+    private StructuredViewer viewer;
+    private SortInfo sortInfo;
+
+    public ValuedKeyTreeItemSorter(StructuredViewer viewer, SortInfo sortInfo) {
+	this.viewer = viewer;
+	this.sortInfo = sortInfo;
+    }
+
+    public StructuredViewer getViewer() {
+	return viewer;
+    }
+
+    public void setViewer(StructuredViewer viewer) {
+	this.viewer = viewer;
+    }
+
+    public SortInfo getSortInfo() {
+	return sortInfo;
+    }
+
+    public void setSortInfo(SortInfo sortInfo) {
+	this.sortInfo = sortInfo;
+    }
+
+    @Override
+    public int compare(Viewer viewer, Object e1, Object e2) {
+	try {
+	    if (!(e1 instanceof IValuedKeyTreeNode && e2 instanceof IValuedKeyTreeNode))
+		return super.compare(viewer, e1, e2);
+	    IValuedKeyTreeNode comp1 = (IValuedKeyTreeNode) e1;
+	    IValuedKeyTreeNode comp2 = (IValuedKeyTreeNode) e2;
+
+	    int result = 0;
+
+	    if (sortInfo == null)
+		return 0;
+
+	    if (sortInfo.getColIdx() == 0)
+		result = comp1.getMessageKey().compareTo(comp2.getMessageKey());
+	    else {
+		Locale loc = sortInfo.getVisibleLocales().get(
+			sortInfo.getColIdx() - 1);
+		result = (comp1.getValue(loc) == null ? "" : comp1
+			.getValue(loc))
+			.compareTo((comp2.getValue(loc) == null ? "" : comp2
+				.getValue(loc)));
+	    }
+
+	    return result * (sortInfo.isDESC() ? -1 : 1);
+	} catch (Exception e) {
+	    return 0;
+	}
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core/.classpath b/org.eclipse.babel.tapiji.tools.core/.classpath
new file mode 100644
index 0000000..8a8f166
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/org.eclipse.babel.tapiji.tools.core/.project b/org.eclipse.babel.tapiji.tools.core/.project
new file mode 100644
index 0000000..6d850ba
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.babel.tapiji.tools.core</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+	</natures>

+</projectDescription>

diff --git a/org.eclipse.babel.tapiji.tools.core/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.babel.tapiji.tools.core/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..a28e1c9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Mon Aug 23 17:53:06 CEST 2010

+eclipse.preferences.version=1

+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6

+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve

+org.eclipse.jdt.core.compiler.compliance=1.6

+org.eclipse.jdt.core.compiler.debug.lineNumber=generate

+org.eclipse.jdt.core.compiler.debug.localVariable=generate

+org.eclipse.jdt.core.compiler.debug.sourceFile=generate

+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

+org.eclipse.jdt.core.compiler.source=1.6

diff --git a/org.eclipse.babel.tapiji.tools.core/.settings/org.eclipse.pde.core.prefs b/org.eclipse.babel.tapiji.tools.core/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..5186f82
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,3 @@
+#Sat Jan 01 13:54:32 CET 2011

+eclipse.preferences.version=1

+resolve.requirebundle=false

diff --git a/org.eclipse.babel.tapiji.tools.core/META-INF/MANIFEST.MF b/org.eclipse.babel.tapiji.tools.core/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..d9209fe
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/META-INF/MANIFEST.MF
@@ -0,0 +1,30 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: TapiJI Tools
+Bundle-SymbolicName: org.eclipse.babel.tapiji.tools.core;singleton:=true
+Bundle-Version: 0.0.2.qualifier
+Bundle-Activator: org.eclipse.babel.tapiji.tools.core.Activator
+Bundle-Vendor: Vienna University of Technology
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.jdt.core;bundle-version="3.5.2",
+ org.eclipse.core.resources,
+ org.eclipse.babel.core;bundle-version="0.8.0";visibility:=reexport,
+ org.eclipse.ui.ide;bundle-version="3.7.0",
+ org.eclipse.ui;bundle-version="3.7.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Import-Package: 
+ org.eclipse.core.filebuffers,
+ org.eclipse.core.resources,
+ org.eclipse.jdt.core,
+ org.eclipse.jdt.core.dom,
+ org.eclipse.jface.text,
+ org.eclipse.jface.text.contentassist,
+ org.eclipse.ui.ide,
+ org.eclipse.ui.texteditor
+Export-Package: org.eclipse.babel.tapiji.tools.core,
+ org.eclipse.babel.tapiji.tools.core.extensions,
+ org.eclipse.babel.tapiji.tools.core.model,
+ org.eclipse.babel.tapiji.tools.core.model.exception,
+ org.eclipse.babel.tapiji.tools.core.model.manager,
+ org.eclipse.babel.tapiji.tools.core.util
+Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.babel.tapiji.tools.core/about.html b/org.eclipse.babel.tapiji.tools.core/about.html
new file mode 100644
index 0000000..f47dbdd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>

+<title>About</title>

+</head>

+<body lang="EN-US">

+<h2>About This Content</h2>

+ 

+<p>June 5, 2006</p>	

+<h3>License</h3>

+

+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 

+indicated below, the Content is provided to you under the terms and conditions of the

+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 

+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.

+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>

+

+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 

+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may

+apply to your use of any object code in the Content.  Check the Redistributor's license that was 

+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise

+indicated below, the terms and conditions of the EPL still apply to any source code in the Content

+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>

+

+</body>

+</html>
\ No newline at end of file
diff --git a/org.eclipse.babel.tapiji.tools.core/build.properties b/org.eclipse.babel.tapiji.tools.core/build.properties
new file mode 100644
index 0000000..e8dfe31
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/build.properties
@@ -0,0 +1,41 @@
+source.. = src/

+bin.includes = plugin.xml,\

+               META-INF/,\

+               .,\

+               icons/,\

+               schema/,\

+               about.html,\

+               about.ini,\

+               about.mappings,\

+               about.properties,\

+               TapiJI.png,\

+               Splash.bmp,\

+               TapiJI.gif,\

+               epl-v10.html,\

+               bin/,\

+               src/,\

+               resourcebundle.jar

+bin.excludes = icons/original/,\

+               icons/photoshop/

+src.excludes = icons/original/,\

+               icons/photoshop/

+src.includes = src/,\

+               schema/,\

+               icons/,\

+               about.html,\

+               about.ini,\

+               about.mappings,\

+               about.properties,\

+               TapiJI.png,\

+               Splash.bmp,\

+               TapiJI.gif,\

+               epl-v10.html

+jars.compile.order = .,\

+                     resourcebundle.jar

+output.resourcebundle.jar = bin/

+source.resourcebundle.jar = bin/,\

+                            src/,\

+                            schema/,\

+                            META-INF/,\

+                            icons/,\

+                            .settings/

diff --git a/org.eclipse.babel.tapiji.tools.core/epl-v10.html b/org.eclipse.babel.tapiji.tools.core/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>3</o:TotalTime>
+  <o:Created>2004-03-05T23:03:00Z</o:Created>
+  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+  <o:Pages>4</o:Pages>
+  <o:Words>1626</o:Words>
+  <o:Characters>9270</o:Characters>
+   <o:Lines>77</o:Lines>
+  <o:Paragraphs>18</o:Paragraphs>
+  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+  <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p
+	{margin-right:0in;
+	mso-margin-top-alt:auto;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+	{mso-style-name:"Balloon Text";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:8.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+@page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>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. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; 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. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>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.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>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. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>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.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>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. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>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; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>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.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>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. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>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 (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) 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.</span> </p>
+
+<p><span style='font-size:10.0pt'>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.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; 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. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>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.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>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.</span> </p>
+
+<p><span style='font-size:10.0pt'>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. </span></p>
+
+<p><span style='font-size:10.0pt'>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. </span></p>
+
+<p><span style='font-size:10.0pt'>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.</span> </p>
+
+<p><span style='font-size:10.0pt'>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.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/Folder.png b/org.eclipse.babel.tapiji.tools.core/icons/Folder.png
new file mode 100644
index 0000000..a699bfc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/Folder.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/Glossary.psd b/org.eclipse.babel.tapiji.tools.core/icons/Glossary.psd
new file mode 100644
index 0000000..9da95ac
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/Glossary.psd
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/NewGlossary.png b/org.eclipse.babel.tapiji.tools.core/icons/NewGlossary.png
new file mode 100644
index 0000000..ac91bf1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/NewGlossary.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/OpenGlossary.png b/org.eclipse.babel.tapiji.tools.core/icons/OpenGlossary.png
new file mode 100644
index 0000000..85917f4
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/OpenGlossary.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/OpenGlossary2.png b/org.eclipse.babel.tapiji.tools.core/icons/OpenGlossary2.png
new file mode 100644
index 0000000..e02b952
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/OpenGlossary2.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/OpenGlossary3.png b/org.eclipse.babel.tapiji.tools.core/icons/OpenGlossary3.png
new file mode 100644
index 0000000..e8a0b0a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/OpenGlossary3.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/OpenGlossary4.png b/org.eclipse.babel.tapiji.tools.core/icons/OpenGlossary4.png
new file mode 100644
index 0000000..7a2ddc7
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/OpenGlossary4.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/OpenGlossary5.png b/org.eclipse.babel.tapiji.tools.core/icons/OpenGlossary5.png
new file mode 100644
index 0000000..020c1ad
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/OpenGlossary5.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/Resource16.png b/org.eclipse.babel.tapiji.tools.core/icons/Resource16.png
new file mode 100644
index 0000000..1b0966c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/Resource16.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/Resource16_small.png b/org.eclipse.babel.tapiji.tools.core/icons/Resource16_small.png
new file mode 100644
index 0000000..da9f603
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/Resource16_small.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/Resource16_warning_small.png b/org.eclipse.babel.tapiji.tools.core/icons/Resource16_warning_small.png
new file mode 100644
index 0000000..ec47a9a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/Resource16_warning_small.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/TapiJI.png b/org.eclipse.babel.tapiji.tools.core/icons/TapiJI.png
new file mode 100644
index 0000000..e274c0c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/TapiJI.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/TapiJI_128.png b/org.eclipse.babel.tapiji.tools.core/icons/TapiJI_128.png
new file mode 100644
index 0000000..98514e0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/TapiJI_128.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/TapiJI_16.png b/org.eclipse.babel.tapiji.tools.core/icons/TapiJI_16.png
new file mode 100644
index 0000000..73b82c2
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/TapiJI_16.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/TapiJI_32.png b/org.eclipse.babel.tapiji.tools.core/icons/TapiJI_32.png
new file mode 100644
index 0000000..3984eba
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/TapiJI_32.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/TapiJI_48.png b/org.eclipse.babel.tapiji.tools.core/icons/TapiJI_48.png
new file mode 100644
index 0000000..190a92e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/TapiJI_48.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/TapiJI_64.png b/org.eclipse.babel.tapiji.tools.core/icons/TapiJI_64.png
new file mode 100644
index 0000000..8998807
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/TapiJI_64.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/.cvsignore b/org.eclipse.babel.tapiji.tools.core/icons/countries/.cvsignore
new file mode 100644
index 0000000..f47afba
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/.cvsignore
@@ -0,0 +1 @@
+Thumbs.db

diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/__.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/__.gif
new file mode 100644
index 0000000..6516784
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/__.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/_f.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/_f.gif
new file mode 100644
index 0000000..a5f340d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/_f.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ad.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ad.gif
new file mode 100644
index 0000000..0b24054
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ad.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ae.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ae.gif
new file mode 100644
index 0000000..a4a82ff
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ae.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/af.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/af.gif
new file mode 100644
index 0000000..70e1a15
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/af.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ag.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ag.gif
new file mode 100644
index 0000000..2dc04e5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ag.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/al.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/al.gif
new file mode 100644
index 0000000..1384f59
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/al.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/am.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/am.gif
new file mode 100644
index 0000000..eda901e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/am.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ao.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ao.gif
new file mode 100644
index 0000000..56f02bb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ao.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/aq.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/aq.gif
new file mode 100644
index 0000000..d8e99da
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/aq.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ar.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ar.gif
new file mode 100644
index 0000000..0231d50
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ar.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/at.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/at.gif
new file mode 100644
index 0000000..ecf48b9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/at.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/au.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/au.gif
new file mode 100644
index 0000000..7776124
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/au.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/az.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/az.gif
new file mode 100644
index 0000000..bc77ff2
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/az.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ba.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ba.gif
new file mode 100644
index 0000000..8e4e549
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ba.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/bb.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/bb.gif
new file mode 100644
index 0000000..54928a6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/bb.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/bd.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/bd.gif
new file mode 100644
index 0000000..25890b9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/bd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/be.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/be.gif
new file mode 100644
index 0000000..f917f39
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/be.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/bf.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/bf.gif
new file mode 100644
index 0000000..53afd44
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/bf.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/bg.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/bg.gif
new file mode 100644
index 0000000..5ce1db1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/bg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/bh.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/bh.gif
new file mode 100644
index 0000000..ba39230
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/bh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/bi.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/bi.gif
new file mode 100644
index 0000000..ee3d6a4
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/bi.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/bj.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/bj.gif
new file mode 100644
index 0000000..55463ef
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/bj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/blank.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/blank.gif
new file mode 100644
index 0000000..314b863
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/blank.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/bn.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/bn.gif
new file mode 100644
index 0000000..ed11638
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/bn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/bo.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/bo.gif
new file mode 100644
index 0000000..f179698
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/bo.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/br.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/br.gif
new file mode 100644
index 0000000..e1069e0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/br.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/bs.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/bs.gif
new file mode 100644
index 0000000..30c32c3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/bs.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/bt.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/bt.gif
new file mode 100644
index 0000000..b53dddf
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/bt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/bw.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/bw.gif
new file mode 100644
index 0000000..d73ad71
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/bw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/by.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/by.gif
new file mode 100644
index 0000000..3335ae0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/by.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/bz.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/bz.gif
new file mode 100644
index 0000000..ec05637
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/bz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ca.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ca.gif
new file mode 100644
index 0000000..547011a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ca.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/cd.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/cd.gif
new file mode 100644
index 0000000..44fa441
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/cd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/cf.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/cf.gif
new file mode 100644
index 0000000..41405ce
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/cf.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/cg.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/cg.gif
new file mode 100644
index 0000000..00fa29c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/cg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ch.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ch.gif
new file mode 100644
index 0000000..b0dc176
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ch.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ci.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ci.gif
new file mode 100644
index 0000000..b1167c0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ci.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/cl.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/cl.gif
new file mode 100644
index 0000000..31dcb03
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/cl.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/cm.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/cm.gif
new file mode 100644
index 0000000..f361dbd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/cm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/cn.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/cn.gif
new file mode 100644
index 0000000..f12f17d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/cn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/co.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/co.gif
new file mode 100644
index 0000000..d9f14e7
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/co.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/cr.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/cr.gif
new file mode 100644
index 0000000..2a5f0b9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/cr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/cs.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/cs.gif
new file mode 100644
index 0000000..580d26f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/cs.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/cu.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/cu.gif
new file mode 100644
index 0000000..823befc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/cu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/cv.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/cv.gif
new file mode 100644
index 0000000..d21a45c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/cv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/cy.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/cy.gif
new file mode 100644
index 0000000..1a332d9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/cy.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/cz.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/cz.gif
new file mode 100644
index 0000000..2faee5e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/cz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/dd.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/dd.gif
new file mode 100644
index 0000000..99eda38
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/dd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/de.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/de.gif
new file mode 100644
index 0000000..c7b2840
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/de.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/dj.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/dj.gif
new file mode 100644
index 0000000..94fc2eb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/dj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/dk.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/dk.gif
new file mode 100644
index 0000000..4f01ec9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/dk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/dm.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/dm.gif
new file mode 100644
index 0000000..b4fed90
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/dm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/do.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/do.gif
new file mode 100644
index 0000000..85d7be8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/do.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/dz.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/dz.gif
new file mode 100644
index 0000000..622ff6b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/dz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ec.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ec.gif
new file mode 100644
index 0000000..5d1641b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ec.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ee.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ee.gif
new file mode 100644
index 0000000..c678c73
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ee.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/eg.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/eg.gif
new file mode 100644
index 0000000..a740c66
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/eg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/eh.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/eh.gif
new file mode 100644
index 0000000..6a75cc3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/eh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/er.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/er.gif
new file mode 100644
index 0000000..71297d6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/er.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/es.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/es.gif
new file mode 100644
index 0000000..6dee15c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/es.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/et.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/et.gif
new file mode 100644
index 0000000..4188e4f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/et.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/eu.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/eu.gif
new file mode 100644
index 0000000..45caabf
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/eu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/fi.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/fi.gif
new file mode 100644
index 0000000..b8311ca
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/fi.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/fj.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/fj.gif
new file mode 100644
index 0000000..f5481b7
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/fj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/fm.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/fm.gif
new file mode 100644
index 0000000..050eca0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/fm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/fr.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/fr.gif
new file mode 100644
index 0000000..a2a2354
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/fr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ga.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ga.gif
new file mode 100644
index 0000000..54fb251
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ga.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/gb.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/gb.gif
new file mode 100644
index 0000000..4ae2d0f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/gb.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/gd.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/gd.gif
new file mode 100644
index 0000000..0095032
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/gd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ge.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ge.gif
new file mode 100644
index 0000000..f3927c8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ge.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/gh.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/gh.gif
new file mode 100644
index 0000000..6d3b614
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/gh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/gm.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/gm.gif
new file mode 100644
index 0000000..2ecf0b0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/gm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/gn.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/gn.gif
new file mode 100644
index 0000000..8317935
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/gn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/gq.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/gq.gif
new file mode 100644
index 0000000..6c2bc47
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/gq.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/gr.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/gr.gif
new file mode 100644
index 0000000..1599add
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/gr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/gt.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/gt.gif
new file mode 100644
index 0000000..c306f25
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/gt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/gw.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/gw.gif
new file mode 100644
index 0000000..6cba590
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/gw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/gy.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/gy.gif
new file mode 100644
index 0000000..a4b4da9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/gy.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/hk.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/hk.gif
new file mode 100644
index 0000000..230723a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/hk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/hn.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/hn.gif
new file mode 100644
index 0000000..0550157
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/hn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/hr.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/hr.gif
new file mode 100644
index 0000000..893778a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/hr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ht.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ht.gif
new file mode 100644
index 0000000..e5cf780
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ht.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/hu.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/hu.gif
new file mode 100644
index 0000000..0777883
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/hu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/id.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/id.gif
new file mode 100644
index 0000000..9fed764
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/id.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ie.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ie.gif
new file mode 100644
index 0000000..82ec553
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ie.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/il.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/il.gif
new file mode 100644
index 0000000..554a761
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/il.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/in.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/in.gif
new file mode 100644
index 0000000..430b37b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/in.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/iq.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/iq.gif
new file mode 100644
index 0000000..dae4d59
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/iq.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ir.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ir.gif
new file mode 100644
index 0000000..50f5432
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ir.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/is.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/is.gif
new file mode 100644
index 0000000..e9580e0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/is.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/it.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/it.gif
new file mode 100644
index 0000000..4256b46
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/it.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/jm.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/jm.gif
new file mode 100644
index 0000000..f1459fe
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/jm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/jo.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/jo.gif
new file mode 100644
index 0000000..a9d3612
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/jo.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/jp.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/jp.gif
new file mode 100644
index 0000000..ddad6e3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/jp.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ke.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ke.gif
new file mode 100644
index 0000000..6e06f4a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ke.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/kg.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/kg.gif
new file mode 100644
index 0000000..e47fb0f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/kg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/kh.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/kh.gif
new file mode 100644
index 0000000..31f5be1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/kh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ki.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ki.gif
new file mode 100644
index 0000000..9f12bb0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ki.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/km.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/km.gif
new file mode 100644
index 0000000..027276b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/km.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/kn.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/kn.gif
new file mode 100644
index 0000000..f690875
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/kn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/kp.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/kp.gif
new file mode 100644
index 0000000..42584ef
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/kp.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/kr.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/kr.gif
new file mode 100644
index 0000000..800c6cd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/kr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/kw.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/kw.gif
new file mode 100644
index 0000000..ff083b5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/kw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/kz.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/kz.gif
new file mode 100644
index 0000000..9b13afe
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/kz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/la.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/la.gif
new file mode 100644
index 0000000..3c6f2f1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/la.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/lb.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/lb.gif
new file mode 100644
index 0000000..f3c4552
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/lb.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/lc.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/lc.gif
new file mode 100644
index 0000000..fdcbd97
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/lc.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/li.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/li.gif
new file mode 100644
index 0000000..eb9d938
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/li.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/lk.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/lk.gif
new file mode 100644
index 0000000..3aa25aa
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/lk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/lr.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/lr.gif
new file mode 100644
index 0000000..f54468f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/lr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ls.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ls.gif
new file mode 100644
index 0000000..c1ad8d2
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ls.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/lt.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/lt.gif
new file mode 100644
index 0000000..78447f0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/lt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/lu.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/lu.gif
new file mode 100644
index 0000000..d74df5a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/lu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/lv.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/lv.gif
new file mode 100644
index 0000000..5f7419c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/lv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ly.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ly.gif
new file mode 100644
index 0000000..8ca9e0a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ly.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ma.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ma.gif
new file mode 100644
index 0000000..3aab8cb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ma.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/mc.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/mc.gif
new file mode 100644
index 0000000..c22c171
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/mc.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/md.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/md.gif
new file mode 100644
index 0000000..4951b21
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/md.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/mg.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/mg.gif
new file mode 100644
index 0000000..24281d8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/mg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/mh.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/mh.gif
new file mode 100644
index 0000000..c472aee
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/mh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/mk.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/mk.gif
new file mode 100644
index 0000000..88c077f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/mk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ml.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ml.gif
new file mode 100644
index 0000000..4eb75ae
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ml.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/mm.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/mm.gif
new file mode 100644
index 0000000..bd37855
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/mm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/mn.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/mn.gif
new file mode 100644
index 0000000..de3029b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/mn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/mr.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/mr.gif
new file mode 100644
index 0000000..d7cbb38
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/mr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/mt.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/mt.gif
new file mode 100644
index 0000000..677969a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/mt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/mu.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/mu.gif
new file mode 100644
index 0000000..d102ab7
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/mu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/mv.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/mv.gif
new file mode 100644
index 0000000..69ac686
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/mv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/mw.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/mw.gif
new file mode 100644
index 0000000..a0f0320
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/mw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/mx.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/mx.gif
new file mode 100644
index 0000000..bbcb376
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/mx.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/my.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/my.gif
new file mode 100644
index 0000000..8874751
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/my.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/mz.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/mz.gif
new file mode 100644
index 0000000..b63af28
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/mz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/na.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/na.gif
new file mode 100644
index 0000000..bee7072
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/na.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ne.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ne.gif
new file mode 100644
index 0000000..fc1b74b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ne.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ng.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ng.gif
new file mode 100644
index 0000000..43af12c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ng.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ni.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ni.gif
new file mode 100644
index 0000000..cac0042
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ni.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/nl.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/nl.gif
new file mode 100644
index 0000000..c4258e6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/nl.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/no.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/no.gif
new file mode 100644
index 0000000..873baca
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/no.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/np.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/np.gif
new file mode 100644
index 0000000..f01f2f9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/np.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/nr.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/nr.gif
new file mode 100644
index 0000000..d485c4b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/nr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/nu.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/nu.gif
new file mode 100644
index 0000000..7317705
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/nu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/nz.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/nz.gif
new file mode 100644
index 0000000..49f8464
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/nz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/om.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/om.gif
new file mode 100644
index 0000000..d90ca33
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/om.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/pa.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/pa.gif
new file mode 100644
index 0000000..cae5432
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/pa.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/pe.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/pe.gif
new file mode 100644
index 0000000..e6cc734
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/pe.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/pg.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/pg.gif
new file mode 100644
index 0000000..108204f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/pg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ph.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ph.gif
new file mode 100644
index 0000000..b141cd8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ph.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/pk.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/pk.gif
new file mode 100644
index 0000000..f612b97
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/pk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/pl.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/pl.gif
new file mode 100644
index 0000000..6ff3ba6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/pl.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ps.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ps.gif
new file mode 100644
index 0000000..71717cc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ps.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/pt.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/pt.gif
new file mode 100644
index 0000000..9bfc8ca
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/pt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/pw.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/pw.gif
new file mode 100644
index 0000000..0a52091
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/pw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/py.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/py.gif
new file mode 100644
index 0000000..b52de24
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/py.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/qa.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/qa.gif
new file mode 100644
index 0000000..e078e46
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/qa.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ro.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ro.gif
new file mode 100644
index 0000000..6bdbad1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ro.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ru.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ru.gif
new file mode 100644
index 0000000..cf4d30c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ru.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/rw.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/rw.gif
new file mode 100644
index 0000000..02cf0cb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/rw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/sa.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/sa.gif
new file mode 100644
index 0000000..4b7632e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/sa.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/sb.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/sb.gif
new file mode 100644
index 0000000..eb8acc0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/sb.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/sc.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/sc.gif
new file mode 100644
index 0000000..4324c21
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/sc.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/sd.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/sd.gif
new file mode 100644
index 0000000..2d74f62
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/sd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/se.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/se.gif
new file mode 100644
index 0000000..9bbcb1f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/se.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/sg.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/sg.gif
new file mode 100644
index 0000000..b81f461
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/sg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/si.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/si.gif
new file mode 100644
index 0000000..f6afb67
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/si.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/sk.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/sk.gif
new file mode 100644
index 0000000..b0c4ab1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/sk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/sl.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/sl.gif
new file mode 100644
index 0000000..00d59d3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/sl.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/sm.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/sm.gif
new file mode 100644
index 0000000..8d9d76b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/sm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/__.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/__.gif
new file mode 100644
index 0000000..e077f11
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/__.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/_f.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/_f.gif
new file mode 100644
index 0000000..06c1146
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/_f.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ad.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ad.gif
new file mode 100644
index 0000000..578acbb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ad.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ae.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ae.gif
new file mode 100644
index 0000000..9e6f62a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ae.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/af.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/af.gif
new file mode 100644
index 0000000..9fe3975
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/af.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ag.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ag.gif
new file mode 100644
index 0000000..dff85d5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ag.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/al.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/al.gif
new file mode 100644
index 0000000..3cd0dbc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/al.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/am.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/am.gif
new file mode 100644
index 0000000..b5968d0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/am.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ao.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ao.gif
new file mode 100644
index 0000000..cf5f1bb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ao.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/aq.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/aq.gif
new file mode 100644
index 0000000..8394537
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/aq.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ar.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ar.gif
new file mode 100644
index 0000000..7101d18
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ar.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/at.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/at.gif
new file mode 100644
index 0000000..b302cb9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/at.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/au.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/au.gif
new file mode 100644
index 0000000..1e7d95c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/au.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/az.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/az.gif
new file mode 100644
index 0000000..02d9ee9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/az.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ba.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ba.gif
new file mode 100644
index 0000000..1007efd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ba.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bb.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bb.gif
new file mode 100644
index 0000000..29a51f9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bb.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bd.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bd.gif
new file mode 100644
index 0000000..e6f4dc5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/be.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/be.gif
new file mode 100644
index 0000000..55ec17f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/be.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bf.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bf.gif
new file mode 100644
index 0000000..fc26ebb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bf.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bg.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bg.gif
new file mode 100644
index 0000000..04664c0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bh.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bh.gif
new file mode 100644
index 0000000..9dc18e6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bi.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bi.gif
new file mode 100644
index 0000000..6aed037
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bi.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bj.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bj.gif
new file mode 100644
index 0000000..c4d0f86
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/blank.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/blank.gif
new file mode 100644
index 0000000..93f9113
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/blank.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bn.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bn.gif
new file mode 100644
index 0000000..e9481fe
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bo.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bo.gif
new file mode 100644
index 0000000..f083da3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bo.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/br.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/br.gif
new file mode 100644
index 0000000..b44b857
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/br.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bs.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bs.gif
new file mode 100644
index 0000000..dd013c4
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bs.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bt.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bt.gif
new file mode 100644
index 0000000..c12cc45
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bw.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bw.gif
new file mode 100644
index 0000000..0bd4935
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/by.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/by.gif
new file mode 100644
index 0000000..495e17a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/by.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bz.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bz.gif
new file mode 100644
index 0000000..ebc5a1f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/bz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ca.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ca.gif
new file mode 100644
index 0000000..111f6b5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ca.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cd.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cd.gif
new file mode 100644
index 0000000..48a5d4b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cf.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cf.gif
new file mode 100644
index 0000000..82dfeb8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cf.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cg.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cg.gif
new file mode 100644
index 0000000..bc4ce41
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ch.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ch.gif
new file mode 100644
index 0000000..c1daa8c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ch.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ci.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ci.gif
new file mode 100644
index 0000000..01ce79f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ci.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cl.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cl.gif
new file mode 100644
index 0000000..579c737
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cl.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cm.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cm.gif
new file mode 100644
index 0000000..5093f62
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cn.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cn.gif
new file mode 100644
index 0000000..e064426
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/co.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/co.gif
new file mode 100644
index 0000000..ea33538
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/co.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cr.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cr.gif
new file mode 100644
index 0000000..1c3175b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cs.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cs.gif
new file mode 100644
index 0000000..88b6598
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cs.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cu.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cu.gif
new file mode 100644
index 0000000..3333434
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cv.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cv.gif
new file mode 100644
index 0000000..9b13e53
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cy.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cy.gif
new file mode 100644
index 0000000..249719a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cy.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cz.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cz.gif
new file mode 100644
index 0000000..0ae066c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/cz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/dd.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/dd.gif
new file mode 100644
index 0000000..4a47e19
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/dd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/de.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/de.gif
new file mode 100644
index 0000000..6cc466d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/de.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/dj.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/dj.gif
new file mode 100644
index 0000000..e62e277
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/dj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/dk.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/dk.gif
new file mode 100644
index 0000000..f3803a0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/dk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/dm.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/dm.gif
new file mode 100644
index 0000000..69f8079
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/dm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/do.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/do.gif
new file mode 100644
index 0000000..4b9a269
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/do.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/dz.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/dz.gif
new file mode 100644
index 0000000..e88ec91
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/dz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ec.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ec.gif
new file mode 100644
index 0000000..7060478
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ec.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ee.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ee.gif
new file mode 100644
index 0000000..1eb1079
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ee.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/eg.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/eg.gif
new file mode 100644
index 0000000..4efa288
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/eg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/eh.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/eh.gif
new file mode 100644
index 0000000..9acceed
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/eh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/er.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/er.gif
new file mode 100644
index 0000000..30550a3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/er.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/es.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/es.gif
new file mode 100644
index 0000000..9d01bd4
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/es.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/et.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/et.gif
new file mode 100644
index 0000000..7352fca
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/et.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/eu.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/eu.gif
new file mode 100644
index 0000000..1eadf21
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/eu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/fi.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/fi.gif
new file mode 100644
index 0000000..d61952f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/fi.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/fj.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/fj.gif
new file mode 100644
index 0000000..2bcd330
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/fj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/fm.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/fm.gif
new file mode 100644
index 0000000..7f5dbf1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/fm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/fr.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/fr.gif
new file mode 100644
index 0000000..5b9680b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/fr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ga.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ga.gif
new file mode 100644
index 0000000..10322d2
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ga.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gb.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gb.gif
new file mode 100644
index 0000000..03a7414
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gb.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gd.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gd.gif
new file mode 100644
index 0000000..69e2b79
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ge.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ge.gif
new file mode 100644
index 0000000..daeade3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ge.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gh.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gh.gif
new file mode 100644
index 0000000..b1ee6cc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gm.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gm.gif
new file mode 100644
index 0000000..0540321
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gn.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gn.gif
new file mode 100644
index 0000000..18c9211
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gq.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gq.gif
new file mode 100644
index 0000000..21b35aa
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gq.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gr.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gr.gif
new file mode 100644
index 0000000..e690519
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gt.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gt.gif
new file mode 100644
index 0000000..5c3d061
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gw.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gw.gif
new file mode 100644
index 0000000..5d8901f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gy.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gy.gif
new file mode 100644
index 0000000..42483db
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/gy.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/hk.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/hk.gif
new file mode 100644
index 0000000..c745c14
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/hk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/hn.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/hn.gif
new file mode 100644
index 0000000..e43bd5e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/hn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/hr.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/hr.gif
new file mode 100644
index 0000000..a6f704c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/hr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ht.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ht.gif
new file mode 100644
index 0000000..854c969
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ht.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/hu.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/hu.gif
new file mode 100644
index 0000000..04ddf9f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/hu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/id.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/id.gif
new file mode 100644
index 0000000..dcc678e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/id.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ie.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ie.gif
new file mode 100644
index 0000000..b82a61b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ie.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/il.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/il.gif
new file mode 100644
index 0000000..e53b062
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/il.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/in.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/in.gif
new file mode 100644
index 0000000..929e0c2
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/in.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/iq.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/iq.gif
new file mode 100644
index 0000000..f084587
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/iq.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ir.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ir.gif
new file mode 100644
index 0000000..fbfdf31
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ir.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/is.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/is.gif
new file mode 100644
index 0000000..3f490ab
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/is.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/it.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/it.gif
new file mode 100644
index 0000000..5bc1bb2
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/it.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/jm.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/jm.gif
new file mode 100644
index 0000000..6e97f20
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/jm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/jo.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/jo.gif
new file mode 100644
index 0000000..8dfb714
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/jo.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/jp.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/jp.gif
new file mode 100644
index 0000000..6ecf4ff
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/jp.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ke.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ke.gif
new file mode 100644
index 0000000..742aab8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ke.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/kg.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/kg.gif
new file mode 100644
index 0000000..88608a3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/kg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/kh.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/kh.gif
new file mode 100644
index 0000000..ee7ec64
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/kh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ki.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ki.gif
new file mode 100644
index 0000000..5eab4ed
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ki.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/km.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/km.gif
new file mode 100644
index 0000000..f529c42
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/km.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/kn.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/kn.gif
new file mode 100644
index 0000000..20f55e9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/kn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/kp.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/kp.gif
new file mode 100644
index 0000000..2c99418
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/kp.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/kr.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/kr.gif
new file mode 100644
index 0000000..139cf5c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/kr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/kw.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/kw.gif
new file mode 100644
index 0000000..27a43e4
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/kw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/kz.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/kz.gif
new file mode 100644
index 0000000..81cc714
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/kz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/la.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/la.gif
new file mode 100644
index 0000000..86dc6af
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/la.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/lb.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/lb.gif
new file mode 100644
index 0000000..f39803f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/lb.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/lc.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/lc.gif
new file mode 100644
index 0000000..95f6ba6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/lc.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/li.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/li.gif
new file mode 100644
index 0000000..cdfe54c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/li.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/lk.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/lk.gif
new file mode 100644
index 0000000..5486bf0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/lk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/lr.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/lr.gif
new file mode 100644
index 0000000..a70179a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/lr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ls.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ls.gif
new file mode 100644
index 0000000..e4611d0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ls.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/lt.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/lt.gif
new file mode 100644
index 0000000..eca2f15
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/lt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/lu.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/lu.gif
new file mode 100644
index 0000000..c8e2e76
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/lu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/lv.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/lv.gif
new file mode 100644
index 0000000..8e2cabe
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/lv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ly.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ly.gif
new file mode 100644
index 0000000..b31fbec
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ly.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ma.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ma.gif
new file mode 100644
index 0000000..c982926
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ma.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mc.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mc.gif
new file mode 100644
index 0000000..6bd1424
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mc.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/md.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/md.gif
new file mode 100644
index 0000000..a19ff5c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/md.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mg.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mg.gif
new file mode 100644
index 0000000..a0bed49
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mh.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mh.gif
new file mode 100644
index 0000000..b5f879a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mk.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mk.gif
new file mode 100644
index 0000000..776a1a6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ml.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ml.gif
new file mode 100644
index 0000000..7ea931a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ml.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mm.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mm.gif
new file mode 100644
index 0000000..2f8adbd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mn.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mn.gif
new file mode 100644
index 0000000..4d812a0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mr.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mr.gif
new file mode 100644
index 0000000..d92a464
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mt.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mt.gif
new file mode 100644
index 0000000..aa5a729
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mu.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mu.gif
new file mode 100644
index 0000000..98d3bd9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mv.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mv.gif
new file mode 100644
index 0000000..dbd7591
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mw.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mw.gif
new file mode 100644
index 0000000..9ba7c7b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mx.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mx.gif
new file mode 100644
index 0000000..e5e70bb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mx.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/my.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/my.gif
new file mode 100644
index 0000000..4bb4e26
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/my.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mz.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mz.gif
new file mode 100644
index 0000000..fe3df69
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/mz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/na.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/na.gif
new file mode 100644
index 0000000..e4c953a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/na.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ne.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ne.gif
new file mode 100644
index 0000000..dd61657
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ne.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ng.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ng.gif
new file mode 100644
index 0000000..498b3d5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ng.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ni.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ni.gif
new file mode 100644
index 0000000..b6c8e20
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ni.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/nl.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/nl.gif
new file mode 100644
index 0000000..9053bfc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/nl.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/no.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/no.gif
new file mode 100644
index 0000000..8ca359a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/no.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/np.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/np.gif
new file mode 100644
index 0000000..d0fd2f7
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/np.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/nr.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/nr.gif
new file mode 100644
index 0000000..d82bc57
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/nr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/nu.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/nu.gif
new file mode 100644
index 0000000..755c1b3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/nu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/nz.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/nz.gif
new file mode 100644
index 0000000..2ebcec8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/nz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/om.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/om.gif
new file mode 100644
index 0000000..9984131
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/om.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/pa.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/pa.gif
new file mode 100644
index 0000000..016a227
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/pa.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/pe.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/pe.gif
new file mode 100644
index 0000000..b8f37c6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/pe.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/pg.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/pg.gif
new file mode 100644
index 0000000..fffb351
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/pg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ph.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ph.gif
new file mode 100644
index 0000000..1b12694
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ph.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/pk.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/pk.gif
new file mode 100644
index 0000000..9f5ca27
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/pk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/pl.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/pl.gif
new file mode 100644
index 0000000..e4252c5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/pl.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ps.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ps.gif
new file mode 100644
index 0000000..31d1aef
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ps.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/pt.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/pt.gif
new file mode 100644
index 0000000..2614c82
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/pt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/pw.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/pw.gif
new file mode 100644
index 0000000..8da1b47
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/pw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/py.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/py.gif
new file mode 100644
index 0000000..23738a4
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/py.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/qa.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/qa.gif
new file mode 100644
index 0000000..b4f9f55
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/qa.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ro.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ro.gif
new file mode 100644
index 0000000..94c6ade
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ro.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ru.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ru.gif
new file mode 100644
index 0000000..a6e7872
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ru.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/rw.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/rw.gif
new file mode 100644
index 0000000..a925bee
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/rw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sa.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sa.gif
new file mode 100644
index 0000000..afcb768
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sa.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sb.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sb.gif
new file mode 100644
index 0000000..d2f2079
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sb.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sc.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sc.gif
new file mode 100644
index 0000000..815a8ce
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sc.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sd.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sd.gif
new file mode 100644
index 0000000..47b2e6a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/se.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/se.gif
new file mode 100644
index 0000000..333f7f1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/se.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sg.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sg.gif
new file mode 100644
index 0000000..ad264e4
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/si.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/si.gif
new file mode 100644
index 0000000..ebc6c9b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/si.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sk.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sk.gif
new file mode 100644
index 0000000..78e654b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sl.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sl.gif
new file mode 100644
index 0000000..dacd1f0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sl.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sm.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sm.gif
new file mode 100644
index 0000000..c12e13a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sn.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sn.gif
new file mode 100644
index 0000000..c6ffb1d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/so.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/so.gif
new file mode 100644
index 0000000..7bec928
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/so.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sr.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sr.gif
new file mode 100644
index 0000000..ba6269f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/st.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/st.gif
new file mode 100644
index 0000000..d29916f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/st.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/su.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/su.gif
new file mode 100644
index 0000000..c64c7b6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/su.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sv.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sv.gif
new file mode 100644
index 0000000..199699e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sy.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sy.gif
new file mode 100644
index 0000000..56d8117
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sy.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sz.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sz.gif
new file mode 100644
index 0000000..9a7f9aa
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/sz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/td.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/td.gif
new file mode 100644
index 0000000..be3c4e4
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/td.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tg.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tg.gif
new file mode 100644
index 0000000..d15557f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/th.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/th.gif
new file mode 100644
index 0000000..f6b68f6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/th.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tj.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tj.gif
new file mode 100644
index 0000000..26c9c6a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tm.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tm.gif
new file mode 100644
index 0000000..09a0f66
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tn.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tn.gif
new file mode 100644
index 0000000..ff2ce46
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/to.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/to.gif
new file mode 100644
index 0000000..eb45eaf
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/to.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tp.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tp.gif
new file mode 100644
index 0000000..fd58832
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tp.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tr.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tr.gif
new file mode 100644
index 0000000..a8d150a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tt.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tt.gif
new file mode 100644
index 0000000..bbf1729
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tv.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tv.gif
new file mode 100644
index 0000000..df58585
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tw.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tw.gif
new file mode 100644
index 0000000..01f360e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tz.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tz.gif
new file mode 100644
index 0000000..ae33cb9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/tz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ua.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ua.gif
new file mode 100644
index 0000000..1666575
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ua.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ug.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ug.gif
new file mode 100644
index 0000000..6a8f9df
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ug.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/un.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/un.gif
new file mode 100644
index 0000000..683897e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/un.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/us.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/us.gif
new file mode 100644
index 0000000..1273967
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/us.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/uy.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/uy.gif
new file mode 100644
index 0000000..2339df5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/uy.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/uz.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/uz.gif
new file mode 100644
index 0000000..96d13fd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/uz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/va.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/va.gif
new file mode 100644
index 0000000..2e4757e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/va.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/vc.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/vc.gif
new file mode 100644
index 0000000..5e2edfb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/vc.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ve.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ve.gif
new file mode 100644
index 0000000..f4d1491
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ve.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/vn.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/vn.gif
new file mode 100644
index 0000000..527ab1e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/vn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/vu.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/vu.gif
new file mode 100644
index 0000000..38dca34
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/vu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ws.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ws.gif
new file mode 100644
index 0000000..af159f3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ws.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ya.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ya.gif
new file mode 100644
index 0000000..07bad2d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ya.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ye.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ye.gif
new file mode 100644
index 0000000..b5fbb0f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ye.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ye0.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ye0.gif
new file mode 100644
index 0000000..aa1942e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/ye0.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/yu.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/yu.gif
new file mode 100644
index 0000000..d127d27
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/yu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/za.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/za.gif
new file mode 100644
index 0000000..9554d12
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/za.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/zm.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/zm.gif
new file mode 100644
index 0000000..ff76b8d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/zm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/small/zw.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/zw.gif
new file mode 100644
index 0000000..571bac8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/small/zw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/sn.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/sn.gif
new file mode 100644
index 0000000..1a54174
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/sn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/so.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/so.gif
new file mode 100644
index 0000000..7f1dba3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/so.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/sr.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/sr.gif
new file mode 100644
index 0000000..de781c1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/sr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/st.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/st.gif
new file mode 100644
index 0000000..cd9036f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/st.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/su.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/su.gif
new file mode 100644
index 0000000..23e162a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/su.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/sv.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/sv.gif
new file mode 100644
index 0000000..bef488e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/sv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/sy.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/sy.gif
new file mode 100644
index 0000000..a3a53cd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/sy.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/sz.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/sz.gif
new file mode 100644
index 0000000..b3a20ba
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/sz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/td.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/td.gif
new file mode 100644
index 0000000..3ccc8df
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/td.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/tg.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/tg.gif
new file mode 100644
index 0000000..674e68f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/tg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/th.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/th.gif
new file mode 100644
index 0000000..83318c0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/th.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/tj.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/tj.gif
new file mode 100644
index 0000000..1f44255
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/tj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/tm.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/tm.gif
new file mode 100644
index 0000000..a603afd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/tm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/tn.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/tn.gif
new file mode 100644
index 0000000..083238d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/tn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/to.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/to.gif
new file mode 100644
index 0000000..603aa8e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/to.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/tp.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/tp.gif
new file mode 100644
index 0000000..40599d5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/tp.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/tr.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/tr.gif
new file mode 100644
index 0000000..2eac730
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/tr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/tt.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/tt.gif
new file mode 100644
index 0000000..f715419
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/tt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/tv.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/tv.gif
new file mode 100644
index 0000000..9b018e8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/tv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/tw.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/tw.gif
new file mode 100644
index 0000000..57a0482
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/tw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/tz.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/tz.gif
new file mode 100644
index 0000000..6d28d40
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/tz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ua.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ua.gif
new file mode 100644
index 0000000..bebd670
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ua.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ug.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ug.gif
new file mode 100644
index 0000000..151e303
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ug.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/un.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/un.gif
new file mode 100644
index 0000000..135b528
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/un.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/us.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/us.gif
new file mode 100644
index 0000000..850094e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/us.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/uy.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/uy.gif
new file mode 100644
index 0000000..4d129fc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/uy.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/uz.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/uz.gif
new file mode 100644
index 0000000..d9cc88e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/uz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/va.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/va.gif
new file mode 100644
index 0000000..5db146d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/va.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/vc.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/vc.gif
new file mode 100644
index 0000000..6519018
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/vc.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ve.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ve.gif
new file mode 100644
index 0000000..4abf999
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ve.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/vn.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/vn.gif
new file mode 100644
index 0000000..e7d1e5b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/vn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/vu.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/vu.gif
new file mode 100644
index 0000000..f8736a1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/vu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ws.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ws.gif
new file mode 100644
index 0000000..b2bc2f7
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ws.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ya.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ya.gif
new file mode 100644
index 0000000..9153613
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ya.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ye.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ye.gif
new file mode 100644
index 0000000..f183847
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ye.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/ye0.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/ye0.gif
new file mode 100644
index 0000000..b9c28b3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/ye0.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/yu.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/yu.gif
new file mode 100644
index 0000000..c91bf1e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/yu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/za.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/za.gif
new file mode 100644
index 0000000..8579793
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/za.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/zm.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/zm.gif
new file mode 100644
index 0000000..fc686bb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/zm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/countries/zw.gif b/org.eclipse.babel.tapiji.tools.core/icons/countries/zw.gif
new file mode 100644
index 0000000..9821c41
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/countries/zw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/duplicate.gif b/org.eclipse.babel.tapiji.tools.core/icons/duplicate.gif
new file mode 100644
index 0000000..3366a27
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/duplicate.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/entry.gif b/org.eclipse.babel.tapiji.tools.core/icons/entry.gif
new file mode 100644
index 0000000..442539f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/entry.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/exclude.png b/org.eclipse.babel.tapiji.tools.core/icons/exclude.png
new file mode 100644
index 0000000..d110529
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/exclude.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/file_obj.gif b/org.eclipse.babel.tapiji.tools.core/icons/file_obj.gif
new file mode 100644
index 0000000..7ccc6a7
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/file_obj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/flatLayout.gif b/org.eclipse.babel.tapiji.tools.core/icons/flatLayout.gif
new file mode 100644
index 0000000..1ef74cf
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/flatLayout.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/fldr_obj.gif b/org.eclipse.babel.tapiji.tools.core/icons/fldr_obj.gif
new file mode 100644
index 0000000..51e703b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/fldr_obj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/hierarchicalLayout.gif b/org.eclipse.babel.tapiji.tools.core/icons/hierarchicalLayout.gif
new file mode 100644
index 0000000..2344861
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/hierarchicalLayout.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/icon_new_memory_view.png b/org.eclipse.babel.tapiji.tools.core/icons/icon_new_memory_view.png
new file mode 100644
index 0000000..2ceac48
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/icon_new_memory_view.png
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/incomplete.gif b/org.eclipse.babel.tapiji.tools.core/icons/incomplete.gif
new file mode 100644
index 0000000..6583d36
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/incomplete.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/int.gif b/org.eclipse.babel.tapiji.tools.core/icons/int.gif
new file mode 100644
index 0000000..7d24707
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/int.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/key.gif b/org.eclipse.babel.tapiji.tools.core/icons/key.gif
new file mode 100644
index 0000000..bdb8e97
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/key.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/keyCommented.gif b/org.eclipse.babel.tapiji.tools.core/icons/keyCommented.gif
new file mode 100644
index 0000000..869eb6b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/keyCommented.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/keyNone.gif b/org.eclipse.babel.tapiji.tools.core/icons/keyNone.gif
new file mode 100644
index 0000000..dd1bd7c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/keyNone.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/newpropertiesfile.gif b/org.eclipse.babel.tapiji.tools.core/icons/newpropertiesfile.gif
new file mode 100644
index 0000000..11e436b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/newpropertiesfile.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/no_int1.gif b/org.eclipse.babel.tapiji.tools.core/icons/no_int1.gif
new file mode 100644
index 0000000..a1b1748
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/no_int1.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/no_int2.gif b/org.eclipse.babel.tapiji.tools.core/icons/no_int2.gif
new file mode 100644
index 0000000..98a2dbc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/no_int2.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/original/entry.gif b/org.eclipse.babel.tapiji.tools.core/icons/original/entry.gif
new file mode 100644
index 0000000..d26afe5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/original/entry.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/original/entry.psd b/org.eclipse.babel.tapiji.tools.core/icons/original/entry.psd
new file mode 100644
index 0000000..eaa418a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/original/entry.psd
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/propertiesfile.gif b/org.eclipse.babel.tapiji.tools.core/icons/propertiesfile.gif
new file mode 100644
index 0000000..9090c04
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/propertiesfile.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/read_only.gif b/org.eclipse.babel.tapiji.tools.core/icons/read_only.gif
new file mode 100644
index 0000000..dde3cbd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/read_only.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/resourcebundle.gif b/org.eclipse.babel.tapiji.tools.core/icons/resourcebundle.gif
new file mode 100644
index 0000000..fe05bad
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/resourcebundle.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/sample.gif b/org.eclipse.babel.tapiji.tools.core/icons/sample.gif
new file mode 100644
index 0000000..34fb3c9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/sample.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/similar.gif b/org.eclipse.babel.tapiji.tools.core/icons/similar.gif
new file mode 100644
index 0000000..74cf98e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/similar.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/toc_open.gif b/org.eclipse.babel.tapiji.tools.core/icons/toc_open.gif
new file mode 100644
index 0000000..9e665d5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/toc_open.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/warning.gif b/org.eclipse.babel.tapiji.tools.core/icons/warning.gif
new file mode 100644
index 0000000..801a1f8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/warning.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/icons/warningGrey.gif b/org.eclipse.babel.tapiji.tools.core/icons/warningGrey.gif
new file mode 100644
index 0000000..e11147e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/icons/warningGrey.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.core/plugin.xml b/org.eclipse.babel.tapiji.tools.core/plugin.xml
new file mode 100644
index 0000000..d940b2b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/plugin.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.4"?>

+<plugin>

+   <extension-point id="org.eclipse.babel.tapiji.tools.core.builderExtension" name="BuilderExtension" schema="schema/org.eclipse.babel.tapiji.tools.core.builderExtension.exsd"/>

+   <extension-point id="org.eclipse.babel.tapiji.tools.core.stateLoader" name="StateLoader" schema="schema/org.eclipse.babel.tapiji.tools.core.stateLoader.exsd"/>

+</plugin>

diff --git a/org.eclipse.babel.tapiji.tools.core/schema/org.eclipse.babel.tapiji.tools.core.builderExtension.exsd b/org.eclipse.babel.tapiji.tools.core/schema/org.eclipse.babel.tapiji.tools.core.builderExtension.exsd
new file mode 100644
index 0000000..d01b5bc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/schema/org.eclipse.babel.tapiji.tools.core.builderExtension.exsd
@@ -0,0 +1,223 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipselabs.tapiji.tools.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipselabs.tapiji.tools.core" id="builderExtension" name="BuilderExtension"/>
+      </appinfo>
+      <documentation>
+         The TapiJI core plug-in does not contribute any coding assistances into the source code editor. Analogically, it does not provide logic for finding Internationalization problems within sources resources. Moreover, it offers a platform for contributing source code analysis and problem resolution proposals for Internationalization problems in a uniform way. For this purpose, the TapiJI core plug-in provides the extension point org.eclipselabs.tapiji.tools.core.builderExtension that allows other plug-ins to register Internationalization related coding assistances. This concept realizes a loose coupling between basic Internationalization functionality and coding dialect specific help. Once the TapiJI core plug-in is installed, it allows an arbitrary number of extensions to provide their own assistances based on the TapiJI Tools suite.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <choice minOccurs="0" maxOccurs="unbounded">
+            <element ref="i18nAuditor"/>
+         </choice>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="i18nAuditor">
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn="org.eclipselabs.tapiji.tools.core.extensions.I18nAuditor:"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         0.0.1
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         The following example demonstrates registration of Java Programming dialect specific Internationalization assistance.
+
+&lt;pre&gt;
+&lt;extension point=&quot;org.eclipselabs.tapiji.tools.core.builderExtension&quot;&gt;
+    &lt;i18nResourceAuditor
+        class=&quot;ui.JavaResourceAuditor&quot;&gt;
+    &lt;/i18nResourceAuditor&gt;
+&lt;/extension&gt;
+&lt;/pre&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         Extending plug-ins need to extend the abstract class &lt;strong&gt;org.eclipselabs.tapiji.tools.core.extensions.I18nResourceAuditor&lt;/strong&gt;.
+
+&lt;pre&gt;
+package org.eclipselabs.tapiji.tools.core.extensions;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.ui.IMarkerResolution;
+
+/**
+ * Auditor class for finding I18N problems within source code resources. The
+ * objects audit method is called for a particular resource. Found errors are
+ * stored within the object&apos;s internal data structure and can be queried with
+ * the help of problem categorized getter methods.
+ */
+public abstract class I18nResourceAuditor {
+    /**
+     * Audits a project resource for I18N problems. This method is triggered
+     * during the project&apos;s build process.
+     * 
+     * @param resource
+     *            The project resource
+     */
+    public abstract void audit(IResource resource);
+
+    /**
+     * Returns a list of supported file endings.
+     * 
+     * @return The supported file endings
+     */
+    public abstract String[] getFileEndings();
+
+    /**
+     * Returns the list of found need-to-translate string literals. Each list
+     * entry describes the textual position on which this type of error has been
+     * detected.
+     * 
+     * @return The list of need-to-translate string literal positions
+     */
+    public abstract List&lt;ILocation&gt; getConstantStringLiterals();
+
+    /**
+     * Returns the list of broken Resource-Bundle references. Each list entry
+     * describes the textual position on which this type of error has been
+     * detected.
+     * 
+     * @return The list of positions of broken Resource-Bundle references
+     */
+    public abstract List&lt;ILocation&gt; getBrokenResourceReferences();
+
+    /**
+     * Returns the list of broken references to Resource-Bundle entries. Each
+     * list entry describes the textual position on which this type of error has
+     * been detected
+     * 
+     * @return The list of positions of broken references to locale-sensitive
+     *         resources
+     */
+    public abstract List&lt;ILocation&gt; getBrokenBundleReferences();
+
+    /**
+     * Returns a characterizing identifier of the implemented auditing
+     * functionality. The specified identifier is used for discriminating
+     * registered builder extensions.
+     * 
+     * @return The String id of the implemented auditing functionality
+     */
+    public abstract String getContextId();
+
+    /**
+     * Returns a list of quick fixes of a reported Internationalization problem.
+     * 
+     * @param marker
+     *            The warning marker of the Internationalization problem
+     * @param cause
+     *            The problem type
+     * @return The list of marker resolution proposals
+     */
+    public abstract List&lt;IMarkerResolution&gt; getMarkerResolutions(
+            IMarker marker);
+
+    /**
+     * Checks if the provided resource auditor is responsible for a particular
+     * resource.
+     * 
+     * @param resource
+     *            The resource reference
+     * @return True if the resource auditor is responsible for the referenced
+     *         resource
+     */
+    public boolean isResourceOfType(IResource resource) {
+        for (String ending : getFileEndings()) {
+            if (resource.getFileExtension().equalsIgnoreCase(ending))
+                return true;
+        }
+        return false;
+    }
+}
+
+&lt;/pre&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="implementation"/>
+      </appinfo>
+      <documentation>
+         &lt;ul&gt;
+ &lt;li&gt;Java Internationalization help: &lt;span style=&quot;font-family:monospace&quot;&gt;org.eclipselabs.tapiji.tools.java&lt;/span&gt;&lt;/li&gt;
+ &lt;li&gt;JSF Internaization help: &lt;span style=&quot;font-family:monospace&quot;&gt;org.eclipselabs.tapiji.tools.jsf&lt;/span&gt;
+ &lt;/li&gt;
+&lt;/ul&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="copyright"/>
+      </appinfo>
+      <documentation>
+         Copyright (c) 2011 Stefan Strobl and Martin Reiterer 2011. All rights reserved.
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/org.eclipse.babel.tapiji.tools.core/schema/org.eclipse.babel.tapiji.tools.core.stateLoader.exsd b/org.eclipse.babel.tapiji.tools.core/schema/org.eclipse.babel.tapiji.tools.core.stateLoader.exsd
new file mode 100644
index 0000000..a40e322
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/schema/org.eclipse.babel.tapiji.tools.core.stateLoader.exsd
@@ -0,0 +1,119 @@
+<?xml version='1.0' encoding='UTF-8'?>

+<!-- Schema file written by PDE -->

+<schema targetNamespace="stateLoader" xmlns="http://www.w3.org/2001/XMLSchema">

+<annotation>

+      <appinfo>

+         <meta.schema plugin="stateLoader" id="stateLoader" name="StateLoader"/>

+      </appinfo>

+      <documentation>

+         Xpt, which is implemented by TapiJI to provide a class, which loads the state of the ResourceBundleManager

+      </documentation>

+   </annotation>

+

+   <element name="extension">

+      <annotation>

+         <appinfo>

+            <meta.element />

+         </appinfo>

+      </annotation>

+      <complexType>

+         <sequence>

+            <element ref="IStateLoader"/>

+         </sequence>

+         <attribute name="point" type="string" use="required">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="id" type="string">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="name" type="string">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+               <appinfo>

+                  <meta.attribute translatable="true"/>

+               </appinfo>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="IStateLoader">

+      <complexType>

+         <attribute name="class" type="string" use="required">

+            <annotation>

+               <documentation>

+                  

+               </documentation>

+               <appinfo>

+                  <meta.attribute kind="java" basedOn=":org.eclipse.babel.tapiji.tools.core.model.manager.IStateLoader"/>

+               </appinfo>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <annotation>

+      <appinfo>

+         <meta.section type="since"/>

+      </appinfo>

+      <documentation>

+         [Enter the first release in which this extension point appears.]

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appinfo>

+         <meta.section type="examples"/>

+      </appinfo>

+      <documentation>

+         [Enter extension point usage example here.]

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appinfo>

+         <meta.section type="apiinfo"/>

+      </appinfo>

+      <documentation>

+         [Enter API information here.]

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appinfo>

+         <meta.section type="implementation"/>

+      </appinfo>

+      <documentation>

+         [Enter information about supplied implementation of this extension point.]

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appinfo>

+         <meta.section type="copyright"/>

+      </appinfo>

+      <documentation>

+         /*******************************************************************************

+ * Copyright (c) 2012 TapiJI.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ * 

+ * Contributors:

+ *     Alexej Strelzow - creation

+ ******************************************************************************/

+      </documentation>

+   </annotation>

+

+</schema>

diff --git a/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/Activator.java b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/Activator.java
new file mode 100644
index 0000000..84c0844
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/Activator.java
@@ -0,0 +1,159 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core;
+
+import java.text.MessageFormat;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.eclipse.babel.core.message.manager.RBManager;
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends Plugin {
+
+    // The plug-in ID
+    public static final String PLUGIN_ID = "org.eclipse.babel.tapiji.tools.core";
+
+    // The builder extension id
+    public static final String BUILDER_EXTENSION_ID = "org.eclipse.babel.tapiji.tools.core.builderExtension";
+
+    // The shared instance
+    private static Activator plugin;
+
+    // Resource bundle.
+    private ResourceBundle resourceBundle;
+
+    /**
+     * The constructor
+     */
+    public Activator() {
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
+     * )
+     */
+    @Override
+    public void start(BundleContext context) throws Exception {
+	super.start(context);
+	plugin = this;
+	
+	// detect resource bundles 
+	RBManager.getAllMessagesBundleGroupNames();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
+     * )
+     */
+    @Override
+    public void stop(BundleContext context) throws Exception {
+	plugin = null;
+	super.stop(context);
+    }
+
+    /**
+     * Returns the shared instance
+     * 
+     * @return the shared instance
+     */
+    public static Activator getDefault() {
+	return plugin;
+    }
+
+    /**
+     * Returns the string from the plugin's resource bundle, or 'key' if not
+     * found.
+     * 
+     * @param key
+     *            the key for which to fetch a localized text
+     * @return localized string corresponding to key
+     */
+    public static String getString(String key) {
+	ResourceBundle bundle = Activator.getDefault().getResourceBundle();
+	try {
+	    return (bundle != null) ? bundle.getString(key) : key;
+	} catch (MissingResourceException e) {
+	    return key;
+	}
+    }
+
+    /**
+     * Returns the string from the plugin's resource bundle, or 'key' if not
+     * found.
+     * 
+     * @param key
+     *            the key for which to fetch a localized text
+     * @param arg1
+     *            runtime argument to replace in key value
+     * @return localized string corresponding to key
+     */
+    public static String getString(String key, String arg1) {
+	return MessageFormat.format(getString(key), new String[] { arg1 });
+    }
+
+    /**
+     * Returns the string from the plugin's resource bundle, or 'key' if not
+     * found.
+     * 
+     * @param key
+     *            the key for which to fetch a localized text
+     * @param arg1
+     *            runtime first argument to replace in key value
+     * @param arg2
+     *            runtime second argument to replace in key value
+     * @return localized string corresponding to key
+     */
+    public static String getString(String key, String arg1, String arg2) {
+	return MessageFormat
+		.format(getString(key), new String[] { arg1, arg2 });
+    }
+
+    /**
+     * Returns the string from the plugin's resource bundle, or 'key' if not
+     * found.
+     * 
+     * @param key
+     *            the key for which to fetch a localized text
+     * @param arg1
+     *            runtime argument to replace in key value
+     * @param arg2
+     *            runtime second argument to replace in key value
+     * @param arg3
+     *            runtime third argument to replace in key value
+     * @return localized string corresponding to key
+     */
+    public static String getString(String key, String arg1, String arg2,
+	    String arg3) {
+	return MessageFormat.format(getString(key), new String[] { arg1, arg2,
+		arg3 });
+    }
+
+    /**
+     * Returns the plugin's resource bundle.
+     * 
+     * @return resource bundle
+     */
+    protected ResourceBundle getResourceBundle() {
+	return resourceBundle;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/Logger.java b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/Logger.java
new file mode 100644
index 0000000..8bfd10a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/Logger.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+
+public class Logger {
+
+	public static void logInfo(String message) {
+		log(IStatus.INFO, IStatus.OK, message, null);
+	}
+
+	public static void logError(Throwable exception) {
+		logError("Unexpected Exception", exception);
+	}
+
+	public static void logError(String message, Throwable exception) {
+		log(IStatus.ERROR, IStatus.OK, message, exception);
+	}
+
+	public static void log(int severity, int code, String message,
+			Throwable exception) {
+		log(createStatus(severity, code, message, exception));
+	}
+
+	public static IStatus createStatus(int severity, int code, String message,
+			Throwable exception) {
+		return new Status(severity, Activator.PLUGIN_ID, code, message,
+				exception);
+	}
+
+	public static void log(IStatus status) {
+		Activator.getDefault().getLog().log(status);
+	}
+}
diff --git a/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/extensions/ILocation.java b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/extensions/ILocation.java
new file mode 100644
index 0000000..e53d2b9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/extensions/ILocation.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.extensions;
+
+import java.io.Serializable;
+
+import org.eclipse.core.resources.IFile;
+
+/**
+ * Describes a text fragment within a source resource.
+ * 
+ * @author Martin Reiterer
+ */
+public interface ILocation {
+
+	/**
+	 * Returns the source resource's physical location.
+	 * 
+	 * @return The file within the text fragment is located
+	 */
+	public IFile getFile();
+
+	/**
+	 * Returns the position of the text fragments starting character.
+	 * 
+	 * @return The position of the first character
+	 */
+	public int getStartPos();
+
+	/**
+	 * Returns the position of the text fragments last character.
+	 * 
+	 * @return The position of the last character
+	 */
+	public int getEndPos();
+
+	/**
+	 * Returns the text fragment.
+	 * 
+	 * @return The text fragment
+	 */
+	public String getLiteral();
+
+	/**
+	 * Returns additional metadata. The type and content of this property is not
+	 * specified and can be used to marshal additional data for the computation
+	 * of resolution proposals.
+	 * 
+	 * @return The metadata associated with the text fragment
+	 */
+	public Serializable getData();
+}
diff --git a/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/extensions/IMarkerConstants.java b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/extensions/IMarkerConstants.java
new file mode 100644
index 0000000..916f6ec
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/extensions/IMarkerConstants.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.extensions;
+
+public interface IMarkerConstants {
+	public static final int CAUSE_BROKEN_REFERENCE = 0;
+	public static final int CAUSE_CONSTANT_LITERAL = 1;
+	public static final int CAUSE_BROKEN_RB_REFERENCE = 2;
+
+	public static final int CAUSE_UNSPEZIFIED_KEY = 3;
+	public static final int CAUSE_SAME_VALUE = 4;
+	public static final int CAUSE_MISSING_LANGUAGE = 5;
+}
diff --git a/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/IResourceBundleChangedListener.java b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/IResourceBundleChangedListener.java
new file mode 100644
index 0000000..f51fbca
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/IResourceBundleChangedListener.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.model;
+
+import org.eclipse.babel.tapiji.tools.core.model.manager.ResourceBundleChangedEvent;
+
+public interface IResourceBundleChangedListener {
+
+	public void resourceBundleChanged(ResourceBundleChangedEvent event);
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/IResourceDescriptor.java b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/IResourceDescriptor.java
new file mode 100644
index 0000000..83f073b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/IResourceDescriptor.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.model;
+
+public interface IResourceDescriptor {
+
+	public void setProjectName(String projName);
+
+	public void setRelativePath(String relPath);
+
+	public void setAbsolutePath(String absPath);
+
+	public void setBundleId(String bundleId);
+
+	public String getProjectName();
+
+	public String getRelativePath();
+
+	public String getAbsolutePath();
+
+	public String getBundleId();
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/IResourceExclusionListener.java b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/IResourceExclusionListener.java
new file mode 100644
index 0000000..4a85add
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/IResourceExclusionListener.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.model;
+
+import org.eclipse.babel.tapiji.tools.core.model.manager.ResourceExclusionEvent;
+
+public interface IResourceExclusionListener {
+
+	public void exclusionChanged(ResourceExclusionEvent event);
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/ResourceDescriptor.java b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/ResourceDescriptor.java
new file mode 100644
index 0000000..dfd91df
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/ResourceDescriptor.java
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.model;
+
+import org.eclipse.core.resources.IResource;
+
+public class ResourceDescriptor implements IResourceDescriptor {
+
+	private String projectName;
+	private String relativePath;
+	private String absolutePath;
+	private String bundleId;
+
+	public ResourceDescriptor(IResource resource) {
+		projectName = resource.getProject().getName();
+		relativePath = resource.getProjectRelativePath().toString();
+		absolutePath = resource.getRawLocation().toString();
+	}
+
+	public ResourceDescriptor() {
+	}
+
+	@Override
+	public String getAbsolutePath() {
+		return absolutePath;
+	}
+
+	@Override
+	public String getProjectName() {
+		return projectName;
+	}
+
+	@Override
+	public String getRelativePath() {
+		return relativePath;
+	}
+
+	@Override
+	public int hashCode() {
+		return projectName.hashCode() + relativePath.hashCode();
+	}
+
+	@Override
+	public boolean equals(Object other) {
+		if (!(other instanceof ResourceDescriptor))
+			return false;
+
+		return absolutePath.equals(absolutePath);
+	}
+
+	@Override
+	public void setAbsolutePath(String absPath) {
+		this.absolutePath = absPath;
+	}
+
+	@Override
+	public void setProjectName(String projName) {
+		this.projectName = projName;
+	}
+
+	@Override
+	public void setRelativePath(String relPath) {
+		this.relativePath = relPath;
+	}
+
+	@Override
+	public String getBundleId() {
+		return this.bundleId;
+	}
+
+	@Override
+	public void setBundleId(String bundleId) {
+		this.bundleId = bundleId;
+	}
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/SLLocation.java b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/SLLocation.java
new file mode 100644
index 0000000..036af55
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/SLLocation.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.model;
+
+import java.io.Serializable;
+
+import org.eclipse.babel.tapiji.tools.core.extensions.ILocation;
+import org.eclipse.core.resources.IFile;
+
+public class SLLocation implements Serializable, ILocation {
+
+	private static final long serialVersionUID = 1L;
+	private IFile file = null;
+	private int startPos = -1;
+	private int endPos = -1;
+	private String literal;
+	private Serializable data;
+
+	public SLLocation(IFile file, int startPos, int endPos, String literal) {
+		super();
+		this.file = file;
+		this.startPos = startPos;
+		this.endPos = endPos;
+		this.literal = literal;
+	}
+
+	public IFile getFile() {
+		return file;
+	}
+
+	public void setFile(IFile file) {
+		this.file = file;
+	}
+
+	public int getStartPos() {
+		return startPos;
+	}
+
+	public void setStartPos(int startPos) {
+		this.startPos = startPos;
+	}
+
+	public int getEndPos() {
+		return endPos;
+	}
+
+	public void setEndPos(int endPos) {
+		this.endPos = endPos;
+	}
+
+	public String getLiteral() {
+		return literal;
+	}
+
+	public Serializable getData() {
+		return data;
+	}
+
+	public void setData(Serializable data) {
+		this.data = data;
+	}
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/exception/NoSuchResourceAuditorException.java b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/exception/NoSuchResourceAuditorException.java
new file mode 100644
index 0000000..482de43
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/exception/NoSuchResourceAuditorException.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.model.exception;
+
+public class NoSuchResourceAuditorException extends Exception {
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/exception/ResourceBundleException.java b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/exception/ResourceBundleException.java
new file mode 100644
index 0000000..408fd50
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/exception/ResourceBundleException.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.model.exception;
+
+public class ResourceBundleException extends Exception {
+
+	private static final long serialVersionUID = -2039182473628481126L;
+
+	public ResourceBundleException(String msg) {
+		super(msg);
+	}
+
+	public ResourceBundleException() {
+		super();
+	}
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/manager/IStateLoader.java b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/manager/IStateLoader.java
new file mode 100644
index 0000000..762687f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/manager/IStateLoader.java
@@ -0,0 +1,38 @@
+/*******************************************************************************

+ * Copyright (c) 2012 Alexej Strelzow.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ * 

+ * Contributors:

+ *     Alexej Strelzow - initial API and implementation

+ ******************************************************************************/

+package org.eclipse.babel.tapiji.tools.core.model.manager;

+

+import java.util.Set;

+

+import org.eclipse.babel.tapiji.tools.core.model.IResourceDescriptor;

+

+/**

+ * Interface for state loading.

+ * 

+ * @author Alexej Strelzow

+ */

+public interface IStateLoader {

+

+	/**

+	 * Loads the state from a xml-file

+	 */

+	void loadState();

+

+	/**

+	 * Stores the state into a xml-file

+	 */

+	void saveState();

+

+	/**

+	 * @return The excluded resources

+	 */

+	Set<IResourceDescriptor> getExcludedResources();

+}

diff --git a/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/manager/ResourceBundleChangedEvent.java b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/manager/ResourceBundleChangedEvent.java
new file mode 100644
index 0000000..17f6286
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/manager/ResourceBundleChangedEvent.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.model.manager;
+
+import org.eclipse.core.resources.IProject;
+
+public class ResourceBundleChangedEvent {
+
+	public final static int ADDED = 0;
+	public final static int DELETED = 1;
+	public final static int MODIFIED = 2;
+	public final static int EXCLUDED = 3;
+	public final static int INCLUDED = 4;
+
+	private IProject project;
+	private String bundle = "";
+	private int type = -1;
+
+	public ResourceBundleChangedEvent(int type, String bundle, IProject project) {
+		this.type = type;
+		this.bundle = bundle;
+		this.project = project;
+	}
+
+	public IProject getProject() {
+		return project;
+	}
+
+	public void setProject(IProject project) {
+		this.project = project;
+	}
+
+	public String getBundle() {
+		return bundle;
+	}
+
+	public void setBundle(String bundle) {
+		this.bundle = bundle;
+	}
+
+	public int getType() {
+		return type;
+	}
+
+	public void setType(int type) {
+		this.type = type;
+	}
+}
diff --git a/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/manager/ResourceBundleDetector.java b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/manager/ResourceBundleDetector.java
new file mode 100644
index 0000000..6652137
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/manager/ResourceBundleDetector.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.model.manager;
+
+public class ResourceBundleDetector {
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/manager/ResourceExclusionEvent.java b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/manager/ResourceExclusionEvent.java
new file mode 100644
index 0000000..769d49a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/model/manager/ResourceExclusionEvent.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.model.manager;
+
+import java.util.Collection;
+
+public class ResourceExclusionEvent {
+
+	private Collection<Object> changedResources;
+
+	public ResourceExclusionEvent(Collection<Object> changedResources) {
+		super();
+		this.changedResources = changedResources;
+	}
+
+	public void setChangedResources(Collection<Object> changedResources) {
+		this.changedResources = changedResources;
+	}
+
+	public Collection<Object> getChangedResources() {
+		return changedResources;
+	}
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/util/EditorUtils.java b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/util/EditorUtils.java
new file mode 100644
index 0000000..94c1a7a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/util/EditorUtils.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer, Matthias Lettmayer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ *     Matthias Lettmayer - added update marker utils to update and get right position of marker (fixed issue 8)
+ *                        - fixed openEditor() to open an editor and selecting a key (fixed issue 59)
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.util;
+
+import java.text.MessageFormat;
+
+import org.eclipse.core.resources.IMarker;
+
+public class EditorUtils {
+
+	/** Marker constants **/
+	public static final String MARKER_ID = "org.eclipse.babel.tapiji.tools.core.ui.StringLiteralAuditMarker";
+	public static final String RB_MARKER_ID = "org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleAuditMarker";
+
+	/** Error messages **/
+	public static final String MESSAGE_NON_LOCALIZED_LITERAL = "Non-localized string literal ''{0}'' has been found";
+	public static final String MESSAGE_BROKEN_RESOURCE_REFERENCE = "Cannot find the key ''{0}'' within the resource-bundle ''{1}''";
+	public static final String MESSAGE_BROKEN_RESOURCE_BUNDLE_REFERENCE = "The resource bundle with id ''{0}'' cannot be found";
+
+	public static final String MESSAGE_UNSPECIFIED_KEYS = "Missing or unspecified key ''{0}'' has been found in ''{1}''";
+	public static final String MESSAGE_SAME_VALUE = "''{0}'' and ''{1}'' have the same translation for the key ''{2}''";
+	public static final String MESSAGE_MISSING_LANGUAGE = "ResourceBundle ''{0}'' lacks a translation for ''{1}''";
+
+	public static String getFormattedMessage(String pattern, Object[] arguments) {
+		String formattedMessage = "";
+
+		MessageFormat formatter = new MessageFormat(pattern);
+		formattedMessage = formatter.format(arguments);
+
+		return formattedMessage;
+	}
+
+	public static IMarker[] concatMarkerArray(IMarker[] ms, IMarker[] ms_to_add) {
+		IMarker[] old_ms = ms;
+		ms = new IMarker[old_ms.length + ms_to_add.length];
+
+		System.arraycopy(old_ms, 0, ms, 0, old_ms.length);
+		System.arraycopy(ms_to_add, 0, ms, old_ms.length, ms_to_add.length);
+
+		return ms;
+	}
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/util/FileUtils.java b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/util/FileUtils.java
new file mode 100644
index 0000000..491d087
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/util/FileUtils.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer, Matthias Lettmayer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ *     Matthias Lettmayer - improved readFileAsString() to use Apache Commons IO (fixed issue 74)
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.util;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileReader;
+
+import org.eclipse.babel.tapiji.tools.core.Activator;
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.OperationCanceledException;
+
+public class FileUtils {
+
+    public static String readFile(IResource resource) {
+	return readFileAsString(resource.getRawLocation().toFile());
+    }
+
+    protected static String readFileAsString(File filePath) {
+	String content = "";
+
+	if (!filePath.exists())
+	    return content;
+	try {
+	    BufferedReader fileReader = new BufferedReader(new FileReader(
+		    filePath));
+	    String line = "";
+
+	    while ((line = fileReader.readLine()) != null) {
+		content += line + "\n";
+	    }
+
+	    // close filereader
+	    fileReader.close();
+	} catch (Exception e) {
+	    // TODO log error output
+	    Logger.logError(e);
+	}
+
+	return content;
+    }
+
+    public static File getRBManagerStateFile() {
+	return Activator.getDefault().getStateLocation()
+		.append("internationalization.xml").toFile();
+    }
+
+    /**
+     * Don't use that -> causes {@link ResourceException} -> because File out of
+     * sync
+     * 
+     * @param file
+     * @param editorContent
+     * @throws CoreException
+     * @throws OperationCanceledException
+     */
+    public synchronized void saveTextFile(IFile file, String editorContent)
+	    throws CoreException, OperationCanceledException {
+	try {
+	    file.setContents(
+		    new ByteArrayInputStream(editorContent.getBytes()), false,
+		    true, null);
+	} catch (Exception e) {
+	    e.printStackTrace();
+	}
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/util/FragmentProjectUtils.java b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/util/FragmentProjectUtils.java
new file mode 100644
index 0000000..8ffcf52
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/util/FragmentProjectUtils.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.util;
+
+import java.util.List;
+
+import org.eclipse.babel.core.util.PDEUtils;
+import org.eclipse.core.resources.IProject;
+
+public class FragmentProjectUtils {
+
+	public static String getPluginId(IProject project) {
+		return PDEUtils.getPluginId(project);
+	}
+
+	public static IProject[] lookupFragment(IProject pluginProject) {
+		return PDEUtils.lookupFragment(pluginProject);
+	}
+
+	public static boolean isFragment(IProject pluginProject) {
+		return PDEUtils.isFragment(pluginProject);
+	}
+
+	public static List<IProject> getFragments(IProject hostProject) {
+		return PDEUtils.getFragments(hostProject);
+	}
+
+	public static String getFragmentId(IProject project, String hostPluginId) {
+		return PDEUtils.getFragmentId(project, hostPluginId);
+	}
+
+	public static IProject getFragmentHost(IProject fragment) {
+		return PDEUtils.getFragmentHost(fragment);
+	}
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/util/OverlayIcon.java b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/util/OverlayIcon.java
new file mode 100644
index 0000000..e23e07d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/util/OverlayIcon.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.util;
+
+import org.eclipse.jface.resource.CompositeImageDescriptor;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.Point;
+
+public class OverlayIcon extends CompositeImageDescriptor {
+
+	public static final int TOP_LEFT = 0;
+	public static final int TOP_RIGHT = 1;
+	public static final int BOTTOM_LEFT = 2;
+	public static final int BOTTOM_RIGHT = 3;
+
+	private Image img;
+	private Image overlay;
+	private int location;
+	private Point imgSize;
+
+	public OverlayIcon(Image baseImage, Image overlayImage, int location) {
+		super();
+		this.img = baseImage;
+		this.overlay = overlayImage;
+		this.location = location;
+		this.imgSize = new Point(baseImage.getImageData().width,
+		        baseImage.getImageData().height);
+	}
+
+	@Override
+	protected void drawCompositeImage(int width, int height) {
+		drawImage(img.getImageData(), 0, 0);
+		ImageData imageData = overlay.getImageData();
+
+		switch (location) {
+		case TOP_LEFT:
+			drawImage(imageData, 0, 0);
+			break;
+		case TOP_RIGHT:
+			drawImage(imageData, imgSize.x - imageData.width, 0);
+			break;
+		case BOTTOM_LEFT:
+			drawImage(imageData, 0, imgSize.y - imageData.height);
+			break;
+		case BOTTOM_RIGHT:
+			drawImage(imageData, imgSize.x - imageData.width, imgSize.y
+			        - imageData.height);
+			break;
+		}
+	}
+
+	@Override
+	protected Point getSize() {
+		return new Point(img.getImageData().width, img.getImageData().height);
+	}
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/util/RBFileUtils.java b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/util/RBFileUtils.java
new file mode 100644
index 0000000..f5cfe74
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.core/src/org/eclipse/babel/tapiji/tools/core/util/RBFileUtils.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Michael Gasser - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.core.util;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.action.Action;
+
+public class RBFileUtils extends Action {
+    public static final String PROPERTIES_EXT = "properties";
+
+    /**
+     * Checks whether a RB-file has a problem-marker
+     */
+    public static boolean hasResourceBundleMarker(IResource r) {
+	try {
+	    if (r.findMarkers(EditorUtils.RB_MARKER_ID, true,
+		    IResource.DEPTH_INFINITE).length > 0) {
+		return true;
+	    } else {
+		return false;
+	    }
+	} catch (CoreException e) {
+	    return false;
+	}
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.java.ui/.classpath b/org.eclipse.babel.tapiji.tools.java.ui/.classpath
new file mode 100644
index 0000000..8a8f166
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/org.eclipse.babel.tapiji.tools.java.ui/.project b/org.eclipse.babel.tapiji.tools.java.ui/.project
new file mode 100644
index 0000000..fc555eb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.babel.tapiji.tools.java.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.babel.tapiji.tools.java.ui/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.babel.tapiji.tools.java.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..ede70f6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Sun Jan 30 10:03:19 CET 2011

+eclipse.preferences.version=1

+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6

+org.eclipse.jdt.core.compiler.compliance=1.6

+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

+org.eclipse.jdt.core.compiler.source=1.6

diff --git a/org.eclipse.babel.tapiji.tools.java.ui/META-INF/MANIFEST.MF b/org.eclipse.babel.tapiji.tools.java.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..466dfa5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,31 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: TapiJI Tools Java UI contribution
+Bundle-SymbolicName: org.eclipse.babel.tapiji.tools.java.ui;singleton:=true
+Bundle-Version: 0.0.2.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Require-Bundle: org.eclipse.core.resources;bundle-version="3.6.0",
+ org.eclipse.core.runtime;bundle-version="3.6.0",
+ org.eclipse.jdt.ui;bundle-version="3.6.0",
+ org.eclipse.jface,
+ org.eclipse.babel.tapiji.tools.core.ui;bundle-version="0.0.2",
+ org.eclipse.babel.tapiji.tools.java;bundle-version="0.0.2",
+ org.eclipse.jdt.core
+Import-Package: org.eclipse.core.filebuffers,
+ org.eclipse.jface.dialogs,
+ org.eclipse.jface.text,
+ org.eclipse.jface.text.contentassist,
+ org.eclipse.jface.text.source,
+ org.eclipse.jface.wizard,
+ org.eclipse.swt.graphics,
+ org.eclipse.swt.widgets,
+ org.eclipse.text.edits,
+ org.eclipse.ui,
+ org.eclipse.ui.part,
+ org.eclipse.ui.progress,
+ org.eclipse.ui.texteditor,
+ org.eclipse.ui.wizards
+Bundle-Vendor: Vienna University of Technology
+Export-Package: org.eclipse.babel.tapiji.tools.java.ui.util
+
+
diff --git a/org.eclipse.babel.tapiji.tools.java.ui/about.html b/org.eclipse.babel.tapiji.tools.java.ui/about.html
new file mode 100644
index 0000000..f47dbdd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>

+<title>About</title>

+</head>

+<body lang="EN-US">

+<h2>About This Content</h2>

+ 

+<p>June 5, 2006</p>	

+<h3>License</h3>

+

+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 

+indicated below, the Content is provided to you under the terms and conditions of the

+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 

+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.

+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>

+

+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 

+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may

+apply to your use of any object code in the Content.  Check the Redistributor's license that was 

+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise

+indicated below, the terms and conditions of the EPL still apply to any source code in the Content

+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>

+

+</body>

+</html>
\ No newline at end of file
diff --git a/org.eclipse.babel.tapiji.tools.java.ui/build.properties b/org.eclipse.babel.tapiji.tools.java.ui/build.properties
new file mode 100644
index 0000000..5435750
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/build.properties
@@ -0,0 +1,8 @@
+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .,\

+               plugin.xml,\

+               epl-v10.html

+src.includes = src/,\

+               epl-v10.html

diff --git a/org.eclipse.babel.tapiji.tools.java.ui/epl-v10.html b/org.eclipse.babel.tapiji.tools.java.ui/epl-v10.html
new file mode 100644
index 0000000..84ec251
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/epl-v10.html
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+  body {
+    size: 8.5in 11.0in;
+    margin: 0.25in 0.5in 0.25in 0.5in;
+    tab-interval: 0.5in;
+    }
+  p {  	
+    margin-left: auto;
+    margin-top:  0.5em;
+    margin-bottom: 0.5em;
+    }
+  p.list {
+  	margin-left: 0.5in;
+    margin-top:  0.05em;
+    margin-bottom: 0.05em;
+    }
+  </style>
+
+</head>
+
+<body lang="EN-US">
+
+<p align=center><b>Eclipse Public License - v 1.0</b></p>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>&quot;Contribution&quot; means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">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.</p>
+
+<p>&quot;Contributor&quot; means any person or entity that distributes
+the Program.</p>
+
+<p>&quot;Licensed Patents&quot; 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.</p>
+
+<p>&quot;Program&quot; means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>&quot;Recipient&quot; means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">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.</p>
+
+<p class="list">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.</p>
+
+<p class="list">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.</p>
+
+<p class="list">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.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">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;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">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.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>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.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>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
+(&quot;Commercial Contributor&quot;) hereby agrees to defend and
+indemnify every other Contributor (&quot;Indemnified Contributor&quot;)
+against any losses, damages and costs (collectively &quot;Losses&quot;)
+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.</p>
+
+<p>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.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN &quot;AS IS&quot; 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.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>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.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+</body>
+
+</html>
diff --git a/org.eclipse.babel.tapiji.tools.java.ui/plugin.xml b/org.eclipse.babel.tapiji.tools.java.ui/plugin.xml
new file mode 100644
index 0000000..4e8e6b9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/plugin.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.4"?>

+<plugin>

+   <extension

+         point="org.eclipse.babel.tapiji.tools.core.builderExtension">

+      <i18nResourceAuditor

+            class="org.eclipse.babel.tapiji.tools.java.ui.JavaResourceAuditor">

+      </i18nResourceAuditor>

+   </extension>

+   <extension

+         point="org.eclipse.jdt.ui.javaEditorTextHovers">

+      <hover

+            activate="true"

+            class="org.eclipse.babel.tapiji.tools.java.ui.ConstantStringHover"

+            description="hovers constant strings"

+            id="org.eclipse.babel.tapiji.tools.java.ui.ConstantStringHover"

+            label="Constant Strings">

+      </hover>

+   </extension>

+   <extension

+         id="org.eclipse.babel.tapiji.tools.java.ui.MessageCompletionProcessor"

+         name="org.eclipse.babel.tapiji.tools.java.ui.MessageCompletionProcessor"

+         point="org.eclipse.jdt.ui.javaCompletionProposalComputer">

+      <javaCompletionProposalComputer

+            activate="true"

+            categoryId="org.eclipse.jdt.ui.defaultProposalCategory"

+            class="org.eclipse.babel.tapiji.tools.java.ui.MessageCompletionProposalComputer">

+         <partition

+               type="__java_string">

+         </partition>

+         <partition

+               type="__dftl_partition_content_type">

+         </partition>

+      </javaCompletionProposalComputer>

+         

+   </extension>

+</plugin>

diff --git a/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/ConstantStringHover.java b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/ConstantStringHover.java
new file mode 100644
index 0000000..a564ecf
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/ConstantStringHover.java
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.java.ui;
+
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.java.ui.util.ASTutilsUI;
+import org.eclipse.babel.tapiji.tools.java.visitor.ResourceAuditVisitor;
+import org.eclipse.jdt.core.ITypeRoot;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jdt.ui.text.java.hover.IJavaEditorTextHover;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.ui.IEditorPart;
+
+public class ConstantStringHover implements IJavaEditorTextHover {
+
+    IEditorPart editor = null;
+    ResourceAuditVisitor csf = null;
+    ResourceBundleManager manager = null;
+
+    @Override
+    public void setEditor(IEditorPart editor) {
+	this.editor = editor;
+	initConstantStringAuditor();
+    }
+
+    protected void initConstantStringAuditor() {
+	// parse editor content and extract resource-bundle access strings
+
+	// get the type of the currently loaded resource
+	ITypeRoot typeRoot = JavaUI.getEditorInputTypeRoot(editor
+		.getEditorInput());
+
+	if (typeRoot == null) {
+	    return;
+	}
+
+	CompilationUnit cu = ASTutilsUI.getCompilationUnit(typeRoot);
+
+	if (cu == null) {
+	    return;
+	}
+
+	manager = ResourceBundleManager.getManager(cu.getJavaElement()
+		.getResource().getProject());
+
+	// determine the element at the position of the cursur
+	csf = new ResourceAuditVisitor(null, manager.getProject().getName());
+	cu.accept(csf);
+    }
+
+    @Override
+    public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {
+	initConstantStringAuditor();
+	if (hoverRegion == null) {
+	    return null;
+	}
+
+	// get region for string literals
+	hoverRegion = getHoverRegion(textViewer, hoverRegion.getOffset());
+
+	if (hoverRegion == null) {
+	    return null;
+	}
+
+	String bundleName = csf.getBundleReference(hoverRegion);
+	String key = csf.getKeyAt(hoverRegion);
+
+	String hoverText = manager.getKeyHoverString(bundleName, key);
+	if (hoverText == null || hoverText.equals("")) {
+	    return null;
+	} else {
+	    return hoverText;
+	}
+    }
+
+    @Override
+    public IRegion getHoverRegion(ITextViewer textViewer, int offset) {
+	if (editor == null) {
+	    return null;
+	}
+
+	// Retrieve the property key at this position. Otherwise, null is
+	// returned.
+	return csf.getKeyAt(Long.valueOf(offset));
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/JavaResourceAuditor.java b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/JavaResourceAuditor.java
new file mode 100644
index 0000000..ac69712
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/JavaResourceAuditor.java
@@ -0,0 +1,165 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.java.ui;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.babel.tapiji.tools.core.extensions.ILocation;
+import org.eclipse.babel.tapiji.tools.core.extensions.IMarkerConstants;
+import org.eclipse.babel.tapiji.tools.core.model.SLLocation;
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.extensions.I18nResourceAuditor;
+import org.eclipse.babel.tapiji.tools.core.ui.quickfix.CreateResourceBundle;
+import org.eclipse.babel.tapiji.tools.core.ui.quickfix.CreateResourceBundleEntry;
+import org.eclipse.babel.tapiji.tools.core.ui.quickfix.IncludeResource;
+import org.eclipse.babel.tapiji.tools.java.ui.quickfix.ExcludeResourceFromInternationalization;
+import org.eclipse.babel.tapiji.tools.java.ui.quickfix.ExportToResourceBundleResolution;
+import org.eclipse.babel.tapiji.tools.java.ui.quickfix.IgnoreStringFromInternationalization;
+import org.eclipse.babel.tapiji.tools.java.ui.quickfix.ReplaceResourceBundleDefReference;
+import org.eclipse.babel.tapiji.tools.java.ui.quickfix.ReplaceResourceBundleReference;
+import org.eclipse.babel.tapiji.tools.java.ui.util.ASTutilsUI;
+import org.eclipse.babel.tapiji.tools.java.visitor.ResourceAuditVisitor;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.ui.IMarkerResolution;
+
+public class JavaResourceAuditor extends I18nResourceAuditor {
+
+    protected List<SLLocation> constantLiterals = new ArrayList<SLLocation>();
+    protected List<SLLocation> brokenResourceReferences = new ArrayList<SLLocation>();
+    protected List<SLLocation> brokenBundleReferences = new ArrayList<SLLocation>();
+
+    @Override
+    public String[] getFileEndings() {
+	return new String[] { "java" };
+    }
+
+    @Override
+    public void audit(IResource resource) {
+
+	ResourceAuditVisitor csav = new ResourceAuditVisitor(resource
+		.getProject().getFile(resource.getProjectRelativePath()),
+		resource.getProject().getName());
+
+	// get a reference to the shared AST of the loaded CompilationUnit
+	CompilationUnit cu = ASTutilsUI.getCompilationUnit(resource);
+	if (cu == null) {
+	    System.out.println("Cannot audit resource: "
+		    + resource.getFullPath());
+	    return;
+	}
+	cu.accept(csav);
+
+	// Report all constant string literals
+	constantLiterals = csav.getConstantStringLiterals();
+
+	// Report all broken Resource-Bundle references
+	brokenResourceReferences = csav.getBrokenResourceReferences();
+
+	// Report all broken definitions to Resource-Bundle references
+	brokenBundleReferences = csav.getBrokenRBReferences();
+    }
+
+    @Override
+    public List<ILocation> getConstantStringLiterals() {
+	return new ArrayList<ILocation>(constantLiterals);
+    }
+
+    @Override
+    public List<ILocation> getBrokenResourceReferences() {
+	return new ArrayList<ILocation>(brokenResourceReferences);
+    }
+
+    @Override
+    public List<ILocation> getBrokenBundleReferences() {
+	return new ArrayList<ILocation>(brokenBundleReferences);
+    }
+
+    @Override
+    public String getContextId() {
+	return "java";
+    }
+
+    @Override
+    public List<IMarkerResolution> getMarkerResolutions(IMarker marker) {
+	List<IMarkerResolution> resolutions = new ArrayList<IMarkerResolution>();
+
+	switch (marker.getAttribute("cause", -1)) {
+	case IMarkerConstants.CAUSE_CONSTANT_LITERAL:
+	    resolutions.add(new IgnoreStringFromInternationalization());
+	    resolutions.add(new ExcludeResourceFromInternationalization());
+	    resolutions.add(new ExportToResourceBundleResolution());
+	    break;
+	case IMarkerConstants.CAUSE_BROKEN_REFERENCE:
+	    String dataName = marker.getAttribute("bundleName", "");
+	    int dataStart = marker.getAttribute("bundleStart", 0);
+	    int dataEnd = marker.getAttribute("bundleEnd", 0);
+
+	    IProject project = marker.getResource().getProject();
+	    ResourceBundleManager manager = ResourceBundleManager
+		    .getManager(project);
+
+	    if (manager.getResourceBundle(dataName) != null) {
+		String key = marker.getAttribute("key", "");
+
+		resolutions.add(new CreateResourceBundleEntry(key, dataName));
+		resolutions.add(new ReplaceResourceBundleReference(key,
+			dataName));
+		resolutions.add(new ReplaceResourceBundleDefReference(dataName,
+			dataStart, dataEnd));
+	    } else {
+		String bname = dataName;
+
+		Set<IResource> bundleResources = ResourceBundleManager
+			.getManager(marker.getResource().getProject())
+			.getAllResourceBundleResources(bname);
+
+		if (bundleResources != null && bundleResources.size() > 0) {
+		    resolutions
+			    .add(new IncludeResource(bname, bundleResources));
+		} else {
+		    resolutions.add(new CreateResourceBundle(bname, marker
+			    .getResource(), dataStart, dataEnd));
+		}
+		resolutions.add(new ReplaceResourceBundleDefReference(bname,
+			dataStart, dataEnd));
+	    }
+
+	    break;
+	case IMarkerConstants.CAUSE_BROKEN_RB_REFERENCE:
+	    String bname = marker.getAttribute("key", "");
+
+	    Set<IResource> bundleResources = ResourceBundleManager.getManager(
+		    marker.getResource().getProject())
+		    .getAllResourceBundleResources(bname);
+
+	    if (bundleResources != null && bundleResources.size() > 0) {
+		resolutions.add(new IncludeResource(bname, bundleResources));
+	    } else {
+		resolutions.add(new CreateResourceBundle(marker.getAttribute(
+			"key", ""), marker.getResource(), marker.getAttribute(
+			IMarker.CHAR_START, 0), marker.getAttribute(
+			IMarker.CHAR_END, 0)));
+	    }
+	    resolutions.add(new ReplaceResourceBundleDefReference(marker
+		    .getAttribute("key", ""), marker.getAttribute(
+		    IMarker.CHAR_START, 0), marker.getAttribute(
+		    IMarker.CHAR_END, 0)));
+	}
+
+	return resolutions;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/MessageCompletionProposalComputer.java b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/MessageCompletionProposalComputer.java
new file mode 100644
index 0000000..efe9c95
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/MessageCompletionProposalComputer.java
@@ -0,0 +1,269 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.java.ui;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.babel.core.message.IMessagesBundleGroup;
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.builder.InternationalizationNature;
+import org.eclipse.babel.tapiji.tools.java.ui.autocompletion.CreateResourceBundleProposal;
+import org.eclipse.babel.tapiji.tools.java.ui.autocompletion.InsertResourceBundleReferenceProposal;
+import org.eclipse.babel.tapiji.tools.java.ui.autocompletion.MessageCompletionProposal;
+import org.eclipse.babel.tapiji.tools.java.ui.autocompletion.NewResourceBundleEntryProposal;
+import org.eclipse.babel.tapiji.tools.java.ui.autocompletion.NoActionProposal;
+import org.eclipse.babel.tapiji.tools.java.ui.util.ASTutilsUI;
+import org.eclipse.babel.tapiji.tools.java.util.ASTutils;
+import org.eclipse.babel.tapiji.tools.java.visitor.ResourceAuditVisitor;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jdt.core.CompletionContext;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.StringLiteral;
+import org.eclipse.jdt.ui.text.java.ContentAssistInvocationContext;
+import org.eclipse.jdt.ui.text.java.IJavaCompletionProposalComputer;
+import org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.jface.text.contentassist.IContextInformation;
+
+public class MessageCompletionProposalComputer implements
+	IJavaCompletionProposalComputer {
+
+    private ResourceAuditVisitor csav;
+    private IResource resource;
+    private CompilationUnit cu;
+    private ResourceBundleManager manager;
+
+    public MessageCompletionProposalComputer() {
+
+    }
+
+    @Override
+    public List<ICompletionProposal> computeCompletionProposals(
+	    ContentAssistInvocationContext context, IProgressMonitor monitor) {
+
+	List<ICompletionProposal> completions = new ArrayList<ICompletionProposal>();
+
+	if (!InternationalizationNature
+		.hasNature(((JavaContentAssistInvocationContext) context)
+			.getCompilationUnit().getResource().getProject())) {
+	    return completions;
+	}
+
+	try {
+	    JavaContentAssistInvocationContext javaContext = ((JavaContentAssistInvocationContext) context);
+	    CompletionContext coreContext = javaContext.getCoreContext();
+
+	    int tokenStart = coreContext.getTokenStart();
+	    int tokenEnd = coreContext.getTokenEnd();
+	    int tokenOffset = coreContext.getOffset();
+	    boolean isStringLiteral = coreContext.getTokenKind() == CompletionContext.TOKEN_KIND_STRING_LITERAL;
+
+	    if (coreContext.getTokenKind() == CompletionContext.TOKEN_KIND_NAME
+		    && (tokenEnd + 1) - tokenStart > 0) {
+		return completions;
+	    }
+
+	    if (cu == null) {
+		manager = ResourceBundleManager.getManager(javaContext
+			.getCompilationUnit().getResource().getProject());
+
+		resource = javaContext.getCompilationUnit().getResource();
+
+		csav = new ResourceAuditVisitor(null, manager.getProject()
+			.getName());
+
+		cu = ASTutilsUI.getCompilationUnit(resource);
+
+		cu.accept(csav);
+	    }
+
+	    if (tokenStart < 0) {
+		// is string literal in front of cursor?
+		StringLiteral strLit = ASTutils.getStringLiteralAtPos(cu,
+			tokenOffset - 1);
+		if (strLit != null) {
+		    tokenStart = strLit.getStartPosition();
+		    tokenEnd = tokenStart + strLit.getLength() - 1;
+		    tokenOffset = tokenOffset - 1;
+		    isStringLiteral = true;
+		} else {
+		    tokenStart = tokenOffset;
+		    tokenEnd = tokenOffset;
+		}
+	    }
+
+	    if (isStringLiteral) {
+		tokenStart++;
+	    }
+
+	    tokenEnd = Math.max(tokenEnd, tokenStart);
+
+	    String fullToken = "";
+
+	    if (tokenStart < tokenEnd) {
+		fullToken = context.getDocument().get(tokenStart,
+			tokenEnd - tokenStart);
+	    }
+
+	    // Check if the string literal is up to be written within the
+	    // context of a resource-bundle accessor method
+	    if (csav.getKeyAt(new Long(tokenOffset)) != null && isStringLiteral) {
+		completions.addAll(getResourceBundleCompletionProposals(
+			tokenStart, tokenEnd, tokenOffset, isStringLiteral,
+			fullToken, manager, csav, resource));
+	    } else if (csav.getRBReferenceAt(new Long(tokenOffset)) != null
+		    && isStringLiteral) {
+		completions.addAll(getRBReferenceCompletionProposals(
+			tokenStart, tokenEnd, fullToken, isStringLiteral,
+			manager, resource));
+	    } else {
+		completions.addAll(getBasicJavaCompletionProposals(tokenStart,
+			tokenEnd, tokenOffset, fullToken, isStringLiteral,
+			manager, csav, resource));
+	    }
+	    if (completions.size() == 1) {
+		completions.add(new NoActionProposal());
+	    }
+
+	} catch (Exception e) {
+	    Logger.logError(e);
+	}
+	return completions;
+    }
+
+    private Collection<ICompletionProposal> getRBReferenceCompletionProposals(
+	    int tokenStart, int tokenEnd, String fullToken,
+	    boolean isStringLiteral, ResourceBundleManager manager,
+	    IResource resource) {
+	List<ICompletionProposal> completions = new ArrayList<ICompletionProposal>();
+	boolean hit = false;
+
+	// Show a list of available resource bundles
+	List<String> resourceBundles = manager.getResourceBundleIdentifiers();
+	for (String rbName : resourceBundles) {
+	    if (rbName.startsWith(fullToken)) {
+		if (rbName.equals(fullToken)) {
+		    hit = true;
+		} else {
+		    completions.add(new MessageCompletionProposal(tokenStart,
+			    tokenEnd - tokenStart, rbName, true));
+		}
+	    }
+	}
+
+	if (!hit && fullToken.trim().length() > 0) {
+	    completions.add(new CreateResourceBundleProposal(fullToken,
+		    resource, tokenStart, tokenEnd));
+	}
+
+	return completions;
+    }
+
+    protected List<ICompletionProposal> getBasicJavaCompletionProposals(
+	    int tokenStart, int tokenEnd, int tokenOffset, String fullToken,
+	    boolean isStringLiteral, ResourceBundleManager manager,
+	    ResourceAuditVisitor csav, IResource resource) {
+	List<ICompletionProposal> completions = new ArrayList<ICompletionProposal>();
+
+	if (fullToken.length() == 0) {
+	    // If nothing has been entered
+	    completions.add(new InsertResourceBundleReferenceProposal(
+		    tokenStart, tokenEnd - tokenStart, manager.getProject()
+			    .getName(), resource, csav
+			    .getDefinedResourceBundles(tokenOffset)));
+	    completions.add(new NewResourceBundleEntryProposal(resource,
+		    tokenStart, tokenEnd, fullToken, isStringLiteral, false,
+		    manager.getProject().getName(), null));
+	} else {
+	    completions.add(new NewResourceBundleEntryProposal(resource,
+		    tokenStart, tokenEnd, fullToken, isStringLiteral, false,
+		    manager.getProject().getName(), null));
+	}
+	return completions;
+    }
+
+    protected List<ICompletionProposal> getResourceBundleCompletionProposals(
+	    int tokenStart, int tokenEnd, int tokenOffset,
+	    boolean isStringLiteral, String fullToken,
+	    ResourceBundleManager manager, ResourceAuditVisitor csav,
+	    IResource resource) {
+
+	List<ICompletionProposal> completions = new ArrayList<ICompletionProposal>();
+	IRegion region = csav.getKeyAt(new Long(tokenOffset));
+	String bundleName = csav.getBundleReference(region);
+	IMessagesBundleGroup bundleGroup = manager
+		.getResourceBundle(bundleName);
+
+	if (fullToken.length() > 0) {
+	    boolean hit = false;
+	    // If a part of a String has already been entered
+	    for (String key : bundleGroup.getMessageKeys()) {
+		if (key.toLowerCase().startsWith(fullToken)) {
+		    if (!key.equals(fullToken)) {
+			completions.add(new MessageCompletionProposal(
+				tokenStart, tokenEnd - tokenStart, key, false));
+		    } else {
+			hit = true;
+		    }
+		}
+	    }
+	    if (!hit) {
+		completions.add(new NewResourceBundleEntryProposal(resource,
+			tokenStart, tokenEnd, fullToken, isStringLiteral, true,
+			manager.getProject().getName(), bundleName));
+
+		// TODO: reference to existing resource
+	    }
+	} else {
+	    for (String key : bundleGroup.getMessageKeys()) {
+		completions.add(new MessageCompletionProposal(tokenStart,
+			tokenEnd - tokenStart, key, false));
+	    }
+	    completions.add(new NewResourceBundleEntryProposal(resource,
+		    tokenStart, tokenEnd, fullToken, isStringLiteral, true,
+		    manager.getProject().getName(), bundleName));
+
+	}
+	return completions;
+    }
+
+    @Override
+    public String getErrorMessage() {
+	// TODO Auto-generated method stub
+	return "";
+    }
+
+    @Override
+    public void sessionEnded() {
+	cu = null;
+	csav = null;
+	resource = null;
+	manager = null;
+    }
+
+    @Override
+    public void sessionStarted() {
+
+    }
+
+    @Override
+    public List<IContextInformation> computeContextInformation(
+	    ContentAssistInvocationContext arg0, IProgressMonitor arg1) {
+	// TODO Auto-generated method stub
+	return null;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/autocompletion/CreateResourceBundleProposal.java b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/autocompletion/CreateResourceBundleProposal.java
new file mode 100644
index 0000000..72fe63e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/autocompletion/CreateResourceBundleProposal.java
@@ -0,0 +1,231 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *  
+ * Contributors:
+ *     Martin Reiterer - Initial implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.java.ui.autocompletion;
+
+import org.eclipse.babel.editor.wizards.IResourceBundleWizard;
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.builder.I18nBuilder;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.ResourceUtils;
+import org.eclipse.core.filebuffers.FileBuffers;
+import org.eclipse.core.filebuffers.ITextFileBuffer;
+import org.eclipse.core.filebuffers.ITextFileBufferManager;
+import org.eclipse.core.filebuffers.LocationKind;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.contentassist.IContextInformation;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.wizards.IWizardDescriptor;
+
+public class CreateResourceBundleProposal implements IJavaCompletionProposal {
+
+    private IResource resource;
+    private int start;
+    private int end;
+    private String key;
+    private final String newBunldeWizard = "org.eclipse.babel.editor.wizards.ResourceBundleWizard";
+
+    public CreateResourceBundleProposal(String key, IResource resource,
+	    int start, int end) {
+	this.key = ResourceUtils.deriveNonExistingRBName(key,
+		ResourceBundleManager.getManager(resource.getProject()));
+	this.resource = resource;
+	this.start = start;
+	this.end = end;
+    }
+
+    public String getDescription() {
+	return "Creates a new Resource-Bundle with the id '" + key + "'";
+    }
+
+    public String getLabel() {
+	return "Create Resource-Bundle '" + key + "'";
+    }
+
+    @SuppressWarnings("deprecation")
+    protected void runAction() {
+	// First see if this is a "new wizard".
+	IWizardDescriptor descriptor = PlatformUI.getWorkbench()
+		.getNewWizardRegistry().findWizard(newBunldeWizard);
+	// If not check if it is an "import wizard".
+	if (descriptor == null) {
+	    descriptor = PlatformUI.getWorkbench().getImportWizardRegistry()
+		    .findWizard(newBunldeWizard);
+	}
+	// Or maybe an export wizard
+	if (descriptor == null) {
+	    descriptor = PlatformUI.getWorkbench().getExportWizardRegistry()
+		    .findWizard(newBunldeWizard);
+	}
+	try {
+	    // Then if we have a wizard, open it.
+	    if (descriptor != null) {
+		IWizard wizard = descriptor.createWizard();
+
+		if (!(wizard instanceof IResourceBundleWizard)) {
+		    return;
+		}
+
+		IResourceBundleWizard rbw = (IResourceBundleWizard) wizard;
+		String[] keySilbings = key.split("\\.");
+		String rbName = keySilbings[keySilbings.length - 1];
+		String packageName = "";
+
+		rbw.setBundleId(rbName);
+
+		// Set the default path according to the specified package name
+		String pathName = "";
+		if (keySilbings.length > 1) {
+		    try {
+			IJavaProject jp = JavaCore
+				.create(resource.getProject());
+			packageName = key.substring(0, key.lastIndexOf("."));
+
+			for (IPackageFragmentRoot fr : jp
+				.getAllPackageFragmentRoots()) {
+			    IPackageFragment pf = fr
+				    .getPackageFragment(packageName);
+			    if (pf.exists()) {
+				pathName = pf.getResource().getFullPath()
+					.removeFirstSegments(0).toOSString();
+				break;
+			    }
+			}
+		    } catch (Exception e) {
+			pathName = "";
+		    }
+		}
+
+		try {
+		    IJavaProject jp = JavaCore.create(resource.getProject());
+		    if (pathName.trim().equals("")) {
+			for (IPackageFragmentRoot fr : jp
+				.getAllPackageFragmentRoots()) {
+			    if (!fr.isReadOnly()) {
+				pathName = fr.getResource().getFullPath()
+					.removeFirstSegments(0).toOSString();
+				break;
+			    }
+			}
+		    }
+		} catch (Exception e) {
+		    pathName = "";
+		}
+
+		rbw.setDefaultPath(pathName);
+
+		WizardDialog wd = new WizardDialog(Display.getDefault()
+			.getActiveShell(), wizard);
+
+		wd.setTitle(wizard.getWindowTitle());
+		if (wd.open() == WizardDialog.OK) {
+		    try {
+			resource.getProject().build(
+				IncrementalProjectBuilder.FULL_BUILD,
+				I18nBuilder.BUILDER_ID, null, null);
+		    } catch (CoreException e) {
+			Logger.logError(e);
+		    }
+
+		    ITextFileBufferManager bufferManager = FileBuffers
+			    .getTextFileBufferManager();
+		    IPath path = resource.getRawLocation();
+		    try {
+			bufferManager.connect(path, LocationKind.NORMALIZE,
+				null);
+			ITextFileBuffer textFileBuffer = bufferManager
+				.getTextFileBuffer(path, LocationKind.NORMALIZE);
+			IDocument document = textFileBuffer.getDocument();
+
+			if (document.get().charAt(start - 1) == '"'
+				&& document.get().charAt(start) != '"') {
+			    start--;
+			    end++;
+			}
+			if (document.get().charAt(end + 1) == '"'
+				&& document.get().charAt(end) != '"') {
+			    end++;
+			}
+
+			document.replace(start, end - start, "\""
+				+ (packageName.equals("") ? "" : packageName
+					+ ".") + rbName + "\"");
+
+			textFileBuffer.commit(null, false);
+		    } catch (Exception e) {
+		    } finally {
+			try {
+			    bufferManager.disconnect(path, null);
+			} catch (CoreException e) {
+			}
+		    }
+		}
+	    }
+	} catch (CoreException e) {
+	}
+    }
+
+    @Override
+    public void apply(IDocument document) {
+	this.runAction();
+    }
+
+    @Override
+    public String getAdditionalProposalInfo() {
+	return getDescription();
+    }
+
+    @Override
+    public IContextInformation getContextInformation() {
+	return null;
+    }
+
+    @Override
+    public String getDisplayString() {
+	return getLabel();
+    }
+
+    @Override
+    public Point getSelection(IDocument document) {
+	return null;
+    }
+
+    @Override
+    public Image getImage() {
+	return PlatformUI.getWorkbench().getSharedImages()
+		.getImageDescriptor(ISharedImages.IMG_OBJ_ADD).createImage();
+    }
+
+    @Override
+    public int getRelevance() {
+	// TODO Auto-generated method stub
+	if (end - start == 0) {
+	    return 99;
+	} else {
+	    return 1099;
+	}
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/autocompletion/InsertResourceBundleReferenceProposal.java b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/autocompletion/InsertResourceBundleReferenceProposal.java
new file mode 100644
index 0000000..066271c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/autocompletion/InsertResourceBundleReferenceProposal.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.java.ui.autocompletion;
+
+import java.util.Collection;
+import java.util.Locale;
+
+import org.eclipse.babel.tapiji.tools.core.ui.dialogs.ResourceBundleEntrySelectionDialog;
+import org.eclipse.babel.tapiji.tools.java.ui.util.ASTutilsUI;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.contentassist.IContextInformation;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+
+public class InsertResourceBundleReferenceProposal implements
+	IJavaCompletionProposal {
+
+    private int offset = 0;
+    private int length = 0;
+    private IResource resource;
+    private String reference;
+    private String projectName;
+
+    public InsertResourceBundleReferenceProposal(int offset, int length,
+	    String projectName, IResource resource,
+	    Collection<String> availableBundles) {
+	this.offset = offset;
+	this.length = length;
+	this.resource = resource;
+	this.projectName = projectName;
+    }
+
+    @Override
+    public void apply(IDocument document) {
+	ResourceBundleEntrySelectionDialog dialog = new ResourceBundleEntrySelectionDialog(
+		Display.getDefault().getActiveShell());
+	dialog.setProjectName(projectName);
+
+	if (dialog.open() != InputDialog.OK) {
+	    return;
+	}
+
+	String resourceBundleId = dialog.getSelectedResourceBundle();
+	String key = dialog.getSelectedResource();
+	Locale locale = dialog.getSelectedLocale();
+
+	reference = ASTutilsUI.insertExistingBundleRef(document, resource,
+		offset, length, resourceBundleId, key, locale);
+    }
+
+    @Override
+    public String getAdditionalProposalInfo() {
+	// TODO Auto-generated method stub
+	return null;
+    }
+
+    @Override
+    public IContextInformation getContextInformation() {
+	return null;
+    }
+
+    @Override
+    public String getDisplayString() {
+	return "Insert reference to a localized string literal";
+    }
+
+    @Override
+    public Image getImage() {
+	return PlatformUI.getWorkbench().getSharedImages()
+		.getImageDescriptor(ISharedImages.IMG_OBJ_ADD).createImage();
+    }
+
+    @Override
+    public Point getSelection(IDocument document) {
+	// TODO Auto-generated method stub
+	int referenceLength = reference == null ? 0 : reference.length();
+	return new Point(offset + referenceLength, 0);
+    }
+
+    @Override
+    public int getRelevance() {
+	// TODO Auto-generated method stub
+	if (this.length == 0) {
+	    return 97;
+	} else {
+	    return 1097;
+	}
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/autocompletion/MessageCompletionProposal.java b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/autocompletion/MessageCompletionProposal.java
new file mode 100644
index 0000000..a56d19c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/autocompletion/MessageCompletionProposal.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.java.ui.autocompletion;
+
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.ImageUtils;
+import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.contentassist.IContextInformation;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+
+public class MessageCompletionProposal implements IJavaCompletionProposal {
+
+    private int offset = 0;
+    private int length = 0;
+    private String content = "";
+    private boolean messageAccessor = false;
+
+    public MessageCompletionProposal(int offset, int length, String content,
+	    boolean messageAccessor) {
+	this.offset = offset;
+	this.length = length;
+	this.content = content;
+	this.messageAccessor = messageAccessor;
+    }
+
+    @Override
+    public void apply(IDocument document) {
+	try {
+	    document.replace(offset, length, content);
+	} catch (Exception e) {
+	    Logger.logError(e);
+	}
+    }
+
+    @Override
+    public String getAdditionalProposalInfo() {
+	return "Inserts the resource key '" + this.content + "'";
+    }
+
+    @Override
+    public IContextInformation getContextInformation() {
+	return null;
+    }
+
+    @Override
+    public String getDisplayString() {
+	return content;
+    }
+
+    @Override
+    public Image getImage() {
+	if (messageAccessor)
+	    return ImageUtils.getImage(ImageUtils.IMAGE_RESOURCE_BUNDLE);
+	return ImageUtils.getImage(ImageUtils.IMAGE_PROPERTIES_FILE);
+    }
+
+    @Override
+    public Point getSelection(IDocument document) {
+	return new Point(offset + content.length() + 1, 0);
+    }
+
+    @Override
+    public int getRelevance() {
+	return 99;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/autocompletion/NewResourceBundleEntryProposal.java b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/autocompletion/NewResourceBundleEntryProposal.java
new file mode 100644
index 0000000..6960fa3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/autocompletion/NewResourceBundleEntryProposal.java
@@ -0,0 +1,141 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.java.ui.autocompletion;
+
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.dialogs.CreateResourceBundleEntryDialog;
+import org.eclipse.babel.tapiji.tools.core.ui.dialogs.CreateResourceBundleEntryDialog.DialogConfiguration;
+import org.eclipse.babel.tapiji.tools.java.ui.util.ASTutilsUI;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.contentassist.IContextInformation;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+
+public class NewResourceBundleEntryProposal implements IJavaCompletionProposal {
+
+    private int startPos;
+    private int endPos;
+    private String value;
+    private boolean bundleContext;
+    private String projectName;
+    private IResource resource;
+    private String bundleName;
+    private String reference;
+
+    public NewResourceBundleEntryProposal(IResource resource, int startPos,
+	    int endPos, String value, boolean isStringLiteral,
+	    boolean bundleContext, String projectName, String bundleName) {
+
+	this.startPos = startPos;
+	this.endPos = endPos;
+	this.value = value;
+	this.bundleContext = bundleContext;
+	this.projectName = projectName;
+	this.resource = resource;
+	this.bundleName = bundleName;
+    }
+
+    @Override
+    public void apply(IDocument document) {
+
+	CreateResourceBundleEntryDialog dialog = new CreateResourceBundleEntryDialog(
+		Display.getDefault().getActiveShell());
+
+	DialogConfiguration config = dialog.new DialogConfiguration();
+	config.setPreselectedKey(bundleContext ? value : "");
+	config.setPreselectedMessage(value);
+	config.setPreselectedBundle(bundleName == null ? "" : bundleName);
+	config.setPreselectedLocale("");
+	config.setProjectName(projectName);
+
+	dialog.setDialogConfiguration(config);
+
+	if (dialog.open() != InputDialog.OK) {
+	    return;
+	}
+
+	String resourceBundleId = dialog.getSelectedResourceBundle();
+	String key = dialog.getSelectedKey();
+
+	try {
+	    if (!bundleContext) {
+		reference = ASTutilsUI.insertNewBundleRef(document, resource,
+			startPos, endPos - startPos, resourceBundleId, key);
+	    } else {
+		document.replace(startPos, endPos - startPos, key);
+		reference = key + "\"";
+	    }
+	    ResourceBundleManager.rebuildProject(resource);
+	} catch (Exception e) {
+	    Logger.logError(e);
+	}
+    }
+
+    @Override
+    public String getAdditionalProposalInfo() {
+	if (value != null && value.length() > 0) {
+	    return "Exports the focused string literal into a Java Resource-Bundle. This action results "
+		    + "in a Resource-Bundle reference!";
+	} else {
+	    return "";
+	}
+    }
+
+    @Override
+    public IContextInformation getContextInformation() {
+	return null;
+    }
+
+    @Override
+    public String getDisplayString() {
+	String displayStr = "";
+	if (bundleContext) {
+	    displayStr = "Create a new resource-bundle-entry";
+	} else {
+	    displayStr = "Create a new localized string literal";
+	}
+
+	if (value != null && value.length() > 0) {
+	    displayStr += " for '" + value + "'";
+	}
+
+	return displayStr;
+    }
+
+    @Override
+    public Image getImage() {
+	return PlatformUI.getWorkbench().getSharedImages()
+		.getImageDescriptor(ISharedImages.IMG_OBJ_ADD).createImage();
+    }
+
+    @Override
+    public Point getSelection(IDocument document) {
+	int refLength = reference == null ? 0 : reference.length() - 1;
+	return new Point(startPos + refLength, 0);
+    }
+
+    @Override
+    public int getRelevance() {
+	if (this.value.trim().length() == 0) {
+	    return 96;
+	} else {
+	    return 1096;
+	}
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/autocompletion/NoActionProposal.java b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/autocompletion/NoActionProposal.java
new file mode 100644
index 0000000..1af9bca
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/autocompletion/NoActionProposal.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.java.ui.autocompletion;
+
+import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.contentassist.IContextInformation;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+
+public class NoActionProposal implements IJavaCompletionProposal {
+
+    public NoActionProposal() {
+	super();
+    }
+
+    @Override
+    public void apply(IDocument document) {
+	// TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public String getAdditionalProposalInfo() {
+	// TODO Auto-generated method stub
+	return null;
+    }
+
+    @Override
+    public IContextInformation getContextInformation() {
+	// TODO Auto-generated method stub
+	return null;
+    }
+
+    @Override
+    public String getDisplayString() {
+	// TODO Auto-generated method stub
+	return "No Default Proposals";
+    }
+
+    @Override
+    public Image getImage() {
+	// TODO Auto-generated method stub
+	return null;
+    }
+
+    @Override
+    public Point getSelection(IDocument document) {
+	// TODO Auto-generated method stub
+	return null;
+    }
+
+    @Override
+    public int getRelevance() {
+	// TODO Auto-generated method stub
+	return 100;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/autocompletion/Sorter.java b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/autocompletion/Sorter.java
new file mode 100644
index 0000000..4c35d72
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/autocompletion/Sorter.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.java.ui.autocompletion;
+
+import org.eclipse.jdt.ui.text.java.AbstractProposalSorter;
+import org.eclipse.jdt.ui.text.java.ContentAssistInvocationContext;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+
+public class Sorter extends AbstractProposalSorter {
+
+    public Sorter() {
+    }
+
+    @Override
+    public void beginSorting(ContentAssistInvocationContext context) {
+	// TODO Auto-generated method stub
+	super.beginSorting(context);
+    }
+
+    @Override
+    public int compare(ICompletionProposal prop1, ICompletionProposal prop2) {
+	return getIndex(prop1) - getIndex(prop2);
+    }
+
+    protected int getIndex(ICompletionProposal prop) {
+	if (prop instanceof NoActionProposal) {
+	    return 1;
+	} else if (prop instanceof MessageCompletionProposal) {
+	    return 2;
+	} else if (prop instanceof InsertResourceBundleReferenceProposal) {
+	    return 3;
+	} else if (prop instanceof NewResourceBundleEntryProposal) {
+	    return 4;
+	} else {
+	    return 0;
+	}
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/model/SLLocation.java b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/model/SLLocation.java
new file mode 100644
index 0000000..3e2ddc9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/model/SLLocation.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.java.ui.model;
+
+import java.io.Serializable;
+
+import org.eclipse.babel.tapiji.tools.core.extensions.ILocation;
+import org.eclipse.core.resources.IFile;
+
+public class SLLocation implements Serializable, ILocation {
+
+    private static final long serialVersionUID = 1L;
+    private IFile file = null;
+    private int startPos = -1;
+    private int endPos = -1;
+    private String literal;
+    private Serializable data;
+
+    public SLLocation(IFile file, int startPos, int endPos, String literal) {
+	super();
+	this.file = file;
+	this.startPos = startPos;
+	this.endPos = endPos;
+	this.literal = literal;
+    }
+
+    @Override
+    public IFile getFile() {
+	return file;
+    }
+
+    public void setFile(IFile file) {
+	this.file = file;
+    }
+
+    @Override
+    public int getStartPos() {
+	return startPos;
+    }
+
+    public void setStartPos(int startPos) {
+	this.startPos = startPos;
+    }
+
+    @Override
+    public int getEndPos() {
+	return endPos;
+    }
+
+    public void setEndPos(int endPos) {
+	this.endPos = endPos;
+    }
+
+    @Override
+    public String getLiteral() {
+	return literal;
+    }
+
+    @Override
+    public Serializable getData() {
+	return data;
+    }
+
+    public void setData(Serializable data) {
+	this.data = data;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/quickfix/ExcludeResourceFromInternationalization.java b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/quickfix/ExcludeResourceFromInternationalization.java
new file mode 100644
index 0000000..75e71b8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/quickfix/ExcludeResourceFromInternationalization.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.java.ui.quickfix;
+
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IMarkerResolution2;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.progress.IProgressService;
+
+public class ExcludeResourceFromInternationalization implements
+	IMarkerResolution2 {
+
+    @Override
+    public String getLabel() {
+	return "Exclude Resource";
+    }
+
+    @Override
+    public void run(IMarker marker) {
+	final IResource resource = marker.getResource();
+
+	IWorkbench wb = PlatformUI.getWorkbench();
+	IProgressService ps = wb.getProgressService();
+	try {
+	    ps.busyCursorWhile(new IRunnableWithProgress() {
+		public void run(IProgressMonitor pm) {
+
+		    ResourceBundleManager manager = null;
+		    pm.beginTask(
+			    "Excluding Resource from Internationalization", 1);
+
+		    if (manager == null
+			    || (manager.getProject() != resource.getProject()))
+			manager = ResourceBundleManager.getManager(resource
+				.getProject());
+		    manager.excludeResource(resource, pm);
+		    pm.worked(1);
+		    pm.done();
+		}
+	    });
+	} catch (Exception e) {
+	}
+    }
+
+    @Override
+    public String getDescription() {
+	return "Exclude Resource from Internationalization";
+    }
+
+    @Override
+    public Image getImage() {
+	return null;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/quickfix/ExportToResourceBundleResolution.java b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/quickfix/ExportToResourceBundleResolution.java
new file mode 100644
index 0000000..fc3a130
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/quickfix/ExportToResourceBundleResolution.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.java.ui.quickfix;
+
+import org.eclipse.babel.tapiji.tools.core.ui.dialogs.CreateResourceBundleEntryDialog;
+import org.eclipse.babel.tapiji.tools.core.ui.dialogs.CreateResourceBundleEntryDialog.DialogConfiguration;
+import org.eclipse.babel.tapiji.tools.java.ui.util.ASTutilsUI;
+import org.eclipse.core.filebuffers.FileBuffers;
+import org.eclipse.core.filebuffers.ITextFileBuffer;
+import org.eclipse.core.filebuffers.ITextFileBufferManager;
+import org.eclipse.core.filebuffers.LocationKind;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IMarkerResolution2;
+
+public class ExportToResourceBundleResolution implements IMarkerResolution2 {
+
+    public ExportToResourceBundleResolution() {
+    }
+
+    @Override
+    public String getDescription() {
+	return "Export constant string literal to a resource bundle.";
+    }
+
+    @Override
+    public Image getImage() {
+	// TODO Auto-generated method stub
+	return null;
+    }
+
+    @Override
+    public String getLabel() {
+	return "Export to Resource-Bundle";
+    }
+
+    @Override
+    public void run(IMarker marker) {
+	int startPos = marker.getAttribute(IMarker.CHAR_START, 0);
+	int endPos = marker.getAttribute(IMarker.CHAR_END, 0) - startPos;
+	IResource resource = marker.getResource();
+
+	ITextFileBufferManager bufferManager = FileBuffers
+		.getTextFileBufferManager();
+	IPath path = resource.getRawLocation();
+	try {
+	    bufferManager.connect(path, LocationKind.NORMALIZE, null);
+	    ITextFileBuffer textFileBuffer = bufferManager.getTextFileBuffer(
+		    path, LocationKind.NORMALIZE);
+	    IDocument document = textFileBuffer.getDocument();
+
+	    CreateResourceBundleEntryDialog dialog = new CreateResourceBundleEntryDialog(
+		    Display.getDefault().getActiveShell());
+
+	    DialogConfiguration config = dialog.new DialogConfiguration();
+	    config.setPreselectedKey("");
+	    config.setPreselectedMessage("");
+	    config.setPreselectedMessage((startPos + 1 < document.getLength() && endPos > 1) ? document
+		    .get(startPos + 1, endPos - 2) : "");
+	    config.setPreselectedLocale("");
+	    config.setProjectName(resource.getProject().getName());
+
+	    dialog.setDialogConfiguration(config);
+
+	    if (dialog.open() != InputDialog.OK)
+		return;
+
+	    ASTutilsUI
+		    .insertNewBundleRef(document, resource, startPos, endPos,
+			    dialog.getSelectedResourceBundle(),
+			    dialog.getSelectedKey());
+
+	    textFileBuffer.commit(null, false);
+	} catch (Exception e) {
+	    e.printStackTrace();
+	} finally {
+	    try {
+		bufferManager.disconnect(path, null);
+	    } catch (CoreException e) {
+		e.printStackTrace();
+	    }
+	}
+
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/quickfix/IgnoreStringFromInternationalization.java b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/quickfix/IgnoreStringFromInternationalization.java
new file mode 100644
index 0000000..ce3b10b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/quickfix/IgnoreStringFromInternationalization.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.java.ui.quickfix;
+
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.babel.tapiji.tools.java.ui.util.ASTutilsUI;
+import org.eclipse.babel.tapiji.tools.java.util.ASTutils;
+import org.eclipse.core.filebuffers.FileBuffers;
+import org.eclipse.core.filebuffers.ITextFileBuffer;
+import org.eclipse.core.filebuffers.ITextFileBufferManager;
+import org.eclipse.core.filebuffers.LocationKind;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IMarkerResolution2;
+
+public class IgnoreStringFromInternationalization implements IMarkerResolution2 {
+
+    @Override
+    public String getLabel() {
+	return "Ignore String";
+    }
+
+    @Override
+    public void run(IMarker marker) {
+	IResource resource = marker.getResource();
+
+	CompilationUnit cu = ASTutilsUI.getCompilationUnit(resource);
+
+	ITextFileBufferManager bufferManager = FileBuffers
+		.getTextFileBufferManager();
+	IPath path = resource.getRawLocation();
+
+	try {
+	    bufferManager.connect(path, LocationKind.NORMALIZE, null);
+	    ITextFileBuffer textFileBuffer = bufferManager.getTextFileBuffer(
+		    path, LocationKind.NORMALIZE);
+	    IDocument document = textFileBuffer.getDocument();
+
+	    int position = marker.getAttribute(IMarker.CHAR_START, 0);
+
+	    ASTutils.createReplaceNonInternationalisationComment(cu, document,
+		    position);
+	    textFileBuffer.commit(null, false);
+
+	} catch (JavaModelException e) {
+	    Logger.logError(e);
+	} catch (CoreException e) {
+	    Logger.logError(e);
+	}
+
+    }
+
+    @Override
+    public String getDescription() {
+	return "Ignore String from Internationalization";
+    }
+
+    @Override
+    public Image getImage() {
+	// TODO Auto-generated method stub
+	return null;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/quickfix/ReplaceResourceBundleDefReference.java b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/quickfix/ReplaceResourceBundleDefReference.java
new file mode 100644
index 0000000..2fa6cfc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/quickfix/ReplaceResourceBundleDefReference.java
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.java.ui.quickfix;
+
+import org.eclipse.babel.tapiji.tools.core.ui.dialogs.ResourceBundleSelectionDialog;
+import org.eclipse.core.filebuffers.FileBuffers;
+import org.eclipse.core.filebuffers.ITextFileBuffer;
+import org.eclipse.core.filebuffers.ITextFileBufferManager;
+import org.eclipse.core.filebuffers.LocationKind;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IMarkerResolution2;
+
+public class ReplaceResourceBundleDefReference implements IMarkerResolution2 {
+
+    private String key;
+    private int start;
+    private int end;
+
+    public ReplaceResourceBundleDefReference(String key, int start, int end) {
+	this.key = key;
+	this.start = start;
+	this.end = end;
+    }
+
+    @Override
+    public String getDescription() {
+	return "Replaces the non-existing Resource-Bundle reference '" + key
+		+ "' with a reference to an already existing Resource-Bundle.";
+    }
+
+    @Override
+    public Image getImage() {
+	// TODO Auto-generated method stub
+	return null;
+    }
+
+    @Override
+    public String getLabel() {
+	return "Select an alternative Resource-Bundle";
+    }
+
+    @Override
+    public void run(IMarker marker) {
+	int startPos = start;
+	int endPos = end - start;
+	IResource resource = marker.getResource();
+
+	ITextFileBufferManager bufferManager = FileBuffers
+		.getTextFileBufferManager();
+	IPath path = resource.getRawLocation();
+	try {
+	    bufferManager.connect(path, LocationKind.NORMALIZE, null);
+	    ITextFileBuffer textFileBuffer = bufferManager.getTextFileBuffer(
+		    path, LocationKind.NORMALIZE);
+	    IDocument document = textFileBuffer.getDocument();
+
+	    ResourceBundleSelectionDialog dialog = new ResourceBundleSelectionDialog(
+		    Display.getDefault().getActiveShell(),
+		    resource.getProject());
+
+	    if (dialog.open() != InputDialog.OK)
+		return;
+
+	    key = dialog.getSelectedBundleId();
+	    int iSep = key.lastIndexOf("/");
+	    key = iSep != -1 ? key.substring(iSep + 1) : key;
+
+	    document.replace(startPos, endPos, "\"" + key + "\"");
+
+	    textFileBuffer.commit(null, false);
+	} catch (Exception e) {
+	    e.printStackTrace();
+	} finally {
+	    try {
+		bufferManager.disconnect(path, LocationKind.NORMALIZE, null);
+	    } catch (CoreException e) {
+		e.printStackTrace();
+	    }
+	}
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/quickfix/ReplaceResourceBundleReference.java b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/quickfix/ReplaceResourceBundleReference.java
new file mode 100644
index 0000000..f0eaedc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/quickfix/ReplaceResourceBundleReference.java
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.java.ui.quickfix;
+
+import java.util.Locale;
+
+import org.eclipse.babel.tapiji.tools.core.ui.dialogs.ResourceBundleEntrySelectionDialog;
+import org.eclipse.core.filebuffers.FileBuffers;
+import org.eclipse.core.filebuffers.ITextFileBuffer;
+import org.eclipse.core.filebuffers.ITextFileBufferManager;
+import org.eclipse.core.filebuffers.LocationKind;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IMarkerResolution2;
+
+public class ReplaceResourceBundleReference implements IMarkerResolution2 {
+
+    private String key;
+    private String bundleId;
+
+    public ReplaceResourceBundleReference(String key, String bundleId) {
+	this.key = key;
+	this.bundleId = bundleId;
+    }
+
+    @Override
+    public String getDescription() {
+	return "Replaces the non-existing Resource-Bundle key '"
+		+ key
+		+ "' with a reference to an already existing localized string literal.";
+    }
+
+    @Override
+    public Image getImage() {
+	return null;
+    }
+
+    @Override
+    public String getLabel() {
+	return "Select alternative Resource-Bundle entry";
+    }
+
+    @Override
+    public void run(IMarker marker) {
+	int startPos = marker.getAttribute(IMarker.CHAR_START, 0);
+	int endPos = marker.getAttribute(IMarker.CHAR_END, 0) - startPos;
+	IResource resource = marker.getResource();
+
+	ITextFileBufferManager bufferManager = FileBuffers
+		.getTextFileBufferManager();
+	IPath path = resource.getRawLocation();
+	try {
+	    bufferManager.connect(path, LocationKind.NORMALIZE, null);
+	    ITextFileBuffer textFileBuffer = bufferManager.getTextFileBuffer(
+		    path, LocationKind.NORMALIZE);
+	    IDocument document = textFileBuffer.getDocument();
+
+	    ResourceBundleEntrySelectionDialog dialog = new ResourceBundleEntrySelectionDialog(
+		    Display.getDefault().getActiveShell());
+
+	    dialog.setProjectName(resource.getProject().getName());
+	    dialog.setBundleName(bundleId);
+
+	    if (dialog.open() != InputDialog.OK)
+		return;
+
+	    String key = dialog.getSelectedResource();
+	    Locale locale = dialog.getSelectedLocale();
+
+	    document.replace(startPos, endPos, "\"" + key + "\"");
+
+	    textFileBuffer.commit(null, false);
+	} catch (Exception e) {
+	    e.printStackTrace();
+	} finally {
+	    try {
+		bufferManager.disconnect(path, LocationKind.NORMALIZE, null);
+	    } catch (CoreException e) {
+		e.printStackTrace();
+	    }
+	}
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/util/ASTutilsUI.java b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/util/ASTutilsUI.java
new file mode 100644
index 0000000..0c1ad87
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java.ui/src/org/eclipse/babel/tapiji/tools/java/ui/util/ASTutilsUI.java
@@ -0,0 +1,152 @@
+/*******************************************************************************

+ * Copyright (c) 2012 Martin Reiterer, Alexej Strelzow.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ * 

+ * Contributors:

+ *     Martin Reiterer - initial API and implementation

+ *     Alexej Strelzow - seperation of ui/non-ui (methods moved from ASTUtils)

+ ******************************************************************************/

+

+package org.eclipse.babel.tapiji.tools.java.ui.util;

+

+import java.util.Locale;

+

+import org.eclipse.babel.tapiji.tools.java.util.ASTutils;

+import org.eclipse.core.resources.IResource;

+import org.eclipse.jdt.core.ICompilationUnit;

+import org.eclipse.jdt.core.IJavaElement;

+import org.eclipse.jdt.core.ITypeRoot;

+import org.eclipse.jdt.core.JavaCore;

+import org.eclipse.jdt.core.dom.CompilationUnit;

+import org.eclipse.jdt.ui.SharedASTProvider;

+import org.eclipse.jface.text.BadLocationException;

+import org.eclipse.jface.text.IDocument;

+

+public class ASTutilsUI {

+

+    public static CompilationUnit getCompilationUnit(IResource resource) {

+	IJavaElement je = JavaCore.create(resource,

+		JavaCore.create(resource.getProject()));

+	// get the type of the currently loaded resource

+	ITypeRoot typeRoot = ((ICompilationUnit) je);

+

+	if (typeRoot == null) {

+	    return null;

+	}

+

+	return getCompilationUnit(typeRoot);

+    }

+

+    public static CompilationUnit getCompilationUnit(ITypeRoot typeRoot) {

+	// get a reference to the shared AST of the loaded CompilationUnit

+	CompilationUnit cu = SharedASTProvider.getAST(typeRoot,

+	// do not wait for AST creation

+		SharedASTProvider.WAIT_YES, null);

+

+	return cu;

+    }

+

+    public static String insertNewBundleRef(IDocument document,

+	    IResource resource, int startPos, int endPos,

+	    String resourceBundleId, String key) {

+	String newName = null;

+	String reference = "";

+

+	CompilationUnit cu = getCompilationUnit(resource);

+

+	if (cu == null) {

+	    return null;

+	}

+

+	String variableName = ASTutils.resolveRBReferenceVar(document,

+		resource, startPos, resourceBundleId, cu);

+	if (variableName == null) {

+	    newName = ASTutils.getNonExistingRBRefName(resourceBundleId,

+		    document, cu);

+	}

+

+	try {

+	    reference = ASTutils.createResourceReference(resourceBundleId, key,

+		    null, resource, startPos, variableName == null ? newName

+			    : variableName, document, cu);

+

+	    if (startPos > 0 && document.get().charAt(startPos - 1) == '\"') {

+		startPos--;

+		endPos++;

+	    }

+

+	    if ((startPos + endPos) < document.getLength()

+		    && document.get().charAt(startPos + endPos) == '\"') {

+		endPos++;

+	    }

+

+	    if ((startPos + endPos) < document.getLength()

+		    && document.get().charAt(startPos + endPos - 1) == ';') {

+		endPos--;

+	    }

+

+	    document.replace(startPos, endPos, reference);

+

+	    // create non-internationalisation-comment

+	    ASTutils.createReplaceNonInternationalisationComment(cu, document,

+		    startPos);

+	} catch (BadLocationException e) {

+	    e.printStackTrace();

+	}

+

+	if (variableName == null) {

+	    // refresh reference to the shared AST of the loaded CompilationUnit

+	    cu = getCompilationUnit(resource);

+

+	    ASTutils.createResourceBundleReference(resource, startPos,

+		    document, resourceBundleId, null, true, newName, cu);

+	    // createReplaceNonInternationalisationComment(cu, document, pos);

+	}

+

+	return reference;

+    }

+

+    public static String insertExistingBundleRef(IDocument document,

+	    IResource resource, int offset, int length,

+	    String resourceBundleId, String key, Locale locale) {

+	String reference = "";

+	String newName = null;

+

+	CompilationUnit cu = getCompilationUnit(resource);

+

+	String variableName = ASTutils.resolveRBReferenceVar(document,

+		resource, offset, resourceBundleId, cu);

+	if (variableName == null) {

+	    newName = ASTutils.getNonExistingRBRefName(resourceBundleId,

+		    document, cu);

+	}

+

+	try {

+	    reference = ASTutils.createResourceReference(resourceBundleId, key,

+		    locale, resource, offset, variableName == null ? newName

+			    : variableName, document, cu);

+

+	    document.replace(offset, length, reference);

+

+	    // create non-internationalisation-comment

+	    ASTutils.createReplaceNonInternationalisationComment(cu, document,

+		    offset);

+	} catch (BadLocationException e) {

+	    e.printStackTrace();

+	}

+

+	// TODO retrieve cu in the same way as in createResourceReference

+	// the current version does not parse method bodies

+

+	if (variableName == null) {

+	    ASTutils.createResourceBundleReference(resource, offset, document,

+		    resourceBundleId, locale, true, newName, cu);

+	    // createReplaceNonInternationalisationComment(cu, document, pos);

+	}

+	return reference;

+    }

+

+}

diff --git a/org.eclipse.babel.tapiji.tools.java/.classpath b/org.eclipse.babel.tapiji.tools.java/.classpath
new file mode 100644
index 0000000..ad32c83
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.babel.tapiji.tools.java/.project b/org.eclipse.babel.tapiji.tools.java/.project
new file mode 100644
index 0000000..72635d9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.babel.tapiji.tools.java</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.babel.tapiji.tools.java/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.babel.tapiji.tools.java/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/org.eclipse.babel.tapiji.tools.java/META-INF/MANIFEST.MF b/org.eclipse.babel.tapiji.tools.java/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..8f20432
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java/META-INF/MANIFEST.MF
@@ -0,0 +1,21 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: TapiJI Tools Java extension
+Bundle-SymbolicName: org.eclipse.babel.tapiji.tools.java
+Bundle-Version: 0.0.2.qualifier
+Bundle-Vendor: Vienna University of Technology
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Export-Package: org.eclipse.babel.tapiji.tools.java.util,
+ org.eclipse.babel.tapiji.tools.java.visitor
+Import-Package: org.eclipse.babel.tapiji.tools.core.model.manager,
+ org.eclipse.core.filebuffers,
+ org.eclipse.core.resources,
+ org.eclipse.jdt.ui,
+ org.eclipse.jface.text,
+ org.eclipse.text.edits,
+ org.eclipse.ui
+Require-Bundle: org.eclipse.core.resources,
+ org.eclipse.jdt.core,
+ org.eclipse.core.runtime,
+ org.eclipse.jface,
+ org.eclipse.babel.tapiji.tools.core.ui;bundle-version="0.0.2"
diff --git a/org.eclipse.babel.tapiji.tools.java/about.html b/org.eclipse.babel.tapiji.tools.java/about.html
new file mode 100644
index 0000000..f47dbdd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>

+<title>About</title>

+</head>

+<body lang="EN-US">

+<h2>About This Content</h2>

+ 

+<p>June 5, 2006</p>	

+<h3>License</h3>

+

+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 

+indicated below, the Content is provided to you under the terms and conditions of the

+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 

+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.

+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>

+

+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 

+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may

+apply to your use of any object code in the Content.  Check the Redistributor's license that was 

+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise

+indicated below, the terms and conditions of the EPL still apply to any source code in the Content

+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>

+

+</body>

+</html>
\ No newline at end of file
diff --git a/org.eclipse.babel.tapiji.tools.java/build.properties b/org.eclipse.babel.tapiji.tools.java/build.properties
new file mode 100644
index 0000000..e9863e2
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/org.eclipse.babel.tapiji.tools.java/epl-v10.html b/org.eclipse.babel.tapiji.tools.java/epl-v10.html
new file mode 100644
index 0000000..84ec251
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java/epl-v10.html
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+  body {
+    size: 8.5in 11.0in;
+    margin: 0.25in 0.5in 0.25in 0.5in;
+    tab-interval: 0.5in;
+    }
+  p {  	
+    margin-left: auto;
+    margin-top:  0.5em;
+    margin-bottom: 0.5em;
+    }
+  p.list {
+  	margin-left: 0.5in;
+    margin-top:  0.05em;
+    margin-bottom: 0.05em;
+    }
+  </style>
+
+</head>
+
+<body lang="EN-US">
+
+<p align=center><b>Eclipse Public License - v 1.0</b></p>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>&quot;Contribution&quot; means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">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.</p>
+
+<p>&quot;Contributor&quot; means any person or entity that distributes
+the Program.</p>
+
+<p>&quot;Licensed Patents&quot; 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.</p>
+
+<p>&quot;Program&quot; means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>&quot;Recipient&quot; means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">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.</p>
+
+<p class="list">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.</p>
+
+<p class="list">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.</p>
+
+<p class="list">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.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">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;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">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.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>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.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>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
+(&quot;Commercial Contributor&quot;) hereby agrees to defend and
+indemnify every other Contributor (&quot;Indemnified Contributor&quot;)
+against any losses, damages and costs (collectively &quot;Losses&quot;)
+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.</p>
+
+<p>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.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN &quot;AS IS&quot; 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.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>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.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+</body>
+
+</html>
diff --git a/org.eclipse.babel.tapiji.tools.java/src/org/eclipse/babel/tapiji/tools/java/util/ASTutils.java b/org.eclipse.babel.tapiji.tools.java/src/org/eclipse/babel/tapiji/tools/java/util/ASTutils.java
new file mode 100644
index 0000000..e89b5ca
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java/src/org/eclipse/babel/tapiji/tools/java/util/ASTutils.java
@@ -0,0 +1,944 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer, Alexej Strelzow.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ *     Alexej Strelzow - seperation of ui/non-ui
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.java.util;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import org.eclipse.babel.tapiji.tools.core.Logger;
+import org.eclipse.babel.tapiji.tools.core.model.SLLocation;
+import org.eclipse.babel.tapiji.tools.java.visitor.MethodParameterDescriptor;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.dom.AST;
+import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.ASTParser;
+import org.eclipse.jdt.core.dom.ASTVisitor;
+import org.eclipse.jdt.core.dom.AnonymousClassDeclaration;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.ExpressionStatement;
+import org.eclipse.jdt.core.dom.FieldDeclaration;
+import org.eclipse.jdt.core.dom.ITypeBinding;
+import org.eclipse.jdt.core.dom.IVariableBinding;
+import org.eclipse.jdt.core.dom.ImportDeclaration;
+import org.eclipse.jdt.core.dom.MethodDeclaration;
+import org.eclipse.jdt.core.dom.MethodInvocation;
+import org.eclipse.jdt.core.dom.Modifier;
+import org.eclipse.jdt.core.dom.SimpleName;
+import org.eclipse.jdt.core.dom.SimpleType;
+import org.eclipse.jdt.core.dom.StringLiteral;
+import org.eclipse.jdt.core.dom.StructuralPropertyDescriptor;
+import org.eclipse.jdt.core.dom.TypeDeclaration;
+import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
+import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
+import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.Document;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.text.edits.TextEdit;
+
+public class ASTutils {
+
+    private static MethodParameterDescriptor rbDefinition;
+    private static MethodParameterDescriptor rbAccessor;
+
+    public static MethodParameterDescriptor getRBDefinitionDesc() {
+	if (rbDefinition == null) {
+	    // Init descriptor for Resource-Bundle-Definition
+	    List<String> definition = new ArrayList<String>();
+	    definition.add("getBundle");
+	    rbDefinition = new MethodParameterDescriptor(definition,
+		    "java.util.ResourceBundle", true, 0);
+	}
+
+	return rbDefinition;
+    }
+
+    public static MethodParameterDescriptor getRBAccessorDesc() {
+	if (rbAccessor == null) {
+	    // Init descriptor for Resource-Bundle-Accessors
+	    List<String> accessors = new ArrayList<String>();
+	    accessors.add("getString");
+	    accessors.add("getStringArray");
+	    rbAccessor = new MethodParameterDescriptor(accessors,
+		    "java.util.ResourceBundle", true, 0);
+	}
+
+	return rbAccessor;
+    }
+
+    public static String resolveRBReferenceVar(IDocument document,
+	    IResource resource, int pos, final String bundleId,
+	    CompilationUnit cu) {
+	String bundleVar;
+
+	PositionalTypeFinder typeFinder = new PositionalTypeFinder(pos);
+	cu.accept(typeFinder);
+	AnonymousClassDeclaration atd = typeFinder.getEnclosingAnonymType();
+	TypeDeclaration td = typeFinder.getEnclosingType();
+	MethodDeclaration meth = typeFinder.getEnclosingMethod();
+
+	if (atd == null) {
+	    BundleDeclarationFinder bdf = new BundleDeclarationFinder(
+		    bundleId,
+		    td,
+		    meth != null
+			    && (meth.getModifiers() & Modifier.STATIC) == Modifier.STATIC);
+	    td.accept(bdf);
+
+	    bundleVar = bdf.getVariableName();
+	} else {
+	    BundleDeclarationFinder bdf = new BundleDeclarationFinder(
+		    bundleId,
+		    atd,
+		    meth != null
+			    && (meth.getModifiers() & Modifier.STATIC) == Modifier.STATIC);
+	    atd.accept(bdf);
+
+	    bundleVar = bdf.getVariableName();
+	}
+
+	// Check also method body
+	if (meth != null) {
+	    try {
+		InMethodBundleDeclFinder imbdf = new InMethodBundleDeclFinder(
+			bundleId, pos);
+		typeFinder.getEnclosingMethod().accept(imbdf);
+		bundleVar = imbdf.getVariableName() != null ? imbdf
+			.getVariableName() : bundleVar;
+	    } catch (Exception e) {
+		// ignore
+	    }
+	}
+
+	return bundleVar;
+    }
+
+    public static String getNonExistingRBRefName(String bundleId,
+	    IDocument document, CompilationUnit cu) {
+	String referenceName = null;
+	int i = 0;
+
+	while (referenceName == null) {
+	    String actRef = bundleId.substring(bundleId.lastIndexOf(".") + 1)
+		    + "Ref" + (i == 0 ? "" : i);
+	    actRef = actRef.toLowerCase();
+
+	    VariableFinder vf = new VariableFinder(actRef);
+	    cu.accept(vf);
+
+	    if (!vf.isVariableFound()) {
+		referenceName = actRef;
+		break;
+	    }
+
+	    i++;
+	}
+
+	return referenceName;
+    }
+
+    @Deprecated
+    public static String resolveResourceBundle(
+	    MethodInvocation methodInvocation,
+	    MethodParameterDescriptor rbDefinition,
+	    Map<IVariableBinding, VariableDeclarationFragment> variableBindingManagers) {
+	String bundleName = null;
+
+	if (methodInvocation.getExpression() instanceof SimpleName) {
+	    SimpleName vName = (SimpleName) methodInvocation.getExpression();
+	    IVariableBinding vBinding = (IVariableBinding) vName
+		    .resolveBinding();
+	    VariableDeclarationFragment dec = variableBindingManagers
+		    .get(vBinding);
+
+	    if (dec.getInitializer() instanceof MethodInvocation) {
+		MethodInvocation init = (MethodInvocation) dec.getInitializer();
+
+		// Check declaring class
+		boolean isValidClass = false;
+		ITypeBinding type = init.resolveMethodBinding()
+			.getDeclaringClass();
+		while (type != null) {
+		    if (type.getQualifiedName().equals(
+			    rbDefinition.getDeclaringClass())) {
+			isValidClass = true;
+			break;
+		    } else {
+			if (rbDefinition.isConsiderSuperclass()) {
+			    type = type.getSuperclass();
+			} else {
+			    type = null;
+			}
+		    }
+
+		}
+		if (!isValidClass) {
+		    return null;
+		}
+
+		boolean isValidMethod = false;
+		for (String mn : rbDefinition.getMethodName()) {
+		    if (init.getName().getFullyQualifiedName().equals(mn)) {
+			isValidMethod = true;
+			break;
+		    }
+		}
+		if (!isValidMethod) {
+		    return null;
+		}
+
+		// retrieve bundlename
+		if (init.arguments().size() < rbDefinition.getPosition() + 1) {
+		    return null;
+		}
+
+		bundleName = ((StringLiteral) init.arguments().get(
+			rbDefinition.getPosition())).getLiteralValue();
+	    }
+	}
+
+	return bundleName;
+    }
+
+    public static SLLocation resolveResourceBundleLocation(
+	    MethodInvocation methodInvocation,
+	    MethodParameterDescriptor rbDefinition,
+	    Map<IVariableBinding, VariableDeclarationFragment> variableBindingManagers) {
+	SLLocation bundleDesc = null;
+
+	if (methodInvocation.getExpression() instanceof SimpleName) {
+	    SimpleName vName = (SimpleName) methodInvocation.getExpression();
+	    IVariableBinding vBinding = (IVariableBinding) vName
+		    .resolveBinding();
+	    VariableDeclarationFragment dec = variableBindingManagers
+		    .get(vBinding);
+
+	    if (dec.getInitializer() instanceof MethodInvocation) {
+		MethodInvocation init = (MethodInvocation) dec.getInitializer();
+
+		// Check declaring class
+		boolean isValidClass = false;
+		ITypeBinding type = init.resolveMethodBinding()
+			.getDeclaringClass();
+		while (type != null) {
+		    if (type.getQualifiedName().equals(
+			    rbDefinition.getDeclaringClass())) {
+			isValidClass = true;
+			break;
+		    } else {
+			if (rbDefinition.isConsiderSuperclass()) {
+			    type = type.getSuperclass();
+			} else {
+			    type = null;
+			}
+		    }
+
+		}
+		if (!isValidClass) {
+		    return null;
+		}
+
+		boolean isValidMethod = false;
+		for (String mn : rbDefinition.getMethodName()) {
+		    if (init.getName().getFullyQualifiedName().equals(mn)) {
+			isValidMethod = true;
+			break;
+		    }
+		}
+		if (!isValidMethod) {
+		    return null;
+		}
+
+		// retrieve bundlename
+		if (init.arguments().size() < rbDefinition.getPosition() + 1) {
+		    return null;
+		}
+
+		StringLiteral bundleLiteral = ((StringLiteral) init.arguments()
+			.get(rbDefinition.getPosition()));
+		bundleDesc = new SLLocation(null,
+			bundleLiteral.getStartPosition(),
+			bundleLiteral.getLength()
+				+ bundleLiteral.getStartPosition(),
+			bundleLiteral.getLiteralValue());
+	    }
+	}
+
+	return bundleDesc;
+    }
+
+    private static boolean isMatchingMethodDescriptor(
+	    MethodInvocation methodInvocation, MethodParameterDescriptor desc) {
+	boolean result = false;
+
+	if (methodInvocation.resolveMethodBinding() == null) {
+	    return false;
+	}
+
+	String methodName = methodInvocation.resolveMethodBinding().getName();
+
+	// Check declaring class
+	ITypeBinding type = methodInvocation.resolveMethodBinding()
+		.getDeclaringClass();
+	while (type != null) {
+	    if (type.getQualifiedName().equals(desc.getDeclaringClass())) {
+		result = true;
+		break;
+	    } else {
+		if (desc.isConsiderSuperclass()) {
+		    type = type.getSuperclass();
+		} else {
+		    type = null;
+		}
+	    }
+
+	}
+
+	if (!result) {
+	    return false;
+	}
+
+	result = !result;
+
+	// Check method name
+	for (String method : desc.getMethodName()) {
+	    if (method.equals(methodName)) {
+		result = true;
+		break;
+	    }
+	}
+
+	return result;
+    }
+
+    public static boolean isMatchingMethodParamDesc(
+	    MethodInvocation methodInvocation, String literal,
+	    MethodParameterDescriptor desc) {
+	boolean result = isMatchingMethodDescriptor(methodInvocation, desc);
+
+	if (!result) {
+	    return false;
+	} else {
+	    result = false;
+	}
+
+	if (methodInvocation.arguments().size() > desc.getPosition()) {
+	    if (methodInvocation.arguments().get(desc.getPosition()) instanceof StringLiteral) {
+		StringLiteral sl = (StringLiteral) methodInvocation.arguments()
+			.get(desc.getPosition());
+		if (sl.getLiteralValue().trim().toLowerCase()
+			.equals(literal.toLowerCase())) {
+		    result = true;
+		}
+	    }
+	}
+
+	return result;
+    }
+
+    public static boolean isMatchingMethodParamDesc(
+	    MethodInvocation methodInvocation, StringLiteral literal,
+	    MethodParameterDescriptor desc) {
+	int keyParameter = desc.getPosition();
+	boolean result = isMatchingMethodDescriptor(methodInvocation, desc);
+
+	if (!result) {
+	    return false;
+	}
+
+	// Check position within method call
+	StructuralPropertyDescriptor spd = literal.getLocationInParent();
+	if (spd.isChildListProperty()) {
+	    @SuppressWarnings("unchecked")
+	    List<ASTNode> arguments = (List<ASTNode>) methodInvocation
+		    .getStructuralProperty(spd);
+	    result = (arguments.size() > keyParameter && arguments
+		    .get(keyParameter) == literal);
+	}
+
+	return result;
+    }
+
+    public static ICompilationUnit createCompilationUnit(IResource resource) {
+	// Instantiate a new AST parser
+	ASTParser parser = ASTParser.newParser(AST.JLS3);
+	parser.setResolveBindings(true);
+
+	ICompilationUnit cu = JavaCore.createCompilationUnitFrom(resource
+		.getProject().getFile(resource.getRawLocation()));
+
+	return cu;
+    }
+
+    public static CompilationUnit createCompilationUnit(IDocument document) {
+	// Instantiate a new AST parser
+	ASTParser parser = ASTParser.newParser(AST.JLS3);
+	parser.setResolveBindings(true);
+
+	parser.setSource(document.get().toCharArray());
+	return (CompilationUnit) parser.createAST(null);
+    }
+
+    public static void createImport(IDocument doc, IResource resource,
+	    CompilationUnit cu, AST ast, ASTRewrite rewriter,
+	    String qualifiedClassName) throws CoreException,
+	    BadLocationException {
+
+	ImportFinder impFinder = new ImportFinder(qualifiedClassName);
+
+	cu.accept(impFinder);
+
+	if (!impFinder.isImportFound()) {
+	    // ITextFileBufferManager bufferManager =
+	    // FileBuffers.getTextFileBufferManager();
+	    // IPath path = resource.getFullPath();
+	    //
+	    // bufferManager.connect(path, LocationKind.IFILE, null);
+	    // ITextFileBuffer textFileBuffer =
+	    // bufferManager.getTextFileBuffer(doc);
+
+	    // TODO create new import
+	    ImportDeclaration id = ast.newImportDeclaration();
+	    id.setName(ast.newName(qualifiedClassName.split("\\.")));
+	    id.setStatic(false);
+
+	    ListRewrite lrw = rewriter.getListRewrite(cu,
+		    CompilationUnit.IMPORTS_PROPERTY);
+	    lrw.insertFirst(id, null);
+
+	    // TextEdit te = rewriter.rewriteAST(doc, null);
+	    // te.apply(doc);
+	    //
+	    // if (textFileBuffer != null)
+	    // textFileBuffer.commit(null, false);
+	    // else
+	    // FileUtils.saveTextFile(resource.getProject().getFile(resource.getProjectRelativePath()),
+	    // doc.get());
+	    // bufferManager.disconnect(path, LocationKind.IFILE, null);
+	}
+
+    }
+
+    public static void createReplaceNonInternationalisationComment(
+	    CompilationUnit cu, IDocument doc, int position) {
+	int i = findNonInternationalisationPosition(cu, doc, position);
+
+	IRegion reg;
+	try {
+	    reg = doc.getLineInformationOfOffset(position);
+	    doc.replace(reg.getOffset() + reg.getLength(), 0, " //$NON-NLS-"
+		    + i + "$");
+	} catch (BadLocationException e) {
+	    Logger.logError(e);
+	}
+    }
+
+    // TODO export initializer specification into a methodinvocationdefinition
+    @SuppressWarnings("unchecked")
+    public static void createResourceBundleReference(IResource resource,
+	    int typePos, IDocument doc, String bundleId, Locale locale,
+	    boolean globalReference, String variableName, CompilationUnit cu) {
+
+	try {
+
+	    if (globalReference) {
+
+		// retrieve compilation unit from document
+		PositionalTypeFinder typeFinder = new PositionalTypeFinder(
+			typePos);
+		cu.accept(typeFinder);
+		ASTNode node = typeFinder.getEnclosingType();
+		ASTNode anonymNode = typeFinder.getEnclosingAnonymType();
+		if (anonymNode != null) {
+		    node = anonymNode;
+		}
+
+		MethodDeclaration meth = typeFinder.getEnclosingMethod();
+		AST ast = node.getAST();
+
+		VariableDeclarationFragment vdf = ast
+			.newVariableDeclarationFragment();
+		vdf.setName(ast.newSimpleName(variableName));
+
+		// set initializer
+		vdf.setInitializer(createResourceBundleGetter(ast, bundleId,
+			locale));
+
+		FieldDeclaration fd = ast.newFieldDeclaration(vdf);
+		fd.setType(ast.newSimpleType(ast
+			.newName(new String[] { "ResourceBundle" })));
+
+		if (meth != null
+			&& (meth.getModifiers() & Modifier.STATIC) == Modifier.STATIC) {
+		    fd.modifiers().addAll(ast.newModifiers(Modifier.STATIC));
+		}
+
+		// rewrite AST
+		ASTRewrite rewriter = ASTRewrite.create(ast);
+		ListRewrite lrw = rewriter
+			.getListRewrite(
+				node,
+				node instanceof TypeDeclaration ? TypeDeclaration.BODY_DECLARATIONS_PROPERTY
+					: AnonymousClassDeclaration.BODY_DECLARATIONS_PROPERTY);
+		lrw.insertAt(fd, /*
+				  * findIndexOfLastField(node.bodyDeclarations())
+				  * +1
+				  */
+			0, null);
+
+		// create import if required
+		createImport(doc, resource, cu, ast, rewriter,
+			getRBDefinitionDesc().getDeclaringClass());
+
+		TextEdit te = rewriter.rewriteAST(doc, null);
+		te.apply(doc);
+	    } else {
+
+	    }
+	} catch (Exception e) {
+	    e.printStackTrace();
+	}
+    }
+
+    @SuppressWarnings("unchecked")
+    protected static MethodInvocation createResourceBundleGetter(AST ast,
+	    String bundleId, Locale locale) {
+	MethodInvocation mi = ast.newMethodInvocation();
+
+	mi.setName(ast.newSimpleName("getBundle"));
+	mi.setExpression(ast.newName(new String[] { "ResourceBundle" }));
+
+	// Add bundle argument
+	StringLiteral sl = ast.newStringLiteral();
+	sl.setLiteralValue(bundleId);
+	mi.arguments().add(sl);
+
+	// TODO Add Locale argument
+
+	return mi;
+    }
+
+    public static ASTNode getEnclosingType(CompilationUnit cu, int pos) {
+	PositionalTypeFinder typeFinder = new PositionalTypeFinder(pos);
+	cu.accept(typeFinder);
+	return (typeFinder.getEnclosingAnonymType() != null) ? typeFinder
+		.getEnclosingAnonymType() : typeFinder.getEnclosingType();
+    }
+
+    public static ASTNode getEnclosingType(ASTNode cu, int pos) {
+	PositionalTypeFinder typeFinder = new PositionalTypeFinder(pos);
+	cu.accept(typeFinder);
+	return (typeFinder.getEnclosingAnonymType() != null) ? typeFinder
+		.getEnclosingAnonymType() : typeFinder.getEnclosingType();
+    }
+
+    @SuppressWarnings("unchecked")
+    protected static MethodInvocation referenceResource(AST ast,
+	    String accessorName, String key, Locale locale) {
+	MethodParameterDescriptor accessorDesc = getRBAccessorDesc();
+	MethodInvocation mi = ast.newMethodInvocation();
+
+	mi.setName(ast.newSimpleName(accessorDesc.getMethodName().get(0)));
+
+	// Declare expression
+	StringLiteral sl = ast.newStringLiteral();
+	sl.setLiteralValue(key);
+
+	// TODO define locale expression
+	if (mi.arguments().size() == accessorDesc.getPosition()) {
+	    mi.arguments().add(sl);
+	}
+
+	SimpleName name = ast.newSimpleName(accessorName);
+	mi.setExpression(name);
+
+	return mi;
+    }
+
+    public static String createResourceReference(String bundleId, String key,
+	    Locale locale, IResource resource, int typePos,
+	    String accessorName, IDocument doc, CompilationUnit cu) {
+
+	PositionalTypeFinder typeFinder = new PositionalTypeFinder(typePos);
+	cu.accept(typeFinder);
+	AnonymousClassDeclaration atd = typeFinder.getEnclosingAnonymType();
+	TypeDeclaration td = typeFinder.getEnclosingType();
+
+	// retrieve compilation unit from document
+	ASTNode node = atd == null ? td : atd;
+	AST ast = node.getAST();
+
+	ExpressionStatement expressionStatement = ast
+		.newExpressionStatement(referenceResource(ast, accessorName,
+			key, locale));
+
+	String exp = expressionStatement.toString();
+
+	// remove semicolon and line break at the end of this expression
+	// statement
+	if (exp.endsWith(";\n")) {
+	    exp = exp.substring(0, exp.length() - 2);
+	}
+
+	return exp;
+    }
+
+    private static int findNonInternationalisationPosition(CompilationUnit cu,
+	    IDocument doc, int offset) {
+	LinePreStringsFinder lsfinder = null;
+	try {
+	    lsfinder = new LinePreStringsFinder(offset, doc);
+	    cu.accept(lsfinder);
+	} catch (BadLocationException e) {
+	    Logger.logError(e);
+	}
+	if (lsfinder == null) {
+	    return 1;
+	}
+
+	List<StringLiteral> strings = lsfinder.getStrings();
+
+	return strings.size() + 1;
+    }
+
+    public static boolean existsNonInternationalisationComment(
+	    StringLiteral literal) throws BadLocationException {
+	CompilationUnit cu = (CompilationUnit) literal.getRoot();
+	ICompilationUnit icu = (ICompilationUnit) cu.getJavaElement();
+
+	IDocument doc = null;
+	try {
+	    doc = new Document(icu.getSource());
+	} catch (JavaModelException e) {
+	    Logger.logError(e);
+	}
+
+	// get whole line in which string literal
+	int lineNo = doc.getLineOfOffset(literal.getStartPosition());
+	int lineOffset = doc.getLineOffset(lineNo);
+	int lineLength = doc.getLineLength(lineNo);
+	String lineOfString = doc.get(lineOffset, lineLength);
+
+	// search for a line comment in this line
+	int indexComment = lineOfString.indexOf("//");
+
+	if (indexComment == -1) {
+	    return false;
+	}
+
+	String comment = lineOfString.substring(indexComment);
+
+	// remove first "//" of line comment
+	comment = comment.substring(2).toLowerCase();
+
+	// split line comments, necessary if more NON-NLS comments exist in one line, eg.: $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3
+	String[] comments = comment.split("//");
+
+	for (String commentFrag : comments) {
+	    commentFrag = commentFrag.trim();
+
+	    // if comment match format: "$non-nls$" then ignore whole line
+	    if (commentFrag.matches("^\\$non-nls\\$$")) {
+		return true;
+
+		// if comment match format: "$non-nls-{number}$" then only
+		// ignore string which is on given position
+	    } else if (commentFrag.matches("^\\$non-nls-\\d+\\$$")) {
+		int iString = findNonInternationalisationPosition(cu, doc,
+			literal.getStartPosition());
+		int iComment = new Integer(commentFrag.substring(9, 10));
+		if (iString == iComment) {
+		    return true;
+		}
+	    }
+	}
+	return false;
+    }
+
+    public static StringLiteral getStringLiteralAtPos(CompilationUnit cu,
+	    int position) {
+	StringLiteralFinder strFinder = new StringLiteralFinder(position);
+	cu.accept(strFinder);
+	return strFinder.getStringLiteral();
+    }
+
+    static class PositionalTypeFinder extends ASTVisitor {
+
+	private int position;
+	private TypeDeclaration enclosingType;
+	private AnonymousClassDeclaration enclosingAnonymType;
+	private MethodDeclaration enclosingMethod;
+
+	public PositionalTypeFinder(int pos) {
+	    position = pos;
+	}
+
+	public TypeDeclaration getEnclosingType() {
+	    return enclosingType;
+	}
+
+	public AnonymousClassDeclaration getEnclosingAnonymType() {
+	    return enclosingAnonymType;
+	}
+
+	public MethodDeclaration getEnclosingMethod() {
+	    return enclosingMethod;
+	}
+
+	@Override
+	public boolean visit(MethodDeclaration node) {
+	    if (position >= node.getStartPosition()
+		    && position <= (node.getStartPosition() + node.getLength())) {
+		enclosingMethod = node;
+		return true;
+	    } else {
+		return false;
+	    }
+	}
+
+	@Override
+	public boolean visit(TypeDeclaration node) {
+	    if (position >= node.getStartPosition()
+		    && position <= (node.getStartPosition() + node.getLength())) {
+		enclosingType = node;
+		return true;
+	    } else {
+		return false;
+	    }
+	}
+
+	@Override
+	public boolean visit(AnonymousClassDeclaration node) {
+	    if (position >= node.getStartPosition()
+		    && position <= (node.getStartPosition() + node.getLength())) {
+		enclosingAnonymType = node;
+		return true;
+	    } else {
+		return false;
+	    }
+	}
+    }
+
+    static class ImportFinder extends ASTVisitor {
+
+	String qName;
+	boolean importFound = false;
+
+	public ImportFinder(String qName) {
+	    this.qName = qName;
+	}
+
+	public boolean isImportFound() {
+	    return importFound;
+	}
+
+	@Override
+	public boolean visit(ImportDeclaration id) {
+	    if (id.getName().getFullyQualifiedName().equals(qName)) {
+		importFound = true;
+	    }
+
+	    return true;
+	}
+    }
+
+    static class VariableFinder extends ASTVisitor {
+
+	boolean found = false;
+	String variableName;
+
+	public boolean isVariableFound() {
+	    return found;
+	}
+
+	public VariableFinder(String variableName) {
+	    this.variableName = variableName;
+	}
+
+	@Override
+	public boolean visit(VariableDeclarationFragment vdf) {
+	    if (vdf.getName().getFullyQualifiedName().equals(variableName)) {
+		found = true;
+		return false;
+	    }
+
+	    return true;
+	}
+    }
+
+    static class InMethodBundleDeclFinder extends ASTVisitor {
+	String varName;
+	String bundleId;
+	int pos;
+
+	public InMethodBundleDeclFinder(String bundleId, int pos) {
+	    this.bundleId = bundleId;
+	    this.pos = pos;
+	}
+
+	public String getVariableName() {
+	    return varName;
+	}
+
+	@Override
+	public boolean visit(VariableDeclarationFragment fdvd) {
+	    if (fdvd.getStartPosition() > pos) {
+		return false;
+	    }
+
+	    // boolean bStatic = (fdvd.resolveBinding().getModifiers() &
+	    // Modifier.STATIC) == Modifier.STATIC;
+	    // if (!bStatic && isStatic)
+	    // return true;
+
+	    String tmpVarName = fdvd.getName().getFullyQualifiedName();
+
+	    if (fdvd.getInitializer() instanceof MethodInvocation) {
+		MethodInvocation fdi = (MethodInvocation) fdvd.getInitializer();
+		if (isMatchingMethodParamDesc(fdi, bundleId,
+			getRBDefinitionDesc())) {
+		    varName = tmpVarName;
+		}
+	    }
+	    return true;
+	}
+    }
+
+    static class BundleDeclarationFinder extends ASTVisitor {
+
+	String varName;
+	String bundleId;
+	ASTNode typeDef;
+	boolean isStatic;
+
+	public BundleDeclarationFinder(String bundleId, ASTNode td,
+		boolean isStatic) {
+	    this.bundleId = bundleId;
+	    this.typeDef = td;
+	    this.isStatic = isStatic;
+	}
+
+	public String getVariableName() {
+	    return varName;
+	}
+
+	@Override
+	public boolean visit(MethodDeclaration md) {
+	    return true;
+	}
+
+	@Override
+	public boolean visit(FieldDeclaration fd) {
+	    if (getEnclosingType(typeDef, fd.getStartPosition()) != typeDef) {
+		return false;
+	    }
+
+	    boolean bStatic = (fd.getModifiers() & Modifier.STATIC) == Modifier.STATIC;
+	    if (!bStatic && isStatic) {
+		return true;
+	    }
+
+	    if (fd.getType() instanceof SimpleType) {
+		SimpleType fdType = (SimpleType) fd.getType();
+		String typeName = fdType.getName().getFullyQualifiedName();
+		String referenceName = getRBDefinitionDesc()
+			.getDeclaringClass();
+		if (typeName.equals(referenceName)
+			|| (referenceName.lastIndexOf(".") >= 0 && typeName
+				.equals(referenceName.substring(referenceName
+					.lastIndexOf(".") + 1)))) {
+		    // Check VariableDeclarationFragment
+		    if (fd.fragments().size() == 1) {
+			if (fd.fragments().get(0) instanceof VariableDeclarationFragment) {
+			    VariableDeclarationFragment fdvd = (VariableDeclarationFragment) fd
+				    .fragments().get(0);
+			    String tmpVarName = fdvd.getName()
+				    .getFullyQualifiedName();
+
+			    if (fdvd.getInitializer() instanceof MethodInvocation) {
+				MethodInvocation fdi = (MethodInvocation) fdvd
+					.getInitializer();
+				if (isMatchingMethodParamDesc(fdi, bundleId,
+					getRBDefinitionDesc())) {
+				    varName = tmpVarName;
+				}
+			    }
+			}
+		    }
+		}
+	    }
+	    return false;
+	}
+
+    }
+
+    static class LinePreStringsFinder extends ASTVisitor {
+	private int position;
+	private int line;
+	private List<StringLiteral> strings;
+	private IDocument document;
+
+	public LinePreStringsFinder(int position, IDocument document)
+		throws BadLocationException {
+	    this.document = document;
+	    this.position = position;
+	    line = document.getLineOfOffset(position);
+	    strings = new ArrayList<StringLiteral>();
+	}
+
+	public List<StringLiteral> getStrings() {
+	    return strings;
+	}
+
+	@Override
+	public boolean visit(StringLiteral node) {
+	    try {
+		if (line == document.getLineOfOffset(node.getStartPosition())
+			&& node.getStartPosition() < position) {
+		    strings.add(node);
+		    return true;
+		}
+	    } catch (BadLocationException e) {
+	    }
+	    return true;
+	}
+    }
+
+    static class StringLiteralFinder extends ASTVisitor {
+	private int position;
+	private StringLiteral string;
+
+	public StringLiteralFinder(int position) {
+	    this.position = position;
+	}
+
+	public StringLiteral getStringLiteral() {
+	    return string;
+	}
+
+	@Override
+	public boolean visit(StringLiteral node) {
+	    if (position > node.getStartPosition()
+		    && position < (node.getStartPosition() + node.getLength())) {
+		string = node;
+	    }
+	    return true;
+	}
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.java/src/org/eclipse/babel/tapiji/tools/java/visitor/MethodParameterDescriptor.java b/org.eclipse.babel.tapiji.tools.java/src/org/eclipse/babel/tapiji/tools/java/visitor/MethodParameterDescriptor.java
new file mode 100644
index 0000000..5cb23c1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java/src/org/eclipse/babel/tapiji/tools/java/visitor/MethodParameterDescriptor.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.java.visitor;
+
+import java.util.List;
+
+public class MethodParameterDescriptor {
+
+    private List<String> methodName;
+    private String declaringClass;
+    private boolean considerSuperclass;
+    private int position;
+
+    public MethodParameterDescriptor(List<String> methodName,
+	    String declaringClass, boolean considerSuperclass, int position) {
+	super();
+	this.setMethodName(methodName);
+	this.declaringClass = declaringClass;
+	this.considerSuperclass = considerSuperclass;
+	this.position = position;
+    }
+
+    public String getDeclaringClass() {
+	return declaringClass;
+    }
+
+    public void setDeclaringClass(String declaringClass) {
+	this.declaringClass = declaringClass;
+    }
+
+    public boolean isConsiderSuperclass() {
+	return considerSuperclass;
+    }
+
+    public void setConsiderSuperclass(boolean considerSuperclass) {
+	this.considerSuperclass = considerSuperclass;
+    }
+
+    public int getPosition() {
+	return position;
+    }
+
+    public void setPosition(int position) {
+	this.position = position;
+    }
+
+    public void setMethodName(List<String> methodName) {
+	this.methodName = methodName;
+    }
+
+    public List<String> getMethodName() {
+	return methodName;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.java/src/org/eclipse/babel/tapiji/tools/java/visitor/ResourceAuditVisitor.java b/org.eclipse.babel.tapiji.tools.java/src/org/eclipse/babel/tapiji/tools/java/visitor/ResourceAuditVisitor.java
new file mode 100644
index 0000000..36ac051
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.java/src/org/eclipse/babel/tapiji/tools/java/visitor/ResourceAuditVisitor.java
@@ -0,0 +1,261 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Martin Reiterer.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Martin Reiterer - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.java.visitor;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+import org.eclipse.babel.tapiji.tools.core.model.SLLocation;
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.java.util.ASTutils;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceVisitor;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.ASTVisitor;
+import org.eclipse.jdt.core.dom.FieldDeclaration;
+import org.eclipse.jdt.core.dom.IVariableBinding;
+import org.eclipse.jdt.core.dom.MethodInvocation;
+import org.eclipse.jdt.core.dom.StringLiteral;
+import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
+import org.eclipse.jdt.core.dom.VariableDeclarationStatement;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.Region;
+
+/**
+ * @author Martin
+ * 
+ */
+public class ResourceAuditVisitor extends ASTVisitor implements
+	IResourceVisitor {
+
+    private List<SLLocation> constants;
+    private List<SLLocation> brokenStrings;
+    private List<SLLocation> brokenRBReferences;
+    private SortedMap<Long, IRegion> rbDefReferences = new TreeMap<Long, IRegion>();
+    private SortedMap<Long, IRegion> keyPositions = new TreeMap<Long, IRegion>();
+    private Map<IRegion, String> bundleKeys = new HashMap<IRegion, String>();
+    private Map<IRegion, String> bundleReferences = new HashMap<IRegion, String>();
+    private IFile file;
+    private Map<IVariableBinding, VariableDeclarationFragment> variableBindingManagers = new HashMap<IVariableBinding, VariableDeclarationFragment>();
+    private String projectName;
+
+    public ResourceAuditVisitor(IFile file, String projectName) {
+	constants = new ArrayList<SLLocation>();
+	brokenStrings = new ArrayList<SLLocation>();
+	brokenRBReferences = new ArrayList<SLLocation>();
+	this.file = file;
+	this.projectName = projectName;
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public boolean visit(VariableDeclarationStatement varDeclaration) {
+	for (Iterator<VariableDeclarationFragment> itFrag = varDeclaration
+		.fragments().iterator(); itFrag.hasNext();) {
+	    VariableDeclarationFragment fragment = itFrag.next();
+	    parseVariableDeclarationFragment(fragment);
+	}
+	return true;
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public boolean visit(FieldDeclaration fieldDeclaration) {
+	for (Iterator<VariableDeclarationFragment> itFrag = fieldDeclaration
+		.fragments().iterator(); itFrag.hasNext();) {
+	    VariableDeclarationFragment fragment = itFrag.next();
+	    parseVariableDeclarationFragment(fragment);
+	}
+	return true;
+    }
+
+    protected void parseVariableDeclarationFragment(
+	    VariableDeclarationFragment fragment) {
+	IVariableBinding vBinding = fragment.resolveBinding();
+	this.variableBindingManagers.put(vBinding, fragment);
+    }
+
+    @Override
+    public boolean visit(StringLiteral stringLiteral) {
+	try {
+	    ASTNode parent = stringLiteral.getParent();
+	    ResourceBundleManager manager = ResourceBundleManager
+		    .getManager(projectName);
+
+	    if (manager == null) {
+		return false;
+	    }
+
+	    if (parent instanceof MethodInvocation) {
+		MethodInvocation methodInvocation = (MethodInvocation) parent;
+
+		IRegion region = new Region(stringLiteral.getStartPosition(),
+			stringLiteral.getLength());
+
+		// Check if this method invokes the getString-Method on a
+		// ResourceBundle Implementation
+		if (ASTutils.isMatchingMethodParamDesc(methodInvocation,
+			stringLiteral, ASTutils.getRBAccessorDesc())) {
+		    // Check if the given Resource-Bundle reference is broken
+		    SLLocation rbName = ASTutils.resolveResourceBundleLocation(
+			    methodInvocation, ASTutils.getRBDefinitionDesc(),
+			    variableBindingManagers);
+		    if (rbName == null
+			    || manager.isKeyBroken(rbName.getLiteral(),
+				    stringLiteral.getLiteralValue())) {
+			// report new problem
+			SLLocation desc = new SLLocation(file,
+				stringLiteral.getStartPosition(),
+				stringLiteral.getStartPosition()
+					+ stringLiteral.getLength(),
+				stringLiteral.getLiteralValue());
+			desc.setData(rbName);
+			brokenStrings.add(desc);
+		    }
+
+		    // store position of resource-bundle access
+		    keyPositions.put(
+			    Long.valueOf(stringLiteral.getStartPosition()),
+			    region);
+		    bundleKeys.put(region, stringLiteral.getLiteralValue());
+		    bundleReferences.put(region, rbName.getLiteral());
+		    return false;
+		} else if (ASTutils.isMatchingMethodParamDesc(methodInvocation,
+			stringLiteral, ASTutils.getRBDefinitionDesc())) {
+		    rbDefReferences.put(
+			    Long.valueOf(stringLiteral.getStartPosition()),
+			    region);
+		    boolean referenceBroken = true;
+		    for (String bundle : manager.getResourceBundleIdentifiers()) {
+			if (bundle.trim().equals(
+				stringLiteral.getLiteralValue())) {
+			    referenceBroken = false;
+			}
+		    }
+		    if (referenceBroken) {
+			this.brokenRBReferences.add(new SLLocation(file,
+				stringLiteral.getStartPosition(), stringLiteral
+					.getStartPosition()
+					+ stringLiteral.getLength(),
+				stringLiteral.getLiteralValue()));
+		    }
+
+		    return false;
+		}
+	    }
+
+	    // check if string is followed by a "$NON-NLS$" line comment
+	    if (ASTutils.existsNonInternationalisationComment(stringLiteral)) {
+		return false;
+	    }
+
+	    // constant string literal found
+	    constants.add(new SLLocation(file,
+		    stringLiteral.getStartPosition(), stringLiteral
+			    .getStartPosition() + stringLiteral.getLength(),
+		    stringLiteral.getLiteralValue()));
+	} catch (Exception e) {
+	    e.printStackTrace();
+	}
+	return false;
+    }
+
+    public List<SLLocation> getConstantStringLiterals() {
+	return constants;
+    }
+
+    public List<SLLocation> getBrokenResourceReferences() {
+	return brokenStrings;
+    }
+
+    public List<SLLocation> getBrokenRBReferences() {
+	return this.brokenRBReferences;
+    }
+
+    public IRegion getKeyAt(Long position) {
+	IRegion reg = null;
+
+	Iterator<Long> keys = keyPositions.keySet().iterator();
+	while (keys.hasNext()) {
+	    Long startPos = keys.next();
+	    if (startPos > position) {
+		break;
+	    }
+
+	    IRegion region = keyPositions.get(startPos);
+	    if (region.getOffset() <= position
+		    && (region.getOffset() + region.getLength()) >= position) {
+		reg = region;
+		break;
+	    }
+	}
+
+	return reg;
+    }
+
+    public String getKeyAt(IRegion region) {
+	if (bundleKeys.containsKey(region)) {
+	    return bundleKeys.get(region);
+	} else {
+	    return "";
+	}
+    }
+
+    public String getBundleReference(IRegion region) {
+	return bundleReferences.get(region);
+    }
+
+    @Override
+    public boolean visit(IResource resource) throws CoreException {
+	// TODO Auto-generated method stub
+	return false;
+    }
+
+    public Collection<String> getDefinedResourceBundles(int offset) {
+	Collection<String> result = new HashSet<String>();
+	for (String s : bundleReferences.values()) {
+	    if (s != null) {
+		result.add(s);
+	    }
+	}
+	return result;
+    }
+
+    public IRegion getRBReferenceAt(Long offset) {
+	IRegion reg = null;
+
+	Iterator<Long> keys = rbDefReferences.keySet().iterator();
+	while (keys.hasNext()) {
+	    Long startPos = keys.next();
+	    if (startPos > offset) {
+		break;
+	    }
+
+	    IRegion region = rbDefReferences.get(startPos);
+	    if (region != null && region.getOffset() <= offset
+		    && (region.getOffset() + region.getLength()) >= offset) {
+		reg = region;
+		break;
+	    }
+	}
+
+	return reg;
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/.classpath b/org.eclipse.babel.tapiji.tools.rbmanager/.classpath
new file mode 100644
index 0000000..8a8f166
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/.project b/org.eclipse.babel.tapiji.tools.rbmanager/.project
new file mode 100644
index 0000000..c01fd6c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.babel.tapiji.tools.rbmanager</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+	</natures>

+</projectDescription>

diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.babel.tapiji.tools.rbmanager/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..519aa0e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Wed Jul 20 11:00:34 CEST 2011

+eclipse.preferences.version=1

+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6

+org.eclipse.jdt.core.compiler.compliance=1.6

+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

+org.eclipse.jdt.core.compiler.source=1.6

diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/META-INF/MANIFEST.MF b/org.eclipse.babel.tapiji.tools.rbmanager/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..9295dec
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Manager
+Bundle-SymbolicName: org.eclipse.babel.tapiji.tools.rbmanager;singleton:=true
+Bundle-Version: 0.0.2.qualifier
+Bundle-Activator: org.eclipse.babel.tapiji.tools.rbmanager.RBManagerActivator
+Bundle-Vendor: GKNSINTERMETALS
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.core.resources;bundle-version="3.6",
+ org.eclipse.ui,
+ org.eclipse.ui.ide;bundle-version="3.6.0",
+ org.eclipse.ui.navigator;bundle-version="3.5",
+ org.eclipse.babel.tapiji.tools.core.ui;bundle-version="0.0.2"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/about.html b/org.eclipse.babel.tapiji.tools.rbmanager/about.html
new file mode 100644
index 0000000..f47dbdd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>

+<title>About</title>

+</head>

+<body lang="EN-US">

+<h2>About This Content</h2>

+ 

+<p>June 5, 2006</p>	

+<h3>License</h3>

+

+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 

+indicated below, the Content is provided to you under the terms and conditions of the

+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 

+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.

+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>

+

+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 

+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may

+apply to your use of any object code in the Content.  Check the Redistributor's license that was 

+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise

+indicated below, the terms and conditions of the EPL still apply to any source code in the Content

+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>

+

+</body>

+</html>
\ No newline at end of file
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/build.properties b/org.eclipse.babel.tapiji.tools.rbmanager/build.properties
new file mode 100644
index 0000000..f176c83
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/build.properties
@@ -0,0 +1,10 @@
+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .,\

+               plugin.xml,\

+               bin/,\

+               icons/

+src.includes = icons/,\

+               src/,\

+               bin/
\ No newline at end of file
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/epl-v10.html b/org.eclipse.babel.tapiji.tools.rbmanager/epl-v10.html
new file mode 100644
index 0000000..84ec251
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/epl-v10.html
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+  body {
+    size: 8.5in 11.0in;
+    margin: 0.25in 0.5in 0.25in 0.5in;
+    tab-interval: 0.5in;
+    }
+  p {  	
+    margin-left: auto;
+    margin-top:  0.5em;
+    margin-bottom: 0.5em;
+    }
+  p.list {
+  	margin-left: 0.5in;
+    margin-top:  0.05em;
+    margin-bottom: 0.05em;
+    }
+  </style>
+
+</head>
+
+<body lang="EN-US">
+
+<p align=center><b>Eclipse Public License - v 1.0</b></p>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>&quot;Contribution&quot; means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">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.</p>
+
+<p>&quot;Contributor&quot; means any person or entity that distributes
+the Program.</p>
+
+<p>&quot;Licensed Patents&quot; 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.</p>
+
+<p>&quot;Program&quot; means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>&quot;Recipient&quot; means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">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.</p>
+
+<p class="list">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.</p>
+
+<p class="list">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.</p>
+
+<p class="list">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.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">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;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">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.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>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.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>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
+(&quot;Commercial Contributor&quot;) hereby agrees to defend and
+indemnify every other Contributor (&quot;Indemnified Contributor&quot;)
+against any losses, damages and costs (collectively &quot;Losses&quot;)
+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.</p>
+
+<p>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.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN &quot;AS IS&quot; 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.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>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.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+<p>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.</p>
+
+</body>
+
+</html>
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/__.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/__.gif
new file mode 100644
index 0000000..6516784
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/__.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/_f.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/_f.gif
new file mode 100644
index 0000000..a5f340d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/_f.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ad.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ad.gif
new file mode 100644
index 0000000..0b24054
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ad.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ae.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ae.gif
new file mode 100644
index 0000000..a4a82ff
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ae.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/af.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/af.gif
new file mode 100644
index 0000000..70e1a15
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/af.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ag.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ag.gif
new file mode 100644
index 0000000..2dc04e5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ag.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/al.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/al.gif
new file mode 100644
index 0000000..1384f59
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/al.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/am.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/am.gif
new file mode 100644
index 0000000..eda901e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/am.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ao.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ao.gif
new file mode 100644
index 0000000..56f02bb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ao.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/aq.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/aq.gif
new file mode 100644
index 0000000..d8e99da
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/aq.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ar.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ar.gif
new file mode 100644
index 0000000..0231d50
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ar.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/at.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/at.gif
new file mode 100644
index 0000000..ecf48b9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/at.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/au.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/au.gif
new file mode 100644
index 0000000..7776124
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/au.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/az.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/az.gif
new file mode 100644
index 0000000..bc77ff2
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/az.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ba.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ba.gif
new file mode 100644
index 0000000..8e4e549
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ba.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bb.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bb.gif
new file mode 100644
index 0000000..54928a6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bb.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bd.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bd.gif
new file mode 100644
index 0000000..25890b9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/be.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/be.gif
new file mode 100644
index 0000000..f917f39
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/be.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bf.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bf.gif
new file mode 100644
index 0000000..53afd44
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bf.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bg.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bg.gif
new file mode 100644
index 0000000..5ce1db1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bh.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bh.gif
new file mode 100644
index 0000000..ba39230
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bi.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bi.gif
new file mode 100644
index 0000000..ee3d6a4
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bi.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bj.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bj.gif
new file mode 100644
index 0000000..55463ef
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/blank.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/blank.gif
new file mode 100644
index 0000000..314b863
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/blank.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bn.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bn.gif
new file mode 100644
index 0000000..ed11638
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bo.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bo.gif
new file mode 100644
index 0000000..f179698
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bo.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/br.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/br.gif
new file mode 100644
index 0000000..e1069e0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/br.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bs.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bs.gif
new file mode 100644
index 0000000..30c32c3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bs.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bt.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bt.gif
new file mode 100644
index 0000000..b53dddf
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bw.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bw.gif
new file mode 100644
index 0000000..d73ad71
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/by.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/by.gif
new file mode 100644
index 0000000..3335ae0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/by.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bz.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bz.gif
new file mode 100644
index 0000000..ec05637
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/bz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ca.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ca.gif
new file mode 100644
index 0000000..547011a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ca.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cd.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cd.gif
new file mode 100644
index 0000000..44fa441
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cf.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cf.gif
new file mode 100644
index 0000000..41405ce
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cf.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cg.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cg.gif
new file mode 100644
index 0000000..00fa29c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ch.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ch.gif
new file mode 100644
index 0000000..b0dc176
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ch.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ci.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ci.gif
new file mode 100644
index 0000000..b1167c0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ci.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cl.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cl.gif
new file mode 100644
index 0000000..31dcb03
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cl.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cm.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cm.gif
new file mode 100644
index 0000000..f361dbd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cn.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cn.gif
new file mode 100644
index 0000000..f12f17d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/co.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/co.gif
new file mode 100644
index 0000000..d9f14e7
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/co.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cr.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cr.gif
new file mode 100644
index 0000000..2a5f0b9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cs.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cs.gif
new file mode 100644
index 0000000..580d26f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cs.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cu.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cu.gif
new file mode 100644
index 0000000..823befc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cv.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cv.gif
new file mode 100644
index 0000000..d21a45c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cy.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cy.gif
new file mode 100644
index 0000000..1a332d9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cy.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cz.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cz.gif
new file mode 100644
index 0000000..2faee5e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/cz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/dd.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/dd.gif
new file mode 100644
index 0000000..99eda38
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/dd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/de.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/de.gif
new file mode 100644
index 0000000..c7b2840
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/de.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/dj.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/dj.gif
new file mode 100644
index 0000000..94fc2eb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/dj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/dk.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/dk.gif
new file mode 100644
index 0000000..4f01ec9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/dk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/dm.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/dm.gif
new file mode 100644
index 0000000..b4fed90
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/dm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/do.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/do.gif
new file mode 100644
index 0000000..85d7be8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/do.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/dz.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/dz.gif
new file mode 100644
index 0000000..622ff6b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/dz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ec.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ec.gif
new file mode 100644
index 0000000..5d1641b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ec.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ee.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ee.gif
new file mode 100644
index 0000000..c678c73
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ee.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/eg.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/eg.gif
new file mode 100644
index 0000000..a740c66
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/eg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/eh.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/eh.gif
new file mode 100644
index 0000000..6a75cc3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/eh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/er.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/er.gif
new file mode 100644
index 0000000..71297d6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/er.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/es.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/es.gif
new file mode 100644
index 0000000..6dee15c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/es.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/et.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/et.gif
new file mode 100644
index 0000000..4188e4f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/et.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/eu.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/eu.gif
new file mode 100644
index 0000000..45caabf
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/eu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/fi.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/fi.gif
new file mode 100644
index 0000000..b8311ca
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/fi.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/fj.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/fj.gif
new file mode 100644
index 0000000..f5481b7
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/fj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/fm.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/fm.gif
new file mode 100644
index 0000000..050eca0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/fm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/fr.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/fr.gif
new file mode 100644
index 0000000..a2a2354
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/fr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ga.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ga.gif
new file mode 100644
index 0000000..54fb251
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ga.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gb.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gb.gif
new file mode 100644
index 0000000..4ae2d0f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gb.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gd.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gd.gif
new file mode 100644
index 0000000..0095032
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ge.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ge.gif
new file mode 100644
index 0000000..f3927c8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ge.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gh.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gh.gif
new file mode 100644
index 0000000..6d3b614
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gm.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gm.gif
new file mode 100644
index 0000000..2ecf0b0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gn.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gn.gif
new file mode 100644
index 0000000..8317935
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gq.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gq.gif
new file mode 100644
index 0000000..6c2bc47
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gq.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gr.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gr.gif
new file mode 100644
index 0000000..1599add
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gt.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gt.gif
new file mode 100644
index 0000000..c306f25
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gw.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gw.gif
new file mode 100644
index 0000000..6cba590
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gy.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gy.gif
new file mode 100644
index 0000000..a4b4da9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/gy.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/hk.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/hk.gif
new file mode 100644
index 0000000..230723a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/hk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/hn.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/hn.gif
new file mode 100644
index 0000000..0550157
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/hn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/hr.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/hr.gif
new file mode 100644
index 0000000..893778a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/hr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ht.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ht.gif
new file mode 100644
index 0000000..e5cf780
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ht.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/hu.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/hu.gif
new file mode 100644
index 0000000..0777883
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/hu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/id.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/id.gif
new file mode 100644
index 0000000..9fed764
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/id.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ie.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ie.gif
new file mode 100644
index 0000000..82ec553
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ie.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/il.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/il.gif
new file mode 100644
index 0000000..554a761
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/il.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/in.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/in.gif
new file mode 100644
index 0000000..430b37b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/in.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/iq.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/iq.gif
new file mode 100644
index 0000000..dae4d59
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/iq.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ir.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ir.gif
new file mode 100644
index 0000000..50f5432
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ir.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/is.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/is.gif
new file mode 100644
index 0000000..e9580e0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/is.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/it.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/it.gif
new file mode 100644
index 0000000..4256b46
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/it.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/jm.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/jm.gif
new file mode 100644
index 0000000..f1459fe
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/jm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/jo.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/jo.gif
new file mode 100644
index 0000000..a9d3612
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/jo.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/jp.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/jp.gif
new file mode 100644
index 0000000..ddad6e3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/jp.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ke.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ke.gif
new file mode 100644
index 0000000..6e06f4a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ke.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/kg.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/kg.gif
new file mode 100644
index 0000000..e47fb0f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/kg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/kh.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/kh.gif
new file mode 100644
index 0000000..31f5be1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/kh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ki.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ki.gif
new file mode 100644
index 0000000..9f12bb0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ki.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/km.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/km.gif
new file mode 100644
index 0000000..027276b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/km.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/kn.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/kn.gif
new file mode 100644
index 0000000..f690875
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/kn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/kp.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/kp.gif
new file mode 100644
index 0000000..42584ef
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/kp.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/kr.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/kr.gif
new file mode 100644
index 0000000..800c6cd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/kr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/kw.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/kw.gif
new file mode 100644
index 0000000..ff083b5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/kw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/kz.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/kz.gif
new file mode 100644
index 0000000..9b13afe
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/kz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_ar.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_ar.gif
new file mode 100644
index 0000000..4b7632e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_ar.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_be.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_be.gif
new file mode 100644
index 0000000..3335ae0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_be.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_bg.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_bg.gif
new file mode 100644
index 0000000..5ce1db1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_bg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_cz.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_cz.gif
new file mode 100644
index 0000000..2faee5e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_cz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_de.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_de.gif
new file mode 100644
index 0000000..c7b2840
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_de.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_dk.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_dk.gif
new file mode 100644
index 0000000..4f01ec9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_dk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_el.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_el.gif
new file mode 100644
index 0000000..1599add
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_el.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_en.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_en.gif
new file mode 100644
index 0000000..4ae2d0f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_en.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_es.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_es.gif
new file mode 100644
index 0000000..6dee15c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_es.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_et.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_et.gif
new file mode 100644
index 0000000..c678c73
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_et.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_fi.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_fi.gif
new file mode 100644
index 0000000..b8311ca
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_fi.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_fr.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_fr.gif
new file mode 100644
index 0000000..a2a2354
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_fr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_ga.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_ga.gif
new file mode 100644
index 0000000..82ec553
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_ga.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_hi.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_hi.gif
new file mode 100644
index 0000000..430b37b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_hi.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_hr.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_hr.gif
new file mode 100644
index 0000000..893778a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_hr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_hu.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_hu.gif
new file mode 100644
index 0000000..0777883
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_hu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_in.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_in.gif
new file mode 100644
index 0000000..9fed764
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_in.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_is.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_is.gif
new file mode 100644
index 0000000..e9580e0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_is.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_it.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_it.gif
new file mode 100644
index 0000000..4256b46
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_it.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_iw.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_iw.gif
new file mode 100644
index 0000000..554a761
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_iw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_ja.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_ja.gif
new file mode 100644
index 0000000..ddad6e3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_ja.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_ko.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_ko.gif
new file mode 100644
index 0000000..800c6cd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_ko.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_lt.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_lt.gif
new file mode 100644
index 0000000..78447f0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_lt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_lv.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_lv.gif
new file mode 100644
index 0000000..5f7419c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_lv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_mk.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_mk.gif
new file mode 100644
index 0000000..88c077f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_mk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_ms.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_ms.gif
new file mode 100644
index 0000000..8874751
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_ms.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_mt.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_mt.gif
new file mode 100644
index 0000000..677969a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_mt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_nl.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_nl.gif
new file mode 100644
index 0000000..c4258e6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_nl.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_no.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_no.gif
new file mode 100644
index 0000000..873baca
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_no.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_pl.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_pl.gif
new file mode 100644
index 0000000..6ff3ba6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_pl.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_pt.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_pt.gif
new file mode 100644
index 0000000..9bfc8ca
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_pt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_ro.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_ro.gif
new file mode 100644
index 0000000..6bdbad1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_ro.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_ru.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_ru.gif
new file mode 100644
index 0000000..cf4d30c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_ru.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_sk.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_sk.gif
new file mode 100644
index 0000000..b0c4ab1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_sk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_sl.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_sl.gif
new file mode 100644
index 0000000..00d59d3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_sl.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_sq.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_sq.gif
new file mode 100644
index 0000000..1384f59
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_sq.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_sr.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_sr.gif
new file mode 100644
index 0000000..580d26f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_sr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_sv.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_sv.gif
new file mode 100644
index 0000000..9bbcb1f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_sv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_th.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_th.gif
new file mode 100644
index 0000000..83318c0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_th.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_tr.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_tr.gif
new file mode 100644
index 0000000..2eac730
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_tr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_uk.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_uk.gif
new file mode 100644
index 0000000..bebd670
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_uk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_vn.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_vn.gif
new file mode 100644
index 0000000..e7d1e5b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_vn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_zh.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_zh.gif
new file mode 100644
index 0000000..f12f17d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/l_zh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/la.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/la.gif
new file mode 100644
index 0000000..3c6f2f1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/la.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/lb.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/lb.gif
new file mode 100644
index 0000000..f3c4552
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/lb.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/lc.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/lc.gif
new file mode 100644
index 0000000..fdcbd97
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/lc.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/li.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/li.gif
new file mode 100644
index 0000000..eb9d938
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/li.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/lk.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/lk.gif
new file mode 100644
index 0000000..3aa25aa
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/lk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/lr.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/lr.gif
new file mode 100644
index 0000000..f54468f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/lr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ls.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ls.gif
new file mode 100644
index 0000000..c1ad8d2
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ls.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/lt.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/lt.gif
new file mode 100644
index 0000000..78447f0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/lt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/lu.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/lu.gif
new file mode 100644
index 0000000..d74df5a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/lu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/lv.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/lv.gif
new file mode 100644
index 0000000..5f7419c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/lv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ly.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ly.gif
new file mode 100644
index 0000000..8ca9e0a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ly.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ma.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ma.gif
new file mode 100644
index 0000000..3aab8cb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ma.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mc.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mc.gif
new file mode 100644
index 0000000..c22c171
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mc.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/md.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/md.gif
new file mode 100644
index 0000000..4951b21
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/md.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mg.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mg.gif
new file mode 100644
index 0000000..24281d8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mh.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mh.gif
new file mode 100644
index 0000000..c472aee
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mh.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mk.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mk.gif
new file mode 100644
index 0000000..88c077f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ml.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ml.gif
new file mode 100644
index 0000000..4eb75ae
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ml.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mm.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mm.gif
new file mode 100644
index 0000000..bd37855
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mn.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mn.gif
new file mode 100644
index 0000000..de3029b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mr.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mr.gif
new file mode 100644
index 0000000..d7cbb38
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mt.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mt.gif
new file mode 100644
index 0000000..677969a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mu.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mu.gif
new file mode 100644
index 0000000..d102ab7
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mv.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mv.gif
new file mode 100644
index 0000000..69ac686
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mw.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mw.gif
new file mode 100644
index 0000000..a0f0320
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mx.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mx.gif
new file mode 100644
index 0000000..bbcb376
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mx.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/my.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/my.gif
new file mode 100644
index 0000000..8874751
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/my.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mz.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mz.gif
new file mode 100644
index 0000000..b63af28
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/mz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/na.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/na.gif
new file mode 100644
index 0000000..bee7072
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/na.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ne.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ne.gif
new file mode 100644
index 0000000..fc1b74b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ne.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ng.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ng.gif
new file mode 100644
index 0000000..43af12c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ng.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ni.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ni.gif
new file mode 100644
index 0000000..cac0042
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ni.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/nl.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/nl.gif
new file mode 100644
index 0000000..c4258e6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/nl.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/no.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/no.gif
new file mode 100644
index 0000000..873baca
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/no.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/np.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/np.gif
new file mode 100644
index 0000000..f01f2f9
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/np.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/nr.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/nr.gif
new file mode 100644
index 0000000..d485c4b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/nr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/nu.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/nu.gif
new file mode 100644
index 0000000..7317705
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/nu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/nz.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/nz.gif
new file mode 100644
index 0000000..49f8464
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/nz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/om.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/om.gif
new file mode 100644
index 0000000..d90ca33
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/om.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/pa.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/pa.gif
new file mode 100644
index 0000000..cae5432
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/pa.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/pe.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/pe.gif
new file mode 100644
index 0000000..e6cc734
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/pe.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/pg.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/pg.gif
new file mode 100644
index 0000000..108204f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/pg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ph.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ph.gif
new file mode 100644
index 0000000..b141cd8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ph.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/pk.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/pk.gif
new file mode 100644
index 0000000..f612b97
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/pk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/pl.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/pl.gif
new file mode 100644
index 0000000..6ff3ba6
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/pl.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ps.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ps.gif
new file mode 100644
index 0000000..71717cc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ps.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/pt.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/pt.gif
new file mode 100644
index 0000000..9bfc8ca
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/pt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/pw.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/pw.gif
new file mode 100644
index 0000000..0a52091
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/pw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/py.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/py.gif
new file mode 100644
index 0000000..b52de24
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/py.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/qa.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/qa.gif
new file mode 100644
index 0000000..e078e46
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/qa.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ro.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ro.gif
new file mode 100644
index 0000000..6bdbad1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ro.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ru.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ru.gif
new file mode 100644
index 0000000..cf4d30c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ru.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/rw.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/rw.gif
new file mode 100644
index 0000000..02cf0cb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/rw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sa.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sa.gif
new file mode 100644
index 0000000..4b7632e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sa.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sb.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sb.gif
new file mode 100644
index 0000000..eb8acc0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sb.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sc.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sc.gif
new file mode 100644
index 0000000..4324c21
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sc.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sd.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sd.gif
new file mode 100644
index 0000000..2d74f62
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sd.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/se.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/se.gif
new file mode 100644
index 0000000..9bbcb1f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/se.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sg.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sg.gif
new file mode 100644
index 0000000..b81f461
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/si.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/si.gif
new file mode 100644
index 0000000..f6afb67
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/si.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sk.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sk.gif
new file mode 100644
index 0000000..b0c4ab1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sl.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sl.gif
new file mode 100644
index 0000000..00d59d3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sl.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sm.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sm.gif
new file mode 100644
index 0000000..8d9d76b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sn.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sn.gif
new file mode 100644
index 0000000..1a54174
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/so.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/so.gif
new file mode 100644
index 0000000..7f1dba3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/so.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sr.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sr.gif
new file mode 100644
index 0000000..de781c1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/st.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/st.gif
new file mode 100644
index 0000000..cd9036f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/st.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/su.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/su.gif
new file mode 100644
index 0000000..23e162a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/su.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sv.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sv.gif
new file mode 100644
index 0000000..bef488e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sy.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sy.gif
new file mode 100644
index 0000000..a3a53cd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sy.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sz.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sz.gif
new file mode 100644
index 0000000..b3a20ba
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/sz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/td.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/td.gif
new file mode 100644
index 0000000..3ccc8df
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/td.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tg.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tg.gif
new file mode 100644
index 0000000..674e68f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tg.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/th.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/th.gif
new file mode 100644
index 0000000..83318c0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/th.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tj.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tj.gif
new file mode 100644
index 0000000..1f44255
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tj.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tm.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tm.gif
new file mode 100644
index 0000000..a603afd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tn.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tn.gif
new file mode 100644
index 0000000..083238d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/to.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/to.gif
new file mode 100644
index 0000000..603aa8e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/to.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tp.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tp.gif
new file mode 100644
index 0000000..40599d5
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tp.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tr.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tr.gif
new file mode 100644
index 0000000..2eac730
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tr.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tt.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tt.gif
new file mode 100644
index 0000000..f715419
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tt.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tv.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tv.gif
new file mode 100644
index 0000000..9b018e8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tv.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tw.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tw.gif
new file mode 100644
index 0000000..57a0482
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tz.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tz.gif
new file mode 100644
index 0000000..6d28d40
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/tz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ua.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ua.gif
new file mode 100644
index 0000000..bebd670
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ua.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ug.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ug.gif
new file mode 100644
index 0000000..151e303
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ug.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/uk.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/uk.gif
new file mode 100644
index 0000000..4ae2d0f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/uk.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/un.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/un.gif
new file mode 100644
index 0000000..135b528
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/un.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/us.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/us.gif
new file mode 100644
index 0000000..850094e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/us.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/uy.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/uy.gif
new file mode 100644
index 0000000..4d129fc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/uy.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/uz.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/uz.gif
new file mode 100644
index 0000000..d9cc88e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/uz.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/va.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/va.gif
new file mode 100644
index 0000000..5db146d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/va.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/vc.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/vc.gif
new file mode 100644
index 0000000..6519018
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/vc.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ve.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ve.gif
new file mode 100644
index 0000000..4abf999
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ve.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/vn.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/vn.gif
new file mode 100644
index 0000000..e7d1e5b
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/vn.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/vu.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/vu.gif
new file mode 100644
index 0000000..f8736a1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/vu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ws.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ws.gif
new file mode 100644
index 0000000..b2bc2f7
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ws.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ya.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ya.gif
new file mode 100644
index 0000000..9153613
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ya.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ye.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ye.gif
new file mode 100644
index 0000000..f183847
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ye.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ye0.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ye0.gif
new file mode 100644
index 0000000..b9c28b3
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/ye0.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/yu.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/yu.gif
new file mode 100644
index 0000000..c91bf1e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/yu.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/za.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/za.gif
new file mode 100644
index 0000000..8579793
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/za.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/zm.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/zm.gif
new file mode 100644
index 0000000..fc686bb
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/zm.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/zw.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/zw.gif
new file mode 100644
index 0000000..9821c41
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/countries/zw.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/expand.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/expand.gif
new file mode 100644
index 0000000..3b0a619
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/expand.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/expandall.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/expandall.gif
new file mode 100644
index 0000000..0205b29
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/expandall.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/fragment_flag.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/fragment_flag.gif
new file mode 100644
index 0000000..1c2d14f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/fragment_flag.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/fragmentproject.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/fragmentproject.gif
new file mode 100644
index 0000000..ea885ac
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/fragmentproject.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/resourcebundle.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/resourcebundle.gif
new file mode 100644
index 0000000..fe05bad
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/resourcebundle.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/warning.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/warning.gif
new file mode 100644
index 0000000..4f41bf0
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/warning.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/icons/warning_flag.gif b/org.eclipse.babel.tapiji.tools.rbmanager/icons/warning_flag.gif
new file mode 100644
index 0000000..801a1f8
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/icons/warning_flag.gif
Binary files differ
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/plugin.xml b/org.eclipse.babel.tapiji.tools.rbmanager/plugin.xml
new file mode 100644
index 0000000..1d8fa9c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/plugin.xml
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.4"?>

+<plugin>

+   <extension

+         point="org.eclipse.ui.views">

+      <view

+            category="org.eclipse.babel.tapiji"

+            class="org.eclipse.ui.navigator.CommonNavigator"

+            icon="icons/resourcebundle.gif"

+            id="org.eclipse.babel.tapiji.tools.rbmanager.ResourceBundleExplorer"

+            name="Resource Bundle Explorer"

+            restorable="true">

+      </view>

+   </extension>

+   <extension

+         point="org.eclipse.ui.viewActions">

+      <viewContribution

+            id="org.eclipse.babel.tapiji.tools.rbmanager.viewContribution1"

+            targetID="org.eclipse.babel.tapiji.tools.rbmanager.ResourceBundleExplorer">

+         <action

+               class="org.eclipse.babel.tapiji.tools.rbmanager.ui.view.toolbarItems.ToggleFilterActionDelegate"

+               icon="icons/warning.gif"

+               id="org.eclipse.babel.tapiji.tools.rbmanager.activateFilter"

+               label="Filter Problematic ResourceBundles"

+               state="false"

+               style="toggle"

+               toolbarPath="additions"

+               tooltip="Filters ResourceBundles With Warnings">

+         </action>

+      </viewContribution>

+      <viewContribution

+            id="org.eclipse.babel.tapiji.tools.rbmanager.viewContribution2"

+            targetID="org.eclipse.babel.tapiji.tools.rbmanager.ResourceBundleExplorer">

+         <action

+               class="org.eclipse.babel.tapiji.tools.rbmanager.ui.view.toolbarItems.ExpandAllActionDelegate"

+               icon="icons/expandall.gif"

+               id="org.eclipse.babel.tapiji.tools.rbmanager.expandAll"

+               label="Expand All"

+               style="push"

+               toolbarPath="additions">

+         </action>

+      </viewContribution>

+   </extension>

+   <extension

+         point="org.eclipse.ui.navigator.viewer">

+      <viewerContentBinding

+            viewerId="org.eclipse.babel.tapiji.tools.rbmanager.ResourceBundleExplorer">

+         <includes>

+            <contentExtension

+                  pattern="org.eclipse.babel.tapiji.tools.rbmanager.resourcebundleContent">

+            </contentExtension>

+            <contentExtension

+                  pattern="org.eclipse.babel.tapiji.tools.rbmanager.filter.*">

+            </contentExtension>

+            <contentExtension

+                  pattern="org.eclipse.ui.navigator.resources.filters.*">

+            </contentExtension>

+            <contentExtension

+                  pattern="org.eclipse.babel.tapiji.tools.rbmanager.linkHelper">

+            </contentExtension>

+         </includes>

+      </viewerContentBinding>

+      <viewerActionBinding

+            viewerId="org.eclipse.babel.tapiji.tools.rbmanager.ResourceBundleExplorer">

+         <includes>

+            <actionExtension

+                  pattern="org.eclipse.ui.navigator.resources.*">

+            </actionExtension>

+         </includes>

+      </viewerActionBinding>

+      <viewer

+            viewerId="org.eclipse.babel.tapiji.tools.rbmanager.ResourceBundleExplorer">

+         <popupMenu>

+            <insertionPoint

+                  name="group.new">

+            </insertionPoint>

+            <insertionPoint

+                  name="group.open">

+            </insertionPoint>

+            <insertionPoint

+                  name="group.openWith">

+            </insertionPoint>

+            <insertionPoint

+                  name="group.edit">

+            </insertionPoint>

+            <insertionPoint

+                  name="expand">

+            </insertionPoint>

+            <insertionPoint

+                  name="group.port">

+            </insertionPoint>

+            <insertionPoint

+                  name="group.reorgnize">

+            </insertionPoint>

+            <insertionPoint

+                  name="group.build">

+            </insertionPoint>

+            <insertionPoint

+                  name="group.search">

+            </insertionPoint>

+            <insertionPoint

+                  name="additions">

+            </insertionPoint>

+            <insertionPoint

+                  name="group.properties">

+            </insertionPoint>

+         </popupMenu>

+      </viewer>

+   </extension>

+   <extension

+         point="org.eclipse.ui.navigator.navigatorContent">

+      <navigatorContent

+            contentProvider="org.eclipse.babel.tapiji.tools.rbmanager.viewer.ResourceBundleContentProvider"

+            icon="icons/resourcebundle.gif"

+            id="org.eclipse.babel.tapiji.tools.rbmanager.resourcebundleContent"

+            labelProvider="org.eclipse.babel.tapiji.tools.rbmanager.viewer.ResourceBundleLabelProvider"

+            name="Resource Bundle Content"

+            priority="high">

+         <triggerPoints>

+            <or>

+               <instanceof

+                     value="org.eclipse.core.resources.IWorkspaceRoot">

+               </instanceof>

+               <instanceof

+                     value="org.eclipse.babel.tapiji.tools.rbmanager.model.VirtualResourceBundle">

+               </instanceof>

+               <instanceof

+                     value="org.eclipse.core.resources.IContainer">

+               </instanceof>

+               <instanceof

+                     value="org.eclipse.core.resources.IProject">

+               </instanceof>

+            </or>

+         </triggerPoints>

+         <possibleChildren>

+            <or>

+               <instanceof

+                     value="org.eclipse.core.resources.IContainer">

+               </instanceof>

+               <instanceof

+                     value="org.eclipse.babel.tapiji.tools.rbmanager.model.VirtualResourceBundle">

+               </instanceof>

+               <and>

+                  <instanceof

+                        value="org.eclipse.core.resources.IFile">

+                  </instanceof>

+                  <test

+                        property="org.eclipse.core.resources.extension"

+                        value="properties">

+                  </test>

+               </and>

+            </or></possibleChildren>

+         <actionProvider

+               class="org.eclipse.babel.tapiji.tools.rbmanager.viewer.actions.VirtualRBActionProvider"

+               id="org.eclipse.babel.tapiji.tools.rbmanager.action.openProvider">

+            <enablement>

+               <instanceof

+                     value="org.eclipse.babel.tapiji.tools.rbmanager.model.VirtualResourceBundle">

+               </instanceof>

+            </enablement>

+         </actionProvider>

+         <actionProvider

+               class="org.eclipse.babel.tapiji.tools.rbmanager.viewer.actions.GeneralActionProvider"

+               id="org.eclipse.babel.tapiji.tools.rbmanager.action.general">

+         </actionProvider>

+      </navigatorContent>

+   </extension>

+   <extension

+         point="org.eclipse.ui.navigator.navigatorContent">

+      <commonFilter

+            activeByDefault="false"

+            class="org.eclipse.babel.tapiji.tools.rbmanager.viewer.filters.ProblematicResourceBundleFilter"

+            id="org.eclipse.babel.tapiji.tools.rbmanager.filter.ProblematicResourceBundleFiles"

+            name="Problematic Resource Bundle Files">

+      </commonFilter>

+   </extension>

+   <extension

+         point="org.eclipse.ui.navigator.linkHelper">

+      <linkHelper

+            class="org.eclipse.babel.tapiji.tools.rbmanager.viewer.LinkHelper"

+            id="org.eclipse.babel.tapiji.tools.rbmanager.linkHelper">

+        <selectionEnablement>

+             <instanceof value="org.eclipse.core.resources.IFile"/>

+          </selectionEnablement>

+          <editorInputEnablement>

+             <instanceof value="org.eclipse.ui.IFileEditorInput"/>

+          </editorInputEnablement>

+      </linkHelper>

+   </extension>

+   <extension

+         point="org.eclipse.babel.tapiji.tools.core.builderExtension">

+      <i18nAuditor

+            class="org.eclipse.babel.tapiji.tools.rbmanager.auditor.ResourceBundleAuditor">

+      </i18nAuditor>

+   </extension>

+

+</plugin>

diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/ImageUtils.java b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/ImageUtils.java
new file mode 100644
index 0000000..8db317c
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/ImageUtils.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Michael Gasser - initial implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.rbmanager;
+
+import java.io.File;
+import java.net.URISyntaxException;
+import java.util.Locale;
+
+import org.eclipse.babel.tapiji.tools.core.util.OverlayIcon;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.swt.graphics.Image;
+
+public class ImageUtils {
+    private static final ImageRegistry imageRegistry = new ImageRegistry();
+
+    private static final String WARNING_FLAG_IMAGE = "warning_flag.gif"; //$NON-NLS-1$
+    private static final String FRAGMENT_FLAG_IMAGE = "fragment_flag.gif"; //$NON-NLS-1$
+    public static final String WARNING_IMAGE = "warning.gif"; //$NON-NLS-1$
+    public static final String FRAGMENT_PROJECT_IMAGE = "fragmentproject.gif"; //$NON-NLS-1$
+    public static final String RESOURCEBUNDLE_IMAGE = "resourcebundle.gif"; //$NON-NLS-1$
+    public static final String EXPAND = "expand.gif"; //$NON-NLS-1$
+    public static final String DEFAULT_LOCALICON = File.separatorChar
+	    + "countries" + File.separatorChar + "_f.gif";
+    public static final String LOCATION_WITHOUT_ICON = File.separatorChar
+	    + "countries" + File.separatorChar + "un.gif";
+
+    /**
+     * @return a Image from the folder 'icons'
+     * @throws URISyntaxException
+     */
+    public static Image getBaseImage(String imageName) {
+	Image image = imageRegistry.get(imageName);
+	if (image == null) {
+	    ImageDescriptor descriptor = RBManagerActivator
+		    .getImageDescriptor(imageName);
+
+	    if (descriptor.getImageData() != null) {
+		image = descriptor.createImage(false);
+		imageRegistry.put(imageName, image);
+	    }
+	}
+
+	return image;
+    }
+
+    /**
+     * @param baseImage
+     * @return baseImage with a overlay warning-image
+     */
+    public static Image getImageWithWarning(Image baseImage) {
+	String imageWithWarningId = baseImage.toString() + ".w";
+	Image imageWithWarning = imageRegistry.get(imageWithWarningId);
+
+	if (imageWithWarning == null) {
+	    Image warningImage = getBaseImage(WARNING_FLAG_IMAGE);
+	    imageWithWarning = new OverlayIcon(baseImage, warningImage,
+		    OverlayIcon.BOTTOM_LEFT).createImage();
+	    imageRegistry.put(imageWithWarningId, imageWithWarning);
+	}
+
+	return imageWithWarning;
+    }
+
+    /**
+     * 
+     * @param baseImage
+     * @return baseImage with a overlay fragment-image
+     */
+    public static Image getImageWithFragment(Image baseImage) {
+	String imageWithFragmentId = baseImage.toString() + ".f";
+	Image imageWithFragment = imageRegistry.get(imageWithFragmentId);
+
+	if (imageWithFragment == null) {
+	    Image fragement = getBaseImage(FRAGMENT_FLAG_IMAGE);
+	    imageWithFragment = new OverlayIcon(baseImage, fragement,
+		    OverlayIcon.BOTTOM_RIGHT).createImage();
+	    imageRegistry.put(imageWithFragmentId, imageWithFragment);
+	}
+
+	return imageWithFragment;
+    }
+
+    /**
+     * @return a Image with a flag of the given country
+     */
+    public static Image getLocalIcon(Locale locale) {
+	String imageName;
+	Image image = null;
+
+	if (locale != null && !locale.getCountry().equals("")) {
+	    imageName = File.separatorChar + "countries" + File.separatorChar
+		    + locale.getCountry().toLowerCase() + ".gif";
+	    image = getBaseImage(imageName);
+	} else {
+	    if (locale != null) {
+		imageName = File.separatorChar + "countries"
+			+ File.separatorChar + "l_"
+			+ locale.getLanguage().toLowerCase() + ".gif";
+		image = getBaseImage(imageName);
+	    } else {
+		imageName = DEFAULT_LOCALICON.toLowerCase(); // Default locale
+							     // icon
+		image = getBaseImage(imageName);
+	    }
+	}
+
+	if (image == null)
+	    image = getBaseImage(LOCATION_WITHOUT_ICON.toLowerCase());
+	return image;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/RBManagerActivator.java b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/RBManagerActivator.java
new file mode 100644
index 0000000..68faf55
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/RBManagerActivator.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Michael Gasser - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.rbmanager;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class RBManagerActivator extends AbstractUIPlugin {
+    // The plug-in ID
+    public static final String PLUGIN_ID = "org.eclipse.babel.tapiji.tools.rbmanager"; //$NON-NLS-1$
+    // The shared instance
+    private static RBManagerActivator plugin;
+
+    /**
+     * The constructor
+     */
+    public RBManagerActivator() {
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
+     * )
+     */
+    public void start(BundleContext context) throws Exception {
+	super.start(context);
+	plugin = this;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
+     * )
+     */
+    public void stop(BundleContext context) throws Exception {
+	plugin = null;
+	super.stop(context);
+    }
+
+    /**
+     * Returns the shared instance
+     * 
+     * @return the shared instance
+     */
+    public static RBManagerActivator getDefault() {
+	return plugin;
+    }
+
+    public static ImageDescriptor getImageDescriptor(String name) {
+	String path = "icons/" + name;
+
+	return imageDescriptorFromPlugin(PLUGIN_ID, path);
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/auditor/RBLocation.java b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/auditor/RBLocation.java
new file mode 100644
index 0000000..4d7ed6f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/auditor/RBLocation.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Michael Gasser - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.rbmanager.auditor;
+
+import java.io.Serializable;
+
+import org.eclipse.babel.tapiji.tools.core.extensions.ILocation;
+import org.eclipse.core.resources.IFile;
+
+public class RBLocation implements ILocation {
+    private IFile file;
+    private int startPos, endPos;
+    private String language;
+    private Serializable data;
+    private ILocation sameValuePartner;
+
+    public RBLocation(IFile file, int startPos, int endPos, String language) {
+	this.file = file;
+	this.startPos = startPos;
+	this.endPos = endPos;
+	this.language = language;
+    }
+
+    public RBLocation(IFile file, int startPos, int endPos, String language,
+	    ILocation sameValuePartner) {
+	this(file, startPos, endPos, language);
+	this.sameValuePartner = sameValuePartner;
+    }
+
+    @Override
+    public IFile getFile() {
+	return file;
+    }
+
+    @Override
+    public int getStartPos() {
+	return startPos;
+    }
+
+    @Override
+    public int getEndPos() {
+	return endPos;
+    }
+
+    @Override
+    public String getLiteral() {
+	return language;
+    }
+
+    @Override
+    public Serializable getData() {
+	return data;
+    }
+
+    public void setData(Serializable data) {
+	this.data = data;
+    }
+
+    public ILocation getSameValuePartner() {
+	return sameValuePartner;
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/auditor/ResourceBundleAuditor.java b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/auditor/ResourceBundleAuditor.java
new file mode 100644
index 0000000..a0a2e99
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/auditor/ResourceBundleAuditor.java
@@ -0,0 +1,262 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Michael Gasser - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.rbmanager.auditor;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.babel.core.configuration.ConfigurationManager;
+import org.eclipse.babel.core.configuration.IConfiguration;
+import org.eclipse.babel.core.message.IMessage;
+import org.eclipse.babel.core.message.IMessagesBundleGroup;
+import org.eclipse.babel.tapiji.tools.core.extensions.ILocation;
+import org.eclipse.babel.tapiji.tools.core.extensions.IMarkerConstants;
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.extensions.I18nRBAuditor;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.RBFileUtils;
+import org.eclipse.babel.tapiji.tools.rbmanager.auditor.quickfix.MissingLanguageResolution;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.ui.IMarkerResolution;
+
+/**
+ * 
+ */
+public class ResourceBundleAuditor extends I18nRBAuditor {
+    private static final String LANGUAGE_ATTRIBUTE = "key";
+
+    private List<ILocation> unspecifiedKeys = new LinkedList<ILocation>();
+    private Map<ILocation, ILocation> sameValues = new HashMap<ILocation, ILocation>();
+    private List<ILocation> missingLanguages = new LinkedList<ILocation>();
+    private List<String> seenRBs = new LinkedList<String>();
+
+    @Override
+    public String[] getFileEndings() {
+	return new String[] { "properties" };
+    }
+
+    @Override
+    public String getContextId() {
+	return "resourcebundle";
+    }
+
+    @Override
+    public List<ILocation> getUnspecifiedKeyReferences() {
+	return unspecifiedKeys;
+    }
+
+    @Override
+    public Map<ILocation, ILocation> getSameValuesReferences() {
+	return sameValues;
+    }
+
+    @Override
+    public List<ILocation> getMissingLanguageReferences() {
+	return missingLanguages;
+    }
+
+    /*
+     * Forgets all save rbIds in seenRB and reset all problem-lists
+     */
+    @Override
+    public void resetProblems() {
+	unspecifiedKeys = new LinkedList<ILocation>();
+	sameValues = new HashMap<ILocation, ILocation>();
+	missingLanguages = new LinkedList<ILocation>();
+	seenRBs = new LinkedList<String>();
+    }
+
+    /*
+     * Finds the corresponding ResouceBundle for the resource. Checks if the
+     * ResourceBundle is already audit and it is not already executed audit the
+     * hole ResourceBundle and save the rbId in seenRB
+     */
+    @Override
+    public void audit(IResource resource) {
+	if (!RBFileUtils.isResourceBundleFile(resource)) {
+	    return;
+	}
+
+	IFile file = (IFile) resource;
+	String rbId = RBFileUtils.getCorrespondingResourceBundleId(file);
+
+	if (!seenRBs.contains(rbId)) {
+	    ResourceBundleManager rbmanager = ResourceBundleManager
+		    .getManager(file.getProject());
+	    audit(rbId, rbmanager);
+	    seenRBs.add(rbId);
+	} else {
+	    return;
+	}
+    }
+
+    /*
+     * audits all files of a resourcebundle
+     */
+    public void audit(String rbId, ResourceBundleManager rbmanager) {
+	IConfiguration configuration = ConfigurationManager.getInstance()
+		.getConfiguration();
+	IMessagesBundleGroup bundlegroup = rbmanager.getResourceBundle(rbId);
+	Collection<IResource> bundlefile = rbmanager.getResourceBundles(rbId);
+	String[] keys = bundlegroup.getMessageKeys();
+
+	for (IResource r : bundlefile) {
+	    IFile f1 = (IFile) r;
+
+	    for (String key : keys) {
+		// check if all keys have a value
+
+		if (auditUnspecifiedKey(f1, key, bundlegroup)) {
+		    /* do nothing - all just done */
+		} else {
+		    // check if a key has the same value like a key of an other
+		    // properties-file
+		    if (configuration.getAuditSameValue()
+			    && bundlefile.size() > 1) {
+			for (IResource r2 : bundlefile) {
+			    IFile f2 = (IFile) r2;
+			    auditSameValues(f1, f2, key, bundlegroup);
+			}
+		    }
+		}
+	    }
+	}
+
+	if (configuration.getAuditMissingLanguage()) {
+	    // checks if the resourcebundle supports all project-languages
+	    Set<Locale> rbLocales = rbmanager.getProvidedLocales(rbId);
+	    Set<Locale> projectLocales = rbmanager.getProjectProvidedLocales();
+
+	    auditMissingLanguage(rbLocales, projectLocales, rbmanager, rbId);
+	}
+    }
+
+    /*
+     * Audits the file if the key is not specified. If the value is null reports
+     * a problem.
+     */
+    private boolean auditUnspecifiedKey(IFile f1, String key,
+	    IMessagesBundleGroup bundlegroup) {
+	if (bundlegroup.getMessage(key, RBFileUtils.getLocale(f1)) == null) {
+	    int pos = calculateKeyLine(key, f1);
+	    unspecifiedKeys.add(new RBLocation(f1, pos, pos + 1, key));
+	    return true;
+	} else {
+	    return false;
+	}
+    }
+
+    /*
+     * Compares a key in different files and reports a problem, if the values
+     * are same. It doesn't compare the files if one file is the Default-file
+     */
+    private void auditSameValues(IFile f1, IFile f2, String key,
+	    IMessagesBundleGroup bundlegroup) {
+	Locale l1 = RBFileUtils.getLocale(f1);
+	Locale l2 = RBFileUtils.getLocale(f2);
+	
+	if (l1 != null && l2 != null && !l2.equals(l1)) {
+	    IMessage message = bundlegroup.getMessage(key, l2);
+
+	    if (message != null) {
+		if (bundlegroup.getMessage(key, l1).getValue()
+			.equals(message.getValue())) {
+		    int pos1 = calculateKeyLine(key, f1);
+		    int pos2 = calculateKeyLine(key, f2);
+		    sameValues.put(new RBLocation(f1, pos1, pos1 + 1, key),
+			    new RBLocation(f2, pos2, pos2 + 1, key));
+		}
+	    }
+	}
+    }
+
+    /*
+     * Checks if the resourcebundle supports all project-languages and report
+     * missing languages.
+     */
+    private void auditMissingLanguage(Set<Locale> rbLocales,
+	    Set<Locale> projectLocales, ResourceBundleManager rbmanager,
+	    String rbId) {
+	for (Locale pLocale : projectLocales) {
+	    if (!rbLocales.contains(pLocale)) {
+		String language = pLocale != null ? pLocale.toString()
+			: ResourceBundleManager.defaultLocaleTag;
+
+		// Add Warning to default-file or a random chosen file
+		IResource representative = rbmanager.getResourceBundleFile(
+			rbId, null);
+		if (representative == null) {
+		    representative = rbmanager.getRandomFile(rbId);
+		}
+		missingLanguages.add(new RBLocation((IFile) representative, 1,
+			2, language));
+	    }
+	}
+    }
+
+    /*
+     * Finds a position where the key is located or missing
+     */
+    private int calculateKeyLine(String key, IFile file) {
+	int linenumber = 1;
+	try {
+	    // if (!Boolean.valueOf(System.getProperty("dirty"))) {
+	    // System.setProperty("dirty", "true");
+	    file.refreshLocal(IFile.DEPTH_ZERO, null);
+	    InputStream is = file.getContents();
+	    BufferedReader bf = new BufferedReader(new InputStreamReader(is));
+	    String line;
+	    while ((line = bf.readLine()) != null) {
+		if ((!line.isEmpty()) && (!line.startsWith("#"))
+			&& (line.compareTo(key) > 0)) {
+		    return linenumber;
+		}
+		linenumber++;
+	    }
+	    // System.setProperty("dirty", "false");
+	    // }
+	} catch (CoreException e) {
+	    e.printStackTrace();
+	} catch (IOException e) {
+	    e.printStackTrace();
+	}
+	return linenumber;
+    }
+
+    @Override
+    public List<IMarkerResolution> getMarkerResolutions(IMarker marker) {
+	List<IMarkerResolution> resolutions = new ArrayList<IMarkerResolution>();
+
+	switch (marker.getAttribute("cause", -1)) {
+	case IMarkerConstants.CAUSE_MISSING_LANGUAGE:
+	    Locale l = new Locale(marker.getAttribute(LANGUAGE_ATTRIBUTE, "")); // TODO
+										// change
+										// Name
+	    resolutions.add(new MissingLanguageResolution(l));
+	    break;
+	}
+
+	return resolutions;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/auditor/quickfix/MissingLanguageResolution.java b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/auditor/quickfix/MissingLanguageResolution.java
new file mode 100644
index 0000000..912d27e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/auditor/quickfix/MissingLanguageResolution.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Michael Gasser - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.rbmanager.auditor.quickfix;
+
+import java.util.Locale;
+
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.LanguageUtils;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IMarkerResolution2;
+
+public class MissingLanguageResolution implements IMarkerResolution2 {
+
+    private Locale language;
+
+    public MissingLanguageResolution(Locale language) {
+	this.language = language;
+    }
+
+    @Override
+    public String getLabel() {
+	return "Add missing language '" + language + "'";
+    }
+
+    @Override
+    public void run(IMarker marker) {
+	IResource res = marker.getResource();
+	String rbId = ResourceBundleManager.getResourceBundleId(res);
+	LanguageUtils.addLanguageToResourceBundle(res.getProject(), rbId,
+		language);
+    }
+
+    @Override
+    public String getDescription() {
+	return "Creates a new localized properties-file with the same basename as the resourcebundle";
+    }
+
+    @Override
+    public Image getImage() {
+	return null;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/model/VirtualContainer.java b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/model/VirtualContainer.java
new file mode 100644
index 0000000..fedbd4f
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/model/VirtualContainer.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Michael Gasser - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.rbmanager.model;
+
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+
+public class VirtualContainer {
+    protected ResourceBundleManager rbmanager;
+    protected IContainer container;
+    protected int rbCount;
+
+    public VirtualContainer(IContainer container1, boolean countResourceBundles) {
+	this.container = container1;
+	rbmanager = ResourceBundleManager.getManager(container.getProject());
+	if (countResourceBundles) {
+	    rbCount = 1;
+	    new Job("count ResourceBundles") {
+		@Override
+		protected IStatus run(IProgressMonitor monitor) {
+		    recount();
+		    return Status.OK_STATUS;
+		}
+	    }.schedule();
+	} else {
+	    rbCount = 0;
+	}
+    }
+
+    protected VirtualContainer(IContainer container) {
+	this.container = container;
+    }
+
+    public VirtualContainer(IContainer container, int rbCount) {
+	this(container, false);
+	this.rbCount = rbCount;
+    }
+
+    public ResourceBundleManager getResourceBundleManager() {
+	if (rbmanager == null) {
+	    rbmanager = ResourceBundleManager
+		    .getManager(container.getProject());
+	}
+	return rbmanager;
+    }
+
+    public IContainer getContainer() {
+	return container;
+    }
+
+    public void setRbCounter(int rbCount) {
+	this.rbCount = rbCount;
+    }
+
+    public int getRbCount() {
+	return rbCount;
+    }
+
+    public void recount() {
+	rbCount = org.eclipse.babel.tapiji.tools.core.ui.utils.RBFileUtils
+		.countRecursiveResourceBundle(container);
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/model/VirtualContentManager.java b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/model/VirtualContentManager.java
new file mode 100644
index 0000000..a6c1447
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/model/VirtualContentManager.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Michael Gasser - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.rbmanager.model;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.resources.IContainer;
+
+public class VirtualContentManager {
+    private Map<IContainer, VirtualContainer> containers = new HashMap<IContainer, VirtualContainer>();
+    private Map<String, VirtualResourceBundle> vResourceBundles = new HashMap<String, VirtualResourceBundle>();
+
+    static private VirtualContentManager singelton = null;
+
+    private VirtualContentManager() {
+    }
+
+    public static VirtualContentManager getVirtualContentManager() {
+	if (singelton == null) {
+	    singelton = new VirtualContentManager();
+	}
+	return singelton;
+    }
+
+    public VirtualContainer getContainer(IContainer container) {
+	return containers.get(container);
+    }
+
+    public void addVContainer(IContainer container, VirtualContainer vContainer) {
+	containers.put(container, vContainer);
+    }
+
+    public void removeVContainer(IContainer container) {
+	vResourceBundles.remove(container);
+    }
+
+    public VirtualResourceBundle getVResourceBundles(String vRbId) {
+	return vResourceBundles.get(vRbId);
+    }
+
+    public void addVResourceBundle(String vRbId,
+	    VirtualResourceBundle vResourceBundle) {
+	vResourceBundles.put(vRbId, vResourceBundle);
+    }
+
+    public void removeVResourceBundle(String vRbId) {
+	vResourceBundles.remove(vRbId);
+    }
+
+    public boolean containsVResourceBundles(String vRbId) {
+	return vResourceBundles.containsKey(vRbId);
+    }
+
+    public void reset() {
+	vResourceBundles.clear();
+	containers.clear();
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/model/VirtualProject.java b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/model/VirtualProject.java
new file mode 100644
index 0000000..44cd4a7
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/model/VirtualProject.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Michael Gasser - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.rbmanager.model;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+
+import org.eclipse.babel.tapiji.tools.core.util.FragmentProjectUtils;
+import org.eclipse.core.resources.IProject;
+
+/**
+ * Representation of a project
+ * 
+ */
+public class VirtualProject extends VirtualContainer {
+    private boolean isFragment;
+    private IProject hostProject;
+    private List<IProject> fragmentProjects = new LinkedList<IProject>();
+
+    // Slow
+    public VirtualProject(IProject project, boolean countResourceBundles) {
+	super(project, countResourceBundles);
+	isFragment = FragmentProjectUtils.isFragment(project);
+	if (isFragment) {
+	    hostProject = FragmentProjectUtils.getFragmentHost(project);
+	} else
+	    fragmentProjects = FragmentProjectUtils.getFragments(project);
+    }
+
+    /*
+     * No fragment search
+     */
+    public VirtualProject(final IProject project, boolean isFragment,
+	    boolean countResourceBundles) {
+	super(project, countResourceBundles);
+	this.isFragment = isFragment;
+	// Display.getDefault().asyncExec(new Runnable() {
+	// @Override
+	// public void run() {
+	// hostProject = FragmentProjectUtils.getFragmentHost(project);
+	// }
+	// });
+    }
+
+    public Set<Locale> getProvidedLocales() {
+	return rbmanager.getProjectProvidedLocales();
+    }
+
+    public boolean isFragment() {
+	return isFragment;
+    }
+
+    public IProject getHostProject() {
+	return hostProject;
+    }
+
+    public boolean hasFragments() {
+	return !fragmentProjects.isEmpty();
+    }
+
+    public List<IProject> getFragmets() {
+	return fragmentProjects;
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/model/VirtualResourceBundle.java b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/model/VirtualResourceBundle.java
new file mode 100644
index 0000000..ce0b96d
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/model/VirtualResourceBundle.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Michael Gasser - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.rbmanager.model;
+
+import java.util.Collection;
+
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IPath;
+
+public class VirtualResourceBundle {
+    private String resourcebundlename;
+    private String resourcebundleId;
+    private ResourceBundleManager rbmanager;
+
+    public VirtualResourceBundle(String rbname, String rbId,
+	    ResourceBundleManager rbmanager) {
+	this.rbmanager = rbmanager;
+	resourcebundlename = rbname;
+	resourcebundleId = rbId;
+    }
+
+    public ResourceBundleManager getResourceBundleManager() {
+	return rbmanager;
+    }
+
+    public String getResourceBundleId() {
+	return resourcebundleId;
+    }
+
+    @Override
+    public String toString() {
+	return resourcebundleId;
+    }
+
+    public IPath getFullPath() {
+	return rbmanager.getRandomFile(resourcebundleId).getFullPath();
+    }
+
+    public String getName() {
+	return resourcebundlename;
+    }
+
+    public Collection<IResource> getFiles() {
+	return rbmanager.getResourceBundles(resourcebundleId);
+    }
+
+    public IFile getRandomFile() {
+	return rbmanager.getRandomFile(resourcebundleId);
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/ui/hover/Hover.java b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/ui/hover/Hover.java
new file mode 100644
index 0000000..49d7290
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/ui/hover/Hover.java
@@ -0,0 +1,119 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Michael Gasser - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.rbmanager.ui.hover;
+
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseTrackAdapter;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.Widget;
+
+public class Hover {
+    private Shell hoverShell;
+    private Point hoverPosition;
+    private List<HoverInformant> informant;
+
+    public Hover(Shell parent, List<HoverInformant> informant) {
+	this.informant = informant;
+	hoverShell = new Shell(parent, SWT.ON_TOP | SWT.TOOL);
+	Display display = hoverShell.getDisplay();
+
+	GridLayout gridLayout = new GridLayout(1, false);
+	gridLayout.verticalSpacing = 2;
+	hoverShell.setLayout(gridLayout);
+
+	hoverShell.setBackground(display
+		.getSystemColor(SWT.COLOR_INFO_BACKGROUND));
+	hoverShell.setForeground(display
+		.getSystemColor(SWT.COLOR_INFO_FOREGROUND));
+    }
+
+    private void setHoverLocation(Shell shell, Point position) {
+	Rectangle displayBounds = shell.getDisplay().getBounds();
+	Rectangle shellBounds = shell.getBounds();
+	shellBounds.x = Math.max(
+		Math.min(position.x + 1, displayBounds.width
+			- shellBounds.width), 0);
+	shellBounds.y = Math.max(
+		Math.min(position.y + 16, displayBounds.height
+			- (shellBounds.height + 1)), 0);
+	shell.setBounds(shellBounds);
+    }
+
+    public void activateHoverHelp(final Control control) {
+
+	control.addMouseListener(new MouseAdapter() {
+	    public void mouseDown(MouseEvent e) {
+		if (hoverShell != null && hoverShell.isVisible()) {
+		    hoverShell.setVisible(false);
+		}
+	    }
+	});
+
+	control.addMouseTrackListener(new MouseTrackAdapter() {
+	    public void mouseExit(MouseEvent e) {
+		if (hoverShell != null && hoverShell.isVisible())
+		    hoverShell.setVisible(false);
+	    }
+
+	    public void mouseHover(MouseEvent event) {
+		Point pt = new Point(event.x, event.y);
+		Widget widget = event.widget;
+		if (widget instanceof ToolBar) {
+		    ToolBar w = (ToolBar) widget;
+		    widget = w.getItem(pt);
+		}
+		if (widget instanceof Table) {
+		    Table w = (Table) widget;
+		    widget = w.getItem(pt);
+		}
+		if (widget instanceof Tree) {
+		    Tree w = (Tree) widget;
+		    widget = w.getItem(pt);
+		}
+		if (widget == null) {
+		    hoverShell.setVisible(false);
+		    return;
+		}
+		hoverPosition = control.toDisplay(pt);
+
+		boolean show = false;
+		Object data = widget.getData();
+
+		for (HoverInformant hi : informant) {
+		    hi.getInfoComposite(data, hoverShell);
+		    if (hi.show())
+			show = true;
+		}
+
+		if (show) {
+		    hoverShell.pack();
+		    hoverShell.layout();
+		    setHoverLocation(hoverShell, hoverPosition);
+		    hoverShell.setVisible(true);
+		} else
+		    hoverShell.setVisible(false);
+
+	    }
+	});
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/ui/hover/HoverInformant.java b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/ui/hover/HoverInformant.java
new file mode 100644
index 0000000..88c6cdd
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/ui/hover/HoverInformant.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Michael Gasser - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.rbmanager.ui.hover;
+
+import org.eclipse.swt.widgets.Composite;
+
+public interface HoverInformant {
+
+    public Composite getInfoComposite(Object data, Composite parent);
+
+    public boolean show();
+}
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/ui/view/toolbarItems/ExpandAllActionDelegate.java b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/ui/view/toolbarItems/ExpandAllActionDelegate.java
new file mode 100644
index 0000000..18b99ca
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/ui/view/toolbarItems/ExpandAllActionDelegate.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Michael Gasser - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.rbmanager.ui.view.toolbarItems;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.AbstractTreeViewer;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.navigator.CommonNavigator;
+import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.progress.UIJob;
+
+public class ExpandAllActionDelegate implements IViewActionDelegate {
+    private CommonViewer viewer;
+
+    @Override
+    public void run(IAction action) {
+	Object data = viewer.getControl().getData();
+
+	for (final IProject p : ((IWorkspaceRoot) data).getProjects()) {
+	    UIJob job = new UIJob("expand Projects") {
+		@Override
+		public IStatus runInUIThread(IProgressMonitor monitor) {
+		    viewer.expandToLevel(p, AbstractTreeViewer.ALL_LEVELS);
+		    return Status.OK_STATUS;
+		}
+	    };
+
+	    job.schedule();
+	}
+    }
+
+    @Override
+    public void selectionChanged(IAction action, ISelection selection) {
+	// TODO Auto-generated method stub
+    }
+
+    @Override
+    public void init(IViewPart view) {
+	viewer = ((CommonNavigator) view).getCommonViewer();
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/ui/view/toolbarItems/ToggleFilterActionDelegate.java b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/ui/view/toolbarItems/ToggleFilterActionDelegate.java
new file mode 100644
index 0000000..b5f4093
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/ui/view/toolbarItems/ToggleFilterActionDelegate.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Michael Gasser - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.rbmanager.ui.view.toolbarItems;
+
+import org.eclipse.babel.tapiji.tools.rbmanager.RBManagerActivator;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.navigator.CommonNavigator;
+import org.eclipse.ui.navigator.ICommonFilterDescriptor;
+import org.eclipse.ui.navigator.INavigatorContentService;
+import org.eclipse.ui.navigator.INavigatorFilterService;
+
+public class ToggleFilterActionDelegate implements IViewActionDelegate {
+    private INavigatorFilterService filterService;
+    private boolean active;
+    private static final String[] FILTER = { RBManagerActivator.PLUGIN_ID
+	    + ".filter.ProblematicResourceBundleFiles" };
+
+    @Override
+    public void run(IAction action) {
+	if (active == true) {
+	    filterService.activateFilterIdsAndUpdateViewer(new String[0]);
+	    active = false;
+	} else {
+	    filterService.activateFilterIdsAndUpdateViewer(FILTER);
+	    active = true;
+	}
+    }
+
+    @Override
+    public void selectionChanged(IAction action, ISelection selection) {
+	// Active when content change
+    }
+
+    @Override
+    public void init(IViewPart view) {
+	INavigatorContentService contentService = ((CommonNavigator) view)
+		.getCommonViewer().getNavigatorContentService();
+
+	filterService = contentService.getFilterService();
+	filterService.activateFilterIdsAndUpdateViewer(new String[0]);
+	active = false;
+    }
+
+    @SuppressWarnings("unused")
+    private String[] getActiveFilterIds() {
+	ICommonFilterDescriptor[] fds = filterService
+		.getVisibleFilterDescriptors();
+	String activeFilterIds[] = new String[fds.length];
+
+	for (int i = 0; i < fds.length; i++)
+	    activeFilterIds[i] = fds[i].getId();
+
+	return activeFilterIds;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/LinkHelper.java b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/LinkHelper.java
new file mode 100644
index 0000000..1b98016
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/LinkHelper.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Michael Gasser - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.rbmanager.viewer;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.ide.ResourceUtil;
+import org.eclipse.ui.navigator.ILinkHelper;
+
+/*
+ * Allows 'link with editor'
+ */
+public class LinkHelper implements ILinkHelper {
+
+    public static IStructuredSelection viewer;
+
+    @Override
+    public IStructuredSelection findSelection(IEditorInput anInput) {
+	IFile file = ResourceUtil.getFile(anInput);
+	if (file != null) {
+	    return new StructuredSelection(file);
+	}
+	return StructuredSelection.EMPTY;
+    }
+
+    @Override
+    public void activateEditor(IWorkbenchPage aPage,
+	    IStructuredSelection aSelection) {
+	if (aSelection.getFirstElement() instanceof IFile)
+	    try {
+		IDE.openEditor(aPage, (IFile) aSelection.getFirstElement());
+	    } catch (PartInitException e) {/**/
+	    }
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/ResourceBundleContentProvider.java b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/ResourceBundleContentProvider.java
new file mode 100644
index 0000000..50ae03a
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/ResourceBundleContentProvider.java
@@ -0,0 +1,466 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Michael Gasser - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.rbmanager.viewer;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.babel.tapiji.tools.core.model.IResourceBundleChangedListener;
+import org.eclipse.babel.tapiji.tools.core.model.manager.ResourceBundleChangedEvent;
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.preferences.TapiJIPreferences;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.RBFileUtils;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.ResourceUtils;
+import org.eclipse.babel.tapiji.tools.core.util.FragmentProjectUtils;
+import org.eclipse.babel.tapiji.tools.rbmanager.model.VirtualContainer;
+import org.eclipse.babel.tapiji.tools.rbmanager.model.VirtualContentManager;
+import org.eclipse.babel.tapiji.tools.rbmanager.model.VirtualProject;
+import org.eclipse.babel.tapiji.tools.rbmanager.model.VirtualResourceBundle;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.ui.progress.UIJob;
+
+/**
+ * 
+ * 
+ */
+public class ResourceBundleContentProvider implements ITreeContentProvider,
+	IResourceChangeListener, IPropertyChangeListener,
+	IResourceBundleChangedListener {
+    private static final boolean FRAGMENT_PROJECTS_IN_CONTENT = false;
+    private static final boolean SHOW_ONLY_PROJECTS_WITH_RBS = true;
+    private StructuredViewer viewer;
+    private VirtualContentManager vcManager;
+    private UIJob refresh;
+    private IWorkspaceRoot root;
+
+    private List<IProject> listenedProjects;
+
+    /**
+	 * 
+	 */
+    public ResourceBundleContentProvider() {
+	ResourcesPlugin.getWorkspace().addResourceChangeListener(this,
+		IResourceChangeEvent.POST_CHANGE);
+	TapiJIPreferences.addPropertyChangeListener(this);
+	vcManager = VirtualContentManager.getVirtualContentManager();
+	listenedProjects = new LinkedList<IProject>();
+    }
+
+    @Override
+    public Object[] getElements(Object inputElement) {
+	return getChildren(inputElement);
+    }
+
+    @Override
+    public Object[] getChildren(final Object parentElement) {
+	Object[] children = null;
+
+	if (parentElement instanceof IWorkspaceRoot) {
+	    root = (IWorkspaceRoot) parentElement;
+	    try {
+		IResource[] members = ((IWorkspaceRoot) parentElement)
+			.members();
+
+		List<Object> displayedProjects = new ArrayList<Object>();
+		for (IResource r : members) {
+		    if (r instanceof IProject) {
+			IProject p = (IProject) r;
+			if (FragmentProjectUtils.isFragment(r.getProject())) {
+			    if (vcManager.getContainer(p) == null) {
+				vcManager.addVContainer(p, new VirtualProject(
+					p, true, false));
+			    }
+			    if (FRAGMENT_PROJECTS_IN_CONTENT) {
+				displayedProjects.add(r);
+			    }
+			} else {
+			    if (SHOW_ONLY_PROJECTS_WITH_RBS) {
+				VirtualProject vP;
+				if ((vP = (VirtualProject) vcManager
+					.getContainer(p)) == null) {
+				    vP = new VirtualProject(p, false, true);
+				    vcManager.addVContainer(p, vP);
+				    registerResourceBundleListner(p);
+				}
+
+				if (vP.getRbCount() > 0) {
+				    displayedProjects.add(p);
+				}
+			    } else {
+				displayedProjects.add(p);
+			    }
+			}
+		    }
+		}
+
+		children = displayedProjects.toArray();
+		return children;
+	    } catch (CoreException e) {
+	    }
+	}
+
+	// if (parentElement instanceof IProject) {
+	// final IProject iproject = (IProject) parentElement;
+	// VirtualContainer vproject = vcManager.getContainer(iproject);
+	// if (vproject == null){
+	// vproject = new VirtualProject(iproject, true);
+	// vcManager.addVContainer(iproject, vproject);
+	// }
+	// }
+
+	if (parentElement instanceof IContainer) {
+	    IContainer container = (IContainer) parentElement;
+	    if (!((VirtualProject) vcManager
+		    .getContainer(((IResource) parentElement).getProject()))
+		    .isFragment()) {
+		try {
+		    children = addChildren(container);
+		} catch (CoreException e) {/**/
+		}
+	    }
+	}
+
+	if (parentElement instanceof VirtualResourceBundle) {
+	    VirtualResourceBundle virtualrb = (VirtualResourceBundle) parentElement;
+	    ResourceBundleManager rbmanager = virtualrb
+		    .getResourceBundleManager();
+	    children = rbmanager.getResourceBundles(
+		    virtualrb.getResourceBundleId()).toArray();
+	}
+
+	return children != null ? children : new Object[0];
+    }
+
+    /*
+     * Returns all ResourceBundles and sub-containers (with ResourceBundles in
+     * their subtree) of a Container
+     */
+    private Object[] addChildren(IContainer container) throws CoreException {
+	Map<String, Object> children = new HashMap<String, Object>();
+
+	VirtualProject p = (VirtualProject) vcManager.getContainer(container
+		.getProject());
+	List<IResource> members = new ArrayList<IResource>(
+		Arrays.asList(container.members()));
+
+	// finds files in the corresponding fragment-projects folder
+	if (p.hasFragments()) {
+	    List<IContainer> folders = ResourceUtils.getCorrespondingFolders(
+		    container, p.getFragmets());
+	    for (IContainer f : folders) {
+		for (IResource r : f.members()) {
+		    if (r instanceof IFile) {
+			members.add(r);
+		    }
+		}
+	    }
+	}
+
+	for (IResource r : members) {
+
+	    if (r instanceof IFile) {
+		String resourcebundleId = RBFileUtils
+			.getCorrespondingResourceBundleId((IFile) r);
+		if (resourcebundleId != null
+			&& (!children.containsKey(resourcebundleId))) {
+		    VirtualResourceBundle vrb;
+
+		    String vRBId;
+
+		    if (!p.isFragment()) {
+			vRBId = r.getProject() + "." + resourcebundleId;
+		    } else {
+			vRBId = p.getHostProject() + "." + resourcebundleId;
+		    }
+
+		    VirtualResourceBundle vResourceBundle = vcManager
+			    .getVResourceBundles(vRBId);
+		    if (vResourceBundle == null) {
+			String resourcebundleName = ResourceBundleManager
+				.getResourceBundleName(r);
+			vrb = new VirtualResourceBundle(
+				resourcebundleName,
+				resourcebundleId,
+				ResourceBundleManager.getManager(r.getProject()));
+			vcManager.addVResourceBundle(vRBId, vrb);
+
+		    } else {
+			vrb = vcManager.getVResourceBundles(vRBId);
+		    }
+
+		    children.put(resourcebundleId, vrb);
+		}
+	    }
+	    if (r instanceof IContainer) {
+		if (!r.isDerived()) { // Don't show the 'bin' folder
+		    VirtualContainer vContainer = vcManager
+			    .getContainer((IContainer) r);
+
+		    if (vContainer == null) {
+			int count = RBFileUtils
+				.countRecursiveResourceBundle((IContainer) r);
+			vContainer = new VirtualContainer(container, count);
+			vcManager.addVContainer((IContainer) r, vContainer);
+		    }
+
+		    if (vContainer.getRbCount() != 0) {
+			// without resourcebundles
+			children.put("" + children.size(), r);
+		    }
+		}
+	    }
+	}
+	return children.values().toArray();
+    }
+
+    @Override
+    public Object getParent(Object element) {
+	if (element instanceof IContainer) {
+	    return ((IContainer) element).getParent();
+	}
+	if (element instanceof IFile) {
+	    String rbId = RBFileUtils
+		    .getCorrespondingResourceBundleId((IFile) element);
+	    return vcManager.getVResourceBundles(rbId);
+	}
+	if (element instanceof VirtualResourceBundle) {
+	    Iterator<IResource> i = new HashSet<IResource>(
+		    ((VirtualResourceBundle) element).getFiles()).iterator();
+	    if (i.hasNext()) {
+		return i.next().getParent();
+	    }
+	}
+	return null;
+    }
+
+    @Override
+    public boolean hasChildren(Object element) {
+	if (element instanceof IWorkspaceRoot) {
+	    try {
+		if (((IWorkspaceRoot) element).members().length > 0) {
+		    return true;
+		}
+	    } catch (CoreException e) {
+	    }
+	}
+	if (element instanceof IProject) {
+	    VirtualProject vProject = (VirtualProject) vcManager
+		    .getContainer((IProject) element);
+	    if (vProject != null && vProject.isFragment()) {
+		return false;
+	    }
+	}
+	if (element instanceof IContainer) {
+	    try {
+		VirtualContainer vContainer = vcManager
+			.getContainer((IContainer) element);
+		if (vContainer != null) {
+		    return vContainer.getRbCount() > 0 ? true : false;
+		} else if (((IContainer) element).members().length > 0) {
+		    return true;
+		}
+	    } catch (CoreException e) {
+	    }
+	}
+	if (element instanceof VirtualResourceBundle) {
+	    return true;
+	}
+	return false;
+    }
+
+    @Override
+    public void dispose() {
+	ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
+	TapiJIPreferences.removePropertyChangeListener(this);
+	vcManager.reset();
+	unregisterAllResourceBundleListner();
+    }
+
+    @Override
+    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+	this.viewer = (StructuredViewer) viewer;
+    }
+
+    @Override
+    // TODO remove ResourceChangelistner and add ResourceBundleChangelistner
+    public void resourceChanged(final IResourceChangeEvent event) {
+
+	final IResourceDeltaVisitor visitor = new IResourceDeltaVisitor() {
+	    @Override
+	    public boolean visit(IResourceDelta delta) throws CoreException {
+		final IResource res = delta.getResource();
+
+		if (!RBFileUtils.isResourceBundleFile(res)) {
+		    return true;
+		}
+
+		switch (delta.getKind()) {
+		case IResourceDelta.REMOVED:
+		    recountParenthierarchy(res.getParent());
+		    break;
+		// TODO remove unused VirtualResourceBundles and
+		// VirtualContainer from vcManager
+		case IResourceDelta.ADDED:
+		    checkListner(res);
+		    break;
+		case IResourceDelta.CHANGED:
+		    if (delta.getFlags() != IResourceDelta.MARKERS) {
+			return true;
+		    }
+		    break;
+		}
+
+		refresh(res);
+
+		return true;
+	    }
+	};
+
+	try {
+	    event.getDelta().accept(visitor);
+	} catch (Exception e) {
+	    e.printStackTrace();
+	}
+    }
+
+    @Override
+    public void resourceBundleChanged(ResourceBundleChangedEvent event) {
+	ResourceBundleManager rbmanager = ResourceBundleManager
+		.getManager(event.getProject());
+
+	switch (event.getType()) {
+	case ResourceBundleChangedEvent.ADDED:
+	case ResourceBundleChangedEvent.DELETED:
+	    IResource res = rbmanager.getRandomFile(event.getBundle());
+	    IContainer hostContainer;
+
+	    if (res == null) {
+		try {
+		    hostContainer = event.getProject()
+			    .getFile(event.getBundle()).getParent();
+		} catch (Exception e) {
+		    refresh(null);
+		    return;
+		}
+	    } else {
+		VirtualProject vProject = (VirtualProject) vcManager
+			.getContainer(res.getProject());
+		if (vProject != null && vProject.isFragment()) {
+		    IProject hostProject = vProject.getHostProject();
+		    hostContainer = ResourceUtils.getCorrespondingFolders(
+			    res.getParent(), hostProject);
+		} else {
+		    hostContainer = res.getParent();
+		}
+	    }
+
+	    recountParenthierarchy(hostContainer);
+	    refresh(null);
+	    break;
+	}
+
+    }
+
+    @Override
+    public void propertyChange(PropertyChangeEvent event) {
+	if (event.getProperty().equals(TapiJIPreferences.NON_RB_PATTERN)) {
+	    vcManager.reset();
+
+	    refresh(root);
+	}
+    }
+
+    // TODO problems with remove a hole ResourceBundle
+    private void recountParenthierarchy(IContainer parent) {
+	if (parent.isDerived()) {
+	    return; // Don't recount the 'bin' folder
+	}
+
+	VirtualContainer vContainer = vcManager.getContainer(parent);
+	if (vContainer != null) {
+	    vContainer.recount();
+	}
+
+	if ((parent instanceof IFolder)) {
+	    recountParenthierarchy(parent.getParent());
+	}
+    }
+
+    private void refresh(final IResource res) {
+	if (refresh == null || refresh.getResult() != null) {
+	    refresh = new UIJob("refresh viewer") {
+		@Override
+		public IStatus runInUIThread(IProgressMonitor monitor) {
+		    if (viewer != null && !viewer.getControl().isDisposed()) {
+			if (res != null) {
+			    viewer.refresh(res.getProject(), true); // refresh(res);
+			} else {
+			    viewer.refresh();
+			}
+		    }
+		    return Status.OK_STATUS;
+		}
+	    };
+	}
+	refresh.schedule();
+    }
+
+    private void registerResourceBundleListner(IProject p) {
+	listenedProjects.add(p);
+
+	ResourceBundleManager rbmanager = ResourceBundleManager.getManager(p);
+	for (String rbId : rbmanager.getResourceBundleIdentifiers()) {
+	    rbmanager.registerResourceBundleChangeListener(rbId, this);
+	}
+    }
+
+    private void unregisterAllResourceBundleListner() {
+	for (IProject p : listenedProjects) {
+	    ResourceBundleManager rbmanager = ResourceBundleManager
+		    .getManager(p);
+	    for (String rbId : rbmanager.getResourceBundleIdentifiers()) {
+		rbmanager.unregisterResourceBundleChangeListener(rbId, this);
+	    }
+	}
+    }
+
+    private void checkListner(IResource res) {
+	ResourceBundleManager rbmanager = ResourceBundleManager.getManager(res
+		.getProject());
+	String rbId = ResourceBundleManager.getResourceBundleId(res);
+	rbmanager.registerResourceBundleChangeListener(rbId, this);
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/ResourceBundleLabelProvider.java b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/ResourceBundleLabelProvider.java
new file mode 100644
index 0000000..fc14794
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/ResourceBundleLabelProvider.java
@@ -0,0 +1,207 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Michael Gasser - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.rbmanager.viewer;
+
+import java.util.List;
+import java.util.Locale;
+
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.EditorUtils;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.ResourceUtils;
+import org.eclipse.babel.tapiji.tools.core.util.FragmentProjectUtils;
+import org.eclipse.babel.tapiji.tools.rbmanager.ImageUtils;
+import org.eclipse.babel.tapiji.tools.rbmanager.model.VirtualContainer;
+import org.eclipse.babel.tapiji.tools.rbmanager.model.VirtualContentManager;
+import org.eclipse.babel.tapiji.tools.rbmanager.model.VirtualProject;
+import org.eclipse.babel.tapiji.tools.rbmanager.model.VirtualResourceBundle;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.navigator.IDescriptionProvider;
+
+public class ResourceBundleLabelProvider extends LabelProvider implements
+	ILabelProvider, IDescriptionProvider {
+    VirtualContentManager vcManager;
+
+    public ResourceBundleLabelProvider() {
+	super();
+	vcManager = VirtualContentManager.getVirtualContentManager();
+    }
+
+    @Override
+    public Image getImage(Object element) {
+	Image returnImage = null;
+	if (element instanceof IProject) {
+	    VirtualProject p = (VirtualProject) vcManager
+		    .getContainer((IProject) element);
+	    if (p != null && p.isFragment()) {
+		return returnImage = ImageUtils
+			.getBaseImage(ImageUtils.FRAGMENT_PROJECT_IMAGE);
+	    } else {
+		returnImage = PlatformUI.getWorkbench().getSharedImages()
+			.getImage(ISharedImages.IMG_OBJ_PROJECT);
+	    }
+	}
+	if ((element instanceof IContainer) && (returnImage == null)) {
+	    returnImage = PlatformUI.getWorkbench().getSharedImages()
+		    .getImage(ISharedImages.IMG_OBJ_FOLDER);
+	}
+	if (element instanceof VirtualResourceBundle) {
+	    returnImage = ImageUtils
+		    .getBaseImage(ImageUtils.RESOURCEBUNDLE_IMAGE);
+	}
+	if (element instanceof IFile) {
+	    if (org.eclipse.babel.tapiji.tools.core.ui.utils.RBFileUtils
+		    .isResourceBundleFile((IFile) element)) {
+		Locale l = org.eclipse.babel.tapiji.tools.core.ui.utils.RBFileUtils
+			.getLocale((IFile) element);
+		returnImage = ImageUtils.getLocalIcon(l);
+
+		VirtualProject p = ((VirtualProject) vcManager
+			.getContainer(((IFile) element).getProject()));
+		if (p != null && p.isFragment()) {
+		    returnImage = ImageUtils.getImageWithFragment(returnImage);
+		}
+	    }
+	}
+
+	if (returnImage != null) {
+	    if (checkMarkers(element)) {
+		// Add a Warning Image
+		returnImage = ImageUtils.getImageWithWarning(returnImage);
+	    }
+	}
+	return returnImage;
+    }
+
+    @Override
+    public String getText(Object element) {
+
+	StringBuilder text = new StringBuilder();
+	if (element instanceof IContainer) {
+	    IContainer container = (IContainer) element;
+	    text.append(container.getName());
+
+	    if (element instanceof IProject) {
+		VirtualContainer vproject = vcManager
+			.getContainer((IProject) element);
+		// if (vproject != null && vproject instanceof VirtualFragment)
+		// text.append("�");
+	    }
+
+	    VirtualContainer vContainer = vcManager.getContainer(container);
+	    if (vContainer != null && vContainer.getRbCount() != 0) {
+		text.append(" [" + vContainer.getRbCount() + "]");
+	    }
+
+	}
+	if (element instanceof VirtualResourceBundle) {
+	    text.append(((VirtualResourceBundle) element).getName());
+	}
+	if (element instanceof IFile) {
+	    if (org.eclipse.babel.tapiji.tools.core.ui.utils.RBFileUtils
+		    .isResourceBundleFile((IFile) element)) {
+		Locale locale = org.eclipse.babel.tapiji.tools.core.ui.utils.RBFileUtils
+			.getLocale((IFile) element);
+		text.append("     ");
+		if (locale != null) {
+		    text.append(locale);
+		} else {
+		    text.append("default");
+		}
+
+		VirtualProject vproject = (VirtualProject) vcManager
+			.getContainer(((IFile) element).getProject());
+		if (vproject != null && vproject.isFragment()) {
+		    text.append("�");
+		}
+	    }
+	}
+	if (element instanceof String) {
+	    text.append(element);
+	}
+	return text.toString();
+    }
+
+    @Override
+    public String getDescription(Object anElement) {
+	if (anElement instanceof IResource) {
+	    return ((IResource) anElement).getName();
+	}
+	if (anElement instanceof VirtualResourceBundle) {
+	    return ((VirtualResourceBundle) anElement).getName();
+	}
+	return null;
+    }
+
+    private boolean checkMarkers(Object element) {
+	if (element instanceof IResource) {
+	    IMarker[] ms = null;
+	    try {
+		if ((ms = ((IResource) element).findMarkers(
+			EditorUtils.RB_MARKER_ID, true,
+			IResource.DEPTH_INFINITE)).length > 0) {
+		    return true;
+		}
+
+		if (element instanceof IContainer) {
+		    List<IContainer> fragmentContainer = ResourceUtils
+			    .getCorrespondingFolders(
+				    (IContainer) element,
+				    FragmentProjectUtils
+					    .getFragments(((IContainer) element)
+						    .getProject()));
+
+		    IMarker[] fragment_ms;
+		    for (IContainer c : fragmentContainer) {
+			try {
+			    if (c.exists()) {
+				fragment_ms = c.findMarkers(
+					EditorUtils.RB_MARKER_ID, false,
+					IResource.DEPTH_INFINITE);
+				ms = org.eclipse.babel.tapiji.tools.core.util.EditorUtils
+					.concatMarkerArray(ms, fragment_ms);
+			    }
+			} catch (CoreException e) {
+			    e.printStackTrace();
+			}
+		    }
+		    if (ms.length > 0) {
+			return true;
+		    }
+		}
+	    } catch (CoreException e) {
+	    }
+	}
+	if (element instanceof VirtualResourceBundle) {
+	    ResourceBundleManager rbmanager = ((VirtualResourceBundle) element)
+		    .getResourceBundleManager();
+	    String id = ((VirtualResourceBundle) element).getResourceBundleId();
+	    for (IResource r : rbmanager.getResourceBundles(id)) {
+		if (org.eclipse.babel.tapiji.tools.core.util.RBFileUtils
+			.hasResourceBundleMarker(r)) {
+		    return true;
+		}
+	    }
+	}
+
+	return false;
+    }
+
+}
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/actions/ExpandAction.java b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/actions/ExpandAction.java
new file mode 100644
index 0000000..b919658
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/actions/ExpandAction.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Michael Gasser - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.rbmanager.viewer.actions;
+
+import java.util.Iterator;
+
+import org.eclipse.babel.tapiji.tools.rbmanager.ImageUtils;
+import org.eclipse.babel.tapiji.tools.rbmanager.RBManagerActivator;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.AbstractTreeViewer;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.navigator.CommonViewer;
+
+public class ExpandAction extends Action implements IAction {
+    private CommonViewer viewer;
+
+    public ExpandAction(CommonViewer viewer) {
+	this.viewer = viewer;
+	setText("Expand Node");
+	setToolTipText("expand node");
+	setImageDescriptor(RBManagerActivator
+		.getImageDescriptor(ImageUtils.EXPAND));
+    }
+
+    @Override
+    public boolean isEnabled() {
+	IStructuredSelection sSelection = (IStructuredSelection) viewer
+		.getSelection();
+	if (sSelection.size() >= 1)
+	    return true;
+	else
+	    return false;
+    }
+
+    @Override
+    public void run() {
+	IStructuredSelection sSelection = (IStructuredSelection) viewer
+		.getSelection();
+	Iterator<?> it = sSelection.iterator();
+	while (it.hasNext()) {
+	    viewer.expandToLevel(it.next(), AbstractTreeViewer.ALL_LEVELS);
+	}
+
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/actions/GeneralActionProvider.java b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/actions/GeneralActionProvider.java
new file mode 100644
index 0000000..4bb15f1
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/actions/GeneralActionProvider.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Michael Gasser - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.rbmanager.viewer.actions;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.babel.tapiji.tools.rbmanager.ui.hover.Hover;
+import org.eclipse.babel.tapiji.tools.rbmanager.ui.hover.HoverInformant;
+import org.eclipse.babel.tapiji.tools.rbmanager.viewer.actions.hoverinformants.I18NProjectInformant;
+import org.eclipse.babel.tapiji.tools.rbmanager.viewer.actions.hoverinformants.RBMarkerInformant;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.navigator.CommonActionProvider;
+import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.navigator.ICommonActionExtensionSite;
+
+public class GeneralActionProvider extends CommonActionProvider {
+    private IAction expandAction;
+
+    public GeneralActionProvider() {
+	// TODO Auto-generated constructor stub
+    }
+
+    @Override
+    public void init(ICommonActionExtensionSite aSite) {
+	super.init(aSite);
+	// init Expand-Action
+	expandAction = new ExpandAction(
+		(CommonViewer) aSite.getStructuredViewer());
+
+	// activate View-Hover
+	List<HoverInformant> informants = new ArrayList<HoverInformant>();
+	informants.add(new I18NProjectInformant());
+	informants.add(new RBMarkerInformant());
+
+	Hover hover = new Hover(Display.getCurrent().getActiveShell(),
+		informants);
+	hover.activateHoverHelp(((CommonViewer) aSite.getStructuredViewer())
+		.getTree());
+    }
+
+    @Override
+    public void fillContextMenu(IMenuManager menu) {
+	menu.appendToGroup("expand", expandAction);
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/actions/OpenVRBAction.java b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/actions/OpenVRBAction.java
new file mode 100644
index 0000000..2b8b958
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/actions/OpenVRBAction.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Michael Gasser - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.rbmanager.viewer.actions;
+
+import org.eclipse.babel.tapiji.tools.core.ui.utils.EditorUtils;
+import org.eclipse.babel.tapiji.tools.rbmanager.RBManagerActivator;
+import org.eclipse.babel.tapiji.tools.rbmanager.model.VirtualResourceBundle;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IWorkbenchPage;
+
+public class OpenVRBAction extends Action {
+    private ISelectionProvider selectionProvider;
+
+    public OpenVRBAction(ISelectionProvider selectionProvider) {
+	this.selectionProvider = selectionProvider;
+    }
+
+    @Override
+    public boolean isEnabled() {
+	IStructuredSelection sSelection = (IStructuredSelection) selectionProvider
+		.getSelection();
+	if (sSelection.size() == 1)
+	    return true;
+	else
+	    return false;
+    }
+
+    @Override
+    public void run() {
+	IStructuredSelection sSelection = (IStructuredSelection) selectionProvider
+		.getSelection();
+	if (sSelection.size() == 1
+		&& sSelection.getFirstElement() instanceof VirtualResourceBundle) {
+	    VirtualResourceBundle vRB = (VirtualResourceBundle) sSelection
+		    .getFirstElement();
+	    IWorkbenchPage wp = RBManagerActivator.getDefault().getWorkbench()
+		    .getActiveWorkbenchWindow().getActivePage();
+
+	    EditorUtils.openEditor(wp, vRB.getRandomFile(),
+		    EditorUtils.RESOURCE_BUNDLE_EDITOR);
+	}
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/actions/VirtualRBActionProvider.java b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/actions/VirtualRBActionProvider.java
new file mode 100644
index 0000000..f1972fc
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/actions/VirtualRBActionProvider.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Michael Gasser - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.rbmanager.viewer.actions;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.navigator.CommonActionProvider;
+import org.eclipse.ui.navigator.ICommonActionConstants;
+import org.eclipse.ui.navigator.ICommonActionExtensionSite;
+
+/*
+ * Will be only active for VirtualResourceBundeles
+ */
+public class VirtualRBActionProvider extends CommonActionProvider {
+    private IAction openAction;
+
+    public VirtualRBActionProvider() {
+	// TODO Auto-generated constructor stub
+    }
+
+    @Override
+    public void init(ICommonActionExtensionSite aSite) {
+	super.init(aSite);
+	openAction = new OpenVRBAction(aSite.getViewSite()
+		.getSelectionProvider());
+    }
+
+    @Override
+    public void fillActionBars(IActionBars actionBars) {
+	actionBars.setGlobalActionHandler(ICommonActionConstants.OPEN,
+		openAction);
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/actions/hoverinformants/I18NProjectInformant.java b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/actions/hoverinformants/I18NProjectInformant.java
new file mode 100644
index 0000000..ae330da
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/actions/hoverinformants/I18NProjectInformant.java
@@ -0,0 +1,232 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Michael Gasser - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.rbmanager.viewer.actions.hoverinformants;
+
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.util.FragmentProjectUtils;
+import org.eclipse.babel.tapiji.tools.rbmanager.ImageUtils;
+import org.eclipse.babel.tapiji.tools.rbmanager.ui.hover.HoverInformant;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+
+public class I18NProjectInformant implements HoverInformant {
+    private String locales;
+    private String fragments;
+    private boolean show = false;
+
+    private Composite infoComposite;
+    private Label localeLabel;
+    private Composite localeGroup;
+    private Label fragmentsLabel;
+    private Composite fragmentsGroup;
+
+    private GridData infoData;
+    private GridData showLocalesData;
+    private GridData showFragmentsData;
+
+    @Override
+    public Composite getInfoComposite(Object data, Composite parent) {
+	show = false;
+
+	if (infoComposite == null) {
+	    infoComposite = new Composite(parent, SWT.NONE);
+	    GridLayout layout = new GridLayout(1, false);
+	    layout.verticalSpacing = 1;
+	    layout.horizontalSpacing = 0;
+	    infoComposite.setLayout(layout);
+
+	    infoData = new GridData(SWT.LEFT, SWT.TOP, true, true);
+	    infoComposite.setLayoutData(infoData);
+	}
+
+	if (data instanceof IProject) {
+	    addLocale(infoComposite, data);
+	    addFragments(infoComposite, data);
+	}
+
+	if (show) {
+	    infoData.heightHint = -1;
+	    infoData.widthHint = -1;
+	} else {
+	    infoData.heightHint = 0;
+	    infoData.widthHint = 0;
+	}
+
+	infoComposite.layout();
+	infoComposite.pack();
+	sinkColor(infoComposite);
+
+	return infoComposite;
+    }
+
+    @Override
+    public boolean show() {
+	return show;
+    }
+
+    private void setColor(Control control) {
+	Display display = control.getParent().getDisplay();
+
+	control.setForeground(display.getSystemColor(SWT.COLOR_INFO_FOREGROUND));
+	control.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND));
+    }
+
+    private void sinkColor(Composite composite) {
+	setColor(composite);
+
+	for (Control c : composite.getChildren()) {
+	    setColor(c);
+	    if (c instanceof Composite) {
+		sinkColor((Composite) c);
+	    }
+	}
+    }
+
+    private void addLocale(Composite parent, Object data) {
+	if (localeGroup == null) {
+	    localeGroup = new Composite(parent, SWT.NONE);
+	    localeLabel = new Label(localeGroup, SWT.SINGLE);
+
+	    showLocalesData = new GridData(SWT.LEFT, SWT.TOP, true, true);
+	    localeGroup.setLayoutData(showLocalesData);
+	}
+
+	locales = getProvidedLocales(data);
+
+	if (locales.length() != 0) {
+	    localeLabel.setText(locales);
+	    localeLabel.pack();
+	    show = true;
+	    // showLocalesData.heightHint = -1;
+	    // showLocalesData.widthHint=-1;
+	} else {
+	    localeLabel.setText("No Language Provided");
+	    localeLabel.pack();
+	    show = true;
+	    // showLocalesData.heightHint = 0;
+	    // showLocalesData.widthHint = 0;
+	}
+
+	// localeGroup.layout();
+	localeGroup.pack();
+    }
+
+    private void addFragments(Composite parent, Object data) {
+	if (fragmentsGroup == null) {
+	    fragmentsGroup = new Composite(parent, SWT.NONE);
+	    GridLayout layout = new GridLayout(1, false);
+	    layout.verticalSpacing = 0;
+	    layout.horizontalSpacing = 0;
+	    fragmentsGroup.setLayout(layout);
+
+	    showFragmentsData = new GridData(SWT.LEFT, SWT.TOP, true, true);
+	    fragmentsGroup.setLayoutData(showFragmentsData);
+
+	    Composite fragmentTitleGroup = new Composite(fragmentsGroup,
+		    SWT.NONE);
+	    layout = new GridLayout(2, false);
+	    layout.verticalSpacing = 0;
+	    layout.horizontalSpacing = 5;
+	    fragmentTitleGroup.setLayout(layout);
+
+	    Label fragmentImageLabel = new Label(fragmentTitleGroup, SWT.NONE);
+	    fragmentImageLabel.setImage(ImageUtils
+		    .getBaseImage(ImageUtils.FRAGMENT_PROJECT_IMAGE));
+	    fragmentImageLabel.pack();
+
+	    Label fragementTitleLabel = new Label(fragmentTitleGroup, SWT.NONE);
+	    fragementTitleLabel.setText("Project Fragments:");
+	    fragementTitleLabel.pack();
+	    fragmentsLabel = new Label(fragmentsGroup, SWT.SINGLE);
+	}
+
+	fragments = getFragmentProjects(data);
+
+	if (fragments.length() != 0) {
+	    fragmentsLabel.setText(fragments);
+	    show = true;
+	    showFragmentsData.heightHint = -1;
+	    showFragmentsData.widthHint = -1;
+	    fragmentsLabel.pack();
+	} else {
+	    showFragmentsData.heightHint = 0;
+	    showFragmentsData.widthHint = 0;
+	}
+
+	fragmentsGroup.layout();
+	fragmentsGroup.pack();
+    }
+
+    private String getProvidedLocales(Object data) {
+	if (data instanceof IProject) {
+	    ResourceBundleManager rbmanger = ResourceBundleManager
+		    .getManager((IProject) data);
+	    Set<Locale> ls = rbmanger.getProjectProvidedLocales();
+
+	    if (ls.size() > 0) {
+		StringBuilder sb = new StringBuilder();
+		sb.append("Provided Languages:\n");
+
+		int i = 0;
+		for (Locale l : ls) {
+		    if (l != null && !l.toString().equals("")) {
+			sb.append(l.getDisplayName());
+		    } else {
+			sb.append("[Default]");
+		    }
+
+		    if (++i != ls.size()) {
+			sb.append(",");
+			if (i % 5 == 0) {
+			    sb.append("\n");
+			} else {
+			    sb.append(" ");
+			}
+		    }
+
+		}
+		return sb.toString();
+	    }
+	}
+
+	return "";
+    }
+
+    private String getFragmentProjects(Object data) {
+	if (data instanceof IProject) {
+	    List<IProject> fragments = FragmentProjectUtils
+		    .getFragments((IProject) data);
+	    if (fragments.size() > 0) {
+		StringBuilder sb = new StringBuilder();
+
+		int i = 0;
+		for (IProject f : fragments) {
+		    sb.append(f.getName());
+		    if (++i != fragments.size()) {
+			sb.append("\n");
+		    }
+		}
+		return sb.toString();
+	    }
+	}
+	return "";
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/actions/hoverinformants/RBMarkerInformant.java b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/actions/hoverinformants/RBMarkerInformant.java
new file mode 100644
index 0000000..3216984
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/actions/hoverinformants/RBMarkerInformant.java
@@ -0,0 +1,281 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Michael Gasser - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.rbmanager.viewer.actions.hoverinformants;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.babel.tapiji.tools.core.ui.ResourceBundleManager;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.EditorUtils;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.ResourceUtils;
+import org.eclipse.babel.tapiji.tools.core.util.FragmentProjectUtils;
+import org.eclipse.babel.tapiji.tools.rbmanager.ImageUtils;
+import org.eclipse.babel.tapiji.tools.rbmanager.model.VirtualResourceBundle;
+import org.eclipse.babel.tapiji.tools.rbmanager.ui.hover.HoverInformant;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+
+public class RBMarkerInformant implements HoverInformant {
+    private int MAX_PROBLEMS = 20;
+    private boolean show = false;
+
+    private String title;
+    private String problems;
+
+    private Composite infoComposite;
+    private Composite titleGroup;
+    private Label titleLabel;
+    private Composite problemGroup;
+    private Label problemLabel;
+
+    private GridData infoData;
+    private GridData showTitleData;
+    private GridData showProblemsData;
+
+    @Override
+    public Composite getInfoComposite(Object data, Composite parent) {
+	show = false;
+
+	if (infoComposite == null) {
+	    infoComposite = new Composite(parent, SWT.NONE);
+	    GridLayout layout = new GridLayout(1, false);
+	    layout.verticalSpacing = 0;
+	    layout.horizontalSpacing = 0;
+	    infoComposite.setLayout(layout);
+
+	    infoData = new GridData(SWT.LEFT, SWT.TOP, true, true);
+	    infoComposite.setLayoutData(infoData);
+	}
+
+	if (data instanceof VirtualResourceBundle || data instanceof IResource) {
+	    addTitle(infoComposite, data);
+	    addProblems(infoComposite, data);
+	}
+
+	if (show) {
+	    infoData.heightHint = -1;
+	    infoData.widthHint = -1;
+	} else {
+	    infoData.heightHint = 0;
+	    infoData.widthHint = 0;
+	}
+
+	infoComposite.layout();
+	sinkColor(infoComposite);
+	infoComposite.pack();
+
+	return infoComposite;
+    }
+
+    @Override
+    public boolean show() {
+	return show;
+    }
+
+    private void setColor(Control control) {
+	Display display = control.getParent().getDisplay();
+
+	control.setForeground(display.getSystemColor(SWT.COLOR_INFO_FOREGROUND));
+	control.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND));
+    }
+
+    private void sinkColor(Composite composite) {
+	setColor(composite);
+
+	for (Control c : composite.getChildren()) {
+	    setColor(c);
+	    if (c instanceof Composite) {
+		sinkColor((Composite) c);
+	    }
+	}
+    }
+
+    private void addTitle(Composite parent, Object data) {
+	if (titleGroup == null) {
+	    titleGroup = new Composite(parent, SWT.NONE);
+	    titleLabel = new Label(titleGroup, SWT.SINGLE);
+
+	    showTitleData = new GridData(SWT.LEFT, SWT.TOP, true, true);
+	    titleGroup.setLayoutData(showTitleData);
+	}
+	title = getTitel(data);
+
+	if (title.length() != 0) {
+	    titleLabel.setText(title);
+	    show = true;
+	    showTitleData.heightHint = -1;
+	    showTitleData.widthHint = -1;
+	    titleLabel.pack();
+	} else {
+	    showTitleData.heightHint = 0;
+	    showTitleData.widthHint = 0;
+	}
+
+	titleGroup.layout();
+	titleGroup.pack();
+    }
+
+    private void addProblems(Composite parent, Object data) {
+	if (problemGroup == null) {
+	    problemGroup = new Composite(parent, SWT.NONE);
+	    GridLayout layout = new GridLayout(1, false);
+	    layout.verticalSpacing = 0;
+	    layout.horizontalSpacing = 0;
+	    problemGroup.setLayout(layout);
+
+	    showProblemsData = new GridData(SWT.LEFT, SWT.TOP, true, true);
+	    problemGroup.setLayoutData(showProblemsData);
+
+	    Composite problemTitleGroup = new Composite(problemGroup, SWT.NONE);
+	    layout = new GridLayout(2, false);
+	    layout.verticalSpacing = 0;
+	    layout.horizontalSpacing = 5;
+	    problemTitleGroup.setLayout(layout);
+
+	    Label warningImageLabel = new Label(problemTitleGroup, SWT.NONE);
+	    warningImageLabel.setImage(ImageUtils
+		    .getBaseImage(ImageUtils.WARNING_IMAGE));
+	    warningImageLabel.pack();
+
+	    Label waringTitleLabel = new Label(problemTitleGroup, SWT.NONE);
+	    waringTitleLabel.setText("ResourceBundle-Problems:");
+	    waringTitleLabel.pack();
+
+	    problemLabel = new Label(problemGroup, SWT.SINGLE);
+	}
+
+	problems = getProblems(data);
+
+	if (problems.length() != 0) {
+	    problemLabel.setText(problems);
+	    show = true;
+	    showProblemsData.heightHint = -1;
+	    showProblemsData.widthHint = -1;
+	    problemLabel.pack();
+	} else {
+	    showProblemsData.heightHint = 0;
+	    showProblemsData.widthHint = 0;
+	}
+
+	problemGroup.layout();
+	problemGroup.pack();
+    }
+
+    private String getTitel(Object data) {
+	if (data instanceof IFile) {
+	    return ((IResource) data).getFullPath().toString();
+	}
+	if (data instanceof VirtualResourceBundle) {
+	    return ((VirtualResourceBundle) data).getResourceBundleId();
+	}
+
+	return "";
+    }
+
+    private String getProblems(Object data) {
+	IMarker[] ms = null;
+
+	if (data instanceof IResource) {
+	    IResource res = (IResource) data;
+	    try {
+		if (res.exists()) {
+		    ms = res.findMarkers(EditorUtils.RB_MARKER_ID, false,
+			    IResource.DEPTH_INFINITE);
+		} else {
+		    ms = new IMarker[0];
+		}
+	    } catch (CoreException e) {
+		e.printStackTrace();
+	    }
+	    if (data instanceof IContainer) {
+		// add problem of same folder in the fragment-project
+		List<IContainer> fragmentContainer = ResourceUtils
+			.getCorrespondingFolders((IContainer) res,
+				FragmentProjectUtils.getFragments(res
+					.getProject()));
+
+		IMarker[] fragment_ms;
+		for (IContainer c : fragmentContainer) {
+		    try {
+			if (c.exists()) {
+			    fragment_ms = c.findMarkers(
+				    EditorUtils.RB_MARKER_ID, false,
+				    IResource.DEPTH_INFINITE);
+
+			    ms = org.eclipse.babel.tapiji.tools.core.util.EditorUtils
+				    .concatMarkerArray(ms, fragment_ms);
+			}
+		    } catch (CoreException e) {
+		    }
+		}
+	    }
+	}
+
+	if (data instanceof VirtualResourceBundle) {
+	    VirtualResourceBundle vRB = (VirtualResourceBundle) data;
+
+	    ResourceBundleManager rbmanager = vRB.getResourceBundleManager();
+	    IMarker[] file_ms;
+
+	    Collection<IResource> rBundles = rbmanager.getResourceBundles(vRB
+		    .getResourceBundleId());
+	    if (!rBundles.isEmpty()) {
+		for (IResource r : rBundles) {
+		    try {
+			file_ms = r.findMarkers(EditorUtils.RB_MARKER_ID,
+				false, IResource.DEPTH_INFINITE);
+			if (ms != null) {
+			    ms = org.eclipse.babel.tapiji.tools.core.util.EditorUtils
+				    .concatMarkerArray(ms, file_ms);
+			} else {
+			    ms = file_ms;
+			}
+		    } catch (Exception e) {
+		    }
+		}
+	    }
+	}
+
+	StringBuilder sb = new StringBuilder();
+	int count = 0;
+
+	if (ms != null && ms.length != 0) {
+	    for (IMarker m : ms) {
+		try {
+		    sb.append(m.getAttribute(IMarker.MESSAGE));
+		    sb.append("\n");
+		    count++;
+		    if (count == MAX_PROBLEMS && ms.length - count != 0) {
+			sb.append(" ... and ");
+			sb.append(ms.length - count);
+			sb.append(" other problems");
+			break;
+		    }
+		} catch (CoreException e) {
+		}
+		;
+	    }
+	    return sb.toString();
+	}
+
+	return "";
+    }
+}
diff --git a/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/filters/ProblematicResourceBundleFilter.java b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/filters/ProblematicResourceBundleFilter.java
new file mode 100644
index 0000000..fa7a44e
--- /dev/null
+++ b/org.eclipse.babel.tapiji.tools.rbmanager/src/org/eclipse/babel/tapiji/tools/rbmanager/viewer/filters/ProblematicResourceBundleFilter.java
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Michael Gasser.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Michael Gasser - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.babel.tapiji.tools.rbmanager.viewer.filters;
+
+import java.util.List;
+
+import org.eclipse.babel.tapiji.tools.core.ui.utils.EditorUtils;
+import org.eclipse.babel.tapiji.tools.core.ui.utils.ResourceUtils;
+import org.eclipse.babel.tapiji.tools.core.util.FragmentProjectUtils;
+import org.eclipse.babel.tapiji.tools.core.util.RBFileUtils;
+import org.eclipse.babel.tapiji.tools.rbmanager.model.VirtualResourceBundle;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+
+public class ProblematicResourceBundleFilter extends ViewerFilter {
+
+    /**
+     * Shows only IContainer and VirtualResourcebundles with all his
+     * properties-files, which have RB_Marker.
+     */
+    @Override
+    public boolean select(Viewer viewer, Object parentElement, Object element) {
+	if (element instanceof IFile) {
+	    return true;
+	}
+	if (element instanceof VirtualResourceBundle) {
+	    for (IResource f : ((VirtualResourceBundle) element).getFiles()) {
+		if (RBFileUtils.hasResourceBundleMarker(f)) {
+		    return true;
+		}
+	    }
+	}
+	if (element instanceof IContainer) {
+	    try {
+		IMarker[] ms = null;
+		if ((ms = ((IContainer) element).findMarkers(
+			EditorUtils.RB_MARKER_ID, true,
+			IResource.DEPTH_INFINITE)).length > 0) {
+		    return true;
+		}
+
+		List<IContainer> fragmentContainer = ResourceUtils
+			.getCorrespondingFolders((IContainer) element,
+				FragmentProjectUtils
+					.getFragments(((IContainer) element)
+						.getProject()));
+
+		IMarker[] fragment_ms;
+		for (IContainer c : fragmentContainer) {
+		    try {
+			if (c.exists()) {
+			    fragment_ms = c.findMarkers(
+				    EditorUtils.RB_MARKER_ID, false,
+				    IResource.DEPTH_INFINITE);
+			    ms = org.eclipse.babel.tapiji.tools.core.util.EditorUtils
+				    .concatMarkerArray(ms, fragment_ms);
+			}
+		    } catch (CoreException e) {
+			e.printStackTrace();
+		    }
+		}
+		if (ms.length > 0) {
+		    return true;
+		}
+
+	    } catch (CoreException e) {
+	    }
+	}
+	return false;
+    }
+}