diff --git a/src/libpmemobj/alloc_class.c b/src/libpmemobj/alloc_class.c
index 6fd749e..cc46cd1 100644
--- a/src/libpmemobj/alloc_class.c
+++ b/src/libpmemobj/alloc_class.c
@@ -72,12 +72,12 @@
  * class generation algorithm. All smaller sizes use the first predefined bucket
  * with the smallest run unit size.
  */
-#define FIRST_GENERATED_CLASS_SIZE 128
+#define FIRST_GENERATED_CLASS_SIZE MIN_RUN_SIZE
 
 /*
  * The granularity of the allocation class generation algorithm.
  */
-#define ALLOC_BLOCK_SIZE_GEN 64
+#define ALLOC_BLOCK_SIZE_GEN 16
 
 static struct {
 	size_t size;
diff --git a/src/libpmemobj/container_seglists.c b/src/libpmemobj/container_seglists.c
index 0e870aa..2638e7c 100644
--- a/src/libpmemobj/container_seglists.c
+++ b/src/libpmemobj/container_seglists.c
@@ -51,7 +51,10 @@
  * every node.
  */
 struct seglist_entry {
-	struct memory_block m;
+	uint32_t chunk_id;
+	uint32_t zone_id;
+	uint32_t size_idx;
+	uint16_t block_off;
 	STAILQ_ENTRY(seglist_entry) entry;
 };
 
@@ -92,7 +95,10 @@ container_seglists_insert_block(struct block_container *bc,
 	VALGRIND_ADD_TO_TX(e, sizeof(*e));
 	VALGRIND_ADD_TO_TX(last, sizeof(*last));
 
-	e->m = *m;
+	e->block_off = m->block_off;
+	e->chunk_id = m->chunk_id;
+	e->size_idx = m->size_idx;
+	e->zone_id = m->zone_id;
 
 	/*
 	 * Add to the end of the list, so that the blocks inserted first are
@@ -146,7 +152,12 @@ container_seglists_get_rm_block_bestfit(struct block_container *bc,
 	VALGRIND_SET_CLEAN(e, sizeof(*e));
 	VALGRIND_REMOVE_FROM_TX(e, sizeof(*e));
 
-	*m = e->m;
+	m->block_off = e->block_off;
+	m->chunk_id = e->chunk_id;
+	m->size_idx = e->size_idx;
+	m->zone_id = e->zone_id;
+
+	memblock_rebuild_state(bc->heap, m);
 
 	return 0;
 }
diff --git a/src/libpmemobj/heap_layout.h b/src/libpmemobj/heap_layout.h
index c371f57..4acf901 100644
--- a/src/libpmemobj/heap_layout.h
+++ b/src/libpmemobj/heap_layout.h
@@ -54,12 +54,12 @@
 #define HEAP_MIN_SIZE (sizeof(struct heap_layout) + ZONE_MIN_SIZE)
 
 #define BITS_PER_VALUE 64U
-#define MAX_CACHELINE_ALIGNMENT 40 /* run alignment, 5 cachelines */
+#define MAX_CACHELINE_ALIGNMENT 160 /* run alignment, 5 cachelines */
 #define RUN_METASIZE (MAX_CACHELINE_ALIGNMENT * 8)
 #define MAX_BITMAP_VALUES (MAX_CACHELINE_ALIGNMENT - 2)
 #define RUN_BITMAP_SIZE (BITS_PER_VALUE * MAX_BITMAP_VALUES)
 #define RUNSIZE (CHUNKSIZE - RUN_METASIZE)
-#define MIN_RUN_SIZE 128
+#define MIN_RUN_SIZE 32
 
 #define ZID_TO_ZONE(layoutp, zone_id)\
 	((struct zone *)((uintptr_t)&(((struct heap_layout *)(layoutp))->zone0)\
