diff --git a/src/jtag/jtag.c b/src/jtag/jtag.c
index 605d58aabd62c22834c1308111aea8aa978d81e0..663518a3355f82d21cf060d807149c143434c9be 100644
--- a/src/jtag/jtag.c
+++ b/src/jtag/jtag.c
@@ -463,6 +463,39 @@ void* cmd_queue_alloc(size_t size)
 	int offset;
 	u8 *t;
 
+	/*
+	 * WARNING:
+	 *    We align/round the *SIZE* per below
+	 *    so that all pointers returned by
+	 *    this function are reasonably well
+	 *    aligned.
+	 *
+	 * If we did not, then an "odd-length" request would cause the
+	 * *next* allocation to be at an *odd* address, and because
+	 * this function has the same type of api as malloc() - we
+	 * must also return pointers that have the same type of
+	 * alignment.
+	 *
+	 * What I do not/have is a reasonable portable means
+	 * to align by... 
+	 *
+	 * The solution here, is based on these suggestions.
+	 * http://gcc.gnu.org/ml/gcc-help/2008-12/msg00041.html
+	 *
+	 */
+	union worse_case_align {
+	  int i;
+	  long l;
+	  float f;
+	  void *v;
+	};
+#define ALIGN_SIZE  (sizeof(union worse_case_align))
+
+	// The alignment process.
+	size = (size + ALIGN_SIZE -1) & (~(ALIGN_SIZE-1));
+	// Done... 
+	
+
 	if (*p_page)
 	{
 		while ((*p_page)->next)