diff --git a/KEYS b/KEYS
index 80fd078..428118a 100644
--- a/KEYS
+++ b/KEYS
@@ -814,3 +814,60 @@
 gxPfPeJOHeS8nl6gLwgouXCN/s2so4l1YeE3ig==
 =lu9b
 -----END PGP PUBLIC KEY BLOCK-----
+pub   4096R/2A239C2C 2011-11-01
+      Key fingerprint = 052A 7A10 A583 CAEF C3D1  F92C 89A1 F651 2A23 9C2C
+uid                  Christian Mueller (CODE SIGNING KEY) <cmueller@apache.org>
+sub   4096R/7501638F 2011-11-01
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
+Comment: GPGTools - http://gpgtools.org
+
+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
+VdtX5ybVw7o7m6VyrkKhZf0m
+=sBMN
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/components/camel-cxf-transport/pom.xml b/components/camel-cxf-transport/pom.xml
index d05b6d0..dc4198b 100644
--- a/components/camel-cxf-transport/pom.xml
+++ b/components/camel-cxf-transport/pom.xml
@@ -104,12 +104,6 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.apache.cxf</groupId>
-      <artifactId>cxf-rt-bindings-jbi</artifactId>
-      <version>${cxf-version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
       <groupId>org.apache.httpcomponents</groupId>
       <artifactId>httpclient</artifactId>
       <version>${httpclient4-version}</version>
diff --git a/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/transport/CamelJBIClientProxyTest.java b/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/transport/CamelJBIClientProxyTest.java
deleted file mode 100644
index f3710ef..0000000
--- a/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/transport/CamelJBIClientProxyTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.component.cxf.transport;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.ProducerTemplate;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-public class CamelJBIClientProxyTest {
-    private HelloService proxy;
-    private ClassPathXmlApplicationContext applicationContext;
-    
-    @Before
-    public void setUp() {
-        // setup service
-        applicationContext = new ClassPathXmlApplicationContext(new String[]{"/org/apache/camel/component/cxf/transport/CamelJBIClientProxy.xml"});
-        applicationContext.start();
-        proxy = (HelloService) applicationContext.getBean("client");
-        assertNotNull("The proxy should not be null.", proxy);
-    }
-    
-    
-    @Test
-    public void testCallFromProxy() throws Exception {
-        // The echo parameter will be ignore, since the service has the fix response
-        String response = proxy.echo("Hello World!");
-        assertEquals("Get a wrong response ", "echo Hello World!", response);
-    }
-    
-    @Test
-    public void testCallFromCamel() throws Exception {
-        // get camel context
-        CamelContext context = (CamelContext) applicationContext.getBean("conduit_context");
-        ProducerTemplate producer = context.createProducerTemplate();
-        // The echo parameter will be ignore, since the service has the fix response
-        String response = producer.requestBody("direct://jbiStart", "Hello World!", String.class);
-        assertEquals("Get a wrong response ", "echo Hello World!", response);
-    }
-    
-    @After
-    public void tearDown() {
-        if (applicationContext != null) {
-            applicationContext.stop();
-        }
-    }
-    
-    
-    
-
-}
diff --git a/components/camel-cxf-transport/src/test/resources/org/apache/camel/component/cxf/transport/CamelJBIClientProxy.xml b/components/camel-cxf-transport/src/test/resources/org/apache/camel/component/cxf/transport/CamelJBIClientProxy.xml
deleted file mode 100644
index c57a1f4..0000000
--- a/components/camel-cxf-transport/src/test/resources/org/apache/camel/component/cxf/transport/CamelJBIClientProxy.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xmlns:camel="http://cxf.apache.org/transports/camel"
-       xmlns:simple="http://cxf.apache.org/simple"
-       xsi:schemaLocation="
-       http://www.springframework.org/schema/beans
-       http://www.springframework.org/schema/beans/spring-beans.xsd
-       http://cxf.apache.org/transports/camel http://cxf.apache.org/transports/camel.xsd
-       http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/cxfEndpoint.xsd
-       http://cxf.apache.org/simple http://cxf.apache.org/schemas/simple.xsd
-       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
-    ">
-
-   <import resource="classpath:META-INF/cxf/cxf.xml"/>
-   <import resource="classpath:META-INF/cxf/cxf-extension-jbi-binding.xml"/>
-   <import resource="classpath:META-INF/cxf/camel/cxf-extension-camel.xml"/>
-   
-
-   <camelContext id="conduit_context" xmlns="http://camel.apache.org/schema/spring">
-       <route>
-           <from uri="direct://jbiStart"/>
-           <process ref="proxyProcessor"/>
-       </route>
-       <route>
-           <from uri="direct://jbiService" />
-           <process ref="serviceProcessor" />
-       </route>
-   </camelContext>
-
-   <camel:conduit name="{http://cxf.component.camel.apache.org}portA.camel-conduit">
-       <camel:camelContextRef>conduit_context</camel:camelContextRef>
-   </camel:conduit>
-   
-   <bean id="proxyProcessor" class="org.apache.camel.component.cxf.transport.ProxyProcessor">
-      <property name="helloService" ref="client"/>
-   </bean>
-   
-   <bean id="serviceProcessor" class="org.apache.camel.component.cxf.transport.JbiServiceProcessor"/>
-
-   <simple:client id="client"
-    	serviceClass="org.apache.camel.component.cxf.transport.HelloService"
-    	address="camel://direct://jbiService"
-    	serviceName="s:service"
-    	xmlns:s="http://cxf.component.camel.apache.org"
-    	endpointName="s:portA"
-    	bindingId="http://cxf.apache.org/bindings/jbi"
-    	transportId="http://cxf.apache.org/transports/camel">
-   </simple:client>
-   
-</beans>
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppEndpointTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppEndpointTest.java
index 7d73275..e789aa1 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppEndpointTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppEndpointTest.java
@@ -57,6 +57,10 @@
         component = createMock(Component.class);
         binding = createMock(SmppBinding.class);
         
+        expect(component.createConfiguration("smpp://smppclient@localhost:2775")).andReturn(null);
+        expect(component.getCamelContext()).andReturn(null);
+        replay(component);
+
         endpoint = new SmppEndpoint("smpp://smppclient@localhost:2775", component, configuration);
         endpoint.setBinding(binding);
     }
diff --git a/parent/pom.xml b/parent/pom.xml
index dba6f49..51de3f6 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -57,7 +57,7 @@
     <commons-net-version>2.2</commons-net-version>
     <commons-pool-version>1.5.4</commons-pool-version>
     <concurrentlinkedhashmap.version>1.2</concurrentlinkedhashmap.version>
-    <cxf-version>2.4.3</cxf-version>
+    <cxf-version>2.5.0</cxf-version>
     <cxf-xjc-utils-version>2.4.0</cxf-xjc-utils-version>
     <derby-version>10.4.2.0</derby-version>
     <dnsjava-version>2.1.1</dnsjava-version>
@@ -121,7 +121,7 @@
     <mockito-version>1.8.5</mockito-version>
     <mvel-version>2.0.18</mvel-version>
     <mybatis-version>3.0.4</mybatis-version>
-    <netty-bundle-version>3.2.5.Final_1</netty-bundle-version>
+    <netty-bundle-version>3.2.6.Final_1</netty-bundle-version>
     <ode-version>1.3.3</ode-version>
     <ognl-version>2.7.3_3</ognl-version>
     <osgi-version>4.2.0</osgi-version>
diff --git a/platforms/karaf/features/pom.xml b/platforms/karaf/features/pom.xml
index e564075..2fcb813 100644
--- a/platforms/karaf/features/pom.xml
+++ b/platforms/karaf/features/pom.xml
@@ -41,7 +41,7 @@
       <aws-java-sdk-bundle-version>1.1.1_1</aws-java-sdk-bundle-version>
       <bcel-bundle-version>5.2_3</bcel-bundle-version>
       <cglib-version>2.1_3_6</cglib-version>
-      <cometd-java-server-bundle-version>2.3.1_1-SNAPSHOT</cometd-java-server-bundle-version>
+      <cometd-java-server-bundle-version>2.3.1_1</cometd-java-server-bundle-version>
       <commons-beanutils-bundle-version>1.7.0_3</commons-beanutils-bundle-version>
       <commons-csv-version>1.0-r706899_3</commons-csv-version>
       <commons-codec-version>${commons-code}</commons-codec-version>
@@ -113,7 +113,7 @@
       <pax.web.version>0.7.2</pax.web.version>
       <quartz-bundle-version>1.8.5_1</quartz-bundle-version>
       <qpid-bundle-version>0.5.0_2</qpid-bundle-version>
-      <quickfix-bundle-version>1.5.1_1-SNAPSHOT</quickfix-bundle-version>
+      <quickfix-bundle-version>1.5.1_1</quickfix-bundle-version>
       <regexp-bundle-version>1.3_1</regexp-bundle-version>      
       <rome-bundle-version>1.0_1</rome-bundle-version>
       <saxon-bundle-version>9.1.0.8_1</saxon-bundle-version>
diff --git a/tests/camel-itest-karaf/pom.xml b/tests/camel-itest-karaf/pom.xml
index 8cd20c2..c23530b 100644
--- a/tests/camel-itest-karaf/pom.xml
+++ b/tests/camel-itest-karaf/pom.xml
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.apache.camel</groupId>
         <artifactId>camel-parent</artifactId>
-        <version>2.9-SNAPSHOT</version>
+        <version>2.9.0-SNAPSHOT</version>
         <relativePath>../../parent</relativePath>
     </parent>
 
