diff --git a/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/resource/AbstractRestTest.java b/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/resource/AbstractRestTest.java
index 8f25ed7..80bce44 100644
--- a/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/resource/AbstractRestTest.java
+++ b/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/resource/AbstractRestTest.java
@@ -19,6 +19,7 @@
 import javax.ws.rs.core.MediaType;
 import org.eclipse.osee.ats.core.workflow.util.WorkItemsJsonReader;
 import org.eclipse.osee.ats.ide.integration.tests.AtsApiService;
+import org.eclipse.osee.framework.core.JaxRsApi;
 import org.eclipse.osee.framework.core.util.JsonUtil;
 import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
 import org.junit.Assert;
@@ -27,6 +28,7 @@
  * @author Donald G. Dunne
  */
 public abstract class AbstractRestTest {
+   private final JaxRsApi jaxRsApi = AtsApiService.get().jaxRsApi();
 
    protected void getAndCountWorkItems(WebTarget target, int expected) {
       String json = getJson(target);
@@ -41,7 +43,7 @@
    protected Object getFirstAndCount(WebTarget target, int count) {
       String json = getJson(target);
 
-      Object[] objs = JsonUtil.readValue(json, Object[].class);
+      Object[] objs = jaxRsApi.readValue(json, Object[].class);
       Assert.assertEquals(count, objs.length);
       return objs[0];
    }
@@ -49,14 +51,14 @@
    protected Object getFirstAndCount(String url, int count) {
       String json = getJson(url);
 
-      Object[] objs = JsonUtil.readValue(json, Object[].class);
+      Object[] objs = jaxRsApi.readValue(json, Object[].class);
       Assert.assertEquals(count, objs.length);
       return objs[0];
    }
 
    protected Object getFirstAndCountGreater(String url, int count) {
       String json = getJson(url);
-      Object[] objs = JsonUtil.readValue(json, Object[].class);
+      Object[] objs = jaxRsApi.readValue(json, Object[].class);
       boolean countGE = objs.length >= count;
       Assert.assertTrue(String.format("Length %d expected to be greater than or equal to %d", objs.length, count),
          countGE);
@@ -64,7 +66,7 @@
    }
 
    private JsonNode readTree(String url) {
-      return JsonUtil.readTree(getJson(url));
+      return jaxRsApi.readTree(getJson(url));
    }
 
    protected String getHtml(String url) {
@@ -80,7 +82,7 @@
    }
 
    private String getAndCheckResponseCode(String path, MediaType mediaType) {
-      return AtsApiService.get().jaxRsApi().newTarget(path).request(mediaType).get().readEntity(String.class);
+      return jaxRsApi.newTarget(path).request(mediaType).get().readEntity(String.class);
    }
 
    protected JsonNode testUrl(String url, int size, String expectedName, String key, boolean keyExists) {
diff --git a/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/resource/AtsActionEndpointImplOptionsTest.java b/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/resource/AtsActionEndpointImplOptionsTest.java
index 2ad2ca2..a458ac3 100644
--- a/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/resource/AtsActionEndpointImplOptionsTest.java
+++ b/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/resource/AtsActionEndpointImplOptionsTest.java
@@ -20,7 +20,6 @@
 import org.eclipse.osee.ats.api.workflow.WorkItemWriterOptions;
 import org.eclipse.osee.ats.ide.integration.tests.AtsApiService;
 import org.eclipse.osee.framework.core.JaxRsApi;
-import org.eclipse.osee.framework.core.util.JsonUtil;
 import org.eclipse.osee.framework.jdk.core.util.Strings;
 import org.junit.Assert;
 import org.junit.Test;
@@ -91,7 +90,7 @@
 
    private JsonNode testActionRestCall(WebTarget target, int size) {
       String json = getJson(target);
-      JsonNode arrayNode = JsonUtil.readTree(json);
+      JsonNode arrayNode = jaxRsApi.readTree(json);
       Assert.assertEquals(size, arrayNode.size());
       return arrayNode.get(0);
    }
diff --git a/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/resource/AtsActionEndpointImplTest.java b/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/resource/AtsActionEndpointImplTest.java
index ef67e87..ee827d3 100644
--- a/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/resource/AtsActionEndpointImplTest.java
+++ b/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/resource/AtsActionEndpointImplTest.java
@@ -56,7 +56,6 @@
 import org.eclipse.osee.framework.core.enums.CoreAttributeTypes;
 import org.eclipse.osee.framework.core.enums.DemoBranches;
 import org.eclipse.osee.framework.core.enums.DemoUsers;
-import org.eclipse.osee.framework.core.util.JsonUtil;
 import org.eclipse.osee.framework.jdk.core.util.Lib;
 import org.eclipse.osee.framework.jdk.core.util.Strings;
 import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
@@ -72,8 +71,8 @@
 public class AtsActionEndpointImplTest extends AbstractRestTest {
    private static final String committedCodeWfId = DemoArtifactToken.SAW_Commited_Code_TeamWf.getIdString();
    private static final String codeWfId = DemoArtifactToken.SAW_Code.getIdString();
-   private TeamWorkFlowArtifact teamWfArt;
    private final JaxRsApi jaxRsApi = AtsApiService.get().jaxRsApi();
+   private TeamWorkFlowArtifact teamWfArt;
 
    @Test
    public void testUnreleasedVersions() {
@@ -212,7 +211,7 @@
 
    private JsonNode testActionRestCall(WebTarget target, int size) {
       String json = target.request(MediaType.APPLICATION_JSON_TYPE).get().readEntity(String.class);
-      JsonNode arrayNode = JsonUtil.readTree(json);
+      JsonNode arrayNode = jaxRsApi.readTree(json);
       Assert.assertEquals(size, arrayNode.size());
 
       arrayNode.forEach(this::testAction);
@@ -696,7 +695,7 @@
       String newAction = AtsApiService.get().getServerEndpoints().getActionEndpoint().createEmptyAction(
          AtsApiService.get().getUserService().getCurrentUserId(), aiStr, "New Action");
 
-      JsonNode root = JsonUtil.readTree(newAction);
+      JsonNode root = jaxRsApi.readTree(newAction);
       Long id = root.path("id").asLong();
 
       TeamWorkFlowArtifact teamArt =
diff --git a/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/resource/AtsProductLineEndpointTest.java b/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/resource/AtsProductLineEndpointTest.java
index cf94926..c5ec9ae 100644
--- a/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/resource/AtsProductLineEndpointTest.java
+++ b/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/resource/AtsProductLineEndpointTest.java
@@ -17,7 +17,6 @@
 import javax.ws.rs.client.WebTarget;
 import org.eclipse.osee.ats.ide.integration.tests.AtsApiService;
 import org.eclipse.osee.framework.core.JaxRsApi;
-import org.eclipse.osee.framework.core.util.JsonUtil;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -35,12 +34,12 @@
       String path = "ats/ple/branches/";
       WebTarget target = jaxRsApi.newTargetQuery(path + "/baseline");
 
-      JsonNode action = testActionRestCall(target, 1);
+      testActionRestCall(target, 1);
    }
 
    private JsonNode testActionRestCall(WebTarget target, int size) {
       String json = getJson(target);
-      JsonNode arrayNode = JsonUtil.readTree(json);
+      JsonNode arrayNode = jaxRsApi.readTree(json);
       Assert.assertEquals(size, arrayNode.size());
       return arrayNode.get(0);
    }
diff --git a/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/resource/UserResourceTest.java b/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/resource/UserResourceTest.java
index d720c2c..3fd21fc 100644
--- a/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/resource/UserResourceTest.java
+++ b/plugins/org.eclipse.osee.ats.ide.integration.tests/src/org/eclipse/osee/ats/ide/integration/tests/ats/resource/UserResourceTest.java
@@ -14,6 +14,8 @@
 package org.eclipse.osee.ats.ide.integration.tests.ats.resource;
 
 import com.fasterxml.jackson.databind.JsonNode;
+import org.eclipse.osee.ats.ide.integration.tests.AtsApiService;
+import org.eclipse.osee.framework.core.JaxRsApi;
 import org.eclipse.osee.framework.core.enums.DemoUsers;
 import org.eclipse.osee.framework.core.util.JsonUtil;
 import org.junit.Assert;
@@ -25,11 +27,12 @@
  * @author Donald G. Dunne
  */
 public class UserResourceTest extends AbstractRestTest {
+   private final JaxRsApi jaxRsApi = AtsApiService.get().jaxRsApi();
 
    @Test
    public void testGet() throws Exception {
       String json = getJson("/ats/user");
-      JsonNode users = JsonUtil.readTree(json);
+      JsonNode users = jaxRsApi.readTree(json);
       Assert.assertTrue(users.size() >= 9);
       Assert.assertEquals(DemoUsers.Joe_Smith.getUserId(),
          JsonUtil.getArrayElement(users, "name", DemoUsers.Joe_Smith.getName()).get("userId").asText());
diff --git a/plugins/org.eclipse.osee.ats.ide/src/org/eclipse/osee/ats/ide/navigate/RecentlyVisitedNavigateItems.java b/plugins/org.eclipse.osee.ats.ide/src/org/eclipse/osee/ats/ide/navigate/RecentlyVisitedNavigateItems.java
index 2614aba..c944513 100644
--- a/plugins/org.eclipse.osee.ats.ide/src/org/eclipse/osee/ats/ide/navigate/RecentlyVisitedNavigateItems.java
+++ b/plugins/org.eclipse.osee.ats.ide/src/org/eclipse/osee/ats/ide/navigate/RecentlyVisitedNavigateItems.java
@@ -25,7 +25,6 @@
 import org.eclipse.osee.ats.ide.world.WorldEditor;
 import org.eclipse.osee.ats.ide.world.WorldEditorSimpleProvider;
 import org.eclipse.osee.framework.core.data.ArtifactToken;
-import org.eclipse.osee.framework.core.util.JsonUtil;
 import org.eclipse.osee.framework.jdk.core.util.Lib;
 import org.eclipse.osee.framework.jdk.core.util.Strings;
 import org.eclipse.osee.framework.logging.OseeLog;
@@ -141,7 +140,7 @@
    public boolean preShutdown(IWorkbench workbench, boolean forced) {
       try {
          if (visitedItems != null && !visitedItems.getReverseVisited().isEmpty()) {
-            String toStoreJson = JsonUtil.toJson(visitedItems);
+            String toStoreJson = AtsApiService.get().jaxRsApi().toJson(visitedItems);
             String fromStoreJson = AtsApiService.get().getUserConfigValue(RECENTLY_VISITED_TOKENS);
             if (!toStoreJson.equals(fromStoreJson)) {
                AtsApiService.get().setUserConfigValue(RECENTLY_VISITED_TOKENS, toStoreJson);
diff --git a/plugins/org.eclipse.osee.ats.ide/src/org/eclipse/osee/ats/ide/util/widgets/XAttachmentCombo.java b/plugins/org.eclipse.osee.ats.ide/src/org/eclipse/osee/ats/ide/util/widgets/XAttachmentCombo.java
index 79fa57b..e05d304 100644
--- a/plugins/org.eclipse.osee.ats.ide/src/org/eclipse/osee/ats/ide/util/widgets/XAttachmentCombo.java
+++ b/plugins/org.eclipse.osee.ats.ide/src/org/eclipse/osee/ats/ide/util/widgets/XAttachmentCombo.java
@@ -37,7 +37,6 @@
 import org.eclipse.osee.framework.core.enums.CoreBranches;
 import org.eclipse.osee.framework.core.enums.CoreRelationTypes;
 import org.eclipse.osee.framework.core.exception.ArtifactDoesNotExist;
-import org.eclipse.osee.framework.core.util.JsonUtil;
 import org.eclipse.osee.framework.core.util.Result;
 import org.eclipse.osee.framework.jdk.core.type.Pair;
 import org.eclipse.osee.framework.jdk.core.util.Lib;
@@ -132,7 +131,8 @@
 
    protected Map<String, BranchId> getNameToLocationMap() {
       String locationList = getFileListString();
-      AtsAttachments allAttachments = JsonUtil.readValue(locationList, AtsAttachments.class);
+
+      AtsAttachments allAttachments = AtsApiService.get().jaxRsApi().readValue(locationList, AtsAttachments.class);
       for (AtsAttachment attachment : allAttachments.getAttachments()) {
          nameBranchMap.put(attachment.getName(), attachment.getBranch());
          location = attachment.getlocation();
diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/AtsDbConfigBase.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/AtsDbConfigBase.java
index e0a3738..c12c405 100644
--- a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/AtsDbConfigBase.java
+++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/AtsDbConfigBase.java
@@ -53,7 +53,6 @@
 import org.eclipse.osee.framework.core.enums.PermissionEnum;
 import org.eclipse.osee.framework.core.enums.SystemUser;
 import org.eclipse.osee.framework.core.server.OseeInfo;
-import org.eclipse.osee.framework.core.util.JsonUtil;
 import org.eclipse.osee.framework.core.util.OseeInf;
 import org.eclipse.osee.framework.jdk.core.result.XResultData;
 import org.eclipse.osee.framework.jdk.core.util.Conditions;
@@ -135,7 +134,7 @@
       AtsAttachments checklists = new AtsAttachments();
       checklists.addAttachment(new AtsAttachment("Document_Checklist", "osee", DemoBranches.Processes));
       checklists.addAttachment(new AtsAttachment("Process_Checklist", "osee", DemoBranches.Processes));
-      String jsonToStore = JsonUtil.toJson(checklists);
+      String jsonToStore = atsApi.jaxRsApi().toJson(checklists);
       atsApi.setConfigValue("PeerReviewChecklist", jsonToStore);
 
       // Create Processes Branch
@@ -164,7 +163,7 @@
       AtsAttachments checklists = new AtsAttachments();
       checklists.addAttachment(new AtsAttachment("W_Document_Checklist", "osee", DemoBranches.Processes));
       checklists.addAttachment(new AtsAttachment("W_Process_Checklist", "osee", DemoBranches.Processes));
-      String jsonToStore = JsonUtil.toJson(checklists);
+      String jsonToStore = atsApi.jaxRsApi().toJson(checklists);
       atsApi.setConfigValue("WalkthroughChecklist", jsonToStore);
 
       // Create Top Folder on Processes Branch
diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/UpdateAtsConfiguration.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/UpdateAtsConfiguration.java
index 26fcbd2..cf73f1d 100644
--- a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/UpdateAtsConfiguration.java
+++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/config/UpdateAtsConfiguration.java
@@ -23,12 +23,12 @@
 import org.eclipse.osee.ats.api.config.AtsViews;
 import org.eclipse.osee.ats.api.config.IAtsConfigurationViewsProvider;
 import org.eclipse.osee.ats.api.util.ColorColumns;
+import org.eclipse.osee.framework.core.JaxRsApi;
 import org.eclipse.osee.framework.core.data.UserId;
 import org.eclipse.osee.framework.core.enums.CoreAttributeTypes;
 import org.eclipse.osee.framework.core.enums.CoreBranches;
 import org.eclipse.osee.framework.core.enums.DeletionFlag;
 import org.eclipse.osee.framework.core.enums.SystemUser;
-import org.eclipse.osee.framework.core.util.JsonUtil;
 import org.eclipse.osee.framework.core.util.OseeInf;
 import org.eclipse.osee.framework.jdk.core.result.XResultData;
 import org.eclipse.osee.framework.jdk.core.util.Collections;
@@ -51,10 +51,12 @@
 
    private final AtsApi atsApi;
    private final OrcsApi orcsApi;
+   private final JaxRsApi jaxRsApi;
 
    public UpdateAtsConfiguration(AtsApi atsApi, OrcsApi orcsApi) {
       this.atsApi = atsApi;
       this.orcsApi = orcsApi;
+      this.jaxRsApi = orcsApi.jaxRsApi();
    }
 
    public XResultData createUpdateConfig(XResultData rd) {
@@ -82,7 +84,7 @@
       try {
          AtsViews databaseViews = atsApi.getConfigService().getConfigurations().getViews();
          for (String viewsJson : getViewsJsonStrings()) {
-            AtsViews atsViews = JsonUtil.readValue(viewsJson, AtsViews.class);
+            AtsViews atsViews = jaxRsApi.readValue(viewsJson, AtsViews.class);
             // merge any new default view items to current database view items
             List<AtsAttributeValueColumn> toAdd = new LinkedList<>();
             for (AtsAttributeValueColumn defaultView : atsViews.getAttrColumns()) {
@@ -133,7 +135,7 @@
    }
 
    private String getViewsAttrValue(AtsViews defaultViews) {
-      return VIEWS_EQUAL_KEY + JsonUtil.toJson(defaultViews);
+      return VIEWS_EQUAL_KEY + jaxRsApi.toJson(defaultViews);
    }
 
    private void createUpdateValidStateAttributes() throws Exception {
@@ -155,7 +157,7 @@
    public AtsViews getConfigViews(String viewsStr) {
       AtsViews views = null;
       if (Strings.isValid(viewsStr)) {
-         views = JsonUtil.readValue(viewsStr, AtsViews.class);
+         views = jaxRsApi.readValue(viewsStr, AtsViews.class);
       } else {
          views = new AtsViews();
       }
@@ -165,7 +167,7 @@
    public ColorColumns getColorColumns(String colorStr) {
       ColorColumns columns = null;
       if (Strings.isValid(colorStr)) {
-         columns = JsonUtil.readValue(colorStr, ColorColumns.class);
+         columns = jaxRsApi.readValue(colorStr, ColorColumns.class);
       } else {
          columns = new ColorColumns();
       }
diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/AtsWorkPackageEndpointImpl.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/AtsWorkPackageEndpointImpl.java
index 6b8862a..76a014d 100644
--- a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/AtsWorkPackageEndpointImpl.java
+++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/AtsWorkPackageEndpointImpl.java
@@ -33,7 +33,6 @@
 import org.eclipse.osee.ats.api.util.IAtsChangeSet;
 import org.eclipse.osee.ats.api.workflow.WorkItemType;
 import org.eclipse.osee.framework.core.data.TransactionId;
-import org.eclipse.osee.framework.core.util.JsonUtil;
 import org.eclipse.osee.framework.jdk.core.result.XResultData;
 import org.eclipse.osee.framework.jdk.core.type.OseeArgumentException;
 import org.eclipse.osee.framework.jdk.core.util.Strings;
@@ -110,7 +109,7 @@
       String colorTeamStr = atsApi.getConfigValue(COLOR_TEAM_KEY);
       ColorTeams teams = null;
       if (Strings.isValid(colorTeamStr)) {
-         teams = JsonUtil.readValue(colorTeamStr, ColorTeams.class);
+         teams = atsApi.jaxRsApi().readValue(colorTeamStr, ColorTeams.class);
       } else {
          teams = new ColorTeams();
       }
diff --git a/plugins/org.eclipse.osee.config.admin/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.config.admin/META-INF/MANIFEST.MF
index 7c96226..2b91d90 100644
--- a/plugins/org.eclipse.osee.config.admin/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.osee.config.admin/META-INF/MANIFEST.MF
@@ -7,8 +7,9 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-Vendor: Eclipse Open System Engineering Environment
 Service-Component: OSGI-INF/*.xml
-Import-Package: com.fasterxml.jackson.databind,
- com.fasterxml.jackson.core,
+Import-Package: com.fasterxml.jackson.core,
+ com.fasterxml.jackson.databind,
+ org.eclipse.osee.framework.core,
  org.eclipse.osee.framework.core.util,
  org.eclipse.osee.framework.jdk.core.type,
  org.eclipse.osee.framework.jdk.core.util,
diff --git a/plugins/org.eclipse.osee.config.admin/OSGI-INF/config.manager.xml b/plugins/org.eclipse.osee.config.admin/OSGI-INF/config.manager.xml
index f4e24ec..c69e251 100644
--- a/plugins/org.eclipse.osee.config.admin/OSGI-INF/config.manager.xml
+++ b/plugins/org.eclipse.osee.config.admin/OSGI-INF/config.manager.xml
@@ -3,4 +3,5 @@
    <implementation class="org.eclipse.osee.config.admin.internal.ConfigManagerImpl"/>
    <reference bind="setLogger" cardinality="1..1" interface="org.eclipse.osee.logger.Log" name="Log" policy="static"/>
    <reference bind="setConfigAdmin" cardinality="1..1" interface="org.osgi.service.cm.ConfigurationAdmin" name="ConfigurationAdmin" policy="static"/>
+   <reference bind="bindJaxRsApi" cardinality="1..1" interface="org.eclipse.osee.framework.core.JaxRsApi" name="jaxRsApi" policy="static"/>
 </scr:component>
diff --git a/plugins/org.eclipse.osee.config.admin/src/org/eclipse/osee/config/admin/internal/ConfigManagerImpl.java b/plugins/org.eclipse.osee.config.admin/src/org/eclipse/osee/config/admin/internal/ConfigManagerImpl.java
index 0d69268..4a98163 100644
--- a/plugins/org.eclipse.osee.config.admin/src/org/eclipse/osee/config/admin/internal/ConfigManagerImpl.java
+++ b/plugins/org.eclipse.osee.config.admin/src/org/eclipse/osee/config/admin/internal/ConfigManagerImpl.java
@@ -23,6 +23,7 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicReference;
+import org.eclipse.osee.framework.core.JaxRsApi;
 import org.eclipse.osee.framework.jdk.core.util.Compare;
 import org.eclipse.osee.framework.jdk.core.util.Lib;
 import org.eclipse.osee.framework.jdk.core.util.io.UriWatcher;
@@ -36,15 +37,19 @@
  */
 public class ConfigManagerImpl implements UriWatcherListener {
 
-   private final ConfigParser parser = new ConfigParser();
-
-   private Log logger;
-   private ConfigurationAdmin configAdmin;
-
-   private ConfigManagerConfiguration config;
    private final AtomicReference<UriWatcher> watcherRef = new AtomicReference<>();
    private final Map<String, ServiceConfig> services = new HashMap<>();
 
+   private ConfigParser parser;
+   private JaxRsApi jaxRsApi;
+   private Log logger;
+   private ConfigurationAdmin configAdmin;
+   private ConfigManagerConfiguration config;
+
+   public void bindJaxRsApi(JaxRsApi jaxRsApi) {
+      this.jaxRsApi = jaxRsApi;
+   }
+
    public void setLogger(Log logger) {
       this.logger = logger;
    }
@@ -55,7 +60,7 @@
 
    public void start(Map<String, Object> properties) {
       logger.trace("Starting ConfigurationManagerImpl...");
-
+      parser = new ConfigParser(jaxRsApi);
       update(properties);
    }
 
diff --git a/plugins/org.eclipse.osee.config.admin/src/org/eclipse/osee/config/admin/internal/ConfigParser.java b/plugins/org.eclipse.osee.config.admin/src/org/eclipse/osee/config/admin/internal/ConfigParser.java
index e638105..13d3214 100644
--- a/plugins/org.eclipse.osee.config.admin/src/org/eclipse/osee/config/admin/internal/ConfigParser.java
+++ b/plugins/org.eclipse.osee.config.admin/src/org/eclipse/osee/config/admin/internal/ConfigParser.java
@@ -17,7 +17,7 @@
 import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.Map.Entry;
-import org.eclipse.osee.framework.core.util.JsonUtil;
+import org.eclipse.osee.framework.core.JaxRsApi;
 import org.eclipse.osee.framework.jdk.core.util.Strings;
 import org.osgi.framework.Constants;
 
@@ -33,10 +33,15 @@
  * @author Roberto E. Escobar
  */
 public class ConfigParser {
+   private final JaxRsApi jaxRsApi;
+
+   public ConfigParser(JaxRsApi jaxRsApi) {
+      this.jaxRsApi = jaxRsApi;
+   }
 
    public void process(ConfigWriter writer, String source) {
       if (Strings.isValid(source)) {
-         JsonNode services = JsonUtil.readTree(source).get("config");
+         JsonNode services = jaxRsApi.readTree(source).get("config");
 
          for (JsonNode serviceNode : services) {
             Hashtable<String, Object> properties = new Hashtable<>();
