Index: trunk/psLib/src/imageops/psImageConvolve.c
===================================================================
--- trunk/psLib/src/imageops/psImageConvolve.c	(revision 24091)
+++ trunk/psLib/src/imageops/psImageConvolve.c	(revision 24272)
@@ -122,4 +122,22 @@
 
     return kernel;
+}
+
+psKernel *psKernelCopy(const psKernel *in)
+{
+    PS_ASSERT_KERNEL_NON_NULL(in, NULL);
+
+    psKernel *out = psAlloc(sizeof(psKernel)); // The copied kernel, to be returned
+    psMemSetDeallocator(out,(psFreeFunc)kernelFree);
+
+    out->image = psImageCopy(NULL, in->image, PS_TYPE_KERNEL);
+    out->xMin = in->xMin;
+    out->xMax = in->xMax;
+    out->yMin = in->yMin;
+    out->yMax = in->yMax;
+
+    kernelRedirects(out, out->image->numRows);
+
+    return out;
 }
 
Index: trunk/psLib/src/imageops/psImageConvolve.h
===================================================================
--- trunk/psLib/src/imageops/psImageConvolve.h	(revision 24091)
+++ trunk/psLib/src/imageops/psImageConvolve.h	(revision 24272)
@@ -96,4 +96,11 @@
     );
 
+/// Copy a kernel
+///
+/// Performs a deep copy of the input kernel
+psKernel *psKernelCopy(
+    const psKernel *in                  ///< Kernel to be copied
+    );
+
 /// Checks the type of a particular pointer.
 ///
