diff --git a/CHANGELOG.md b/CHANGELOG.md
index a83a96f93f421198d40d5cf5bb756536d72f2160..fd0b443aac46547ece403dbd5630b8fbaa684150 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,9 +2,10 @@
 
 ## 1.2.0
 
-* Kernels of the same class are now eligible to be run on different devices
+* Kernels of the same class are now eligible to be run on different devices.
 * Added method to set execution mode without any fallback.
-* Added opencl device method for name
+* Added opencl device method for name.
+* Fixed a memory leak.
 
 ## 1.1.2
 
@@ -17,4 +18,4 @@
 
 ## 1.1.0
 
-* Changed group id and package to com.aparapi
\ No newline at end of file
+* Changed group id and package to com.aparapi
diff --git a/src/main/java/com/aparapi/internal/kernel/KernelManager.java b/src/main/java/com/aparapi/internal/kernel/KernelManager.java
index fb1d9aadf1b797fcae41564edd725d73612bbaac..3ae9d30760c0bcd66dd7102bebefa19c149e4826 100644
--- a/src/main/java/com/aparapi/internal/kernel/KernelManager.java
+++ b/src/main/java/com/aparapi/internal/kernel/KernelManager.java
@@ -15,12 +15,20 @@
  */
 package com.aparapi.internal.kernel;
 
-import com.aparapi.*;
-import com.aparapi.device.*;
-import com.aparapi.internal.util.*;
-
-import java.lang.reflect.*;
-import java.util.*;
+import java.lang.reflect.Constructor;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+
+import com.aparapi.Config;
+import com.aparapi.Kernel;
+import com.aparapi.device.Device;
+import com.aparapi.device.JavaDevice;
+import com.aparapi.device.OpenCLDevice;
+import com.aparapi.internal.util.Reflection;
 
 /**
  * Created by Barney on 24/08/2015.
@@ -90,7 +98,7 @@ public class KernelManager {
       builder.append("\n\n");
       for (PreferencesWrapper wrapper : preferences.values()) {
          KernelPreferences preferences = wrapper.getPreferences();
-         Class<? extends Kernel> klass = wrapper.getKernel().getClass();
+         Class<? extends Kernel> klass = wrapper.getKernelClass();
          KernelProfile profile = withProfilingInfo ? profiles.get(klass) : null;
          builder.append(klass.getName()).append(":\n\tusing ").append(preferences.getPreferredDevice(null).getShortDescription());
          List<Device> failedDevices = preferences.getFailedDevices();
@@ -144,7 +152,7 @@ public class KernelManager {
          KernelPreferences kernelPreferences;
          if (wrapper == null) {
             kernelPreferences = new KernelPreferences(this, kernel.getClass());
-            preferences.put(kernel.hashCode(), new PreferencesWrapper(kernel, kernelPreferences));
+            preferences.put(kernel.hashCode(), new PreferencesWrapper(kernel.getClass(), kernelPreferences));
          }else{
            kernelPreferences = preferences.get(kernel.hashCode()).getPreferences();
          }
diff --git a/src/main/java/com/aparapi/internal/kernel/PreferencesWrapper.java b/src/main/java/com/aparapi/internal/kernel/PreferencesWrapper.java
index f5ee10916e9de4b117240d539c9b20d461172fa7..ba8bb0d4ebd2c73f6890adee7344c1617c844c99 100644
--- a/src/main/java/com/aparapi/internal/kernel/PreferencesWrapper.java
+++ b/src/main/java/com/aparapi/internal/kernel/PreferencesWrapper.java
@@ -18,18 +18,18 @@ package com.aparapi.internal.kernel;
 import com.aparapi.Kernel;
 
 public class PreferencesWrapper {
-  
-  private Kernel kernel;
+
+  private Class<? extends Kernel> klass;
   private KernelPreferences preferences;
-  
-  public PreferencesWrapper(Kernel kernel, KernelPreferences preferences) {
+
+  public PreferencesWrapper(Class<? extends Kernel> klass, KernelPreferences preferences) {
     super();
-    this.kernel = kernel;
+    this.klass = klass;
     this.preferences = preferences;
   }
 
-  public Kernel getKernel() {
-    return kernel;
+  public Class<? extends Kernel> getKernelClass() {
+    return klass;
   }
 
   public KernelPreferences getPreferences() {