diff --git a/gson/pom.xml b/gson/pom.xml
index 110fccb..81b9549 100644
--- a/gson/pom.xml
+++ b/gson/pom.xml
@@ -34,7 +34,6 @@
     <properties>
         <!-- TODO move to top-level or parent -->
         <jersey.version>2.25.1</jersey.version>
-        <jackson.version>2.9.5</jackson.version>
     </properties>
 
     <dependencies>
@@ -48,11 +47,6 @@
             <artifactId>gson</artifactId>
         </dependency>
         <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-annotations</artifactId>
-            <version>${jackson.version}</version>
-        </dependency>
-        <dependency>
             <groupId>org.assertj</groupId>
             <artifactId>assertj-core</artifactId>
             <scope>test</scope>
diff --git a/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/properties/PolicyEndPointProperties.java b/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/properties/PolicyEndPointProperties.java
index 2b1a9a3..2979c7e 100644
--- a/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/properties/PolicyEndPointProperties.java
+++ b/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/properties/PolicyEndPointProperties.java
@@ -32,7 +32,6 @@
     String PROPERTY_TOPIC_EVENTS_SUFFIX = ".events";
     String PROPERTY_TOPIC_EVENTS_FILTER_SUFFIX = ".filter";
     String PROPERTY_TOPIC_EVENTS_CUSTOM_MODEL_CODER_GSON_SUFFIX = ".events.custom.gson";
-    String PROPERTY_TOPIC_EVENTS_CUSTOM_MODEL_CODER_JACKSON_SUFFIX = ".events.custom.jackson";
 
     String PROPERTY_TOPIC_SOURCE_CONSUMER_GROUP_SUFFIX = ".consumerGroup";
     String PROPERTY_TOPIC_SOURCE_CONSUMER_INSTANCE_SUFFIX = ".consumerInstance";
diff --git a/utils-test/src/main/java/org/onap/policy/common/utils/gson/GsonTestUtils.java b/utils-test/src/main/java/org/onap/policy/common/utils/gson/GsonTestUtils.java
index bfdca97..d3354e4 100644
--- a/utils-test/src/main/java/org/onap/policy/common/utils/gson/GsonTestUtils.java
+++ b/utils-test/src/main/java/org/onap/policy/common/utils/gson/GsonTestUtils.java
@@ -61,7 +61,7 @@
     /**
      * Engine used to interpolate strings before they're compared.
      */
-    private static volatile ScriptEngine engine = null;
+    private static volatile ScriptEngine engineInstance = null;
 
     /**
      * Used to encode and decode an object via gson.
@@ -198,13 +198,9 @@
             return text;
         }
 
-        // create the engine and bind the object to the variable, "obj"
-        if (engine == null) {
-            // race condition here, but it's ok to overwrite with a new engine
-            engine = new ScriptEngineManager().getEngineByName("javascript");
-        }
-
-        Bindings bindings = engine.createBindings();
+        // bind the object to the variable, "obj"
+        ScriptEngine eng = getEngine();
+        Bindings bindings = eng.createBindings();
         bindings.put("obj", object);
 
         // work our way through the text, interpolating script elements as we go
@@ -222,11 +218,15 @@
             // interpolate the script
             String script = mat.group(1);
             try {
-                Object result = engine.eval(script, bindings);
+                /*
+                 * Note: must use "eng" instead of "engineInstance" to ensure that we use
+                 * the same engine that's associated with the bindings.
+                 */
+                Object result = eng.eval(script, bindings);
                 bldr.append(result == null ? "null" : result.toString());
 
             } catch (ScriptException e) {
-                throw new RuntimeException("cannot expand element: " + mat.group(), e);
+                throw new JsonParseException("cannot expand element: " + mat.group(), e);
             }
         }
 
@@ -237,6 +237,20 @@
     }
 
     /**
+     * Gets the script engine instance.
+     *
+     * @return the script engine
+     */
+    private static ScriptEngine getEngine() {
+        if (engineInstance == null) {
+            // race condition here, but it's ok to overwrite with a new engine
+            engineInstance = new ScriptEngineManager().getEngineByName("javascript");
+        }
+
+        return engineInstance;
+    }
+
+    /**
      * Encodes an object using gson.
      *
      * @param object the object to be encoded
diff --git a/utils-test/src/test/java/org/onap/policy/common/utils/gson/GsonTestUtilsTest.java b/utils-test/src/test/java/org/onap/policy/common/utils/gson/GsonTestUtilsTest.java
index 39cde7d..58beb2a 100644
--- a/utils-test/src/test/java/org/onap/policy/common/utils/gson/GsonTestUtilsTest.java
+++ b/utils-test/src/test/java/org/onap/policy/common/utils/gson/GsonTestUtilsTest.java
@@ -135,8 +135,10 @@
         result = utils.applyScripts("use ${obj.text} this", data);
         assertEquals("use null this", result);
 
-        assertThatThrownBy(() -> utils.applyScripts("use ${obj.text} this", null)).isInstanceOf(RuntimeException.class)
-                        .hasCauseInstanceOf(ScriptException.class).hasMessage("cannot expand element: ${obj.text}");
+        assertThatThrownBy(() -> utils.applyScripts("use ${obj.text} this", null))
+                        .isInstanceOf(JsonParseException.class)
+                        .hasCauseInstanceOf(ScriptException.class)
+                        .hasMessage("cannot expand element: ${obj.text}");
     }
 
     @Test
