diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp
index f5f2eb2f7..736be50db 100644
--- a/src/core/hle/kernel/thread.cpp
+++ b/src/core/hle/kernel/thread.cpp
@@ -341,8 +341,8 @@ std::tuple<u32, u32, bool> GetFreeThreadLocalSlot(std::vector<std::bitset<8>>& t
  * @param entry_point Address of entry point for execution
  * @param arg User argument for thread
  */
-static void ResetThreadContext(ARM_Interface::ThreadContext& context, u32 stack_top,
-                               u32 entry_point, u32 arg) {
+static void ResetThreadContext(ARM_Interface::ThreadContext& context, VAddr stack_top,
+                               VAddr entry_point, u64 arg) {
     memset(&context, 0, sizeof(ARM_Interface::ThreadContext));
 
     context.cpu_registers[0] = arg;
@@ -477,7 +477,7 @@ void Thread::BoostPriority(s32 priority) {
     current_priority = priority;
 }
 
-SharedPtr<Thread> SetupMainThread(u32 entry_point, s32 priority) {
+SharedPtr<Thread> SetupMainThread(VAddr entry_point, s32 priority) {
     DEBUG_ASSERT(!GetCurrentThread());
 
     // Initialize new "main" thread
diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h
index 6a3566f15..2cadb91db 100644
--- a/src/core/hle/kernel/thread.h
+++ b/src/core/hle/kernel/thread.h
@@ -171,8 +171,8 @@ public:
     u32 thread_id;
 
     u32 status;
-    u32 entry_point;
-    u32 stack_top;
+    VAddr entry_point;
+    VAddr stack_top;
 
     s32 nominal_priority; ///< Nominal thread priority, as set by the emulated application
     s32 current_priority; ///< Current thread priority, can be temporarily changed
@@ -216,7 +216,7 @@ private:
  * @param priority The priority to give the main thread
  * @return A shared pointer to the main thread
  */
-SharedPtr<Thread> SetupMainThread(u32 entry_point, s32 priority);
+SharedPtr<Thread> SetupMainThread(VAddr entry_point, s32 priority);
 
 /**
  * Returns whether there are any threads that are ready to run.
@@ -232,13 +232,13 @@ void Reschedule();
  * Arbitrate the highest priority thread that is waiting
  * @param address The address for which waiting threads should be arbitrated
  */
-Thread* ArbitrateHighestPriorityThread(u32 address);
+Thread* ArbitrateHighestPriorityThread(VAddr address);
 
 /**
  * Arbitrate all threads currently waiting.
  * @param address The address for which waiting threads should be arbitrated
  */
-void ArbitrateAllThreads(u32 address);
+void ArbitrateAllThreads(VAddr address);
 
 /**
  * Gets the current thread