Index: libcfa/src/heap.cfa
===================================================================
--- libcfa/src/heap.cfa	(revision a3ade94ddb746f47182c794855a010a21a22fe48)
+++ libcfa/src/heap.cfa	(revision 03b87140d3ea5db3ea3980d3c2f28fc2108508ed)
@@ -1233,9 +1233,10 @@
 	// Attempt to reuse existing storage.
 	HeapManager.Storage.Header * header = headerAddr( oaddr );
-	if ( unlikely ( ( header->kind.fake.alignment & 1 == 1 &&	// old fake header ?
+	bool isFakeHeader = header->kind.fake.alignment & 1 == 1;	// old fake header ?
+	if ( unlikely ( ( isFakeHeader &&
 				 (uintptr_t)oaddr % nalign == 0 && 				// lucky match ?
 				 header->kind.fake.alignment <= nalign &&		// ok to leave LSB at 1
 			 	 nalign <= 128 )								// not too much alignment storage wasted ?
-			||   ( header->kind.fake.alignment & 1 != 1 &&		// old real header ( aligned on libAlign ) ?
+			||   ( (!isFakeHeader) &&							// old real header ( aligned on libAlign ) ?
 				 nalign == libAlign() ) ) ) {					// new alignment also on libAlign
 
@@ -1246,5 +1247,7 @@
 
 		if ( size <= odsize && odsize <= size * 2 ) { // allow 50% wasted data storage
-			headerAddr( oaddr )->kind.fake.alignment = nalign | 1; // update alignment (could be the same)
+			if ( isFakeHeader ) {
+				headerAddr( oaddr )->kind.fake.alignment = nalign | 1; // update alignment (could be the same)
+			}
 
 			header->kind.real.blockSize &= -2;		// turn off 0 fill
@@ -1287,12 +1290,15 @@
 
 	// Attempt to reuse existing storage.
-	if ( unlikely ( ( header->kind.fake.alignment & 1 == 1 &&	// old fake header ?
+	bool isFakeHeader = header->kind.fake.alignment & 1 == 1;	// old fake header ?
+	if ( unlikely ( ( isFakeHeader &&
 				 (uintptr_t)oaddr % nalign == 0 && 				// lucky match ?
 				 header->kind.fake.alignment <= nalign &&		// ok to leave LSB at 1
 			 	 nalign <= 128 )								// not too much alignment storage wasted ?
-			||   ( header->kind.fake.alignment & 1 != 1 &&		// old real header ( aligned on libAlign ) ?
+			||   ( (!isFakeHeader) &&							// old real header ( aligned on libAlign ) ?
 				 nalign == libAlign() ) ) ) {					// new alignment also on libAlign
 
-		headerAddr( oaddr )->kind.fake.alignment = nalign | 1; // update alignment (could be the same)
+		if ( isFakeHeader ) {
+			headerAddr( oaddr )->kind.fake.alignment = nalign | 1; // update alignment (could be the same)
+		}
 		return realloc( oaddr, size );
 
