diff --git a/src/test/java/org/apache/ws/scout/Finder.java b/src/test/java/org/apache/ws/scout/Finder.java
index 5fc8d12..0c6802c 100644
--- a/src/test/java/org/apache/ws/scout/Finder.java
+++ b/src/test/java/org/apache/ws/scout/Finder.java
@@ -44,12 +44,6 @@
     private BusinessQueryManager bqm;
     private String uddiVersion;
     
-    public Finder(BusinessQueryManager bqm) {
-        super();
-        this.bqm = bqm;
-        this.uddiVersion = "2.0";
-    }
-    
     public Finder(BusinessQueryManager bqm, String version) {
     	super();
     	this.bqm = bqm;
diff --git a/src/test/java/org/apache/ws/scout/registry/qa/JAXR010OrganizationTest.java b/src/test/java/org/apache/ws/scout/registry/qa/JAXR010OrganizationTest.java
index 878b214..7a762ac 100644
--- a/src/test/java/org/apache/ws/scout/registry/qa/JAXR010OrganizationTest.java
+++ b/src/test/java/org/apache/ws/scout/registry/qa/JAXR010OrganizationTest.java
@@ -103,7 +103,7 @@
             blm = rs.getBusinessLifeCycleManager();
             bqm = rs.getBusinessQueryManager();
             Creator creator = new Creator(blm);
-            Finder finder = new Finder(bqm);
+            Finder finder = new Finder(bqm, uddiversion);
             
             Collection<Organization> orgs = new ArrayList<Organization>();
             Organization organization = creator.createOrganization(this.getClass().getName());
@@ -162,7 +162,7 @@
             bqm = rs.getBusinessQueryManager();
             System.out.println("We have the Business Query Manager");
             Printer printer = new Printer();
-            Finder finder = new Finder(bqm);
+            Finder finder = new Finder(bqm, uddiversion);
 
             Collection orgs = finder.findOrganizationsByName(this.getClass().getName());
             if (orgs == null) {
@@ -199,7 +199,7 @@
     //      Get registry service and business query manager
             bqm = rs.getBusinessQueryManager();
             System.out.println("We have the Business Query Manager");
-            Finder finder = new Finder(bqm);
+            Finder finder = new Finder(bqm, uddiversion);
             Remover remover = new Remover(blm);
             Collection orgs = finder.findOrganizationsByName(this.getClass().getName());
             for (Iterator orgIter = orgs.iterator(); orgIter.hasNext();)
@@ -223,7 +223,7 @@
             bqm = rs.getBusinessQueryManager();
             blm = rs.getBusinessLifeCycleManager();
             System.out.println("We have the Business Query Manager");
-            Finder finder = new Finder(bqm);
+            Finder finder = new Finder(bqm, uddiversion);
             Remover remover = new Remover(blm);
             Collection schemes = finder.findClassificationSchemesByName(this.getClass().getName());
             for (Iterator iter = schemes.iterator(); iter.hasNext();)
diff --git a/src/test/java/org/apache/ws/scout/registry/qa/JAXR015PrimaryContactTest.java b/src/test/java/org/apache/ws/scout/registry/qa/JAXR015PrimaryContactTest.java
index 38c19b3..6fc7668 100644
--- a/src/test/java/org/apache/ws/scout/registry/qa/JAXR015PrimaryContactTest.java
+++ b/src/test/java/org/apache/ws/scout/registry/qa/JAXR015PrimaryContactTest.java
@@ -117,7 +117,7 @@
             blm = rs.getBusinessLifeCycleManager();
             bqm = rs.getBusinessQueryManager();
             Creator creator = new Creator(blm);
-            Finder finder = new Finder(bqm);
+            Finder finder = new Finder(bqm, uddiversion);
             
             Collection<Organization> orgs = new ArrayList<Organization>();
             Organization organization = creator.createOrganization(this.getClass().getName());
@@ -199,7 +199,7 @@
             bqm = rs.getBusinessQueryManager();
             System.out.println("We have the Business Query Manager");
             Printer printer = new Printer();
-            Finder finder = new Finder(bqm);
+            Finder finder = new Finder(bqm, uddiversion);
 
             Collection orgs = finder.findOrganizationsByName(this.getClass().getName());
             if (orgs == null) {
@@ -267,7 +267,7 @@
     //      Get registry service and business query manager
             bqm = rs.getBusinessQueryManager();
             System.out.println("We have the Business Query Manager");
-            Finder finder = new Finder(bqm);
+            Finder finder = new Finder(bqm, uddiversion);
             Remover remover = new Remover(blm);
             Collection orgs = finder.findOrganizationsByName(this.getClass().getName());
             for (Iterator orgIter = orgs.iterator(); orgIter.hasNext();)
@@ -291,7 +291,7 @@
             bqm = rs.getBusinessQueryManager();
             blm = rs.getBusinessLifeCycleManager();
             System.out.println("We have the Business Query Manager");
-            Finder finder = new Finder(bqm);
+            Finder finder = new Finder(bqm, uddiversion);
             Remover remover = new Remover(blm);
             Collection schemes = finder.findClassificationSchemesByName(this.getClass().getName());
             for (Iterator iter = schemes.iterator(); iter.hasNext();)
diff --git a/src/test/java/org/apache/ws/scout/registry/qa/JAXR050ServiceBindingTest.java b/src/test/java/org/apache/ws/scout/registry/qa/JAXR050ServiceBindingTest.java
index 7589a99..0a173a2 100644
--- a/src/test/java/org/apache/ws/scout/registry/qa/JAXR050ServiceBindingTest.java
+++ b/src/test/java/org/apache/ws/scout/registry/qa/JAXR050ServiceBindingTest.java
@@ -94,7 +94,7 @@
             RegistryService rs = connection.getRegistryService();
             blm = rs.getBusinessLifeCycleManager();
             bqm = rs.getBusinessQueryManager();
-            Finder finder = new Finder(bqm);
+            Finder finder = new Finder(bqm, uddiversion);
 
             System.out.println("\nCreating temporary organization...\n");
             Organization tmpOrg = createTempOrg();
