diff --git a/NOTICE b/NOTICE
index 51527cd..eb55f8e 100644
--- a/NOTICE
+++ b/NOTICE
@@ -6,4 +6,3 @@
 The Apache Software Foundation (http://www.apache.org/).
 
 This product contains interfaces and specifications Copyright The OSGi Alliance.
-
diff --git a/buildtools/cxf-checkstyle-suppressions.xml b/buildtools/cxf-checkstyle-suppressions.xml
index 60c70ab..b15b6ac 100644
--- a/buildtools/cxf-checkstyle-suppressions.xml
+++ b/buildtools/cxf-checkstyle-suppressions.xml
@@ -35,4 +35,4 @@
     <suppress checks=".*"
               files=".+log4j.properties"
               />
-</suppressions>
\ No newline at end of file
+</suppressions>
diff --git a/buildtools/cxf-checkstyle.xml b/buildtools/cxf-checkstyle.xml
index 87dd736..521192b 100644
--- a/buildtools/cxf-checkstyle.xml
+++ b/buildtools/cxf-checkstyle.xml
@@ -58,7 +58,6 @@
 			<module name="JavadocStyle"/>
 		-->
 
-
 		<!-- Checks for Naming Conventions.                  -->
 		<!-- See http://checkstyle.sf.net/config_naming.html -->
 		<module name="ConstantName" />
@@ -71,7 +70,6 @@
 		<module name="StaticVariableName" />
 		<module name="TypeName" />
 
-
 		<!-- Checks for imports                              -->
 		<!-- See http://checkstyle.sf.net/config_import.html -->
 		<module name="AvoidStarImport">
@@ -87,7 +85,6 @@
 			</module>
 		-->
 
-
 		<!-- Checks for Size Violations.                    -->
 		<!-- See http://checkstyle.sf.net/config_sizes.html -->
 		<module name="AnonInnerLength">
@@ -129,13 +126,11 @@
 				value="ASSIGN, BAND, BAND_ASSIGN, BOR, BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN, EQUAL, GE, GT, LAND, LCURLY, LE, LITERAL_ASSERT, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_RETURN, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, LOR, LT, MINUS, MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION, RCURLY, SL, SLIST, SL_ASSIGN, SR, SR_ASSIGN, STAR, STAR_ASSIGN,TYPE_EXTENSION_AND" />
 		</module>
 
-
 		<!-- Modifier Checks                                    -->
 		<!-- See http://checkstyle.sf.net/config_modifiers.html -->
 		<!-- <module name="ModifierOrder" />-->
 		<module name="RedundantModifier" />
 
-
 		<!-- Checks for blocks. You know, those {}'s         -->
 		<!-- See http://checkstyle.sf.net/config_blocks.html -->
 		<module name="AvoidNestedBlocks">
@@ -148,7 +143,6 @@
 		<module name="NeedBraces" />
 		<module name="RightCurly" />
 
-
 		<!-- Checks for common coding problems               -->
 		<!-- See http://checkstyle.sf.net/config_coding.html -->
 		<!--<module name="ArrayTrailingComma"/>-->
@@ -203,8 +197,6 @@
 		<!--<module name="RequireThis"/>-->
 		<module name="UnnecessaryParentheses" />
 
-
-
 		<!-- Checks for class design                         -->
 		<!-- See http://checkstyle.sf.net/config_design.html -->
 		<!--<module name="DesignForExtension"/>-->
@@ -224,8 +216,6 @@
 			<property name="publicMemberPattern" value="resource[12].*" />
 		</module>
 
-
-
 		<!-- Metrics checks.                   -->
 		<!-- See http://checkstyle.sf.net/config_metrics.html -->
 		<module name="BooleanExpressionComplexity">
@@ -239,7 +229,6 @@
 			<property name="methodMaximum" value="100" />
 		</module>
 
-
 		<!-- Miscellaneous other checks.                   -->
 		<!-- See http://checkstyle.sf.net/config_misc.html -->
 		<!-- 
diff --git a/buildtools/notice-supplements.xml b/buildtools/notice-supplements.xml
index 06caf61..5b866d5 100644
--- a/buildtools/notice-supplements.xml
+++ b/buildtools/notice-supplements.xml
@@ -191,7 +191,6 @@
         </project>
     </supplement>
 
-
     <supplement>
         <project>
             <groupId>commons-collections</groupId>
diff --git a/common/bnd.bnd b/common/bnd.bnd
index c036a77..6b21833 100644
--- a/common/bnd.bnd
+++ b/common/bnd.bnd
@@ -7,4 +7,3 @@
 	org.apache.cxf.dosgi.common.proxy,\
 	org.apache.cxf.dosgi.common.util,\
 	org.apache.cxf.dosgi.common.api
-
diff --git a/common/src/main/java/org/apache/cxf/dosgi/common/proxy/ServiceInvocationHandler.java b/common/src/main/java/org/apache/cxf/dosgi/common/proxy/ServiceInvocationHandler.java
index 6f9e7e9..2ed32ad 100644
--- a/common/src/main/java/org/apache/cxf/dosgi/common/proxy/ServiceInvocationHandler.java
+++ b/common/src/main/java/org/apache/cxf/dosgi/common/proxy/ServiceInvocationHandler.java
@@ -62,5 +62,4 @@
         }
     }
 
-
 }
diff --git a/common/src/test/java/org/apache/cxf/dosgi/common/util/Provider.java b/common/src/test/java/org/apache/cxf/dosgi/common/util/Provider.java
index baec66d..009c4a1 100644
--- a/common/src/test/java/org/apache/cxf/dosgi/common/util/Provider.java
+++ b/common/src/test/java/org/apache/cxf/dosgi/common/util/Provider.java
@@ -18,6 +18,5 @@
  */
 package org.apache.cxf.dosgi.common.util;
 
-
 public class Provider {
 }
diff --git a/itests/multi-bundle/pom.xml b/itests/multi-bundle/pom.xml
index 2a9d711..2329529 100644
--- a/itests/multi-bundle/pom.xml
+++ b/itests/multi-bundle/pom.xml
@@ -40,7 +40,6 @@
     <!-- 
         When changing code make sure to run the distro before testing
         or you will be testing the old code.
-     
      -->
 
     <dependencies>
diff --git a/itests/multi-bundle/src/test/java/org/apache/cxf/dosgi/itests/multi/AbstractDosgiTest.java b/itests/multi-bundle/src/test/java/org/apache/cxf/dosgi/itests/multi/AbstractDosgiTest.java
index 9be797e..673a2f6 100644
--- a/itests/multi-bundle/src/test/java/org/apache/cxf/dosgi/itests/multi/AbstractDosgiTest.java
+++ b/itests/multi-bundle/src/test/java/org/apache/cxf/dosgi/itests/multi/AbstractDosgiTest.java
@@ -97,7 +97,6 @@
         }
         throw ex;
     }
-    
 
     /**
      * Sleeps for a short interval, throwing an exception if timeout has been reached. Used to facilitate a
@@ -261,7 +260,6 @@
     protected static Option configLogging() {
         return ConfigurationAdminOptions.configurationFolder(new File("src/test/resources/cfg"));
     }
-    
 
     protected static MavenArtifactProvisionOption taskServiceAPI() {
         return mavenBundle().groupId("org.apache.cxf.dosgi.samples")
@@ -273,19 +271,16 @@
             .artifactId("cxf-dosgi-samples-soap-impl").versionAsInProject();
     }
 
-
     protected static MavenArtifactProvisionOption taskRESTAPI() {
         return mavenBundle().groupId("org.apache.cxf.dosgi.samples")
             .artifactId("cxf-dosgi-samples-rest-api").versionAsInProject();
     }
 
-
     protected static MavenArtifactProvisionOption taskRESTImpl() {
         return mavenBundle().groupId("org.apache.cxf.dosgi.samples")
             .artifactId("cxf-dosgi-samples-rest-impl").versionAsInProject();
     }
 
-
     protected static Option basicTestOptions() throws Exception {
         return composite(CoreOptions.junitBundles(), //
                          MultiBundleTools.getDistro(), //
diff --git a/itests/multi-bundle/src/test/java/org/apache/cxf/dosgi/itests/multi/TestExportPolicy.java b/itests/multi-bundle/src/test/java/org/apache/cxf/dosgi/itests/multi/TestExportPolicy.java
index 8f4f136..c55dc97 100644
--- a/itests/multi-bundle/src/test/java/org/apache/cxf/dosgi/itests/multi/TestExportPolicy.java
+++ b/itests/multi-bundle/src/test/java/org/apache/cxf/dosgi/itests/multi/TestExportPolicy.java
@@ -56,6 +56,5 @@
     public void testPolicyPresent() throws Exception {
         Assert.assertNotNull(policy);
     }
-    
 
 }
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 052d369..6e54d6f 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
@@ -93,7 +93,6 @@
         final WebClient swaggerClient = WebClient.create(REST_SERVICE_URI + "/swagger.json");
         String swaggerJson = swaggerClient.get(String.class);
         Assert.assertEquals("{\"swagger\":\"2.0\"", swaggerJson.substring(0, 16));
-        
     }
     
     @Test
diff --git a/itests/multi-bundle/src/test/resources/rs-test1.xml b/itests/multi-bundle/src/test/resources/rs-test1.xml
index 60c449d..5731fbd 100644
--- a/itests/multi-bundle/src/test/resources/rs-test1.xml
+++ b/itests/multi-bundle/src/test/resources/rs-test1.xml
@@ -25,4 +25,3 @@
     <property name="service.imported.configs">org.apache.cxf.ws</property>
   </endpoint-description>
 </endpoint-descriptions>
-
diff --git a/pom.xml b/pom.xml
index d1c3854..17826a1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -105,7 +105,6 @@
                 </executions>
             </plugin>
         </plugins>
-          
 
         <pluginManagement>
             <plugins>
diff --git a/provider-rs/src/test/java/org/apache/cxf/dosgi/dsw/handlers/rest/provider/RsProviderCustomTest.java b/provider-rs/src/test/java/org/apache/cxf/dosgi/dsw/handlers/rest/provider/RsProviderCustomTest.java
index 47cec18..5198371 100644
--- a/provider-rs/src/test/java/org/apache/cxf/dosgi/dsw/handlers/rest/provider/RsProviderCustomTest.java
+++ b/provider-rs/src/test/java/org/apache/cxf/dosgi/dsw/handlers/rest/provider/RsProviderCustomTest.java
@@ -84,7 +84,6 @@
 
     private Callable<List<Object>> intentProvider(final Object... intents) {
         return new Callable<List<Object>>() {
-            
             @Override
             public List<Object> call() throws Exception {
                 return Arrays.asList(intents);
diff --git a/provider-ws/Readme.md b/provider-ws/Readme.md
index 874d270..6632058 100644
--- a/provider-ws/Readme.md
+++ b/provider-ws/Readme.md
@@ -29,4 +29,3 @@
 # Samples
 
 See [sample soap](../samples/soap).
-
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 46859ba..0b87da4 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
@@ -213,7 +213,6 @@
         handler.setHttpServiceManager(dummyHttpServiceManager());
         handler.activate(dswContext);
         Runnable myService = new Runnable() {
-            
             @Override
             public void run() {
             }
diff --git a/release_notes.md b/release_notes.md
index be74e53..5542ca2 100644
--- a/release_notes.md
+++ b/release_notes.md
@@ -1,6 +1,7 @@
 Release Notes - CXF Distributed OSGi
 ====================================
 
+
 2.3.0
 =====
 
@@ -13,6 +14,7 @@
     * [DOSGI-273] - Use bnd resolver to create multibundle distro
     * [DOSGI-274] - Upgrade to CXF 3.2.0
 
+
 2.2.0
 =====
 
@@ -120,6 +122,7 @@
 * Improvement
     * [DOSGI-220] - Upgrade to cxf 3.1.1 
     
+
 1.6.0
 =====
 
@@ -262,6 +265,7 @@
 * New Feature
     * [DOSGI-115] - Use Spring DM and Eclipse Gemini Blueprint with DOSGi
 
+
 1.3.1
 =====
 
@@ -272,6 +276,7 @@
 * Fixed ExportReferenceImpl.equals() and hashCode()
 * Fixed RemoteServiceAdminCore.exportService()
 
+
 1.3
 ===
 
@@ -402,7 +407,6 @@
 * [CXF-2385] - Discovery doesn't fully translate 'localhost' into a proper machine name
 * [CXF-2200] - Consuming more than 1 service using Spring-DM doesn't work
 
-
 Known limitations :
 
 * Schema validation can not be done for JAX-RS-based endpoints which use
diff --git a/samples/Readme.md b/samples/Readme.md
index 934384f..fcaf3e2 100644
--- a/samples/Readme.md
+++ b/samples/Readme.md
@@ -36,4 +36,3 @@
 * [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/repository/pom.xml b/samples/repository/pom.xml
index 8250887..5726293 100644
--- a/samples/repository/pom.xml
+++ b/samples/repository/pom.xml
@@ -144,7 +144,6 @@
         
     </dependencies>
 
-
     <build>
         <plugins>
             <plugin>
diff --git a/samples/rest/impl-jackson/src/main/java/org/apache/cxf/dosgi/samples/rest/impl/JacksonIntent.java b/samples/rest/impl-jackson/src/main/java/org/apache/cxf/dosgi/samples/rest/impl/JacksonIntent.java
index 980fcbe..63674e4 100644
--- a/samples/rest/impl-jackson/src/main/java/org/apache/cxf/dosgi/samples/rest/impl/JacksonIntent.java
+++ b/samples/rest/impl-jackson/src/main/java/org/apache/cxf/dosgi/samples/rest/impl/JacksonIntent.java
@@ -25,7 +25,6 @@
 import org.apache.cxf.dosgi.common.api.IntentsProvider;
 import org.osgi.service.component.annotations.Component;
 
-
 /**
  * Not needed in the current example config.
  * This shows how to export a custom intent.
diff --git a/samples/soap/soap.bndrun b/samples/soap/soap.bndrun
index 151fafd..e31bce0 100644
--- a/samples/soap/soap.bndrun
+++ b/samples/soap/soap.bndrun
@@ -77,4 +77,4 @@
 	org.apache.ws.xmlschema.core;version='[2.2.2,2.2.3)',\
 	org.apache.cxf.dosgi.samples.cxf-dosgi-samples-soap-api;version='[2.3.0,2.3.1)',\
 	org.apache.cxf.dosgi.samples.cxf-dosgi-samples-soap-impl;version='[2.3.0,2.3.1)',\
-	org.apache.felix.scr;version='[2.0.12,2.0.13)'
\ No newline at end of file
+	org.apache.felix.scr;version='[2.0.12,2.0.13)'
diff --git a/samples/ssl/etc/org.ops4j.pax.web.cfg b/samples/ssl/etc/org.ops4j.pax.web.cfg
index 8061c7f..cae4a64 100644
--- a/samples/ssl/etc/org.ops4j.pax.web.cfg
+++ b/samples/ssl/etc/org.ops4j.pax.web.cfg
@@ -9,4 +9,3 @@
 org.ops4j.pax.web.ssl.keypassword=password
 org.osgi.service.http.port.secure=8443
 org.ops4j.pax.web.ssl.clientauthneeded=true
-
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 558f7a7..1ca89a2 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
@@ -61,7 +61,6 @@
         tls.setTrustManagers(trustManager(keystore(karafHome + "/etc/keystores/client.jks", CLIENT_PASSWORD)));
         //tls.setTrustManagers(new TrustManager[]{new DefaultTrustManager()});
         HostnameVerifier verifier = new HostnameVerifier() {
-            
             @Override
             public boolean verify(String hostname, SSLSession session) {
                 return true;
@@ -94,5 +93,4 @@
         return ks;
     }
 
-
 }
