Index: libcfa/src/concurrency/channel.hfa
===================================================================
--- libcfa/src/concurrency/channel.hfa	(revision 4a962d89fa077776f051d1c19453ecfdc43f8349)
+++ libcfa/src/concurrency/channel.hfa	(revision cca034e78c063229f7fccb63e0fc61c8a2232f40)
@@ -16,5 +16,5 @@
 
 forall( T ) {
-struct __attribute__ ((aligned (64))) channel {
+struct channel {
     size_t size;
     size_t front, back, count;
@@ -49,4 +49,12 @@
     lock( mutex_lock );
 
+    // have to check for the zero size channel case
+    if ( size == 0 && !empty( cons ) ) {
+        memcpy((void *)front( cons ), (void *)&elem, sizeof(T));
+        notify_one( cons );
+        unlock( mutex_lock );
+        return;
+    }
+
     // wait if buffer is full, work will be completed by someone else
     if ( count == size ) { 
@@ -55,10 +63,10 @@
     } // if
 
-    if ( count == 0 && !empty( prods ) )
+    if ( count == 0 && !empty( cons ) )
         // do waiting consumer work
-        memcpy((void *)front( prods ), (void *)&elem, sizeof(T)); 
+        memcpy((void *)front( cons ), (void *)&elem, sizeof(T)); 
     else insert_( chan, elem );
     
-    notify_one( prods );
+    notify_one( cons );
     unlock( mutex_lock );
 }
@@ -68,7 +76,15 @@
     T retval;
 
+    // have to check for the zero size channel case
+    if ( size == 0 && !empty( prods ) ) {
+        memcpy((void *)&retval, (void *)front( prods ), sizeof(T));
+        notify_one( prods );
+        unlock( mutex_lock );
+        return retval;
+    }
+
     // wait if buffer is empty, work will be completed by someone else
     if (count == 0) { 
-        wait( prods, mutex_lock, (uintptr_t)&retval );
+        wait( cons, mutex_lock, (uintptr_t)&retval );
         return retval;
     }
