diff --git a/benchmark/pom.xml b/benchmark/pom.xml
index 4c77285..bee5242 100644
--- a/benchmark/pom.xml
+++ b/benchmark/pom.xml
@@ -21,24 +21,24 @@
   <parent>
     <groupId>org.apache.stanbol</groupId>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../parent/pom.xml</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.benchmark</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer Benchmark</name>
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/benchmark/
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/benchmark/
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/benchmark/
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/benchmark/
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <build>
@@ -106,7 +106,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>
 
     <dependency>
diff --git a/bundlelist/pom.xml b/bundlelist/pom.xml
index 1bccc83..d81e413 100755
--- a/bundlelist/pom.xml
+++ b/bundlelist/pom.xml
@@ -17,13 +17,13 @@
 	<parent>
 		<groupId>org.apache.stanbol</groupId>
 		<artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-		<version>0.10.0-incubating-SNAPSHOT</version>
+		<version>0.10.0-SNAPSHOT</version>
 		<relativePath>../parent</relativePath>
 	</parent>
 
 	<groupId>org.apache.stanbol</groupId>
 	<artifactId>org.apache.stanbol.enhancer.bundlelist</artifactId>
-	<version>0.10.0-incubating-SNAPSHOT</version>
+	<version>0.10.0-SNAPSHOT</version>
 	<packaging>partialbundlelist</packaging>
 
 	<name>Apache Stanbol Enhancer Bundle List</name>
diff --git a/bundlelist/src/main/bundles/list.xml b/bundlelist/src/main/bundles/list.xml
index 713b441..d6e35c1 100644
--- a/bundlelist/src/main/bundles/list.xml
+++ b/bundlelist/src/main/bundles/list.xml
@@ -44,12 +44,12 @@
     <bundle>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
     <bundle>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.core</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
   </startLevel>
   <!-- LDPath -->
@@ -57,7 +57,7 @@
     <bundle>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.ldpath</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
   </startLevel>
   <!-- EnhancementJobManager implementations -->
@@ -65,12 +65,12 @@
     <bundle>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.eventjobmanager</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
     <bundle>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.weightedjobmanager</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
   </startLevel>
   <!-- Enhancement Chain implementations -->
@@ -78,22 +78,22 @@
     <bundle>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.chain.allactive</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
     <bundle>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.chain.graph</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
     <bundle>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.chain.weighted</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
     <bundle>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.chain.list</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
   </startLevel>
   <!-- Web Fragment -->
@@ -101,7 +101,7 @@
     <bundle>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.jersey</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
   </startLevel>
 
@@ -110,7 +110,7 @@
     <bundle>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.benchmark</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
   </startLevel>
 
@@ -122,13 +122,13 @@
     <bundle> 
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.engines.langdetect</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
 
 	 <bundle> 
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.engines.langid</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
 
     <!-- Content conversion (2 engines)-->
@@ -137,14 +137,14 @@
     <bundle>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.engines.metaxa</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
     -->
     
     <bundle><!-- Apache Tika Engine -->
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.engines.tika</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
 
     <!-- Named Entity Recoqunition (NER)-->
@@ -152,32 +152,32 @@
     <bundle> <!-- Open NLP based NER -->
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.engines.opennlp.ner</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
     <!-- Entity Extraction/Linking -->
     <bundle><!-- NER linking (depends on the Entityhub) -->
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.engine.entitytagging</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
     <bundle><!-- Keyword Extraction from Text (depends on the Entityhub) -->
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.engine.keywordextraction</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
 
     <!-- Disambiguation Enhancement Engine -->
-	<bundle>
-	  <groupId>org.apache.stanbol</groupId>
+    <bundle>
+      <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.engine.disambiguation.mlt</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
-	</bundle>
+      <version>0.10.0-SNAPSHOT</version>
+    </bundle>
 	
     <!-- Refactor Enhancement Engine -->
     <bundle>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.engines.refactor</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
 
     <!-- External Service Integration -->
@@ -185,23 +185,28 @@
     <bundle> <!-- http://www.opencalais.com/ -->
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.engines.opencalais</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
     <bundle> <!-- http://www.zemanta.com/ -->
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.engines.zemanta</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
     <bundle> <!-- http://www.geonames.org/ -->
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.engines.geonames</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
     
     <bundle> <!-- http://linguagrid.org/ -->
       <groupId>org.apache.stanbol</groupId>
-	  <artifactId>org.apache.stanbol.enhancer.engines.celi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+	    <artifactId>org.apache.stanbol.enhancer.engines.celi</artifactId>
+      <version>0.10.0-SNAPSHOT</version>
+    </bundle>
+    <bundle>
+      <groupId>org.apache.stanbol</groupId>
+      <artifactId>org.apache.stanbol.enhancer.engines.dbpspotlight</artifactId>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
   </startLevel>
   
@@ -211,7 +216,7 @@
     <bundle>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.defaults</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </bundle>
   </startLevel>
 </bundles>
diff --git a/chain/allactive/pom.xml b/chain/allactive/pom.xml
index 48ea6ef..db4813a 100644
--- a/chain/allactive/pom.xml
+++ b/chain/allactive/pom.xml
@@ -23,13 +23,13 @@
   <parent>
     <groupId>org.apache.stanbol</groupId>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.chain.allactive</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer Chain: DefaultChain</name>
@@ -41,12 +41,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/chain/allactive/
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/chain/allactive/
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/chain/allactive/
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/chain/allactive/
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <build>
@@ -57,11 +57,12 @@
         <extensions>true</extensions>
         <configuration>
           <instructions>
-            <Export-Package>
-              org.apache.stanbol.enhancer.chain.allactive;version=${project.version}
-            </Export-Package>
+            <Import-Package>
+              org.apache.stanbol.enhancer.servicesapi; provide:=true,
+              *
+            </Import-Package>
             <Private-Package>
-              org.apache.stanbol.enhancer.chain.allactive.impl;version=${project.version}
+              org.apache.stanbol.enhancer.chain.allactive.impl
             </Private-Package>
           </instructions>
         </configuration>
@@ -84,7 +85,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>
     
     <dependency>
diff --git a/chain/allactive/src/license/THIRD-PARTY.properties b/chain/allactive/src/license/THIRD-PARTY.properties
index dd3d2d7..ab103b1 100644
--- a/chain/allactive/src/license/THIRD-PARTY.properties
+++ b/chain/allactive/src/license/THIRD-PARTY.properties
@@ -1,17 +1,24 @@
 # Generated by org.codehaus.mojo.license.AddThirdPartyMojo
 #-------------------------------------------------------------------------------
 # Already used licenses in project :
-# - Apache License
-# - Common Development and Distribution License (CDDL) v1.0
-# - Common Public License Version 1.0
+# - Apache Software License
+# - Apache Software License, Version 2.0
+# - BSD License
+# - Common Development And Distribution License (CDDL), Version 1.0
+# - Common Development And Distribution License (CDDL), Version 1.1
+# - Common Public License, Version 1.0
+# - Eclipse Public License, Version 1.0
+# - GNU General Public License (GPL), Version 2 with classpath exception
+# - GNU Lesser General Public License (LGPL)
+# - GNU Lesser General Public License (LGPL), Version 2.1
 # - ICU License
 # - MIT License
-# - The Apache Software License, Version 2.0
+# - Public Domain License
 #-------------------------------------------------------------------------------
 # Please fill the missing licenses for dependencies :
 #
 #
-#Wed Feb 15 19:02:00 CET 2012
-javax.servlet--servlet-api--2.4=Common Development And Distribution License (CDDL), Version 1.0
+#Sun Oct 07 16:07:53 CEST 2012
+javax.servlet--servlet-api--2.5=Common Development And Distribution License (CDDL), Version 1.0
 org.osgi--org.osgi.compendium--4.1.0=The Apache Software License, Version 2.0
 org.osgi--org.osgi.core--4.1.0=The Apache Software License, Version 2.0
diff --git a/chain/graph/pom.xml b/chain/graph/pom.xml
index 193bc38..014faf0 100644
--- a/chain/graph/pom.xml
+++ b/chain/graph/pom.xml
@@ -23,13 +23,13 @@
   <parent>
     <groupId>org.apache.stanbol</groupId>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.chain.graph</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer Chain: GraphChain</name>
@@ -42,12 +42,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/chain/graph/
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/chain/graph/
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/chain/graph/
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/chain/graph/
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <build>
@@ -58,11 +58,13 @@
         <extensions>true</extensions>
         <configuration>
           <instructions>
-            <Export-Package>
-              org.apache.stanbol.enhancer.chain.graph;version=${project.version}
-            </Export-Package>
+            <Import-Package>
+              org.apache.stanbol.enhancer.servicesapi; provide:=true,
+              org.apache.stanbol.enhancer.servicesapi.impl; provide:=true,
+              *
+            </Import-Package>
             <Private-Package>
-              org.apache.stanbol.enhancer.chain.graph.impl;version=${project.version}
+              org.apache.stanbol.enhancer.chain.graph.impl
             </Private-Package>
           </instructions>
         </configuration>
@@ -85,7 +87,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>
     
     <dependency>
diff --git a/chain/graph/src/license/THIRD-PARTY.properties b/chain/graph/src/license/THIRD-PARTY.properties
index da258ff..6cb3ff7 100644
--- a/chain/graph/src/license/THIRD-PARTY.properties
+++ b/chain/graph/src/license/THIRD-PARTY.properties
@@ -1,17 +1,24 @@
 # Generated by org.codehaus.mojo.license.AddThirdPartyMojo
 #-------------------------------------------------------------------------------
 # Already used licenses in project :
-# - Apache License
-# - Common Development and Distribution License (CDDL) v1.0
-# - Common Public License Version 1.0
+# - Apache Software License
+# - Apache Software License, Version 2.0
+# - BSD License
+# - Common Development And Distribution License (CDDL), Version 1.0
+# - Common Development And Distribution License (CDDL), Version 1.1
+# - Common Public License, Version 1.0
+# - Eclipse Public License, Version 1.0
+# - GNU General Public License (GPL), Version 2 with classpath exception
+# - GNU Lesser General Public License (LGPL)
+# - GNU Lesser General Public License (LGPL), Version 2.1
 # - ICU License
 # - MIT License
-# - The Apache Software License, Version 2.0
+# - Public Domain License
 #-------------------------------------------------------------------------------
 # Please fill the missing licenses for dependencies :
 #
 #
-#Wed Feb 15 19:02:02 CET 2012
-javax.servlet--servlet-api--2.4=Common Development And Distribution License (CDDL), Version 1.0
+#Sun Oct 07 16:07:56 CEST 2012
+javax.servlet--servlet-api--2.5=Common Development And Distribution License (CDDL), Version 1.0
 org.osgi--org.osgi.compendium--4.1.0=The Apache Software License, Version 2.0
 org.osgi--org.osgi.core--4.1.0=The Apache Software License, Version 2.0
diff --git a/chain/graph/src/main/java/org/apache/stanbol/enhancer/chain/graph/impl/GraphChain.java b/chain/graph/src/main/java/org/apache/stanbol/enhancer/chain/graph/impl/GraphChain.java
index 2af212e..73d9d3c 100644
--- a/chain/graph/src/main/java/org/apache/stanbol/enhancer/chain/graph/impl/GraphChain.java
+++ b/chain/graph/src/main/java/org/apache/stanbol/enhancer/chain/graph/impl/GraphChain.java
@@ -176,7 +176,7 @@
 
     @Activate
     @Override
-    public void activate(ComponentContext ctx) throws ConfigurationException {
+    protected void activate(ComponentContext ctx) throws ConfigurationException {
         super.activate(ctx);
         Object resource = ctx.getProperties().get(PROPERTY_GRAPH_RESOURCE);
         Object list = ctx.getProperties().get(PROPERTY_CHAIN_LIST);
@@ -245,7 +245,7 @@
     }
     @Deactivate
     @Override
-    public void deactivate(ComponentContext ctx){
+    protected void deactivate(ComponentContext ctx){
         if(mode == MODE.RESOURCE && tracker != null){
             //we need to remove the ExecutionPlanListerner
             tracker.removeAll((DataFileListener)internalChain);
diff --git a/chain/list/pom.xml b/chain/list/pom.xml
index 0386bf0..d11ca28 100644
--- a/chain/list/pom.xml
+++ b/chain/list/pom.xml
@@ -23,13 +23,13 @@
   <parent>
     <groupId>org.apache.stanbol</groupId>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.chain.list</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer Chain: List</name>
@@ -42,12 +42,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/chian/list
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/chian/list
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/chain/list
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/chain/list
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <build>
@@ -58,9 +58,13 @@
         <extensions>true</extensions>
         <configuration>
           <instructions>
-            <Export-Package></Export-Package>
+            <Import-Package>
+              org.apache.stanbol.enhancer.servicesapi; provide:=true,
+              org.apache.stanbol.enhancer.servicesapi.impl; provide:=true,
+              *
+            </Import-Package>
             <Private-Package>
-              org.apache.stanbol.enhancer.chain.list.impl;version=${project.version}
+              org.apache.stanbol.enhancer.chain.list.impl
             </Private-Package>
           </instructions>
         </configuration>
@@ -83,7 +87,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>
     
     <dependency>
diff --git a/chain/list/src/license/THIRD-PARTY.properties b/chain/list/src/license/THIRD-PARTY.properties
index c1292ec..3d39ec0 100644
--- a/chain/list/src/license/THIRD-PARTY.properties
+++ b/chain/list/src/license/THIRD-PARTY.properties
@@ -1,17 +1,24 @@
 # Generated by org.codehaus.mojo.license.AddThirdPartyMojo
 #-------------------------------------------------------------------------------
 # Already used licenses in project :
-# - Apache License
-# - Common Development and Distribution License (CDDL) v1.0
-# - Common Public License Version 1.0
+# - Apache Software License
+# - Apache Software License, Version 2.0
+# - BSD License
+# - Common Development And Distribution License (CDDL), Version 1.0
+# - Common Development And Distribution License (CDDL), Version 1.1
+# - Common Public License, Version 1.0
+# - Eclipse Public License, Version 1.0
+# - GNU General Public License (GPL), Version 2 with classpath exception
+# - GNU Lesser General Public License (LGPL)
+# - GNU Lesser General Public License (LGPL), Version 2.1
 # - ICU License
 # - MIT License
-# - The Apache Software License, Version 2.0
+# - Public Domain License
 #-------------------------------------------------------------------------------
 # Please fill the missing licenses for dependencies :
 #
 #
-#Wed Feb 15 19:02:06 CET 2012
-javax.servlet--servlet-api--2.4=Common Development And Distribution License (CDDL), Version 1.0
+#Sun Oct 07 16:08:04 CEST 2012
+javax.servlet--servlet-api--2.5=Common Development And Distribution License (CDDL), Version 1.0
 org.osgi--org.osgi.compendium--4.1.0=The Apache Software License, Version 2.0
 org.osgi--org.osgi.core--4.1.0=The Apache Software License, Version 2.0
diff --git a/chain/list/src/main/java/org/apache/stanbol/enhancer/chain/list/impl/ListChain.java b/chain/list/src/main/java/org/apache/stanbol/enhancer/chain/list/impl/ListChain.java
index b21c9c1..4d07fc0 100644
--- a/chain/list/src/main/java/org/apache/stanbol/enhancer/chain/list/impl/ListChain.java
+++ b/chain/list/src/main/java/org/apache/stanbol/enhancer/chain/list/impl/ListChain.java
@@ -107,9 +107,15 @@
         List<String> configuredChain = new ArrayList<String>();
         if(value instanceof String[]){
             configuredChain.addAll(Arrays.asList((String[])value));
+        } else if(value instanceof List<?>){
+            for(Object o : (List<?>)value){
+                if(o != null){
+                    configuredChain.add(o.toString());
+                }
+            }
         } else {
             throw new ConfigurationException(PROPERTY_ENGINE_LIST, 
-                "The engines of a List Chain MUST BE configured as Array of " +
+                "The engines of a List Chain MUST BE configured as Array/List of " +
                 "Strings (parsed: "+
                         (value != null?value.getClass():"null")+")");
         }
diff --git a/chain/weighted/pom.xml b/chain/weighted/pom.xml
index 16dac9f..2f6576e 100644
--- a/chain/weighted/pom.xml
+++ b/chain/weighted/pom.xml
@@ -23,13 +23,13 @@
   <parent>
     <groupId>org.apache.stanbol</groupId>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.chain.weighted</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer Chain: Weighted</name>
@@ -43,12 +43,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/chian/weighted
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/chian/weighted
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/chain/weighted
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/chain/weighted
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <build>
@@ -59,9 +59,13 @@
         <extensions>true</extensions>
         <configuration>
           <instructions>
-            <Export-Package></Export-Package>
+            <Import-Package>
+              org.apache.stanbol.enhancer.servicesapi; provide:=true,
+              org.apache.stanbol.enhancer.servicesapi.impl; provide:=true,
+              *
+            </Import-Package>
             <Private-Package>
-              org.apache.stanbol.enhancer.chain.weighted.impl;version=${project.version}
+              org.apache.stanbol.enhancer.chain.weighted.impl
             </Private-Package>
           </instructions>
         </configuration>
@@ -84,7 +88,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>
     
     <dependency>
diff --git a/chain/weighted/src/license/THIRD-PARTY.properties b/chain/weighted/src/license/THIRD-PARTY.properties
index 70141d0..a8d2dc7 100644
--- a/chain/weighted/src/license/THIRD-PARTY.properties
+++ b/chain/weighted/src/license/THIRD-PARTY.properties
@@ -1,17 +1,24 @@
 # Generated by org.codehaus.mojo.license.AddThirdPartyMojo
 #-------------------------------------------------------------------------------
 # Already used licenses in project :
-# - Apache License
-# - Common Development and Distribution License (CDDL) v1.0
-# - Common Public License Version 1.0
+# - Apache Software License
+# - Apache Software License, Version 2.0
+# - BSD License
+# - Common Development And Distribution License (CDDL), Version 1.0
+# - Common Development And Distribution License (CDDL), Version 1.1
+# - Common Public License, Version 1.0
+# - Eclipse Public License, Version 1.0
+# - GNU General Public License (GPL), Version 2 with classpath exception
+# - GNU Lesser General Public License (LGPL)
+# - GNU Lesser General Public License (LGPL), Version 2.1
 # - ICU License
 # - MIT License
-# - The Apache Software License, Version 2.0
+# - Public Domain License
 #-------------------------------------------------------------------------------
 # Please fill the missing licenses for dependencies :
 #
 #
-#Wed Feb 15 19:02:04 CET 2012
-javax.servlet--servlet-api--2.4=Common Development And Distribution License (CDDL), Version 1.0
+#Sun Oct 07 16:08:01 CEST 2012
+javax.servlet--servlet-api--2.5=Common Development And Distribution License (CDDL), Version 1.0
 org.osgi--org.osgi.compendium--4.1.0=The Apache Software License, Version 2.0
 org.osgi--org.osgi.core--4.1.0=The Apache Software License, Version 2.0
diff --git a/defaults/pom.xml b/defaults/pom.xml
index 43ba5c6..fc9dab4 100644
--- a/defaults/pom.xml
+++ b/defaults/pom.xml
@@ -21,25 +21,25 @@
   <parent>
     <groupId>org.apache.stanbol</groupId>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../parent/pom.xml</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.defaults</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer Defaults Configuration</name>
   <description>This provides the default configuration for the Enhancer. This bundle can be removed by users that want/need to provide their own configuration conflicting with the defaults.</description>
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/defaults
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/defaults
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/defaults
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/defaults
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol</url>
+    <url>http://stanbol.apache.org</url>
   </scm>
 
   <build>
diff --git a/defaults/src/main/resources/config/org.apache.stanbol.enhancer.chain.weighted.impl.WeightedChain-keyworddisambiguation.config b/defaults/src/main/resources/config/org.apache.stanbol.enhancer.chain.weighted.impl.WeightedChain-keyworddisambiguation.config
index 56e952e..a2ac715 100644
--- a/defaults/src/main/resources/config/org.apache.stanbol.enhancer.chain.weighted.impl.WeightedChain-keyworddisambiguation.config
+++ b/defaults/src/main/resources/config/org.apache.stanbol.enhancer.chain.weighted.impl.WeightedChain-keyworddisambiguation.config
@@ -1,3 +1,3 @@
 stanbol.enhancer.chain.name="dbpedia-keyword-disambiguation"
-stanbol.enhancer.chain.weighted.chain=["tika;optional","metaxa;optional","langdetect","dbpediaKeyword","disambiguation-mlt"]
+stanbol.enhancer.chain.weighted.chain=["tika;optional","metaxa;optional","langdetect","dbpediaSuggestion","disambiguation-mlt"]
 service.ranking=I"0"
\ No newline at end of file
diff --git a/defaults/src/main/resources/config/org.apache.stanbol.enhancer.engines.keywordextraction.engine.KeywordLinkingEngine-dbpediakeyword.config b/defaults/src/main/resources/config/org.apache.stanbol.enhancer.engines.keywordextraction.engine.KeywordLinkingEngine-dbpediakeyword.config
index ed2ca61..74f7674 100644
--- a/defaults/src/main/resources/config/org.apache.stanbol.enhancer.engines.keywordextraction.engine.KeywordLinkingEngine-dbpediakeyword.config
+++ b/defaults/src/main/resources/config/org.apache.stanbol.enhancer.engines.keywordextraction.engine.KeywordLinkingEngine-dbpediakeyword.config
@@ -14,7 +14,7 @@
 org.apache.stanbol.enhancer.engines.keywordextraction.typeField="rdf:type"
 org.apache.stanbol.enhancer.engines.keywordextraction.referencedSiteId="dbpedia"
 org.apache.stanbol.enhancer.engines.keywordextraction.redirectField="rdfs:seeAlso"
-stanbol.enhancer.engine.name="dbpediaKeyword"
+stanbol.enhancer.engine.name="dbpediaSuggestion"
 org.apache.stanbol.enhancer.engines.keywordextraction.defaultMatchingLanguage="en"
 org.apache.stanbol.enhancer.engines.keywordextraction.keywordTokenizer=B"false"
 org.apache.stanbol.enhancer.engines.keywordextraction.minFoundTokens=I"1"
diff --git a/engines/celi/pom.xml b/engines/celi/pom.xml
index 0fcbcdb..5588d8b 100644
--- a/engines/celi/pom.xml
+++ b/engines/celi/pom.xml
@@ -17,7 +17,7 @@
 	<parent>
 		<groupId>org.apache.stanbol</groupId>
 		<artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-		<version>0.10.0-incubating-SNAPSHOT</version>
+		<version>0.10.0-SNAPSHOT</version>
 		<relativePath>../../parent</relativePath>
 	</parent>
 
@@ -25,16 +25,15 @@
 	<artifactId>org.apache.stanbol.enhancer.engines.celi</artifactId>
 	<packaging>bundle</packaging>
 
-	<name>Apache Stanbol Enhancer Enhancement Engine: CELI  </name>
-	<description></description>
+	<name>Apache Stanbol Enhancer Enhancement Engine : CELI Engine</name>
+	<description>Enhancement Engine using the CELI service.</description>
 	<inceptionYear>2012</inceptionYear>
 
-
 	<dependencies>
 		<dependency>
 			<groupId>org.apache.stanbol</groupId>
 			<artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-            <version>0.10.0-incubating-SNAPSHOT</version>
+            <version>0.10.0-SNAPSHOT</version>
 		</dependency>
 
 		<dependency>
@@ -78,13 +77,13 @@
         <dependency>
             <groupId>org.apache.stanbol</groupId>
             <artifactId>org.apache.stanbol.enhancer.test</artifactId>
-            <version>0.10.0-incubating-SNAPSHOT</version>
+            <version>0.10.0-SNAPSHOT</version>
             <scope>test</scope>
         </dependency>
 		<dependency>
             <groupId>org.apache.stanbol</groupId>
             <artifactId>org.apache.stanbol.enhancer.core</artifactId>
-            <version>0.10.0-incubating-SNAPSHOT</version>
+            <version>0.10.0-SNAPSHOT</version>
             <scope>test</scope>
         </dependency>
 	    <dependency><!--  for debugging enhancements -->
@@ -126,18 +125,21 @@
 				<extensions>true</extensions>
 				<configuration>
 					<instructions>
+                        <Import-Package>
+                            org.apache.stanbol.enhancer.servicesapi; provide:=true,
+                            org.apache.stanbol.enhancer.servicesapi.impl; provide:=true,
+                            *
+                        </Import-Package>
+					    <Export-Package>
+					        org.apache.stanbol.enhancer.engines.celi
+					    </Export-Package>
 						<Private-Package>
-							org.apache.stanbol.enhancer.engines.celi.ner.impl.*, 
-							org.apache.stanbol.enhancer.engines.celi.langid.impl.*, 
-							org.apache.stanbol.enhancer.engines.celi.classification.impl.*, 
-							org.apache.stanbol.enhancer.engines.celi.lemmatizer.impl.*
+							org.apache.stanbol.enhancer.engines.celi.ner.impl, 
+							org.apache.stanbol.enhancer.engines.celi.langid.impl, 
+							org.apache.stanbol.enhancer.engines.celi.classification.impl, 
+							org.apache.stanbol.enhancer.engines.celi.lemmatizer.impl,
+                            org.apache.stanbol.enhancer.engines.celi.utils
 						</Private-Package>
-						<!-- <Embed-Dependency>true</Embed-Dependency> 
-						<Embed-Transitive>true</Embed-Transitive>  -->
-						<Import-Package>
-							org.apache.http,
-							*;resolution:=optional
-						</Import-Package>
 					</instructions>
 				</configuration>
 			</plugin>
diff --git a/engines/celi/src/license/THIRD-PARTY.properties b/engines/celi/src/license/THIRD-PARTY.properties
index fc84410..7fc79e8 100644
--- a/engines/celi/src/license/THIRD-PARTY.properties
+++ b/engines/celi/src/license/THIRD-PARTY.properties
@@ -18,8 +18,8 @@
 # Please fill the missing licenses for dependencies :
 #
 #
-#Mon Jun 04 06:56:13 CEST 2012
-javax.servlet--servlet-api--2.4=Common Development And Distribution License (CDDL), Version 1.0
+#Sun Oct 07 18:27:20 CEST 2012
+javax.servlet--servlet-api--2.5=Common Development And Distribution License (CDDL), Version 1.0
 org.osgi--org.osgi.compendium--4.1.0=The Apache Software License, Version 2.0
 org.osgi--org.osgi.core--4.1.0=The Apache Software License, Version 2.0
 xerces--xercesImpl--2.7.1=The Apache Software License, Version 2.0
diff --git a/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/CeliHttpTest.java b/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/CeliHttpTest.java
index f7c2793..0d942a3 100644
--- a/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/CeliHttpTest.java
+++ b/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/CeliHttpTest.java
@@ -19,16 +19,26 @@
 import static org.apache.stanbol.enhancer.engines.celi.langid.impl.CeliLanguageIdentifierEnhancementEngineTest.CELI_LANGID_SERVICE_URL;
 
 import java.io.IOException;
+import java.net.SocketTimeoutException;
 import java.net.URL;
+import java.net.UnknownHostException;
 
+import javax.print.attribute.standard.MediaSize.Engineering;
 import javax.xml.soap.SOAPException;
 
 import junit.framework.Assert;
 
 import org.apache.stanbol.enhancer.engines.celi.langid.impl.LanguageIdentifierClientHTTP;
+import org.apache.stanbol.enhancer.engines.celi.testutils.TestUtils;
+import org.apache.stanbol.enhancer.servicesapi.EngineException;
+import org.apache.stanbol.enhancer.test.helper.RemoteServiceHelper;
 import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class CeliHttpTest {
+    
+    public static final Logger log = LoggerFactory.getLogger(CeliHttpTest.class);
 
     /**
      * None Existing user account should throw an IOException with 
@@ -67,7 +77,11 @@
     public void testTestAccount() throws IOException, SOAPException {
         LanguageIdentifierClientHTTP testClient = new LanguageIdentifierClientHTTP(
             new URL(CELI_LANGID_SERVICE_URL), null);
-        Assert.assertNotNull(testClient.guessQueryLanguage("This is a dummy request"));
+        try {
+            Assert.assertNotNull(testClient.guessQueryLanguage("This is a dummy request"));
+        } catch (IOException e) {
+            RemoteServiceHelper.checkServiceUnavailable(e);
+        }
     }
     
 }
diff --git a/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/classification/impl/CeliClassificationEnhancementEngineTest.java b/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/classification/impl/CeliClassificationEnhancementEngineTest.java
index 289b893..779a5e4 100644
--- a/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/classification/impl/CeliClassificationEnhancementEngineTest.java
+++ b/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/classification/impl/CeliClassificationEnhancementEngineTest.java
@@ -23,6 +23,7 @@
 
 import java.io.IOException;
 import java.net.UnknownHostException;
+import java.rmi.RemoteException;
 import java.util.Dictionary;
 import java.util.HashMap;
 import java.util.Hashtable;
@@ -43,6 +44,7 @@
 import org.apache.stanbol.enhancer.servicesapi.impl.StringSource;
 import org.apache.stanbol.enhancer.servicesapi.rdf.Properties;
 import org.apache.stanbol.enhancer.test.helper.EnhancementStructureHelper;
+import org.apache.stanbol.enhancer.test.helper.RemoteServiceHelper;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -105,12 +107,9 @@
 			int numTopicAnnotations = validateAllTopicAnnotations(ci.getMetadata()  , expectedValues);
 			assertTrue("No TpocisAnnotations found", numTopicAnnotations > 0);
 		} catch (EngineException e) {
-			if (e.getCause() != null && e.getCause() instanceof UnknownHostException) {
-				log.warn("Celi Service not reachable -> offline? -> deactivate test");
-				return;
-			}
-			throw e;
-		}
+            RemoteServiceHelper.checkServiceUnavailable(e);
+            return;
+        }
 	}
 
 }
diff --git a/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/langid/impl/CeliLanguageIdentifierEnhancementEngineTest.java b/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/langid/impl/CeliLanguageIdentifierEnhancementEngineTest.java
index 69f3ecf..3a771e7 100644
--- a/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/langid/impl/CeliLanguageIdentifierEnhancementEngineTest.java
+++ b/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/langid/impl/CeliLanguageIdentifierEnhancementEngineTest.java
@@ -40,6 +40,7 @@
 import org.apache.stanbol.enhancer.servicesapi.helper.EnhancementEngineHelper;
 import org.apache.stanbol.enhancer.servicesapi.impl.StringSource;
 import org.apache.stanbol.enhancer.servicesapi.rdf.Properties;
+import org.apache.stanbol.enhancer.test.helper.RemoteServiceHelper;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -103,11 +104,7 @@
 	        int entityAnnoNum = validateAllEntityAnnotations(ci.getMetadata(), expectedValues);
 	        assertEquals("No EntityAnnotations are expected",0, entityAnnoNum);
 		} catch (EngineException e) {
-			if (e.getCause() != null && e.getCause() instanceof UnknownHostException) {
-				log.warn("Celi Service not reachable -> offline? -> deactivate test");
-				return;
-			}
-			throw e;
+            RemoteServiceHelper.checkServiceUnavailable(e);
 		}
 	}
 
diff --git a/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/lemmatizer/impl/CeliLemmatizerEnhancementEngineTest.java b/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/lemmatizer/impl/CeliLemmatizerEnhancementEngineTest.java
index 1f76a25..70d1000 100644
--- a/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/lemmatizer/impl/CeliLemmatizerEnhancementEngineTest.java
+++ b/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/lemmatizer/impl/CeliLemmatizerEnhancementEngineTest.java
@@ -60,6 +60,7 @@
 import org.apache.stanbol.enhancer.servicesapi.EnhancementEngine;
 import org.apache.stanbol.enhancer.servicesapi.impl.StringSource;
 import org.apache.stanbol.enhancer.servicesapi.rdf.Properties;
+import org.apache.stanbol.enhancer.test.helper.RemoteServiceHelper;
 import org.junit.Assert;
 import org.junit.Test;
 import org.osgi.service.cm.ConfigurationException;
@@ -109,11 +110,8 @@
         try {
 			morphoAnalysisEngine.computeEnhancements(ci);
         } catch (EngineException e) {
-            if (e.getCause() != null && e.getCause() instanceof UnknownHostException) {
-                log.warn("Celi Service not reachable -> offline? -> deactivate test");
-                return;
-            }
-            throw e;
+            RemoteServiceHelper.checkServiceUnavailable(e);
+            return;
         }
 
 		TestUtils.logEnhancements(ci);
@@ -149,11 +147,8 @@
         try {
             morphoAnalysisEngine.computeEnhancements(ci);
         } catch (EngineException e) {
-            if (e.getCause() != null && e.getCause() instanceof UnknownHostException) {
-                log.warn("Celi Service not reachable -> offline? -> deactivate test");
-                return;
-            }
-            throw e;
+            RemoteServiceHelper.checkServiceUnavailable(e);
+            return;
         }
 
         TestUtils.logEnhancements(ci);
diff --git a/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/ner/impl/CeliNamedEntityExtractionEnhancementEngineTest.java b/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/ner/impl/CeliNamedEntityExtractionEnhancementEngineTest.java
index 45620b7..8d62f7d 100644
--- a/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/ner/impl/CeliNamedEntityExtractionEnhancementEngineTest.java
+++ b/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/ner/impl/CeliNamedEntityExtractionEnhancementEngineTest.java
@@ -42,6 +42,7 @@
 import org.apache.stanbol.enhancer.servicesapi.impl.StringSource;
 import org.apache.stanbol.enhancer.servicesapi.rdf.Properties;
 import org.apache.stanbol.enhancer.test.helper.EnhancementStructureHelper;
+import org.apache.stanbol.enhancer.test.helper.RemoteServiceHelper;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -110,11 +111,7 @@
 	        int entityAnnoNum = EnhancementStructureHelper.validateAllEntityAnnotations(ci.getMetadata(),expectedValues);
 	        log.info(entityAnnoNum + " EntityAnnotations found ...");
 		} catch (EngineException e) {
-			if (e.getCause() != null && e.getCause() instanceof UnknownHostException) {
-				log.warn("Celi Service not reachable -> offliCeliNamedEntityExtractionEnhancementEnginene? -> deactivate test");
-				return;
-			}
-			throw e;
+            RemoteServiceHelper.checkServiceUnavailable(e);
 		}
     }
     
diff --git a/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/testutils/TestUtils.java b/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/testutils/TestUtils.java
index 2a1a71b..f9107cd 100644
--- a/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/testutils/TestUtils.java
+++ b/engines/celi/src/test/java/org/apache/stanbol/enhancer/engines/celi/testutils/TestUtils.java
@@ -19,10 +19,13 @@
 import static org.apache.clerezza.rdf.core.serializedform.SupportedFormat.TURTLE;
 
 import java.io.ByteArrayOutputStream;
+import java.net.SocketTimeoutException;
+import java.net.UnknownHostException;
 import java.nio.charset.Charset;
 
 import org.apache.clerezza.rdf.jena.serializer.JenaSerializerProvider;
 import org.apache.stanbol.enhancer.servicesapi.ContentItem;
+import org.apache.stanbol.enhancer.servicesapi.EngineException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -39,5 +42,4 @@
         log.info("Enhancements: \n{}",new String(logOut.toByteArray(),Charset.forName("UTF-8")));
     }
 
-
 }
diff --git a/engines/disambiguation-mlt/pom.xml b/engines/disambiguation-mlt/pom.xml
index 179744f..c466922 100755
--- a/engines/disambiguation-mlt/pom.xml
+++ b/engines/disambiguation-mlt/pom.xml
@@ -6,12 +6,12 @@
 	<parent>
 		<groupId>org.apache.stanbol</groupId>
 		<artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-		<version>0.10.0-incubating-SNAPSHOT</version>
+		<version>0.10.0-SNAPSHOT</version>
 		<relativePath>../../parent</relativePath>
 	</parent>
 	<groupId>org.apache.stanbol</groupId>
 	<artifactId>org.apache.stanbol.enhancer.engine.disambiguation.mlt</artifactId>
-	<version>0.10.0-incubating-SNAPSHOT</version>
+	<version>0.10.0-SNAPSHOT</version>
 	<packaging>bundle</packaging>
 
 	<name>Apache Stanbol Enhancer Enhancement Engine : Disambiguation using Solr MLT</name>
@@ -24,10 +24,10 @@
 
 	<scm>
 		<connection>
-			scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/disambiguation-mlt/
+			scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/disambiguation-mlt/
 		</connection>
 		<developerConnection>
-			scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/disambiguation-mlt/
+			scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/disambiguation-mlt/
 		</developerConnection>
 		<url>http://incubator.apache.org/stanbol/</url>
 	</scm>
@@ -67,18 +67,18 @@
 		<dependency>
 			<groupId>org.apache.stanbol</groupId>
 			<artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-			<version>0.10.0-incubating-SNAPSHOT</version>
+			<version>0.10.0-SNAPSHOT</version>
 		</dependency>
 
 		<dependency>
 			<groupId>org.apache.stanbol</groupId>
 			<artifactId>org.apache.stanbol.entityhub.servicesapi</artifactId>
-			<version>0.11.0-incubating-SNAPSHOT</version>
+			<version>0.11.0-SNAPSHOT</version>
 		</dependency>
 <!--  		<dependency>
 			<groupId>org.apache.stanbol</groupId>
 			<artifactId>org.apache.stanbol.entityhub.model.clerezza</artifactId>
-			<version>0.11.0-incubating-SNAPSHOT</version>
+			<version>0.11.0-SNAPSHOT</version>
 			<scope>compile</scope>
 		</dependency>
 -->
@@ -87,8 +87,8 @@
 			<artifactId>org.apache.felix.scr.annotations</artifactId>
 		</dependency>
 		<dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
 		</dependency>
 
 	</dependencies>
diff --git a/engines/disambiguation-mlt/src/main/java/org/apache/stanbol/enhancer/engine/disambiguation/mlt/DisambiguatorEngine.java b/engines/disambiguation-mlt/src/main/java/org/apache/stanbol/enhancer/engine/disambiguation/mlt/DisambiguatorEngine.java
index bd97154..e8c447e 100755
--- a/engines/disambiguation-mlt/src/main/java/org/apache/stanbol/enhancer/engine/disambiguation/mlt/DisambiguatorEngine.java
+++ b/engines/disambiguation-mlt/src/main/java/org/apache/stanbol/enhancer/engine/disambiguation/mlt/DisambiguatorEngine.java
@@ -15,11 +15,8 @@
  */
 package org.apache.stanbol.enhancer.engine.disambiguation.mlt;
 
-import static org.apache.commons.lang.StringUtils.getLevenshteinDistance;
-import static org.apache.stanbol.enhancer.servicesapi.rdf.Properties.DC_CONTRIBUTOR;
 import static org.apache.stanbol.enhancer.servicesapi.rdf.Properties.DC_RELATION;
 import static org.apache.stanbol.enhancer.servicesapi.rdf.Properties.ENHANCER_CONFIDENCE;
-import static org.apache.stanbol.enhancer.servicesapi.rdf.Properties.ENHANCER_ENTITY_LABEL;
 import static org.apache.stanbol.enhancer.servicesapi.rdf.Properties.RDFS_LABEL;
 
 import java.io.IOException;
@@ -290,19 +287,22 @@
             QueryResultList<Entity> results;
             log.info(" - Query '{}' for {}@{} with context '{}'",
                 new Object[]{site.getId(),savedEntityLabel,contentLangauge,disambiguationContext});
-            try {
-                results = query(site, savedEntityLabel, contentLangauge,
-                    disambiguationContext);
-            } catch (SiteException e) {
-                //TODO we could also try to catch those errors ...
-                throw new EngineException("Unable to disambiguate Mention of '"
-                        + savedEntity.getName()+"' on Entityhub Site '"+
-                        site.getId()+"!",e);
+            if(!StringUtils.isBlank(disambiguationContext)){
+                try {
+                    results = query(site, savedEntityLabel, contentLangauge,
+                        disambiguationContext);
+                } catch (SiteException e) {
+                    //TODO we could also try to catch those errors ...
+                    throw new EngineException("Unable to disambiguate Mention of '"
+                            + savedEntity.getName()+"' on Entityhub Site '"+
+                            site.getId()+"!",e);
+                }
+                log.debug(" - {} results returned by query {}", results.size(), results.getQuery());
+                //match the results with the suggestions
+                disambiguateSuggestions(results, savedEntity);
+            } else {
+                log.debug(" - not disambiguated because of empty context!");
             }
-            log.debug(" - {} results returned by query {}", results.size(), results.getQuery());
-    
-            //match the results with the suggestions
-            disambiguateSuggestions(results, savedEntity);
         }
         //(3) Write back the Results of the Disambiguation process
         // NOTE (rwesten): In the original version of Kritarth this was done as
@@ -329,7 +329,6 @@
                                                    String savedEntityLabel,
                                                    String language,
                                                    String extractionContext) throws SiteException {
-
         FieldQuery query = dbpediaSite.getQueryFactory().createFieldQuery();
         if(savedEntityLabel != null && !savedEntityLabel.isEmpty()){
             Constraint labelConstraint;
diff --git a/engines/entitytagging/pom.xml b/engines/entitytagging/pom.xml
index e377210..bf620f5 100644
--- a/engines/entitytagging/pom.xml
+++ b/engines/entitytagging/pom.xml
@@ -23,13 +23,13 @@
   <parent>
     <groupId>org.apache.stanbol</groupId>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.engine.entitytagging</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer Enhancement Engine : Entity Tagging</name>
@@ -44,12 +44,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/entitytagging/
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/entitytagging/
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/entitytagging/
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/entitytagging/
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <build>
@@ -83,7 +83,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
@@ -93,7 +93,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.entityhub.servicesapi</artifactId>
-      <version>0.11.0-incubating-SNAPSHOT</version>
+      <version>0.11.0-SNAPSHOT</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
@@ -129,37 +129,37 @@
      <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.test</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
      <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.core</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
      <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.entityhub.core</artifactId>
-      <version>0.11.0-incubating-SNAPSHOT</version>
+      <version>0.11.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
      <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.entityhub.yard.solr</artifactId>
-      <version>0.11.0-incubating-SNAPSHOT</version>
+      <version>0.11.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
      <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.data.sites.dbpedia</artifactId>
-      <version>1.0.5-incubating-SNAPSHOT</version>
+      <version>1.0.5-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
      <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.rdfentities</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
     
diff --git a/engines/geonames/pom.xml b/engines/geonames/pom.xml
index 61a0c56..23e4ba3 100644
--- a/engines/geonames/pom.xml
+++ b/engines/geonames/pom.xml
@@ -23,13 +23,13 @@
   <parent>
     <groupId>org.apache.stanbol</groupId>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.engines.geonames</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer Enhancement Engine : geonames.org GIS service</name>
@@ -42,12 +42,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/geonames/
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/geonames/
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/geonames/
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/geonames/
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <build>
@@ -58,11 +58,13 @@
         <extensions>true</extensions>
         <configuration>
           <instructions>
-            <Export-Package>
-              org.apache.stanbol.enhancer.engines.geonames;version=${project.version}
-            </Export-Package>
+            <Import-Package>
+              org.apache.stanbol.enhancer.servicesapi; provide:=true,
+              org.apache.stanbol.enhancer.servicesapi.impl; provide:=true,
+              *
+            </Import-Package>
             <Private-Package>
-              org.apache.stanbol.enhancer.engines.geonames.impl.*;version=${project.version}
+              org.apache.stanbol.enhancer.engines.geonames.impl
             </Private-Package>
           </instructions>
         </configuration>
@@ -89,7 +91,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
@@ -122,19 +124,19 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.core</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.test</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.rdfentities</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
     
diff --git a/engines/geonames/src/license/THIRD-PARTY.properties b/engines/geonames/src/license/THIRD-PARTY.properties
index 62dd10a..0ede070 100644
--- a/engines/geonames/src/license/THIRD-PARTY.properties
+++ b/engines/geonames/src/license/THIRD-PARTY.properties
@@ -1,18 +1,25 @@
 # Generated by org.codehaus.mojo.license.AddThirdPartyMojo
 #-------------------------------------------------------------------------------
 # Already used licenses in project :
-# - Apache License
-# - Common Development and Distribution License (CDDL) v1.0
-# - Common Public License Version 1.0
+# - Apache Software License
+# - Apache Software License, Version 2.0
+# - BSD License
+# - Common Development And Distribution License (CDDL), Version 1.0
+# - Common Development And Distribution License (CDDL), Version 1.1
+# - Common Public License, Version 1.0
+# - Eclipse Public License, Version 1.0
+# - GNU General Public License (GPL), Version 2 with classpath exception
+# - GNU Lesser General Public License (LGPL)
+# - GNU Lesser General Public License (LGPL), Version 2.1
 # - ICU License
 # - MIT License
-# - The Apache Software License, Version 2.0
+# - Public Domain License
 #-------------------------------------------------------------------------------
 # Please fill the missing licenses for dependencies :
 #
 #
-#Wed Feb 15 19:07:03 CET 2012
-javax.servlet--servlet-api--2.4=Common Development And Distribution License (CDDL), Version 1.0
+#Sun Oct 07 18:27:25 CEST 2012
+javax.servlet--servlet-api--2.5=Common Development And Distribution License (CDDL), Version 1.0
 org.codehaus.jettison--jettison--1.3=The Apache Software License, Version 2.0
 org.osgi--org.osgi.compendium--4.1.0=The Apache Software License, Version 2.0
 org.osgi--org.osgi.core--4.1.0=The Apache Software License, Version 2.0
diff --git a/engines/geonames/src/main/java/org/apache/stanbol/enhancer/engines/geonames/impl/LocationEnhancementEngine.java b/engines/geonames/src/main/java/org/apache/stanbol/enhancer/engines/geonames/impl/LocationEnhancementEngine.java
index c98b032..3fd841e 100644
--- a/engines/geonames/src/main/java/org/apache/stanbol/enhancer/engines/geonames/impl/LocationEnhancementEngine.java
+++ b/engines/geonames/src/main/java/org/apache/stanbol/enhancer/engines/geonames/impl/LocationEnhancementEngine.java
@@ -493,6 +493,8 @@
         if (requiresEnhancements != null) {
             for (NonLiteral requires : requiresEnhancements) {
                 graph.add(new TripleImpl(entityAnnotation, DC_REQUIRES, requires));
+                //STANBOL-767: also add dc:relation link
+                graph.add(new TripleImpl(entityAnnotation, DC_RELATION, requires));
             }
         }
         graph.add(new TripleImpl(entityAnnotation, ENHANCER_ENTITY_REFERENCE, entityRef));
diff --git a/engines/geonames/src/test/java/org/apache/stanbol/enhancer/engines/geonames/impl/TestLocationEnhancementEngine.java b/engines/geonames/src/test/java/org/apache/stanbol/enhancer/engines/geonames/impl/TestLocationEnhancementEngine.java
index 379ce64..13d808e 100644
--- a/engines/geonames/src/test/java/org/apache/stanbol/enhancer/engines/geonames/impl/TestLocationEnhancementEngine.java
+++ b/engines/geonames/src/test/java/org/apache/stanbol/enhancer/engines/geonames/impl/TestLocationEnhancementEngine.java
@@ -44,6 +44,7 @@
 import org.apache.stanbol.enhancer.servicesapi.EngineException;
 import org.apache.stanbol.enhancer.servicesapi.impl.StringSource;
 import org.apache.stanbol.enhancer.servicesapi.rdf.Properties;
+import org.apache.stanbol.enhancer.test.helper.RemoteServiceHelper;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -129,7 +130,7 @@
     }
 
     @Test
-    public void testLocationEnhancementEngine() throws IOException {
+    public void testLocationEnhancementEngine() throws IOException, EngineException {
         //create a content item
         ContentItem ci = getContentItem("urn:org.apache:stanbol.enhancer:text:content-item:person", CONTEXT);
         //add three text annotations to be consumed by this test
@@ -140,18 +141,8 @@
         try {
             locationEnhancementEngine.computeEnhancements(ci);
         } catch (EngineException e) {
-            if (e.getCause() instanceof UnknownHostException) {
-                log.warn("Unable to test LocationEnhancemetEngine when offline! -> skipping this test", e.getCause());
-                return;
-            } else if (e.getCause() instanceof SocketTimeoutException) {
-                log.warn("Seams like the geonames.org webservice is currently unavailable -> skipping this test", e.getCause());
-                return;
-            } else if (e.getMessage().contains("overloaded with requests")) {
-                log.warn(
-                        "Seams like the geonames.org webservice is currently unavailable -> skipping this test",
-                        e.getCause());
-                return;
-            }
+            RemoteServiceHelper.checkServiceUnavailable(e, "overloaded with requests");
+            return;
         }
         Map<UriRef,Resource> expectedValues = new HashMap<UriRef,Resource>();
         expectedValues.put(Properties.ENHANCER_EXTRACTED_FROM, ci.getUri());
@@ -169,7 +160,9 @@
         int entityAnnotationCount = validateAllEntityAnnotations(ci.getMetadata(),expectedValues);
         //two suggestions for New Zealand and one hierarchy entry for the first
         //suggestion
-        assertEquals(2, entityAnnotationCount);
+        //NOTE 2012-10-10: changed expected value back to "3" as geonames.org
+        //   again returns "Oceania" as parent for "New Zealand"
+        assertEquals(3, entityAnnotationCount);
     }
 
 
diff --git a/engines/keywordextraction/pom.xml b/engines/keywordextraction/pom.xml
index fbfc22b..0460c64 100644
--- a/engines/keywordextraction/pom.xml
+++ b/engines/keywordextraction/pom.xml
@@ -23,13 +23,13 @@
   <parent>
     <groupId>org.apache.stanbol</groupId>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.engine.keywordextraction</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer Enhancement Engine : Keyword Extraction</name>
@@ -44,12 +44,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/keywordextraction/
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/keywordextraction/
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/keywordextraction/
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/keywordextraction/
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <build>
@@ -82,7 +82,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
@@ -92,7 +92,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.entityhub.servicesapi</artifactId>
-      <version>0.11.0-incubating-SNAPSHOT</version>
+      <version>0.11.0-SNAPSHOT</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
@@ -134,7 +134,7 @@
      <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.core</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
     <dependency>
@@ -146,13 +146,13 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.entityhub.core</artifactId>
-      <version>0.11.0-incubating-SNAPSHOT</version>
+      <version>0.11.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.data.opennlp.lang.en</artifactId>
-      <version>1.0.2-incubating-SNAPSHOT</version>
+      <version>1.0.2-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
 
diff --git a/engines/langdetect/pom.xml b/engines/langdetect/pom.xml
index ac23b23..472cbee 100644
--- a/engines/langdetect/pom.xml
+++ b/engines/langdetect/pom.xml
@@ -23,13 +23,13 @@
   <parent>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
     <groupId>org.apache.stanbol</groupId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.engines.langdetect</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer Enhancement Engine : Language Identifier</name>
@@ -40,12 +40,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/langdetect/
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/langdetect/
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/langdetect/
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/langdetect/
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
 	<build>
@@ -93,7 +93,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>
 
     <dependency>
@@ -128,13 +128,13 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.test</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.core</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>    
 	<dependency>
diff --git a/engines/langid/pom.xml b/engines/langid/pom.xml
index e45a29f..1c850e4 100644
--- a/engines/langid/pom.xml
+++ b/engines/langid/pom.xml
@@ -23,13 +23,13 @@
   <parent>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
     <groupId>org.apache.stanbol</groupId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.engines.langid</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer Enhancement Engine : Language Identifier</name>
@@ -42,12 +42,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/langid/
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/langid/
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/langid/
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/langid/
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <build>
@@ -87,7 +87,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>
 
     <dependency>
@@ -115,13 +115,13 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.test</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.core</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>    
 	<dependency>
diff --git a/engines/metaxa/pom.xml b/engines/metaxa/pom.xml
index 2d69659..125402e 100644
--- a/engines/metaxa/pom.xml
+++ b/engines/metaxa/pom.xml
@@ -23,13 +23,13 @@
   <parent>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
     <groupId>org.apache.stanbol</groupId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.engines.metaxa</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer Enhancement Engine : Metaxa Metadata and Text Extractor</name>
@@ -39,12 +39,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/metaxa/
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/metaxa/
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/metaxa/
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/metaxa/
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <build>
@@ -110,8 +110,13 @@
               !schemasMicrosoftComOfficeWord,
               org.w3c.dom,
               javax.xml.namespace,
+              org.apache.stanbol.enhancer.servicesapi; provide:=true,
+              org.apache.stanbol.enhancer.servicesapi.impl; provide:=true,
               *
             </Import-Package>
+            <Private-Package>
+              org.apache.stanbol.enhancer.engines.metaxa.*
+            </Private-Package>
           </instructions>
         </configuration>
       </plugin>
@@ -129,6 +134,8 @@
             <exclude>src/test/resources/html-res.txt</exclude>
             <exclude>src/test/resources/pdf-res.txt</exclude>
             <exclude>src/test/resources/mail-multipart-test.eml</exclude>
+
+            <exclude>src/license/THIRD-PARTY.properties</exclude>
           </excludes>
         </configuration>
       </plugin>
@@ -139,7 +146,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>
         
     <dependency>
@@ -166,6 +173,7 @@
     <dependency>
       <groupId>commons-httpclient</groupId>
       <artifactId>commons-httpclient</artifactId>
+      <version>3.1</version>
     </dependency>
 
     <dependency>
diff --git a/engines/metaxa/src/license/THIRD-PARTY.properties b/engines/metaxa/src/license/THIRD-PARTY.properties
index fa6b679..3c203f5 100644
--- a/engines/metaxa/src/license/THIRD-PARTY.properties
+++ b/engines/metaxa/src/license/THIRD-PARTY.properties
@@ -2,29 +2,34 @@
 #-------------------------------------------------------------------------------
 # Already used licenses in project :
 # - Aduna BSD license
-# - Apache License
+# - Apache Software License
+# - Apache Software License, Version 2.0
 # - BSD License
-# - BSD license
-# - BSD-style license
+# - BSD style license
 # - Bouncy Castle Licence
-# - Common Development and Distribution License (CDDL) v1.0
-# - Common Public License Version 1.0
+# - CDDL v1.1
+# - Common Development And Distribution License (CDDL), Version 1.0
+# - Common Development And Distribution License (CDDL), Version 1.1
+# - Common Public License, Version 1.0
+# - Eclipse Public License, Version 1.0
+# - GNU General Public License (GPL), Version 2 with classpath exception
+# - GNU Lesser General Public License (LGPL)
+# - GNU Lesser General Public License (LGPL), Version 2.1
 # - ICU License
 # - MIT License
-# - MIT license
-# - The Apache Software License, Version 2.0
-# - The BSD License
+# - Mozilla Public License 1.1
+# - Public Domain License
 # - iCal4j - License
 # - mstor License
 #-------------------------------------------------------------------------------
 # Please fill the missing licenses for dependencies :
 #
 #
-#Wed Feb 15 19:06:46 CET 2012
+#Sun Oct 07 16:45:31 CEST 2012
 com.drewnoakes--metadata-extractor--2.4.0-beta1.bundle=The Apache Software License, Version 2.0
 com.sun.xml.bind--jaxb-impl--2.1.9.bundle=CDDL v1.1
 dom4j--dom4j--1.6.1=BSD style license
-javax.servlet--servlet-api--2.4=Common Development And Distribution License (CDDL), Version 1.0
+javax.servlet--servlet-api--2.5=Common Development And Distribution License (CDDL), Version 1.0
 javax.xml.bind--jaxb-api--2.1.9.v200905050702_orbit=CDDL v1.1
 mp3agic--mp3agic--0.6=MIT License
 net.fortuna.ical4j--ical4j-vcard--0.9.3.ant20100406=iCal4j - License
diff --git a/engines/opencalais/pom.xml b/engines/opencalais/pom.xml
index 94ca43a..c814ab6 100644
--- a/engines/opencalais/pom.xml
+++ b/engines/opencalais/pom.xml
@@ -23,13 +23,13 @@
   <parent>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
     <groupId>org.apache.stanbol</groupId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.engines.opencalais</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer Enhancement Engine : OpenCalais</name>
@@ -39,12 +39,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/opencalais/
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/opencalais/
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/opencalais/
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/opencalais/
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <build>
@@ -55,9 +55,14 @@
         <extensions>true</extensions>
         <configuration>
           <instructions>
-            <Export-Package>
-              org.apache.stanbol.enhancer.engines.opencalais;version=${project.version},
-            </Export-Package>
+            <Import-Package>
+              org.apache.stanbol.enhancer.servicesapi; provide:=true,
+              org.apache.stanbol.enhancer.servicesapi.impl; provide:=true,
+              *
+            </Import-Package>
+            <Private-Package>
+              org.apache.stanbol.enhancer.engines.opencalais.impl
+            </Private-Package>
           </instructions>
         </configuration>
       </plugin>
@@ -93,7 +98,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
@@ -131,13 +136,13 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.test</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.core</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/engines/opencalais/src/license/THIRD-PARTY.properties b/engines/opencalais/src/license/THIRD-PARTY.properties
index 8a14ba9..edbbe6b 100644
--- a/engines/opencalais/src/license/THIRD-PARTY.properties
+++ b/engines/opencalais/src/license/THIRD-PARTY.properties
@@ -1,21 +1,25 @@
 # Generated by org.codehaus.mojo.license.AddThirdPartyMojo
 #-------------------------------------------------------------------------------
 # Already used licenses in project :
-# - Apache 2
-# - Apache License
-# - BSD
-# - BSD-style license
-# - Common Development and Distribution License (CDDL) v1.0
-# - Common Public License Version 1.0
+# - Apache Software License
+# - Apache Software License, Version 2.0
+# - BSD License
+# - Common Development And Distribution License (CDDL), Version 1.0
+# - Common Development And Distribution License (CDDL), Version 1.1
+# - Common Public License, Version 1.0
+# - Eclipse Public License, Version 1.0
+# - GNU General Public License (GPL), Version 2 with classpath exception
+# - GNU Lesser General Public License (LGPL)
+# - GNU Lesser General Public License (LGPL), Version 2.1
 # - ICU License
 # - MIT License
-# - The Apache Software License, Version 2.0
+# - Public Domain License
 #-------------------------------------------------------------------------------
 # Please fill the missing licenses for dependencies :
 #
 #
-#Wed Feb 15 19:07:17 CET 2012
-javax.servlet--servlet-api--2.4=Common Development And Distribution License (CDDL), Version 1.0
+#Sun Oct 07 18:27:28 CEST 2012
+javax.servlet--servlet-api--2.5=Common Development And Distribution License (CDDL), Version 1.0
 org.osgi--org.osgi.compendium--4.1.0=The Apache Software License, Version 2.0
 org.osgi--org.osgi.core--4.1.0=The Apache Software License, Version 2.0
 xerces--xercesImpl--2.7.1=The Apache Software License, Version 2.0
diff --git a/engines/opencalais/src/test/java/org/apache/stanbol/enhancer/engines/opencalais/impl/TestOpenCalaisEngine.java b/engines/opencalais/src/test/java/org/apache/stanbol/enhancer/engines/opencalais/impl/TestOpenCalaisEngine.java
index c75392e..4bfe6f0 100644
--- a/engines/opencalais/src/test/java/org/apache/stanbol/enhancer/engines/opencalais/impl/TestOpenCalaisEngine.java
+++ b/engines/opencalais/src/test/java/org/apache/stanbol/enhancer/engines/opencalais/impl/TestOpenCalaisEngine.java
@@ -38,6 +38,7 @@
 import org.apache.stanbol.enhancer.servicesapi.impl.StringSource;
 import org.apache.stanbol.enhancer.servicesapi.rdf.Properties;
 import org.apache.stanbol.enhancer.test.helper.EnhancementStructureHelper;
+import org.apache.stanbol.enhancer.test.helper.RemoteServiceHelper;
 import org.junit.Assert;
 import org.junit.Assume;
 import org.junit.BeforeClass;
@@ -97,7 +98,13 @@
         Assert.assertNotNull("failed to load resource " + testFile, in);
         MGraph model = calaisExtractor.readModel(in, format);
         Assert.assertNotNull("model reader failed with format: " + format, model);
-        Collection<CalaisEntityOccurrence> entities = calaisExtractor.queryModel(model);
+        Collection<CalaisEntityOccurrence> entities;
+        try {
+            entities = calaisExtractor.queryModel(model);
+        } catch (EngineException e) {
+            RemoteServiceHelper.checkServiceUnavailable(e);
+            return;
+        }
         LOG.info("Found entities: {}", entities.size());
         LOG.debug("Entities:\n{}", entities);
         Assert.assertFalse("No entities found!", entities.isEmpty());
@@ -117,22 +124,30 @@
     }
 
     @Test
-    public void testCalaisConnection() throws IOException {
+    public void testCalaisConnection() throws IOException, EngineException {
         Assume.assumeNotNull(calaisExtractor.getLicenseKey());
+        ContentItem ci = wrapAsContentItem(TEST_TEXT);
+        ci.getMetadata().add(
+            new TripleImpl(ci.getUri(), Properties.DC_LANGUAGE, LiteralFactory.getInstance()
+                    .createTypedLiteral("en")));
+        MGraph model;
         try {
-            ContentItem ci = wrapAsContentItem(TEST_TEXT);
-            ci.getMetadata().add(
-                new TripleImpl(ci.getUri(), Properties.DC_LANGUAGE, LiteralFactory.getInstance()
-                        .createTypedLiteral("en")));
-            MGraph model = calaisExtractor.getCalaisAnalysis(TEST_TEXT, "text/plain");
-            Assert.assertNotNull("No model", model);
-            Collection<CalaisEntityOccurrence> entities = calaisExtractor.queryModel(model);
-            LOG.info("Found entities: {}", entities.size());
-            LOG.debug("Entities:\n{}", entities);
-            Assert.assertFalse("No entities found!", entities.isEmpty());
+            model = calaisExtractor.getCalaisAnalysis(TEST_TEXT, "text/plain");
         } catch (EngineException e) {
-            Assert.fail("Connection problem: " + e.getMessage());
+            RemoteServiceHelper.checkServiceUnavailable(e);
+            return;
         }
+        Assert.assertNotNull("No model", model);
+        Collection<CalaisEntityOccurrence> entities;
+        try {
+            entities = calaisExtractor.queryModel(model);
+        } catch (EngineException e) {
+            RemoteServiceHelper.checkServiceUnavailable(e);
+            return;
+        }
+        LOG.info("Found entities: {}", entities.size());
+        LOG.debug("Entities:\n{}", entities);
+        Assert.assertFalse("No entities found!", entities.isEmpty());
     }
 
     // problem with license keys for testing?
diff --git a/engines/opennlp-ner/pom.xml b/engines/opennlp-ner/pom.xml
index 5bad93b..2936bdf 100644
--- a/engines/opennlp-ner/pom.xml
+++ b/engines/opennlp-ner/pom.xml
@@ -23,13 +23,13 @@
   <parent>
     <groupId>org.apache.stanbol</groupId>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.engines.opennlp.ner</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer Enhancement Engine : Semantic NER</name>
@@ -38,12 +38,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/opennlp-ner/
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/opennlp-ner/
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/opennlp-ner/
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/opennlp-ner/
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
 
@@ -82,7 +82,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>
     <dependency>
         <groupId>org.apache.stanbol</groupId>
@@ -124,25 +124,25 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.test</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.core</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.data.opennlp.lang.en</artifactId>
-      <version>1.0.2-incubating-SNAPSHOT</version>
+      <version>1.0.2-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.data.opennlp.ner.en</artifactId>
-      <version>1.0.2-incubating-SNAPSHOT</version>
+      <version>1.0.2-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/engines/pom.xml b/engines/pom.xml
index 8a3be8b..2c0e4ad 100644
--- a/engines/pom.xml
+++ b/engines/pom.xml
@@ -22,7 +22,7 @@
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.engines.reactor</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <name>Apache Stanbol Enhancer Engines Reactor</name>
@@ -33,12 +33,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <modules>
diff --git a/engines/refactor/pom.xml b/engines/refactor/pom.xml
index 5b6deb9..62eda4d 100644
--- a/engines/refactor/pom.xml
+++ b/engines/refactor/pom.xml
@@ -24,13 +24,13 @@
   <parent>
     <groupId>org.apache.stanbol</groupId>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.engines.refactor</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer Enhancement Engine : Refactor Engine</name>
@@ -41,12 +41,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/geonames/
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/geonames/
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/geonames/
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/geonames/
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <build>
@@ -57,11 +57,17 @@
         <extensions>true</extensions>
         <configuration>
           <instructions>
+            <Private-Package>
+              org.apache.stanbol.enhancer.engines.refactor
+            </Private-Package>
             <Export-Package>
-              org.apache.stanbol.enhancer.engines.refactor;version=${project.version}
+              org.apache.stanbol.enhancer.engines.refactor.dereferencer
             </Export-Package>
             <Import-Package>
               !javax.xml.stream.*,
+              org.apache.stanbol.enhancer.servicesapi; provide:=true,
+              org.apache.stanbol.enhancer.servicesapi.impl; provide:=true,
+              org.apache.stanbol.ontologymanager.sources.clerezza; provide:=true,
               *
             </Import-Package>
             <!-- TODO those should be bundles! -->
@@ -72,6 +78,19 @@
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-scr-plugin</artifactId>
       </plugin>
+      <plugin>
+        <groupId>org.apache.rat</groupId>
+        <artifactId>apache-rat-plugin</artifactId>
+        <configuration>
+          <excludes>
+            <!-- AL20 License  -->
+            <exclude>src/license/THIRD-PARTY.properties</exclude>
+
+            <!-- AL20 License, see src/main/resources/README -->
+            <exclude>src/main/resources/META-INF/default/seo_rules.sem</exclude>
+          </excludes>
+        </configuration>
+      </plugin>      
     </plugins>
   </build>
 
@@ -80,14 +99,14 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>
     
     <!-- EntityHub -->
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.entityhub.servicesapi</artifactId>
-      <version>0.11.0-incubating-SNAPSHOT</version>
+      <version>0.11.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
@@ -96,10 +115,11 @@
     </dependency>
 
     <!-- KReS dependencies -->
+    <!--
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.ontologymanager.ontonet</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <exclusions>
         <exclusion>
           <groupId>org.apache.felix</groupId>
@@ -119,28 +139,44 @@
         </exclusion>
       </exclusions>
     </dependency>
+    -->
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.commons.owl</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
+      <artifactId>org.apache.stanbol.ontologymanager.servicesapi</artifactId>
+      <version>0.10.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.stanbol</groupId>
+      <artifactId>org.apache.stanbol.ontologymanager.sources.clerezza</artifactId>
+      <version>0.10.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.stanbol</groupId>
+      <artifactId>org.apache.stanbol.ontologymanager.sources.owlapi</artifactId>
+      <version>0.10.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.rules.base</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.rules.manager</artifactId>
-      <version>0.9.0-incubating</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.rules.refactor</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>provided</scope>
     </dependency>
         
diff --git a/engines/refactor/src/license/THIRD-PARTY.properties b/engines/refactor/src/license/THIRD-PARTY.properties
index 67b8cc2..ff440d7 100644
--- a/engines/refactor/src/license/THIRD-PARTY.properties
+++ b/engines/refactor/src/license/THIRD-PARTY.properties
@@ -1,6 +1,7 @@
 # Generated by org.codehaus.mojo.license.AddThirdPartyMojo
 #-------------------------------------------------------------------------------
 # Already used licenses in project :
+# - Apache License Version 2.0, January 2004
 # - Apache Software License
 # - Apache Software License, Version 2.0
 # - BSD License
@@ -18,11 +19,10 @@
 # Please fill the missing licenses for dependencies :
 #
 #
-#Mon Mar 05 17:34:54 CET 2012
+#Sun Oct 07 18:21:39 CEST 2012
 asm--asm--3.1=BSD License
-javax.servlet--servlet-api--2.4=Common Development And Distribution License (CDDL), Version 1.0
+javax.servlet--servlet-api--2.5=Common Development And Distribution License (CDDL), Version 1.0
 org.codehaus.jettison--jettison--1.3=The Apache Software License, Version 2.0
 org.osgi--org.osgi.compendium--4.1.0=The Apache Software License, Version 2.0
 org.osgi--org.osgi.core--4.1.0=The Apache Software License, Version 2.0
-owlapi--owlapi--3.2.3=The Apache Software License, Version 2.0
 xerces--xercesImpl--2.7.1=The Apache Software License, Version 2.0
diff --git a/engines/refactor/src/main/java/org/apache/stanbol/enhancer/engines/refactor/RefactorEnhancementEngine.java b/engines/refactor/src/main/java/org/apache/stanbol/enhancer/engines/refactor/RefactorEnhancementEngine.java
index d1c5cfc..60d4b27 100644
--- a/engines/refactor/src/main/java/org/apache/stanbol/enhancer/engines/refactor/RefactorEnhancementEngine.java
+++ b/engines/refactor/src/main/java/org/apache/stanbol/enhancer/engines/refactor/RefactorEnhancementEngine.java
@@ -58,20 +58,20 @@
 import org.apache.stanbol.entityhub.model.clerezza.RdfValueFactory;
 import org.apache.stanbol.entityhub.servicesapi.model.Entity;
 import org.apache.stanbol.entityhub.servicesapi.site.SiteManager;
-import org.apache.stanbol.ontologymanager.ontonet.api.ONManager;
-import org.apache.stanbol.ontologymanager.ontonet.api.collector.DuplicateIDException;
-import org.apache.stanbol.ontologymanager.ontonet.api.collector.UnmodifiableOntologyCollectorException;
-import org.apache.stanbol.ontologymanager.ontonet.api.io.GraphContentInputSource;
-import org.apache.stanbol.ontologymanager.ontonet.api.io.GraphSource;
-import org.apache.stanbol.ontologymanager.ontonet.api.io.OntologyInputSource;
-import org.apache.stanbol.ontologymanager.ontonet.api.io.Origin;
-import org.apache.stanbol.ontologymanager.ontonet.api.io.RootOntologyIRISource;
-import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyProvider;
-import org.apache.stanbol.ontologymanager.ontonet.api.scope.OntologyScope;
-import org.apache.stanbol.ontologymanager.ontonet.api.scope.OntologySpace;
-import org.apache.stanbol.ontologymanager.ontonet.api.session.Session;
-import org.apache.stanbol.ontologymanager.ontonet.api.session.SessionLimitException;
-import org.apache.stanbol.ontologymanager.ontonet.api.session.SessionManager;
+import org.apache.stanbol.ontologymanager.servicesapi.collector.DuplicateIDException;
+import org.apache.stanbol.ontologymanager.servicesapi.collector.UnmodifiableOntologyCollectorException;
+import org.apache.stanbol.ontologymanager.servicesapi.io.OntologyInputSource;
+import org.apache.stanbol.ontologymanager.servicesapi.io.Origin;
+import org.apache.stanbol.ontologymanager.servicesapi.ontology.OntologyProvider;
+import org.apache.stanbol.ontologymanager.servicesapi.scope.OntologySpace;
+import org.apache.stanbol.ontologymanager.servicesapi.scope.Scope;
+import org.apache.stanbol.ontologymanager.servicesapi.scope.ScopeManager;
+import org.apache.stanbol.ontologymanager.servicesapi.session.Session;
+import org.apache.stanbol.ontologymanager.servicesapi.session.SessionLimitException;
+import org.apache.stanbol.ontologymanager.servicesapi.session.SessionManager;
+import org.apache.stanbol.ontologymanager.sources.clerezza.GraphContentInputSource;
+import org.apache.stanbol.ontologymanager.sources.clerezza.GraphSource;
+import org.apache.stanbol.ontologymanager.sources.owlapi.RootOntologyIRISource;
 import org.apache.stanbol.rules.base.api.AlreadyExistingRecipeException;
 import org.apache.stanbol.rules.base.api.NoSuchRecipeException;
 import org.apache.stanbol.rules.base.api.Recipe;
@@ -160,7 +160,7 @@
     private final Logger log = LoggerFactory.getLogger(getClass());
 
     @Reference
-    ONManager onManager;
+    ScopeManager onManager;
 
     @Reference
     OntologyProvider<TcProvider> ontologyProvider;
@@ -176,7 +176,7 @@
     @Reference
     RuleStore ruleStore;
 
-    private OntologyScope scope;
+    private Scope scope;
 
     @Reference
     SessionManager sessionManager;
@@ -496,7 +496,7 @@
         for (String s : failed)
             log.info(" >> {} : FAILED", s);
         ontologySpace.setUp();
-        if (!onManager.containsScope(scopeId)) onManager.registerScope(scope);
+        // if (!onManager.containsScope(scopeId)) onManager.registerScope(scope);
         onManager.setScopeActive(scopeId, true);
 
         /*
diff --git a/engines/topic/src/test/resources/README b/engines/refactor/src/main/resources/README
similarity index 83%
copy from engines/topic/src/test/resources/README
copy to engines/refactor/src/main/resources/README
index 5ebc6ad..8230694 100644
--- a/engines/topic/src/test/resources/README
+++ b/engines/refactor/src/main/resources/README
@@ -13,8 +13,10 @@
 See the License for the specific language governing permissions and
 limitations under the License.
 
-The following files are provided under the Apache License, Version 2.0:
+All listed files are provided under the 
 
-sample-scheme.skos.rdf.xml
+    Apache License, Version 2.0
+    
+This includes the following files:
 
-
+	META-INF/default/seo_rules.sem
\ No newline at end of file
diff --git a/engines/tika/pom.xml b/engines/tika/pom.xml
index be5cd21..05cfb75 100644
--- a/engines/tika/pom.xml
+++ b/engines/tika/pom.xml
@@ -23,13 +23,13 @@
   <parent>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
     <groupId>org.apache.stanbol</groupId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.engines.tika</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer Enhancement Engine : Apache Tika </name>
@@ -41,12 +41,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/tika/
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/tika/
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/tika/
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/tika/
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <build>
@@ -57,9 +57,19 @@
         <extensions>true</extensions>
         <configuration>
           <instructions>
-            <Export-Package>
-              org.apache.stanbol.enhancer.engines.tika;version=${project.version}
-            </Export-Package>
+            <Import-Package>
+              org.apache.stanbol.enhancer.servicesapi; provide:=true,
+              org.apache.stanbol.enhancer.servicesapi.impl; provide:=true,
+              *
+            </Import-Package>
+            <Private-Package>
+              org.apache.stanbol.enhancer.engines.tika.*
+            </Private-Package>
+            <!-- Workaround for COMPRESS-199 -->
+            <Embed-Dependency>
+                commons-compress, 
+                xz
+            </Embed-Dependency>
           </instructions>
         </configuration>
       </plugin>
@@ -107,7 +117,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>provided</scope>
     </dependency>
 
@@ -127,6 +137,18 @@
       <groupId>org.apache.clerezza</groupId>
       <artifactId>rdf.ontologies</artifactId>
     </dependency>
+    <!-- Tika 1.2 requires commons-compress 1.4.1 but this can not be used
+         as OSGI bundle because of COMPRESS-199 -->
+    <dependency>
+        <groupId>org.apache.commons</groupId>
+        <artifactId>commons-compress</artifactId>
+        <version>1.4.1</version>
+    </dependency>
+    <dependency>
+        <groupId>org.tukaani</groupId>
+        <artifactId>xz</artifactId>
+        <version>1.1</version>
+    </dependency>
     <dependency>
       <groupId>commons-io</groupId>
       <artifactId>commons-io</artifactId>
@@ -140,7 +162,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.core</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
     
diff --git a/engines/tika/src/license/THIRD-PARTY.properties b/engines/tika/src/license/THIRD-PARTY.properties
index 5b531fd..5c59dd8 100644
--- a/engines/tika/src/license/THIRD-PARTY.properties
+++ b/engines/tika/src/license/THIRD-PARTY.properties
@@ -5,6 +5,7 @@
 # - Apache Software License
 # - Apache Software License, Version 2.0
 # - BSD License
+# - BSD style license
 # - Bouncy Castle Licence
 # - Common Development And Distribution License (CDDL), Version 1.0
 # - Common Development And Distribution License (CDDL), Version 1.1
@@ -15,15 +16,16 @@
 # - GNU Lesser General Public License (LGPL), Version 2.1
 # - ICU License
 # - MIT License
+# - Mozilla Public License 1.1 (MPL 1.1)
 # - Public Domain License
 #-------------------------------------------------------------------------------
 # Please fill the missing licenses for dependencies :
 #
 #
-#Tue Feb 28 09:40:11 CET 2012
+#Sun Oct 07 18:15:10 CEST 2012
 asm--asm--3.1=Public Domain License
 dom4j--dom4j--1.6.1=BSD style license
-javax.servlet--servlet-api--2.4=Common Development And Distribution License (CDDL), Version 1.0
+javax.servlet--servlet-api--2.5=Common Development And Distribution License (CDDL), Version 1.0
 jdom--jdom--1.0=Apache Software License, Version 2.0
 org.osgi--org.osgi.compendium--4.1.0=Apache Software License, Version 2.0
 org.osgi--org.osgi.core--4.1.0=Apache Software License, Version 2.0
diff --git a/engines/tika/src/main/java/org/apache/stanbol/enhancer/engines/tika/TikaEngine.java b/engines/tika/src/main/java/org/apache/stanbol/enhancer/engines/tika/TikaEngine.java
index 9c7e86c..606d7d7 100644
--- a/engines/tika/src/main/java/org/apache/stanbol/enhancer/engines/tika/TikaEngine.java
+++ b/engines/tika/src/main/java/org/apache/stanbol/enhancer/engines/tika/TikaEngine.java
@@ -238,7 +238,7 @@
                 ci.addPart(xhtmlBlobUri,  xhtmlSink.getBlob());
             }
             //add the extracted metadata
-            if(log.isDebugEnabled()){
+            if(log.isInfoEnabled()){
                 for(String name : metadata.names()){
                     log.info("{}: {}",name,Arrays.toString(metadata.getValues(name)));
                 }
diff --git a/engines/tika/src/main/java/org/apache/stanbol/enhancer/engines/tika/metadata/OntologyMappings.java b/engines/tika/src/main/java/org/apache/stanbol/enhancer/engines/tika/metadata/OntologyMappings.java
index f8fc28f..c57553c 100644
--- a/engines/tika/src/main/java/org/apache/stanbol/enhancer/engines/tika/metadata/OntologyMappings.java
+++ b/engines/tika/src/main/java/org/apache/stanbol/enhancer/engines/tika/metadata/OntologyMappings.java
@@ -165,41 +165,41 @@
         String dc = NamespaceEnum.dc.getNamespace();
         mappings.addMapping(
             new PropertyMapping(dc+"contributor",
-                DublinCore.CONTRIBUTOR,MSOffice.LAST_AUTHOR));
+                DublinCore.CONTRIBUTOR.getName(),MSOffice.LAST_AUTHOR));
         mappings.addMapping(
-            new PropertyMapping(dc+"coverage",DublinCore.COVERAGE));
+            new PropertyMapping(dc+"coverage",DublinCore.COVERAGE.getName()));
         mappings.addMappings(
             new PropertyMapping(dc+"creator",
-                DublinCore.CREATOR,MSOffice.AUTHOR,"initial-creator"));
+                DublinCore.CREATOR.getName(),MSOffice.AUTHOR,"initial-creator"));
         mappings.addMappings( 
-            new PropertyMapping(dc+"description",DublinCore.DESCRIPTION));
+            new PropertyMapping(dc+"description",DublinCore.DESCRIPTION.getName()));
         mappings.addMappings( 
             new PropertyMapping(dc+"format",
-                DublinCore.FORMAT,HttpHeaders.CONTENT_TYPE));
+                DublinCore.FORMAT.getName(),HttpHeaders.CONTENT_TYPE));
         mappings.addMappings( 
-            new PropertyMapping(dc+"identifier",DublinCore.IDENTIFIER));
+            new PropertyMapping(dc+"identifier",DublinCore.IDENTIFIER.getName()));
         mappings.addMappings(
             new PropertyMapping(dc+"language",
-                DublinCore.LANGUAGE,HttpHeaders.CONTENT_LANGUAGE));
+                DublinCore.LANGUAGE.getName(),HttpHeaders.CONTENT_LANGUAGE));
         mappings.addMappings(
             new PropertyMapping(dc+"modified",XSD.dateTime,
-                DublinCore.MODIFIED,"Last-Modified"));
+                DublinCore.MODIFIED.getName(),"Last-Modified"));
         mappings.addMappings( 
             new PropertyMapping(dc+"publisher",
-                DublinCore.PUBLISHER,MSOffice.COMPANY));
+                DublinCore.PUBLISHER.getName(),MSOffice.COMPANY));
         mappings.addMappings( 
-            new PropertyMapping(dc+"relation",DublinCore.RELATION));
+            new PropertyMapping(dc+"relation",DublinCore.RELATION.getName()));
         mappings.addMappings(
-            new PropertyMapping(dc+"rights",DublinCore.RIGHTS));
+            new PropertyMapping(dc+"rights",DublinCore.RIGHTS.getName()));
         mappings.addMappings( 
-            new PropertyMapping(dc+"source",DublinCore.SOURCE));
+            new PropertyMapping(dc+"source",DublinCore.SOURCE.getName()));
         mappings.addMappings( 
             new PropertyMapping(dc+"subject",
-                DublinCore.SUBJECT,MSOffice.KEYWORDS));
+                DublinCore.SUBJECT.getName(),MSOffice.KEYWORDS));
         mappings.addMappings( 
-            new PropertyMapping(dc+"title",DublinCore.TITLE));
+            new PropertyMapping(dc+"title",DublinCore.TITLE.getName()));
         mappings.addMappings( 
-            new PropertyMapping(dc+"type",DublinCore.TYPE));
+            new PropertyMapping(dc+"type",DublinCore.TYPE.getName()));
         mappings.addMappings( 
             new PropertyMapping(dc+"date",XSD.dateTime,DublinCore.DATE.getName()));
         //MS Office -> DC
@@ -211,19 +211,19 @@
     public static void addMediaResourceOntologyMappings(OntologyMappings mappings){
         mappings.addMappings(
             new PropertyMapping(ma+"hasContributor",
-                DublinCore.CONTRIBUTOR,XMPDM.ARTIST.getName(),XMPDM.COMPOSER.getName()));
+                DublinCore.CONTRIBUTOR.getName(),XMPDM.ARTIST.getName(),XMPDM.COMPOSER.getName()));
         mappings.addMapping( 
             new ResourceMapping(ma+"hasLocation",
                 new TypeMapping(ma+"Location"),
-                new PropertyMapping(ma+"locationName",DublinCore.COVERAGE)));
+                new PropertyMapping(ma+"locationName",DublinCore.COVERAGE.getName())));
         mappings.addMappings( 
             new PropertyMapping(ma+"hasCreator",
-                DublinCore.CREATOR,MSOffice.AUTHOR,"initial-creator"));
+                DublinCore.CREATOR.getName(),MSOffice.AUTHOR,"initial-creator"));
         mappings.addMappings( 
-            new PropertyMapping(ma+"description",DublinCore.DESCRIPTION));
+            new PropertyMapping(ma+"description",DublinCore.DESCRIPTION.getName()));
         mappings.addMappings( 
             new PropertyMapping(ma+"hasFormat",
-                DublinCore.FORMAT,HttpHeaders.CONTENT_TYPE));
+                DublinCore.FORMAT.getName(),HttpHeaders.CONTENT_TYPE));
         /*
          * Excerpt of the MA recommendation:
          *   The identifier of a media resource is represented in RDF by the URI 
@@ -231,30 +231,30 @@
          *   identified by several URI, owl:sameAs should be used.
          */
         mappings.addMappings( 
-            new PropertyMapping(OWL.sameAs,RDFS.Resource,DublinCore.IDENTIFIER));
+            new PropertyMapping(OWL.sameAs,RDFS.Resource,DublinCore.IDENTIFIER.getName()));
         mappings.addMappings( 
             new PropertyMapping(ma+"hasLanguage",
-                DublinCore.LANGUAGE,HttpHeaders.CONTENT_LANGUAGE));
+                DublinCore.LANGUAGE.getName(),HttpHeaders.CONTENT_LANGUAGE));
         mappings.addMappings( 
             new PropertyMapping(ma+"editDate",XSD.dateTime,
-                DublinCore.MODIFIED,MSOffice.LAST_SAVED.getName()));
+                DublinCore.MODIFIED.getName(),MSOffice.LAST_SAVED.getName()));
         mappings.addMappings(
-            new PropertyMapping(ma+"hasPublisher",DublinCore.PUBLISHER));
+            new PropertyMapping(ma+"hasPublisher",DublinCore.PUBLISHER.getName()));
         mappings.addMappings( 
-            new PropertyMapping(ma+"hasRelatedResource",DublinCore.RELATION));
+            new PropertyMapping(ma+"hasRelatedResource",DublinCore.RELATION.getName()));
         mappings.addMappings( 
             new PropertyMapping(ma+"copyright",RDFS.Resource,
                 //DC:rights and cc:license
-                DublinCore.RIGHTS,CreativeCommons.LICENSE_LOCATION, CreativeCommons.LICENSE_URL,
+                DublinCore.RIGHTS.getName(),CreativeCommons.LICENSE_LOCATION, CreativeCommons.LICENSE_URL,
                 XMPDM.COPYRIGHT.getName()));
         mappings.addMappings( 
-            new PropertyMapping(ma+"isMemberOf",DublinCore.SOURCE));
+            new PropertyMapping(ma+"isMemberOf",DublinCore.SOURCE.getName()));
         mappings.addMappings( 
             new PropertyMapping(ma+"hasKeyword",
-                DublinCore.SUBJECT,MSOffice.KEYWORDS));
+                DublinCore.SUBJECT.getName(),MSOffice.KEYWORDS));
         mappings.addMappings( 
             new PropertyMapping(ma+"title",
-                DublinCore.TITLE,XMPDM.SCENE.getName(),XMPDM.TAPE_NAME.getName(),
+                DublinCore.TITLE.getName(),XMPDM.SCENE.getName(),XMPDM.TAPE_NAME.getName(),
                 XMPDM.SHOT_NAME.getName()));
         mappings.addMapping(
             new PropertyMapping(ma+"alternativeTitle", XMPDM.ALT_TAPE_NAME.getName()));
@@ -262,13 +262,13 @@
             new PropertyMapping(ma+"mainOriginalTitle", XMPDM.ALBUM.getName()));
         mappings.addMappings( 
             new PropertyMapping(ma+"hasGenre",
-                DublinCore.TYPE,XMPDM.GENRE.getName()));
+                DublinCore.TYPE.getName(),XMPDM.GENRE.getName()));
         mappings.addMappings(
             new PropertyMapping(ma+"creationDate",XSD.dateTime,
                 DublinCore.DATE.getName(),MSOffice.CREATION_DATE.getName(),"created"));
         mappings.addMapping(
             new PropertyMapping(ma+"description", 
-                DublinCore.DESCRIPTION,MSOffice.COMMENTS));
+                DublinCore.DESCRIPTION.getName(),MSOffice.COMMENTS));
         
         mappings.addMappings( 
             new PropertyMapping(ma+"hasContributor",
@@ -400,13 +400,13 @@
         //DC -> SKOS
         mappings.addMappings( 
             new PropertyMapping(SKOS.prefLabel,
-                DublinCore.TITLE));
+                DublinCore.TITLE.getName()));
         mappings.addMappings( 
             new PropertyMapping(SKOS.definition,
-                DublinCore.DESCRIPTION));
+                DublinCore.DESCRIPTION.getName()));
         mappings.addMappings(
             new PropertyMapping(SKOS.notation,
-                DublinCore.IDENTIFIER));
+                DublinCore.IDENTIFIER.getName()));
         //MS Office -> SKOS
         mappings.addMappings( 
             new PropertyMapping(SKOS.note,MSOffice.COMMENTS));
@@ -418,9 +418,9 @@
     public static void addRdfsMappings(OntologyMappings mappings){
         //DC
         mappings.addMappings( 
-            new PropertyMapping(RDFS.label,DublinCore.TITLE));
+            new PropertyMapping(RDFS.label,DublinCore.TITLE.getName()));
         mappings.addMappings( 
-            new PropertyMapping(RDFS.comment,DublinCore.DESCRIPTION,MSOffice.COMMENTS));
+            new PropertyMapping(RDFS.comment,DublinCore.DESCRIPTION.getName(),MSOffice.COMMENTS));
     }
     
     /**
diff --git a/engines/tika/src/test/java/org/apache/stanbol/enhancer/engines/tika/TikaEngineTest.java b/engines/tika/src/test/java/org/apache/stanbol/enhancer/engines/tika/TikaEngineTest.java
index b824159..198e1d3 100644
--- a/engines/tika/src/test/java/org/apache/stanbol/enhancer/engines/tika/TikaEngineTest.java
+++ b/engines/tika/src/test/java/org/apache/stanbol/enhancer/engines/tika/TikaEngineTest.java
@@ -301,7 +301,7 @@
         assertNotNull(xhtmlBlob);
         assertContentRegexp(xhtmlBlob, 
             "<html xmlns=\"http://www.w3.org/1999/xhtml\">",
-            "<title></title>",
+            "<title>\\[jira\\] Commented: \\(TIKA-461\\) RFC822 messages not parsed</title>",
             "<body><p>",
             "Julien Nioche commented on TIKA-461:",
             "I'll have a look at mime4j and try to use it in Tika",
@@ -310,9 +310,12 @@
             "URL: https://issues.apache.org/jira/browse/TIKA-461");
         //no check the extracted metadata!
         //DC
-        verifyValue(ci, new UriRef(NamespaceEnum.dc+"date"), XSD.dateTime,"2010-09-06T09:25:34Z");
+        //STANBOL-757: dc:date no longer added by Tika 1.2 (dc:created is still present)
+        //verifyValue(ci, new UriRef(NamespaceEnum.dc+"date"), XSD.dateTime,"2010-09-06T09:25:34Z");
         verifyValue(ci, new UriRef(NamespaceEnum.dc+"format"), null,"message/rfc822");
-        verifyValue(ci, new UriRef(NamespaceEnum.dc+"subject"), null,"[jira] Commented: (TIKA-461) RFC822 messages not parsed");
+        //STANBOL-757: dc:subject no longer added by Tika1.2 (dc:title is used instead)
+        //verifyValue(ci, new UriRef(NamespaceEnum.dc+"subject"), null,"[jira] Commented: (TIKA-461) RFC822 messages not parsed");
+        verifyValue(ci, new UriRef(NamespaceEnum.dc+"title"), null,"[jira] Commented: (TIKA-461) RFC822 messages not parsed");
         verifyValue(ci, new UriRef(NamespaceEnum.dc+"creator"), null,"Julien Nioche (JIRA) <jira@apache.org>");
         verifyValue(ci, new UriRef(NamespaceEnum.dc+"created"), XSD.dateTime,"2010-09-06T09:25:34Z");
         
@@ -321,7 +324,8 @@
         verifyValue(ci, new UriRef(NamespaceEnum.media+"hasFormat"),null,"message/rfc822");
         verifyValue(ci, new UriRef(NamespaceEnum.media+"hasCreator"),null,"Julien Nioche (JIRA) <jira@apache.org>");
         verifyValue(ci, new UriRef(NamespaceEnum.media+"hasContributor"),null,"Julien Nioche (JIRA) <jira@apache.org>");
-        verifyValue(ci, new UriRef(NamespaceEnum.media+"hasKeyword"),null,"[jira] Commented: (TIKA-461) RFC822 messages not parsed");
+        //STANBOL-757: This was present with Tika 1.1 because its mapping from dc:subject 
+//        verifyValue(ci, new UriRef(NamespaceEnum.media+"hasKeyword"),null,"[jira] Commented: (TIKA-461) RFC822 messages not parsed");
 
         
         //Nepomuk Message
@@ -370,7 +374,7 @@
      * @throws IOException
      * @throws ParseException
      */
-    //@Test deactivated because of TIKA-852
+    @Test 
     public void testMp4() throws EngineException, IOException, ParseException {
         log.info(">>> testMp4 <<<");
         ContentItem ci = createContentItem("testMP4.m4a", "audio/mp4");
@@ -481,7 +485,7 @@
         verifyValues(ci, new UriRef(NamespaceEnum.media+"hasKeyword"),null,"serbor","moscow-birds","canon-55-250");
         //and finally the mapped DC properties
         verifyValue(ci, new UriRef(NamespaceEnum.dc+"format"),null,"image/jpeg");
-        verifyValue(ci, new UriRef(NamespaceEnum.dc+"date"),XSD.dateTime,"2009-08-11T09:09:45");
+        verifyValue(ci, new UriRef(NamespaceEnum.dc+"created"),XSD.dateTime,"2009-08-11T09:09:45");
         verifyValue(ci, new UriRef(NamespaceEnum.dc+"modified"),XSD.dateTime,"2009-10-02T23:02:49");
         verifyValues(ci, new UriRef(NamespaceEnum.dc+"subject"), null, "serbor","moscow-birds","canon-55-250");
     }
diff --git a/engines/topic/pom.xml b/engines/topic/pom.xml
index 3eed8af..efaed01 100644
--- a/engines/topic/pom.xml
+++ b/engines/topic/pom.xml
@@ -17,13 +17,13 @@
   <parent>
     <groupId>org.apache.stanbol</groupId>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.engine.topic</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer Enhancement Engine : Topic Classification</name>
@@ -41,12 +41,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/topic/
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/topic/
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/topic/
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/topic/
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <build>
@@ -61,10 +61,18 @@
         <extensions>true</extensions>
         <configuration>
           <instructions>
+            <Import-Package>
+              org.apache.stanbol.enhancer.servicesapi; provide:=true,
+              org.apache.stanbol.enhancer.servicesapi.impl; provide:=true,
+              *
+            </Import-Package>
             <Export-Package>
-              org.apache.stanbol.enhancer.topic.*;version=${project.version},
-              org.apache.stanbol.enhancer.engine.topic.*;version=${project.version}
+              org.apache.stanbol.enhancer.topic;version=${project.version},
+              org.apache.stanbol.enhancer.topic.training;version=${project.version}
             </Export-Package>
+            <Private-Package>
+              org.apache.stanbol.enhancer.engine.topic
+            </Private-Package>
             <Install-Path>install-config</Install-Path>
             <Data-Files>data-files</Data-Files>
             <Data-Files-Priority>-100</Data-Files-Priority>
@@ -80,8 +88,9 @@
         <artifactId>apache-rat-plugin</artifactId>
         <configuration>
           <excludes>
-            <!-- AL20 licensed files. See src/test/resources/README -->
-            <exclude>src/test/resources/classifier/topics_abstracts_snippet.tsv</exclude>
+            <!-- AL20 licensed files. See src/main/resources/README -->
+            <exclude>src/main/resources/install-config/default-topic-model.solrindex.ref</exclude>
+            <exclude>src/license/THIRD-PARTY.properties</exclude>
           </excludes>
         </configuration>
       </plugin>
@@ -273,22 +282,22 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.entityhub.servicesapi</artifactId>
-      <version>0.11.0-incubating-SNAPSHOT</version>
+      <version>0.11.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.commons.solr.core</artifactId>
-      <version>0.9.0-incubating</version>
+      <version>0.10.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.commons.solr.managed</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>    
   </dependencies>
 
diff --git a/engines/topic/src/license/THIRD-PARTY.properties b/engines/topic/src/license/THIRD-PARTY.properties
index 6dd3b23..16c59ee 100644
--- a/engines/topic/src/license/THIRD-PARTY.properties
+++ b/engines/topic/src/license/THIRD-PARTY.properties
@@ -1,36 +1,32 @@
 # Generated by org.codehaus.mojo.license.AddThirdPartyMojo
 #-------------------------------------------------------------------------------
 # Already used licenses in project :
-# - ALv2
-# - Apache 2
-# - Apache License
-# - Apache License Version 2
-# - Apache License Version 2.0
-# - Apache License, Version 2.0
-# - Apache Software License - Version 2.0
-# - Apache Software License, Version 1.1
-# - BSD
-# - BSD-style license
-# - CDDL 1.1
-# - Common Development and Distribution License (CDDL) v1.0
-# - Common Public License Version 1.0
-# - Eclipse Public License - Version 1.0
-# - GPL2 w/ CPE
+# - Apache Software License
+# - Apache Software License, Version 2.0
+# - BSD License
+# - BSD-style
+# - Common Development And Distribution License (CDDL), Version 1.0
+# - Common Development And Distribution License (CDDL), Version 1.1
+# - Common Public License, Version 1.0
+# - Eclipse Public License, Version 1.0
+# - GNU General Public License (GPL), Version 2 with classpath exception
+# - GNU Lesser General Public License (LGPL)
+# - GNU Lesser General Public License (LGPL), Version 2.1
 # - ICU License
 # - MIT License
-# - The Apache Software License, Version 2.0
+# - Public Domain License
 #-------------------------------------------------------------------------------
 # Please fill the missing licenses for dependencies :
 #
 #
-#Wed Feb 15 19:06:16 CET 2012
+#Sun Oct 07 16:38:47 CEST 2012
 antlr--antlr--2.7.2=Public Domain
 asm--asm--3.1=BSD License
 commons-beanutils--commons-beanutils--1.7.0=The Apache Software License, Version 2.0
 dom4j--dom4j--1.1=BSD-style
 jakarta-regexp--jakarta-regexp--1.4=The Apache Software License, Version 2.0
 javax.portlet--portlet-api--2.0=The Apache Software License, Version 2.0
-javax.servlet--servlet-api--2.4=Common Development And Distribution License (CDDL), Version 1.0
+javax.servlet--servlet-api--2.5=Common Development And Distribution License (CDDL), Version 1.0
 org.apache.zookeeper--zookeeper--3.3.1=The Apache Software License, Version 2.0
 org.codehaus.jettison--jettison--1.3=The Apache Software License, Version 2.0
 org.osgi--org.osgi.compendium--4.1.0=The Apache Software License, Version 2.0
diff --git a/engines/topic/src/test/resources/README b/engines/topic/src/main/resources/README
similarity index 94%
rename from engines/topic/src/test/resources/README
rename to engines/topic/src/main/resources/README
index 5ebc6ad..91656aa 100644
--- a/engines/topic/src/test/resources/README
+++ b/engines/topic/src/main/resources/README
@@ -15,6 +15,4 @@
 
 The following files are provided under the Apache License, Version 2.0:
 
-sample-scheme.skos.rdf.xml
-
-
+install-config/default-topic-model.solrindex.ref
diff --git a/engines/zemanta/pom.xml b/engines/zemanta/pom.xml
index 3da8885..ad82751 100644
--- a/engines/zemanta/pom.xml
+++ b/engines/zemanta/pom.xml
@@ -23,13 +23,13 @@
   <parent>
     <groupId>org.apache.stanbol</groupId>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.engines.zemanta</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer Enhancement Engine : Zemanta Tagging</name>
@@ -38,12 +38,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/zemanta/
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/zemanta/
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/engines/zemanta/
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/engines/zemanta/
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <build>
@@ -62,9 +62,17 @@
         <extensions>true</extensions>
         <configuration>
           <instructions>
+            <Import-Package>
+              org.apache.stanbol.enhancer.servicesapi; provide:=true,
+              org.apache.stanbol.enhancer.servicesapi.impl; provide:=true,
+              *
+            </Import-Package>
             <Private-Package>
               org.apache.stanbol.enhancer.engines.zemanta.impl.*
             </Private-Package>
+            <Export-Package>
+              org.apache.stanbol.enhancer.engines.zemanta
+            </Export-Package>
           </instructions>
         </configuration>
       </plugin>
@@ -79,7 +87,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
@@ -119,13 +127,13 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.test</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.core</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/engines/zemanta/src/test/java/org/apache/stanbol/enhancer/engines/zemanta/impl/ZemantaEnhancementEngineTest.java b/engines/zemanta/src/test/java/org/apache/stanbol/enhancer/engines/zemanta/impl/ZemantaEnhancementEngineTest.java
index 2ae4da0..a965607 100644
--- a/engines/zemanta/src/test/java/org/apache/stanbol/enhancer/engines/zemanta/impl/ZemantaEnhancementEngineTest.java
+++ b/engines/zemanta/src/test/java/org/apache/stanbol/enhancer/engines/zemanta/impl/ZemantaEnhancementEngineTest.java
@@ -40,6 +40,7 @@
 import org.apache.stanbol.enhancer.servicesapi.impl.StringSource;
 import org.apache.stanbol.enhancer.servicesapi.rdf.Properties;
 import org.apache.stanbol.enhancer.test.helper.EnhancementStructureHelper;
+import org.apache.stanbol.enhancer.test.helper.RemoteServiceHelper;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -98,16 +99,13 @@
     }
 
     @Test
-    public void tesetBioText() throws Exception {
+    public void tesetBioText()  throws EngineException, IOException {
         ContentItem ci = wrapAsContentItem(BIO_DOMAIN_TEXT);
         try {
             zemantaEngine.computeEnhancements(ci);
         } catch (EngineException e) {
-            if(e.getCause() != null && e.getCause() instanceof UnknownHostException){
-                log.warn("Zemanta Service not reachable -> offline? -> deactivate test");
-                return;
-            }
-            throw e;
+            RemoteServiceHelper.checkServiceUnavailable(e);
+            return;
         }
         JenaSerializerProvider serializer = new JenaSerializerProvider();
         serializer.serialize(System.out, ci.getMetadata(), TURTLE);
diff --git a/generic/core/pom.xml b/generic/core/pom.xml
index 3968d48..ed38040 100644
--- a/generic/core/pom.xml
+++ b/generic/core/pom.xml
@@ -23,13 +23,13 @@
   <parent>
     <groupId>org.apache.stanbol</groupId>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.core</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer Core</name>
@@ -39,12 +39,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/generic/core/
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/generic/core/
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/generic/core/
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/generic/core/
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <build>
@@ -55,13 +55,18 @@
         <extensions>true</extensions>
         <configuration>
           <instructions>
+            <Import-Package>
+              org.apache.stanbol.enhancer.servicesapi; provide:=true,
+              org.apache.stanbol.enhancer.servicesapi.impl; provide:=true,
+              *
+            </Import-Package>
             <Export-Package>
               org.apache.stanbol.enhancer.contentitem.inmemory;version=${project.version},
               org.apache.stanbol.enhancer.contentitem.file;version=${project.version}
             </Export-Package>
             <Private-Package>
-              org.apache.stanbol.enhancer.chainmanager.impl;version=${project.version},
-              org.apache.stanbol.enhancer.enginemanager.impl;version=${project.version}
+              org.apache.stanbol.enhancer.chainmanager.impl,
+              org.apache.stanbol.enhancer.enginemanager.impl
             </Private-Package>
           </instructions>
         </configuration>
@@ -77,7 +82,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
@@ -102,7 +107,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.test</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>junit</groupId>
diff --git a/generic/core/src/license/THIRD-PARTY.properties b/generic/core/src/license/THIRD-PARTY.properties
index 7697d62..deeabc9 100644
--- a/generic/core/src/license/THIRD-PARTY.properties
+++ b/generic/core/src/license/THIRD-PARTY.properties
@@ -18,7 +18,7 @@
 # Please fill the missing licenses for dependencies :
 #
 #
-#Mon Apr 09 10:37:58 CEST 2012
-javax.servlet--servlet-api--2.4=Common Development And Distribution License (CDDL), Version 1.0
+#Sun Oct 07 16:03:50 CEST 2012
+javax.servlet--servlet-api--2.5=Common Development And Distribution License (CDDL), Version 1.0
 org.osgi--org.osgi.compendium--4.1.0=Apache Software License, Version 2.0
 org.osgi--org.osgi.core--4.1.0=Apache Software License, Version 2.0
diff --git a/generic/rdfentities/pom.xml b/generic/rdfentities/pom.xml
index 7bfcc64..1e44620 100644
--- a/generic/rdfentities/pom.xml
+++ b/generic/rdfentities/pom.xml
@@ -23,13 +23,13 @@
   <parent>
     <groupId>org.apache.stanbol</groupId>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.rdfentities</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer RDF entities</name>
@@ -39,12 +39,12 @@
 
     <scm>
         <connection>
-            scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/generic/rdfentities/
+            scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/generic/rdfentities/
         </connection>
         <developerConnection>
-            scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/generic/rdfentities/
+            scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/generic/rdfentities/
         </developerConnection>
-        <url>http://incubator.apache.org/stanbol/</url>
+        <url>http://stanbol.apache.org/</url>
     </scm>
 
   <build>
@@ -72,7 +72,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
@@ -97,7 +97,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.core</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/generic/servicesapi/pom.xml b/generic/servicesapi/pom.xml
index 66f6895..694a537 100644
--- a/generic/servicesapi/pom.xml
+++ b/generic/servicesapi/pom.xml
@@ -17,13 +17,13 @@
   <parent>
     <groupId>org.apache.stanbol</groupId>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer Services API</name>
@@ -33,12 +33,12 @@
 
   <scm>
     <connection>
-            scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/generic/servicesapi/
+            scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/generic/servicesapi/
         </connection>
     <developerConnection>
-            scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/generic/servicesapi/
+            scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/generic/servicesapi/
         </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <build>
@@ -49,8 +49,10 @@
         <extensions>true</extensions>
         <configuration>
           <instructions>
+            <!-- NOTE: define servicesapi package as provide:=true, because of the
+                 included abstract implementations of some of those interfaces -->
             <Export-Package>
-              org.apache.stanbol.enhancer.servicesapi;version=${project.version},
+              org.apache.stanbol.enhancer.servicesapi;version=${project.version}; provide:=true,
               org.apache.stanbol.enhancer.servicesapi.helper;version=${project.version},
               org.apache.stanbol.enhancer.servicesapi.helper.execution;version=${project.version},
               org.apache.stanbol.enhancer.servicesapi.impl;version=${project.version},
diff --git a/generic/servicesapi/src/license/THIRD-PARTY.properties b/generic/servicesapi/src/license/THIRD-PARTY.properties
index ad1e804..5735dfe 100644
--- a/generic/servicesapi/src/license/THIRD-PARTY.properties
+++ b/generic/servicesapi/src/license/THIRD-PARTY.properties
@@ -1,17 +1,24 @@
 # Generated by org.codehaus.mojo.license.AddThirdPartyMojo
 #-------------------------------------------------------------------------------
 # Already used licenses in project :
-# - Apache License
-# - Common Development and Distribution License (CDDL) v1.0
-# - Common Public License Version 1.0
+# - Apache Software License
+# - Apache Software License, Version 2.0
+# - BSD License
+# - Common Development And Distribution License (CDDL), Version 1.0
+# - Common Development And Distribution License (CDDL), Version 1.1
+# - Common Public License, Version 1.0
+# - Eclipse Public License, Version 1.0
+# - GNU General Public License (GPL), Version 2 with classpath exception
+# - GNU Lesser General Public License (LGPL)
+# - GNU Lesser General Public License (LGPL), Version 2.1
 # - ICU License
 # - MIT License
-# - The Apache Software License, Version 2.0
+# - Public Domain License
 #-------------------------------------------------------------------------------
 # Please fill the missing licenses for dependencies :
 #
 #
-#Thu Feb 16 11:07:03 CET 2012
-javax.servlet--servlet-api--2.4=Common Development And Distribution License (CDDL), Version 1.0
+#Sun Oct 07 15:55:01 CEST 2012
+javax.servlet--servlet-api--2.5=Common Development And Distribution License (CDDL), Version 1.0
 org.osgi--org.osgi.compendium--4.1.0=The Apache Software License, Version 2.0
 org.osgi--org.osgi.core--4.1.0=The Apache Software License, Version 2.0
diff --git a/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/ChainException.java b/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/ChainException.java
index 9e371b5..b0717c1 100644
--- a/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/ChainException.java
+++ b/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/ChainException.java
@@ -16,12 +16,12 @@
 */
 package org.apache.stanbol.enhancer.servicesapi;
 
-import static org.apache.stanbol.enhancer.servicesapi.helper.ExecutionPlanHelper.getDependend;
-import static org.apache.stanbol.enhancer.servicesapi.helper.ExecutionPlanHelper.getEngine;
-import static org.apache.stanbol.enhancer.servicesapi.helper.ExecutionPlanHelper.isOptional;
-
-import org.apache.clerezza.rdf.core.Graph;
-import org.apache.clerezza.rdf.core.NonLiteral;
+//import static org.apache.stanbol.enhancer.servicesapi.helper.ExecutionPlanHelper.getDependend;
+//import static org.apache.stanbol.enhancer.servicesapi.helper.ExecutionPlanHelper.getEngine;
+//import static org.apache.stanbol.enhancer.servicesapi.helper.ExecutionPlanHelper.isOptional;
+//
+//import org.apache.clerezza.rdf.core.Graph;
+//import org.apache.clerezza.rdf.core.NonLiteral;
 
 /**
  * BaseException thrown by {@link Chain} implementations or
@@ -40,18 +40,20 @@
     public ChainException(String message, Throwable cause) {
         super(message,cause);
     }
-    /**
-     * Creates a chain exception for the parsed node within the parsed executionPlan
-     * @param executionPlan
-     * @param node
-     * @param message
-     * @param cause
-     */
-    public ChainException(Graph executionPlan, NonLiteral node, String message, Throwable cause){
-        super(String.format("Unable to execute node {} (engine: {} | optional : {}" +
-        		" | dependsOn : {}) because of: {}",
-            node,getEngine(executionPlan, node),
-            isOptional(executionPlan, node), getDependend(executionPlan, node),
-            message == null || message.isEmpty() ? "<unknown>": message),cause);
-    }
+    
+//Removed - unused
+//    /**
+//     * Creates a chain exception for the parsed node within the parsed executionPlan
+//     * @param executionPlan
+//     * @param node
+//     * @param message
+//     * @param cause
+//     */
+//    public ChainException(Graph executionPlan, NonLiteral node, String message, Throwable cause){
+//        super(String.format("Unable to execute node {} (engine: {} | optional : {}" +
+//        		" | dependsOn : {}) because of: {}",
+//            node,getEngine(executionPlan, node),
+//            isOptional(executionPlan, node), getDependend(executionPlan, node),
+//            message == null || message.isEmpty() ? "<unknown>": message),cause);
+//    }
 }
diff --git a/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/ContentItem.java b/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/ContentItem.java
index da3b08c..3cdc4b9 100644
--- a/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/ContentItem.java
+++ b/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/ContentItem.java
@@ -17,10 +17,11 @@
 package org.apache.stanbol.enhancer.servicesapi;
 
 import java.io.InputStream;
+import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReadWriteLock;
 
+import org.apache.clerezza.rdf.core.MGraph;
 import org.apache.clerezza.rdf.core.UriRef;
-import org.apache.clerezza.rdf.core.access.LockableMGraph;
 
 /**
  * A unit of content that Stanbol Enhancer can enhance.
@@ -51,12 +52,13 @@
     /**
      * Read/write lock used to synchronise access to the {@link #getMetadata()
      * metadata} and the content parts of this content item.<p>
-     * The lock used by the {@link LockableMGraph#getLock()} MUST BE the same
-     * as the lock returned by this Instance. This is to avoid deadlocks when
-     * using a lock while iterating over the {@link #getMetadata() metadata} and
-     * simultaneously accessing the content parts. In other words
-     * calling <code> contentItem.getLock() == contentItem.getMetadata().getLock()</code>
-     * MUST BE <code>true</code>
+     * The lock needs to be used for reading and writing information from/to
+     * the ContentItem. In case the {@link MGraph} retured by {@link #getMetadata()}
+     * is an instanceof used by the {@link org.apache.clerezza.rdf.core.access.LockableMGraph}
+     * the {@link Lock} returned by this mehtod is the same as used by the
+     * metadata.This is to avoid deadlocks when using a lock while iterating over 
+     * the {@link #getMetadata() metadata} and simultaneously accessing the content 
+     * parts.
      *  
      * @return the lock used for the content parts and the {@link LockableMGraph}
      * containing the metadata of this content item.
@@ -64,7 +66,7 @@
     ReadWriteLock getLock();
     
     /** Optional metadata */
-    LockableMGraph getMetadata();
+    MGraph getMetadata();
     
     /**
      * The main content of this content item
diff --git a/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/ContentItemFactory.java b/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/ContentItemFactory.java
index 35f3e7c..6e22edf 100644
--- a/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/ContentItemFactory.java
+++ b/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/ContentItemFactory.java
@@ -23,7 +23,6 @@
 import org.apache.clerezza.rdf.core.MGraph;
 import org.apache.clerezza.rdf.core.Triple;
 import org.apache.clerezza.rdf.core.UriRef;
-import org.apache.stanbol.enhancer.servicesapi.helper.ContentItemHelper;
 
 /**
  * OSGI service to be used to create {@link ContentItem}s and Blobs.
@@ -54,7 +53,7 @@
      * Note the only a generated ID will be added to the passed prefix. So passed
      * values should typically end with an separator char (e.g. '/', '#', ':').
      * Implementors might want to use
-     * {@link ContentItemHelper#streamDigest(InputStream, java.io.OutputStream, String)
+     * {@link org.apache.stanbol.enhancer.servicesapi.helper.ContentItemHelper#streamDigest(InputStream, java.io.OutputStream, String)
      * for generating an ID while reading the data from the ContentSource.
      * @param source The content source
      * @return the {@link ContentItem} with a generated id and the passed
diff --git a/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/helper/ExecutionPlanHelper.java b/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/helper/ExecutionPlanHelper.java
index f9bad33..1f6a8cf 100644
--- a/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/helper/ExecutionPlanHelper.java
+++ b/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/helper/ExecutionPlanHelper.java
@@ -57,9 +57,13 @@
 import org.apache.stanbol.enhancer.servicesapi.ServiceProperties;
 import org.apache.stanbol.enhancer.servicesapi.impl.EnginesTracker;
 import org.apache.stanbol.enhancer.servicesapi.rdf.ExecutionPlan;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public final class ExecutionPlanHelper {
     
+    private final static Logger log = LoggerFactory.getLogger(ExecutionPlanHelper.class);
+    
     private static LiteralFactory lf = LiteralFactory.getInstance();
     
     private ExecutionPlanHelper(){/* Do not allow instances of utility classes*/}
@@ -184,7 +188,14 @@
                 current = new HashSet<NonLiteral>();
                 prevOrder = order;
             }
-            current.add(writeExecutionNode(ep, epNode, name, optional.contains(name), prev));
+            try {
+                current.add(writeExecutionNode(ep, epNode, name, optional.contains(name), prev));
+            } catch (RuntimeException e){
+                //add the engine and class to ease debugging in such cases
+                log.error("Exception while writing ExecutionNode for Enhancement Eninge: "
+                    + engine +"(class: "+engine.getClass()+")",e);
+                throw e; //rethrow it
+            }
         }
         return ep.getGraph();
     }
diff --git a/generic/servicesapi/src/main/resources/fise.owl b/generic/servicesapi/src/main/resources/fise.owl
index a49dd81..b481520 100644
--- a/generic/servicesapi/src/main/resources/fise.owl
+++ b/generic/servicesapi/src/main/resources/fise.owl
@@ -1,4 +1,20 @@
 <?xml version="1.0"?>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
 <rdf:RDF
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:protege="http://protege.stanford.edu/plugins/owl/protege#"
diff --git a/generic/test/pom.xml b/generic/test/pom.xml
index 86f630a..c583aff 100644
--- a/generic/test/pom.xml
+++ b/generic/test/pom.xml
@@ -23,13 +23,13 @@
   <parent>
     <groupId>org.apache.stanbol</groupId>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.test</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>jar</packaging>
 
   <name>Apache Stanbol Enhancer Test framework</name>
@@ -40,12 +40,12 @@
 
     <scm>
         <connection>
-            scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/generic/test/
+            scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/generic/test/
         </connection>
         <developerConnection>
-            scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/generic/test/
+            scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/generic/test/
         </developerConnection>
-        <url>http://incubator.apache.org/stanbol/</url>
+        <url>http://stanbol.apache.org/</url>
     </scm>
 
   <build>
@@ -74,7 +74,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>
 
     <dependency>
diff --git a/generic/test/src/license/THIRD-PARTY.properties b/generic/test/src/license/THIRD-PARTY.properties
index d219911..d562401 100644
--- a/generic/test/src/license/THIRD-PARTY.properties
+++ b/generic/test/src/license/THIRD-PARTY.properties
@@ -18,7 +18,7 @@
 # Please fill the missing licenses for dependencies :
 #
 #
-#Mon Apr 09 10:44:04 CEST 2012
-javax.servlet--servlet-api--2.4=Common Development And Distribution License (CDDL), Version 1.0
+#Sun Oct 07 16:00:11 CEST 2012
+javax.servlet--servlet-api--2.5=Common Development And Distribution License (CDDL), Version 1.0
 org.osgi--org.osgi.compendium--4.1.0=Apache Software License, Version 2.0
 org.osgi--org.osgi.core--4.1.0=Apache Software License, Version 2.0
diff --git a/generic/test/src/main/java/org/apache/stanbol/enhancer/test/helper/EnhancementStructureHelper.java b/generic/test/src/main/java/org/apache/stanbol/enhancer/test/helper/EnhancementStructureHelper.java
index f158cb8..df00dbd 100644
--- a/generic/test/src/main/java/org/apache/stanbol/enhancer/test/helper/EnhancementStructureHelper.java
+++ b/generic/test/src/main/java/org/apache/stanbol/enhancer/test/helper/EnhancementStructureHelper.java
@@ -1,3 +1,19 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
 package org.apache.stanbol.enhancer.test.helper;
 
 import static org.apache.stanbol.enhancer.servicesapi.rdf.OntologicalClasses.DBPEDIA_ORGANISATION;
@@ -319,10 +335,16 @@
         // check if the relation to the text annotation is set
         assertTrue(relationToTextAnnotationIterator.hasNext());
         while (relationToTextAnnotationIterator.hasNext()) {
-            // test if the referred annotations are text annotations
+            // test if the referred annotations are text annotations or
+            // the referenced annotations is a fise:EntityAnnotation AND also a
+            // dc:requires link is defined (STANBOL-766)
             UriRef referredTextAnnotation = (UriRef) relationToTextAnnotationIterator.next().getObject();
-            assertTrue(enhancements.filter(referredTextAnnotation, RDF_TYPE,
-                    ENHANCER_TEXTANNOTATION).hasNext());
+            assertTrue("fise:EntityAnnotations MUST BE dc:related to a fise:TextAnnotation OR dc:requires and dc:related to the same fise:EntityAnnotation",
+                enhancements.filter(referredTextAnnotation, RDF_TYPE,
+                    ENHANCER_TEXTANNOTATION).hasNext() || (
+                enhancements.filter(referredTextAnnotation, RDF_TYPE,
+                    ENHANCER_ENTITYANNOTATION).hasNext() && 
+                    enhancements.filter(entityAnnotation, Properties.DC_REQUIRES, referredTextAnnotation).hasNext()));
         }
 
         // test if an entity is referred
@@ -420,7 +442,8 @@
             XSD.dateTime.equals(((TypedLiteral)createdResource).getDataType()));
         Date creationDate = LiteralFactory.getInstance().createObject(Date.class, (TypedLiteral)createdResource);
         assertNotNull("Unable to convert "+createdResource+" to a Java Date object",creationDate);
-        assertTrue("CreationDate MUST NOT be in the Future",new Date().after(creationDate));
+        Date now = new Date();
+        assertTrue("CreationDate MUST NOT be in the Future",now.after(creationDate) || now.equals(creationDate));
         assertFalse("Only a single createnDate MUST BE present", createdIterator.hasNext());
         //validate optional modification date if present
         Iterator<Triple> modDateIterator = enhancements.filter(enhancement, DCTERMS.modified, null);
diff --git a/generic/test/src/main/java/org/apache/stanbol/enhancer/test/helper/RemoteServiceHelper.java b/generic/test/src/main/java/org/apache/stanbol/enhancer/test/helper/RemoteServiceHelper.java
new file mode 100644
index 0000000..e980da0
--- /dev/null
+++ b/generic/test/src/main/java/org/apache/stanbol/enhancer/test/helper/RemoteServiceHelper.java
@@ -0,0 +1,87 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.stanbol.enhancer.test.helper;
+
+import java.io.IOException;
+import java.net.SocketTimeoutException;
+import java.net.UnknownHostException;
+
+import org.apache.stanbol.enhancer.servicesapi.EngineException;
+import org.apache.stanbol.enhancer.servicesapi.EnhancementEngine;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Utility that provides utilities for Unit Tests that need to access remote
+ * services
+ * 
+ * @author Rupert Westenthaler
+ *
+ */
+public final class RemoteServiceHelper {
+
+    private static final Logger log = LoggerFactory.getLogger(RemoteServiceHelper.class);
+    
+    private RemoteServiceHelper(){}
+    
+    
+    /**
+     * Catches {@link IOException}s or {@link EngineException} that are caused
+     * by {@link IOException}s indicating that a remote service is not available
+     * @param e the Exception to check
+     * @param containedInMessage Optionally an Err
+     * @throws T the parsed Exception if it was not caused by an External service
+     * that is not available
+     */
+    public static <T extends Exception> void checkServiceUnavailable(T e, String...containedInMessage) throws T {
+        Throwable check;
+        if(e instanceof EngineException){
+            check = e.getCause(); //check the cuase
+        } else {
+            check = e;
+        }
+        if (check instanceof UnknownHostException) {
+            log.warn("deactivate Test because of "+check.getMessage(), e);
+            return;
+        } else if (check instanceof SocketTimeoutException) {
+            log.warn("deactivate Test because of "+check.getMessage(), e);
+            return;
+        } else if (check instanceof IOException){
+            String message = check.getMessage();
+            //check for typical messates
+            if(message != null && message.contains("Connection refused")) {
+                log.warn("deactivate Test because connection to remote service was refused (Message: '"
+                        +check.getMessage()+"')", e);
+                return;
+            } else if(message.contains("Server returned HTTP response code: 50")){
+                log.warn("deactivate Test because Internal Error of remote serivce (Message: '"
+                        +check.getMessage()+"')", e);
+                return;
+            } else if(containedInMessage != null){
+                for(String contained : containedInMessage){
+                    if(message.contains(contained)){
+                        log.warn("deactivate Test because IOException of remote Service contained '"
+                            + contained+"' (Message: '"+check.getMessage()+"')", e);
+                        return;
+                    }
+                }
+            }
+        }
+        throw e;
+    }
+    
+}
diff --git a/jersey/pom.xml b/jersey/pom.xml
index 3784f21..f4d6d0e 100644
--- a/jersey/pom.xml
+++ b/jersey/pom.xml
@@ -22,13 +22,13 @@
   <parent>
     <groupId>org.apache.stanbol</groupId>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../parent/pom.xml</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.jersey</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer Web (Jersey)</name>
@@ -36,12 +36,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/jersey/
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/jersey/
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/jersey/
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/jersey/
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <build>
@@ -91,7 +91,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
@@ -202,7 +202,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.core</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/jobmanager/event/pom.xml b/jobmanager/event/pom.xml
index 77f1fdb..ed844b8 100644
--- a/jobmanager/event/pom.xml
+++ b/jobmanager/event/pom.xml
@@ -23,13 +23,13 @@
   <parent>
     <groupId>org.apache.stanbol</groupId>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.eventjobmanager</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer Event Jobmanager</name>
@@ -43,12 +43,12 @@
 
     <scm>
         <connection>
-            scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/jobmanager/event/
+            scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/jobmanager/event/
         </connection>
         <developerConnection>
-            scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/jobmanager/event/
+            scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/jobmanager/event/
         </developerConnection>
-        <url>http://incubator.apache.org/stanbol/</url>
+        <url>http://stanbol.apache.org/</url>
     </scm>
 
   <build>
@@ -59,6 +59,10 @@
         <extensions>true</extensions>
         <configuration>
           <instructions>
+            <Import-Package>
+              org.apache.stanbol.enhancer.servicesapi; provide:=true; version="[0.9.0,0.11)",
+              *
+            </Import-Package>
             <Export-Package>
               org.apache.stanbol.enhancer.jobmanager.event;version=${project.version}
             </Export-Package>
diff --git a/jobmanager/event/src/license/THIRD-PARTY.properties b/jobmanager/event/src/license/THIRD-PARTY.properties
index 8a2b281..db47af4 100644
--- a/jobmanager/event/src/license/THIRD-PARTY.properties
+++ b/jobmanager/event/src/license/THIRD-PARTY.properties
@@ -1,17 +1,24 @@
 # Generated by org.codehaus.mojo.license.AddThirdPartyMojo
 #-------------------------------------------------------------------------------
 # Already used licenses in project :
-# - Apache License
-# - Common Development and Distribution License (CDDL) v1.0
-# - Common Public License Version 1.0
+# - Apache Software License
+# - Apache Software License, Version 2.0
+# - BSD License
+# - Common Development And Distribution License (CDDL), Version 1.0
+# - Common Development And Distribution License (CDDL), Version 1.1
+# - Common Public License, Version 1.0
+# - Eclipse Public License, Version 1.0
+# - GNU General Public License (GPL), Version 2 with classpath exception
+# - GNU Lesser General Public License (LGPL)
+# - GNU Lesser General Public License (LGPL), Version 2.1
 # - ICU License
 # - MIT License
-# - The Apache Software License, Version 2.0
+# - Public Domain License
 #-------------------------------------------------------------------------------
 # Please fill the missing licenses for dependencies :
 #
 #
-#Wed Feb 15 19:01:55 CET 2012
-javax.servlet--servlet-api--2.4=Common Development And Distribution License (CDDL), Version 1.0
+#Sun Oct 07 16:06:06 CEST 2012
+javax.servlet--servlet-api--2.5=Common Development And Distribution License (CDDL), Version 1.0
 org.osgi--org.osgi.compendium--4.1.0=The Apache Software License, Version 2.0
 org.osgi--org.osgi.core--4.1.0=The Apache Software License, Version 2.0
diff --git a/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EnhancementJobHandler.java b/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EnhancementJobHandler.java
index 7f4bde0..0aa3549 100644
--- a/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EnhancementJobHandler.java
+++ b/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EnhancementJobHandler.java
@@ -25,13 +25,11 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Dictionary;
-import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
 import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -40,13 +38,14 @@
 import org.apache.stanbol.enhancer.servicesapi.EngineException;
 import org.apache.stanbol.enhancer.servicesapi.EnhancementEngine;
 import org.apache.stanbol.enhancer.servicesapi.EnhancementEngineManager;
-import org.apache.stanbol.enhancer.servicesapi.helper.ExecutionPlanHelper;
 import org.osgi.service.event.Event;
 import org.osgi.service.event.EventAdmin;
 import org.osgi.service.event.EventHandler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.ibm.icu.lang.UCharacter.SentenceBreak;
+
 public class EnhancementJobHandler implements EventHandler {
 
     private EnhancementEngineManager engineManager;
@@ -69,7 +68,7 @@
      * contentItems and the values are the objects used to interrupt the 
      * requesting thread as soon as the enhancement process has finished. 
      */
-    private Map<EnhancementJob,Object> processingJobs;
+    private Map<EnhancementJob,EnhancementJobObserver> processingJobs;
     private final ReadWriteLock processingLock = new ReentrantReadWriteLock();
     private Thread observerDaemon;
     
@@ -85,11 +84,11 @@
         this.engineManager = engineManager;
         processingLock.writeLock().lock();
         try {
-            processingJobs = new LinkedHashMap<EnhancementJob,Object>();
+            processingJobs = new LinkedHashMap<EnhancementJob,EnhancementJobObserver>();
         } finally{
             processingLock.writeLock().unlock();
         }
-        observerDaemon = new Thread(new EnhancementJobObserver());
+        observerDaemon = new Thread(new EnhancementJobObserverDaemon());
         observerDaemon.setName("Event Job Manager Observer Daemon");
         observerDaemon.setDaemon(true);
         observerDaemon.start();
@@ -134,19 +133,19 @@
      * @return An object that will get {@link Object#notifyAll()} as soon as
      * {@link EnhancementJob#isFinished()} or this instance is deactivated
      */
-    public Object register(EnhancementJob enhancementJob){
+    public EnhancementJobObserver register(EnhancementJob enhancementJob){
         final boolean init;
-        Object o;
+        EnhancementJobObserver observer;
         processingLock.writeLock().lock();
         try {
             if(enhancementJob == null || processingJobs == null){
                 return null;
             }
-            o = processingJobs.get(enhancementJob);
-            if(o == null){
-                o = new Object();
-                logJobInfo(enhancementJob, "Add EnhancementJob:");
-                processingJobs.put(enhancementJob, o);
+            observer = processingJobs.get(enhancementJob);
+            if(observer == null){
+                observer = new EnhancementJobObserver(enhancementJob);
+                logJobInfo(log, enhancementJob, "Add EnhancementJob:",false);
+                processingJobs.put(enhancementJob, observer);
                 init = true;
             } else {
                 init = false;
@@ -155,6 +154,7 @@
             processingLock.writeLock().unlock();
         }
         if(init){
+            observer.acquire();
             enhancementJob.startProcessing();
             log.debug("++ w: {}","init execution");
             enhancementJob.getLock().writeLock().lock();
@@ -166,7 +166,7 @@
                 enhancementJob.getLock().writeLock().unlock();
             }
         }
-        return o;
+        return observer;
     }
 
     @Override
@@ -283,18 +283,21 @@
      */
     private void finish(EnhancementJob job){
         processingLock.writeLock().lock();
-        Object o;
+        EnhancementJobObserver observer;
         try {
-            o = processingJobs.remove(job);
+            observer = processingJobs.remove(job);
         } finally {
             processingLock.writeLock().unlock();
         }
-        if(o != null) {
-            synchronized (o) {
-                logJobInfo(job, "Finished EnhancementJob:");
+        if(observer != null) {
+            try {
+                logJobInfo(log, job, "Finished EnhancementJob:",false);
                 log.debug("++ n: finished processing ContentItem {} with Chain {}",
                     job.getContentItem().getUri(),job.getChainName());
-                o.notifyAll();
+            } finally {
+                //release the semaphore to send signal to the EventJobManager waiting
+                //for the results
+                observer.release();
             }
         } else {
             log.warn("EnhancementJob for ContentItem {} is not " +
@@ -335,15 +338,16 @@
      * Logs basic infos about the Job as INFO and detailed infos as DEBUG
      * @param job
      */
-    protected void logJobInfo(EnhancementJob job, String header) {
+    protected static void logJobInfo(Logger log, EnhancementJob job, String header, boolean logExecutions) {
         if(header != null){
             log.info(header);
         }
-        log.info("   state: {}",job.isFinished()?"finished":job.isFailed()?"failed":"processing");
-        log.info("   chain: {}",job.getChainName());
+        log.info("   finished:     {}",job.isFinished());
+        log.info("   state:        {}",job.isFailed()?"failed":"processing");
+        log.info("   chain:        {}",job.getChainName());
         log.info("   content-item: {}", job.getContentItem().getUri());
-        log.debug("   executions:");
-        if(log.isDebugEnabled()){
+        if(logExecutions){
+            log.info("  executions:");
             for(NonLiteral completedExec : job.getCompleted()){
                 log.info("    - {} completed",getEngine(job.getExecutionMetadata(), 
                     job.getExecutionNode(completedExec)));
@@ -354,16 +358,87 @@
             }
         }
     }
+    public class EnhancementJobObserver{
+        
+        private static final int MIN_WAIT_TIME = 500;
+        private final EnhancementJob enhancementJob;
+        private final Semaphore semaphore;
+        
+        private EnhancementJobObserver(EnhancementJob job){
+            if(job == null){
+                throw new IllegalArgumentException("The parsed EnhancementJob MUST NOT be NULL!");
+            }
+            this.enhancementJob = job;
+            this.semaphore = new Semaphore(1);
+        }
+
+        protected void acquire() {
+            try {
+                semaphore.acquire();
+            } catch (InterruptedException e) {
+                log.warn("Interrupted while acquireing Semaphore for EnhancementJob "
+                        + enhancementJob + "!",e);
+            }
+        }
+        
+        protected void release() {
+            semaphore.release();
+        }
+
+        public boolean hasCompleted() {
+            enhancementJob.getLock().readLock().lock();
+            try {
+                return enhancementJob.isFinished();
+            } finally {
+                enhancementJob.getLock().readLock().unlock();
+            }
+        }
+
+        public void waitForCompletion(int maxEnhancementJobWaitTime) {
+            if(semaphore.availablePermits() < 1){
+                // The only permit is taken by the EnhancementJobHander
+                try {
+                    semaphore.tryAcquire(1,
+                        Math.max(MIN_WAIT_TIME, maxEnhancementJobWaitTime),TimeUnit.MILLISECONDS);
+                } catch (InterruptedException e) {
+                    //interupted
+                }
+            } else if(!hasCompleted()){
+                int wait = Math.max(100, maxEnhancementJobWaitTime/10);
+                log.warn("Unexpected permit available for Semaphore of "
+                    + "EnhancementJob of ContentItem {}. Fallback to wait({})"
+                    + "for detecting if Job has finished. While the fallback "
+                    + "should ensure correct Enhancement results this indicates a "
+                    + "Bug in the EventHobManager. Please feel free to report "
+                    + "This on dev@stanbol.apache.org or the Apache Stanbol "
+                    + "Issue Tracker.",enhancementJob.getContentItem().getUri(),wait);
+                try {
+                    Thread.currentThread().wait(wait);
+                } catch (InterruptedException e) {
+                    //interupted
+                }
+            }// else completed
+        }
+        
+    }
+    
+    
     /**
      * Currently only used to debug the number of currently registered
      * Enhancements Jobs (if there are some)
      * @author Rupert Westenthaler
      */
-    private class EnhancementJobObserver implements Runnable {
+    private class EnhancementJobObserverDaemon implements Runnable {
 
+        /**
+         * The logger of the Observer. Can be used to configure Loglevel specificly
+         * 
+         */
+        private Logger observerLog = LoggerFactory.getLogger(EnhancementJobObserverDaemon.class);
+        
         @Override
         public void run() {
-            log.debug(" ... init EnhancementJobObserver");
+            observerLog.debug(" ... init EnhancementJobObserver");
             while(processingJobs != null){
                 try {
                     Thread.sleep(10000);
@@ -382,13 +457,13 @@
                     readLock.unlock();
                 }
                 if(!jobs.isEmpty()){
-                    log.info(" -- {} active Enhancement Jobs",jobs.size());
-                    if(log.isDebugEnabled()){
+                    observerLog.info(" -- {} active Enhancement Jobs",jobs.size());
+                    if(observerLog.isDebugEnabled()){
                         for(EnhancementJob job : jobs){
                             Lock jobLock = job.getLock().readLock();
                             jobLock.lock();
                             try {
-                                logJobInfo(job,null);
+                                logJobInfo(observerLog,job,null,true);
                             } finally {
                                 jobLock.unlock();
                             }
diff --git a/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EventJobManagerImpl.java b/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EventJobManagerImpl.java
index c65ac10..aecd1b8 100644
--- a/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EventJobManagerImpl.java
+++ b/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EventJobManagerImpl.java
@@ -21,6 +21,7 @@
 import java.util.Dictionary;
 import java.util.Hashtable;
 import java.util.List;
+import java.util.concurrent.Semaphore;
 
 import org.apache.clerezza.rdf.core.Graph;
 import org.apache.felix.scr.annotations.Activate;
@@ -30,6 +31,7 @@
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.Service;
+import org.apache.stanbol.enhancer.jobmanager.event.impl.EnhancementJobHandler.EnhancementJobObserver;
 import org.apache.stanbol.enhancer.servicesapi.Chain;
 import org.apache.stanbol.enhancer.servicesapi.ChainException;
 import org.apache.stanbol.enhancer.servicesapi.ChainManager;
@@ -58,6 +60,8 @@
     private final Logger log = LoggerFactory.getLogger(EventJobManagerImpl.class);
     
     public static final int DEFAULT_SERVICE_RANKING = 0;
+
+    private static final int MAX_ENHANCEMENT_JOB_WAIT_TIME = 10*1000;
     
     @Reference
     protected ChainManager chainManager;
@@ -127,16 +131,10 @@
         EnhancementJob job = new EnhancementJob(ci, chain.getName(), chain.getExecutionPlan(),isDefaultChain);
         //start the execution
         //wait for the results
-        Object object = jobHandler.register(job);
-        while(!job.isFinished() & jobHandler != null){
-            synchronized (object) {
-                try {
-                    object.wait();
-                } catch (InterruptedException e) {
-                    log.debug("Interupped for EnhancementJob if ContentItem {}",
-                        job.getContentItem().getUri());
-                }
-            }
+        EnhancementJobObserver observer = jobHandler.register(job);
+        //TODO: allow configuring a max completion time (e.g. 1min)
+        while(!observer.hasCompleted() & jobHandler != null){
+            observer.waitForCompletion(MAX_ENHANCEMENT_JOB_WAIT_TIME);
         }
         log.info("{} EnhancementJob for ContentItem {} after {}ms",
             new Object[]{ job.isFailed() ? "Failed" : "Finished",
@@ -148,7 +146,12 @@
         //      RESTful interface of the Enhancer!
         //ci.getMetadata().addAll(job.getExecutionMetadata());
         if(job.isFailed()){
-            throw new ChainException(job.getErrorMessage(), job.getError());
+        	Exception e = job.getError();
+        	if (e instanceof SecurityException) {
+        		throw (SecurityException)e;
+        	} else {
+        		throw new ChainException(job.getErrorMessage(), e);
+        	}
         }
         if(!job.isFinished()){
             throw new ChainException("EnhancementJobManager was deactivated while" +
diff --git a/jobmanager/pom.xml b/jobmanager/pom.xml
index 18c5f11..4a0f726 100644
--- a/jobmanager/pom.xml
+++ b/jobmanager/pom.xml
@@ -22,7 +22,7 @@
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.jobmanager.reactor</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <name>Apache Stanbol Enhancer JobManager Reactor</name>
@@ -33,12 +33,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/jobmanager
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/jobmanager
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/jobmanager
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/jobmanager
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <modules>
diff --git a/jobmanager/weightedjobmanager/pom.xml b/jobmanager/weightedjobmanager/pom.xml
index 903926f..0b9e25f 100644
--- a/jobmanager/weightedjobmanager/pom.xml
+++ b/jobmanager/weightedjobmanager/pom.xml
@@ -23,13 +23,13 @@
   <parent>
     <groupId>org.apache.stanbol</groupId>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
   
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.weightedjobmanager</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
   
   <name>Apache Stanbol Enhancer Weighted Job Manager</name>
@@ -42,12 +42,12 @@
   
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/jobmanager/weightedjobmanager/
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/jobmanager/weightedjobmanager/
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/jobmanager/weightedjobmanager/
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/jobmanager/weightedjobmanager/
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
   
   <build>
diff --git a/ldpath/pom.xml b/ldpath/pom.xml
index f50159a..a3a0a6a 100644
--- a/ldpath/pom.xml
+++ b/ldpath/pom.xml
@@ -22,13 +22,13 @@
   <parent>
     <groupId>org.apache.stanbol</groupId>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../parent/pom.xml</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.ldpath</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer LDPath</name>
@@ -36,12 +36,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/ldpath/
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/ldpath/
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/ldpath/
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/ldpath/
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <build>
@@ -92,7 +92,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
@@ -130,7 +130,7 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.core</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/parent/pom.xml b/parent/pom.xml
index 7a6da64..4a32829 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -22,13 +22,13 @@
   <parent>
     <groupId>org.apache.stanbol</groupId>
     <artifactId>stanbol-parent</artifactId>
-    <version>2-incubating-SNAPSHOT</version>
+    <version>2-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <name>Apache Stanbol Enhancer Parent POM</name>
@@ -38,12 +38,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/parent/
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/parent/
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/parent/
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/parent/
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <build>
diff --git a/pom.xml b/pom.xml
index 9a6f54a..60faee3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.reactor</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <name>Apache Stanbol Enhancer Reactor</name>
@@ -40,12 +40,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <modules>
diff --git a/topic-web/pom.xml b/topic-web/pom.xml
index 545c601..1539564 100644
--- a/topic-web/pom.xml
+++ b/topic-web/pom.xml
@@ -17,13 +17,13 @@
   <parent>
     <groupId>org.apache.stanbol</groupId>
     <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
-    <version>0.10.0-incubating-SNAPSHOT</version>
+    <version>0.10.0-SNAPSHOT</version>
     <relativePath>../parent</relativePath>
   </parent>
 
   <groupId>org.apache.stanbol</groupId>
   <artifactId>org.apache.stanbol.enhancer.web.topic</artifactId>
-  <version>0.10.0-incubating-SNAPSHOT</version>
+  <version>0.10.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <name>Apache Stanbol Enhancer Topic Classification - Web API</name>
@@ -36,12 +36,12 @@
 
   <scm>
     <connection>
-      scm:svn:http://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/topic-web/
+      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/topic-web/
     </connection>
     <developerConnection>
-      scm:svn:https://svn.apache.org/repos/asf/incubator/stanbol/trunk/enhancer/topic-web/
+      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/topic-web/
     </developerConnection>
-    <url>http://incubator.apache.org/stanbol/</url>
+    <url>http://stanbol.apache.org/</url>
   </scm>
 
   <build>
@@ -80,17 +80,17 @@
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.commons.web.base</artifactId>
-      <version>0.10.1-incubating-SNAPSHOT</version>
+      <version>0.10.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.stanbol</groupId>
       <artifactId>org.apache.stanbol.enhancer.engine.topic</artifactId>
-      <version>0.10.0-incubating-SNAPSHOT</version>
+      <version>0.10.0-SNAPSHOT</version>
     </dependency>
     
     <dependency>
