diff --git a/frontend/src/routes/register/[[studyId]]/+page.server.ts b/frontend/src/routes/register/[[studyId]]/+page.server.ts
index 5ed5f15614bd107fc36cbea07562e928a45db735..d2354f635b09abb7975c2432be0b817a079ecdcd 100644
--- a/frontend/src/routes/register/[[studyId]]/+page.server.ts
+++ b/frontend/src/routes/register/[[studyId]]/+page.server.ts
@@ -5,7 +5,7 @@ import { validateEmail, validatePassword, validateUsername } from '$lib/utils/se
 import { redirect, type Actions } from '@sveltejs/kit';
 
 export const actions: Actions = {
-	register: async ({ request, fetch, params }) => {
+	register: async ({ request, fetch, params, url }) => {
 		const formData = await request.formData();
 		const study_idStr = params.studyId;
 		if (!study_idStr) return { message: 'Invalid request' };
@@ -55,6 +55,10 @@ export const actions: Actions = {
 		if (response.status === 422) return { message: 'Invalid request' };
 		if (!response.ok) return { message: 'Unknown error occurred' };
 
+		if (url.searchParams.has('role')) {
+			return redirect(303, `/register/${study_id}?role=${url.searchParams.get('role')}`);
+		}
+
 		return redirect(303, `/register/${study_id}`);
 	},
 	data: async ({ request, fetch, locals }) => {
diff --git a/frontend/src/routes/register/[[studyId]]/+page.svelte b/frontend/src/routes/register/[[studyId]]/+page.svelte
index 54af1bc72be7cc3a137506c677501cd31aa76ebb..e02d78a283ab82e221226e4caf3ce557afaccf6d 100644
--- a/frontend/src/routes/register/[[studyId]]/+page.svelte
+++ b/frontend/src/routes/register/[[studyId]]/+page.svelte
@@ -4,7 +4,6 @@
 	import { displayDate } from '$lib/utils/date';
 	import { t } from '$lib/services/i18n';
 	import { Icon, Envelope, Key, UserCircle } from 'svelte-hero-icons';
-	import { browser } from '$app/environment';
 	import type { PageData } from './$types';
 	import Consent from '$lib/components/surveys/consent.svelte';
 	import type Study from '$lib/types/study';
@@ -20,7 +19,6 @@
 	let tutors = $state(data.tutors || []);
 	let isLoading = $state(false);
 	let selectedTutorEmail = $state('');
-	let is_tutor = $state(false);
 	const MAX_BIO_LENGTH = 100;
 	let remainingCharacters = $state(MAX_BIO_LENGTH);
 	let bio = $state('');
@@ -70,13 +68,6 @@
 		})()
 	);
 
-	let study_id: number | null = (() => {
-		if (!browser) return null;
-		let study_id_str = new URLSearchParams(window.location.search).get('study');
-		if (!study_id_str) return null;
-		return parseInt(study_id_str) || null;
-	})();
-
 	async function handleTutorSelection(tutor: any) {
 		selectedTutorEmail = tutor.email;
 		selectedTutor = tutor;
@@ -242,7 +233,7 @@
 			<a
 				class="button mt-8"
 				class:btn-disabled={!selectedStudy}
-				href="/register/{selectedStudy?.id}"
+				href="/register/{selectedStudy?.id}?role={data.role}"
 				data-sveltekit-reload
 			>
 				{$t('button.continue')}
@@ -327,15 +318,9 @@
 						/>
 					</div>
 				</label>
-				<div class="form-control">
-					<label for="role" class="label">
-						<span class="label-text">{$t('register.role')}</span>
-					</label>
-					<select class="select select-bordered" id="role" name="role" bind:value={is_tutor}>
-						<option value="2">{$t('register.roles.learner')}</option>
-						<option value="1">{$t('register.roles.tutor')}</option>
-					</select>
-				</div>
+				<select hidden id="role" name="role">
+					<option value={data.role === 'tutor' ? 1 : 2}></option>
+				</select>
 				<div class="form-control">
 					<button class="button mt-2">{$t('register.signup')}</button>
 				</div>
diff --git a/frontend/src/routes/register/[[studyId]]/+page.ts b/frontend/src/routes/register/[[studyId]]/+page.ts
index 18f58b7a38438fabd7c347bbaf65c7061a0ea781..b8209365de0fb398701352cb24b0745c3f304afc 100644
--- a/frontend/src/routes/register/[[studyId]]/+page.ts
+++ b/frontend/src/routes/register/[[studyId]]/+page.ts
@@ -3,7 +3,7 @@ import { getUsersAPI } from '$lib/api/users';
 import Study from '$lib/types/study';
 import type { Load } from '@sveltejs/kit';
 
-export const load: Load = async ({ parent, fetch, params }) => {
+export const load: Load = async ({ parent, fetch, params, url }) => {
 	const { user } = await parent();
 	console.log(user);
 
@@ -26,10 +26,19 @@ export const load: Load = async ({ parent, fetch, params }) => {
 	const users = await getUsersAPI(fetch);
 	const tutors = users.filter((user) => user.type === 1);
 
+	let role = 'learner';
+	if (url.searchParams.has('role')) {
+		const roleParam = url.searchParams.get('role');
+		if (roleParam && roleParam === 'tutor') {
+			role = 'tutor';
+		}
+	}
+
 	return {
 		studyError: !study,
 		study,
 		studies,
-		tutors
+		tutors,
+		role
 	};
 };