diff --git a/src/context/intermediate/Modals.tsx b/src/context/intermediate/Modals.tsx
index ce4e62ce7b11d8b1a56c22bf509d1e5526bc2b95..5839c664e571da25f47f2a7c12557754be2ec9cd 100644
--- a/src/context/intermediate/Modals.tsx
+++ b/src/context/intermediate/Modals.tsx
@@ -17,7 +17,7 @@ export interface Props {
 
 export default function Modals({ screen, openScreen }: Props) {
     const onClose = () =>
-        isModalClosing
+        isModalClosing || screen.id === "onboarding"
             ? openScreen({ id: "none" })
             : internalEmit("Modal", "close");
 
diff --git a/src/context/intermediate/modals/Onboarding.tsx b/src/context/intermediate/modals/Onboarding.tsx
index 160f521217f31d9dce15a1b3e2203c235f208891..8ca93995f4f886968440b430bf82ab8e200598d6 100644
--- a/src/context/intermediate/modals/Onboarding.tsx
+++ b/src/context/intermediate/modals/Onboarding.tsx
@@ -28,7 +28,7 @@ export function OnboardingModal({ onClose, callback }: Props) {
     const onSubmit: SubmitHandler<FormInputs> = ({ username }) => {
         setLoading(true);
         callback(username, true)
-            .then(onClose)
+            .then(() => onClose())
             .catch((err: any) => {
                 setError(takeError(err));
                 setLoading(false);
diff --git a/src/context/revoltjs/RevoltClient.tsx b/src/context/revoltjs/RevoltClient.tsx
index b45744642cac56c382b5b303568137c709737c53..6c8b3ace6ce3153ab91e528b743a67ba9f4c2207 100644
--- a/src/context/revoltjs/RevoltClient.tsx
+++ b/src/context/revoltjs/RevoltClient.tsx
@@ -116,7 +116,7 @@ function Context({ auth, children }: Props) {
                     if (onboarding) {
                         openScreen({
                             id: "onboarding",
-                            callback: (username: string) =>
+                            callback: async (username: string) =>
                                 onboarding(username, true).then(login),
                         });
                     } else {