diff --git a/gdb-port/parser.py b/gdb-port/parser.py
index cbdd8c9397824cea264a652ccbf34b4d37baefd9..5cc5cd5533908f148c14778476e2a42b7b5ca235 100644
--- a/gdb-port/parser.py
+++ b/gdb-port/parser.py
@@ -268,6 +268,7 @@ class ParserStack:
 		current_frame_alloc = current_event[1] - previous_event[1]
 		#print("commit_at_pop: current_frame_alloc", current_frame_alloc) # DEBUG
 		pop_allocs = {}
+		parser_cache = {}
 
 		# TODO: clean up
 		if len(ev_list) == 1:
@@ -277,22 +278,28 @@ class ParserStack:
 			self.committed = len(self.stack_events)-1
 		#	print("commit_at_pop: pop_allocs:", { current_event[2].address: current_frame_alloc }) # DEBUG
 			pop_allocs[current_event[2].address] = pop_allocs.get(current_event[2].address, 0) + current_frame_alloc
+			parser_cache[current_event[2].address] = current_event[2]
 		#	return { current_event[2].address: current_frame_alloc }
 		elif len(ev_list) > 1:
-			bytes_list = [ev[1] for ev in ev_list]
+			#bytes_list = [ev[1] for ev in ev_list]
 
-			differences = map(lambda smaller, bigger: bigger-smaller, bytes_list[:-1], bytes_list[1:])
+			#differences = map(lambda smaller, bigger: bigger-smaller, bytes_list[:-1], bytes_list[1:])
+			differences = [bigger[1]-smaller[1] for bigger, smaller in zip(ev_list[1:], ev_list[:-1])]
+			# TODO: this could be a list comprehension too
 			for index, event in enumerate(ev_list[:-1]):
-				alloc = next(differences)
+				parser_cache[int(event[2].address)] = event[2]
+				alloc = differences[index]
+				pop_allocs[event[2].address] = pop_allocs.get(event[2].address, 0) + alloc
+				#alloc = next(differences)
 				#print("commit_at_pop: alloc:", alloc) # DEBUG
 				#print("commit_at_pop: adding to parser", event[2].name, hex(event[2].address))
 				#event[2].add_mem_use(int(self.arena), alloc)
-				pop_allocs[event[2].address] = pop_allocs.get(event[2].address, 0) + alloc
 
 		#print("commit_at_pop: pop_allocs:", pop_allocs) # DEBUG
 		self.unclaimed_mem_use += pop_allocs.pop(0,0) # Account for allocs and remove with no parser, so it doesn't cause problems in the loop below
 		for parser_addr, alloc in pop_allocs.items():
-			top_level_parse.parser_by_address(parser_addr).add_mem_use(int(self.arena), alloc)
+			#top_level_parse.parser_by_address(parser_addr).add_mem_use(int(self.arena), alloc)
+			parser_cache[parser_addr].add_mem_use(int(self.arena), alloc)
 		self.committed = len(self.stack_events)-1
 		return pop_allocs