diff --git a/src/core/hle/kernel/object.cpp b/src/core/hle/kernel/object.cpp
index d87a62bb93735512e486873cf86d47c0ad8316a3..bb1b687786256ed2a533fb5ee091b8e1308d1d01 100644
--- a/src/core/hle/kernel/object.cpp
+++ b/src/core/hle/kernel/object.cpp
@@ -13,7 +13,7 @@ Object::~Object() = default;
 
 bool Object::IsWaitable() const {
     switch (GetHandleType()) {
-    case HandleType::Event:
+    case HandleType::ReadableEvent:
     case HandleType::Thread:
     case HandleType::Timer:
     case HandleType::ServerPort:
@@ -21,6 +21,7 @@ bool Object::IsWaitable() const {
         return true;
 
     case HandleType::Unknown:
+    case HandleType::WritableEvent:
     case HandleType::SharedMemory:
     case HandleType::Process:
     case HandleType::AddressArbiter:
diff --git a/src/core/hle/kernel/object.h b/src/core/hle/kernel/object.h
index 69082ce3ed4544714be1e8dc160d057072cd80a2..f1606a204b1b4e0da23b7660d0e97526ca284a15 100644
--- a/src/core/hle/kernel/object.h
+++ b/src/core/hle/kernel/object.h
@@ -19,7 +19,8 @@ using Handle = u32;
 
 enum class HandleType : u32 {
     Unknown,
-    Event,
+    WritableEvent,
+    ReadableEvent,
     SharedMemory,
     Thread,
     Process,
diff --git a/src/core/hle/kernel/readable_event.h b/src/core/hle/kernel/readable_event.h
index b1f1f48717d9bb675df22a04b983fc7fa0f5d0ea..867ff3051de799b9da0d0de76f52ac1c324fb48e 100644
--- a/src/core/hle/kernel/readable_event.h
+++ b/src/core/hle/kernel/readable_event.h
@@ -29,7 +29,7 @@ public:
         return reset_type;
     }
 
-    static const HandleType HANDLE_TYPE = HandleType::Event;
+    static const HandleType HANDLE_TYPE = HandleType::ReadableEvent;
     HandleType GetHandleType() const override {
         return HANDLE_TYPE;
     }
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp
index b022a7bc5e36f987774f5baf2597e42234b3b02c..812b3200570a0bfbf46c92d3476fd5696e8f30b7 100644
--- a/src/core/hle/kernel/svc.cpp
+++ b/src/core/hle/kernel/svc.cpp
@@ -1602,14 +1602,21 @@ static ResultCode ClearEvent(Handle handle) {
     LOG_TRACE(Kernel_SVC, "called, event=0x{:08X}", handle);
 
     const auto& handle_table = Core::CurrentProcess()->GetHandleTable();
-    SharedPtr<ReadableEvent> evt = handle_table.Get<ReadableEvent>(handle);
-    if (evt == nullptr) {
-        LOG_ERROR(Kernel_SVC, "Event handle does not exist, handle=0x{:08X}", handle);
-        return ERR_INVALID_HANDLE;
+
+    auto writable_event = handle_table.Get<WritableEvent>(handle);
+    if (writable_event) {
+        writable_event->Clear();
+        return RESULT_SUCCESS;
     }
 
-    evt->Clear();
-    return RESULT_SUCCESS;
+    auto readable_event = handle_table.Get<ReadableEvent>(handle);
+    if (readable_event) {
+        readable_event->Clear();
+        return RESULT_SUCCESS;
+    }
+
+    LOG_ERROR(Kernel_SVC, "Event handle does not exist, handle=0x{:08X}", handle);
+    return ERR_INVALID_HANDLE;
 }
 
 static ResultCode GetProcessInfo(u64* out, Handle process_handle, u32 type) {
diff --git a/src/core/hle/kernel/writable_event.h b/src/core/hle/kernel/writable_event.h
index fc57d18d7c9ef389172521a8258ae65b8594f674..8fa8d68eecd2e700f073c89e24b0898e5c6878af 100644
--- a/src/core/hle/kernel/writable_event.h
+++ b/src/core/hle/kernel/writable_event.h
@@ -39,7 +39,7 @@ public:
         return name;
     }
 
-    static const HandleType HANDLE_TYPE = HandleType::Event;
+    static const HandleType HANDLE_TYPE = HandleType::WritableEvent;
     HandleType GetHandleType() const override {
         return HANDLE_TYPE;
     }
diff --git a/src/yuzu/debugger/wait_tree.cpp b/src/yuzu/debugger/wait_tree.cpp
index 96c57fe976609c754ca40a4a62d0716d39efabbc..f9c18ede4cca22cab07a3d832675d70c4d543818 100644
--- a/src/yuzu/debugger/wait_tree.cpp
+++ b/src/yuzu/debugger/wait_tree.cpp
@@ -153,7 +153,7 @@ QString WaitTreeWaitObject::GetText() const {
 
 std::unique_ptr<WaitTreeWaitObject> WaitTreeWaitObject::make(const Kernel::WaitObject& object) {
     switch (object.GetHandleType()) {
-    case Kernel::HandleType::Event:
+    case Kernel::HandleType::ReadableEvent:
         return std::make_unique<WaitTreeEvent>(static_cast<const Kernel::ReadableEvent&>(object));
     case Kernel::HandleType::Timer:
         return std::make_unique<WaitTreeTimer>(static_cast<const Kernel::Timer&>(object));