diff --git a/maestro/cdo.c b/maestro/cdo.c
index 4093b7aef907b52c6c621faa8795347f53e5a8b4..4290ce4505463bc362bd349d41affe3b76897c92 100644
--- a/maestro/cdo.c
+++ b/maestro/cdo.c
@@ -488,7 +488,16 @@ mstro_cdo__create_mamba_array(mstro_cdo cdo)
       ERR("Couldn't create a Mamba layout\n");
       return MSTRO_FAIL;
     }
+    if (cdo->raw_ptr != NULL) {
+      me = mmb_array_create_wrapped(
+          cdo->raw_ptr,
+          &dims,
+          layout,
+          g_default_cdo_interface,
+          MMB_READ_WRITE, &(cdo->mamba_array));
+    } else {
     me = mmb_array_create(&dims, layout, g_default_cdo_interface, MMB_READ_WRITE, & (cdo->mamba_array));
+	}
     if (me != MMB_OK) {
       ERR("Couldn't create a Mamba array\n");
       return MSTRO_FAIL;
@@ -1293,12 +1302,6 @@ mstro_cdo__satisfy(mstro_cdo src, mstro_cdo dst)
       return s;
     }
 
-    s = mstro_cdo__mamba_copy(src, dst);
-    if(s!=MSTRO_OK) {
-      ERR("Failed to perform mamba copy\n");
-      return s;
-    }
-    
     /* FIXME: once mamba_copy takes into account layout properties we need to adjust dst->attributes to avoid doing transformations twice when we do the transform below */
     
   }
@@ -1306,7 +1309,6 @@ mstro_cdo__satisfy(mstro_cdo src, mstro_cdo dst)
   size_t num_precious_attr = 0;
   const char **precious_attributes = NULL;
   
-  /* data is now identical */
   s = mstro_transform_layout(src, dst,
                              src->attributes, dst->attributes);
   /* FIXME: precious attr should be a return value of transform_layout */
@@ -1315,6 +1317,13 @@ mstro_cdo__satisfy(mstro_cdo src, mstro_cdo dst)
     if(s==MSTRO_NOMATCH) {
       /* no applicable transformation */
       DEBUG("No transformation applied\n");
+     
+      s = mstro_cdo__mamba_copy(src, dst);
+      if(s!=MSTRO_OK) {
+        ERR("Failed to perform mamba copy\n");
+        return s;
+      }
+
     } else {
       ERR("Failure trying to apply a transformation\n");
       return s;
@@ -1813,7 +1822,7 @@ mstro_cdo_allocate_data(mstro_cdo cdo)
           cdo->name);
       return MSTRO_FAIL;
     }
-    
+   
     s = mstro_cdo__create_mamba_array(cdo);
     if(s!=MSTRO_OK) {
       ERR("Failed to create mmbArray wrapper for raw-ptr\n");
diff --git a/tests/check_layout.c b/tests/check_layout.c
index 1f97bf7d809c34563c7f5c74dc699e0484a4210a..18caa7ab8309677453983c9a9c55f81988cefaf6 100644
--- a/tests/check_layout.c
+++ b/tests/check_layout.c
@@ -55,6 +55,19 @@
 #define COLMAJ MSTRO_ATTR_CORE_CDO_LAYOUT_ORDER_COLMAJOR
 
 CHEAT_DECLARE (
+	void
+	print_mat(double* p)
+	{
+      size_t i,j;
+	  for (i=0; i<N; i++) {
+        for (j=0; j<M; j++)
+	      fprintf(stderr, "%2.0f ", p[i*M+j]);
+	     fprintf(stderr, "\n");
+	  }
+     fprintf(stderr, "\n");
+
+	}
+
 	unsigned long 
 	mamba_data_diff(mmbArray* src, mmbArray* dst)
 	{
@@ -69,8 +82,10 @@ CHEAT_DECLARE (
       p_dst = dst->allocation->ptr;
       for (i=0,x=0;i<n; i++)
         x += ((unsigned char*)p_src)[i] ^ ((unsigned char*)p_dst)[i];
+
       return x;
     }
+
                )
 
 CHEAT_TEST(layout_attribute_works,
@@ -78,10 +93,13 @@ CHEAT_TEST(layout_attribute_works,
   int64_t bytes = data_count*sizeof(double);
   double* src_data = malloc(bytes);
   double* unpooled_data = malloc(bytes);
+  double* unpooled_data_t = malloc(bytes);
+
+  srandom(time(NULL));
   for(size_t i=0; i<data_count; i++) {
-    src_data[i]=random();
+    src_data[i]=random()%100;
   }
-
+  
   cheat_assert(MSTRO_OK == mstro_init("Tests","LAYOUT",0));
   char name[] = "transformation_pioneer";
   char name_unpooled[] = "unpooled";
@@ -140,7 +158,7 @@ CHEAT_TEST(layout_attribute_works,
   cheat_assert(MSTRO_OK == mstro_cdo_attribute_set(cdo_dst,
 			  MSTRO_ATTR_CORE_CDO_LAYOUT_ORDER, &patt_dst));
   cheat_assert(MSTRO_OK == mstro_cdo_declaration_seal(cdo_dst));
-  cheat_assert(MSTRO_OK == mstro_cdo_require(cdo_dst));
+    cheat_assert(MSTRO_OK == mstro_cdo_require(cdo_dst));
 
   cheat_assert(MSTRO_OK == mstro_cdo_demand(cdo_dst));
   /* at this point automatic transformation was performed */
@@ -169,7 +187,8 @@ CHEAT_TEST(layout_attribute_works,
   cheat_assert(MSTRO_OK == mstro_transform_layout(cdo_src, cdo_unpooled,
                                                   cdo_src->attributes, cdo_unpooled->attributes));
   /* checksum pool and non-pool results */
-  mmbArray* m_dst, *m_unpooled;
+  mmbArray *m_unpooled;
+  mmbArray* m_dst;
   cheat_assert(MSTRO_OK == mstro_cdo_access_mamba_array(cdo_dst, &m_dst));
   cheat_assert(MSTRO_OK == mstro_cdo_access_mamba_array(cdo_unpooled, &m_unpooled));
   cheat_assert(0 == mamba_data_diff(m_dst, m_unpooled));
@@ -185,7 +204,7 @@ CHEAT_TEST(layout_attribute_works,
                                                    (void**)&bytes));
   cheat_assert(MSTRO_OK == mstro_cdo_attribute_set(cdo_unpooled_t,
                                                    MSTRO_ATTR_CORE_CDO_RAW_PTR,
-                                                   unpooled_data));
+                                                   unpooled_data_t));
   cheat_assert(MSTRO_OK == mstro_cdo_attribute_set(cdo_unpooled_t, 
 			  MSTRO_ATTR_CORE_CDO_LAYOUT_ELEMENT_SIZE, &elsz)); 
   cheat_assert(MSTRO_OK == mstro_cdo_attribute_set(cdo_unpooled_t, 
@@ -198,7 +217,8 @@ CHEAT_TEST(layout_attribute_works,
 
   cheat_assert(MSTRO_OK == mstro_transform_layout(cdo_unpooled, cdo_unpooled_t, 
                                                   cdo_unpooled->attributes, cdo_unpooled_t->attributes));
-  mmbArray* m_src, *m_unpooled_t;
+  mmbArray *m_unpooled_t;
+  mmbArray* m_src;
   cheat_assert(MSTRO_OK == mstro_cdo_access_mamba_array(cdo_src, &m_src));
   cheat_assert(MSTRO_OK == mstro_cdo_access_mamba_array(cdo_unpooled_t, &m_unpooled_t));
   cheat_assert(0 == mamba_data_diff(m_src, m_unpooled_t));
@@ -209,6 +229,10 @@ CHEAT_TEST(layout_attribute_works,
 
   cheat_assert(MSTRO_OK == mstro_finalize());
 
+  free(unpooled_data_t);
+  free(unpooled_data);
+  free(src_data);
+
   )
 
 
diff --git a/transformation/transformation.c b/transformation/transformation.c
index fe99469de9d3464a72c23f777d96429ee5eecd1d..8f1516fd18d6a702727f639dced68ace0c5b6ca2 100644
--- a/transformation/transformation.c
+++ b/transformation/transformation.c
@@ -222,7 +222,7 @@ mstro_transform_transpose(
       for (k=0; k<eltsize; k++)
         dst_ptr[i*dst_d0*eltsize + j*eltsize +k]
             = src_ptr[j*dst_d1*eltsize + i*eltsize+k];
-  
+
   }
   return MSTRO_OK;