diff --git a/examples/local_pool_op.c b/examples/local_pool_op.c
index 72a099eaf368ae08e551486cd1d44819a55736ad..bbb3eab4fdf329964aa70ccdb38d42aec846cd30 100644
--- a/examples/local_pool_op.c
+++ b/examples/local_pool_op.c
@@ -123,7 +123,7 @@
 
 #define __STDC_FORMAT_MACROS
 #include <inttypes.h>
-
+#include <string.h>
 
 /* simplify logging */
 #define DEBUG(...) LOG_DEBUG(MSTRO_LOG_MODULE_USER,__VA_ARGS__)
@@ -238,7 +238,7 @@ wait_for_announcement(struct cdo_announcement *announcement)
   }
   s = mstro_cdo_attribute_set(announcement_cdo,
                               MSTRO_ATTR_CORE_CDO_RAW_PTR,
-                              announcement);
+                              announcement, false);
   if(s!=MSTRO_OK) {
     ERR("Failed to set raw-ptr attribute on announcement CDO\n");
     abort();
@@ -287,7 +287,7 @@ do_announce(struct cdo_announcement *announcement, mstro_cdo *result)
   }
   s = mstro_cdo_attribute_set(announcement_cdo,
                               MSTRO_ATTR_CORE_CDO_RAW_PTR,
-                              announcement);
+                              announcement, false);
 
   if(s!=MSTRO_OK) {
     ERR("Failed to set raw-ptr attribute on  announcement CDO\n");
@@ -451,24 +451,22 @@ archiver_flush_to_disk(const char *name, mmbArray *a)
     abort();
   }
 
-  size_t nt;
-  stat = mmb_tile_iterator_count(it, &nt);
-  if(stat != MMB_OK) {
-    ERR("Failed to get tile iterator count\n");
-    abort();
-  }
-  stat = mmb_tile_iterator_first(it);
-  if(stat != MMB_OK) {
-    ERR("Failed to move tile iterator to first\n");
-    abort();
-  }
+  mmbDimensions *tiling_dims = NULL;
+  stat = mmb_tiling_dimensions(a, &tiling_dims);
+
+  
   FILE *dst = fopen((const char*)name, "w");
   if(dst==NULL) {
     ERR("Failed to open %s for writing\n", name);
     abort();
   }
-  for(size_t i = 0; i < nt; i++){
-    mmbArrayTile* tile = it->tile;
+  for(size_t i = 0; i < tiling_dims->d[0]; i++){
+    mmbArrayTile* tile = NULL;
+    stat = mmb_tile_at_1d(a, i, &tile); 
+    if(stat != MMB_OK) {
+       ERR("Failed to obtain tile %zu: %d\n", i, stat);
+       abort();
+    }
     size_t count = fwrite(&MMB_IDX_1D(tile, tile->lower[0], char),
                           1,
                           tile->upper[0]-tile->lower[0],
@@ -477,19 +475,16 @@ archiver_flush_to_disk(const char *name, mmbArray *a)
       ERR("Incomplete write on tile %d of %s\n", i, name);
       abort();
     }
-    stat = mmb_tile_iterator_next(it);
-    if(stat != MMB_OK) {
-      ERR("Failed to increment tile iterator\n");
-      abort();
-    }
   }
   if(0!=fclose(dst)) {
     ERR("Failed to close %s after writing\n", name);
     abort();
   }
-  stat = mmb_tile_iterator_destroy(it);
+
+  // destroy tiling dim info:
+  stat = mmb_dimensions_destroy(tiling_dims);
   if(stat != MMB_OK) {
-    ERR("Failed to free tile iterator\n");
+    ERR("Failed to destroy tiling dimension info\\n");
     abort();
   }
 
@@ -551,10 +546,10 @@ archiver_thread_fun(void *closure)
       }
       s = mstro_cdo_attribute_set(incoming[i],
                                   MSTRO_ATTR_CORE_CDO_RAW_PTR,
-                                  incoming_buffers[i]);
+                                  incoming_buffers[i], false);
       s |= mstro_cdo_attribute_set(incoming[i],
                                    MSTRO_ATTR_CORE_CDO_SCOPE_LOCAL_SIZE,
-                                   &announcement->cdo_size);
+                                   &announcement->cdo_size, true);
       //      INFO("archiver cdo %d incoming buffer %p\n", i, incoming_buffers[i]);
 
       if(s!=MSTRO_OK) {
@@ -672,10 +667,10 @@ producer_thread_fun(void *closure)
 
       s = mstro_cdo_attribute_set(outgoing[i],
                                   MSTRO_ATTR_CORE_CDO_RAW_PTR,
-                                  outgoing_buffers[i]);
+                                  outgoing_buffers[i], false);
       s |= mstro_cdo_attribute_set(outgoing[i],
                                    MSTRO_ATTR_CORE_CDO_SCOPE_LOCAL_SIZE,
-                                   &announcement->cdo_size);
+                                   &announcement->cdo_size, true);
 
       if(s!=MSTRO_OK) {
         ERR("Failed to add outgoing buffer to CDO %s\n",
@@ -804,10 +799,10 @@ consumer_thread_fun(void *closure)
       }
       s = mstro_cdo_attribute_set(incoming[i],
                                   MSTRO_ATTR_CORE_CDO_RAW_PTR,
-                                  incoming_buffers[i]);
+                                  incoming_buffers[i], false);
       s |= mstro_cdo_attribute_set(incoming[i],
                                    MSTRO_ATTR_CORE_CDO_SCOPE_LOCAL_SIZE,
-                                   &announcement->cdo_size);
+                                   &announcement->cdo_size, true);
       //      INFO("consumer cdo %d incoming buffer %p\n", i, incoming_buffers[i]);
 
       if(s!=MSTRO_OK) {