diff --git a/Tests/LibWeb/Text/expected/DOM/createEvent-hashchangeevent.txt b/Tests/LibWeb/Text/expected/DOM/createEvent-hashchangeevent.txt
new file mode 100644
index 00000000000..8ebc2fc8fbc
--- /dev/null
+++ b/Tests/LibWeb/Text/expected/DOM/createEvent-hashchangeevent.txt
@@ -0,0 +1 @@
+[object HashChangeEvent]
diff --git a/Tests/LibWeb/Text/input/DOM/createEvent-hashchangeevent.html b/Tests/LibWeb/Text/input/DOM/createEvent-hashchangeevent.html
new file mode 100644
index 00000000000..43c851a4a2d
--- /dev/null
+++ b/Tests/LibWeb/Text/input/DOM/createEvent-hashchangeevent.html
@@ -0,0 +1,7 @@
+
+
diff --git a/Userland/Libraries/LibWeb/DOM/Document.cpp b/Userland/Libraries/LibWeb/DOM/Document.cpp
index 1885cee12a3..4cf2976d474 100644
--- a/Userland/Libraries/LibWeb/DOM/Document.cpp
+++ b/Userland/Libraries/LibWeb/DOM/Document.cpp
@@ -1624,7 +1624,7 @@ WebIDL::ExceptionOr> Document::create_event(StringView i
} else if (Infra::is_ascii_case_insensitive_match(interface, "focusevent"sv)) {
event = UIEvents::FocusEvent::create(realm, FlyString {});
} else if (Infra::is_ascii_case_insensitive_match(interface, "hashchangeevent"sv)) {
- event = Event::create(realm, FlyString {}); // FIXME: Create HashChangeEvent
+ event = HTML::HashChangeEvent::create(realm, FlyString {}, {});
} else if (Infra::is_ascii_case_insensitive_match(interface, "htmlevents"sv)) {
event = Event::create(realm, FlyString {});
} else if (Infra::is_ascii_case_insensitive_match(interface, "keyboardevent"sv)) {