diff --git a/gdb-port/parser.py b/gdb-port/parser.py
index d8d53dc12d268f9365ca0290faf103d37df1c0ce..3af1f561deb5cdd043f519bc060a20ae267439e7 100644
--- a/gdb-port/parser.py
+++ b/gdb-port/parser.py
@@ -81,7 +81,7 @@ class ParserStack:
 		self.parse_state = parse_state
 		self.parse_state_gdbval = parse_state
 		self.arena = arena
-		self.arena_int = int(arena)
+		self.arena_int = 0
 		# TODO: remove?
 		self.arena_gdbval = arena
 		# self.parse_state and self.arena is expected to be an int by TopLevelParse and is ultimately used to index into the memory usage dict
@@ -181,6 +181,13 @@ class ParserStack:
 			retval = None
 		return retval
 
+	def set_arena(self, arena):
+		self.arena = arena
+		try:
+			self.arena_int = int(arena)
+		except TypeError:
+			self.arena_int = 0
+
 	def set_state(self, state):
 		self.parse_state = state
 	# Shortcut for setting the name property of the parser on the top of stack
diff --git a/gdb-port/top-level-parse.py b/gdb-port/top-level-parse.py
index ee40a1c887639784f19e745d386b89d0df934a30..ff2af3b12e9674ecaf5ca691a8ca9c6811a2f827 100644
--- a/gdb-port/top-level-parse.py
+++ b/gdb-port/top-level-parse.py
@@ -68,8 +68,8 @@ class TopLevelParse:
 		parser_stack.push(parser_obj, arena, stopping_at_bp)
 		if stopping_at_bp:
 			profiler.enable()
-			self.gather_all_allocations_in_parserstacks()
-			self.commit_pending_allocations(self.pending_allocations)
+			self.gather_allocations_in_parser_stacks()
+			self.commit_pending_allocations()
 			profiler.disable()
 		parser_obj.increment_apply_count(int(arena))
 		if parser_stack.parse_state is None and parser_stack.parse_state != parse_state_int:
@@ -89,7 +89,7 @@ class TopLevelParse:
 	def first_h_do_parse_after_packrat_parse(self, parse_state, arena):
 		parser_stack = self.peek_parserstack()
 		if arena and not parser_stack.arena:
-			parser_stack.arena = arena
+			parser_stack.set_arena(arena)
 		parser_stack.set_state(parse_state)
 
 	# Popping the stack of stack of parsers
@@ -277,7 +277,7 @@ class TopLevelParse:
 			new_allocs_by_arena = ps.get_pending_allocations()
 			new_allocs = new_allocs_by_arena.get(ps.arena_int, {})
 			pending_allocs = self.pending_allocs.get(ps.arena_int, {})
-			for addr, alloc in new_allocs:
+			for addr, alloc in new_allocs.items():
 				pending_allocs[addr] = pending_allocs.get(addr, 0) + alloc
 			self.pending_allocs[ps.arena_int] = pending_allocs
 
@@ -289,7 +289,7 @@ class TopLevelParse:
 	def commit_pending_allocations(self):
 		for arena, allocs in self.pending_allocs.items():
 			for addr, alloc in allocs.items():
-				parser_objs[addr].add_mem_use(arena, alloc)
+				self.parser_by_address(addr).add_mem_use(arena, alloc)
 		self.pending_allocs = {}
 
 top_level_parse = TopLevelParse()