diff --git a/gdb-port/commands.py b/gdb-port/commands.py
index f021c21352fedc82f02b7e7c4bcd95658cecc3ca..c792d5083f2fd08fd9d3829b267704593fc209fc 100644
--- a/gdb-port/commands.py
+++ b/gdb-port/commands.py
@@ -176,18 +176,25 @@ class HammerArenaDumpStats(gdb.Command):
 
 	def invoke(self, arg, from_tty):
 		args = gdb.string_to_argv(arg)
-		if len(args) != 1:
-			print("Usage: hammer-arena-dump-stats <arena address in hex>")
-		arena = args[0]
-		try:
-			arena_int = int(arena,16)
-		except ValueError as ve:
+		if len(args) > 1:
 			print("Usage: hammer-arena-dump-stats <arena address in hex>")
 			return
+		elif len(args) == 0:
+			arena_gdbvalue = top_level_parse.peek_parserstack().arena
+			arena = hex(arena_gdbvalue) # For printing
+		else:
+			arena = args[0]
+
+			try:
+				arena_int = int(arena,16)
+			except ValueError as ve:
+				print("Usage: hammer-arena-dump-stats <arena address in hex>")
+				return
+			HArena_p_t = gdb.lookup_type("HArena").pointer()
+			arena_gdbvalue = gdb.Value(arena_int).cast(HArena_p_t) # TODO: how do we validate it's really a HArena at the given address?
+
 		detailed = top_level_parse.extended_arena_stats_available()
 		print("Arena statistics for", arena, "( DETAILED_ARENA_STATISTICS:", detailed, "):")
-		HArena_p_t = gdb.lookup_type("HArena").pointer()
-		arena_gdbvalue = gdb.Value(arena_int).cast(HArena_p_t) # TODO: how do we validate it's really a HArena at the given address?
 		for key in gdb.lookup_type("HArena").keys():
 			print(key, ":", arena_gdbvalue[key])
 
diff --git a/gdb-port/hammer-breakpoints.py b/gdb-port/hammer-breakpoints.py
index b743701e8c12be90bd5dd2e92b2aac382f7f9327..b122009e6eb40486c9b20d2f762c12f6dd4d42b6 100644
--- a/gdb-port/hammer-breakpoints.py
+++ b/gdb-port/hammer-breakpoints.py
@@ -21,12 +21,13 @@ class HDoParseBreakpoint(gdb.Breakpoint):
 		parser = int(block['parser'].value(frame))
 		state = int(block['state'].value(frame))
 		parse_state = block['state'].value(frame)
+		arena = parse_state['arena']
 		index = parse_state.dereference()['input_stream']['index']
 		input_ptr = parse_state.dereference()['input_stream']['input']
 		token_start = index
 
-		#top_level_parse.enter_h_do_parse(parse_state, None, parser)
-		top_level_parse.enter_h_do_parse(state, None, parser)
+		#top_level_parse.enter_h_do_parse(parse_state, None, parser) # Note for the future: passing it as int is intended here, memory stats' keys turn into gdb values too
+		top_level_parse.enter_h_do_parse(state, arena, parser)
 
 		input_chunk = input_ptr + index
 		#print(input_chunk.string('ascii','backslashreplace',10))
diff --git a/gdb-port/top-level-parse.py b/gdb-port/top-level-parse.py
index 54481f5bc1356a3542fe7e16b285620c53feea80..6dcbd8607a311da9bb6c5e3deb2ac58498a3bad9 100644
--- a/gdb-port/top-level-parse.py
+++ b/gdb-port/top-level-parse.py
@@ -72,6 +72,8 @@ class TopLevelParse:
 	# Called from h_do_parse()'s handler, at which point we know the addresses of the state and arena
 	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_state(parse_state)
 
 	# Popping the stack of stack of parsers