diff --git a/src/main/java/net/onrc/onos/core/datagrid/web/GetNGEventsResource.java b/src/main/java/net/onrc/onos/core/datagrid/web/GetNGEventsResource.java
index 52fccdc..3191762 100644
--- a/src/main/java/net/onrc/onos/core/datagrid/web/GetNGEventsResource.java
+++ b/src/main/java/net/onrc/onos/core/datagrid/web/GetNGEventsResource.java
@@ -30,12 +30,11 @@
 
         Collection<TopologyEvent> entries = channel.getAllEntries();
 
-        String result = "";
+        StringBuilder result = new StringBuilder();
         for (TopologyEvent event : entries) {
-            result += event.toString() + "\n";
+            result.append(event.toString() + "\n");
         }
 
-        return result;
+        return result.toString();
     }
-
 }
diff --git a/src/main/java/net/onrc/onos/core/intent/runtime/PlanInstallRuntime.java b/src/main/java/net/onrc/onos/core/intent/runtime/PlanInstallRuntime.java
index 7607373..00c3f7e 100644
--- a/src/main/java/net/onrc/onos/core/intent/runtime/PlanInstallRuntime.java
+++ b/src/main/java/net/onrc/onos/core/intent/runtime/PlanInstallRuntime.java
@@ -84,14 +84,16 @@
         }
 
         static void printCount() {
-            String result = "FLOWMOD COUNT:\n";
+            StringBuilder result = new StringBuilder();
+
+            result.append("FLOWMOD COUNT:\n");
             for (FlowModCount count : map.values()) {
-                result += count.toString() + '\n';
+                result.append(count.toString() + '\n');
             }
             if (map.values().isEmpty()) {
-                result += "No flow mods installed\n";
+                result.append("No flow mods installed\n");
             }
-            log.error(result);
+            log.error(result.toString());
         }
     }
 
@@ -153,5 +155,4 @@
         // TODO: we assume that the plan installation succeeds for now
         return true;
     }
-
 }
diff --git a/src/main/java/net/onrc/onos/core/util/DataPath.java b/src/main/java/net/onrc/onos/core/util/DataPath.java
index 1aa514c..0c8b7c7 100644
--- a/src/main/java/net/onrc/onos/core/util/DataPath.java
+++ b/src/main/java/net/onrc/onos/core/util/DataPath.java
@@ -151,13 +151,15 @@
      */
     @Override
     public String toString() {
-        String ret = "[src=" + this.srcPort.toString();
+        StringBuilder ret = new StringBuilder();
+
+        ret.append("[src=" + this.srcPort.toString());
 
         for (FlowEntry fe : flowEntries) {
-            ret += " flowEntry=" + fe.toString();
+            ret.append(" flowEntry=" + fe.toString());
         }
-        ret += " dst=" + this.dstPort.toString() + "]";
+        ret.append(" dst=" + this.dstPort.toString() + "]");
 
-        return ret;
+        return ret.toString();
     }
 }
diff --git a/src/main/java/net/onrc/onos/core/util/FlowEntryActions.java b/src/main/java/net/onrc/onos/core/util/FlowEntryActions.java
index fc55932..421312e 100644
--- a/src/main/java/net/onrc/onos/core/util/FlowEntryActions.java
+++ b/src/main/java/net/onrc/onos/core/util/FlowEntryActions.java
@@ -95,13 +95,15 @@
      */
     @Override
     public String toString() {
-        String ret = "[";
-        for (FlowEntryAction action : actions) {
-            ret += action.toString() + ";";
-        }
-        ret += "]";
+        StringBuilder ret = new StringBuilder();
 
-        return ret;
+        ret.append("[");
+        for (FlowEntryAction action : actions) {
+            ret.append(action.toString() + ";");
+        }
+        ret.append("]");
+
+        return ret.toString();
     }
 
     /**
diff --git a/src/main/java/net/onrc/onos/core/util/PerformanceMonitor.java b/src/main/java/net/onrc/onos/core/util/PerformanceMonitor.java
index 7fb0597..5c02664 100644
--- a/src/main/java/net/onrc/onos/core/util/PerformanceMonitor.java
+++ b/src/main/java/net/onrc/onos/core/util/PerformanceMonitor.java
@@ -97,10 +97,12 @@
      * Write all performance measurements to the log
      */
     public void reportAll() {
-        String result = "Performance Results: (avg/start/stop/count)\n";
+        StringBuilder result = new StringBuilder();
+
+        result.append("Performance Results: (avg/start/stop/count)\n");
         if (map.size() == 0) {
-            result += "No Measurements";
-            log.error(result);
+            result.append("No Measurements");
+            log.error(result.toString());
             return;
         }
         long experimentEnd = -1;
@@ -131,16 +133,16 @@
             // Normalize start/stop
             start -= experimentStart;
             stop -= experimentStart;
-            result += key + '=' +
+            result.append(key + '=' +
                     (avg / NORMALIZATION) + '/' +
                     (start / NORMALIZATION) + '/' +
                     (stop / NORMALIZATION) + '/' +
-                    count + '\n';
+                    count + '\n');
         }
         double overheadMs = overhead / NORMALIZATION;
         double experimentElapsed = (experimentEnd - experimentStart) / NORMALIZATION;
-        result += "TotalTime:" + experimentElapsed + "/Overhead:" + overheadMs;
-        log.error(result);
+        result.append("TotalTime:" + experimentElapsed + "/Overhead:" + overheadMs);
+        log.error(result.toString());
 //      log.error("Performance Results: {} with measurement overhead: {} ms", map, overheadMilli);
     }
 
