diff --git a/src/engine.c b/src/engine.c
index 53109fe3f30b7beb31458e9ffdc88c492167389c..97f5ea60b2f7cf25fb0e8fd334e56a6126aa3258 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -2011,11 +2011,17 @@ void engine_init ( struct engine *e , struct space *s , float dt , int nr_thread
                 cpuid[k] = k;
             }
         else {
+            /*  Get next highest power of 2. */
+            int maxint = 1;
+            while ( maxint < nr_cores )
+                maxint *= 2;
+
             cpuid[0] = 0;
             k = 1;
-            for ( i = 1 ; i < nr_cores ; i *= 2 )
-                for ( j = nr_cores / i / 2 ; j < nr_cores ; j += nr_cores / i )
-                    cpuid[k++] = j;
+            for ( i = 1 ; i < maxint ; i *= 2 )
+                for ( j = maxint / i / 2 ; j < maxint ; j += maxint / i )
+                    if ( j < nr_cores && j != 0 )
+                        cpuid[k++] = j;
             #ifdef WITHMPI
                 printf( "engine_init: cpu map is [ " );
             #else
diff --git a/src/proxy.c b/src/proxy.c
index 6c8f4e40476a755d186dda43461c0dc93b156fd0..d96f59b8eca0860c38a09bce6e4c94f7337cd4e6 100644
--- a/src/proxy.c
+++ b/src/proxy.c
@@ -285,7 +285,7 @@ void proxy_parts_load ( struct proxy *p , struct part *parts , struct xpart *xpa
              ( txp = (struct xpart *)malloc( sizeof(struct xpart) * p->size_parts_out ) ) == NULL )
             error( "Failed to re-allocate parts_out buffers." );
         memcpy( tp , p->parts_out , sizeof(struct part) * p->nr_parts_out );
-        memcpy( txp , p->xparts_out , sizeof(struct part) * p->nr_parts_out );
+        memcpy( txp , p->xparts_out , sizeof(struct xpart) * p->nr_parts_out );
         free( p->parts_out ); free( p->xparts_out );
         p->parts_out = tp; p->xparts_out = txp;
         }