diff --git a/framework/base/src/org/ofbiz/base/test/BaseUnitTests.java b/framework/base/src/org/ofbiz/base/test/BaseUnitTests.java
index fc9c136..b58e956 100644
--- a/framework/base/src/org/ofbiz/base/test/BaseUnitTests.java
+++ b/framework/base/src/org/ofbiz/base/test/BaseUnitTests.java
@@ -32,14 +32,19 @@
     }
 
     public void testDebug() {
-        Debug.set(Debug.VERBOSE, true);
-        assertTrue(Debug.verboseOn());
-
-        Debug.set(Debug.VERBOSE, false);
-        assertFalse(Debug.verboseOn());
-
-        Debug.set(Debug.INFO, true);
-        assertTrue(Debug.infoOn());
+        boolean debugVerbose = Debug.get(Debug.VERBOSE);
+        boolean debugInfo = Debug.get(Debug.INFO);
+        try {
+            Debug.set(Debug.VERBOSE, true);
+            assertTrue(Debug.verboseOn());
+            Debug.set(Debug.VERBOSE, false);
+            assertFalse(Debug.verboseOn());
+            Debug.set(Debug.INFO, true);
+            assertTrue(Debug.infoOn());
+        } finally {
+            Debug.set(Debug.VERBOSE, debugVerbose);
+            Debug.set(Debug.INFO, debugInfo);
+        }
     }
 
     public void testFormatPrintableCreditCard_1() {
diff --git a/framework/service/src/org/ofbiz/service/eca/ServiceEcaCondition.java b/framework/service/src/org/ofbiz/service/eca/ServiceEcaCondition.java
index becedaa..cf6d309 100644
--- a/framework/service/src/org/ofbiz/service/eca/ServiceEcaCondition.java
+++ b/framework/service/src/org/ofbiz/service/eca/ServiceEcaCondition.java
@@ -144,7 +144,7 @@
                     Map<String, ? extends Object> envMap = UtilGenerics.checkMap(context.get(lhsMapName));
                     lhsValue = envMap.get(lhsValueName);
                 } else {
-                    Debug.logWarning("From Map (" + lhsMapName + ") not found in context, defaulting to null.", module);
+                    Debug.logInfo("From Map (" + lhsMapName + ") not found in context, defaulting to null.", module);
                 }
             } catch (ClassCastException e) {
                 throw new GenericServiceException("From Map field [" + lhsMapName + "] is not a Map.", e);
@@ -153,7 +153,7 @@
             if (context.containsKey(lhsValueName)) {
                 lhsValue = context.get(lhsValueName);
             } else {
-                Debug.logWarning("From Field (" + lhsValueName + ") is not found in context for " + serviceName + ", defaulting to null.", module);
+                Debug.logInfo("From Field (" + lhsValueName + ") is not found in context for " + serviceName + ", defaulting to null.", module);
             }
         }
 
@@ -165,7 +165,7 @@
                     Map<String, ? extends Object> envMap = UtilGenerics.checkMap(context.get(rhsMapName));
                     rhsValue = envMap.get(rhsValueName);
                 } else {
-                    Debug.logWarning("To Map (" + rhsMapName + ") not found in context for " + serviceName + ", defaulting to null.", module);
+                    Debug.logInfo("To Map (" + rhsMapName + ") not found in context for " + serviceName + ", defaulting to null.", module);
                 }
             } catch (ClassCastException e) {
                 throw new GenericServiceException("To Map field [" + rhsMapName + "] is not a Map.", e);
@@ -185,7 +185,7 @@
         Boolean cond = ObjectType.doRealCompare(lhsValue, rhsValue, operator, compareType, format, messages, null, dctx.getClassLoader(), isConstant);
 
         // if any messages were returned send them out
-        if (messages.size() > 0) {
+        if (messages.size() > 0 && Debug.warningOn()) {
             for (Object message: messages) {
                 Debug.logWarning(message.toString(), module);
             }
