diff --git a/RTCP/CNProc/src/BeamFormer.cc b/RTCP/CNProc/src/BeamFormer.cc
index 98735c0ab089ea751445973e2c004e04f6cf9c55..9869350c1ebf7ee107bf949d96dd20724c325247 100644
--- a/RTCP/CNProc/src/BeamFormer.cc
+++ b/RTCP/CNProc/src/BeamFormer.cc
@@ -619,8 +619,8 @@ void BeamFormer::preTransposeBeams( const BeamFormedData *in, PreTransposeBeamFo
 void BeamFormer::postTransposeBeams( const TransposedBeamFormedData *in, FinalBeamFormedData *out, unsigned sb )
 {
   ASSERT( in->samples.shape()[0] > sb );
-  ASSERT( in->samples.shape()[1] == itsNrChannels );
-  ASSERT( in->samples.shape()[2] >= itsNrSamplesPerIntegration / itsIntegrationSteps );
+  ASSERT( in->samples.shape()[1] >= itsNrSamplesPerIntegration / itsIntegrationSteps );
+  ASSERT( in->samples.shape()[2] == itsNrChannels );
 
   ASSERT( out->samples.shape()[0] >= itsNrSamplesPerIntegration / itsIntegrationSteps );
   ASSERT( out->samples.shape()[1] > sb );
@@ -632,23 +632,23 @@ void BeamFormer::postTransposeBeams( const TransposedBeamFormedData *in, FinalBe
   /* reference implementation */
   for (unsigned c = 0; c < itsNrChannels; c++) {
     for (unsigned t = 0; t < itsNrSamplesPerIntegration / itsIntegrationSteps; t++) {
-      out->samples[t][sb][c] = in->samples[sb][c][t];
+      out->samples[t][sb][c] = in->samples[sb][t][c];
     }
   }
 #else
-  /* in_stride == 1 */
-  unsigned out_stride = &out->samples[1][0][0] - &out->samples[0][0][0];
+  unsigned allChannelSize = itsNrChannels * sizeof in->samples[0][0][0];
 
-  for (unsigned c = 0; c < itsNrChannels; c++) {
-    const fcomplex *inb =  &in->samples[sb][c][0];
-    fcomplex *outb = &out->samples[0][sb][c];
+  const fcomplex *inb = &in->samples[sb][0][0];
+  unsigned in_stride = &in->samples[sb][1][0] - &in->samples[sb][0][0];
 
-    for (unsigned t = 0; t < itsNrSamplesPerIntegration / itsIntegrationSteps; t++) {
-      *outb = *inb;
+  fcomplex *outb = &out->samples[0][sb][0];
+  unsigned out_stride = &out->samples[1][sb][0] - &out->samples[0][sb][0];
 
-      inb++;
-      outb += out_stride;
-    }
+  for (unsigned t = 0; t < itsNrSamplesPerIntegration / itsIntegrationSteps; t++) {
+    memcpy( outb, inb, allChannelSize );
+
+    inb += in_stride;
+    outb += out_stride;
   }
 #endif  
 }
diff --git a/RTCP/Interface/include/Interface/BeamFormedData.h b/RTCP/Interface/include/Interface/BeamFormedData.h
index 339084ae1d92bfce1b8729c8496ebac62ca32f91..19cda09a2fa635c1861efe0338669d1f694557ce 100644
--- a/RTCP/Interface/include/Interface/BeamFormedData.h
+++ b/RTCP/Interface/include/Interface/BeamFormedData.h
@@ -87,7 +87,7 @@ inline PreTransposeBeamFormedData::PreTransposeBeamFormedData(unsigned nrBeams,
 
 inline TransposedBeamFormedData::TransposedBeamFormedData(unsigned nrSubbands, unsigned nrChannels, unsigned nrSamplesPerIntegration)
 :
-  SuperType(false,boost::extents[nrSubbands][nrChannels][nrSamplesPerIntegration | 2], nrSubbands)
+  SuperType(false,boost::extents[nrSubbands][nrSamplesPerIntegration | 2][nrChannels], nrSubbands)
 {
 }