diff --git a/libfreenect/patches/patch-aa b/libfreenect/patches/patch-aa
new file mode 100644
index 0000000000000000000000000000000000000000..cb6ee1a60915d48f52ff979a5e05a20e9372e2f5
--- /dev/null
+++ b/libfreenect/patches/patch-aa
@@ -0,0 +1,38 @@
+# fixes memory trash in rgb callback
+# thanks to Stéphane Magnenat
+
+*** lib/cameras.c	2010-11-12 11:23:20.380163383 -0500
+--- lib/cameras_fixed.c	2010-11-12 11:26:58.340105544 -0500
+***************
+*** 128,142 ****
+  				} else {
+  					rgb_frame[3*i] = rgb_buf[i];
+  					rgb_frame[3*i+3] = rgb_buf[i];
+! 					rgb_frame[3*(i-640)] = rgb_buf[i];
+! 					rgb_frame[3*(i-640)+3] = rgb_buf[i];
+  				}
+  			} else {
+  				if (y&1) {
+  					rgb_frame[3*i+2] = rgb_buf[i];
+  					rgb_frame[3*i-1] = rgb_buf[i];
+! 					rgb_frame[3*(i+640)+2] = rgb_buf[i];
+! 					rgb_frame[3*(i+640)-1] = rgb_buf[i];
+  				} else {
+  					rgb_frame[3*i+1] = rgb_buf[i];
+  					rgb_frame[3*i-2] = rgb_buf[i];
+--- 128,142 ----
+  				} else {
+  					rgb_frame[3*i] = rgb_buf[i];
+  					rgb_frame[3*i+3] = rgb_buf[i];
+! 					rgb_frame[3*(i+640)] = rgb_buf[i];
+! 					rgb_frame[3*(i+640)+3] = rgb_buf[i];
+  				}
+  			} else {
+  				if (y&1) {
+  					rgb_frame[3*i+2] = rgb_buf[i];
+  					rgb_frame[3*i-1] = rgb_buf[i];
+! 					rgb_frame[3*(i-640)+2] = rgb_buf[i];
+! 					rgb_frame[3*(i-640)-1] = rgb_buf[i];
+  				} else {
+  					rgb_frame[3*i+1] = rgb_buf[i];
+  					rgb_frame[3*i-2] = rgb_buf[i];