diff --git a/Readme.md b/Readme.md
index 22c95cd..afd8450 100644
--- a/Readme.md
+++ b/Readme.md
@@ -7,7 +7,7 @@
 ## Modules
 
 * [common - Common services like intents and HTTPService support](common).
-* [provider-ws - SOAP transport](provider-ws) 
+* [provider-ws - SOAP transport](provider-ws)
 * [provider-rs - REST transport](provider-rs)
 * [decorator - Support for exporting existing services](decorator)
 
@@ -16,7 +16,7 @@
 
 ## Intents
 
-Intents allow a service to leverage CXF extensions like features. A service can list the named intents it requires. 
+Intents allow a service to leverage CXF extensions like features. A service can list the named intents it requires.
 It will then only be exported / imported once all the intents are available. This allows for example security restrictions or logging.
 For more information see [common module](common).
 
diff --git a/buildtools/cxf-checkstyle.xml b/buildtools/cxf-checkstyle.xml
index ce59e05..36dd94b 100644
--- a/buildtools/cxf-checkstyle.xml
+++ b/buildtools/cxf-checkstyle.xml
@@ -22,7 +22,7 @@
 	"http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
 
 <!--
-	Checks to make sure the code meets the CXF coding guidelines which 
+	Checks to make sure the code meets the CXF coding guidelines which
 	are similar to the Sun guidelines at:
 	http://java.sun.com/docs/codeconv/index.html
 
@@ -210,7 +210,7 @@
 		<module name="VisibilityModifier">
 			<property name="protectedAllowed" value="true" />
 			<property name="packageAllowed" value="true" />
-			<!-- this is needed for the resource injection unit tests.  It will removed 
+			<!-- this is needed for the resource injection unit tests.  It will removed
 				when private member inject is supported.
 			-->
 			<property name="publicMemberPattern" value="resource[12].*" />
@@ -231,7 +231,7 @@
 
 		<!-- Miscellaneous other checks.                   -->
 		<!-- See http://checkstyle.sf.net/config_misc.html -->
-		<!-- 
+		<!--
 			<module name="ArrayTypeStyle"/>
 			<module name="FinalParameters"/>
 		-->
diff --git a/common/Readme.md b/common/Readme.md
index fe2959d..2d6ccf3 100644
--- a/common/Readme.md
+++ b/common/Readme.md
@@ -7,7 +7,7 @@
 In case a custom http context is used the providers will register a custom servlet.
 Besides this the HttpServiceManager also handles the creation of a default address if none is given and the conversion from the relative address specified on the service property to a fully qualified address.
 
-Config pid `org.apache.cxf.dosgi.http` 
+Config pid `org.apache.cxf.dosgi.http`
 
 Key             | Default | Description
 ----------------|---------|------------
diff --git a/common/src/main/java/org/apache/cxf/dosgi/common/intent/impl/IntentManagerImpl.java b/common/src/main/java/org/apache/cxf/dosgi/common/intent/impl/IntentManagerImpl.java
index f1fd5ce..c3f6cb8 100644
--- a/common/src/main/java/org/apache/cxf/dosgi/common/intent/impl/IntentManagerImpl.java
+++ b/common/src/main/java/org/apache/cxf/dosgi/common/intent/impl/IntentManagerImpl.java
@@ -108,7 +108,7 @@
                     List<Object> curIntents = ((Callable<List<Object>>)intent).call();
                     intents.addAll(curIntents);
                 } catch (Exception e) {
-                    throw new RuntimeException(e); 
+                    throw new RuntimeException(e);
                 }
             } else if (intent instanceof IntentsProvider) {
                 try {
@@ -116,7 +116,7 @@
                     List<?> curIntents = provider.getIntents();
                     intents.addAll(curIntents);
                 } catch (Exception e) {
-                    throw new RuntimeException(e); 
+                    throw new RuntimeException(e);
                 }
             } else {
                 intents.add(intent);
diff --git a/decorator/src/main/java/org/apache/cxf/dosgi/dsw/decorator/ServiceDecoratorBundleListener.java b/decorator/src/main/java/org/apache/cxf/dosgi/dsw/decorator/ServiceDecoratorBundleListener.java
index e463d66..c05cc8e 100644
--- a/decorator/src/main/java/org/apache/cxf/dosgi/dsw/decorator/ServiceDecoratorBundleListener.java
+++ b/decorator/src/main/java/org/apache/cxf/dosgi/dsw/decorator/ServiceDecoratorBundleListener.java
@@ -23,7 +23,7 @@
 
 public class ServiceDecoratorBundleListener implements BundleListener {
     /**
-     * 
+     *
      */
     private final ServiceDecoratorImpl serviceDecorator;
 
diff --git a/decorator/src/test/java/org/apache/cxf/dosgi/dsw/decorator/ServiceDecoratorImplTest.java b/decorator/src/test/java/org/apache/cxf/dosgi/dsw/decorator/ServiceDecoratorImplTest.java
index c50997e..1567d99 100644
--- a/decorator/src/test/java/org/apache/cxf/dosgi/dsw/decorator/ServiceDecoratorImplTest.java
+++ b/decorator/src/test/java/org/apache/cxf/dosgi/dsw/decorator/ServiceDecoratorImplTest.java
@@ -155,7 +155,7 @@
         assertDecorate(serviceProps, EMPTY, RES_SD_1);
     }
 
-    private void assertDecorate(final Map<String, Object> serviceProps, 
+    private void assertDecorate(final Map<String, Object> serviceProps,
                                 Map<String, Object> expected, URL... resources) {
         Map<String, Object> actual = testDecorate(serviceProps, resources);
         assertEquals(expected, actual);
diff --git a/distribution/Readme.md b/distribution/Readme.md
index e0ce8f9..9bee73a 100644
--- a/distribution/Readme.md
+++ b/distribution/Readme.md
@@ -2,7 +2,7 @@
 
 ## Apache karaf features
 
-Installing CXF DOSGi in apache karaf is very easy. 
+Installing CXF DOSGi in apache karaf is very easy.
 
 ```
 feature:repo-add cxf-dosgi 2.0.0
@@ -19,13 +19,13 @@
 
 Any example for this is the [samples/repository](../samples/repository) module. This pom refers to the Aries RSA and CXF DOSGi repository poms and adds other bundles needed to create a complete OSGi deployment.
 
-The [SOAP sample](../samples/soap) contains a bndrun file to describe the setup of the SOAP sample. 
+The [SOAP sample](../samples/soap) contains a bndrun file to describe the setup of the SOAP sample.
 
 ## Multi-Bundle
 
 Provides an archive of the dependencies of CXF DOSGi as well as configs for felix and equinox to start the bundles.
 
-This distribution is deprecated as it is quite tedious to create an automated build for your own application based on the archive. 
+This distribution is deprecated as it is quite tedious to create an automated build for your own application based on the archive.
 
 ## Source
 
diff --git a/itests/multi-bundle/pom.xml b/itests/multi-bundle/pom.xml
index 55a9b9b..e8c7dae 100644
--- a/itests/multi-bundle/pom.xml
+++ b/itests/multi-bundle/pom.xml
@@ -37,7 +37,7 @@
         <topDirectoryLocation>../..</topDirectoryLocation>
     </properties>
 
-    <!-- 
+    <!--
         When changing code make sure to run the distro before testing
         or you will be testing the old code.
      -->
@@ -89,12 +89,12 @@
             <version>2.6.1</version>
         </dependency>
 
-<!-- 
+        <!--
         <dependency>
             <groupId>org.eclipse.platform</groupId>
             <artifactId>org.eclipse.osgi</artifactId>
         </dependency>
-         --> 
+         -->
         <dependency>
             <groupId>org.apache.felix</groupId>
             <artifactId>org.apache.felix.framework</artifactId>
diff --git a/itests/multi-bundle/src/test/java/org/apache/cxf/dosgi/itests/multi/TestExportService.java b/itests/multi-bundle/src/test/java/org/apache/cxf/dosgi/itests/multi/TestExportService.java
index 69bccb4..ce6cbe0 100644
--- a/itests/multi-bundle/src/test/java/org/apache/cxf/dosgi/itests/multi/TestExportService.java
+++ b/itests/multi-bundle/src/test/java/org/apache/cxf/dosgi/itests/multi/TestExportService.java
@@ -82,7 +82,7 @@
         waitWebPage(REST_SERVICE_URI);
         final WebClient client = WebClient.create(REST_SERVICE_URI + "/1");
         client.accept(MediaType.APPLICATION_XML_TYPE);
-        org.apache.cxf.dosgi.samples.rest.Task task = tryTo("Call REST Resource", 
+        org.apache.cxf.dosgi.samples.rest.Task task = tryTo("Call REST Resource",
                                                             new Callable<org.apache.cxf.dosgi.samples.rest.Task>() {
             @Override
             public org.apache.cxf.dosgi.samples.rest.Task call() {
diff --git a/provider-rs/src/main/java/org/apache/cxf/dosgi/dsw/handlers/rest/RsProvider.java b/provider-rs/src/main/java/org/apache/cxf/dosgi/dsw/handlers/rest/RsProvider.java
index 6cf8ff4..1f8693a 100644
--- a/provider-rs/src/main/java/org/apache/cxf/dosgi/dsw/handlers/rest/RsProvider.java
+++ b/provider-rs/src/main/java/org/apache/cxf/dosgi/dsw/handlers/rest/RsProvider.java
@@ -108,7 +108,7 @@
     private Object createJaxrsProxy(String address,
                                       Class<?> iClass,
                                       ClassLoader loader,
-                                      EndpointDescription endpoint, 
+                                      EndpointDescription endpoint,
                                       List<Object> intents) {
         JAXRSClientFactoryBean factory = new JAXRSClientFactoryBean();
         factory.setAddress(address);
@@ -144,7 +144,7 @@
         Bus bus = createBus(sid, callingContext, contextRoot, endpointProps);
         LOG.info("Creating JAXRS endpoint for " + iClass.getName() + " with address " + address);
 
-        JAXRSServerFactoryBean factory = createServerFactory(callingContext, endpointProps, 
+        JAXRSServerFactoryBean factory = createServerFactory(callingContext, endpointProps,
                                                              iClass, serviceBean, address, bus);
         applyIntents(intents, factory);
         String completeEndpointAddress = httpServiceManager.getAbsoluteAddress(contextRoot, address);
@@ -178,11 +178,11 @@
 
     private boolean isProvider(Object intent) {
         return intent.getClass().getAnnotation(Provider.class) != null //
-            || (intent instanceof ExceptionMapper) // 
+            || (intent instanceof ExceptionMapper) //
             || (intent instanceof MessageBodyReader) //
             || (intent instanceof MessageBodyWriter) //
             || (intent instanceof ContextResolver) //
-            || (intent instanceof ContextProvider); 
+            || (intent instanceof ContextProvider);
     }
 
     private Endpoint createServerFromFactory(JAXRSServerFactoryBean factory,
diff --git a/provider-rs/src/test/java/org/apache/cxf/dosgi/dsw/handlers/rest/simple/RsProviderTest.java b/provider-rs/src/test/java/org/apache/cxf/dosgi/dsw/handlers/rest/simple/RsProviderTest.java
index 379a880..4395a2f 100644
--- a/provider-rs/src/test/java/org/apache/cxf/dosgi/dsw/handlers/rest/simple/RsProviderTest.java
+++ b/provider-rs/src/test/java/org/apache/cxf/dosgi/dsw/handlers/rest/simple/RsProviderTest.java
@@ -65,7 +65,7 @@
             Task task1 = WebClient.create(serviceAddress).path("/task").get(Task.class);
             Assert.assertEquals("test", task1.getName());
 
-            TaskService proxy = (TaskService)rsProvider.importEndpoint(TaskService.class.getClassLoader(), 
+            TaskService proxy = (TaskService)rsProvider.importEndpoint(TaskService.class.getClassLoader(),
                                                                        callingContext, ifaces, endpoint.description());
             Task task = proxy.getTask();
             Assert.assertEquals("test", task.getName());
diff --git a/provider-ws/src/main/java/org/apache/cxf/dosgi/dsw/handlers/ws/WsProvider.java b/provider-ws/src/main/java/org/apache/cxf/dosgi/dsw/handlers/ws/WsProvider.java
index 956766c..7b3b6a4 100644
--- a/provider-ws/src/main/java/org/apache/cxf/dosgi/dsw/handlers/ws/WsProvider.java
+++ b/provider-ws/src/main/java/org/apache/cxf/dosgi/dsw/handlers/ws/WsProvider.java
@@ -63,7 +63,7 @@
 @Component(configurationPid = "cxf-dsw", property = //
 {//
  REMOTE_CONFIGS_SUPPORTED + "=" + WsConstants.WS_CONFIG_TYPE,
- REMOTE_INTENTS_SUPPORTED + "=" 
+ REMOTE_INTENTS_SUPPORTED + "="
 })
 public class WsProvider extends BaseDistributionProvider implements DistributionProvider {
 
@@ -137,7 +137,7 @@
     }
 
     private BindingConfiguration copy(BindingConfiguration bindingCfg) {
-        return bindingCfg instanceof SoapBindingConfiguration 
+        return bindingCfg instanceof SoapBindingConfiguration
             ? copy((SoapBindingConfiguration)bindingCfg) : bindingCfg;
     }
 
diff --git a/provider-ws/src/main/java/org/apache/cxf/dosgi/dsw/handlers/ws/WsdlSupport.java b/provider-ws/src/main/java/org/apache/cxf/dosgi/dsw/handlers/ws/WsdlSupport.java
index 83b8e8e..b7ad285 100644
--- a/provider-ws/src/main/java/org/apache/cxf/dosgi/dsw/handlers/ws/WsdlSupport.java
+++ b/provider-ws/src/main/java/org/apache/cxf/dosgi/dsw/handlers/ws/WsdlSupport.java
@@ -34,7 +34,7 @@
     }
 
     public static void setWsdlProperties(AbstractWSDLBasedEndpointFactory factory, //
-                                         BundleContext context, // 
+                                         BundleContext context, //
                                          Map<String, Object> sd) {
         String location = PropertyHelper.getProperty(sd, WsConstants.WS_WSDL_LOCATION);
         if (location != null) {
@@ -42,7 +42,7 @@
             if (wsdlURL != null) {
                 factory.setWsdlURL(wsdlURL.toString());
             }
-            QName serviceName = getServiceQName(null, sd, 
+            QName serviceName = getServiceQName(null, sd,
                                                 WsConstants.WS_WSDL_SERVICE_NAMESPACE,
                                                 WsConstants.WS_WSDL_SERVICE_NAME);
             if (serviceName != null) {
diff --git a/provider-ws/src/test/java/org/apache/cxf/dosgi/dsw/handlers/ws/PojoConfigurationTypeHandlerTest.java b/provider-ws/src/test/java/org/apache/cxf/dosgi/dsw/handlers/ws/PojoConfigurationTypeHandlerTest.java
index 3308093..4d03a23 100644
--- a/provider-ws/src/test/java/org/apache/cxf/dosgi/dsw/handlers/ws/PojoConfigurationTypeHandlerTest.java
+++ b/provider-ws/src/test/java/org/apache/cxf/dosgi/dsw/handlers/ws/PojoConfigurationTypeHandlerTest.java
@@ -344,9 +344,9 @@
         sd.put(org.osgi.framework.Constants.SERVICE_ID, 42);
         EndpointHelper.addObjectClass(sd, exportedInterfaces);
         List<String> intents = Arrays.asList("my_intent", "your_intent");
-        EndpointDescription epd = pch.createEndpointDesc(sd, 
-                                                         new String[] {"org.apache.cxf.ws"}, 
-                                                         "http://localhost:12345", 
+        EndpointDescription epd = pch.createEndpointDesc(sd,
+                                                         new String[] {"org.apache.cxf.ws"},
+                                                         "http://localhost:12345",
                                                          intents);
 
         assertEquals("http://localhost:12345", epd.getId());
diff --git a/release_notes.md b/release_notes.md
index 23f7ec5..9d3d17a 100644
--- a/release_notes.md
+++ b/release_notes.md
@@ -30,7 +30,7 @@
 * New Feature
     * [DOSGI-261] - Sample for rest with jackson provider
     * [DOSGI-266] - Support for org.apache.cxf.jaxrs.ext.ContextProvider
-    * [DOSGI-270] - Create sample for swagger documentation 
+    * [DOSGI-270] - Create sample for swagger documentation
 
 
 2.1.0
@@ -42,7 +42,7 @@
 * Improvement
     * [DOSGI-251] - Allow to export services with less service properties
     * [DOSGI-256] - ContextResolver intents should be registered as providers
-    * [DOSGI-257] - Allow to set bus properties 
+    * [DOSGI-257] - Allow to set bus properties
 
 
 2.0.0
@@ -91,7 +91,7 @@
     * [DOSGI-211] - Support SOAP over JMS in DOSGI
 
 * Task
-    * [DOSGI-194] - Decide how DOSGi needs to handle service.exported.interfaces with multiple values 
+    * [DOSGI-194] - Decide how DOSGi needs to handle service.exported.interfaces with multiple values
 
 
 1.8.0
@@ -108,7 +108,7 @@
 
 * New Feature
     * [DOSGI-230] - Create TCP provider
-    * [DOSGI-231] - Create ExportPolicy SPI    
+    * [DOSGI-231] - Create ExportPolicy SPI
 
 
 1.7.0
@@ -120,7 +120,7 @@
     * [DOSGI-216] - ZookeeperStarter restarts ZooKeeper too easily
 
 * Improvement
-    * [DOSGI-220] - Upgrade to cxf 3.1.1 
+    * [DOSGI-220] - Upgrade to cxf 3.1.1
 
 
 1.6.0
@@ -198,7 +198,7 @@
     * [DOSGI-10] - Spring schema handling (intents) doesn't work properly
     * for the single-bundle case
     * [DOSGI-18] - RESTful Proxies can not be created in multibundle DOSGI
-    * distributions 
+    * distributions
     * [DOSGI-63] - The discovery can be used be used before the connection
     * to the server is completely established
     * [DOSGI-69] - CXF-DOSGi requires internet access when reading XML
@@ -208,7 +208,7 @@
     * stop
     * [DOSGI-110] - Unable to export multiple services
     * [DOSGI-111] - DOSGi bundle attempts to load WSDL using wrong bundle in
-    * WSDL-first configuration 
+    * WSDL-first configuration
     * [DOSGI-113] - Integration with pax-logging not possible
     * [DOSGI-114] - RemoteServiceAdmin is not available warnings in DOSGi
     * 1.3
@@ -228,7 +228,7 @@
     * an Endpoint is already imported
     * [DOSGI-142] - Upgrade CXF to 2.7.0
     * [DOSGI-145] - Multiple services using HTTP Service and published from
-    * the same bundle do not work 
+    * the same bundle do not work
     * [DOSGI-150] - Update to Java 1.6
     * [DOSGI-153] - Error starting greeter sample in karaf 2.3.0 in aegis
     * setup: ExceptionInInitializerError ... failed to create an
diff --git a/samples/Readme.md b/samples/Readme.md
index fcaf3e2..e3b6f0e 100644
--- a/samples/Readme.md
+++ b/samples/Readme.md
@@ -7,7 +7,7 @@
 
 The SOAP example also provides a bndrun file for bndtools that allows to directly start/debug the service from Eclipse and export it into a runnable jar.
 
-## Checkout and Build 
+## Checkout and Build
 
 ```
 git clone git@github.com:apache/cxf-dosgi.git
@@ -28,11 +28,11 @@
 ## Preparing Apache Karaf
 
 [Download Apache karaf 4.x](http://karaf.apache.org/download.html). Extract the archive and
-start Apache Karaf using `bin/karaf`  
+start Apache Karaf using `bin/karaf`
 
 ## Examples
 
 * [soap - Publish and Consume JAXWS SOAP services](soap)
-* [rest - Publish and Consume REST services] (rest) 
+* [rest - Publish and Consume REST services] (rest)
 * [security-filter - Custom HTTP filter] (security filter)
 * [ssl - SSL support and client cert based auth] (ssl)
diff --git a/samples/rest/README.md b/samples/rest/README.md
index d05989a..9a06d01 100644
--- a/samples/rest/README.md
+++ b/samples/rest/README.md
@@ -6,12 +6,12 @@
 
 The impl module implements the TaskService using a simple HashMap internally. It allows to manage Task objects which represent items of a to do list.
 
- 
+
 ## Installation
 
 Unpack karaf 4 into a server and client directory.
 
-### Install server 
+### Install server
 
 Start the server karaf
 
@@ -33,7 +33,7 @@
 curl --header "Accept:application/json" http://localhost:8181/cxf/tasks/3
 ```
 
-### Install client 
+### Install client
 
 Start the client karaf
 
@@ -68,7 +68,7 @@
 
 This installs the CXF logging feature and adds the logging intent to the
 rest sample component. The command endpoint should then show that the intent
-logging is applied. 
+logging is applied.
 
 Any http requests to the service should now show as a logging message in the
 karaf log.
diff --git a/samples/soap/README.md b/samples/soap/README.md
index 95bde9c..8f61e70 100644
--- a/samples/soap/README.md
+++ b/samples/soap/README.md
@@ -7,12 +7,12 @@
 
 The impl module implements the TaskService using a simple HashMap internally. It allows to manage Task objects which represent items of a to do list.
 
- 
+
 ## Installation
 
 Unpack karaf 4 into a server and client directory.
 
-### Install server 
+### Install server
 
 Start the server karaf
 
@@ -24,7 +24,7 @@
 
 The last command should show one endpoint with a URI as id. You should be able to open the url in the browser.
 
-### Install client 
+### Install client
 
 Start the client karaf
 
diff --git a/samples/ssl/README.md b/samples/ssl/README.md
index fe83e4b..771d953 100644
--- a/samples/ssl/README.md
+++ b/samples/ssl/README.md
@@ -13,7 +13,7 @@
 # Keystore generation
 
 * Create client and server keys.
-* Add client certificate to server 
+* Add client certificate to server
 
 ```
 mkdir -p etc/keystores
@@ -35,11 +35,11 @@
 
 ## Installation
 
-- Copy the server side ssl config org.apache.cxf.http.jetty-ssl.cfg into etc 
+- Copy the server side ssl config org.apache.cxf.http.jetty-ssl.cfg into etc
 - Install the CXF DOSGi features
 - Install the example
 
-``` 
+```
 feature:repo-add cxf-dosgi-samples 2.0.0
 feature:install cxf-dosgi-sample-soap-impl cxf-dosgi-sample-soap-client
 install -s mvn:org.apache.cxf.dosgi.samples/cxf-dosgi-samples-ssl-intent/2.0.0
diff --git a/samples/ssl/ssl-intent/src/main/java/org/apache/cxf/dosgi/samples/ssl/SslIntent.java b/samples/ssl/ssl-intent/src/main/java/org/apache/cxf/dosgi/samples/ssl/SslIntent.java
index 1ca89a2..725901a 100644
--- a/samples/ssl/ssl-intent/src/main/java/org/apache/cxf/dosgi/samples/ssl/SslIntent.java
+++ b/samples/ssl/ssl-intent/src/main/java/org/apache/cxf/dosgi/samples/ssl/SslIntent.java
@@ -56,7 +56,7 @@
         HttpConduitConfig conduitConfig = new HttpConduitConfig();
         TLSClientParameters tls = new TLSClientParameters();
         String karafHome = System.getProperty("karaf.home");
-        tls.setKeyManagers(keyManager(keystore(karafHome + "/etc/keystores/client.jks", CLIENT_PASSWORD), 
+        tls.setKeyManagers(keyManager(keystore(karafHome + "/etc/keystores/client.jks", CLIENT_PASSWORD),
                                       CLIENT_PASSWORD));
         tls.setTrustManagers(trustManager(keystore(karafHome + "/etc/keystores/client.jks", CLIENT_PASSWORD)));
         //tls.setTrustManagers(new TrustManager[]{new DefaultTrustManager()});
