Minor - simplify add_e820() function.
diff --git a/src/memmap.c b/src/memmap.c
index 5b7eba5..49f129b 100644
--- a/src/memmap.c
+++ b/src/memmap.c
@@ -72,26 +72,20 @@
             continue;
         // Found position - check if an existing item needs to be split.
         if (start > e->start) {
-            e->size = start - e->start;
-            i++;
-            if (end < e_end)
-                // Need to split existing item
-                insert_e820(i, end, e_end - end, e->type);
             if (type == e->type) {
                 // Same type - merge them.
                 size += start - e->start;
                 start = e->start;
-                i--;
-                remove_e820(i);
+            } else {
+                // Split existing item.
+                e->size = start - e->start;
+                i++;
+                if (e_end > end)
+                    insert_e820(i, end, e_end - end, e->type);
             }
         }
         break;
     }
-    // Insert new item.
-    if (type != E820_HOLE) {
-        insert_e820(i, start, size, type);
-        i++;
-    }
     // Remove/adjust existing items that are overlapping.
     while (i<e820_count) {
         struct e820entry *e = &e820_list[i];
@@ -106,14 +100,17 @@
         }
         // Not completely overlapped - adjust its start.
         e->start = end;
-        e->size = e_end - e->start;
+        e->size = e_end - end;
         if (type == e->type) {
             // Same type - merge them.
-            (e-1)->size += e->size;
+            size += e->size;
             remove_e820(i);
         }
         break;
     }
+    // Insert new item.
+    if (type != E820_HOLE)
+        insert_e820(i, start, size, type);
     //dump_map();
 }