diff --git a/org.eclipse.osee.ote.master.rest.client/META-INF/MANIFEST.MF b/org.eclipse.osee.ote.master.rest.client/META-INF/MANIFEST.MF
index c510ce8..fc35038 100644
--- a/org.eclipse.osee.ote.master.rest.client/META-INF/MANIFEST.MF
+++ b/org.eclipse.osee.ote.master.rest.client/META-INF/MANIFEST.MF
@@ -13,10 +13,10 @@
  javax.ws.rs;version="2.0.0",
  javax.ws.rs.client;version="2.0.0",
  javax.ws.rs.core;version="2.0.0",
+ org.eclipse.osee.framework.core,
  org.eclipse.osee.framework.jdk.core.type,
  org.eclipse.osee.framework.logging,
  org.eclipse.osee.jaxrs,
- org.eclipse.osee.jaxrs.client,
  org.eclipse.osee.ote.master.rest.model
 Export-Package: org.eclipse.osee.ote.master.rest.client
 Service-Component: OSGI-INF/*.xml
diff --git a/org.eclipse.osee.ote.master.rest.client/OSGI-INF/ote.master.rest.client.xml b/org.eclipse.osee.ote.master.rest.client/OSGI-INF/ote.master.rest.client.xml
index 6c2a6e5..b076c6f 100644
--- a/org.eclipse.osee.ote.master.rest.client/OSGI-INF/ote.master.rest.client.xml
+++ b/org.eclipse.osee.ote.master.rest.client/OSGI-INF/ote.master.rest.client.xml
@@ -4,4 +4,5 @@
    <service>
       <provide interface="org.eclipse.osee.ote.master.rest.client.OTEMasterServer"/>
    </service>
+   <reference bind="bindJaxRsApi" cardinality="1..1" interface="org.eclipse.osee.framework.core.JaxRsApi" name="jaxRsApi" policy="static"/>
 </scr:component>
diff --git a/org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/internal/AddServer.java b/org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/internal/AddServer.java
index afba074..cc08be8 100644
--- a/org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/internal/AddServer.java
+++ b/org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/internal/AddServer.java
@@ -1,27 +1,22 @@
 package org.eclipse.osee.ote.master.rest.client.internal;
 
-import java.net.HttpURLConnection;
 import java.net.URI;
 import java.util.concurrent.Callable;
-import java.util.logging.Level;
-
 import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.UriBuilder;
-
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.jaxrs.client.JaxRsClient;
-import org.eclipse.osee.jaxrs.client.JaxRsWebTarget;
+import org.eclipse.osee.framework.core.JaxRsApi;
 import org.eclipse.osee.ote.master.rest.client.OTEMasterServerResult;
 import org.eclipse.osee.ote.master.rest.model.OTEServer;
 
 public class AddServer implements Callable<OTEMasterServerResult> {
 
-   private final JaxRsClient webClientProvider;
+   private final JaxRsApi webClientProvider;
    private final OTEServer server;
    private final URI uri;
 
-   public AddServer(JaxRsClient webClientProvider, URI uri, OTEServer server) {
+   public AddServer(JaxRsApi webClientProvider, URI uri, OTEServer server) {
       this.webClientProvider = webClientProvider;
       this.uri = uri;
       this.server = server;
@@ -31,11 +26,11 @@
    public OTEMasterServerResult call() throws Exception {
       OTEMasterServerResult result = new OTEMasterServerResult();
       try {
-         URI targetUri =
-               UriBuilder.fromUri(uri).path(OTEMasterServerImpl.CONTEXT_NAME).path(OTEMasterServerImpl.CONTEXT_SERVERS).build();
+         URI targetUri = UriBuilder.fromUri(uri).path(OTEMasterServerImpl.CONTEXT_NAME).path(
+            OTEMasterServerImpl.CONTEXT_SERVERS).build();
 
-         if(HttpUtil.canConnect(targetUri)){
-            JaxRsWebTarget target = webClientProvider.target(targetUri);
+         if (HttpUtil.canConnect(targetUri)) {
+            WebTarget target = webClientProvider.newTargetUrl(targetUri.toString());
             javax.ws.rs.client.Invocation.Builder builder = target.request(MediaType.APPLICATION_XML);
             builder.post(Entity.xml(server));
          } else {
@@ -43,7 +38,6 @@
          }
       } catch (Throwable th) {
          result.setSuccess(false);
-         //         result.setThrowable(th);
       }
       return result;
    }
diff --git a/org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/internal/GetAvailableServers.java b/org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/internal/GetAvailableServers.java
index 57bc86f..48ba69b 100644
--- a/org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/internal/GetAvailableServers.java
+++ b/org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/internal/GetAvailableServers.java
@@ -4,29 +4,30 @@
 import java.util.concurrent.Callable;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.UriBuilder;
-import org.eclipse.osee.jaxrs.client.JaxRsClient;
+import org.eclipse.osee.framework.core.JaxRsApi;
 import org.eclipse.osee.ote.master.rest.client.OTEMasterServerAvailableNodes;
 import org.eclipse.osee.ote.master.rest.model.OTEServer;
 
 public class GetAvailableServers implements Callable<OTEMasterServerAvailableNodes> {
 
-   private final JaxRsClient webClientProvider;
+   private final JaxRsApi webClientProvider;
    private final URI uri;
 
-   public GetAvailableServers(JaxRsClient webClientProvider, URI uri) {
+   public GetAvailableServers(JaxRsApi webClientProvider, URI uri) {
       this.webClientProvider = webClientProvider;
       this.uri = uri;
    }
 
    @Override
    public OTEMasterServerAvailableNodes call() throws Exception {
-      URI targetUri =
-         UriBuilder.fromUri(uri).path(OTEMasterServerImpl.CONTEXT_NAME).path(OTEMasterServerImpl.CONTEXT_SERVERS).build();
+      URI targetUri = UriBuilder.fromUri(uri).path(OTEMasterServerImpl.CONTEXT_NAME).path(
+         OTEMasterServerImpl.CONTEXT_SERVERS).build();
 
       OTEMasterServerAvailableNodes result = new OTEMasterServerAvailableNodes();
       try {
          OTEServer[] servers =
-            webClientProvider.target(targetUri).request(MediaType.APPLICATION_XML).get(OTEServer[].class);
+            webClientProvider.newTargetUrl(targetUri.toString()).request(MediaType.APPLICATION_XML).get(
+               OTEServer[].class);
          result.setServers(servers);
          result.setSuccess(true);
       } catch (Throwable th) {
diff --git a/org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/internal/OTEMasterServerImpl.java b/org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/internal/OTEMasterServerImpl.java
index 2a5e334..4b455e0 100644
--- a/org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/internal/OTEMasterServerImpl.java
+++ b/org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/internal/OTEMasterServerImpl.java
@@ -6,8 +6,7 @@
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 import java.util.concurrent.ThreadFactory;
-
-import org.eclipse.osee.jaxrs.client.JaxRsClient;
+import org.eclipse.osee.framework.core.JaxRsApi;
 import org.eclipse.osee.ote.master.rest.client.OTEMasterServer;
 import org.eclipse.osee.ote.master.rest.client.OTEMasterServerAvailableNodes;
 import org.eclipse.osee.ote.master.rest.client.OTEMasterServerResult;
@@ -18,9 +17,13 @@
    static final String CONTEXT_NAME = "otemaster";
    static final String CONTEXT_SERVERS = "servers";
 
-   private volatile JaxRsClient client;
+   private volatile JaxRsApi jaxRsApi;
    private ExecutorService executor;
 
+   public void bindJaxRsApi(JaxRsApi jaxRsApi) {
+      this.jaxRsApi = jaxRsApi;
+   }
+
    public void start(Map<String, Object> props) {
       executor = Executors.newCachedThreadPool(new ThreadFactory() {
          @Override
@@ -31,33 +34,28 @@
             return th;
          }
       });
-      update(props);
    }
 
    public void stop() {
       if (executor != null) {
          executor.shutdown();
       }
-      client = null;
-   }
-
-   public void update(Map<String, Object> props) {
-      client = JaxRsClient.newBuilder().properties(props).build();
+      jaxRsApi = null;
    }
 
    @Override
    public Future<OTEMasterServerAvailableNodes> getAvailableServers(URI uri) {
-      return executor.submit(new GetAvailableServers(client, uri));
+      return executor.submit(new GetAvailableServers(jaxRsApi, uri));
    }
 
    @Override
    public Future<OTEMasterServerResult> addServer(URI uri, OTEServer server) {
-      return executor.submit(new AddServer(client, uri, server));
+      return executor.submit(new AddServer(jaxRsApi, uri, server));
    }
 
    @Override
    public Future<OTEMasterServerResult> removeServer(URI uri, OTEServer server) {
-      return executor.submit(new RemoveServer(client, uri, server));
+      return executor.submit(new RemoveServer(jaxRsApi, uri, server));
    }
 
 }
diff --git a/org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/internal/RemoveServer.java b/org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/internal/RemoveServer.java
index b91f43f..76e599d 100644
--- a/org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/internal/RemoveServer.java
+++ b/org.eclipse.osee.ote.master.rest.client/src/org/eclipse/osee/ote/master/rest/client/internal/RemoveServer.java
@@ -1,24 +1,19 @@
 package org.eclipse.osee.ote.master.rest.client.internal;
 
-import java.net.HttpURLConnection;
 import java.net.URI;
 import java.util.concurrent.Callable;
-import java.util.logging.Level;
-
 import javax.ws.rs.core.UriBuilder;
-
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.jaxrs.client.JaxRsClient;
+import org.eclipse.osee.framework.core.JaxRsApi;
 import org.eclipse.osee.ote.master.rest.client.OTEMasterServerResult;
 import org.eclipse.osee.ote.master.rest.model.OTEServer;
 
 public class RemoveServer implements Callable<OTEMasterServerResult> {
 
-   private final JaxRsClient webClientProvider;
+   private final JaxRsApi webClientProvider;
    private final OTEServer server;
    private final URI uri;
 
-   public RemoveServer(JaxRsClient webClientProvider, URI uri, OTEServer server) {
+   public RemoveServer(JaxRsApi webClientProvider, URI uri, OTEServer server) {
       this.webClientProvider = webClientProvider;
       this.uri = uri;
       this.server = server;
@@ -28,14 +23,14 @@
    public OTEMasterServerResult call() throws Exception {
       OTEMasterServerResult result = new OTEMasterServerResult();
       try {
-         URI mainTarget  =
-               UriBuilder.fromUri(uri).path(OTEMasterServerImpl.CONTEXT_NAME).path(OTEMasterServerImpl.CONTEXT_SERVERS).build();
-         URI targetUri  =
-               UriBuilder.fromUri(uri).path(OTEMasterServerImpl.CONTEXT_NAME).path(OTEMasterServerImpl.CONTEXT_SERVERS).path(server.getUUID().toString()).build();
-         if(HttpUtil.canConnect(mainTarget)){
-            webClientProvider.target(targetUri).request().delete();
+         URI mainTarget = UriBuilder.fromUri(uri).path(OTEMasterServerImpl.CONTEXT_NAME).path(
+            OTEMasterServerImpl.CONTEXT_SERVERS).build();
+         URI targetUri = UriBuilder.fromUri(uri).path(OTEMasterServerImpl.CONTEXT_NAME).path(
+            OTEMasterServerImpl.CONTEXT_SERVERS).path(server.getUUID().toString()).build();
+         if (HttpUtil.canConnect(mainTarget)) {
+            webClientProvider.newTargetUrl(targetUri.toString()).request().delete();
          } else {
-            result.setSuccess(false);   
+            result.setSuccess(false);
          }
       } catch (Throwable th) {
          result.setSuccess(false);
diff --git a/org.eclipse.osee.ote.rest.client/META-INF/MANIFEST.MF b/org.eclipse.osee.ote.rest.client/META-INF/MANIFEST.MF
index c921b96..50fcf1d 100644
--- a/org.eclipse.osee.ote.rest.client/META-INF/MANIFEST.MF
+++ b/org.eclipse.osee.ote.rest.client/META-INF/MANIFEST.MF
@@ -11,6 +11,7 @@
  javax.ws.rs.core;version="2.0.0",
  org.apache.commons.lang.time,
  org.eclipse.core.net.proxy,
+ org.eclipse.osee.framework.core,
  org.eclipse.osee.framework.core.data,
  org.eclipse.osee.framework.core.enums,
  org.eclipse.osee.framework.core.exception,
@@ -20,7 +21,6 @@
  org.eclipse.osee.framework.jdk.core.util,
  org.eclipse.osee.framework.jdk.core.util.network,
  org.eclipse.osee.framework.logging,
- org.eclipse.osee.jaxrs.client,
  org.eclipse.osee.ote.classserver,
  org.eclipse.osee.ote.core
 Export-Package: org.eclipse.osee.ote.rest.client
diff --git a/org.eclipse.osee.ote.rest.client/OSGI-INF/ote.client.xml b/org.eclipse.osee.ote.rest.client/OSGI-INF/ote.client.xml
index 239d148..99022a8 100644
--- a/org.eclipse.osee.ote.rest.client/OSGI-INF/ote.client.xml
+++ b/org.eclipse.osee.ote.rest.client/OSGI-INF/ote.client.xml
@@ -4,4 +4,5 @@
    <service>
       <provide interface="org.eclipse.osee.ote.rest.client.OteClient"/>
    </service>
+      <reference bind="bindJaxRsApi" cardinality="1..1" interface="org.eclipse.osee.framework.core.JaxRsApi" name="jaxRsApi" policy="static"/>
 </scr:component>
diff --git a/org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/ConfigureOteServer.java b/org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/ConfigureOteServer.java
index 397fb3e..54fad81 100644
--- a/org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/ConfigureOteServer.java
+++ b/org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/ConfigureOteServer.java
@@ -4,14 +4,12 @@
 import java.net.InetAddress;
 import java.net.URI;
 import java.util.List;
-
 import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.UriBuilder;
-
+import org.eclipse.osee.framework.core.JaxRsApi;
 import org.eclipse.osee.framework.jdk.core.util.network.PortUtil;
-import org.eclipse.osee.jaxrs.client.JaxRsClient;
-import org.eclipse.osee.jaxrs.client.JaxRsWebTarget;
 import org.eclipse.osee.ote.classserver.HeadlessClassServer;
 import org.eclipse.osee.ote.core.BundleInfo;
 import org.eclipse.osee.ote.rest.client.Progress;
@@ -26,12 +24,12 @@
    private final URI uri;
    private List<File> jars;
    private final Progress progress;
-   private final JaxRsClient factory;
+   private final JaxRsApi factory;
    private OTEJobStatus status;
    private HeadlessClassServer classServer;
    private OTEConfiguration configuration;
 
-   public ConfigureOteServer(URI uri, List<File> jars, Progress progress, JaxRsClient factory) {
+   public ConfigureOteServer(URI uri, List<File> jars, Progress progress, JaxRsApi factory) {
       super(progress);
       this.uri = uri;
       this.jars = jars;
@@ -39,7 +37,7 @@
       this.factory = factory;
    }
 
-   public ConfigureOteServer(URI uri, OTEConfiguration configuration, Progress progress, JaxRsClient factory) {
+   public ConfigureOteServer(URI uri, OTEConfiguration configuration, Progress progress, JaxRsApi factory) {
       super(progress);
       this.uri = uri;
       this.configuration = configuration;
@@ -68,7 +66,7 @@
    private void waitForJobComplete() throws Exception {
 
       URI jobUri = status.getUpdatedJobStatus().toURI();
-      final JaxRsWebTarget service = factory.target(jobUri);
+      final WebTarget service = factory.newTargetUrl(jobUri.toString());
 
       while (!status.isJobComplete()) {
          Thread.sleep(POLLING_RATE);
@@ -96,19 +94,19 @@
             localConfiguration.addItem(item);
          }
          OTEConfiguration currentConfig =
-            factory.target(targetUri).request(MediaType.APPLICATION_JSON).get(OTEConfiguration.class);
+            factory.newTargetUrl(targetUri.toString()).request(MediaType.APPLICATION_JSON).get(OTEConfiguration.class);
          if (currentConfig.equals(localConfiguration)) {
             OTEJobStatus status = new OTEJobStatus();
             status.setSuccess(true);
             status.setJobComplete(true);
             return status;
          } else {
-            return factory.target(targetUri).request(MediaType.APPLICATION_JSON).post(Entity.xml(localConfiguration),
-               OTEJobStatus.class);
+            return factory.newTargetUrl(targetUri.toString()).request(MediaType.APPLICATION_JSON).post(
+               Entity.xml(localConfiguration), OTEJobStatus.class);
          }
       } else {
-         return factory.target(targetUri).request(MediaType.APPLICATION_JSON).post(Entity.xml(configuration),
-            OTEJobStatus.class);
+         return factory.newTargetUrl(targetUri.toString()).request(MediaType.APPLICATION_JSON).post(
+            Entity.xml(configuration), OTEJobStatus.class);
       }
    }
 }
diff --git a/org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/GetOteServerFile.java b/org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/GetOteServerFile.java
index afd6b20..a571167 100644
--- a/org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/GetOteServerFile.java
+++ b/org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/GetOteServerFile.java
@@ -8,8 +8,8 @@
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 import javax.ws.rs.core.UriBuilder;
+import org.eclipse.osee.framework.core.JaxRsApi;
 import org.eclipse.osee.framework.jdk.core.util.Lib;
-import org.eclipse.osee.jaxrs.client.JaxRsClient;
 import org.eclipse.osee.ote.rest.client.Progress;
 
 public class GetOteServerFile extends BaseClientCallable<Progress> {
@@ -18,10 +18,10 @@
    private final String filePath;
    @SuppressWarnings("unused")
    private final Progress progress;
-   private final JaxRsClient factory;
+   private final JaxRsApi factory;
    private final File destination;
 
-   public GetOteServerFile(URI uri, File destination, String filePath, Progress progress, JaxRsClient factory) {
+   public GetOteServerFile(URI uri, File destination, String filePath, Progress progress, JaxRsApi factory) {
       super(progress);
       this.uri = uri;
       this.filePath = filePath;
@@ -34,7 +34,7 @@
    public void doWork() throws Exception {
       URI targetUri = UriBuilder.fromUri(uri).path("ote").path("file").queryParam("path", filePath).build();
 
-      Response response = factory.target(targetUri).request(MediaType.APPLICATION_XML).get();
+      Response response = factory.newTargetUrl(targetUri.toString()).request(MediaType.APPLICATION_XML).get();
       if (response.getStatus() == Status.OK.getStatusCode()) {
          InputStream is = (InputStream) response.getEntity();
          FileOutputStream fos = new FileOutputStream(destination);
diff --git a/org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/OteClientImpl.java b/org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/OteClientImpl.java
index bc9ded8..23bae05 100644
--- a/org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/OteClientImpl.java
+++ b/org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/OteClientImpl.java
@@ -21,7 +21,7 @@
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 import java.util.concurrent.ThreadFactory;
-import org.eclipse.osee.jaxrs.client.JaxRsClient;
+import org.eclipse.osee.framework.core.JaxRsApi;
 import org.eclipse.osee.ote.rest.client.OTECacheItem;
 import org.eclipse.osee.ote.rest.client.OteClient;
 import org.eclipse.osee.ote.rest.client.Progress;
@@ -35,7 +35,11 @@
 public class OteClientImpl implements OteClient {
 
    private ExecutorService executor;
-   private volatile JaxRsClient client;
+   private volatile JaxRsApi jaxRsApi;
+
+   public void bindJaxRsApi(JaxRsApi jaxRsApi) {
+      this.jaxRsApi = jaxRsApi;
+   }
 
    public void start(Map<String, Object> props) {
       executor = Executors.newCachedThreadPool(new ThreadFactory() {
@@ -47,43 +51,38 @@
             return th;
          }
       });
-      update(props);
    }
 
    public void stop() {
       if (executor != null) {
          executor.shutdown();
       }
-      client = null;
-   }
-
-   public void update(Map<String, Object> props) {
-      client = JaxRsClient.newBuilder().properties(props).build();
+      jaxRsApi = null;
    }
 
    @Override
    public Future<Progress> getFile(URI uri, File destination, String filePath, final Progress progress) {
-      return executor.submit(new GetOteServerFile(uri, destination, filePath, progress, client));
+      return executor.submit(new GetOteServerFile(uri, destination, filePath, progress, jaxRsApi));
    }
 
    @Override
    public Future<Progress> configureServerEnvironment(URI uri, List<File> jars, final Progress progress) {
-      return executor.submit(new ConfigureOteServer(uri, jars, progress, client));
+      return executor.submit(new ConfigureOteServer(uri, jars, progress, jaxRsApi));
    }
 
    @Override
    public Future<Progress> updateServerJarCache(URI uri, String baseJarURL, List<OTECacheItem> jars, Progress progress) {
-      return executor.submit(new PrepareOteServerFile(uri, baseJarURL, jars, progress, client));
+      return executor.submit(new PrepareOteServerFile(uri, baseJarURL, jars, progress, jaxRsApi));
    }
 
    @Override
    public Future<ProgressWithCancel> runTest(URI uri, OTETestRun tests, Progress progress) {
-      return executor.submit(new RunTests(uri, tests, progress, client));
+      return executor.submit(new RunTests(uri, tests, progress, jaxRsApi));
    }
 
    @Override
    public Future<Progress> configureServerEnvironment(URI uri, OTEConfiguration configuration, Progress progress) {
-      return executor.submit(new ConfigureOteServer(uri, configuration, progress, client));
+      return executor.submit(new ConfigureOteServer(uri, configuration, progress, jaxRsApi));
    }
 
 }
diff --git a/org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/PrepareOteServerFile.java b/org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/PrepareOteServerFile.java
index 59a4a1d..9d38d64 100644
--- a/org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/PrepareOteServerFile.java
+++ b/org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/PrepareOteServerFile.java
@@ -3,10 +3,10 @@
 import java.net.URI;
 import java.util.List;
 import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.UriBuilder;
-import org.eclipse.osee.jaxrs.client.JaxRsClient;
-import org.eclipse.osee.jaxrs.client.JaxRsWebTarget;
+import org.eclipse.osee.framework.core.JaxRsApi;
 import org.eclipse.osee.ote.rest.client.OTECacheItem;
 import org.eclipse.osee.ote.rest.client.Progress;
 import org.eclipse.osee.ote.rest.model.OTEConfiguration;
@@ -20,11 +20,11 @@
    private final URI uri;
    private final List<OTECacheItem> jars;
    private final Progress progress;
-   private final JaxRsClient factory;
+   private final JaxRsApi factory;
    private OTEJobStatus status;
    private final String baseJarURL;
 
-   public PrepareOteServerFile(URI uri, String baseJarURL, List<OTECacheItem> jars, Progress progress, JaxRsClient factory) {
+   public PrepareOteServerFile(URI uri, String baseJarURL, List<OTECacheItem> jars, Progress progress, JaxRsApi factory) {
       super(progress);
       this.uri = uri;
       this.jars = jars;
@@ -48,7 +48,7 @@
    private void waitForJobComplete() throws Exception {
 
       URI jobUri = status.getUpdatedJobStatus().toURI();
-      JaxRsWebTarget service = factory.target(jobUri);
+      WebTarget service = factory.newTargetUrl(jobUri.toString());
 
       while (!status.isJobComplete()) {
          Thread.sleep(POLLING_RATE);
@@ -72,8 +72,8 @@
          configuration.addItem(item);
       }
       URI targetUri = UriBuilder.fromUri(uri).path("ote").path("cache").build();
-      return factory.target(targetUri).request(MediaType.APPLICATION_JSON).post(Entity.json(configuration),
-         OTEJobStatus.class);
+      return factory.newTargetUrl(targetUri.toString()).request(MediaType.APPLICATION_JSON).post(
+         Entity.json(configuration), OTEJobStatus.class);
    }
 
 }
diff --git a/org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/RunTests.java b/org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/RunTests.java
index f28be59..cb9e012 100644
--- a/org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/RunTests.java
+++ b/org.eclipse.osee.ote.rest.client/src/org/eclipse/osee/ote/rest/client/internal/RunTests.java
@@ -6,8 +6,8 @@
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.UriBuilder;
+import org.eclipse.osee.framework.core.JaxRsApi;
 import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.jaxrs.client.JaxRsClient;
 import org.eclipse.osee.ote.rest.client.Progress;
 import org.eclipse.osee.ote.rest.client.ProgressWithCancel;
 import org.eclipse.osee.ote.rest.model.OTEJobStatus;
@@ -18,11 +18,11 @@
    private final URI uri;
    private final OTETestRun tests;
    private final Progress progress;
-   private final JaxRsClient factory;
+   private final JaxRsApi factory;
    private OTEJobStatus status;
    private String id;
 
-   public RunTests(URI uri, OTETestRun tests, Progress progress, JaxRsClient factory) {
+   public RunTests(URI uri, OTETestRun tests, Progress progress, JaxRsApi factory) {
       this.uri = uri;
       this.tests = tests;
       this.progress = progress;
@@ -41,8 +41,8 @@
    public boolean cancelSingle() {
       URI targetUri = UriBuilder.fromUri(uri).path("ote").path("run").path("{run-id}").build(id);
       try {
-         OTEJobStatus cancelStatus =
-            factory.target(targetUri).request(MediaType.APPLICATION_JSON).put(Entity.json(""), OTEJobStatus.class);
+         OTEJobStatus cancelStatus = factory.newTargetUrl(targetUri.toString()).request(MediaType.APPLICATION_JSON).put(
+            Entity.json(""), OTEJobStatus.class);
          return cancelStatus.isSuccess();
       } catch (Exception e) {
          OseeLog.log(getClass(), Level.SEVERE, e);
@@ -52,7 +52,8 @@
 
    private OTEJobStatus sendCommand() throws Exception {
       URI targetUri = UriBuilder.fromUri(uri).path("ote").path("run").build();
-      return factory.target(targetUri).request(MediaType.APPLICATION_JSON).post(Entity.json(tests), OTEJobStatus.class);
+      return factory.newTargetUrl(targetUri.toString()).request(MediaType.APPLICATION_JSON).post(Entity.json(tests),
+         OTEJobStatus.class);
    }
 
    @Override
@@ -61,7 +62,7 @@
 
       try {
          OTEJobStatus cancelStatus =
-            factory.target(targetUri).request(MediaType.APPLICATION_JSON).delete(OTEJobStatus.class);
+            factory.newTargetUrl(targetUri.toString()).request(MediaType.APPLICATION_JSON).delete(OTEJobStatus.class);
          return cancelStatus.isSuccess();
       } catch (Exception e) {
          OseeLog.log(getClass(), Level.SEVERE, e);
