diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIReplicationImpl.java b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIReplicationImpl.java
index 492ec8e..ae25798 100644
--- a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIReplicationImpl.java
+++ b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIReplicationImpl.java
@@ -1063,7 +1063,7 @@
                                                         + "order by e.originatingUSN ASC");
                                         }
                                         logger.info("Query db for replication changes, lower index is " + (firstrecord) + " last index " + lastrecord + " record limit " + maxrecords);
-                                        logger.info("This node is" + getNode() + ", request is for data originated from " + changesAlreadySeen.getHighWaterMark().get(i).getNodeID() + " and it's being sent back to " + requestingNode);
+                                        logger.info("This node is " + getNode() + ", request is for data originated from " + changesAlreadySeen.getHighWaterMark().get(i).getNodeID() + " and it's being sent back to " + requestingNode);
 
                                         createQuery.setMaxResults(maxrecords);
                                         createQuery.setParameter("inbound", firstrecord);
@@ -1092,7 +1092,7 @@
                                 }
                                 //assume that they just want records that originated from here?
                                 logger.info("Query db for replication changes, lower index is " + (firstrecord) + " last index " + lastrecord + " record limit " + maxrecords);
-                                logger.info("This node is" + getNode() + " requesting node " + requestingNode);
+                                logger.info("This node is " + getNode() + " requesting node " + requestingNode);
 
                                 if (lastrecord != null) {
                                         createQuery = em.createQuery("select e from ChangeRecord e where "
diff --git a/juddi-examples/uddi-annotations/src/main/webapp/WEB-INF/beans.xml b/juddi-examples/uddi-annotations/src/main/webapp/WEB-INF/beans.xml
index 67b8cfe..76c4b41 100644
--- a/juddi-examples/uddi-annotations/src/main/webapp/WEB-INF/beans.xml
+++ b/juddi-examples/uddi-annotations/src/main/webapp/WEB-INF/beans.xml
@@ -21,7 +21,6 @@
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
 
   <import resource="classpath:META-INF/cxf/cxf.xml" />
-  <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
   <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
   
   <jaxws:endpoint id="helloworld" implementor="org.apache.juddi.example.HelloWorldImpl" 
diff --git a/juddi-examples/wsdl2uddi-lifecyle/src/main/webapp/WEB-INF/beans.xml b/juddi-examples/wsdl2uddi-lifecyle/src/main/webapp/WEB-INF/beans.xml
index 67b8cfe..76c4b41 100644
--- a/juddi-examples/wsdl2uddi-lifecyle/src/main/webapp/WEB-INF/beans.xml
+++ b/juddi-examples/wsdl2uddi-lifecyle/src/main/webapp/WEB-INF/beans.xml
@@ -21,7 +21,6 @@
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
 
   <import resource="classpath:META-INF/cxf/cxf.xml" />
-  <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
   <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
   
   <jaxws:endpoint id="helloworld" implementor="org.apache.juddi.example.HelloWorldImpl" 
diff --git a/juddi-rest-cxf/pom.xml b/juddi-rest-cxf/pom.xml
index 350805c..43fdb24 100644
--- a/juddi-rest-cxf/pom.xml
+++ b/juddi-rest-cxf/pom.xml
@@ -63,13 +63,34 @@
             <groupId>commons-collections</groupId>
             <artifactId>commons-collections</artifactId>
         </dependency>
+        
+        
+        
         <dependency>
             <groupId>org.apache.cxf</groupId>
-            <artifactId>cxf-bundle-jaxrs</artifactId>
+            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
             <version>${cxf.version}</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-rs-client</artifactId>
+            <version>${cxf.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-rs-service-description</artifactId>
+            <version>${cxf.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-transports-http-jetty</artifactId>
+            <version>${cxf.version}</version>
+        </dependency>
+        
+        <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-test</artifactId>
             <version>3.2.2.RELEASE</version>
diff --git a/juddiv3-war-repl/JAX-WS/CXF-JBossAS7Up/WEB-INF/beans.xml b/juddiv3-war-repl/JAX-WS/CXF-JBossAS7Up/WEB-INF/beans.xml
index 4a52c2f..988ac22 100644
--- a/juddiv3-war-repl/JAX-WS/CXF-JBossAS7Up/WEB-INF/beans.xml
+++ b/juddiv3-war-repl/JAX-WS/CXF-JBossAS7Up/WEB-INF/beans.xml
@@ -21,16 +21,23 @@
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:jaxws="http://cxf.apache.org/jaxws"
 	    xmlns:jaxrs="http://cxf.apache.org/jaxrs"
+		 xmlns:sec="http://cxf.apache.org/configuration/security"
+		xmlns:http="http://cxf.apache.org/transports/http/configuration"
 		xmlns:util="http://www.springframework.org/schema/util"
   xsi:schemaLocation="
   http://www.springframework.org/schema/beans classpath:schemas/spring-beans.xsd
   http://cxf.apache.org/jaxws  classpath:schemas/jaxws.xsd
   http://cxf.apache.org/jaxrs classpath:schemas/jaxrs.xsd
   http://www.springframework.org/schema/util classpath:schemas/spring-util.xsd
+   http://cxf.apache.org/configuration/security
+      http://cxf.apache.org/schemas/configuration/security.xsd
+      http://cxf.apache.org/transports/http/configuration
+      http://cxf.apache.org/schemas/configuration/http-conf.xsd
+      http://www.springframework.org/schema/beans
+      http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
   ">
  
   <import resource="classpath:META-INF/cxf/cxf.xml" />
-  <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
   <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
 
  
@@ -42,6 +49,35 @@
     </jaxws:properties>
   </jaxws:endpoint>
 
-
+  <http:conduit name="*.http-conduit">
+ 
+    <http:tlsClientParameters>
+      <sec:keyManagers 
+					keyPassword="password">
+        <sec:keyStore type="JKS" 
+						password="password"
+                      file="conf/keystore.jks"/>
+      </sec:keyManagers>
+      <sec:trustManagers>
+        <sec:keyStore type="JKS" password="password"
+                      file="truststore.jks"/>
+      </sec:trustManagers>
+      <sec:cipherSuitesFilter>
+        <!-- these filters ensure that a ciphersuite with
+             export-suitable or null encryption is used,
+             but exclude anonymous Diffie-Hellman key change as
+             this is vulnerable to man-in-the-middle attacks -->
+        <sec:include>.*_EXPORT_.*</sec:include>
+        <sec:include>.*_EXPORT1024_.*</sec:include>
+        <sec:include>.*_WITH_DES_.*</sec:include>
+        <sec:include>.*_WITH_AES_.*</sec:include>
+        <sec:include>.*_WITH_NULL_.*</sec:include>
+        <sec:exclude>.*_DH_anon_.*</sec:exclude>
+      </sec:cipherSuitesFilter>
+    </http:tlsClientParameters>
+   
+    <http:client AutoRedirect="false" Connection="Keep-Alive"/>
+ 
+  </http:conduit>
 
 </beans>
diff --git a/juddiv3-war-repl/JAX-WS/CXF/WEB-INF/beans.xml b/juddiv3-war-repl/JAX-WS/CXF/WEB-INF/beans.xml
index a797f81..41127a8 100644
--- a/juddiv3-war-repl/JAX-WS/CXF/WEB-INF/beans.xml
+++ b/juddiv3-war-repl/JAX-WS/CXF/WEB-INF/beans.xml
@@ -20,17 +20,24 @@
 <beans xmlns="http://www.springframework.org/schema/beans" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:jaxws="http://cxf.apache.org/jaxws"
-       xmlns:jaxrs="http://cxf.apache.org/jaxrs"
-       xmlns:util="http://www.springframework.org/schema/util"
-       xsi:schemaLocation="
+	    xmlns:jaxrs="http://cxf.apache.org/jaxrs"
+		 xmlns:sec="http://cxf.apache.org/configuration/security"
+		xmlns:http="http://cxf.apache.org/transports/http/configuration"
+		xmlns:util="http://www.springframework.org/schema/util"
+  xsi:schemaLocation="
   http://www.springframework.org/schema/beans classpath:schemas/spring-beans.xsd
   http://cxf.apache.org/jaxws  classpath:schemas/jaxws.xsd
   http://cxf.apache.org/jaxrs classpath:schemas/jaxrs.xsd
   http://www.springframework.org/schema/util classpath:schemas/spring-util.xsd
+   http://cxf.apache.org/configuration/security
+      http://cxf.apache.org/schemas/configuration/security.xsd
+      http://cxf.apache.org/transports/http/configuration
+      http://cxf.apache.org/schemas/configuration/http-conf.xsd
+      http://www.springframework.org/schema/beans
+      http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
   ">
  
     <import resource="classpath:META-INF/cxf/cxf.xml" />
-    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
     <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
 
 
@@ -40,5 +47,35 @@
         </jaxws:properties>
     </jaxws:endpoint>
 
+  <http:conduit name="*.http-conduit">
+ 
+    <http:tlsClientParameters>
+      <sec:keyManagers 
+					keyPassword="password">
+        <sec:keyStore type="JKS" 
+						password="password"
+                      file="conf/keystore.jks"/>
+      </sec:keyManagers>
+      <sec:trustManagers>
+        <sec:keyStore type="JKS" password="password"
+                      file="truststore.jks"/>
+      </sec:trustManagers>
+      <sec:cipherSuitesFilter>
+        <!-- these filters ensure that a ciphersuite with
+             export-suitable or null encryption is used,
+             but exclude anonymous Diffie-Hellman key change as
+             this is vulnerable to man-in-the-middle attacks -->
+        <sec:include>.*_EXPORT_.*</sec:include>
+        <sec:include>.*_EXPORT1024_.*</sec:include>
+        <sec:include>.*_WITH_DES_.*</sec:include>
+        <sec:include>.*_WITH_AES_.*</sec:include>
+        <sec:include>.*_WITH_NULL_.*</sec:include>
+        <sec:exclude>.*_DH_anon_.*</sec:exclude>
+      </sec:cipherSuitesFilter>
+    </http:tlsClientParameters>
+   
+    <http:client AutoRedirect="false" Connection="Keep-Alive"/>
+ 
+  </http:conduit>
 
 </beans>
diff --git a/juddiv3-war-repl/pom.xml b/juddiv3-war-repl/pom.xml
index dd0a6c1..c4e98b0 100644
--- a/juddiv3-war-repl/pom.xml
+++ b/juddiv3-war-repl/pom.xml
@@ -162,6 +162,21 @@
 					<version>2.1_3</version>
 					<scope>provided</scope>
 				</dependency>
+                                 <dependency>
+                                    <groupId>org.apache.cxf</groupId>
+                                    <artifactId>cxf-rt-frontend-jaxrs</artifactId>
+                                    <version>${cxf.version}</version>
+                                </dependency>
+                                <dependency>
+                                    <groupId>org.apache.cxf</groupId>
+                                    <artifactId>cxf-rt-rs-client</artifactId>
+                                    <version>${cxf.version}</version>
+                                </dependency>
+                                <dependency>
+                                    <groupId>org.apache.cxf</groupId>
+                                    <artifactId>cxf-rt-rs-service-description</artifactId>
+                                    <version>${cxf.version}</version>
+                                </dependency>
 			</dependencies>
 		</profile>
 		<profile>
@@ -275,7 +290,22 @@
 						</exclusion>
 					</exclusions>
 				</dependency>
-                <dependency>
+                                 <dependency>
+                                    <groupId>org.apache.cxf</groupId>
+                                    <artifactId>cxf-rt-frontend-jaxrs</artifactId>
+                                    <version>${cxf.version}</version>
+                                </dependency>
+                                <dependency>
+                                    <groupId>org.apache.cxf</groupId>
+                                    <artifactId>cxf-rt-rs-client</artifactId>
+                                    <version>${cxf.version}</version>
+                                </dependency>
+                                <dependency>
+                                    <groupId>org.apache.cxf</groupId>
+                                    <artifactId>cxf-rt-rs-service-description</artifactId>
+                                    <version>${cxf.version}</version>
+                                </dependency>
+                                <dependency>
 					<artifactId>juddi-rest-cxf</artifactId>
 					<groupId>org.apache.juddi</groupId>
 					<version>${project.version}</version>
diff --git a/juddiv3-war/JAX-WS/CXF-JBossAS7Up/WEB-INF/beans.xml b/juddiv3-war/JAX-WS/CXF-JBossAS7Up/WEB-INF/beans.xml
index e956edd..c605329 100644
--- a/juddiv3-war/JAX-WS/CXF-JBossAS7Up/WEB-INF/beans.xml
+++ b/juddiv3-war/JAX-WS/CXF-JBossAS7Up/WEB-INF/beans.xml
@@ -21,16 +21,23 @@
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:jaxws="http://cxf.apache.org/jaxws"
 	    xmlns:jaxrs="http://cxf.apache.org/jaxrs"
+		 xmlns:sec="http://cxf.apache.org/configuration/security"
+		xmlns:http="http://cxf.apache.org/transports/http/configuration"
 		xmlns:util="http://www.springframework.org/schema/util"
   xsi:schemaLocation="
   http://www.springframework.org/schema/beans classpath:schemas/spring-beans.xsd
   http://cxf.apache.org/jaxws  classpath:schemas/jaxws.xsd
   http://cxf.apache.org/jaxrs classpath:schemas/jaxrs.xsd
   http://www.springframework.org/schema/util classpath:schemas/spring-util.xsd
+   http://cxf.apache.org/configuration/security
+      http://cxf.apache.org/schemas/configuration/security.xsd
+      http://cxf.apache.org/transports/http/configuration
+      http://cxf.apache.org/schemas/configuration/http-conf.xsd
+      http://www.springframework.org/schema/beans
+      http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
   ">
  
   <import resource="classpath:META-INF/cxf/cxf.xml" />
-  <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
   <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
 
   <jaxws:endpoint id="inquiry" implementor="org.apache.juddi.api.impl.UDDIInquiryImpl" address="/inquiry">
@@ -143,6 +150,36 @@
    <bean id="jaxbProvider"
 class="org.apache.cxf.jaxrs.provider.JAXBElementProvider"/>
  
-
+	 
+  <http:conduit name="*.http-conduit">
+ 
+    <http:tlsClientParameters>
+      <sec:keyManagers 
+					keyPassword="password">
+        <sec:keyStore type="JKS" 
+						password="password"
+                      file="conf/keystore.jks"/>
+      </sec:keyManagers>
+      <sec:trustManagers>
+        <sec:keyStore type="JKS" password="password"
+                      file="truststore.jks"/>
+      </sec:trustManagers>
+      <sec:cipherSuitesFilter>
+        <!-- these filters ensure that a ciphersuite with
+             export-suitable or null encryption is used,
+             but exclude anonymous Diffie-Hellman key change as
+             this is vulnerable to man-in-the-middle attacks -->
+        <sec:include>.*_EXPORT_.*</sec:include>
+        <sec:include>.*_EXPORT1024_.*</sec:include>
+        <sec:include>.*_WITH_DES_.*</sec:include>
+        <sec:include>.*_WITH_AES_.*</sec:include>
+        <sec:include>.*_WITH_NULL_.*</sec:include>
+        <sec:exclude>.*_DH_anon_.*</sec:exclude>
+      </sec:cipherSuitesFilter>
+    </http:tlsClientParameters>
+   
+    <http:client AutoRedirect="false" Connection="Keep-Alive"/>
+ 
+  </http:conduit>
 
 </beans>
diff --git a/juddiv3-war/JAX-WS/CXF/WEB-INF/beans.xml b/juddiv3-war/JAX-WS/CXF/WEB-INF/beans.xml
index 0b4049e..1bc6247 100644
--- a/juddiv3-war/JAX-WS/CXF/WEB-INF/beans.xml
+++ b/juddiv3-war/JAX-WS/CXF/WEB-INF/beans.xml
@@ -21,16 +21,23 @@
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:jaxws="http://cxf.apache.org/jaxws"
 	    xmlns:jaxrs="http://cxf.apache.org/jaxrs"
+		 xmlns:sec="http://cxf.apache.org/configuration/security"
+		xmlns:http="http://cxf.apache.org/transports/http/configuration"
 		xmlns:util="http://www.springframework.org/schema/util"
   xsi:schemaLocation="
   http://www.springframework.org/schema/beans classpath:schemas/spring-beans.xsd
   http://cxf.apache.org/jaxws  classpath:schemas/jaxws.xsd
   http://cxf.apache.org/jaxrs classpath:schemas/jaxrs.xsd
   http://www.springframework.org/schema/util classpath:schemas/spring-util.xsd
+   http://cxf.apache.org/configuration/security
+      http://cxf.apache.org/schemas/configuration/security.xsd
+      http://cxf.apache.org/transports/http/configuration
+      http://cxf.apache.org/schemas/configuration/http-conf.xsd
+      http://www.springframework.org/schema/beans
+      http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
   ">
  
   <import resource="classpath:META-INF/cxf/cxf.xml" />
-  <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
   <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
 
   <jaxws:endpoint id="inquiry" implementor="org.apache.juddi.api.impl.UDDIInquiryImpl" address="/inquiry">
@@ -146,5 +153,35 @@
 class="org.apache.cxf.jaxrs.provider.JAXBElementProvider"/>
  
 
+  <http:conduit name="*.http-conduit">
+ 
+    <http:tlsClientParameters>
+      <sec:keyManagers 
+					keyPassword="password">
+        <sec:keyStore type="JKS" 
+						password="password"
+                      file="conf/keystore.jks"/>
+      </sec:keyManagers>
+      <sec:trustManagers>
+        <sec:keyStore type="JKS" password="password"
+                      file="truststore.jks"/>
+      </sec:trustManagers>
+      <sec:cipherSuitesFilter>
+        <!-- these filters ensure that a ciphersuite with
+             export-suitable or null encryption is used,
+             but exclude anonymous Diffie-Hellman key change as
+             this is vulnerable to man-in-the-middle attacks -->
+        <sec:include>.*_EXPORT_.*</sec:include>
+        <sec:include>.*_EXPORT1024_.*</sec:include>
+        <sec:include>.*_WITH_DES_.*</sec:include>
+        <sec:include>.*_WITH_AES_.*</sec:include>
+        <sec:include>.*_WITH_NULL_.*</sec:include>
+        <sec:exclude>.*_DH_anon_.*</sec:exclude>
+      </sec:cipherSuitesFilter>
+    </http:tlsClientParameters>
+   
+    <http:client AutoRedirect="false" Connection="Keep-Alive"/>
+ 
+  </http:conduit>
 
 </beans>
diff --git a/juddiv3-war/pom.xml b/juddiv3-war/pom.xml
index d1650fd..46efd04 100644
--- a/juddiv3-war/pom.xml
+++ b/juddiv3-war/pom.xml
@@ -151,7 +151,22 @@
 					
                     <scope>provided</scope>
                 </dependency>
-               
+                 <dependency>
+                    <groupId>org.apache.cxf</groupId>
+                    <artifactId>cxf-rt-frontend-jaxrs</artifactId>
+                    <version>${cxf.version}</version>
+                </dependency>
+                <dependency>
+                    <groupId>org.apache.cxf</groupId>
+                    <artifactId>cxf-rt-rs-client</artifactId>
+                    <version>${cxf.version}</version>
+                </dependency>
+                <dependency>
+                    <groupId>org.apache.cxf</groupId>
+                    <artifactId>cxf-rt-rs-service-description</artifactId>
+                    <version>${cxf.version}</version>
+                </dependency>
+                
                 <dependency>
                     <groupId>org.hibernate</groupId>
                     <artifactId>hibernate-entitymanager</artifactId>
@@ -291,6 +306,22 @@
                     <artifactId>cxf-rt-rs-extension-providers</artifactId>
                     <version>${cxf.version}</version>
                 </dependency>
+                 <dependency>
+                    <groupId>org.apache.cxf</groupId>
+                    <artifactId>cxf-rt-frontend-jaxrs</artifactId>
+                    <version>${cxf.version}</version>
+                </dependency>
+                <dependency>
+                    <groupId>org.apache.cxf</groupId>
+                    <artifactId>cxf-rt-rs-client</artifactId>
+                    <version>${cxf.version}</version>
+                </dependency>
+                <dependency>
+                    <groupId>org.apache.cxf</groupId>
+                    <artifactId>cxf-rt-rs-service-description</artifactId>
+                    <version>${cxf.version}</version>
+                </dependency>
+                
 				
                 <dependency>
                     <groupId>org.codehaus.jettison</groupId>
diff --git a/pom.xml b/pom.xml
index 1ed56e2..cee0379 100644
--- a/pom.xml
+++ b/pom.xml
@@ -43,7 +43,7 @@
 		<sourceReleaseAssemblyDescriptor>source-release</sourceReleaseAssemblyDescriptor>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-		<cxf.version>2.7.18</cxf.version>
+		<cxf.version>3.2.6</cxf.version>
 		<springframework.version>3.2.18.RELEASE</springframework.version>
 		<apache.tomcat.version>9.0.30</apache.tomcat.version>
 		<jacoco.it.execution.data.file>${project.build.directory}/coverage-reports/jacoco-it.exec</jacoco.it.execution.data.file>
diff --git a/uddi-tck/src/test/java/org/apache/juddi/v3/bpel/BPEL_020_IntegrationTest.java b/uddi-tck/src/test/java/org/apache/juddi/v3/bpel/BPEL_020_IntegrationTest.java
index e295b47..51460de 100644
--- a/uddi-tck/src/test/java/org/apache/juddi/v3/bpel/BPEL_020_IntegrationTest.java
+++ b/uddi-tck/src/test/java/org/apache/juddi/v3/bpel/BPEL_020_IntegrationTest.java
@@ -123,7 +123,7 @@
                 @SuppressWarnings("unchecked")
                 Map<QName, PortType> portTypes = (Map<QName, PortType>) wsdlDefinition.getAllPortTypes();
                 String ns = wsdlDefinition.getTargetNamespace();
-                System.out.println("Namespace: " + ns);
+                logger.info("Namespace: " + ns);
 
                 boolean foundInterfaceOfTravelAgent=false;
                 boolean foundInterfaceOfCustomer=false;
@@ -133,8 +133,8 @@
                         QName qName = iterator.next();
                         String nsp = qName.getNamespaceURI();
                         String localpart = qName.getLocalPart();
-                        System.out.println("Namespace: " + nsp);
-                        System.out.println("LocalPart: " + localpart);
+                        logger.info("Namespace: " + nsp);
+                        logger.info("LocalPart: " + localpart);
                         if (localpart.equals("InterfaceOfTravelAgent"))
                                 foundInterfaceOfTravelAgent=true;
                         if (localpart.equals("InterfaceOfCustomer"))
@@ -168,7 +168,7 @@
                 URL serviceUrl = new URL("http://localhost:8080/helloworld");
                 bpel2UDDI.register(serviceName, portName, serviceUrl, wsdlDefinition);
 
-                System.out.println("DONE");
+                logger.info("DONE");
 
                 bpel2UDDI.unRegister(serviceName, portName, serviceUrl);
         }
diff --git a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/JUDDI_091_RMISubscriptionListenerIntegrationTest.java b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/JUDDI_091_RMISubscriptionListenerIntegrationTest.java
index 4d54cbd..c38f996 100644
--- a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/JUDDI_091_RMISubscriptionListenerIntegrationTest.java
+++ b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/JUDDI_091_RMISubscriptionListenerIntegrationTest.java
@@ -74,7 +74,7 @@
                         //bring up the RMISubscriptionListener
                         //random port
                         randomPort = 19800 + new Random().nextInt(99);
-                        System.out.println("RMI Random port=" + randomPort);
+                        logger.info("RMI Random port=" + randomPort);
                         //bring up the RMISubscriptionListener
                         //saw this once before
                         // internal error: ObjID already in use
diff --git a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/JUDDI_300_MultiNodeIntegrationTest.java b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/JUDDI_300_MultiNodeIntegrationTest.java
index db0ef96..ce48ab7 100644
--- a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/JUDDI_300_MultiNodeIntegrationTest.java
+++ b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/JUDDI_300_MultiNodeIntegrationTest.java
@@ -269,8 +269,7 @@
                         try {
                                 replicationNode1 = juddiApiServiceNode1.getReplicationNodes(rootNode1Token);
                         } catch (Exception ex) {
-                                System.out.println("Error getting replication config");
-                                ex.printStackTrace();
+                                logger.error("Error getting replication config",ex);
                                 Assert.fail(ex.getMessage());
 
                         }
diff --git a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_010_PublisherIntegrationTest.java b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_010_PublisherIntegrationTest.java
index 5e46f97..6f3b19e 100644
--- a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_010_PublisherIntegrationTest.java
+++ b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_010_PublisherIntegrationTest.java
@@ -15,6 +15,9 @@
 package org.apache.juddi.v3.tck;
 
 import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.juddi.v3.bpel.BPEL_010_IntegrationTest;
 import org.apache.juddi.v3.client.config.UDDIClient;
 import org.apache.juddi.v3.client.transport.Transport;
 import org.junit.AfterClass;
@@ -31,42 +34,52 @@
  * @author <a href="mailto:alexoree@apache.org">Alex O'Ree</a>
  */
 public class UDDI_010_PublisherIntegrationTest {
-	
-	private static UDDIClient manager;
 
-	@BeforeClass
-	public static void startRegistry() throws ConfigurationException {
-                if (!TckPublisher.isEnabled()) return;
-                if (!TckPublisher.isJUDDI()) return;
-		manager  = new UDDIClient();
-		manager.start();
+        private static Log logger = LogFactory.getLog(UDDI_010_PublisherIntegrationTest.class);
+
+        private static UDDIClient manager;
+
+        @BeforeClass
+        public static void startRegistry() throws ConfigurationException {
+                if (!TckPublisher.isEnabled()) {
+                        return;
+                }
+                if (!TckPublisher.isJUDDI()) {
+                        return;
+                }
+                manager = new UDDIClient();
+                manager.start();
                 JUDDI_300_MultiNodeIntegrationTest.testSetupReplicationConfig();
-	}
-	
-	@AfterClass
-	public static void stopRegistry() throws ConfigurationException {
-                if (!TckPublisher.isEnabled()) return;
-                if (!TckPublisher.isJUDDI()) return;
-		manager.stop();
-	}
-	
-     @Test
-     public void testAuthToken() {
-          Assume.assumeTrue(TckPublisher.isEnabled());
-             Assume.assumeTrue(TckPublisher.isUDDIAuthMode());
-	     try {
-	    	 Transport transport = manager.getTransport("uddiv3");
-        	 UDDISecurityPortType securityService = transport.getUDDISecurityService();
-        	 GetAuthToken getAuthToken = new GetAuthToken();
-        	 getAuthToken.setUserID(TckPublisher.getRootPublisherId());
-        	 getAuthToken.setCred(TckPublisher.getRootPassword());
-        	 AuthToken authToken = securityService.getAuthToken(getAuthToken);
-        	 System.out.println("Don't log auth tokens!");
-        	 Assert.assertNotNull(authToken);
-	     } catch (Exception e) {
-	         e.printStackTrace();
-	         Assert.fail();
-	     } 
-     }
-	
+        }
+
+        @AfterClass
+        public static void stopRegistry() throws ConfigurationException {
+                if (!TckPublisher.isEnabled()) {
+                        return;
+                }
+                if (!TckPublisher.isJUDDI()) {
+                        return;
+                }
+                manager.stop();
+        }
+
+        @Test
+        public void testAuthToken() {
+                Assume.assumeTrue(TckPublisher.isEnabled());
+                Assume.assumeTrue(TckPublisher.isUDDIAuthMode());
+                try {
+                        Transport transport = manager.getTransport("uddiv3");
+                        UDDISecurityPortType securityService = transport.getUDDISecurityService();
+                        GetAuthToken getAuthToken = new GetAuthToken();
+                        getAuthToken.setUserID(TckPublisher.getRootPublisherId());
+                        getAuthToken.setCred(TckPublisher.getRootPassword());
+                        AuthToken authToken = securityService.getAuthToken(getAuthToken);
+                        //logger.info("Don't log auth tokens!");
+                        Assert.assertNotNull(authToken);
+                } catch (Exception e) {
+                        e.printStackTrace();
+                        Assert.fail();
+                }
+        }
+
 }
diff --git a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_030_BusinessEntityLoadIntegrationTest.java b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_030_BusinessEntityLoadIntegrationTest.java
index f857441..57a5b5c 100644
--- a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_030_BusinessEntityLoadIntegrationTest.java
+++ b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_030_BusinessEntityLoadIntegrationTest.java
@@ -50,7 +50,7 @@
                 long startSave = System.currentTimeMillis();
                 tckBusinessJoe.saveJoePublisherBusinesses(authInfoJoe, numberOfBusinesses);
                 long saveDuration = System.currentTimeMillis() - startSave;
-                System.out.println("****************** Save " + numberOfBusinesses + " Joes Duration=" + saveDuration);
+                logger.info("****************** Save " + numberOfBusinesses + " Joes Duration=" + saveDuration);
 
                 long startFind = System.currentTimeMillis();
                 FindBusiness fs = new FindBusiness();
diff --git a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_080_SubscriptionIntegrationTest.java b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_080_SubscriptionIntegrationTest.java
index 8b706f1..53dec0a 100644
--- a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_080_SubscriptionIntegrationTest.java
+++ b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_080_SubscriptionIntegrationTest.java
@@ -166,8 +166,7 @@
         static final String MISSING_RESOURCE = "Can't find resource for bundle";
 
         static void HandleException(Exception ex) {
-                System.err.println("Error caught of type " + ex.getClass().getCanonicalName());
-                ex.printStackTrace();
+                logger.error("Error caught of type " + ex.getClass().getCanonicalName(),ex);
                 if (ex.getMessage() != null) {
                         Assert.assertFalse(ex.getMessage().contains(TRANS));
                         Assert.assertFalse(ex.getMessage().contains(MISSING_RESOURCE));
@@ -265,7 +264,7 @@
         @Test
         public void JUDDI_606_1() {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JUDDI_606_1");
+                logger.info("JUDDI_606_1");
                 Assume.assumeTrue(TckPublisher.isSubscriptionEnabled());
                 // Null expiration time
 
@@ -300,7 +299,7 @@
         @Test
         public void JUDDI_606_2() throws DatatypeConfigurationException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JUDDI_606_2");
+                logger.info("JUDDI_606_2");
                 Assume.assumeTrue(TckPublisher.isSubscriptionEnabled());
                 // invalid expiration time
                 DatatypeFactory df = DatatypeFactory.newInstance();
@@ -338,7 +337,7 @@
         @Test
         public void JUDDI_606_3() {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JUDDI_606_3");
+                logger.info("JUDDI_606_3");
                 Assume.assumeTrue(TckPublisher.isSubscriptionEnabled());
                 //
 
@@ -372,7 +371,7 @@
         @Test
         public void JUDDI_606_4() {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JUDDI_606_4");
+                logger.info("JUDDI_606_4");
                 //
                 Assume.assumeTrue(TckPublisher.isSubscriptionEnabled());
 
@@ -401,7 +400,7 @@
         @Test
         public void JUDDI_606_5() {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JUDDI_606_5");
+                logger.info("JUDDI_606_5");
                 //
                 Assume.assumeTrue(TckPublisher.isSubscriptionEnabled());
 
@@ -431,7 +430,7 @@
         @Test
         public void JUDDI_606_6() {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JUDDI_606_6");
+                logger.info("JUDDI_606_6");
                 //
                 Assume.assumeTrue(TckPublisher.isSubscriptionEnabled());
 
@@ -467,7 +466,7 @@
         @Test
         public void JUDDI_606_7() throws DatatypeConfigurationException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JUDDI_606_7");
+                logger.info("JUDDI_606_7");
                 Assume.assumeTrue(TckPublisher.isSubscriptionEnabled());
                 //
                 DatatypeFactory df = DatatypeFactory.newInstance();
@@ -508,7 +507,7 @@
         @Test
         public void JUDDI_606_8() {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JUDDI_606_8");
+                logger.info("JUDDI_606_8");
                 Assume.assumeTrue(TckPublisher.isSubscriptionEnabled());
                 //
 
@@ -556,7 +555,7 @@
         @Test
         public void JUDDI_606_9() throws DatatypeConfigurationException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JUDDI_606_9");
+                logger.info("JUDDI_606_9");
                 Assume.assumeTrue(TckPublisher.isSubscriptionEnabled());
                 //
 
@@ -594,7 +593,7 @@
         @Test
         public void JUDDI_606_10() throws DatatypeConfigurationException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JUDDI_606_10");
+                logger.info("JUDDI_606_10");
                 Assume.assumeTrue(TckPublisher.isSubscriptionEnabled());
                 //
                 try {
@@ -641,7 +640,7 @@
         @Test
         public void JUDDI_606_11() throws DatatypeConfigurationException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JUDDI_606_11");
+                logger.info("JUDDI_606_11");
                 Assume.assumeTrue(TckPublisher.isSubscriptionEnabled());
 
                 String key = null;
@@ -703,7 +702,7 @@
         @Test
         public void JUDDI_606_12() throws DatatypeConfigurationException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JUDDI_606_12");
+                logger.info("JUDDI_606_12");
                 Assume.assumeTrue(TckPublisher.isSubscriptionEnabled());
                 //
                 String key = null;
@@ -768,7 +767,7 @@
         @Test
         public void JUDDI_606_13() throws DatatypeConfigurationException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JUDDI_606_13");
+                logger.info("JUDDI_606_13");
                 Assume.assumeTrue(TckPublisher.isSubscriptionEnabled());
 
                 String key = null;
@@ -836,7 +835,7 @@
         @Test
         public void JUDDI_606_14() throws DatatypeConfigurationException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JUDDI_606_14");
+                logger.info("JUDDI_606_14");
                 Assume.assumeTrue(TckPublisher.isSubscriptionEnabled());
 
                 DatatypeFactory df = DatatypeFactory.newInstance();
@@ -907,7 +906,7 @@
         @Test
         public void JUDDI_606_15() throws DatatypeConfigurationException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JUDDI_606_15");
+                logger.info("JUDDI_606_15");
                 Assume.assumeTrue(TckPublisher.isSubscriptionEnabled());
 
                 DatatypeFactory df = DatatypeFactory.newInstance();
@@ -996,7 +995,7 @@
         @Test
         public void JUDDI_606_16() throws DatatypeConfigurationException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JUDDI_606_16");
+                logger.info("JUDDI_606_16");
                 Assume.assumeTrue(TckPublisher.isSubscriptionEnabled());
 
                 DatatypeFactory df = DatatypeFactory.newInstance();
@@ -1095,7 +1094,7 @@
         @Test
         public void JUDDI_606_17() throws DatatypeConfigurationException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JUDDI_606_17");
+                logger.info("JUDDI_606_17");
                 Assume.assumeTrue(TckPublisher.isSubscriptionEnabled());
 
                 DatatypeFactory df = DatatypeFactory.newInstance();
diff --git a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_HttpExternalTest.java b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_HttpExternalTest.java
index 1aa2e5d..1b90863 100644
--- a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_HttpExternalTest.java
+++ b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_HttpExternalTest.java
@@ -59,13 +59,13 @@
                 port = 9600;
                 //bring up the TCK SubscriptionListener
                 String httpEndpoint = "http://" + hostname + ":" + port + "/tcksubscriptionlistener";
-                System.out.println("Bringing up SubscriptionListener endpoint at " + httpEndpoint);
+                logger.info("Bringing up SubscriptionListener endpoint at " + httpEndpoint);
                 endPoint = Endpoint.publish(httpEndpoint, new UDDISubscriptionListenerImpl());
                 int count = 0;
                 while (!endPoint.isPublished()) {
                         port = 9600 + new Random().nextInt(99);
                         httpEndpoint = "http://" + hostname + ":" + port + "/tcksubscriptionlistener";
-                        System.out.println("Bringing up SubscriptionListener endpoint at " + httpEndpoint);
+                        logger.info("Bringing up SubscriptionListener endpoint at " + httpEndpoint);
                         endPoint = Endpoint.publish(httpEndpoint, new UDDISubscriptionListenerImpl());
                         count++;
                         if (count > 10) {
diff --git a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_HttpMavenIntegrationTest.java b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_HttpMavenIntegrationTest.java
index 630f055..5508985 100644
--- a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_HttpMavenIntegrationTest.java
+++ b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_HttpMavenIntegrationTest.java
@@ -55,13 +55,13 @@
                 //bring up the TCK SubscriptionListener
                 port = 9600;
                 String httpEndpoint = "http://" + hostname + ":" + port + "/tcksubscriptionlistener";
-                System.out.println("Bringing up SubscriptionListener endpoint at " + httpEndpoint);
+                logger.info("Bringing up SubscriptionListener endpoint at " + httpEndpoint);
                 endPoint = Endpoint.publish(httpEndpoint, new UDDISubscriptionListenerImpl());
                 int count = 0;
                 while (!endPoint.isPublished()) {
                         port = 9600 + new Random().nextInt(99);
                         httpEndpoint = "http://" + hostname + ":" + port + "/tcksubscriptionlistener";
-                        System.out.println("Bringing up SubscriptionListener endpoint at " + httpEndpoint);
+                        logger.info("Bringing up SubscriptionListener endpoint at " + httpEndpoint);
                         endPoint = Endpoint.publish(httpEndpoint, new UDDISubscriptionListenerImpl());
                         count++;
                         if (count > 10) {
@@ -77,7 +77,7 @@
                                 Thread.sleep(1000);
                         } catch (InterruptedException ex) {
                         }
-                        System.out.println(".");
+                        logger.info(".");
                         //if (UDDISubscriptionListenerImpl.notificationCount > 0) {                        }
                 }
                 logger.info("RX " + UDDISubscriptionListenerImpl.notificationCount + " notifications");
diff --git a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_RMIIntegrationTest.java b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_RMIIntegrationTest.java
index a9268cb..b07e138 100644
--- a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_RMIIntegrationTest.java
+++ b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_RMIIntegrationTest.java
@@ -65,7 +65,7 @@
                         try {
                                 count++;
                                 randomPort = 19800 + new Random().nextInt(99);
-                                System.out.println("RMI Random port=" + randomPort);
+                                logger.info("RMI Random port=" + randomPort);
                                 //bring up the RMISubscriptionListener
                                 URI rmiEndPoint = new URI("rmi://localhost:" + randomPort + "/tck/rmisubscriptionlistener");
                                 registry = LocateRegistry.createRegistry(rmiEndPoint.getPort());
@@ -96,7 +96,7 @@
                                 Thread.sleep(1000);
                         } catch (InterruptedException ex) {
                         }
-                        System.out.println(".");
+                        logger.info(".");
                         //if (UDDISubscriptionListenerImpl.notificationCount > 0) {                        }
                 }
                 logger.info("RX " + UDDISubscriptionListenerImpl.notificationCount + " notifications");
diff --git a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_Smtp_ExternalTest.java b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_Smtp_ExternalTest.java
index 08f1b20..adc8722 100644
--- a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_Smtp_ExternalTest.java
+++ b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_090_Smtp_ExternalTest.java
@@ -159,7 +159,7 @@
                                         }
                                         int c;
                                         StringBuilder sb = new StringBuilder();
-                                        System.out.println("Message : ");
+                                        logger.info("Message : ");
                                         while ((c = is.read()) != -1) {
                                                 sb.append(c);
                                                 System.out.write(c);
diff --git a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_140_NegativePublicationIntegrationTest.java b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_140_NegativePublicationIntegrationTest.java
index 90ef51d..5f76144 100644
--- a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_140_NegativePublicationIntegrationTest.java
+++ b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_140_NegativePublicationIntegrationTest.java
@@ -159,8 +159,7 @@
 
         static void HandleException(Exception ex) {
                 if (logger.isDebugEnabled()) {
-                        System.err.println("Error caught of type " + ex.getClass().getCanonicalName());
-                        ex.printStackTrace();
+                        logger.error("Error caught of type " + ex.getClass().getCanonicalName(),ex);
                 }
                 Assert.assertFalse(ex.getMessage().contains(TRANS));
                 Assert.assertFalse(ex.getMessage().contains(MISSING_RESOURCE));
@@ -178,7 +177,7 @@
         @Test(expected = SOAPFaultException.class)
         public void BusinessKeyTooLongTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BusinessKeyTooLongTest");
+                logger.info("BusinessKeyTooLongTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -203,7 +202,7 @@
         @Test(expected = SOAPFaultException.class)
         public void BusinessNameTooShortTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BusinessNameTooShortTest");
+                logger.info("BusinessNameTooShortTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -227,7 +226,7 @@
         @Test
         public void BusinessNameMinLengthTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BusinessNameMinLengthTest");
+                logger.info("BusinessNameMinLengthTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -245,7 +244,7 @@
         @Test(expected = SOAPFaultException.class)
         public void BusinessNameTooLongTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BusinessNameTooLongTest");
+                logger.info("BusinessNameTooLongTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -271,7 +270,7 @@
         @Test
         public void BusinessNameMaxLengthTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BusinessNameMaxLengthTest");
+                logger.info("BusinessNameMaxLengthTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -290,7 +289,7 @@
         @Test(expected = SOAPFaultException.class)
         public void BusinessNameLangTooLongTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BusinessNameLangTooLongTest");
+                logger.info("BusinessNameLangTooLongTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -318,7 +317,7 @@
         @Test
         public void BusinessNameLangMaxLengthTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BusinessNameLangMaxLengthTest");
+                logger.info("BusinessNameLangMaxLengthTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -339,7 +338,7 @@
         @Test(expected = SOAPFaultException.class)
         public void BusinessDescriptionLangTooLongTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BusinessDescriptionLangTooLongTest");
+                logger.info("BusinessDescriptionLangTooLongTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -370,7 +369,7 @@
         @Test
         public void BusinessDescriptionLangMaxLengthTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BusinessDescriptionLangMaxLengthTest");
+                logger.info("BusinessDescriptionLangMaxLengthTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -394,7 +393,7 @@
         @Test
         public void BusinessDescriptionMaxLengthTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BusinessDescriptionMaxLengthTest");
+                logger.info("BusinessDescriptionMaxLengthTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -417,7 +416,7 @@
         @Test(expected = SOAPFaultException.class)
         public void BusinessDescriptionTooLongLengthTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BusinessDescriptionTooLongLengthTest");
+                logger.info("BusinessDescriptionTooLongLengthTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -446,7 +445,7 @@
         @Test(expected = SOAPFaultException.class)
         public void BusinessDiscoveryURLTooLongTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BusinessDiscoveryURLTooLongTest");
+                logger.info("BusinessDiscoveryURLTooLongTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -476,7 +475,7 @@
         @Test
         public void BusinessDiscoveryURLMaxLengthTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BusinessDiscoveryURLMaxLengthTest");
+                logger.info("BusinessDiscoveryURLMaxLengthTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -500,7 +499,7 @@
         @Test
         public void BusinessDiscoveryURLMaxLengthMaxUseTypeTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BusinessDiscoveryURLMaxLengthMaxUseTypeTest");
+                logger.info("BusinessDiscoveryURLMaxLengthMaxUseTypeTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -525,7 +524,7 @@
         @Test(expected = SOAPFaultException.class)
         public void BusinessDiscoveryURLMaxLengthToolongUseTypeTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BusinessDiscoveryURLMaxLengthToolongUseTypeTest");
+                logger.info("BusinessDiscoveryURLMaxLengthToolongUseTypeTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -555,7 +554,7 @@
         @Test
         public void ContactMaxEmailMaxUseTypeTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ContactMaxEmailMaxUseTypeTest");
+                logger.info("ContactMaxEmailMaxUseTypeTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -781,7 +780,7 @@
         @Test(expected = SOAPFaultException.class)
         public void ContactTooLongEmailMaxUseTypeTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ContactTooLongEmailMaxUseTypeTest");
+                logger.info("ContactTooLongEmailMaxUseTypeTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -807,7 +806,7 @@
         @Test(expected = SOAPFaultException.class)
         public void ContactMaxEmailToolongUseTypeTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ContactMaxEmailToolongUseTypeTest");
+                logger.info("ContactMaxEmailToolongUseTypeTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -836,7 +835,7 @@
         @Test
         public void ContactDescriptionMaxLangMaxtest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ContactDescriptionMaxLangMaxtest");
+                logger.info("ContactDescriptionMaxLangMaxtest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -857,7 +856,7 @@
         @Test(expected = SOAPFaultException.class)
         public void ContactDescriptionTooLongtest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ContactDescriptionTooLongtest");
+                logger.info("ContactDescriptionTooLongtest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -883,7 +882,7 @@
         @Test(expected = SOAPFaultException.class)
         public void ContactDescriptionLangTooLongTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ContactDescriptionLangTooLongTest");
+                logger.info("ContactDescriptionLangTooLongTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -909,7 +908,7 @@
         @Test
         public void ContactPhoneMaxLentest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ContactPhoneMaxLentest");
+                logger.info("ContactPhoneMaxLentest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -930,7 +929,7 @@
         @Test(expected = SOAPFaultException.class)
         public void ContactPhoneTooLongtest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ContactPhoneTooLongtest");
+                logger.info("ContactPhoneTooLongtest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -955,7 +954,7 @@
         @Test
         public void ContactPhoneMaxLongtest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ContactPhoneMaxLongtest");
+                logger.info("ContactPhoneMaxLongtest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -974,7 +973,7 @@
         @Test
         public void ContactPhoneMaxLongMaxUseTypetest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ContactPhoneMaxLongMaxUseTypetest");
+                logger.info("ContactPhoneMaxLongMaxUseTypetest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -994,7 +993,7 @@
         @Test(expected = SOAPFaultException.class)
         public void ContactPhoneUseTypeTooLongtest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ContactPhoneUseTypeTooLongtest");
+                logger.info("ContactPhoneUseTypeTooLongtest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1019,7 +1018,7 @@
         @Test
         public void ContactMaxAddressFFFFFFFtest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ContactMaxAddressFFFFFFFtest");
+                logger.info("ContactMaxAddressFFFFFFFtest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1040,7 +1039,7 @@
         @Test(expected = SOAPFaultException.class)
         public void ContactMaxAddressTFFFFFFtest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ContactMaxAddressTFFFFFFtest");
+                logger.info("ContactMaxAddressTFFFFFFtest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1066,7 +1065,7 @@
         @Test(expected = SOAPFaultException.class)
         public void ContactMaxAddressFTFFFFFtest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ContactMaxAddressFTFFFFFtest");
+                logger.info("ContactMaxAddressFTFFFFFtest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1092,7 +1091,7 @@
         @Test(expected = SOAPFaultException.class)
         public void ContactMaxAddressFFTFFFFtest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ContactMaxAddressFFTFFFFtest");
+                logger.info("ContactMaxAddressFFTFFFFtest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1118,7 +1117,7 @@
         @Test(expected = SOAPFaultException.class)
         public void ContactMaxAddressFFFTFFFtest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ContactMaxAddressFFFTFFFtest");
+                logger.info("ContactMaxAddressFFFTFFFtest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1143,7 +1142,7 @@
         @Test(expected = SOAPFaultException.class)
         public void ContactMaxAddressFFFFTFFtest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ContactMaxAddressFFFFTFFtest");
+                logger.info("ContactMaxAddressFFFFTFFtest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1169,7 +1168,7 @@
         @Test(expected = SOAPFaultException.class)
         public void ContactMaxAddressFFFFFTFtest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ContactMaxAddressFFFFFTFtest");
+                logger.info("ContactMaxAddressFFFFFTFtest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1195,7 +1194,7 @@
         @Test(expected = SOAPFaultException.class)
         public void ContactMaxAddressFFFFFFTtest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ContactMaxAddressFFFFFFTtest");
+                logger.info("ContactMaxAddressFFFFFFTtest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1221,7 +1220,7 @@
         @Test
         public void KeyReferenceMax() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("KeyReferenceMax");
+                logger.info("KeyReferenceMax");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1246,7 +1245,7 @@
         @Test(expected = SOAPFaultException.class)
         public void KeyReferenceKeyTooLong() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("KeyReferenceKeyTooLong");
+                logger.info("KeyReferenceKeyTooLong");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1277,7 +1276,7 @@
         @Test(expected = SOAPFaultException.class)
         public void KeyReferenceNameTooLong() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("KeyReferenceNameTooLong");
+                logger.info("KeyReferenceNameTooLong");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1308,7 +1307,7 @@
         @Test(expected = SOAPFaultException.class)
         public void KeyReferenceValueTooLong() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("KeyReferenceValueTooLong");
+                logger.info("KeyReferenceValueTooLong");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1339,7 +1338,7 @@
         @Test(expected = SOAPFaultException.class)
         public void ServiceNameTooLongTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ServiceNameTooLongTest");
+                logger.info("ServiceNameTooLongTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1371,7 +1370,7 @@
         @Test
         public void ServiceNameMaxLenTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ServiceNameMaxLenTest");
+                logger.info("ServiceNameMaxLenTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1397,7 +1396,7 @@
         @Test
         public void ServiceNameMaxLangLenTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ServiceNameMaxLangLenTest");
+                logger.info("ServiceNameMaxLangLenTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1424,7 +1423,7 @@
         @Test(expected = SOAPFaultException.class)
         public void ServiceNameTooLongLangTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ServiceNameTooLongLangTest");
+                logger.info("ServiceNameTooLongLangTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1457,7 +1456,7 @@
         @Test(expected = SOAPFaultException.class)
         public void ServiceDescTooLongTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ServiceDescTooLongTest");
+                logger.info("ServiceDescTooLongTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1492,7 +1491,7 @@
         @Test(expected = SOAPFaultException.class)
         public void ServiceDescLangTooLongTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ServiceDescLangTooLongTest");
+                logger.info("ServiceDescLangTooLongTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1528,7 +1527,7 @@
         @Test
         public void ServiceDescMaxLangTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ServiceDescMaxLangTest");
+                logger.info("ServiceDescMaxLangTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1559,7 +1558,7 @@
         @Test
         public void ServiceMaxCatBagTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ServiceDescMaxLangTest");
+                logger.info("ServiceDescMaxLangTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1595,7 +1594,7 @@
         @Test(expected = SOAPFaultException.class)
         public void ServiceMaxCatBagTooBigTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ServiceMaxCatBagTooBigTest");
+                logger.info("ServiceMaxCatBagTooBigTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1637,7 +1636,7 @@
         @Test(expected = SOAPFaultException.class)
         public void BindingTemplateNoAccessPointTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BindingTemplateNoAccessPointTest");
+                logger.info("BindingTemplateNoAccessPointTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1674,7 +1673,7 @@
         @Test
         public void BindingTemplateAccessPointMaxUseTypeTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BindingTemplateAccessPointMaxUseTypeTest");
+                logger.info("BindingTemplateAccessPointMaxUseTypeTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1709,7 +1708,7 @@
         @Test(expected = SOAPFaultException.class)
         public void BindingTemplateAccessPointUseTypeTooLongTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BindingTemplateAccessPointUseTypeTooLongTest");
+                logger.info("BindingTemplateAccessPointUseTypeTooLongTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1750,7 +1749,7 @@
         @Test(expected = SOAPFaultException.class)
         public void BindingTemplateAccessPointValueTooLongTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BindingTemplateAccessPointValueTooLongTest");
+                logger.info("BindingTemplateAccessPointValueTooLongTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1791,7 +1790,7 @@
         @Test
         public void BindingTemplateAccessPointMaxValueTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BindingTemplateAccessPointMaxValueTest");
+                logger.info("BindingTemplateAccessPointMaxValueTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1826,7 +1825,7 @@
         @Test(expected = SOAPFaultException.class)
         public void BindingTemplateNoAccessPointNoRedirectorTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BindingTemplateNoAccessPointNoRedirectorTest");
+                logger.info("BindingTemplateNoAccessPointNoRedirectorTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1865,7 +1864,7 @@
         @Test(expected = SOAPFaultException.class)
         public void BindingTemplateAccessPointAndRedirectorTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BindingTemplateAccessPointAndRedirectorTest");
+                logger.info("BindingTemplateAccessPointAndRedirectorTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -1908,7 +1907,7 @@
         @Test
         public void BindingTemplateHostRedirectorReferencalIntegritytest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BindingTemplateHostRedirectorReferencalIntegritytest");
+                logger.info("BindingTemplateHostRedirectorReferencalIntegritytest");
                 //TODO create a binding template, get the key, use the key as the specific redirector
                 String url = "http://juddi.apache.org";
                 SaveBusiness sb = new SaveBusiness();
@@ -1936,7 +1935,7 @@
 
                 sb.getBusinessEntity().add(be);
 
-                System.out.println("Saving the business with the first service");
+                logger.info("Saving the business with the first service");
                 BusinessDetail saveBusiness = publicationJoe.saveBusiness(sb);
 
                 TckCommon.PrintBusinessDetails(saveBusiness.getBusinessEntity());
@@ -1958,7 +1957,7 @@
                 sb.getBusinessEntity().add(saveBusiness.getBusinessEntity().get(0));
 
                 //This SHOULD be allowed
-                System.out.println("Saving the business with the first and second service as a host redirect");
+                logger.info("Saving the business with the first and second service as a host redirect");
                 saveBusiness = publicationJoe.saveBusiness(sb);
                 TckCommon.PrintBusinessDetails(saveBusiness.getBusinessEntity());
 
@@ -1971,7 +1970,7 @@
         @Test
         public void BindingTemplateAccessPointAsBindingTemplateReferencalIntegritytest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BindingTemplateAccessPointAsBindingTemplateReferencalIntegritytest");
+                logger.info("BindingTemplateAccessPointAsBindingTemplateReferencalIntegritytest");
                 //create a binding template, get the key, use the key as the specific redirector
                 String url = "http://juddi.apache.org";
                 SaveBusiness sb = new SaveBusiness();
@@ -1998,7 +1997,7 @@
                 be.getBusinessServices().getBusinessService().add(bs);
 
                 sb.getBusinessEntity().add(be);
-                System.out.println("Saving the business with the first service");
+                logger.info("Saving the business with the first service");
                 BusinessDetail saveBusiness = publicationJoe.saveBusiness(sb);
 
                 TckCommon.PrintBusinessDetails(saveBusiness.getBusinessEntity());
@@ -2021,7 +2020,7 @@
                 sb.getBusinessEntity().add(saveBusiness.getBusinessEntity().get(0));
 
                 //This SHOULD be allowed
-                System.out.println("Saving the business with the first and second service as a host redirect");
+                logger.info("Saving the business with the first and second service as a host redirect");
                 saveBusiness = publicationJoe.saveBusiness(sb);
                 TckCommon.PrintBusinessDetails(saveBusiness.getBusinessEntity());
 
@@ -2034,7 +2033,7 @@
         @Test(expected = SOAPFaultException.class)
         public void BindingTemplateAccessPointAsBindingTemplateINVALIDReferencalIntegritytest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BindingTemplateAccessPointAsBindingTemplateINVALIDReferencalIntegritytest");
+                logger.info("BindingTemplateAccessPointAsBindingTemplateINVALIDReferencalIntegritytest");
                 //create a binding template, get the key, use the key as the specific redirector
                 SaveBusiness sb;
                 try {
@@ -2077,7 +2076,7 @@
         @Test(expected = SOAPFaultException.class)
         public void BindingTemplateHostRedirectorTooLongTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BindingTemplateHostRedirectorTooLongTest");
+                logger.info("BindingTemplateHostRedirectorTooLongTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -2117,7 +2116,7 @@
         @Test
         public void BindingTemplateAccessPointMaxLengthTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BindingTemplateAccessPointMaxLengthTest");
+                logger.info("BindingTemplateAccessPointMaxLengthTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -2151,7 +2150,7 @@
         @Test(expected = SOAPFaultException.class)
         public void BindingTemplateAccessPointTooLongTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BindingTemplateAccessPointTooLongTest");
+                logger.info("BindingTemplateAccessPointTooLongTest");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -2196,7 +2195,7 @@
         @Test
         public void CreateKeyGenMaxLengthTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("CreateKeyGenMaxLengthTest");
+                logger.info("CreateKeyGenMaxLengthTest");
 
                 SaveTModel st = new SaveTModel();
                 st.setAuthInfo(authInfoJoe);
@@ -2226,7 +2225,7 @@
         @Test(expected = SOAPFaultException.class)
         public void CreateKeyGenTooLongTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("CreateKeyGenTooLongTest");
+                logger.info("CreateKeyGenTooLongTest");
 
                 SaveTModel st = new SaveTModel();
                 st.setAuthInfo(authInfoJoe);
@@ -2257,7 +2256,7 @@
         @Test(expected = SOAPFaultException.class)
         public void CreateKeyGenKeyDescriptionTooLongTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("CreateKeyGenKeyDescriptionTooLongTest");
+                logger.info("CreateKeyGenKeyDescriptionTooLongTest");
 
                 SaveTModel st = new SaveTModel();
                 st.setAuthInfo(authInfoJoe);
@@ -2289,7 +2288,7 @@
         @Test(expected = SOAPFaultException.class)
         public void CreateKeyGenKeyDescriptionLangTooLongTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("CreateKeyGenKeyDescriptionTooLongTest");
+                logger.info("CreateKeyGenKeyDescriptionTooLongTest");
 
                 SaveTModel st = new SaveTModel();
                 st.setAuthInfo(authInfoJoe);
@@ -2325,7 +2324,7 @@
         @Test(expected = SOAPFaultException.class)
         public void CreateKeyGenNameLangTooLongTest() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("CreateKeyGenNameLangTooLongTest");
+                logger.info("CreateKeyGenNameLangTooLongTest");
 
                 SaveTModel st = new SaveTModel();
                 st.setAuthInfo(authInfoJoe);
@@ -2363,7 +2362,7 @@
         @Test(expected = SOAPFaultException.class)
         public void CreateTmodelnoKeyGen() throws DispositionReportFaultMessage, RemoteException {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("CreateTmodelnoKeyGen");
+                logger.info("CreateTmodelnoKeyGen");
 
                 SaveTModel st = new SaveTModel();
                 st.setAuthInfo(authInfoJoe);
@@ -2388,7 +2387,7 @@
         @Test
         public void BindingTemplateTmodelInstanceInfoTest() {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("BindingTemplateTmodelInstanceInfoTest");
+                logger.info("BindingTemplateTmodelInstanceInfoTest");
                 //create a key gen
                 //create a tmodels
                 //create a business, service, binding with tmodel instance infos
diff --git a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_141_JIRAIntegrationTest.java b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_141_JIRAIntegrationTest.java
index f7bb216..774b947 100644
--- a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_141_JIRAIntegrationTest.java
+++ b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_141_JIRAIntegrationTest.java
@@ -171,8 +171,7 @@
         }
 
         static void HandleException(Exception ex) {
-                System.err.println("Error caught of type " + ex.getClass().getCanonicalName());
-                ex.printStackTrace();
+                logger.error("Error caught of type " + ex.getClass().getCanonicalName(),ex);
                 if (ex.getMessage() != null) {
                         Assert.assertFalse(ex.getMessage().contains(TRANS));
                         Assert.assertFalse(ex.getMessage().contains(MISSING_RESOURCE));
@@ -194,7 +193,7 @@
                 //find business without lang defined, expecting 2 results
                 List<String> businesskeysToDelete = new ArrayList<String>();
                 String failuremsg = "";
-                System.out.println("JUDDI_JIRA_571_Part1_Test");
+                logger.info("JUDDI_JIRA_571_Part1_Test");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -274,7 +273,7 @@
                 if (failuremsg.length() > 0) {
                         Assert.fail(failuremsg);
                 }
-                System.out.println("Pass");
+                logger.info("Pass");
 
         }
 
@@ -289,7 +288,7 @@
                 List<String> businesskeysToDelete = new ArrayList<String>();
                 List<String> targetServiceKeys = new ArrayList<String>();
                 String failuremsg = "";
-                System.out.println("JUDDI_JIRA_571_Part2_Test");
+                logger.info("JUDDI_JIRA_571_Part2_Test");
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
                 BusinessEntity be = new BusinessEntity();
@@ -377,7 +376,7 @@
                 if (failuremsg.length() > 0) {
                         Assert.fail(failuremsg);
                 }
-                System.out.println("Pass");
+                logger.info("Pass");
 
         }
 
@@ -392,7 +391,7 @@
                 List<String> businesskeysToDelete = new ArrayList<String>();
 
                 String failuremsg = "";
-                System.out.println("JUDDI_571_Part3_Test");
+                logger.info("JUDDI_571_Part3_Test");
                 SaveTModel sb = new SaveTModel();
                 sb.setAuthInfo(authInfoJoe);
                 TModel be = new TModel();
@@ -472,7 +471,7 @@
                 if (failuremsg.length() > 0) {
                         Assert.fail(failuremsg);
                 }
-                System.out.println("Pass");
+                logger.info("Pass");
 
         }
 
@@ -486,7 +485,7 @@
                 List<String> businesskeysToDelete = new ArrayList<String>();
 
                 String failuremsg = "";
-                System.out.println("JUDDI_574");
+                logger.info("JUDDI_574");
                 SaveTModel sb = new SaveTModel();
                 sb.setAuthInfo(authInfoJoe);
                 TModel be = new TModel();
@@ -499,7 +498,7 @@
                 try {
                         TModelDetail saveTModel = publicationJoe.saveTModel(sb);
                         businesskeysToDelete.add(saveTModel.getTModel().get(0).getTModelKey());
-                        System.out.println("tmodel created with key " + saveTModel.getTModel().get(0).getTModelKey());
+                        logger.info("tmodel created with key " + saveTModel.getTModel().get(0).getTModelKey());
                 } catch (Exception ex) {
                         HandleException(ex);
                         Assert.fail("unexpected failure");
@@ -540,7 +539,7 @@
                 if (failuremsg.length() > 0) {
                         Assert.fail(failuremsg);
                 }
-                System.out.println("Pass");
+                logger.info("Pass");
 
         }
 
@@ -553,7 +552,7 @@
         public void JUDDI_590() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 //create two businesses
-                System.out.println("JUDDI_590");
+                logger.info("JUDDI_590");
 
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
@@ -707,7 +706,7 @@
         public void JUDDI_590_1() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 //create two businesses
-                System.out.println("JUDDI_590_1");
+                logger.info("JUDDI_590_1");
 
                 SaveBusiness sb = new SaveBusiness();
                 sb.setAuthInfo(authInfoJoe);
@@ -831,7 +830,7 @@
         @Test
         public void JIRA_597() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JIRA_597");
+                logger.info("JIRA_597");
 
                 int port = 7000;
                 String hostname = TckPublisher.getProperties().getProperty("bindaddress");
@@ -950,7 +949,7 @@
         @Test
         public void JIRA_596() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JIRA_596");
+                logger.info("JIRA_596");
                 int port = 9000;
 
                 String hostname = TckPublisher.getProperties().getProperty("bindaddress");
@@ -1070,7 +1069,7 @@
         @Test
         public void JIRA_575_BT() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JIRA_575_BT");
+                logger.info("JIRA_575_BT");
                 String madeupTmodel = "uddi" + UUID.randomUUID().toString();
                 GetTModelDetail gtm = new GetTModelDetail();
                 gtm.setAuthInfo(authInfoJoe);
@@ -1118,7 +1117,7 @@
         @Test
         public void JIRA_575_KR_Biz() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JIRA_575_KR_Biz");
+                logger.info("JIRA_575_KR_Biz");
                 String madeupTmodel = "uddi" + UUID.randomUUID().toString();
                 GetTModelDetail gtm = new GetTModelDetail();
                 gtm.setAuthInfo(authInfoJoe);
@@ -1152,7 +1151,7 @@
         @Test
         public void JIRA_575_IDENT_Biz() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JIRA_575_IDENT_Biz");
+                logger.info("JIRA_575_IDENT_Biz");
                 String madeupTmodel = "uddi" + UUID.randomUUID().toString();
                 GetTModelDetail gtm = new GetTModelDetail();
                 gtm.setAuthInfo(authInfoJoe);
@@ -1186,7 +1185,7 @@
         @Test
         public void JIRA_575_KR_TMODEL() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JIRA_575_KR_TMODEL");
+                logger.info("JIRA_575_KR_TMODEL");
                 String madeupTmodel = "uddi" + UUID.randomUUID().toString();
                 GetTModelDetail gtm = new GetTModelDetail();
                 gtm.setAuthInfo(authInfoJoe);
@@ -1216,7 +1215,7 @@
         @Test
         public void JIRA_575_KRGRP_TMODEL() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JIRA_575_KRGRP_TMODEL");
+                logger.info("JIRA_575_KRGRP_TMODEL");
                 String madeupTmodel = "uddi" + UUID.randomUUID().toString();
                 GetTModelDetail gtm = new GetTModelDetail();
                 gtm.setAuthInfo(authInfoJoe);
@@ -1247,7 +1246,7 @@
         @Test
         public void JIRA_575_KRGRP_Biz() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JIRA_575_KRGRP_Biz");
+                logger.info("JIRA_575_KRGRP_Biz");
                 String madeupTmodel = "uddi" + UUID.randomUUID().toString();
                 GetTModelDetail gtm = new GetTModelDetail();
                 gtm.setAuthInfo(authInfoJoe);
@@ -1284,7 +1283,7 @@
         @Test
         public void JIRA_575_KRGRP_PA() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JIRA_575_KRGRP_PA");
+                logger.info("JIRA_575_KRGRP_PA");
                 String madeupTmodel = "uddi" + UUID.randomUUID().toString();
                 GetTModelDetail gtm = new GetTModelDetail();
                 gtm.setAuthInfo(authInfoJoe);
@@ -1328,7 +1327,7 @@
         @Test
         public void JIRA_575_SVC_KR() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JIRA_575_SVC_KR");
+                logger.info("JIRA_575_SVC_KR");
                 String madeupTmodel = "uddi" + UUID.randomUUID().toString();
                 GetTModelDetail gtm = new GetTModelDetail();
                 gtm.setAuthInfo(authInfoJoe);
@@ -1367,7 +1366,7 @@
         @Test
         public void JIRA_575_SVC_KRGRP() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("JIRA_575_SVC_KRGRP");
+                logger.info("JIRA_575_SVC_KRGRP");
                 String madeupTmodel = "uddi" + UUID.randomUUID().toString();
                 GetTModelDetail gtm = new GetTModelDetail();
                 gtm.setAuthInfo(authInfoJoe);
diff --git a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_142_DigitalSignatureIntegrationTest.java b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_142_DigitalSignatureIntegrationTest.java
index bbaed89..b77b05a 100644
--- a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_142_DigitalSignatureIntegrationTest.java
+++ b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_142_DigitalSignatureIntegrationTest.java
@@ -814,7 +814,7 @@
                         BusinessDetail businessDetail = inquiryJoe.getBusinessDetail(gsb);
                         PrintUDDI<BusinessEntity> printer = new PrintUDDI<BusinessEntity>();
                         if (TckCommon.isDebug()) {
-                                System.out.println(printer.print(businessDetail.getBusinessEntity().get(0)));
+                                logger.info(printer.print(businessDetail.getBusinessEntity().get(0)));
                         }
                         AtomicReference<String> msg = new AtomicReference<String>();
                         boolean b = ds.verifySignedUddiEntity(businessDetail.getBusinessEntity().get(0), msg);
@@ -855,7 +855,7 @@
                         BusinessDetail businessDetail = inquiryJoe.getBusinessDetail(gsb);
                         PrintUDDI<BusinessEntity> printer = new PrintUDDI<BusinessEntity>();
                         if (TckCommon.isDebug()) {
-                                System.out.println(printer.print(businessDetail.getBusinessEntity().get(0)));
+                                logger.info(printer.print(businessDetail.getBusinessEntity().get(0)));
                         }
                         AtomicReference<String> msg = new AtomicReference<String>();
                         boolean b = ds.verifySignedUddiEntity(businessDetail.getBusinessEntity().get(0), msg);
diff --git a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_150_CustodyTransferIntegrationTest.java b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_150_CustodyTransferIntegrationTest.java
index 0f8051b..27aa4f8 100644
--- a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_150_CustodyTransferIntegrationTest.java
+++ b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_150_CustodyTransferIntegrationTest.java
@@ -145,8 +145,7 @@
         }
 
         static void HandleException(Exception ex) {
-                System.err.println("Error caught of type " + ex.getClass().getCanonicalName());
-                ex.printStackTrace();
+                logger.error("Error caught of type " + ex.getClass().getCanonicalName(),ex);
                 if (ex.getMessage() != null) {
                         Assert.assertFalse(ex.getMessage().contains(TRANS));
                         Assert.assertFalse(ex.getMessage().contains(MISSING_RESOURCE));
@@ -167,7 +166,7 @@
         @Test
         public void ValidTransfer() throws Exception {
              Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("ValidTransfer");
+                logger.info("ValidTransfer");
                 DatatypeFactory df = DatatypeFactory.newInstance();
                 GregorianCalendar gcal = new GregorianCalendar();
                 gcal.setTimeInMillis(System.currentTimeMillis());
@@ -240,7 +239,7 @@
 
                         }
                 }
-                System.out.println("Business Entity transfered successfull");
+                logger.info("Business Entity transfered successfull");
 
                 //note, we transfered ownership here so sam has to delete both of them
                 TckCommon.DeleteBusiness(keyJoeBiz, authInfoSam, publishSam);
diff --git a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_170_ValueSetValidationIntegrationTest.java b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_170_ValueSetValidationIntegrationTest.java
index a82f254..e248e8e 100644
--- a/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_170_ValueSetValidationIntegrationTest.java
+++ b/uddi-tck/src/test/java/org/apache/juddi/v3/tck/UDDI_170_ValueSetValidationIntegrationTest.java
@@ -152,7 +152,7 @@
         public void testVSV() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                System.out.println("testVSV");
+                logger.info("testVSV");
                 BusinessEntity SaveBusiness = null;
                 BusinessEntity SaveVSVCallbackService = null;
                 try {
@@ -186,7 +186,7 @@
         public void testVSVInvalid() throws Exception {
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
                 Assume.assumeTrue(TckPublisher.isEnabled());
-                System.out.println("testVSVInvalid");
+                logger.info("testVSVInvalid");
                 BusinessEntity SaveBusiness = null;
                 BusinessEntity SaveVSVCallbackService = null;
                 try {
@@ -349,7 +349,7 @@
 
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                System.out.println("DerviedFromValid");
+                logger.info("DerviedFromValid");
                 TModel tm = new TModel();
                 //tm.setTModelKey();
                 tm.setCategoryBag(new CategoryBag());
@@ -367,7 +367,7 @@
         public void derviedFromInValid() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                  System.out.println("DerviedFromInValid");
+                  logger.info("DerviedFromInValid");
                 try {
                         TModel tm = new TModel();
                         //tm.setTModelKey();
@@ -393,7 +393,7 @@
         public void entitKeyValuesValid() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                System.out.println("EntitKeyValuesValid");
+                logger.info("EntitKeyValuesValid");
                 TModel tm = new TModel();
                 //tm.setTModelKey();
                 tm.setCategoryBag(new CategoryBag());
@@ -412,7 +412,7 @@
         public void entitKeyValuesInValid() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                System.out.println("EntitKeyValuesInValid");
+                logger.info("EntitKeyValuesInValid");
                 try {
                         TModel tm = new TModel();
                         //tm.setTModelKey();
@@ -440,7 +440,7 @@
                 //This test should be ignored, only one business per node is allowed to be the node
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                 System.out.println("UDDINodeValid");
+                 logger.info("UDDINodeValid");
                 BusinessEntity be = new BusinessEntity();
                 be.getName().add(new Name("test", "en"));
                 be.setCategoryBag(new CategoryBag());
@@ -456,7 +456,7 @@
         public void uddiNodeInValid1() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                System.out.println("UDDINodeInValid1");
+                logger.info("UDDINodeInValid1");
                 try {
                         BusinessEntity be = new BusinessEntity();
                         be.getName().add(new Name("test", "en"));
@@ -480,7 +480,7 @@
         public void uddiNodeInValid2() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                System.out.println("UDDINodeInValid2");
+                logger.info("UDDINodeInValid2");
                 try {
                         BusinessEntity be = new BusinessEntity();
                         be.getName().add(new Name("test", "en"));
@@ -509,7 +509,7 @@
         public void owningBusinessValid() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                System.out.println("OwningBusinessValid");
+                logger.info("OwningBusinessValid");
                 TModel tm = new TModel();
                 //tm.setTModelKey();
                 tm.setCategoryBag(new CategoryBag());
@@ -525,7 +525,7 @@
 
         @Test
         public void owningBusinessInValid() throws Exception {
-                System.out.println("OwningBusinessInValid");
+                logger.info("OwningBusinessInValid");
                 try {
                         Assume.assumeTrue(TckPublisher.isEnabled());
                         Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
@@ -551,7 +551,7 @@
         public void owningBusinessInValid2() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                System.out.println("OwningBusinessInValid2");
+                logger.info("OwningBusinessInValid2");
                 try {
                         TModel tm = new TModel();
                         //tm.setTModelKey();
@@ -577,7 +577,7 @@
         public void typeTmodelValid() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                System.out.println("TypeTmodelValid");
+                logger.info("TypeTmodelValid");
                 TModel tm = new TModel();
                 //tm.setTModelKey();
                 tm.setCategoryBag(new CategoryBag());
@@ -596,7 +596,7 @@
         public void typeTModelInValid() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                System.out.println("TypeTModelInValid");
+                logger.info("TypeTModelInValid");
                 try {
                         TModel tm = new TModel();
                         //tm.setTModelKey();
@@ -622,7 +622,7 @@
         public void typeBindingInValid() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                System.out.println("TypeBindingInValid");
+                logger.info("TypeBindingInValid");
                 BusinessDetail saveBusiness = null;
                 try {
                         BusinessEntity be = new BusinessEntity();
@@ -656,7 +656,7 @@
         public void rypeBindingValid() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                System.out.println("TypeBindingValid");
+                logger.info("TypeBindingValid");
                 BusinessEntity be = new BusinessEntity();
                 be.getName().add(new Name("test", "en"));
                 be.setBusinessServices(new BusinessServices());
@@ -683,7 +683,7 @@
         public void ralidatedByInValid() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                System.out.println("ValidatedByInValid");
+                logger.info("ValidatedByInValid");
                 BusinessEntity SaveVSVCallbackService = null;
                 try {
                         SaveVSVCallbackService = saveVSVCallbackService(authInfoJoe, publicationJoe);
@@ -713,7 +713,7 @@
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
 
-                System.out.println("ValidatedByValid");
+                logger.info("ValidatedByValid");
                 BusinessEntity SaveVSVCallbackService = saveVSVCallbackService(authInfoJoe, publicationJoe);
 
                 TModel tm = new TModel();
@@ -735,7 +735,7 @@
         public void replacedByValid() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                System.out.println("ReplacedByValid");
+                logger.info("ReplacedByValid");
                 TModel tm = new TModel();
                 tm.setName(new Name("My old tmodel", "en"));
                 tm.getDescription().add(new Description("valid values include 'one', 'two', 'three'", "en"));
@@ -761,7 +761,7 @@
         public void replacedByValid2() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                System.out.println("ReplacedByValid2");
+                logger.info("ReplacedByValid2");
                 TModel tm = new TModel();
                 tm.setName(new Name("My old tmodel", "en"));
                 tm.getDescription().add(new Description("valid values include 'one', 'two', 'three'", "en"));
@@ -787,7 +787,7 @@
         public void replacedByValid3() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                System.out.println("ReplacedByValid3");
+                logger.info("ReplacedByValid3");
                 BusinessEntity tm = new BusinessEntity();
                 tm.getName().add(new Name("My old business", "en"));
                 tm.getDescription().add(new Description("valid values include 'one', 'two', 'three'", "en"));
@@ -813,7 +813,7 @@
         public void replacedByValid4() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                System.out.println("ReplacedByValid4");
+                logger.info("ReplacedByValid4");
                 BusinessEntity tm = new BusinessEntity();
                 tm.getName().add(new Name("My old business", "en"));
                 tm.getDescription().add(new Description("valid values include 'one', 'two', 'three'", "en"));
@@ -839,7 +839,7 @@
         public void replacedByValid5Projected() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                System.out.println("ReplacedByValid5Projected");
+                logger.info("ReplacedByValid5Projected");
                 BusinessEntity tm = new BusinessEntity();
                 tm.setBusinessKey(TckTModel.JOE_PUBLISHER_KEY_PREFIX + "testbiz");
                 tm.getName().add(new Name("My old business", "en"));
@@ -863,7 +863,7 @@
         public void replacedByValid6DifferentOwners() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                System.out.println("ReplacedByValid6DifferentOwners");
+                logger.info("ReplacedByValid6DifferentOwners");
                 
                 BusinessEntity tm = new BusinessEntity();
                 tm.setBusinessKey(TckTModel.MARY_KEY_PREFIX + "testbiz");
@@ -897,7 +897,7 @@
                 TckTModel tmodel = new TckTModel(publicationJoe, inquiry);
                 tmodel.saveJoePublisherTmodel(authInfoJoe);
                 
-                System.out.println("ReplacedByValid7DifferentOwners");
+                logger.info("ReplacedByValid7DifferentOwners");
                 BusinessEntity tm = new BusinessEntity();
                 tm.setBusinessKey(TckTModel.MARY_KEY_PREFIX + "testbiz");
                 tm.getName().add(new Name("My old business", "en"));
@@ -931,7 +931,7 @@
         public void replacedByInValid() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                System.out.println("ReplacedByInValid");
+                logger.info("ReplacedByInValid");
                 try {
                         TModel tm = new TModel();
                         tm.setName(new Name("My new tmodel", "en"));
@@ -961,7 +961,7 @@
         public void replacedByInValid2() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                System.out.println("ReplacedByInValid2");
+                logger.info("ReplacedByInValid2");
                 try {
                         TModel tm = new TModel();
                         tm.setName(new Name("My new tmodel", "en"));
@@ -986,7 +986,7 @@
         public void relationshipsValid() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                System.out.println("RelationshipsValid");
+                logger.info("RelationshipsValid");
                 TModel tm = new TModel();
                 tm.setCategoryBag(new CategoryBag());
                 tm.setName(new Name("My Custom validated key", "en"));
@@ -1004,7 +1004,7 @@
         public void relationshipsInValid() throws Exception {
                 Assume.assumeTrue(TckPublisher.isEnabled());
                 Assume.assumeTrue(TckPublisher.isValueSetAPIEnabled());
-                System.out.println("RelationshipsInValid");
+                logger.info("RelationshipsInValid");
                 try {
                         TModel tm = new TModel();
                         //tm.setTModelKey();
diff --git a/uddi-tck/src/test/resources/log4j.xml b/uddi-tck/src/test/resources/log4j.xml
index db31098..9e90afe 100644
--- a/uddi-tck/src/test/resources/log4j.xml
+++ b/uddi-tck/src/test/resources/log4j.xml
@@ -15,6 +15,16 @@
          <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
       </layout>
    </appender>
+   <appender name="file" class="org.apache.log4j.RollingFileAppender">
+	   <param name="append" value="false" />
+	  
+	   <!-- For Tomcat -->
+	   <param name="file" value="target/logs/test.log" />
+	   <layout class="org.apache.log4j.PatternLayout">
+		<param name="ConversionPattern" 
+			value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
+	   </layout>
+	</appender>
    
     <logger name="org">
         <level value="INFO"/>
@@ -30,6 +40,7 @@
     
     <root>        
           <appender-ref ref="CONSOLE"/>   
+		  <appender-ref ref="file" />
     </root>
     
    
