diff --git a/bundlerepository/src/main/java/org/apache/felix/bundlerepository/RepositoryAdminImpl.java b/bundlerepository/src/main/java/org/apache/felix/bundlerepository/RepositoryAdminImpl.java
index 15ef8a4..72ff6dc 100644
--- a/bundlerepository/src/main/java/org/apache/felix/bundlerepository/RepositoryAdminImpl.java
+++ b/bundlerepository/src/main/java/org/apache/felix/bundlerepository/RepositoryAdminImpl.java
@@ -215,7 +215,8 @@
         return resources;
     }
 
-    public Requirement requirement(String name, String filter) {
+    public Requirement requirement(String name, String filter)
+    {
         RequirementImpl req = new RequirementImpl();
         req.setName(name);
         if (filter != null)
diff --git a/bundlerepository/src/test/java/org/apache/felix/bundlerepository/FilterImplTest.java b/bundlerepository/src/test/java/org/apache/felix/bundlerepository/FilterImplTest.java
index 53d9679..c38394b 100644
--- a/bundlerepository/src/test/java/org/apache/felix/bundlerepository/FilterImplTest.java
+++ b/bundlerepository/src/test/java/org/apache/felix/bundlerepository/FilterImplTest.java
@@ -23,11 +23,12 @@
 
 import junit.framework.TestCase;
 
-public class FilterImplTest extends TestCase {
-
-    public void testStandardLDAP() throws Exception {
-
-        FilterImpl filterImpl = new FilterImpl("(&(package=org.eclipse.core.runtime)(version>=0.0.0)(common=split))");
+public class FilterImplTest extends TestCase
+{
+    public void testStandardLDAP() throws Exception
+    {
+        FilterImpl filterImpl = new FilterImpl(
+            "(&(package=org.eclipse.core.runtime)(version>=0.0.0)(common=split))");
 
         Dictionary dict = new Hashtable();
         dict.put("package", "org.eclipse.core.runtime");
@@ -44,9 +45,10 @@
         assertFalse(filterImpl.match(dict));
     }
 
-    public void testNoneStandardLDAPOperators() throws Exception {
-
-        FilterImpl filterImpl = new FilterImpl("(&(package=org.eclipse.core.runtime)(version>=0.0.0)(common=split)(mandatory:<*common,test))");
+    public void testNoneStandardLDAPOperators() throws Exception
+    {
+        FilterImpl filterImpl = new FilterImpl(
+            "(&(package=org.eclipse.core.runtime)(version>=0.0.0)(common=split)(mandatory:<*common,test))");
 
         Dictionary dict = new Hashtable();
         dict.put("somethindifferent", "sonstwas");
@@ -72,7 +74,8 @@
         dict.put("common", "split");
         assertTrue(filterImpl.match(dict));
 
-        filterImpl = new FilterImpl("(&(package=org.eclipse.core.runtime)(version>=0.0.0)(common=split)(mandatory:*>common))");
+        filterImpl = new FilterImpl(
+            "(&(package=org.eclipse.core.runtime)(version>=0.0.0)(common=split)(mandatory:*>common))");
         dict = new Hashtable();
         dict.put("mandatory", "common");
         dict.put("package", "org.eclipse.core.runtime");
@@ -87,7 +90,8 @@
         dict.put("common", "split");
         assertTrue(filterImpl.match(dict));
 
-        filterImpl = new FilterImpl("(&(package=org.eclipse.core.runtime)(version>=0.0.0)(common=split)(mandatory:*>common,test))");
+        filterImpl = new FilterImpl(
+            "(&(package=org.eclipse.core.runtime)(version>=0.0.0)(common=split)(mandatory:*>common,test))");
         dict = new Hashtable();
         dict.put("mandatory", "common");
         dict.put("package", "org.eclipse.core.runtime");
@@ -103,17 +107,16 @@
         assertTrue(filterImpl.match(dict));
     }
 
-    public void testCaseSensitive() throws Exception {
-        
-        FilterImpl filterImpl = new FilterImpl("(&(package=org.eclipse.core.runtime))");        
+    public void testCaseSensitive() throws Exception
+    {
+        FilterImpl filterImpl = new FilterImpl("(&(package=org.eclipse.core.runtime))");
 
         Dictionary dict = new Hashtable();
         dict.put("PACKAGE", "org.eclipse.core.runtime");
         assertTrue(filterImpl.match(dict));
-        
+
         dict = new Hashtable();
         dict.put("PACKAGE", "org.eclipse.core.runtime");
         assertFalse(filterImpl.matchCase(dict));
-        
     }
-}
\ No newline at end of file
+}
diff --git a/bundlerepository/src/test/java/org/apache/felix/bundlerepository/RepositoryImplTest.java b/bundlerepository/src/test/java/org/apache/felix/bundlerepository/RepositoryImplTest.java
index afc4c62..38f02c8 100644
--- a/bundlerepository/src/test/java/org/apache/felix/bundlerepository/RepositoryImplTest.java
+++ b/bundlerepository/src/test/java/org/apache/felix/bundlerepository/RepositoryImplTest.java
@@ -94,5 +94,4 @@
 
         return repoAdmin;
     }
-
 }
\ No newline at end of file
diff --git a/bundlerepository/src/test/java/org/apache/felix/bundlerepository/ResolverImplTest.java b/bundlerepository/src/test/java/org/apache/felix/bundlerepository/ResolverImplTest.java
index 7decd10..6a14a04 100644
--- a/bundlerepository/src/test/java/org/apache/felix/bundlerepository/ResolverImplTest.java
+++ b/bundlerepository/src/test/java/org/apache/felix/bundlerepository/ResolverImplTest.java
@@ -41,7 +41,8 @@
         Resource r = null;
         //MockContext doesn't support filtering!
         Resource[] discoverResources = repoAdmin.discoverResources("");
-        for (int i = 0; i < discoverResources.length; i++) {
+        for (int i = 0; i < discoverResources.length; i++)
+        {
             Resource resource = discoverResources[i];
             if (resource.getSymbolicName().contains("org.apache.felix.test"))
             {
@@ -51,7 +52,6 @@
 
         resolver.add(r);
         assertTrue(resolver.resolve());
-
     }
 
     public void testMatchingReq() throws Exception
@@ -59,7 +59,9 @@
         RepositoryAdminImpl repoAdmin = createRepositoryAdmin();
         repoAdmin.addRepository(getClass().getResource("/repo_for_resolvertest.xml"));
 
-        Resource[] res = repoAdmin.discoverResources(new Requirement[] { repoAdmin.requirement("package", "(package=org.apache.felix.test.osgi)") });
+        Resource[] res = repoAdmin.discoverResources(
+            new Requirement[] { repoAdmin.requirement(
+                "package", "(package=org.apache.felix.test.osgi)") });
         assertNotNull(res);
         assertEquals(1, res.length);
     }
@@ -74,10 +76,9 @@
         assertTrue(resolver.resolve());
     }
 
-    public static void main(String[] args) throws Exception {
-
+    public static void main(String[] args) throws Exception
+    {
         new ResolverImplTest().testReferral1();
-
     }
 
     private RepositoryAdminImpl createRepositoryAdmin()
@@ -96,5 +97,4 @@
 
         return repoAdmin;
     }
-
 }
\ No newline at end of file
