[maven-release-plugin]  copy for tag camel-2.11.0

git-svn-id: https://svn.apache.org/repos/asf/camel/tags/camel-2.11.0@1468764 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/camel-core/src/main/java/org/apache/camel/CamelContext.java b/camel-core/src/main/java/org/apache/camel/CamelContext.java
index df87a44..19c308b 100644
--- a/camel-core/src/main/java/org/apache/camel/CamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/CamelContext.java
@@ -1129,6 +1129,30 @@
     void setLazyLoadTypeConverters(Boolean lazyLoadTypeConverters);
 
     /**
+     * Whether or not type converter statistics is enabled.
+     * <p/>
+     * By default the type converter utilization statistics is disabled.
+     * <b>Notice:</b> If enabled then there is a slight performance impact under very heavy load.
+     *
+     * @return <tt>true</tt> if enabled, <tt>false</tt> if disabled (default).
+     */
+    Boolean isTypeConverterStatisticsEnabled();
+
+    /**
+     * Sets whether or not type converter statistics is enabled.
+     * <p/>
+     * By default the type converter utilization statistics is disabled.
+     * <b>Notice:</b> If enabled then there is a slight performance impact under very heavy load.
+     * <p/>
+     * You can enable/disable the statistics at runtime using the
+     * {@link org.apache.camel.spi.TypeConverterRegistry#getStatistics()#setTypeConverterStatisticsEnabled(Boolean)} method,
+     * or from JMX on the {@link org.apache.camel.api.management.mbean.ManagedTypeConverterRegistryMBean} mbean.
+     *
+     * @param typeConverterStatisticsEnabled <tt>true</tt> to enable, <tt>false</tt> to disable
+     */
+    void setTypeConverterStatisticsEnabled(Boolean typeConverterStatisticsEnabled);
+
+    /**
      * Whether or not <a href="http://www.slf4j.org/api/org/slf4j/MDC.html">MDC</a> logging is being enabled.
      *
      * @return <tt>true</tt> if MDC logging is enabled
diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedTypeConverterRegistryMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedTypeConverterRegistryMBean.java
index b0aeab8..a7f53ae 100644
--- a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedTypeConverterRegistryMBean.java
+++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedTypeConverterRegistryMBean.java
@@ -39,4 +39,10 @@
     @ManagedOperation(description = "Resets the type conversion counters")
     void resetTypeConversionCounters();
 
+    @ManagedAttribute(description = "Utilization statistics enabled")
+    boolean isStatisticsEnabled();
+
+    @ManagedAttribute(description = "Utilization statistics enabled")
+    void setStatisticsEnabled(boolean statisticsEnabled);
+
 }
diff --git a/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java b/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java
index 555502d..a511943 100644
--- a/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java
+++ b/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java
@@ -500,7 +500,7 @@
         if (noParameters && localOperationsWithNoBody.size() == 1) {
             // if there was a method name configured and it has no parameters, then use the method with no body (eg no parameters)
             return localOperationsWithNoBody.get(0);
-        } else if (localOperationsWithBody.size() == 1) {
+        } else if (!noParameters && localOperationsWithBody.size() == 1) {
             // if there is one method with body then use that one
             return localOperationsWithBody.get(0);
         }
@@ -874,9 +874,15 @@
             return false;
         }
 
+        // is it a method with no parameters
+        boolean noParameters = methodName.endsWith("()");
+        if (noParameters) {
+            return method.getParameterTypes().length == 0;
+        }
+
         // match qualifier types which is used to select among overloaded methods
         String types = ObjectHelper.between(methodName, "(", ")");
-        if (types != null) {
+        if (ObjectHelper.isNotEmpty(types)) {
             // we must qualify based on types to match method
             String[] parameters = StringQuoteHelper.splitSafeQuote(types, ',');
             Iterator<?> it = ObjectHelper.createIterator(parameters);
diff --git a/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java b/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java
index 473fee6..44622d1 100644
--- a/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java
+++ b/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java
@@ -426,8 +426,8 @@
                 if (methodParameters != null) {
                     // split the parameters safely separated by comma, but beware that we can have
                     // quoted parameters which contains comma as well, so do a safe quote split
-                    String[] parameters = StringQuoteHelper.splitSafeQuote(methodParameters, ',');
-                    it = ObjectHelper.createIterator(parameters);
+                    String[] parameters = StringQuoteHelper.splitSafeQuote(methodParameters, ',', false);
+                    it = ObjectHelper.createIterator(parameters, ",", true);
                 }
 
                 // remove headers as they should not be propagated
@@ -490,8 +490,6 @@
                 // convert the parameter value to a String
                 String exp = exchange.getContext().getTypeConverter().convertTo(String.class, exchange, parameterValue);
                 if (exp != null) {
-                    // must trim first as there may be spaces between parameters
-                    exp = exp.trim();
                     // check if its a valid parameter value
                     boolean valid = BeanHelper.isValidParameterValue(exp);
 
diff --git a/camel-core/src/main/java/org/apache/camel/component/directvm/DirectVmProcessor.java b/camel-core/src/main/java/org/apache/camel/component/directvm/DirectVmProcessor.java
index 26cedfe..5cec883 100644
--- a/camel-core/src/main/java/org/apache/camel/component/directvm/DirectVmProcessor.java
+++ b/camel-core/src/main/java/org/apache/camel/component/directvm/DirectVmProcessor.java
@@ -16,9 +16,10 @@
  */
 package org.apache.camel.component.directvm;
 
+import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
-import org.apache.camel.processor.DelegateProcessor;
+import org.apache.camel.processor.DelegateAsyncProcessor;
 import org.apache.camel.util.ExchangeHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -26,7 +27,7 @@
 /**
 *
 */
-public final class DirectVmProcessor extends DelegateProcessor {
+public final class DirectVmProcessor extends DelegateAsyncProcessor {
 
     private static final transient Logger LOG = LoggerFactory.getLogger(DirectVmProcessor.class);
     private final DirectVmEndpoint endpoint;
@@ -37,9 +38,9 @@
     }
 
     @Override
-    public void process(Exchange exchange) throws Exception {
+    public boolean process(final Exchange exchange, final AsyncCallback callback) {
         // need to use a copy of the incoming exchange, so we route using this camel context
-        Exchange copy = prepareExchange(exchange);
+        final Exchange copy = prepareExchange(exchange);
 
         ClassLoader current = Thread.currentThread().getContextClassLoader();
         boolean changed = false;
@@ -51,10 +52,19 @@
                 Thread.currentThread().setContextClassLoader(appClassLoader);
                 changed = true;
             }
-            getProcessor().process(copy);
+            return getProcessor().process(copy, new AsyncCallback() {
+                @Override
+                public void done(boolean done) {
+                    try {
+                        // make sure to copy results back
+                        ExchangeHelper.copyResults(exchange, copy);
+                    } finally {
+                        // must call callback when we are done
+                        callback.done(done);
+                    }
+                }
+            });
         } finally {
-            // make sure to copy results back
-            ExchangeHelper.copyResults(exchange, copy);
             // restore TCCL if it was changed during processing
             if (changed) {
                 LOG.trace("Restoring Thread ContextClassLoader to {}", current);
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
index a911c1f..3e27063 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
@@ -175,6 +175,7 @@
     private Boolean handleFault = Boolean.FALSE;
     private Boolean disableJMX = Boolean.FALSE;
     private Boolean lazyLoadTypeConverters = Boolean.FALSE;
+    private Boolean typeConverterStatisticsEnabled = Boolean.FALSE;
     private Boolean useMDCLogging = Boolean.FALSE;
     private Boolean useBreadcrumb = Boolean.TRUE;
     private Long delay;
@@ -2152,6 +2153,10 @@
         getLanguageResolver();
         getTypeConverterRegistry();
         getTypeConverter();
+
+        if (isTypeConverterStatisticsEnabled() != null) {
+            getTypeConverterRegistry().getStatistics().setStatisticsEnabled(isTypeConverterStatisticsEnabled());
+        }
     }
 
     /**
@@ -2422,6 +2427,14 @@
         this.lazyLoadTypeConverters = lazyLoadTypeConverters;
     }
 
+    public Boolean isTypeConverterStatisticsEnabled() {
+        return typeConverterStatisticsEnabled != null && typeConverterStatisticsEnabled;
+    }
+
+    public void setTypeConverterStatisticsEnabled(Boolean typeConverterStatisticsEnabled) {
+        this.typeConverterStatisticsEnabled = typeConverterStatisticsEnabled;
+    }
+
     public Boolean isUseMDCLogging() {
         return useMDCLogging != null && useMDCLogging;
     }
diff --git a/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java b/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
index b57015c..a00f62c 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
@@ -107,10 +107,14 @@
 
         Object answer;
         try {
-            attemptCounter.incrementAndGet();
+            if (statistics.isStatisticsEnabled()) {
+                attemptCounter.incrementAndGet();
+            }
             answer = doConvertTo(type, exchange, value, false);
         } catch (Exception e) {
-            failedCounter.incrementAndGet();
+            if (statistics.isStatisticsEnabled()) {
+                failedCounter.incrementAndGet();
+            }
             // if its a ExecutionException then we have rethrow it as its not due to failed conversion
             // this is special for FutureTypeConverter
             boolean execution = ObjectHelper.getException(ExecutionException.class, e) != null
@@ -127,12 +131,15 @@
             }
         }
         if (answer == Void.TYPE) {
-            // Could not find suitable conversion
-            missCounter.incrementAndGet();
+            if (statistics.isStatisticsEnabled()) {
+                missCounter.incrementAndGet();
+            }
             // Could not find suitable conversion
             return null;
         } else {
-            hitCounter.incrementAndGet();
+            if (statistics.isStatisticsEnabled()) {
+                hitCounter.incrementAndGet();
+            }
             return (T) answer;
         }
     }
@@ -151,10 +158,14 @@
 
         Object answer;
         try {
-            attemptCounter.incrementAndGet();
+            if (statistics.isStatisticsEnabled()) {
+                attemptCounter.incrementAndGet();
+            }
             answer = doConvertTo(type, exchange, value, false);
         } catch (Exception e) {
-            failedCounter.incrementAndGet();
+            if (statistics.isStatisticsEnabled()) {
+                failedCounter.incrementAndGet();
+            }
             // error occurred during type conversion
             if (e instanceof TypeConversionException) {
                 throw (TypeConversionException) e;
@@ -163,12 +174,15 @@
             }
         }
         if (answer == Void.TYPE || value == null) {
-            // Could not find suitable conversion
-            missCounter.incrementAndGet();
+            if (statistics.isStatisticsEnabled()) {
+                missCounter.incrementAndGet();
+            }
             // Could not find suitable conversion
             throw new NoTypeConversionAvailableException(value, type);
         } else {
-            hitCounter.incrementAndGet();
+            if (statistics.isStatisticsEnabled()) {
+                hitCounter.incrementAndGet();
+            }
             return (T) answer;
         }
     }
@@ -187,18 +201,26 @@
 
         Object answer;
         try {
-            attemptCounter.incrementAndGet();
+            if (statistics.isStatisticsEnabled()) {
+                attemptCounter.incrementAndGet();
+            }
             answer = doConvertTo(type, exchange, value, true);
         } catch (Exception e) {
-            failedCounter.incrementAndGet();
+            if (statistics.isStatisticsEnabled()) {
+                failedCounter.incrementAndGet();
+            }
             return null;
         }
         if (answer == Void.TYPE) {
-            missCounter.incrementAndGet();
             // Could not find suitable conversion
+            if (statistics.isStatisticsEnabled()) {
+                missCounter.incrementAndGet();
+            }
             return null;
         } else {
-            hitCounter.incrementAndGet();
+            if (statistics.isStatisticsEnabled()) {
+                hitCounter.incrementAndGet();
+            }
             return (T) answer;
         }
     }
@@ -517,9 +539,11 @@
     @Override
     protected void doStop() throws Exception {
         // log utilization statistics when stopping, including mappings
-        String info = statistics.toString();
-        info += String.format(" mappings[total=%s, misses=%s]", typeMappings.size(), misses.size());
-        log.info(info);
+        if (statistics.isStatisticsEnabled()) {
+            String info = statistics.toString();
+            info += String.format(" mappings[total=%s, misses=%s]", typeMappings.size(), misses.size());
+            log.info(info);
+        }
 
         typeMappings.clear();
         misses.clear();
@@ -531,6 +555,8 @@
      */
     private final class UtilizationStatistics implements Statistics {
 
+        private boolean statisticsEnabled;
+
         @Override
         public long getAttemptCounter() {
             return attemptCounter.get();
@@ -560,6 +586,16 @@
         }
 
         @Override
+        public boolean isStatisticsEnabled() {
+            return statisticsEnabled;
+        }
+
+        @Override
+        public void setStatisticsEnabled(boolean statisticsEnabled) {
+            this.statisticsEnabled = statisticsEnabled;
+        }
+
+        @Override
         public String toString() {
             return String.format("TypeConverterRegistry utilization[attempts=%s, hits=%s, misses=%s, failures=%s]",
                     getAttemptCounter(), getHitCounter(), getMissCounter(), getFailedCounter());
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTypeConverterRegistry.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTypeConverterRegistry.java
index 5b2ea41..55af467 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTypeConverterRegistry.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTypeConverterRegistry.java
@@ -57,4 +57,12 @@
     public void resetTypeConversionCounters() {
         registry.getStatistics().reset();
     }
+
+    public boolean isStatisticsEnabled() {
+        return registry.getStatistics().isStatisticsEnabled();
+    }
+
+    public void setStatisticsEnabled(boolean statisticsEnabled) {
+        registry.getStatistics().setStatisticsEnabled(statisticsEnabled);
+    }
 }
diff --git a/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java b/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java
index 719e692..b7c90e2 100644
--- a/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java
+++ b/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java
@@ -21,6 +21,9 @@
 
 /**
  * Registry for type converters.
+ * <p/>
+ * The utilization {@link Statistics} is by default disabled, as it has a slight performance impact under very high
+ * concurrent load. The statistics can be enabled using {@link Statistics#setStatisticsEnabled(boolean)} method.
  *
  * @version 
  */
@@ -55,6 +58,18 @@
          * Reset the counters
          */
         void reset();
+
+        /**
+         * Whether statistics is enabled.
+         */
+        boolean isStatisticsEnabled();
+
+        /**
+         * Sets whether statistics is enabled.
+         *
+         * @param statisticsEnabled <tt>true</tt> to enable
+         */
+        void setStatisticsEnabled(boolean statisticsEnabled);
     }
 
     /**
diff --git a/camel-core/src/main/java/org/apache/camel/support/ServiceSupport.java b/camel-core/src/main/java/org/apache/camel/support/ServiceSupport.java
index 52e0706..85864c0a 100644
--- a/camel-core/src/main/java/org/apache/camel/support/ServiceSupport.java
+++ b/camel-core/src/main/java/org/apache/camel/support/ServiceSupport.java
@@ -22,6 +22,7 @@
 
 import org.apache.camel.ServiceStatus;
 import org.apache.camel.StatefulService;
+import org.apache.camel.util.IOHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -277,17 +278,21 @@
         if (version != null) {
             return version;
         }
-
+        InputStream is = null;
         // try to load from maven properties first
         try {
             Properties p = new Properties();
-            InputStream is = getClass().getResourceAsStream("/META-INF/maven/org.apache.camel/camel-core/pom.properties");
+            is = getClass().getResourceAsStream("/META-INF/maven/org.apache.camel/camel-core/pom.properties");
             if (is != null) {
                 p.load(is);
                 version = p.getProperty("version", "");
             }
         } catch (Exception e) {
             // ignore
+        } finally {
+            if (is != null) {
+                IOHelper.close(is);
+            }
         }
 
         // fallback to using Java API
diff --git a/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java b/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java
index 361c222..f6be206 100755
--- a/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java
+++ b/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java
@@ -225,11 +225,15 @@
             if (info.isGetter && info.hasGetterAndSetter) {
                 String name = info.getterOrSetterShorthandName;
                 try {
+                    // we may want to set options on classes that has package view visibility, so override the accessible
+                    method.setAccessible(true);
                     Object value = method.invoke(target);
                     properties.put(optionPrefix + name, value);
                     rc = true;
                 } catch (Exception e) {
-                    // ignore
+                    if (LOG.isTraceEnabled()) {
+                        LOG.trace("Error invoking getter method " + method + ". This exception is ignored.", e);
+                    }
                 }
             }
         }
@@ -483,6 +487,8 @@
                 try {
                     // If the type is null or it matches the needed type, just use the value directly
                     if (value == null || parameterType.isAssignableFrom(ref.getClass())) {
+                        // we may want to set options on classes that has package view visibility, so override the accessible
+                        setter.setAccessible(true);
                         setter.invoke(target, ref);
                         if (LOG.isDebugEnabled()) {
                             LOG.debug("Configured property: {} on bean: {} with value: {}", new Object[]{name, target, ref});
@@ -491,6 +497,8 @@
                     } else {
                         // We need to convert it
                         Object convertedValue = convert(typeConverter, parameterType, ref);
+                        // we may want to set options on classes that has package view visibility, so override the accessible
+                        setter.setAccessible(true);
                         setter.invoke(target, convertedValue);
                         if (LOG.isDebugEnabled()) {
                             LOG.debug("Configured property: {} on bean: {} with value: {}", new Object[]{name, target, ref});
@@ -509,6 +517,8 @@
                     }
                 }
             // ignore exceptions as there could be another setter method where we could type convert successfully
+            } catch (SecurityException e) {
+                typeConversionFailed = e;
             } catch (NoTypeConversionAvailableException e) {
                 typeConversionFailed = e;
             } catch (IllegalArgumentException e) {
diff --git a/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java b/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
index 7bab134..61be0f0 100644
--- a/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
+++ b/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
@@ -23,6 +23,7 @@
 import java.io.Writer;
 import java.util.Map;
 import java.util.TreeMap;
+import javax.xml.transform.Source;
 import javax.xml.transform.stream.StreamSource;
 
 import org.apache.camel.BytesSource;
@@ -185,9 +186,8 @@
      * @param message the message
      * @param prepend a message to prepend
      * @param allowStreams whether or not streams is allowed
-     * @param allowFiles whether or not files is allowed
-     * @param maxChars limit to maximum number of chars. Use 0 or negative value
-     *            to not limit at all.
+     * @param allowFiles whether or not files is allowed (currently not in use)
+     * @param maxChars limit to maximum number of chars. Use 0 or negative value to not limit at all.
      * @return the logging message
      */
     public static String extractBodyForLogging(Message message, String prepend, boolean allowStreams, boolean allowFiles, int maxChars) {
@@ -197,12 +197,10 @@
         }
 
         if (!allowStreams) {
-            if (obj instanceof StreamSource && !(obj instanceof StringSource || obj instanceof BytesSource)) {
-                /*
-                 * Generally do not log StreamSources but as StringSource and
-                 * ByteSource are memory based they are ok
-                 */
-                return prepend + "[Body is instance of java.xml.transform.StreamSource]";
+            if (obj instanceof Source && !(obj instanceof StringSource || obj instanceof BytesSource)) {
+                // for Source its only StringSource or BytesSource that is okay as they are memory based
+                // all other kinds we should not touch the body
+                return prepend + "[Body is instance of java.xml.transform.Source]";
             } else if (obj instanceof StreamCache) {
                 return prepend + "[Body is instance of org.apache.camel.StreamCache]";
             } else if (obj instanceof InputStream) {
diff --git a/camel-core/src/main/java/org/apache/camel/util/StringQuoteHelper.java b/camel-core/src/main/java/org/apache/camel/util/StringQuoteHelper.java
index 3efa4de..452f459 100644
--- a/camel-core/src/main/java/org/apache/camel/util/StringQuoteHelper.java
+++ b/camel-core/src/main/java/org/apache/camel/util/StringQuoteHelper.java
@@ -61,21 +61,40 @@
             return null;
         }
 
+        if (input.indexOf(separator) == -1) {
+            // no separator in data, so return single string with input as is
+            return new String[]{trim ? input.trim() : input};
+        }
+
         List<String> answer = new ArrayList<String>();
         StringBuilder sb = new StringBuilder();
 
         boolean singleQuoted = false;
         boolean doubleQuoted = false;
+        boolean skipLeadingWhitespace = true;
 
         for (int i = 0; i < input.length(); i++) {
             char ch = input.charAt(i);
+            char prev = i > 0 ? input.charAt(i - 1) : 0;
 
             if (ch == '\'') {
+                if (singleQuoted && prev == ch && sb.length() == 0) {
+                    // its an empty quote so add empty text
+                    answer.add("");
+                }
                 singleQuoted = !singleQuoted;
                 continue;
             } else if (ch == '"') {
+                if (doubleQuoted && prev == ch && sb.length() == 0) {
+                    // its an empty quote so add empty text
+                    answer.add("");
+                }
                 doubleQuoted = !doubleQuoted;
                 continue;
+            } else if (ch == ' ') {
+                if (!singleQuoted && !doubleQuoted && skipLeadingWhitespace) {
+                    continue;
+                }
             } else if (ch == separator) {
                 // add as answer if we are not in a quote
                 if (!singleQuoted && !doubleQuoted && sb.length() > 0) {
diff --git a/camel-core/src/test/java/org/apache/camel/component/xslt/SAXSourceLogBodyTest.java b/camel-core/src/test/java/org/apache/camel/component/xslt/SAXSourceLogBodyTest.java
new file mode 100644
index 0000000..219f8be
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/component/xslt/SAXSourceLogBodyTest.java
@@ -0,0 +1,70 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS 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.xslt;
+
+import java.io.File;
+import java.io.InputStream;
+import javax.xml.transform.sax.SAXSource;
+
+import org.xml.sax.InputSource;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
+import org.apache.camel.LoggingLevel;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ *
+ */
+public class SAXSourceLogBodyTest extends ContextTestSupport {
+
+    public void testSAXSource() throws Exception {
+        getMockEndpoint("mock:result").expectedMessageCount(1);
+
+        template.sendBody("direct:start", new File("src/test/resources/xslt/staff/staff.xml"));
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start").streamCaching()
+                        // attach a SaxSource to body
+                        .process(new Processor() {
+                            @Override
+                            public void process(Exchange exchange) throws Exception {
+                                byte[] data = exchange.getIn().getBody(byte[].class);
+                                InputStream is = exchange.getContext().getTypeConverter().convertTo(InputStream.class, data);
+                                XMLReader xmlReader = XMLReaderFactory.createXMLReader();
+                                exchange.getIn().setBody(new SAXSource(xmlReader, new InputSource(is)));
+                            }
+                        })
+                        // The ${body} will toString the body and print it, so we need to enable stream caching
+                        .log(LoggingLevel.WARN, "${body}")
+                        .to("xslt:xslt/common/staff_template.xsl")
+                        .to("log:result")
+                        .to("mock:result");
+            }
+        };
+    }
+}
diff --git a/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryPerformanceTest.java b/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryPerformanceTest.java
new file mode 100644
index 0000000..0bdbe0c
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryPerformanceTest.java
@@ -0,0 +1,75 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS 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.impl;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+
+import org.w3c.dom.Document;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.util.StopWatch;
+
+public class TypeConverterRegistryPerformanceTest extends ContextTestSupport {
+
+    private int pool = 100;
+    private int inner = 10;
+    private int size = 20000;
+
+    private ExecutorService executorService;
+    private CountDownLatch latch;
+
+    public void testManual() throws Exception {
+        // noop
+    }
+
+    public void disbledtestPerformance() throws Exception {
+        // force converter to be loaded on startup
+        Document dom = context.getTypeConverter().convertTo(Document.class, "<hello>World</hello>");
+        assertNotNull(dom);
+
+        StopWatch watch = new StopWatch();
+
+        latch = new CountDownLatch(size);
+        executorService = Executors.newFixedThreadPool(pool);
+
+        for (int i = 0; i < size; i++) {
+            executorService.submit(new Runnable() {
+                @Override
+                public void run() {
+                    for (int j = 0; j < inner; j++) {
+                        Document dom = context.getTypeConverter().convertTo(Document.class, "<hello>World</hello>");
+                        assertNotNull(dom);
+                    }
+                    latch.countDown();
+                }
+            });
+        }
+
+        assertTrue("Should all work", latch.await(2, TimeUnit.MINUTES));
+        log.info("Took " + watch.taken());
+
+        executorService.shutdownNow();
+    }
+
+    @Override
+    public boolean isUseRouteBuilder() {
+        return false;
+    }
+}
diff --git a/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryStatisticsEnabledTest.java b/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryStatisticsEnabledTest.java
new file mode 100644
index 0000000..609c61d
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryStatisticsEnabledTest.java
@@ -0,0 +1,86 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS 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.impl;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.spi.TypeConverterRegistry;
+
+/**
+ * @version 
+ */
+public class TypeConverterRegistryStatisticsEnabledTest extends ContextTestSupport {
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext context = super.createCamelContext();
+        context.setTypeConverterStatisticsEnabled(true);
+        return context;
+    }
+
+    public void testTypeConverterRegistry() throws Exception {
+        getMockEndpoint("mock:a").expectedMessageCount(2);
+
+        template.sendBody("direct:start", "3");
+        template.sendBody("direct:start", "7");
+
+        assertMockEndpointsSatisfied();
+
+        TypeConverterRegistry reg = context.getTypeConverterRegistry();
+        assertTrue("Should be enabled", reg.getStatistics().isStatisticsEnabled());
+
+        Long failed = reg.getStatistics().getFailedCounter();
+        assertEquals(0, failed.intValue());
+        Long miss = reg.getStatistics().getMissCounter();
+        assertEquals(0, miss.intValue());
+
+        try {
+            template.sendBody("direct:start", "foo");
+            fail("Should have thrown exception");
+        } catch (Exception e) {
+            // expected
+        }
+
+        // should now have a failed
+        failed = reg.getStatistics().getFailedCounter();
+        assertEquals(1, failed.intValue());
+        miss = reg.getStatistics().getMissCounter();
+        assertEquals(0, miss.intValue());
+
+        // reset
+        reg.getStatistics().reset();
+
+        failed = reg.getStatistics().getFailedCounter();
+        assertEquals(0, failed.intValue());
+        miss = reg.getStatistics().getMissCounter();
+        assertEquals(0, miss.intValue());
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start").routeId("foo")
+                    .convertBodyTo(int.class)
+                    .to("mock:a");
+            }
+        };
+    }
+
+}
diff --git a/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java b/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
index f268980..6240ff3 100644
--- a/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
+++ b/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
@@ -1124,6 +1124,16 @@
         assertExpression("${body.replace('\\', '\\\\')}", "foo\\\\bar\\\\baz");
     }
 
+    public void testBodyOgnlReplaceFirst() throws Exception {
+        exchange.getIn().setBody("http:camel.apache.org");
+
+        assertExpression("${body.replaceFirst('http:', 'http4:')}", "http4:camel.apache.org");
+        assertExpression("${body.replaceFirst('http:', '')}", "camel.apache.org");
+        assertExpression("${body.replaceFirst('http:', ' ')}", " camel.apache.org");
+        assertExpression("${body.replaceFirst('http:',    ' ')}", " camel.apache.org");
+        assertExpression("${body.replaceFirst('http:',' ')}", " camel.apache.org");
+    }
+
     public void testClassSimpleName() throws Exception {
         Animal tiger = new Animal("Tony the Tiger", 13);
         exchange.getIn().setBody(tiger);
diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedTypeConverterRegistryTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedTypeConverterRegistryTest.java
index 957d2a2..e0f9483 100644
--- a/camel-core/src/test/java/org/apache/camel/management/ManagedTypeConverterRegistryTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/ManagedTypeConverterRegistryTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.management;
 
 import java.util.Set;
+import javax.management.Attribute;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
@@ -50,6 +51,13 @@
         }
         assertNotNull("Cannot find DefaultTypeConverter", name);
 
+        // is disabled by default
+        Boolean enabled = (Boolean) mbeanServer.getAttribute(name, "StatisticsEnabled");
+        assertEquals(Boolean.FALSE, enabled);
+
+        // need to enable statistics
+        mbeanServer.setAttribute(name, new Attribute("StatisticsEnabled", Boolean.TRUE));
+
         Long failed = (Long) mbeanServer.getAttribute(name, "FailedCounter");
         assertEquals(0, failed.intValue());
         Long miss = (Long) mbeanServer.getAttribute(name, "MissCounter");
diff --git a/camel-core/src/test/java/org/apache/camel/util/StingQuoteHelperTest.java b/camel-core/src/test/java/org/apache/camel/util/StingQuoteHelperTest.java
index af34521..fea93b9 100644
--- a/camel-core/src/test/java/org/apache/camel/util/StingQuoteHelperTest.java
+++ b/camel-core/src/test/java/org/apache/camel/util/StingQuoteHelperTest.java
@@ -27,7 +27,8 @@
         assertEquals(null, StringQuoteHelper.splitSafeQuote(null, ','));
 
         String[] out = StringQuoteHelper.splitSafeQuote("", ',');
-        assertEquals(0, out.length);
+        assertEquals(1, out.length);
+        assertEquals("", out[0]);
 
         out = StringQuoteHelper.splitSafeQuote("   ", ',');
         assertEquals(1, out.length);
@@ -82,10 +83,38 @@
         assertEquals("Hello Camel", out[0]);
         assertEquals("Bye World", out[1]);
 
-        out = StringQuoteHelper.splitSafeQuote("'Hello Camel', 'Bye World'", ',', false);
+        out = StringQuoteHelper.splitSafeQuote("'Hello Camel', ' Bye World'", ',', false);
         assertEquals(2, out.length);
         assertEquals("Hello Camel", out[0]);
         assertEquals(" Bye World", out[1]);
+
+        out = StringQuoteHelper.splitSafeQuote("'http:', ' '", ',', false);
+        assertEquals(2, out.length);
+        assertEquals("http:", out[0]);
+        assertEquals(" ", out[1]);
+
+        out = StringQuoteHelper.splitSafeQuote("'http:', ''", ',', false);
+        assertEquals(2, out.length);
+        assertEquals("http:", out[0]);
+        assertEquals("", out[1]);
+
+        out = StringQuoteHelper.splitSafeQuote("'Hello Camel', 5, true", ',', false);
+        assertEquals(3, out.length);
+        assertEquals("Hello Camel", out[0]);
+        assertEquals("5", out[1]);
+        assertEquals("true", out[2]);
+
+        out = StringQuoteHelper.splitSafeQuote("'Hello Camel',5,true", ',', false);
+        assertEquals(3, out.length);
+        assertEquals("Hello Camel", out[0]);
+        assertEquals("5", out[1]);
+        assertEquals("true", out[2]);
+
+        out = StringQuoteHelper.splitSafeQuote("   'Hello Camel',  5   ,  true   ", ',', false);
+        assertEquals(3, out.length);
+        assertEquals("Hello Camel", out[0]);
+        assertEquals("5", out[1]);
+        assertEquals("true", out[2]);
     }
 
 }
diff --git a/camel-core/src/test/resources/xslt/staff/staff.xml b/camel-core/src/test/resources/xslt/staff/staff.xml
new file mode 100644
index 0000000..681fd0a
--- /dev/null
+++ b/camel-core/src/test/resources/xslt/staff/staff.xml
@@ -0,0 +1,60 @@
+<?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.
+-->
+<staff>
+
+    <programmer>
+        <name>Bugs Bunny</name>
+        <dob>03/21/1970</dob>
+        <age>31</age>
+        <address>4895 Wabbit Hole Road</address>
+        <phone>865-111-1111</phone>
+    </programmer>
+
+    <programmer>
+        <name>Daisy Duck</name>
+        <dob>08/09/1949</dob>
+        <age>51</age>
+        <address>748 Golden Pond</address>
+        <phone>865-222-2222</phone>
+    </programmer>
+
+    <programmer>
+        <name>Minnie Mouse</name>
+        <dob>04/13/1977</dob>
+        <age>24</age>
+        <address>4064 Cheese Factory Blvd</address>
+        <phone>865-333-3333</phone>
+    </programmer>
+
+    <programmer>
+        <name>Pluto</name>
+        <dob>07/04/1979</dob>
+        <age>21</age>
+        <address>414 Dog Lane</address>
+        <phone>865-333-3333</phone>
+    </programmer>
+
+    <programmer>
+        <name>Road Runner</name>
+        <dob>01/19/1953</dob>
+        <age>48</age>
+        <address>135 Desert View Street</address>
+        <phone>none</phone>
+    </programmer>
+
+</staff>
\ No newline at end of file
diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Consumer.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Consumer.java
index 58b157e..0128df0 100644
--- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Consumer.java
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Consumer.java
@@ -27,6 +27,7 @@
 import com.amazonaws.services.s3.model.S3Object;
 import com.amazonaws.services.s3.model.S3ObjectSummary;
 
+import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.NoFactoryAvailableException;
 import org.apache.camel.Processor;
@@ -58,7 +59,7 @@
         pendingExchanges = 0;
         
         String bucketName = getConfiguration().getBucketName();
-        LOG.trace("Quering objects in bucket [{}]...", bucketName);
+        LOG.trace("Queueing objects in bucket [{}]...", bucketName);
         
         ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
         listObjectsRequest.setBucketName(bucketName);
@@ -66,15 +67,19 @@
         listObjectsRequest.setMaxKeys(maxMessagesPerPoll);
         
         ObjectListing listObjects = getAmazonS3Client().listObjects(listObjectsRequest);
-        
-        LOG.trace("Found {} objects in bucket [{}]...", listObjects.getObjectSummaries().size(), bucketName);
+
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("Found {} objects in bucket [{}]...", listObjects.getObjectSummaries().size(), bucketName);
+        }
         
         Queue<Exchange> exchanges = createExchanges(listObjects.getObjectSummaries());
         return processBatch(CastUtils.cast(exchanges));
     }
     
     protected Queue<Exchange> createExchanges(List<S3ObjectSummary> s3ObjectSummaries) {
-        LOG.trace("Received {} messages in this poll", s3ObjectSummaries.size());
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("Received {} messages in this poll", s3ObjectSummaries.size());
+        }
         
         Queue<Exchange> answer = new LinkedList<Exchange>();
         for (S3ObjectSummary s3ObjectSummary : s3ObjectSummaries) {
@@ -91,7 +96,7 @@
 
         for (int index = 0; index < total && isBatchAllowed(); index++) {
             // only loop if we are started (allowed to run)
-            Exchange exchange = ObjectHelper.cast(Exchange.class, exchanges.poll());
+            final Exchange exchange = ObjectHelper.cast(Exchange.class, exchanges.poll());
             // add current index and total as properties
             exchange.setProperty(Exchange.BATCH_INDEX, index);
             exchange.setProperty(Exchange.BATCH_SIZE, total);
@@ -117,8 +122,12 @@
             });
 
             LOG.trace("Processing exchange [{}]...", exchange);
-
-            getProcessor().process(exchange);
+            getAsyncProcessor().process(exchange, new AsyncCallback() {
+                @Override
+                public void done(boolean doneSync) {
+                    LOG.trace("Processing exchange [{}] done.", exchange);
+                }
+            });
         }
 
         return total;
@@ -138,12 +147,11 @@
                 LOG.trace("Deleting object from bucket {} with key {}...", bucketName, key);
                 
                 getAmazonS3Client().deleteObject(bucketName, key);
-                
-                LOG.trace("Object deleted");
+
+                LOG.trace("Deleted object from bucket {} with key {}...", bucketName, key);
             }
         } catch (AmazonClientException e) {
-            LOG.warn("Error occurred during deleting object", e);
-            exchange.setException(e);
+            getExceptionHandler().handleException("Error occurred during deleting object. This exception is ignored.", exchange, e);
         }
     }
 
diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/sqs/SqsConsumer.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/sqs/SqsConsumer.java
index 5ed5048..241b13e 100644
--- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/sqs/SqsConsumer.java
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/sqs/SqsConsumer.java
@@ -33,6 +33,7 @@
 import com.amazonaws.services.sqs.model.ReceiveMessageRequest;
 import com.amazonaws.services.sqs.model.ReceiveMessageResult;
 
+import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.NoFactoryAvailableException;
 import org.apache.camel.Processor;
@@ -74,15 +75,19 @@
         LOG.trace("Receiving messages with request [{}]...", request);
         
         ReceiveMessageResult messageResult = getClient().receiveMessage(request);
-        
-        LOG.trace("Received {} messages", messageResult.getMessages().size());
+
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("Received {} messages", messageResult.getMessages().size());
+        }
         
         Queue<Exchange> exchanges = createExchanges(messageResult.getMessages());
         return processBatch(CastUtils.cast(exchanges));
     }
     
     protected Queue<Exchange> createExchanges(List<Message> messages) {
-        LOG.trace("Received {} messages in this poll", messages.size());
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("Received {} messages in this poll", messages.size());
+        }
         
         Queue<Exchange> answer = new LinkedList<Exchange>();
         for (Message message : messages) {
@@ -98,7 +103,7 @@
 
         for (int index = 0; index < total && isBatchAllowed(); index++) {
             // only loop if we are started (allowed to run)
-            Exchange exchange = ObjectHelper.cast(Exchange.class, exchanges.poll());
+            final Exchange exchange = ObjectHelper.cast(Exchange.class, exchanges.poll());
             // add current index and total as properties
             exchange.setProperty(Exchange.BATCH_INDEX, index);
             exchange.setProperty(Exchange.BATCH_SIZE, total);
@@ -112,11 +117,11 @@
             if (this.scheduledExecutor != null && visibilityTimeout != null && (visibilityTimeout.intValue() / 2) > 0) {
                 int delay = visibilityTimeout.intValue() / 2;
                 int period = visibilityTimeout.intValue();
-                LOG.debug("Scheduled TimeoutExtender task to start after {} delay, and run with {} period (seconds) to extend exchangeId: {}",
-                        new Object[]{delay, period, exchange.getExchangeId()});
-                int repeatSeconds = new Double(visibilityTimeout.doubleValue() * 1.5).intValue();   //
-                LOG.debug("period :" + period);
-                LOG.debug("repeatSeconds :" + repeatSeconds);
+                int repeatSeconds = new Double(visibilityTimeout.doubleValue() * 1.5).intValue();
+                if (LOG.isDebugEnabled()) {
+                    LOG.debug("Scheduled TimeoutExtender task to start after {} delay, and run with {}/{} period/repeat (seconds), to extend exchangeId: {}",
+                            new Object[]{delay, period, repeatSeconds, exchange.getExchangeId()});
+                }
                 final ScheduledFuture<?> scheduledFuture = this.scheduledExecutor.scheduleAtFixedRate(
                         new TimeoutExtender(exchange, repeatSeconds), delay, period, TimeUnit.SECONDS);
                 exchange.addOnCompletion(new Synchronization() {
@@ -157,12 +162,12 @@
 
 
             LOG.trace("Processing exchange [{}]...", exchange);
-            try {
-                // This blocks while message is consumed.
-                getProcessor().process(exchange);
-            } finally {
-                LOG.trace("Processing exchange [{}] done.", exchange);
-            }
+            getAsyncProcessor().process(exchange, new AsyncCallback() {
+                @Override
+                public void done(boolean doneSync) {
+                    LOG.trace("Processing exchange [{}] done.", exchange);
+                }
+            });
         }
 
         return total;
@@ -183,10 +188,10 @@
                 
                 getClient().deleteMessage(deleteRequest);
 
-                LOG.trace("Message deleted");
+                LOG.trace("Deleted message with receipt handle {}...", receiptHandle);
             }
         } catch (AmazonClientException e) {
-            getExceptionHandler().handleException("Error occurred during deleting message.", e);
+            getExceptionHandler().handleException("Error occurred during deleting message. This exception is ignored.", exchange, e);
         }
     }
 
diff --git a/components/camel-bam/src/main/java/org/apache/camel/bam/processor/ActivityMonitorEngine.java b/components/camel-bam/src/main/java/org/apache/camel/bam/processor/ActivityMonitorEngine.java
index 99da337..df8fdb7 100644
--- a/components/camel-bam/src/main/java/org/apache/camel/bam/processor/ActivityMonitorEngine.java
+++ b/components/camel-bam/src/main/java/org/apache/camel/bam/processor/ActivityMonitorEngine.java
@@ -94,11 +94,11 @@
                     try {
                         Thread.sleep(timeToSleep);
                     } catch (InterruptedException e) {
-                        LOG.debug("Caught: " + e, e);
+                        // ignore
                     }
                 }
             } catch (Exception e) {
-                LOG.error("Caught: " + e, e);
+                LOG.warn("Error during running ActivityMonitorEngine. This exception is ignored.", e);
             }
         }
     }
@@ -110,9 +110,9 @@
             public Object doInJpa(EntityManager entityManager) throws PersistenceException {
                 // let's try locking the object first
                 if (isUseLocking()) {
-                    LOG.info("Attempting to lock: " + activityState);
+                    LOG.debug("Attempting to lock: {}", activityState);
                     entityManager.lock(activityState, LockModeType.WRITE);
-                    LOG.info("Grabbed lock: " + activityState);
+                    LOG.debug("Grabbed lock: {}", activityState);
                 }
 
                 try {
diff --git a/components/camel-bam/src/main/java/org/apache/camel/bam/processor/BamProcessorSupport.java b/components/camel-bam/src/main/java/org/apache/camel/bam/processor/BamProcessorSupport.java
index 2b6b669..b2886c3 100644
--- a/components/camel-bam/src/main/java/org/apache/camel/bam/processor/BamProcessorSupport.java
+++ b/components/camel-bam/src/main/java/org/apache/camel/bam/processor/BamProcessorSupport.java
@@ -82,7 +82,7 @@
                 try {
                     Thread.sleep(retrySleep);
                 } catch (InterruptedException e) {
-                    LOG.debug("Caught: " + e, e);
+                    // ignore
                 }
             }
             try {
@@ -104,11 +104,11 @@
                     }
                 });
                 if (i > 1) {
-                    LOG.info("Attempt {} worked!", i);
+                    LOG.debug("Attempt {} worked!", i);
                 }
                 return;
             } catch (Exception e) {
-                LOG.warn("Failed to complete transaction: " + e, e);
+                LOG.warn("Failed to complete transaction. This exception is ignored.", e);
             }
         }
     }
@@ -147,7 +147,7 @@
 
     protected void onError(TransactionStatus status, Exception e) throws RuntimeCamelException {
         status.setRollbackOnly();
-        LOG.error("Caught: " + e, e);
+        LOG.warn("Caught: " + e, e);
         throw wrapRuntimeCamelException(e);
     }
 
diff --git a/components/camel-bam/src/main/java/org/apache/camel/bam/processor/JpaBamProcessorSupport.java b/components/camel-bam/src/main/java/org/apache/camel/bam/processor/JpaBamProcessorSupport.java
index f5d6005..3b64bb2 100644
--- a/components/camel-bam/src/main/java/org/apache/camel/bam/processor/JpaBamProcessorSupport.java
+++ b/components/camel-bam/src/main/java/org/apache/camel/bam/processor/JpaBamProcessorSupport.java
@@ -115,7 +115,7 @@
     protected T loadEntity(Exchange exchange, Object key) throws Exception {
         LOCK.lock();
         try {
-            LOG.info(">> LoadEntity call");
+            LOG.trace("LoadEntity call");
             T entity = findEntityByCorrelationKey(key);
             if (entity == null) {
                 entity = createEntity(exchange, key);
@@ -127,7 +127,7 @@
 
                 // Now we must flush to avoid concurrent updates clashing trying to
                 // insert the same row
-                LOG.debug("About to flush on entity: " + entity + " with key: " + key);
+                LOG.debug("About to flush on entity: {} with key: {}", entity, key);
                 template.flush();
             }
             return entity;
@@ -157,7 +157,7 @@
             Method getter = IntrospectionSupport.getPropertyGetter(getEntityType(), getKeyPropertyName());
             return getter.getReturnType();
         } catch (NoSuchMethodException e) {
-            LOG.warn("no such getter for: " + getKeyPropertyName() + " on " + getEntityType() + ". Reason: " + e, e);
+            LOG.warn("no such getter for: " + getKeyPropertyName() + " on " + getEntityType() + ". This exception will be ignored.", e);
             return null;
         }
     }
diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java
index 949c48d..b89d066 100644
--- a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java
+++ b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java
@@ -105,6 +105,8 @@
     @XmlAttribute(required = false)
     @Deprecated
     private Boolean lazyLoadTypeConverters;
+    @XmlAttribute(required = false)
+    private Boolean typeConverterStatisticsEnabled;
     @XmlElement(name = "properties", required = false)
     private PropertiesDefinition properties;
     @XmlElement(name = "propertyPlaceholder", type = CamelPropertyPlaceholderDefinition.class, required = false)
@@ -351,6 +353,14 @@
         this.lazyLoadTypeConverters = lazyLoadTypeConverters;
     }
 
+    public Boolean getTypeConverterStatisticsEnabled() {
+        return typeConverterStatisticsEnabled;
+    }
+
+    public void setTypeConverterStatisticsEnabled(Boolean typeConverterStatisticsEnabled) {
+        this.typeConverterStatisticsEnabled = typeConverterStatisticsEnabled;
+    }
+
     public ShutdownRoute getShutdownRoute() {
         return shutdownRoute;
     }
diff --git a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
index b430793..c6e5bd3 100644
--- a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
+++ b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
@@ -490,6 +490,8 @@
     @Deprecated
     public abstract Boolean getLazyLoadTypeConverters();
 
+    public abstract Boolean getTypeConverterStatisticsEnabled();
+
     public abstract CamelJMXAgentDefinition getCamelJMXAgent();
 
     public abstract List<RouteBuilderDefinition> getBuilderRefs();
@@ -561,6 +563,9 @@
         if (getDataFormats() != null) {
             ctx.setDataFormats(getDataFormats().asMap());
         }
+        if (getTypeConverterStatisticsEnabled() != null) {
+            ctx.setTypeConverterStatisticsEnabled(getTypeConverterStatisticsEnabled());
+        }
     }
 
     protected void initThreadPoolProfiles(T context) throws Exception {
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/blueprint/RsClientDefinitionParser.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/blueprint/RsClientDefinitionParser.java
index 59c6852..0777ef6 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/blueprint/RsClientDefinitionParser.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/blueprint/RsClientDefinitionParser.java
@@ -69,8 +69,7 @@
                 Metadata list = parseListData(context, beanMetadata, elem);
                 beanMetadata.addProperty(name, list);
             } else if ("features".equals(name) || "providers".equals(name)
-                || "schemaLocations".equals(name) || "modelBeans".equals(name)
-                || "serviceBeans".equals(name)) {
+                || "schemaLocations".equals(name) || "modelBeans".equals(name)) {
                 Metadata list = parseListData(context, beanMetadata, elem);
                 beanMetadata.addProperty(name, list);
             } else if ("model".equals(name)) {
@@ -81,6 +80,7 @@
             } else {
                 setFirstChildAsProperty(elem, context, beanMetadata, name);
             }
+            elem = DOMUtils.getNextElement(elem);
         } 
  
         if (StringUtils.isEmpty(bus)) {
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/blueprint/RsServerDefinitionParser.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/blueprint/RsServerDefinitionParser.java
index 7f24df8..c333cfb 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/blueprint/RsServerDefinitionParser.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/blueprint/RsServerDefinitionParser.java
@@ -71,7 +71,8 @@
                 Metadata list = parseListData(context, beanMetadata, elem);
                 beanMetadata.addProperty(name, list);
             } else if ("features".equals(name) || "providers".equals(name)
-                || "schemaLocations".equals(name) || "modelBeans".equals(name)) {
+                || "schemaLocations".equals(name) || "modelBeans".equals(name)
+                || "serviceBeans".equals(name)) {
                 Metadata list = parseListData(context, beanMetadata, elem);
                 beanMetadata.addProperty(name, list);
             } else if ("model".equals(name)) {
@@ -82,6 +83,7 @@
             } else {
                 setFirstChildAsProperty(elem, context, beanMetadata, name);
             }
+            elem = DOMUtils.getNextElement(elem);
         } 
  
         if (StringUtils.isEmpty(bus)) {
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsHeaderFilterStrategy.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsHeaderFilterStrategy.java
index 650701fe..50a31e0 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsHeaderFilterStrategy.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsHeaderFilterStrategy.java
@@ -39,6 +39,8 @@
         getOutFilter().add(Exchange.HTTP_METHOD);
         getOutFilter().add(Exchange.HTTP_PATH);
         getOutFilter().add(Exchange.DESTINATION_OVERRIDE_URL);
+        // filter headers begin with "Camel" or "org.apache.camel"
+        setOutFilterPattern("(Camel|org\\.apache\\.camel)[\\.|a-z|A-z|0-9]*");
 
     }
 
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultCxfRsBinding.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultCxfRsBinding.java
index 02fde54..2bf135e 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultCxfRsBinding.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultCxfRsBinding.java
@@ -132,8 +132,15 @@
 
         MultivaluedMap<String, String> answer = new MetadataMap<String, String>();
         for (Map.Entry<String, Object> entry : camelHeaders.entrySet()) {
+            // Need to make sure the cxf needed header will not be filtered 
+            if (headerFilterStrategy.applyFilterToCamelHeaders(entry.getKey(), entry.getValue(), camelExchange)
+                && camelToCxfHeaderMap.get(entry.getKey()) == null) {
+                LOG.trace("Drop Camel header: {}={}", entry.getKey(), entry.getValue());
+                continue;
+            }
             
-            if (headerFilterStrategy.applyFilterToCamelHeaders(entry.getKey(), entry.getValue(), camelExchange)) {
+            // we need to make sure the entry value is not null
+            if (entry.getValue() == null) {
                 LOG.trace("Drop Camel header: {}={}", entry.getKey(), entry.getValue());
                 continue;
             }
@@ -250,7 +257,9 @@
     protected void copyProtocolHeader(org.apache.cxf.message.Message cxfMessage, Message camelMessage, Exchange camelExchange) {
         Map<String, List<String>> headers = (Map<String, List<String>>)cxfMessage.get(org.apache.cxf.message.Message.PROTOCOL_HEADERS);
         for (Map.Entry<String, List<String>>entry : headers.entrySet()) {
-            if (headerFilterStrategy.applyFilterToCamelHeaders(entry.getKey(), entry.getValue(), camelExchange)) {
+            // just make sure the first String element is not null
+            if (headerFilterStrategy.applyFilterToCamelHeaders(entry.getKey(), entry.getValue(), camelExchange) 
+                || entry.getValue().get(0) == null) {
                 LOG.trace("Drop CXF message protocol header: {}={}", entry.getKey(), entry.getValue());
             } else {
                 // just put the first String element, as the complex one is filtered
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsRouterTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsRouterTest.java
index be4649b..ddb3ecb 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsRouterTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsRouterTest.java
@@ -33,10 +33,14 @@
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 public class CxfRsRouterTest extends CamelSpringTestSupport {
-    private static final int PORT0 = CXFTestSupport.getPort1();
+    private static final int PORT = CXFTestSupport.getPort1();
     
     private static final String PUT_REQUEST = "<Customer><name>Mary</name><id>123</id></Customer>";
     private static final String POST_REQUEST = "<Customer><name>Jack</name></Customer>";
+    
+    protected int getPort() {
+        return PORT;
+    }
 
     @Override
     protected AbstractXmlApplicationContext createApplicationContext() {        
@@ -55,7 +59,7 @@
     
     @Test
     public void testGetCustomer() throws Exception {      
-        HttpGet get = new HttpGet("http://localhost:" + PORT0 + "/CxfRsRouterTest/route/customerservice/customers/123");
+        HttpGet get = new HttpGet("http://localhost:" + getPort() + "/CxfRsRouterTest/route/customerservice/customers/123");
         get.addHeader("Accept" , "application/json");
         HttpClient httpclient = new DefaultHttpClient();
 
@@ -72,7 +76,7 @@
 
     @Test
     public void testGetCustomerWithQuery() throws Exception {      
-        HttpGet get = new HttpGet("http://localhost:" + PORT0 + "/CxfRsRouterTest/route/customerservice/customers?id=123");
+        HttpGet get = new HttpGet("http://localhost:" + getPort() + "/CxfRsRouterTest/route/customerservice/customers?id=123");
         get.addHeader("Accept" , "application/json");
         HttpClient httpclient = new DefaultHttpClient();
 
@@ -87,8 +91,8 @@
     }
     
     @Test
-    public void testGetCustomers() throws Exception {      
-        HttpGet get = new HttpGet("http://localhost:" + PORT0 + "/CxfRsRouterTest/route/customerservice/customers/");
+    public void testGetCustomers() throws Exception {
+        HttpGet get = new HttpGet("http://localhost:" + getPort() + "/CxfRsRouterTest/route/customerservice/customers/");
         get.addHeader("Accept" , "application/xml");
         HttpClient httpclient = new DefaultHttpClient();
 
@@ -111,7 +115,7 @@
     
     @Test
     public void testGetSubResource() throws Exception {
-        HttpGet get = new HttpGet("http://localhost:" + PORT0 + "/CxfRsRouterTest/route/customerservice/orders/223/products/323");
+        HttpGet get = new HttpGet("http://localhost:" + getPort() + "/CxfRsRouterTest/route/customerservice/orders/223/products/323");
         get.addHeader("Accept" , "application/json");
         HttpClient httpclient = new DefaultHttpClient();
 
@@ -127,7 +131,7 @@
     
     @Test
     public void testPutConsumer() throws Exception {
-        HttpPut put = new HttpPut("http://localhost:" + PORT0 + "/CxfRsRouterTest/route/customerservice/customers");
+        HttpPut put = new HttpPut("http://localhost:" + getPort() + "/CxfRsRouterTest/route/customerservice/customers");
         StringEntity entity = new StringEntity(PUT_REQUEST, "ISO-8859-1");
         entity.setContentType("text/xml; charset=ISO-8859-1");
         put.setEntity(entity);
@@ -144,7 +148,7 @@
     
     @Test
     public void testPostConsumer() throws Exception {
-        HttpPost post = new HttpPost("http://localhost:" + PORT0 + "/CxfRsRouterTest/route/customerservice/customers");
+        HttpPost post = new HttpPost("http://localhost:" + getPort() + "/CxfRsRouterTest/route/customerservice/customers");
         post.addHeader("Accept" , "text/xml");
         StringEntity entity = new StringEntity(POST_REQUEST, "ISO-8859-1");
         entity.setContentType("text/xml; charset=ISO-8859-1");
@@ -157,7 +161,7 @@
             assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Customer><id>124</id><name>Jack</name></Customer>",
                          EntityUtils.toString(response.getEntity()));
             
-            HttpDelete del = new HttpDelete("http://localhost:" + PORT0 + "/CxfRsRouterTest/route/customerservice/customers/124/");
+            HttpDelete del = new HttpDelete("http://localhost:" + getPort() + "/CxfRsRouterTest/route/customerservice/customers/124/");
             httpclient.execute(del);
         } finally {
             httpclient.getConnectionManager().shutdown();
@@ -167,7 +171,7 @@
     
     @Test
     public void testPostConsumerUniqueResponseCode() throws Exception {
-        HttpPost post = new HttpPost("http://localhost:" + PORT0 + "/CxfRsRouterTest/route/customerservice/customersUniqueResponseCode");
+        HttpPost post = new HttpPost("http://localhost:" + getPort() + "/CxfRsRouterTest/route/customerservice/customersUniqueResponseCode");
         post.addHeader("Accept" , "text/xml");
         StringEntity entity = new StringEntity(POST_REQUEST, "ISO-8859-1");
         entity.setContentType("text/xml; charset=ISO-8859-1");
@@ -180,7 +184,7 @@
             assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Customer><id>124</id><name>Jack</name></Customer>",
                          EntityUtils.toString(response.getEntity()));
 
-            HttpDelete del = new HttpDelete("http://localhost:" + PORT0 + "/CxfRsRouterTest/route/customerservice/customers/124/");
+            HttpDelete del = new HttpDelete("http://localhost:" + getPort() + "/CxfRsRouterTest/route/customerservice/customers/124/");
             httpclient.execute(del);
         } finally {
             httpclient.getConnectionManager().shutdown();
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/JettyCxfRsRouterTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/JettyCxfRsRouterTest.java
new file mode 100644
index 0000000..7843e96
--- /dev/null
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/JettyCxfRsRouterTest.java
@@ -0,0 +1,41 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS 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.jaxrs;
+
+import org.apache.camel.component.cxf.CXFTestSupport;
+import org.junit.Test;
+import org.springframework.context.support.AbstractXmlApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class JettyCxfRsRouterTest extends CxfRsRouterTest {
+    private static final int PORT2 = CXFTestSupport.getPort5();
+    @Override
+    protected int getPort() {
+        return PORT2;
+    }
+
+    @Override
+    protected AbstractXmlApplicationContext createApplicationContext() {        
+        return new ClassPathXmlApplicationContext("org/apache/camel/component/cxf/jaxrs/JettyCxfRsSpringRouter.xml");
+    }
+    
+    @Test 
+    public void testEndpointUris() throws Exception {
+        // Don't test anything here
+    }
+
+}
diff --git a/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/JettyCxfRsSpringRouter.xml b/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/JettyCxfRsSpringRouter.xml
new file mode 100644
index 0000000..074bf89
--- /dev/null
+++ b/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/JettyCxfRsSpringRouter.xml
@@ -0,0 +1,64 @@
+<?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.
+-->
+<!-- START SNIPPET: cxfRsExample -->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:cxf="http://camel.apache.org/schema/cxf"
+       xmlns:jaxrs="http://cxf.apache.org/jaxrs"
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd
+       http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
+       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+    ">
+
+    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
+
+  <!-- Defined the real JAXRS back end service  -->
+  <jaxrs:server id="restService"
+		        address="http://localhost:${CXFTestSupport.port2}/JettyCxfRsRouterTest/rest" 
+		        staticSubresourceResolution="true">
+    <jaxrs:serviceBeans>
+      <ref bean="customerService"/>
+    </jaxrs:serviceBeans>       
+  </jaxrs:server>
+  
+  <!--  bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.JSONProvider"/-->
+
+  <bean id="customerService" class="org.apache.camel.component.cxf.jaxrs.testbean.CustomerService" />
+  
+  <!-- Defined the client endpoint to create the cxf-rs consumer -->
+  <cxf:rsClient id="rsClient" address="http://localhost:${CXFTestSupport.port2}/JettyCxfRsRouterTest/rest"
+    serviceClass="org.apache.camel.component.cxf.jaxrs.testbean.CustomerService"
+    loggingFeatureEnabled="true" skipFaultLogging="true"/>
+  
+  <!-- The camel route context -->
+  <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring" trace="true">
+    <route>
+       <!-- Jetty server can be used to proxy the request to cxfrs client -->
+       <from uri="jetty://http://localhost:{{CXFTestSupport.port5}}/CxfRsRouterTest/route?matchOnUriPrefix=true&amp;bridgeEndpoint=true"/>
+       <!-- We can remove this configure as the CXFRS producer is using the HttpAPI by default -->
+       <setHeader headerName="CamelCxfRsUsingHttpAPI">
+         <constant>True</constant>        
+       </setHeader>
+       <to uri="cxfrs://bean://rsClient"/>
+    </route>
+  </camelContext>
+  
+</beans>
+<!-- START SNIPPET: cxfRsExample -->
diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java b/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java
index 5587afb..1957873 100644
--- a/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java
+++ b/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java
@@ -98,11 +98,18 @@
         ClassLoader oldTccl = overrideTccl(exchange);
         HttpHelper.setCharsetFromContentType(request.getContentType(), exchange);
         exchange.setIn(new HttpMessage(exchange, request, response));
-
         // set context path as header
         String contextPath = consumer.getEndpoint().getPath();
         exchange.getIn().setHeader("CamelServletContextPath", contextPath);
 
+        String httpPath = (String)exchange.getIn().getHeader(Exchange.HTTP_PATH);
+        // here we just remove the CamelServletContextPath part from the HTTP_PATH
+        if (contextPath != null
+            && httpPath.startsWith(contextPath)) {
+            exchange.getIn().setHeader(Exchange.HTTP_PATH,
+                    httpPath.substring(contextPath.length()));
+        }
+        
         try {
             log.trace("Processing request for exchangeId: {}", exchange.getExchangeId());
             // process the exchange
diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/helper/HttpHelper.java b/components/camel-http/src/main/java/org/apache/camel/component/http/helper/HttpHelper.java
index 79cc9e8..e98f2bb 100644
--- a/components/camel-http/src/main/java/org/apache/camel/component/http/helper/HttpHelper.java
+++ b/components/camel-http/src/main/java/org/apache/camel/component/http/helper/HttpHelper.java
@@ -180,32 +180,10 @@
 
         // append HTTP_PATH to HTTP_URI if it is provided in the header
         String path = exchange.getIn().getHeader(Exchange.HTTP_PATH, String.class);
+        // NOW the HTTP_PATH is just related path, we don't need to trim it
         if (path != null) {
             if (path.startsWith("/")) {
-                URI baseURI;
-                String baseURIString = exchange.getIn().getHeader(Exchange.HTTP_BASE_URI, String.class);
-                try {
-                    if (baseURIString == null) {
-                        if (exchange.getFromEndpoint() != null) {
-                            baseURIString = exchange.getFromEndpoint().getEndpointUri();
-                        } else {
-                            // will set a default one for it
-                            baseURIString = "/";
-                        }
-                    }
-                    baseURI = new URI(baseURIString);
-                    String basePath = baseURI.getPath();
-                    if (path.startsWith(basePath)) {
-                        path = path.substring(basePath.length());
-                        if (path.startsWith("/")) {
-                            path = path.substring(1);
-                        }
-                    } else {
-                        throw new RuntimeExchangeException("Cannot analyze the Exchange.HTTP_PATH header, due to: cannot find the right HTTP_BASE_URI", exchange);
-                    }
-                } catch (Throwable t) {
-                    throw new RuntimeExchangeException("Cannot analyze the Exchange.HTTP_PATH header, due to: " + t.getMessage(), exchange, t);
-                }
+                path = path.substring(1);
             }
             if (path.length() > 0) {
                 // make sure that there is exactly one "/" between HTTP_URI and
diff --git a/components/camel-http4/src/main/java/org/apache/camel/component/http4/helper/HttpHelper.java b/components/camel-http4/src/main/java/org/apache/camel/component/http4/helper/HttpHelper.java
index 0ac342c..1ae38f9 100644
--- a/components/camel-http4/src/main/java/org/apache/camel/component/http4/helper/HttpHelper.java
+++ b/components/camel-http4/src/main/java/org/apache/camel/component/http4/helper/HttpHelper.java
@@ -180,33 +180,10 @@
 
         // append HTTP_PATH to HTTP_URI if it is provided in the header
         String path = exchange.getIn().getHeader(Exchange.HTTP_PATH, String.class);
+        // NOW the HTTP_PATH is just related path, we don't need to trim it
         if (path != null) {
             if (path.startsWith("/")) {
-                URI baseURI;
-                String baseURIString = exchange.getIn().getHeader(Exchange.HTTP_BASE_URI, String.class);
-                try {
-                    if (baseURIString == null) {
-                        if (exchange.getFromEndpoint() != null) {
-                            baseURIString = exchange.getFromEndpoint().getEndpointUri();
-                        } else {
-                            // will set a default one for it
-                            baseURIString = "/";
-                        }
-                    }
-                    baseURI = new URI(baseURIString);
-                    String basePath = baseURI.getPath();
-                    if (path.startsWith(basePath)) {
-                        path = path.substring(basePath.length());
-                        if (path.startsWith("/")) {
-                            path = path.substring(1);
-                        }
-                    } else {
-                        throw new RuntimeExchangeException("Cannot analyze the Exchange.HTTP_PATH header, due to: cannot find the right HTTP_BASE_URI", exchange);
-                    }
-                } catch (Throwable t) {
-                    throw new RuntimeExchangeException("Cannot analyze the Exchange.HTTP_PATH header, due to: " + t.getMessage(), exchange, t);
-                }
-
+                path = path.substring(1);
             }
             if (path.length() > 0) {
                 // make sure that there is exactly one "/" between HTTP_URI and
diff --git a/components/camel-jclouds/pom.xml b/components/camel-jclouds/pom.xml
index e84565d..8c9ed66 100644
--- a/components/camel-jclouds/pom.xml
+++ b/components/camel-jclouds/pom.xml
@@ -34,6 +34,7 @@
     <properties>
         <camel.osgi.export.pkg>org.apache.camel.component.jclouds.*</camel.osgi.export.pkg>
         <camel.osgi.export.service>org.apache.camel.spi.ComponentResolver;component=jclouds</camel.osgi.export.service>
+        <google-guava-version>${jclouds-google-guava-version}</google-guava-version>
     </properties>
 
     <dependencies>
diff --git a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java
index c63fa86..280a5c1 100644
--- a/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java
+++ b/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java
@@ -108,12 +108,20 @@
             }
             
             HttpHelper.setCharsetFromContentType(request.getContentType(), exchange);
+            
             exchange.setIn(new HttpMessage(exchange, request, response));
-
             // set context path as header
             String contextPath = consumer.getEndpoint().getPath();
             exchange.getIn().setHeader("CamelServletContextPath", contextPath);
-
+            
+            String httpPath = (String)exchange.getIn().getHeader(Exchange.HTTP_PATH);
+            // here we just remove the CamelServletContextPath part from the HTTP_PATH
+            if (contextPath != null
+                && httpPath.startsWith(contextPath)) {
+                exchange.getIn().setHeader(Exchange.HTTP_PATH,
+                        httpPath.substring(contextPath.length()));
+            }
+            
             log.trace("Suspending continuation of exchangeId: {}", exchange.getExchangeId());
             continuation.setAttribute(EXCHANGE_ATTRIBUTE_ID, exchange.getExchangeId());
             // must suspend before we process the exchange
diff --git a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpProxyRouteTest.java b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpProxyRouteTest.java
index 5cd2444..8f932cf 100644
--- a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpProxyRouteTest.java
+++ b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpProxyRouteTest.java
@@ -65,7 +65,7 @@
 
                 from("jetty://http://localhost:{{port}}/bye").transform(header("foo").prepend("Bye "));
                 
-                from("jetty://http://localhost:{{port}}/otherEndpoint?matchOnUriPrefix=true").transform(header(Exchange.HTTP_PATH));
+                from("jetty://http://localhost:{{port}}/otherEndpoint?matchOnUriPrefix=true").transform(header(Exchange.HTTP_URI));
                 
                 from("jetty://http://localhost:{{port}}/proxyServer")
                     .to("http://localhost:{{port2}}/host?bridgeEndpoint=true");
diff --git a/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/HttpClientRouteTest.java b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/HttpClientRouteTest.java
index 7a35afa..b0453c2 100644
--- a/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/HttpClientRouteTest.java
+++ b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/HttpClientRouteTest.java
@@ -136,7 +136,9 @@
             from("servlet:///hello?matchOnUriPrefix=true").process(new Processor() {
                 public void process(Exchange exchange) throws Exception {
                     String contentType = exchange.getIn().getHeader(Exchange.CONTENT_TYPE, String.class);
-                    String path = exchange.getIn().getHeader(Exchange.HTTP_PATH, String.class);
+                    String path = exchange.getIn().getHeader(Exchange.HTTP_URI, String.class);
+                    path = path.substring(path.lastIndexOf("/"));
+
                     assertEquals("Get a wrong content type", CONTENT_TYPE, contentType);
                     // assert camel http header
                     String charsetEncoding = exchange.getIn().getHeader(Exchange.HTTP_CHARACTER_ENCODING, String.class);
diff --git a/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java b/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
index e2afc77..efe2355 100644
--- a/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
+++ b/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
@@ -112,6 +112,8 @@
     @XmlAttribute(required = false)
     @Deprecated
     private Boolean lazyLoadTypeConverters;
+    @XmlAttribute(required = false)
+    private Boolean typeConverterStatisticsEnabled;
     @XmlElement(name = "properties", required = false)
     private PropertiesDefinition properties;
     @XmlElement(name = "propertyPlaceholder", type = CamelPropertyPlaceholderDefinition.class, required = false)
@@ -539,6 +541,14 @@
         this.lazyLoadTypeConverters = lazyLoadTypeConverters;
     }
 
+    public Boolean getTypeConverterStatisticsEnabled() {
+        return typeConverterStatisticsEnabled;
+    }
+
+    public void setTypeConverterStatisticsEnabled(Boolean typeConverterStatisticsEnabled) {
+        this.typeConverterStatisticsEnabled = typeConverterStatisticsEnabled;
+    }
+
     public CamelJMXAgentDefinition getCamelJMXAgent() {
         return camelJMXAgent;
     }
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/impl/SpringTypeConverterRegistryStatisticsEnabledTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/impl/SpringTypeConverterRegistryStatisticsEnabledTest.java
new file mode 100644
index 0000000..a5102a3
--- /dev/null
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/impl/SpringTypeConverterRegistryStatisticsEnabledTest.java
@@ -0,0 +1,33 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS 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.spring.impl;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.impl.TypeConverterRegistryStatisticsEnabledTest;
+
+import static org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
+
+/**
+ *
+ */
+public class SpringTypeConverterRegistryStatisticsEnabledTest extends TypeConverterRegistryStatisticsEnabledTest {
+
+    protected CamelContext createCamelContext() throws Exception {
+        return createSpringCamelContext(this, "org/apache/camel/spring/impl/SpringTypeConverterRegistryStatisticsEnabledTest.xml");
+    }
+
+}
diff --git a/components/camel-spring/src/test/resources/org/apache/camel/spring/impl/SpringTypeConverterRegistryStatisticsEnabledTest.xml b/components/camel-spring/src/test/resources/org/apache/camel/spring/impl/SpringTypeConverterRegistryStatisticsEnabledTest.xml
new file mode 100644
index 0000000..9f95196
--- /dev/null
+++ b/components/camel-spring/src/test/resources/org/apache/camel/spring/impl/SpringTypeConverterRegistryStatisticsEnabledTest.xml
@@ -0,0 +1,36 @@
+<?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"
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+    ">
+
+  <!-- START SNIPPET: e1 -->
+  <!-- enable type converter statistics by setting the attribute to true -->
+  <camelContext xmlns="http://camel.apache.org/schema/spring" typeConverterStatisticsEnabled="true">
+    <route id="foo">
+      <from uri="direct:start"/>
+      <convertBodyTo type="int"/>
+      <to uri="mock:a"/>
+    </route>
+  </camelContext>
+  <!-- END SNIPPET: e1 -->
+
+</beans>
diff --git a/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/ClassLoadingAwareObjectInputStream.java b/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/ClassLoadingAwareObjectInputStream.java
index e13cd77..12535f3 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/ClassLoadingAwareObjectInputStream.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/ClassLoadingAwareObjectInputStream.java
@@ -21,7 +21,6 @@
 import java.io.ObjectInputStream;
 import java.io.ObjectStreamClass;
 import java.lang.reflect.Proxy;
-import java.util.HashMap;
 
 import org.apache.camel.CamelContext;
 
@@ -30,11 +29,6 @@
  */
 public class ClassLoadingAwareObjectInputStream extends ObjectInputStream {
 
-    /**
-     * <p>Maps primitive type names to corresponding class objects.</p>
-     */
-    private static final HashMap<String, Class<?>> PRIM_CLASSES = new HashMap<String, Class<?>>(8, 1.0F);
-    
     private CamelContext camelContext;
 
     public ClassLoadingAwareObjectInputStream(CamelContext camelContext, InputStream in) throws IOException {
@@ -44,16 +38,14 @@
 
     @Override
     protected Class<?> resolveClass(ObjectStreamClass classDesc) throws IOException, ClassNotFoundException {
-        ClassLoader cl = Thread.currentThread().getContextClassLoader();
-        return camelContext.getClassResolver().resolveClass(classDesc.getName(), cl);
+        return camelContext.getClassResolver().resolveClass(classDesc.getName());
     }
 
     @Override
     protected Class<?> resolveProxyClass(String[] interfaces) throws IOException, ClassNotFoundException {
-        ClassLoader cl = Thread.currentThread().getContextClassLoader();
         Class<?>[] cinterfaces = new Class[interfaces.length];
         for (int i = 0; i < interfaces.length; i++) {
-            cinterfaces[i] = camelContext.getClassResolver().resolveClass(interfaces[i], cl);
+            cinterfaces[i] = camelContext.getClassResolver().resolveClass(interfaces[i]);
         }
 
         try {
@@ -63,16 +55,4 @@
         }
     }
 
-    static {
-        PRIM_CLASSES.put("boolean", boolean.class);
-        PRIM_CLASSES.put("byte", byte.class);
-        PRIM_CLASSES.put("char", char.class);
-        PRIM_CLASSES.put("short", short.class);
-        PRIM_CLASSES.put("int", int.class);
-        PRIM_CLASSES.put("long", long.class);
-        PRIM_CLASSES.put("float", float.class);
-        PRIM_CLASSES.put("double", double.class);
-        PRIM_CLASSES.put("void", void.class);
-    }
-
 }
diff --git a/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamConsumer.java b/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamConsumer.java
index f16f4bc..d989249 100644
--- a/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamConsumer.java
+++ b/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamConsumer.java
@@ -82,10 +82,8 @@
 
     @Override
     public void doStop() throws Exception {
-        // important: do not close the stream as it will close the standard
-        // system.in etc.
         if (executor != null) {
-            endpoint.getCamelContext().getExecutorServiceManager().shutdownGraceful(executor);
+            endpoint.getCamelContext().getExecutorServiceManager().shutdownNow(executor);
             executor = null;
         }
         lines.clear();
@@ -98,6 +96,8 @@
     public void run() {
         try {
             readFromStream();
+        } catch (InterruptedException e) {
+            // we are closing down so ignore
         } catch (Exception e) {
             getExceptionHandler().handleException(e);
         }
diff --git a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/TypeConverterRegistryStatisticsEnabledTest.java b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/TypeConverterRegistryStatisticsEnabledTest.java
new file mode 100644
index 0000000..998afb9
--- /dev/null
+++ b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/TypeConverterRegistryStatisticsEnabledTest.java
@@ -0,0 +1,68 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS 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.test.blueprint;
+
+import org.apache.camel.spi.TypeConverterRegistry;
+import org.junit.Test;
+
+public class TypeConverterRegistryStatisticsEnabledTest extends CamelBlueprintTestSupport {
+
+    @Override
+    protected String getBlueprintDescriptor() {
+        return "org/apache/camel/test/blueprint/typeConverterRegistryStatisticsEnabledTest.xml";
+    }
+
+    @Test
+    public void testTypeConverterRegistry() throws Exception {
+        getMockEndpoint("mock:a").expectedMessageCount(2);
+
+        template.sendBody("direct:start", "3");
+        template.sendBody("direct:start", "7");
+
+        assertMockEndpointsSatisfied();
+
+        TypeConverterRegistry reg = context.getTypeConverterRegistry();
+        assertTrue("Should be enabled", reg.getStatistics().isStatisticsEnabled());
+
+        Long failed = reg.getStatistics().getFailedCounter();
+        assertEquals(0, failed.intValue());
+        Long miss = reg.getStatistics().getMissCounter();
+        assertEquals(0, miss.intValue());
+
+        try {
+            template.sendBody("direct:start", "foo");
+            fail("Should have thrown exception");
+        } catch (Exception e) {
+            // expected
+        }
+
+        // should now have a failed
+        failed = reg.getStatistics().getFailedCounter();
+        assertEquals(1, failed.intValue());
+        miss = reg.getStatistics().getMissCounter();
+        assertEquals(0, miss.intValue());
+
+        // reset
+        reg.getStatistics().reset();
+
+        failed = reg.getStatistics().getFailedCounter();
+        assertEquals(0, failed.intValue());
+        miss = reg.getStatistics().getMissCounter();
+        assertEquals(0, miss.intValue());
+    }
+
+}
diff --git a/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/typeConverterRegistryStatisticsEnabledTest.xml b/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/typeConverterRegistryStatisticsEnabledTest.xml
new file mode 100644
index 0000000..4618eb6
--- /dev/null
+++ b/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/typeConverterRegistryStatisticsEnabledTest.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+           xsi:schemaLocation="
+             http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
+
+    <!-- START SNIPPET: e1 -->
+    <!-- enable type converter statistics by setting the attribute to true -->
+    <camelContext xmlns="http://camel.apache.org/schema/blueprint" typeConverterStatisticsEnabled="true">
+        <route id="foo">
+            <from uri="direct:start"/>
+            <convertBodyTo type="int"/>
+            <to uri="mock:a"/>
+        </route>
+    </camelContext>
+    <!-- END SNIPPET: e1 -->
+
+</blueprint>
diff --git a/etc/pom.xml b/etc/pom.xml
index 88563b80d..70a0a5d 100755
--- a/etc/pom.xml
+++ b/etc/pom.xml
@@ -24,7 +24,6 @@
     <groupId>org.apache.camel</groupId>
     <artifactId>camel-parent</artifactId>
     <version>2.11-SNAPSHOT</version>
-    <relativePath>../parent</relativePath>
   </parent>
 
   <artifactId>camel-etc</artifactId>
diff --git a/examples/camel-example-bam/README.txt b/examples/camel-example-bam/README.txt
index a46778a..2cacb3e 100644
--- a/examples/camel-example-bam/README.txt
+++ b/examples/camel-example-bam/README.txt
@@ -16,11 +16,6 @@
 You can see the BAM activies defined in
   src/main/java/org/apache/camel/example/bam/MyActivites.java
   
-In the HSQL Database Explorer type
-  select * from camel_activitystate
-to see the states of the activities. Notice that one activity never receives
-its expected message and when it's overdue Camel reports this as an error.
-
 To stop the example hit ctrl + c
 
 This example is documented at
diff --git a/examples/camel-example-bam/pom.xml b/examples/camel-example-bam/pom.xml
index 87afe04..f538f85 100644
--- a/examples/camel-example-bam/pom.xml
+++ b/examples/camel-example-bam/pom.xml
@@ -54,10 +54,6 @@
       <groupId>org.apache.camel</groupId>
       <artifactId>camel-juel</artifactId>
     </dependency>
-    <dependency>
-		<groupId>org.springframework</groupId>
-		<artifactId>spring-aop</artifactId>
-	</dependency>
 
     <!-- lets use log4j -->
     <dependency>
@@ -65,11 +61,6 @@
       <artifactId>slf4j-log4j12</artifactId>
     </dependency>
 
-    <dependency>
-      <groupId>xalan</groupId>
-      <artifactId>xalan</artifactId>
-    </dependency>
-
     <!-- lets use hibernate by default -->
     <dependency>
       <groupId>org.hibernate</groupId>
@@ -84,8 +75,8 @@
       <artifactId>geronimo-jta_1.1_spec</artifactId>
     </dependency>
     <dependency>
-		<groupId>commons-dbcp</groupId>
-		<artifactId>commons-dbcp</artifactId>
+      <groupId>commons-dbcp</groupId>
+      <artifactId>commons-dbcp</artifactId>
 	</dependency>
 
     <!-- testing -->
diff --git a/examples/camel-example-bam/src/data/invoices/invoiceA.xml b/examples/camel-example-bam/src/data/invoices/invoiceA.xml
index c1c0c99..f73b8f2 100644
--- a/examples/camel-example-bam/src/data/invoices/invoiceA.xml
+++ b/examples/camel-example-bam/src/data/invoices/invoiceA.xml
@@ -1,20 +1,4 @@
 <?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.
--->
 <invoice purchaseOrderId="p1">
   <description>This invoice should tie up with purchase order p1</description>
 </invoice>
\ No newline at end of file
diff --git a/examples/camel-example-bam/src/data/invoices/invoiceC.xml b/examples/camel-example-bam/src/data/invoices/invoiceC.xml
index ce00516..43ce8d8 100644
--- a/examples/camel-example-bam/src/data/invoices/invoiceC.xml
+++ b/examples/camel-example-bam/src/data/invoices/invoiceC.xml
@@ -1,20 +1,4 @@
 <?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.
--->
 <invoice purchaseOrderId="p3">
   <description>This invoice should tie up with purchase order p3</description>
 </invoice>
\ No newline at end of file
diff --git a/examples/camel-example-bam/src/data/purchaseOrders/po1.xml b/examples/camel-example-bam/src/data/purchaseOrders/po1.xml
index 78ee21e..edec47c 100644
--- a/examples/camel-example-bam/src/data/purchaseOrders/po1.xml
+++ b/examples/camel-example-bam/src/data/purchaseOrders/po1.xml
@@ -1,20 +1,4 @@
 <?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.
--->
 <purchaseOrder id="p1">
   <product>beer</product>
   <amount>10</amount>
diff --git a/examples/camel-example-bam/src/data/purchaseOrders/po2.xml b/examples/camel-example-bam/src/data/purchaseOrders/po2.xml
index 640ce5e..cc8a4a5 100644
--- a/examples/camel-example-bam/src/data/purchaseOrders/po2.xml
+++ b/examples/camel-example-bam/src/data/purchaseOrders/po2.xml
@@ -1,20 +1,4 @@
 <?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.
--->
 <purchaseOrder id="p2">
   <product>pizza</product>
   <amount>2</amount>
diff --git a/examples/camel-example-bam/src/data/purchaseOrders/po3.xml b/examples/camel-example-bam/src/data/purchaseOrders/po3.xml
index 299ae01..8307f48 100644
--- a/examples/camel-example-bam/src/data/purchaseOrders/po3.xml
+++ b/examples/camel-example-bam/src/data/purchaseOrders/po3.xml
@@ -1,20 +1,4 @@
 <?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.
--->
 <purchaseOrder id="p3">
   <product>iPhone</product>
   <amount>1</amount>
diff --git a/examples/camel-example-bam/src/main/java/org/apache/camel/example/bam/Main.java b/examples/camel-example-bam/src/main/java/org/apache/camel/example/bam/Main.java
index 030f9f3..7bdb8d5 100644
--- a/examples/camel-example-bam/src/main/java/org/apache/camel/example/bam/Main.java
+++ b/examples/camel-example-bam/src/main/java/org/apache/camel/example/bam/Main.java
@@ -17,12 +17,16 @@
 package org.apache.camel.example.bam;
 
 /**
+ * Main class to make it easy to run this example.
+ *
  * @version 
  */
 public final class Main {
+
     private Main() {
         // do nothing here
     }
+
     public static void main(String[] args) throws Exception {
         org.apache.camel.spring.Main.main(args);
     }
diff --git a/examples/camel-example-bam/src/main/resources/META-INF/persistence.xml b/examples/camel-example-bam/src/main/resources/META-INF/persistence.xml
index a470d0e..00cb604 100644
--- a/examples/camel-example-bam/src/main/resources/META-INF/persistence.xml
+++ b/examples/camel-example-bam/src/main/resources/META-INF/persistence.xml
@@ -1,18 +1,19 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
- Copyright 2006 The Apache Software Foundation.
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
 
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
+    http://www.apache.org/licenses/LICENSE-2.0
 
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
 -->
 <persistence xmlns="http://java.sun.com/xml/ns/persistence"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
diff --git a/examples/camel-example-cdi/src/data/message1.xml b/examples/camel-example-cdi/src/data/message1.xml
index 60724d8..f215844 100644
--- a/examples/camel-example-cdi/src/data/message1.xml
+++ b/examples/camel-example-cdi/src/data/message1.xml
@@ -1,20 +1,4 @@
 <?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.
--->
 <person user="james">
   <firstName>James</firstName>
   <lastName>Strachan</lastName>
diff --git a/examples/camel-example-cdi/src/data/message2.xml b/examples/camel-example-cdi/src/data/message2.xml
index 6a0e717..5caa192 100644
--- a/examples/camel-example-cdi/src/data/message2.xml
+++ b/examples/camel-example-cdi/src/data/message2.xml
@@ -1,20 +1,4 @@
 <?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.
--->
 <person user="hiram">
   <firstName>Hiram</firstName>
   <lastName>Chirino</lastName>
diff --git a/examples/camel-example-cxf-proxy/README.txt b/examples/camel-example-cxf-proxy/README.txt
index 9504c04..bdee92f 100644
--- a/examples/camel-example-cxf-proxy/README.txt
+++ b/examples/camel-example-cxf-proxy/README.txt
@@ -10,18 +10,19 @@
   mvn camel:run
 
 The proxied webservice is located at
-  http://localhost:9080/camel-example-cxf-proxy/webservices/incident
+  http://localhost:<port 1>/camel-example-cxf-proxy/webservices/incident
 
 The real webservice is located at
-  http://localhost:9081/real-webservice
+  http://localhost:<port 2>/real-webservice
 
 The webservice WSDL is exposed at:
-  http://localhost:9080/camel-example-cxf-proxy/webservices/incident?wsdl
+  http://localhost:<port 1>/camel-example-cxf-proxy/webservices/incident?wsdl
 
+Because we use dynamic port numbers, you have to check the console to get the used one.
 To stop the example hit ctrl + c
 
 To make a SOAP call open soapUI or another SOAP query tool and create a new
-project w/WSDL of http://localhost:9080/camel-example-cxf-proxy/webservices/incident?wsdl.
+project w/WSDL of http://localhost:<port 1>/camel-example-cxf-proxy/webservices/incident?wsdl.
 Then make SOAP requests of this format:
 
 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
diff --git a/examples/camel-example-cxf-tomcat/src/main/resources/camel-config.xml b/examples/camel-example-cxf-tomcat/src/main/resources/camel-config.xml
index 655dc9a..a16bc65 100755
--- a/examples/camel-example-cxf-tomcat/src/main/resources/camel-config.xml
+++ b/examples/camel-example-cxf-tomcat/src/main/resources/camel-config.xml
@@ -25,7 +25,9 @@
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
        http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd">
-
+  <!-- We still need it for loading the CXFServlet --> 
+  <import resource="classpath:META-INF/cxf/cxf.xml"/>
+  
   <bean id="myRoutes" class="org.apache.camel.example.cxf.CamelRoute"/>
 
   <camelContext xmlns="http://camel.apache.org/schema/spring">
diff --git a/examples/camel-example-etl/src/data/row1.xml b/examples/camel-example-etl/src/data/row1.xml
index 60724d8..f215844 100644
--- a/examples/camel-example-etl/src/data/row1.xml
+++ b/examples/camel-example-etl/src/data/row1.xml
@@ -1,20 +1,4 @@
 <?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.
--->
 <person user="james">
   <firstName>James</firstName>
   <lastName>Strachan</lastName>
diff --git a/examples/camel-example-etl/src/data/row2.xml b/examples/camel-example-etl/src/data/row2.xml
index 6a0e717..5caa192 100644
--- a/examples/camel-example-etl/src/data/row2.xml
+++ b/examples/camel-example-etl/src/data/row2.xml
@@ -1,20 +1,4 @@
 <?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.
--->
 <person user="hiram">
   <firstName>Hiram</firstName>
   <lastName>Chirino</lastName>
diff --git a/examples/camel-example-guice-jms/src/data/message1.xml b/examples/camel-example-guice-jms/src/data/message1.xml
index 60724d8..f215844 100644
--- a/examples/camel-example-guice-jms/src/data/message1.xml
+++ b/examples/camel-example-guice-jms/src/data/message1.xml
@@ -1,20 +1,4 @@
 <?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.
--->
 <person user="james">
   <firstName>James</firstName>
   <lastName>Strachan</lastName>
diff --git a/examples/camel-example-guice-jms/src/data/message2.xml b/examples/camel-example-guice-jms/src/data/message2.xml
index 6a0e717..5caa192 100644
--- a/examples/camel-example-guice-jms/src/data/message2.xml
+++ b/examples/camel-example-guice-jms/src/data/message2.xml
@@ -1,20 +1,4 @@
 <?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.
--->
 <person user="hiram">
   <firstName>Hiram</firstName>
   <lastName>Chirino</lastName>
diff --git a/examples/camel-example-management/src/main/data/message.xml b/examples/camel-example-management/src/main/data/message.xml
index eb49232..4b8530d 100644
--- a/examples/camel-example-management/src/main/data/message.xml
+++ b/examples/camel-example-management/src/main/data/message.xml
@@ -1,20 +1,4 @@
 <?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.
--->
 <person>
     <name>Claus</name>
 </person>
\ No newline at end of file
diff --git a/examples/camel-example-osgi-rmi/README.txt b/examples/camel-example-osgi-rmi/README.txt
index dbb713f..6290c7f 100644
--- a/examples/camel-example-osgi-rmi/README.txt
+++ b/examples/camel-example-osgi-rmi/README.txt
@@ -23,21 +23,11 @@
 from the shell
 
 First the camel-rmi feature must be installed
-
+  features:chooseurl camel ${version}
   features:install camel-rmi
 
 Then install the example
-
-  osgi:install mvn:org.apache.camel/camel-example-osgi-rmi/2.8.0
-
-      (substitute 2.8.0 with the Camel version number)
-
-Then start the bundle by starting the id it was assigned during installation
-
-  osgi:start 182
-
-      (substitute 182 with the id of the bundle)
-
+  osgi:install -s mvn:org.apache.camel/camel-example-osgi-rmi/${version}
 
 If you hit an problems please let us know on the Camel Forums
   http://camel.apache.org/discussion-forums.html
diff --git a/examples/camel-example-osgi/README.txt b/examples/camel-example-osgi/README.txt
index e0084ea..f77e0c1 100644
--- a/examples/camel-example-osgi/README.txt
+++ b/examples/camel-example-osgi/README.txt
@@ -20,20 +20,13 @@
 =============================
 
 You will need to compile and install this example first:
-  mvn compile install
+  mvn install
 
 If using Apache Karaf / Apache ServiceMix you can install this example
 from the shell
-
-  osgi:install mvn:org.apache.camel/camel-example-osgi/${version}
-
-
-Then start the bundle by starting the id it was assigned during installation
-
-  osgi:start 182
-
-      (substitute 182 with the id of the bundle)
-
+  features:chooseurl camel ${version}
+  features:install camel-spring
+  osgi:install -s mvn:org.apache.camel/camel-example-osgi/${version}
 
 If you hit any problems please let us know on the Camel Forums
   http://camel.apache.org/discussion-forums.html
diff --git a/examples/camel-example-osgi/src/main/resources/features.xml b/examples/camel-example-osgi/src/main/resources/features.xml
index 8e87233..2a95296 100644
--- a/examples/camel-example-osgi/src/main/resources/features.xml
+++ b/examples/camel-example-osgi/src/main/resources/features.xml
@@ -19,7 +19,7 @@
     <repository>mvn:org.apache.camel.karaf/apache-camel/${project.version}/xml/features</repository>
     
     <feature name='camel-example-osgi' version='${project.version}'>
-        <feature version="${project.version}">camel</feature>
+        <feature version="${project.version}">camel-spring</feature>
         <bundle>mvn:org.apache.camel/camel-example-osgi/${project.version}</bundle>
     </feature>
 
diff --git a/examples/camel-example-pojo-messaging/src/data/message1.xml b/examples/camel-example-pojo-messaging/src/data/message1.xml
index 60724d8..f215844 100644
--- a/examples/camel-example-pojo-messaging/src/data/message1.xml
+++ b/examples/camel-example-pojo-messaging/src/data/message1.xml
@@ -1,20 +1,4 @@
 <?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.
--->
 <person user="james">
   <firstName>James</firstName>
   <lastName>Strachan</lastName>
diff --git a/examples/camel-example-pojo-messaging/src/data/message2.xml b/examples/camel-example-pojo-messaging/src/data/message2.xml
index 6a0e717..5caa192 100644
--- a/examples/camel-example-pojo-messaging/src/data/message2.xml
+++ b/examples/camel-example-pojo-messaging/src/data/message2.xml
@@ -1,20 +1,4 @@
 <?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.
--->
 <person user="hiram">
   <firstName>Hiram</firstName>
   <lastName>Chirino</lastName>
diff --git a/examples/camel-example-pojo-messaging/src/data/message3.xml b/examples/camel-example-pojo-messaging/src/data/message3.xml
index 9ab078d..73bf554 100644
--- a/examples/camel-example-pojo-messaging/src/data/message3.xml
+++ b/examples/camel-example-pojo-messaging/src/data/message3.xml
@@ -1,20 +1,4 @@
 <?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.
--->
 <person user="jon">
   <firstName>Jonathan</firstName>
   <lastName>Anstey</lastName>
diff --git a/examples/camel-example-reportincident-wssecurity/README.txt b/examples/camel-example-reportincident-wssecurity/README.txt
index 6a30bf4..53e1fb6 100644
--- a/examples/camel-example-reportincident-wssecurity/README.txt
+++ b/examples/camel-example-reportincident-wssecurity/README.txt
@@ -47,11 +47,11 @@
   osgi:install -s mvn:org.apache.camel/camel-example-reportincident-wssecurity
   
   4) Verify that your service is available using in the browser the following url
-  http://localhost:9080/camel-example-reportincident/webservices/incident?wsdl
+  http://localhost:9081/camel-example-reportincident/webservices/incident?wsdl
 
   5) Start SOAPUI (2.x)
   Create a new project called camel-example-reportincident-wssecurity
-  Point to the following url : http://localhost:9080/camel-example-reportincident/webservices/incident?wsdl
+  Point to the following url : http://localhost:9081/camel-example-reportincident/webservices/incident?wsdl
   Open the request 1 (under camel-example-reportincident-wssecurity --> ReportIncidentBinding --> ReportIncident) and copy/paste the SOAP
   message generated by the unit test
   
@@ -60,7 +60,7 @@
 	2010-07-14 09:57:54,403 [main           ] INFO  LoggingOutInterceptor          - Outbound Message
 	---------------------------
 	ID: 1
-	Address: http://localhost:9080/camel-example-reportincident/webservices/incident
+	Address: http://localhost:9081/camel-example-reportincident/webservices/incident
 	Encoding: UTF-8
 	Content-Type: text/xml
 	Headers: {SOAPAction=["http://reportincident.example.camel.apache.org/ReportIncident"], Accept=[*/*]}
diff --git a/examples/camel-example-reportincident-wssecurity/pom.xml b/examples/camel-example-reportincident-wssecurity/pom.xml
index bbd5d39..5b420c2 100644
--- a/examples/camel-example-reportincident-wssecurity/pom.xml
+++ b/examples/camel-example-reportincident-wssecurity/pom.xml
@@ -137,14 +137,12 @@
 			<groupId>org.apache.cxf</groupId>
 			<artifactId>cxf-rt-frontend-jaxrs</artifactId>
 			<version>${cxf-version}</version>
-			<scope>test</scope>
 		</dependency>
 		
 		<dependency>
 			<groupId>org.apache.velocity</groupId>
 			<artifactId>velocity</artifactId>
 			<version>${velocity-version}</version>
-			<scope>test</scope>
 		</dependency>
 
 	</dependencies>
@@ -174,19 +172,11 @@
                     </execution>
                 </executions>
             </plugin>
-
-            <!-- so we can run mvn jetty:run -->
+            
             <plugin>
-                <groupId>org.mortbay.jetty</groupId>
-                <artifactId>jetty-maven-plugin</artifactId>
-                <configuration>
-                   <connectors>
-                      <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
-                        <port>9080</port>
-                        <maxIdleTime>60000</maxIdleTime>
-                      </connector>
-                   </connectors>                   
-                </configuration>
+                <groupId>org.apache.camel</groupId>
+				<artifactId>camel-maven-plugin</artifactId>
+				<version>${project.version}</version>
             </plugin>
             
             <!-- to generate the MANIFEST-FILE of the bundle -->
diff --git a/examples/camel-example-reportincident-wssecurity/src/main/resources/META-INF/spring/camel-context.xml b/examples/camel-example-reportincident-wssecurity/src/main/resources/META-INF/spring/camel-context.xml
index ae7fd98..cc129e1 100644
--- a/examples/camel-example-reportincident-wssecurity/src/main/resources/META-INF/spring/camel-context.xml
+++ b/examples/camel-example-reportincident-wssecurity/src/main/resources/META-INF/spring/camel-context.xml
@@ -74,7 +74,7 @@
 
   <camel:camelContext id="camel">
     <!-- property which contains port number -->
-    <camel:propertyPlaceholder id="properties" location="classpath:incident.properties,file:target/custom.properties"/>
+    <camel:propertyPlaceholder id="properties" ignoreMissingLocation="true" location="classpath:incident.properties,file:target/custom.properties"/>
 
     <camel:route>
       <camel:from uri="cxf:bean:reportIncident"/>
diff --git a/examples/camel-example-reportincident/src/main/resources/camel-config.xml b/examples/camel-example-reportincident/src/main/resources/camel-config.xml
index 499caff..c1d5442 100755
--- a/examples/camel-example-reportincident/src/main/resources/camel-config.xml
+++ b/examples/camel-example-reportincident/src/main/resources/camel-config.xml
@@ -21,6 +21,8 @@
        xsi:schemaLocation="
          http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
          http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
+  <!-- We still need it for loading the CXFServlet --> 
+  <import resource="classpath:META-INF/cxf/cxf.xml"/>
 
   <!-- create a camel context as to start Camel -->
   <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
diff --git a/examples/camel-example-route-throttling/pom.xml b/examples/camel-example-route-throttling/pom.xml
index 3229c26..1bd42ca 100644
--- a/examples/camel-example-route-throttling/pom.xml
+++ b/examples/camel-example-route-throttling/pom.xml
@@ -53,6 +53,10 @@
             <groupId>org.apache.activemq</groupId>
             <artifactId>activemq-camel</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.activemq</groupId>
+            <artifactId>activemq-kahadb-store</artifactId>
+        </dependency>
 
         <!-- xbean is required for ActiveMQ broker configuration in the spring xml file -->
         <dependency>
diff --git a/examples/camel-example-servlet-tomcat-no-spring/README.txt b/examples/camel-example-servlet-tomcat-no-spring/README.txt
index 6890dd7..db3afa5 100644
--- a/examples/camel-example-servlet-tomcat-no-spring/README.txt
+++ b/examples/camel-example-servlet-tomcat-no-spring/README.txt
@@ -12,10 +12,10 @@
 
 And then hit this url from a webbrowser which has further
 instructions (use correct version number)
-  http://localhost:8080/camel-example-servlet-tomcat-no-spring-2.11.0
+  http://localhost:8080/camel-example-servlet-tomcat-no-spring-{version}
 
 The servlet is located at (use correct version number)
-  http://localhost:8080/camel-example-servlet-tomcat-no-spring-2.11.0/camel
+  http://localhost:8080/camel-example-servlet-tomcat-no-spring-{version}/camel
 
 This example is documented at
   http://camel.apache.org/servlet-tomcat-example-no-spring.html
diff --git a/examples/camel-example-servlet-tomcat/README.txt b/examples/camel-example-servlet-tomcat/README.txt
index 072e817..174d941 100644
--- a/examples/camel-example-servlet-tomcat/README.txt
+++ b/examples/camel-example-servlet-tomcat/README.txt
@@ -11,10 +11,10 @@
 
 And then hit this url from a webbrowser which has further
 instructions (use correct version number)
-  http://localhost:8080/camel-example-servlet-tomcat-2.7.0
+  http://localhost:8080/camel-example-servlet-tomcat-{version}
 
 The servlet is located at (use correct version number)
-  http://localhost:8080/camel-example-servlet-tomcat-2.7.0/camel
+  http://localhost:8080/camel-example-servlet-tomcat-{version}/camel/hello
 
 This example is documented at
   http://camel.apache.org/servlet-tomcat-example.html
diff --git a/examples/camel-example-spring-javaconfig/src/data/message1.xml b/examples/camel-example-spring-javaconfig/src/data/message1.xml
index 60724d8..f215844 100644
--- a/examples/camel-example-spring-javaconfig/src/data/message1.xml
+++ b/examples/camel-example-spring-javaconfig/src/data/message1.xml
@@ -1,20 +1,4 @@
 <?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.
--->
 <person user="james">
   <firstName>James</firstName>
   <lastName>Strachan</lastName>
diff --git a/examples/camel-example-spring-javaconfig/src/data/message2.xml b/examples/camel-example-spring-javaconfig/src/data/message2.xml
index 6a0e717..5caa192 100644
--- a/examples/camel-example-spring-javaconfig/src/data/message2.xml
+++ b/examples/camel-example-spring-javaconfig/src/data/message2.xml
@@ -1,20 +1,4 @@
 <?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.
--->
 <person user="hiram">
   <firstName>Hiram</firstName>
   <lastName>Chirino</lastName>
diff --git a/examples/camel-example-spring-jms/pom.xml b/examples/camel-example-spring-jms/pom.xml
index 1aea506..831510a 100644
--- a/examples/camel-example-spring-jms/pom.xml
+++ b/examples/camel-example-spring-jms/pom.xml
@@ -80,11 +80,6 @@
         
         <!-- for testing -->
         <dependency>
-          <groupId>junit</groupId>
-          <artifactId>junit</artifactId>
-          <scope>test</scope>
-        </dependency>
-        <dependency>
           <groupId>org.apache.camel</groupId>
           <artifactId>camel-test-spring</artifactId>
           <scope>test</scope>
diff --git a/examples/camel-example-spring-jms/src/main/java/org/apache/camel/example/client/CamelClientEndpoint.java b/examples/camel-example-spring-jms/src/main/java/org/apache/camel/example/client/CamelClientEndpoint.java
index b270366..6c813bd 100644
--- a/examples/camel-example-spring-jms/src/main/java/org/apache/camel/example/client/CamelClientEndpoint.java
+++ b/examples/camel-example-spring-jms/src/main/java/org/apache/camel/example/client/CamelClientEndpoint.java
@@ -52,7 +52,7 @@
         // we use the in out pattern for a synchronized exchange where we expect a response
         Exchange exchange = endpoint.createExchange(ExchangePattern.InOut);
         // set the input on the in body
-        // must you correct type to match the expected type of an Integer object
+        // must be correct type to match the expected type of an Integer object
         exchange.getIn().setBody(11);
 
         // to send the exchange we need an producer to do it for us
diff --git a/examples/camel-example-spring-jms/src/main/resources/META-INF/spring/camel-server.xml b/examples/camel-example-spring-jms/src/main/resources/META-INF/spring/camel-server.xml
index f70f774..d162d2d 100644
--- a/examples/camel-example-spring-jms/src/main/resources/META-INF/spring/camel-server.xml
+++ b/examples/camel-example-spring-jms/src/main/resources/META-INF/spring/camel-server.xml
@@ -26,7 +26,7 @@
          http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
          http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
-         http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core-5.5.0.xsd">
+         http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
   <!-- END SNIPPET: e1 -->
 
   <!-- START SNIPPET: e2 -->
@@ -50,7 +50,7 @@
   <!-- END SNIPPET: e3 -->
 
   <!-- START SNIPPET: e4 -->
-  <!-- lets configure the ActiveMQ JMS broker server to listen on TCP 61610 -->
+  <!-- lets configure the ActiveMQ JMS broker server -->
   <broker:broker useJmx="true" persistent="false" brokerName="myBroker">
     <broker:transportConnectors>
       <!-- expose a VM transport for in-JVM transport between AMQ and Camel on the server side -->
diff --git a/examples/camel-example-spring-jms/src/main/resources/camel-client.xml b/examples/camel-example-spring-jms/src/main/resources/camel-client.xml
index e1b9be8..729cce3 100644
--- a/examples/camel-example-spring-jms/src/main/resources/camel-client.xml
+++ b/examples/camel-example-spring-jms/src/main/resources/camel-client.xml
@@ -20,8 +20,10 @@
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:camel="http://camel.apache.org/schema/spring"
+       xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="
          http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
          http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
   <!-- END SNIPPET: e1 -->
 
@@ -31,10 +33,14 @@
   </camel:camelContext>
   <!-- END SNIPPET: e2 -->
 
+  <!-- spring property placeholder, ignore resource not found as the file resource is for unit testing -->
+  <context:property-placeholder location="classpath:camel.properties,file:target/custom.properties"
+                                ignore-resource-not-found="true"/>
+
   <!-- START SNIPPET: e3 -->
   <!-- Camel JMSProducer to be able to send messages to a remote Active MQ server -->
   <bean id="jms" class="org.apache.activemq.camel.component.ActiveMQComponent">
-    <property name="brokerURL" value="tcp://localhost:61610"/>
+    <property name="brokerURL" value="tcp://localhost:${tcp.port}"/>
   </bean>
   <!-- END SNIPPET: e3 -->
 
diff --git a/examples/camel-example-spring-security/README.txt b/examples/camel-example-spring-security/README.txt
index ec0a073..fc5e650 100644
--- a/examples/camel-example-spring-security/README.txt
+++ b/examples/camel-example-spring-security/README.txt
@@ -18,7 +18,7 @@
 
 Then you can use the script in the client directory to send the request and check the response,
 or use browser to access upper urls with the user/password 
-("jim/jimspassword" with the admin and user role  or "rob/robspassword" with user role).
+("jim/jimspassword" with the admin and user role  or "bob/bobspassword" with user role).
 
 This example is documented at
   http://camel.apache.org/spring-security-example.html
diff --git a/examples/camel-example-spring-ws/README.txt b/examples/camel-example-spring-ws/README.txt
index 8977465..5d8e7c0 100644
--- a/examples/camel-example-spring-ws/README.txt
+++ b/examples/camel-example-spring-ws/README.txt
@@ -4,10 +4,10 @@
 This example shows how to expose a SOAP-based web service using Camel and Spring Web Services.
 
 The web service endpoint address is:
- "http://localhost:8080/increment"
+  http://localhost:8080/increment
  
 The WSDL is available at:
- "http://localhost:8080/increment/increment.wsdl"
+  http://localhost:8080/increment/increment.wsdl
 
 You will need to compile this example first:
   mvn clean install
diff --git a/examples/camel-example-spring-xquery/src/data/message1.xml b/examples/camel-example-spring-xquery/src/data/message1.xml
index 60724d8..f215844 100644
--- a/examples/camel-example-spring-xquery/src/data/message1.xml
+++ b/examples/camel-example-spring-xquery/src/data/message1.xml
@@ -1,20 +1,4 @@
 <?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.
--->
 <person user="james">
   <firstName>James</firstName>
   <lastName>Strachan</lastName>
diff --git a/examples/camel-example-spring/src/data/message1.xml b/examples/camel-example-spring/src/data/message1.xml
index 60724d8..f215844 100644
--- a/examples/camel-example-spring/src/data/message1.xml
+++ b/examples/camel-example-spring/src/data/message1.xml
@@ -1,20 +1,4 @@
 <?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.
--->
 <person user="james">
   <firstName>James</firstName>
   <lastName>Strachan</lastName>
diff --git a/examples/camel-example-spring/src/data/message2.xml b/examples/camel-example-spring/src/data/message2.xml
index 6a0e717..5caa192 100644
--- a/examples/camel-example-spring/src/data/message2.xml
+++ b/examples/camel-example-spring/src/data/message2.xml
@@ -1,20 +1,4 @@
 <?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.
--->
 <person user="hiram">
   <firstName>Hiram</firstName>
   <lastName>Chirino</lastName>
diff --git a/examples/camel-example-ssh/README.txt b/examples/camel-example-ssh/README.txt
index c10a562..44847e1 100644
--- a/examples/camel-example-ssh/README.txt
+++ b/examples/camel-example-ssh/README.txt
@@ -28,8 +28,9 @@
 If using Apache Karaf / Apache ServiceMix you can install this example
 from the shell
 
-  > features:addurl mvn:org.apache.camel/camel-example-ssh/<camel version>/xml/features
-  > features:install camel-example-ssh
+  features:chooseurl camel <camel version>
+  features:addurl mvn:org.apache.camel/camel-example-ssh/<camel version>/xml/features
+  features:install camel-example-ssh
 
 If you hit any problems please let us know on the Camel Forums
   http://camel.apache.org/discussion-forums.html
diff --git a/examples/camel-example-tracer/README.txt b/examples/camel-example-tracer/README.txt
index af519bd..f3e6bf4 100644
--- a/examples/camel-example-tracer/README.txt
+++ b/examples/camel-example-tracer/README.txt
@@ -13,18 +13,6 @@
 To run the example with Maven, type
   mvn camel:run
 
-In the HSQL Database Explorer type
-  select * from camel_messagetraced
-
-to see the trace events of the Exchanges. Notice how the Exchange correlates with
-fromNode/toNode so you exactly can see how a given Exchange was routed in Camel.
-
-Using the query:
-  select shortExchangeId, previousNode, toNode, body from camel_messagetraced order by id
-
-is a bit more easier to read as it uses the fields we are most interested in to see how Exchanges
-was routed in Camel.
-
 In the console you can enter some words separated with space. Try to enter:
   nice beer
   beer whiskey
diff --git a/parent/pom.xml b/parent/pom.xml
index 16f722c5..17edabd 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -37,7 +37,7 @@
     <abdera-version>1.1.3</abdera-version>
     <!-- Note that activemq dependency is only used for testing! -->
     <activemq-version>5.8.0</activemq-version>
-    <ahc-version>1.7.12</ahc-version>
+    <ahc-version>1.7.13</ahc-version>
     <ant-bundle-version>1.7.0_6</ant-bundle-version>
     <antlr-bundle-version>3.4_1</antlr-bundle-version>
     <antlr-runtime-bundle-version>3.4_2</antlr-runtime-bundle-version>
@@ -154,7 +154,7 @@
     <google-gdata-version>1.41.5.w1</google-gdata-version>
     <google-gdata-bundle-version>1.41.1_1</google-gdata-bundle-version>
     <google-guava-version>14.0.1</google-guava-version>
-    <groovy-version>2.1.1</groovy-version>
+    <groovy-version>2.1.3</groovy-version>
     <gson-version>2.2.2</gson-version>
     <guice-bundle-version>3.0_1</guice-bundle-version>
     <guice-version>3.0</guice-version>
@@ -197,6 +197,8 @@
     <jaxen-version>1.1.4</jaxen-version>
     <jboss-javaee-6-version>1.0.0.Final</jboss-javaee-6-version>
     <jclouds-version>1.5.7</jclouds-version>
+    <!-- jclouds must use this guava version -->
+    <jclouds-google-guava-version>13.0.1</jclouds-google-guava-version>
     <jcr-version>2.0</jcr-version>
     <jdom-bundle-version>1.1_4</jdom-bundle-version>
     <jdom-version>1.1.3</jdom-version>
@@ -1546,6 +1548,11 @@
         <version>${spring-version}</version>
       </dependency>
       <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-expression</artifactId>
+        <version>${spring-version}</version>
+      </dependency>
+      <dependency>
         <groupId>org.springframework.osgi</groupId>
         <artifactId>spring-osgi-core</artifactId>
         <version>${spring-osgi-version}</version>
diff --git a/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/cxf/blueprint/CxfRsBlueprintRouter.xml b/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/cxf/blueprint/CxfRsBlueprintRouter.xml
index 7ce0cde..a55c5a7 100644
--- a/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/cxf/blueprint/CxfRsBlueprintRouter.xml
+++ b/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/cxf/blueprint/CxfRsBlueprintRouter.xml
@@ -25,11 +25,19 @@
    
   <!-- Defined the server endpoint to create the cxf-rs consumer --> 
   <camelcxf:rsServer id="rsServer" address="http://localhost:9000/route"
-    serviceClass="org.apache.camel.itest.osgi.cxf.jaxrs.testbean.CustomerService" />
+    serviceClass="org.apache.camel.itest.osgi.cxf.jaxrs.testbean.CustomerService">
+     <camelcxf:features>
+         <bean class="org.apache.cxf.feature.LoggingFeature"/>
+     </camelcxf:features> 
+  </camelcxf:rsServer>
 
   <!-- Defined the client endpoint to create the cxf-rs consumer -->
   <camelcxf:rsClient id="rsClient" address="http://localhost:9002/rest"
-    serviceClass="org.apache.camel.itest.osgi.cxf.jaxrs.testbean.CustomerService"/>
+    serviceClass="org.apache.camel.itest.osgi.cxf.jaxrs.testbean.CustomerService">
+    <camelcxf:features>
+         <bean class="org.apache.cxf.feature.LoggingFeature"/>
+     </camelcxf:features> 
+  </camelcxf:rsClient>
   
   <!-- The camel route context -->
   <camel:camelContext>
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/JettyHttpTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/JettyHttpTest.java
index 3e18e57..6f8b614 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/JettyHttpTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/JettyHttpTest.java
@@ -23,9 +23,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
-/**
- * @version 
- */
 public class JettyHttpTest extends CamelTestSupport {
 
     private String targetProducerUri = "http://localhost:8542/someservice?bridgeEndpoint=true&throwExceptionOnFailure=false";
@@ -60,7 +57,7 @@
                 from(targetConsumerUri)
                     .process(new Processor() {
                         public void process(Exchange exchange) throws Exception {
-                            String path = exchange.getIn().getHeader(Exchange.HTTP_PATH, String.class);
+                            String path = exchange.getIn().getHeader(Exchange.HTTP_URI, String.class);
                             exchange.getOut().setBody("Hi! " + path);
                         }   
                     });
diff --git a/tooling/archetypes/camel-archetype-blueprint/src/main/resources/archetype-resources/ReadMe.txt b/tooling/archetypes/camel-archetype-blueprint/src/main/resources/archetype-resources/ReadMe.txt
index 007f894..85f50e6 100644
--- a/tooling/archetypes/camel-archetype-blueprint/src/main/resources/archetype-resources/ReadMe.txt
+++ b/tooling/archetypes/camel-archetype-blueprint/src/main/resources/archetype-resources/ReadMe.txt
@@ -5,14 +5,14 @@
 
     mvn install
 
-To run the example you can execute the following Maven goal
+To run the project you can execute the following Maven goal
 
     mvn camel:run
 
-To deploy the example in OSGi. For example using Apache ServiceMix
-or Apache Karaf. You will run the following command from its shell:
+To deploy the project in OSGi. For example using Apache ServiceMix
+or Apache Karaf. You can run the following command from its shell:
 
-    osgi:install -s mvn:${groupId}/${artifactId}
+    osgi:install -s mvn:${groupId}/${artifactId}/${version}
 
 For more help see the Apache Camel documentation
 
diff --git a/tooling/archetypes/camel-archetype-component-scala/src/main/resources/archetype-resources/ReadMe.txt b/tooling/archetypes/camel-archetype-component-scala/src/main/resources/archetype-resources/ReadMe.txt
index 00317a9..5fb6f5a 100644
--- a/tooling/archetypes/camel-archetype-component-scala/src/main/resources/archetype-resources/ReadMe.txt
+++ b/tooling/archetypes/camel-archetype-component-scala/src/main/resources/archetype-resources/ReadMe.txt
@@ -1,6 +1,7 @@
 Camel Component Project
-====================
-This Project is a template of a Camel component using Scala.
+=======================
+
+This project is a template of a Camel component using Scala.
 
 To build this project use
 
@@ -10,6 +11,13 @@
 
     http://camel.apache.org/writing-components.html
 
-Scala should only be used for Scala-related components such as Akka or Play framework.
-See http://camel.465427.n5.nabble.com/Create-a-new-Camel-component-via-Scala-Component-Archetype-td5708543.html#a5711675
+
+Notice:
+
+We favor writing Camel components in plain Java, which allows all people to consume and use the components easily.
+Writing components in Scala is intended in situations when being used together with other Scala libraries such as Akka, Play, etc.
+
+See discussion at:
+
+    http://camel.465427.n5.nabble.com/Create-a-new-Camel-component-via-Scala-Component-Archetype-td5708543.html#a5711675
 
diff --git a/tooling/archetypes/camel-archetype-component/src/main/resources/archetype-resources/ReadMe.txt b/tooling/archetypes/camel-archetype-component/src/main/resources/archetype-resources/ReadMe.txt
index 6783605..f327e1e 100644
--- a/tooling/archetypes/camel-archetype-component/src/main/resources/archetype-resources/ReadMe.txt
+++ b/tooling/archetypes/camel-archetype-component/src/main/resources/archetype-resources/ReadMe.txt
@@ -1,7 +1,7 @@
 Camel Component Project
 =======================
 
-This Project is a template of a Camel component.
+This project is a template of a Camel component.
 
 To build this project use
 
diff --git a/tooling/archetypes/camel-archetype-dataformat/src/main/resources/archetype-resources/ReadMe.txt b/tooling/archetypes/camel-archetype-dataformat/src/main/resources/archetype-resources/ReadMe.txt
index 63baeee..65be3fa 100644
--- a/tooling/archetypes/camel-archetype-dataformat/src/main/resources/archetype-resources/ReadMe.txt
+++ b/tooling/archetypes/camel-archetype-dataformat/src/main/resources/archetype-resources/ReadMe.txt
@@ -1,7 +1,7 @@
 Camel Data Format Project
 =========================
 
-This Project is a template of a Camel data format.
+This project is a template of a Camel data format.
 
 To build this project use
 
@@ -9,5 +9,5 @@
 
 For more help see the Apache Camel documentation:
 
-    http://camel.apache.org/
+    http://camel.apache.org/writing-components.html
     
diff --git a/tooling/archetypes/camel-archetype-groovy/src/main/resources-filtered/META-INF/maven/archetype-metadata.xml b/tooling/archetypes/camel-archetype-groovy/src/main/resources-filtered/META-INF/maven/archetype-metadata.xml
index 67b9954..7d806d7 100644
--- a/tooling/archetypes/camel-archetype-groovy/src/main/resources-filtered/META-INF/maven/archetype-metadata.xml
+++ b/tooling/archetypes/camel-archetype-groovy/src/main/resources-filtered/META-INF/maven/archetype-metadata.xml
@@ -24,6 +24,9 @@
     <requiredProperty key="camel-version">
       <defaultValue>${project.version}</defaultValue>
     </requiredProperty>
+    <requiredProperty key="exec-maven-plugin-version">
+      <defaultValue>${exec-maven-plugin-version}</defaultValue>
+    </requiredProperty>
     <requiredProperty key="log4j-version">
       <defaultValue>${log4j-version}</defaultValue>
     </requiredProperty>
diff --git a/tooling/archetypes/camel-archetype-groovy/src/main/resources/archetype-resources/ReadMe.txt b/tooling/archetypes/camel-archetype-groovy/src/main/resources/archetype-resources/ReadMe.txt
index 55b753a..0e40aff 100644
--- a/tooling/archetypes/camel-archetype-groovy/src/main/resources/archetype-resources/ReadMe.txt
+++ b/tooling/archetypes/camel-archetype-groovy/src/main/resources/archetype-resources/ReadMe.txt
@@ -5,14 +5,10 @@
 
     mvn install
 
-To run this example from within Maven use
+To run this project from within Maven use
 
     mvn exec:java
 
-From a web browser access the example using
-
-    http://localhost:8080
-
 For more help see the Apache Camel documentation
 
     http://camel.apache.org/
diff --git a/tooling/archetypes/camel-archetype-groovy/src/main/resources/archetype-resources/pom.xml b/tooling/archetypes/camel-archetype-groovy/src/main/resources/archetype-resources/pom.xml
index 8794558..ee8233f 100644
--- a/tooling/archetypes/camel-archetype-groovy/src/main/resources/archetype-resources/pom.xml
+++ b/tooling/archetypes/camel-archetype-groovy/src/main/resources/archetype-resources/pom.xml
@@ -128,6 +128,7 @@
 			<plugin>
 				<groupId>org.codehaus.mojo</groupId>
 				<artifactId>exec-maven-plugin</artifactId>
+				<version>${exec-maven-plugin-version}</version>
 				<configuration>
 					<mainClass>${package}.MainApp</mainClass>
 					<includePluginDependencies>false</includePluginDependencies>
diff --git a/tooling/archetypes/camel-archetype-java/src/main/resources-filtered/META-INF/maven/archetype-metadata.xml b/tooling/archetypes/camel-archetype-java/src/main/resources-filtered/META-INF/maven/archetype-metadata.xml
index 3016046..99401b8 100644
--- a/tooling/archetypes/camel-archetype-java/src/main/resources-filtered/META-INF/maven/archetype-metadata.xml
+++ b/tooling/archetypes/camel-archetype-java/src/main/resources-filtered/META-INF/maven/archetype-metadata.xml
@@ -24,6 +24,9 @@
     <requiredProperty key="camel-version">
       <defaultValue>${project.version}</defaultValue>
     </requiredProperty>
+    <requiredProperty key="exec-maven-plugin-version">
+      <defaultValue>${exec-maven-plugin-version}</defaultValue>
+    </requiredProperty>
     <requiredProperty key="log4j-version">
       <defaultValue>${log4j-version}</defaultValue>
     </requiredProperty>
diff --git a/tooling/archetypes/camel-archetype-java/src/main/resources/archetype-resources/ReadMe.txt b/tooling/archetypes/camel-archetype-java/src/main/resources/archetype-resources/ReadMe.txt
index 2487d6e..130f134 100644
--- a/tooling/archetypes/camel-archetype-java/src/main/resources/archetype-resources/ReadMe.txt
+++ b/tooling/archetypes/camel-archetype-java/src/main/resources/archetype-resources/ReadMe.txt
@@ -5,7 +5,7 @@
 
     mvn install
 
-To run this example from within Maven use
+To run this project from within Maven use
 
     mvn exec:java
 
diff --git a/tooling/archetypes/camel-archetype-java/src/main/resources/archetype-resources/pom.xml b/tooling/archetypes/camel-archetype-java/src/main/resources/archetype-resources/pom.xml
index d201db5..2304077 100644
--- a/tooling/archetypes/camel-archetype-java/src/main/resources/archetype-resources/pom.xml
+++ b/tooling/archetypes/camel-archetype-java/src/main/resources/archetype-resources/pom.xml
@@ -90,6 +90,7 @@
       <plugin>
         <groupId>org.codehaus.mojo</groupId>
         <artifactId>exec-maven-plugin</artifactId>
+        <version>${exec-maven-plugin-version}</version>
         <configuration>
             <mainClass>${package}.MainApp</mainClass>
             <includePluginDependencies>false</includePluginDependencies>
diff --git a/tooling/archetypes/camel-archetype-java/src/main/resources/archetype-resources/src/main/java/MyRouteBuilder.java b/tooling/archetypes/camel-archetype-java/src/main/resources/archetype-resources/src/main/java/MyRouteBuilder.java
index 86aa5b4..16c191ef 100644
--- a/tooling/archetypes/camel-archetype-java/src/main/resources/archetype-resources/src/main/java/MyRouteBuilder.java
+++ b/tooling/archetypes/camel-archetype-java/src/main/resources/archetype-resources/src/main/java/MyRouteBuilder.java
@@ -34,8 +34,10 @@
         from("file:src/data?noop=true")
             .choice()
                 .when(xpath("/person/city = 'London'"))
+                    .log("UK message")
                     .to("file:target/messages/uk")
                 .otherwise()
+                    .log("Other message")
                     .to("file:target/messages/others");
     }
 
diff --git a/tooling/archetypes/camel-archetype-scala/src/main/resources/archetype-resources/ReadMe.txt b/tooling/archetypes/camel-archetype-scala/src/main/resources/archetype-resources/ReadMe.txt
index dd27a9d..5806db3 100644
--- a/tooling/archetypes/camel-archetype-scala/src/main/resources/archetype-resources/ReadMe.txt
+++ b/tooling/archetypes/camel-archetype-scala/src/main/resources/archetype-resources/ReadMe.txt
@@ -5,7 +5,7 @@
 
     mvn install
 
-To run this example
+To run this project
 
     mvn exec:java
     
diff --git a/tooling/archetypes/camel-archetype-spring-dm/src/main/resources/archetype-resources/ReadMe.txt b/tooling/archetypes/camel-archetype-spring-dm/src/main/resources/archetype-resources/ReadMe.txt
index aea5809..5bf3080 100644
--- a/tooling/archetypes/camel-archetype-spring-dm/src/main/resources/archetype-resources/ReadMe.txt
+++ b/tooling/archetypes/camel-archetype-spring-dm/src/main/resources/archetype-resources/ReadMe.txt
@@ -5,15 +5,14 @@
 
     mvn install
 
-You can run this example from the command line using
-the following Maven goal:
+You can run this project using he following Maven goal:
 
     mvn camel:run
 
-To deploy the example in OSGi. For example using Apache ServiceMix
+To deploy the project in OSGi. For example using Apache ServiceMix
 or Apache Karaf. You will run the following command from its shell:
 
-    osgi:install -s mvn:${groupId}/${artifactId}
+    osgi:install -s mvn:${groupId}/${artifactId}/${version}
 
 For more help see the Apache Camel documentation
 
diff --git a/tooling/archetypes/camel-archetype-spring/src/main/resources/archetype-resources/ReadMe.txt b/tooling/archetypes/camel-archetype-spring/src/main/resources/archetype-resources/ReadMe.txt
index 7d3750a..3d20ae8 100644
--- a/tooling/archetypes/camel-archetype-spring/src/main/resources/archetype-resources/ReadMe.txt
+++ b/tooling/archetypes/camel-archetype-spring/src/main/resources/archetype-resources/ReadMe.txt
@@ -5,8 +5,7 @@
 
     mvn install
 
-To run this example either embed the jar inside Spring
-or to run the route from within Maven try
+To run this project with Maven use
 
     mvn camel:run