diff --git a/src/protobuf.c b/src/protobuf.c
index ca482d675ba588cf838ac5219607e3c5167ecc2c..f85f2c0dc0612e8d55990f49c00ba7ff0e500834 100644
--- a/src/protobuf.c
+++ b/src/protobuf.c
@@ -252,10 +252,8 @@ static void
 init_uint32_packed (readosm_uint32_packed * packed)
 {
 /* initialing an empty PBF uint32 packed object */
-    packed->max = 128;
-    packed->values = malloc(packed->max * sizeof(unsigned int));
-    packed->next = packed->values;
-    packed->count = 0;
+    packed->max = packed->count = 0;
+    packed->values = packed->next = NULL;
 }
 
 static void
@@ -263,7 +261,7 @@ append_uint32_packed (readosm_uint32_packed * packed, unsigned int val)
 {
 /* appending an uint32 value to a PBF packed object */
     if (packed->count == packed->max) {
-        packed->max *= 2;
+        packed->max = (packed->max == 0) ? 256 : 2 * packed->max;
         packed->values = realloc(packed->values, packed->max * sizeof(unsigned int));
         packed->next = packed->values + packed->count;
     }
@@ -280,8 +278,7 @@ static void
 finalize_uint32_packed (readosm_uint32_packed * packed)
 {
 /* cleaning any memory allocation for an uint32 packed object */
-    if (packed->values)
-	free (packed->values);
+    if (packed->values) free (packed->values);
     packed->values = packed->next = NULL;
     packed->max = packed->count = 0;
 }
@@ -290,17 +287,16 @@ static void
 reset_uint32_packed (readosm_uint32_packed * packed)
 {
 /* resetting an uint32 packed object to empty initial state */
-    finalize_uint32_packed (packed);
+    packed->next = packed->values;
+    packed->count = 0;
 }
 
 static void
 init_int32_packed (readosm_int32_packed * packed)
 {
 /* initialing an empty PBF int32 packed object */
-    packed->max = 256;
-    packed->values = malloc(packed->max * sizeof(int));
-    packed->count = 0;
-    packed->next = packed->values;
+    packed->max = packed->count = 0;
+    packed->values = packed->next = NULL;
 }
 
 static void
@@ -308,7 +304,7 @@ append_int32_packed (readosm_int32_packed * packed, int val)
 {
 /* appending an int32 value to a PBF packed object */
     if (packed->count == packed->max) {
-        packed->max *= 2;
+        packed->max = (packed->max == 0) ? 256 : 2 * packed->max;
         packed->values = realloc(packed->values, packed->max * sizeof(int));
         packed->next = packed->values + packed->count;
     }
@@ -320,8 +316,7 @@ static void
 finalize_int32_packed (readosm_int32_packed * packed)
 {
 /* cleaning any memory allocation for an int32 packed object */
-    if (packed->values)
-	free (packed->values);
+    if (packed->values)	free (packed->values);
     packed->values = packed->next = NULL;
     packed->max = packed->count = 0;
 }
@@ -330,17 +325,16 @@ static void
 reset_int32_packed (readosm_int32_packed * packed)
 {
 /* resetting an int32 packed object to empty initial state */
-    finalize_int32_packed (packed);
+    packed->next = packed->values;
+    packed->count = 0;
 }
 
 static void
 init_int64_packed (readosm_int64_packed * packed)
 {
 /* initialing an empty PBF int64 packed object */
-    packed->max = 128;
-    packed->values = malloc(packed->max * sizeof(long long));
-    packed->next = packed->values;
-    packed->count = 0;
+    packed->max = packed->count = 0;
+    packed->values = packed->next = NULL;
 }
 
 static void
@@ -348,7 +342,7 @@ append_int64_packed (readosm_int64_packed * packed, long long val)
 {
 /* appending an int64 value to a PBF packed object */
     if (packed->count == packed->max) {
-        packed->max *= 2;
+        packed->max = (packed->max == 0) ? 256 : 2 * packed->max;
         packed->values = realloc(packed->values, packed->max * sizeof(long long));
         packed->next = packed->values + packed->count;
     }
@@ -365,8 +359,7 @@ static void
 finalize_int64_packed (readosm_int64_packed * packed)
 {
 /* cleaning any memory allocation for an int64 packed object */
-    if (packed->values)
-	free (packed->values);
+    if (packed->values) free (packed->values);
     packed->values = packed->next = NULL;
     packed->count = 0;
     packed->max = 0;
@@ -376,7 +369,8 @@ static void
 reset_int64_packed (readosm_int64_packed * packed)
 {
 /* resetting an int64 packed object to empty initial state */
-    finalize_int64_packed (packed);
+    packed->next = packed->values;
+    packed->count = 0;
 }
 
 static void