diff --git a/backend/app/crud.py b/backend/app/crud.py
index 416ec5078a9c43eae3512e2e8152b8e5aecc94de..b24620c55631646e0c8a527352ab15dbc71eb758 100644
--- a/backend/app/crud.py
+++ b/backend/app/crud.py
@@ -206,6 +206,14 @@ def create_message_feedback(
     return db_message_feedback
 
 
+def create_study(db: Session, study: schemas.StudyCreate):
+    db_study = models.Study(**study.dict())
+    db.add(db_study)
+    db.commit()
+    db.refresh(db_study)
+    return db_study
+
+
 def create_test_typing(db: Session, test: schemas.TestTypingCreate, user: schemas.User):
     db_test = models.TestTyping(user_id=user.id)
     db.add(db_test)
diff --git a/backend/app/database.py b/backend/app/database.py
index 3d9710478e771b2f3bfec6b64527c4a9f4ded6d9..79b9f0f0f87f3657c1f8da1d5dca84d9c813704a 100644
--- a/backend/app/database.py
+++ b/backend/app/database.py
@@ -16,4 +16,5 @@ def get_db():
     try:
         yield db
     finally:
-        db.close()
\ No newline at end of file
+        db.close()
+
diff --git a/backend/app/main.py b/backend/app/main.py
index 86f14fa7b50bce111872da0c927b9329f0bf334c..20ef39f3e9e3310fdb46ae53379e8d650d2eb744 100644
--- a/backend/app/main.py
+++ b/backend/app/main.py
@@ -66,6 +66,7 @@ v1Router = APIRouter(prefix="/v1")
 authRouter = APIRouter(prefix="/auth", tags=["auth"])
 usersRouter = APIRouter(prefix="/users", tags=["users"])
 sessionsRouter = APIRouter(prefix="/sessions", tags=["sessions"])
+studyRouter = APIRouter(prefix="/studies", tags=["studies"])
 websocketRouter = APIRouter(prefix="/ws", tags=["websocket"])
 webhookRouter = APIRouter(prefix="/webhooks", tags=["webhook"])
 surveyRouter = APIRouter(prefix="/surveys", tags=["surveys"])
@@ -715,6 +716,17 @@ def propagate_presence(
 
     return
 
+@studyRouter.post("/", status_code=status.HTTP_201_CREATED)
+def study_create(
+    study: schemas.StudyCreate,
+    db: Session = Depends(get_db),
+    current_user: schemas.User = Depends(get_jwt_user),
+):
+    if not check_user_level(current_user, models.UserType.ADMIN):
+        raise HTTPException(
+            status_code=401, detail="You do not have permission to create a study"
+        )
+    return crud.create_study(db, study).id
 
 @websocketRouter.websocket("/sessions/{session_id}")
 async def websocket_session(
@@ -1066,10 +1078,10 @@ def get_survey_responses(
 
     return crud.get_survey_responses(db, survey_id)
 
-
 v1Router.include_router(authRouter)
 v1Router.include_router(usersRouter)
 v1Router.include_router(sessionsRouter)
+v1Router.include_router(studyRouter)
 v1Router.include_router(websocketRouter)
 v1Router.include_router(webhookRouter)
 v1Router.include_router(surveyRouter)
diff --git a/backend/app/models.py b/backend/app/models.py
index e5a1a147b1e1007e5214fc07b17436b8b0d7e5b9..c9849dc450212cb2939d26046c88090dd918f87a 100644
--- a/backend/app/models.py
+++ b/backend/app/models.py
@@ -46,6 +46,7 @@ class User(Base):
     birthdate = Column(Integer, default=None)
     gender = Column(String, default=None)
     calcom_link = Column(String, default="")
+    study_id = Column(Integer, ForeignKey("studies.id"), default=None)
 
     sessions = relationship(
         "Session", secondary="user_sessions", back_populates="users"
@@ -220,3 +221,13 @@ class SurveyResponse(Base):
     selected_id = Column(Integer)
     response_time = Column(Float)
     text = Column(String)
+
+
+class Study(Base):
+    __tablename__ = "studies"
+    id = Column(Integer, primary_key=True, index=True)
+    title = Column(String)
+    description = Column(String)
+    start_date = Column(DateTime)
+    end_date = Column(DateTime)
+    chat_duration = Column(Integer)
diff --git a/backend/app/schemas.py b/backend/app/schemas.py
index 7c4a8b60eb8ee09aaa93e1ea7622ec4f2142d31c..68d60de310050c32744d219817200b83d79f17bc 100644
--- a/backend/app/schemas.py
+++ b/backend/app/schemas.py
@@ -17,6 +17,7 @@ class User(BaseModel):
     birthdate: datetime.datetime | None
     gender: str | None = None
     calcom_link: str | None
+    study_id: int | None = None
 
     class Config:
         from_attributes = True
@@ -35,6 +36,7 @@ class UserCreate(BaseModel):
     birthdate: datetime.datetime | None = None
     gender: str | None = None
     calcom_link: str | None = None
+    study_id: int | None = None
 
 
 class UserUpdate(BaseModel):
@@ -50,6 +52,7 @@ class UserUpdate(BaseModel):
     birthdate: datetime.datetime | None = None
     gender: str | None = None
     calcom_link: str | None = None
+    study_id: int | None = None
 
     class Config:
         from_attributes = True
@@ -263,3 +266,20 @@ class SurveyResponse(BaseModel):
     selected_id: int
     response_time: float
     text: str | None = None
+
+
+class Study(BaseModel):
+    id: int
+    title: str
+    description: str
+    start_date: datetime.datetime
+    end_date: datetime.datetime
+    chat_duration: int
+
+
+class StudyCreate(BaseModel):
+    title: str
+    description: str
+    start_date: datetime.datetime
+    end_date: datetime.datetime
+    chat_duration: int = 30 * 60
diff --git a/frontend/src/routes/register/+page.svelte b/frontend/src/routes/register/+page.svelte
index 3d4abb878f2c71ddc7a0ac998caaf19a7e2dda17..bb6692c1f90f1362b5892dbccd26737087ec4aa6 100644
--- a/frontend/src/routes/register/+page.svelte
+++ b/frontend/src/routes/register/+page.svelte
@@ -17,19 +17,13 @@
 	import { Icon, Envelope, Key, UserCircle } from 'svelte-hero-icons';
 	import Typingtest from '$lib/components/tests/typingtest.svelte';
 	import AvailableTutors from '$lib/components/users/availableTutors.svelte';
+	import { browser } from '$app/environment';
 
 	let current_step = 0;
 
 	$: message = '';
 
-	//let checker: HTMLDivElement;
-
 	onMount(async () => {
-		/*checker.innerHTML =
-			'<label for="humanCheck" class="cursor-pointer label">' +
-			$t('register.humans') +
-			'<input type="checkbox" id="humanCheck" class="checkbox" required></label>';*/
-
 		const u = get(user);
 
 		if (u == null) {
@@ -63,6 +57,12 @@
 	let target_language: string;
 	let birthdate: string;
 	let gender: string;
+	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;
+	})();
 
 	let timeslots = 0n;
 	$: filteredUsers = $users.filter((user) => {
@@ -77,10 +77,6 @@
 			message = $t('register.error.emptyFields');
 			return;
 		}
-		/*if (checker.querySelector('input')?.checked === false) {
-			message = $t('register.error.humanity');
-			return;
-		}*/
 		if (password.length < 8) {
 			message = $t('register.error.passwordRules');
 			return;
@@ -111,7 +107,8 @@
 			return;
 		}
 
-		document.location.href = '/register';
+		if (study_id === null) document.location.href = '/register';
+		else document.location.href = `/register?study=${study_id}`;
 
 		message = 'OK';
 	}
@@ -134,7 +131,8 @@
 			home_language,
 			target_language,
 			birthdate,
-			gender
+			gender,
+			study_id
 		});
 
 		if (!res) {