diff --git a/astro/services/Competition.go b/astro/services/Competition.go
index 799066f920c0f6b05d7ab1c97561bad444abcb30..c3ad4a60495c59df3667e236c20d5c24393b8e40 100644
--- a/astro/services/Competition.go
+++ b/astro/services/Competition.go
@@ -43,6 +43,7 @@ func (c *Competition) InitCompetition() bool {
 	var seedingStage = CreateSeedingStage(0, 300, 300)
 	// TODO: Max player number should be dynamic
 
+	seedingStage.Register()
 	c.AddStage(seedingStage)
 
 	c.CompetitionCurrentStageID = 0
diff --git a/astro/services/Seeding.go b/astro/services/Seeding.go
index a0119c9a808dae35e3d5f778767e53239089616b..8ddf05b3cfe0a99329e854b559462db090f6cf4a 100644
--- a/astro/services/Seeding.go
+++ b/astro/services/Seeding.go
@@ -2,8 +2,9 @@ package services
 
 // Seeding : Seeding details
 type Seeding struct {
-	SeedingPosition uint16
-	SeedingPlayer   *Player
+	SeedingPosition      uint16
+	SeedingPlayer        *Player
+	SeedingPlayerPresent bool
 }
 
 type SeedingStage struct {
diff --git a/astro/services/Session.go b/astro/services/Session.go
index cc3fd67ac2898a9f2e1b9cc186a84622e280cd57..02a718411b951dc0964585a8b43205f36246e302 100644
--- a/astro/services/Session.go
+++ b/astro/services/Session.go
@@ -74,7 +74,7 @@ func (s *Session) AddPlayerToCompetition(competitionID uint8, player *Player) bo
 
 func (s *Session) RemovePlayerFromCompetition(competitionID uint8, player *Player) bool {
 	competition := s.GetCompetition(competitionID)
-	if competition.CompetitionName == "" {
+	if competition == nil {
 		return false
 	}
 
@@ -83,7 +83,7 @@ func (s *Session) RemovePlayerFromCompetition(competitionID uint8, player *Playe
 
 func (s *Session) GetAllPlayersFromCompetition(competitionID uint8) []*Player {
 	competition := s.GetCompetition(competitionID)
-	if competition.CompetitionName == "" {
+	if competition == nil {
 		return []*Player{}
 	}
 
@@ -96,16 +96,18 @@ func (s *Session) GetAllPlayersFromCompetition(competitionID uint8) []*Player {
 
 func (s *Session) UpdateCompetitionPlayer(competitionID uint8, player *Player) bool {
 	competition := s.GetCompetition(competitionID)
-	if competition.CompetitionName == "" {
+	if competition == nil {
 		return false
 	}
 
+	// TODO: Check if player is in competition
+
 	return competition.UpdatePlayer(player)
 }
 
 func (s *Session) GetStageKind(competitionID uint8, stageID uint8) StageKind {
 	competition := s.GetCompetition(competitionID)
-	if competition.CompetitionName == "" {
+	if competition == nil {
 		return UNKNOWN
 	}
 
@@ -116,3 +118,45 @@ func (s *Session) GetStageKind(competitionID uint8, stageID uint8) StageKind {
 
 	return (*stage).GetKind()
 }
+
+func (s *Session) AddPlayerToCompetitionStage(competitionID uint8, stageID uint8, player *Player) bool {
+	competition := s.GetCompetition(competitionID)
+	if competition == nil {
+		return false
+	}
+
+	stage := competition.GetStage(stageID)
+	if stage == nil {
+		return false
+	}
+
+	return s.AddPlayerToCompetition(competitionID, player) && (*stage).AddPlayer(player)
+}
+
+func (s *Session) RemovePlayerFromCompetitionStage(competitionID uint8, stageID uint8, player *Player) bool {
+	competition := s.GetCompetition(competitionID)
+	if competition == nil {
+		return false
+	}
+
+	stage := competition.GetStage(stageID)
+	if stage == nil {
+		return false
+	}
+
+	return (*stage).RemovePlayer(player)
+}
+
+func (s *Session) GetPlayersFromCompetitionStage(competitionID uint8, stageID uint8) []*Player {
+	competition := s.GetCompetition(competitionID)
+	if competition == nil {
+		return []*Player{}
+	}
+
+	stage := competition.GetStage(stageID)
+	if stage == nil {
+		return []*Player{}
+	}
+
+	return (*stage).GetPlayers()
+}
diff --git a/frontend/bindings/changeme/astro/services/session.ts b/frontend/bindings/changeme/astro/services/session.ts
index a65a2cb9fccd82a7f491fd173afb2b4dbe801a2a..de8fd51605c06a1c468627937ea52397e713d40f 100644
--- a/frontend/bindings/changeme/astro/services/session.ts
+++ b/frontend/bindings/changeme/astro/services/session.ts
@@ -24,6 +24,11 @@ export function AddPlayerToCompetition(competitionID: number, player: $models.Pl
     return $resultPromise;
 }
 
+export function AddPlayerToCompetitionStage(competitionID: number, stageID: number, player: $models.Player | null): Promise<boolean> & { cancel(): void } {
+    let $resultPromise = $Call.ByID(2910612480, competitionID, stageID, player) as any;
+    return $resultPromise;
+}
+
 export function GetAllPlayersFromCompetition(competitionID: number): Promise<($models.Player | null)[]> & { cancel(): void } {
     let $resultPromise = $Call.ByID(3547487506, competitionID) as any;
     let $typingPromise = $resultPromise.then(($result) => {
@@ -51,6 +56,15 @@ export function GetCompetitions(): Promise<$models.Competition[]> & { cancel():
     return $typingPromise;
 }
 
+export function GetPlayersFromCompetitionStage(competitionID: number, stageID: number): Promise<($models.Player | null)[]> & { cancel(): void } {
+    let $resultPromise = $Call.ByID(145932197, competitionID, stageID) as any;
+    let $typingPromise = $resultPromise.then(($result) => {
+        return $$createType2($result);
+    }) as any;
+    $typingPromise.cancel = $resultPromise.cancel.bind($resultPromise);
+    return $typingPromise;
+}
+
 export function GetStageKind(competitionID: number, stageID: number): Promise<$models.StageKind> & { cancel(): void } {
     let $resultPromise = $Call.ByID(3392771308, competitionID, stageID) as any;
     return $resultPromise;
@@ -66,6 +80,11 @@ export function RemovePlayerFromCompetition(competitionID: number, player: $mode
     return $resultPromise;
 }
 
+export function RemovePlayerFromCompetitionStage(competitionID: number, stageID: number, player: $models.Player | null): Promise<boolean> & { cancel(): void } {
+    let $resultPromise = $Call.ByID(4015938334, competitionID, stageID, player) as any;
+    return $resultPromise;
+}
+
 export function UpdateCompetitionPlayer(competitionID: number, player: $models.Player | null): Promise<boolean> & { cancel(): void } {
     let $resultPromise = $Call.ByID(3540307881, competitionID, player) as any;
     return $resultPromise;
diff --git a/frontend/src/StageManager.svelte b/frontend/src/StageManager.svelte
index 41d34a6b2de97c9ead19f290e640b292bb710bc8..2526104675f29ed4773083f13d8a208955a2bf90 100644
--- a/frontend/src/StageManager.svelte
+++ b/frontend/src/StageManager.svelte
@@ -1,7 +1,7 @@
 <script lang="ts">
     import Registrations from "./components/Registrations/Registrations.svelte";
     import * as Models from "./../bindings/changeme/astro/services/models";
-    import { SelectedCompetition } from "./store";
+    import { SelectedCompetition, CurrentStage } from "./store";
     import { onMount } from "svelte";
     import { GetStageKind } from "./../bindings/changeme/astro/services/session";
 
@@ -16,6 +16,8 @@
                         competition.CompetitionStages[
                             `${competition.CompetitionCurrentStageID}`
                         ];
+                    CurrentStage.set(currentStage);
+
                     GetStageKind(
                         competition.CompetitionID,
                         currentStage.StageID
diff --git a/frontend/src/components/Registrations/Registrations.svelte b/frontend/src/components/Registrations/Registrations.svelte
index c2ce4346da554eedfec7e6f418e01f88d69918ba..336d881a1058b1e37971a944fa093bbc77d3d5f0 100644
--- a/frontend/src/components/Registrations/Registrations.svelte
+++ b/frontend/src/components/Registrations/Registrations.svelte
@@ -8,7 +8,7 @@
     import { onMount } from "svelte";
     import * as Models from "../../../bindings/changeme/astro/services/models";
     import * as Session from "../../../bindings/changeme/astro/services/session";
-    import { SelectedCompetition } from "../../store";
+    import { SelectedCompetition, CurrentStage } from "../../store";
     import { GenerateRandomPlayer } from "../../../bindings/changeme/astro/services/player";
     import swal from "sweetalert";
     import { getNationFlag, getNationFlatAlt } from "../../Util";
@@ -17,12 +17,18 @@
     let players: (Models.Player | null)[] = [];
     let filteredPlayers: (Models.Player | null)[] = [];
     let competition: Models.Competition | undefined;
+    let stage: Models.Stage | undefined;
     let sortBy = { key: "", asc: true };
     let searchTerms = "";
 
     // Listen to any change in the selected competition
     SelectedCompetition.subscribe((value) => {
         competition = value;
+    });
+
+    // Listen to any change in the current stage
+    CurrentStage.subscribe((value) => {
+        stage = value;
         loadPlayers();
     });
 
@@ -32,11 +38,12 @@
             return;
         }
 
-        Session.GetAllPlayersFromCompetition(competition.CompetitionID).then(
-            (result) => {
-                players = result;
-            }
-        );
+        Session.GetPlayersFromCompetitionStage(
+            competition.CompetitionID,
+            stage?.StageID
+        ).then((result) => {
+            players = result;
+        });
     }
 
     // When the page is loaded, load the players, and set the default sorting
@@ -61,7 +68,11 @@
             case "PlayerLastname":
                 return player.PlayerLastname;
             case "PlayerClub":
-                return player.PlayerClub;
+                return player.PlayerClub?.club_name;
+            case "PlayerRegion":
+                return player.PlayerRegion?.region_name;
+            case "PlayerCountry":
+                return player.PlayerNation?.nation_name;
             default:
                 return "";
         }
@@ -74,6 +85,10 @@
         if (aValue === null || bValue === null) {
             return 0;
         }
+        if (aValue === undefined || bValue === undefined) {
+            return 0;
+        }
+
         if (aValue < bValue) {
             return sortBy.asc ? -1 : 1;
         }
@@ -119,6 +134,13 @@
                     <!-- 
                     The following code is used to sort the players by the column clicked.                    
                     -->
+                    <th
+                        on:click={() => {
+                            sortBy = { key: "PlayerPresent", asc: !sortBy.asc };
+                        }}
+                    >
+                        Present
+                    </th>
                     <th
                         on:click={() => {
                             sortBy = {
@@ -169,6 +191,9 @@
                             class:silver={player.PlayerInitialRank == 2}
                             class:bronze={player.PlayerInitialRank == 3}
                         >
+                            <td>
+                                <!-- TODO: input checkbox -->
+                            </td>
                             <td
                                 on:dblclick={async () => {
                                     // Show a prompt to the user to change the rank
@@ -209,6 +234,7 @@
                                             ).then(() => {
                                                 loadPlayers();
                                             });
+                                        // TODO: Backend wise, change it
                                     }
                                 }}>{player.PlayerInitialRank}</td
                             >
@@ -238,6 +264,7 @@
                                             ).then(() => {
                                                 loadPlayers();
                                             });
+                                        // TODO: Backend wise, change it
                                     }
                                 }}
                                 >{player.PlayerLastname.toLocaleUpperCase()}</td
@@ -268,6 +295,7 @@
                                             ).then(() => {
                                                 loadPlayers();
                                             });
+                                        // TODO: Backend wise, change it
                                     }
                                 }}>{player.PlayerFirstname}</td
                             >
@@ -305,8 +333,9 @@
 
                                 // Add the player to the competition
                                 if (competition != undefined)
-                                    await Session.AddPlayerToCompetition(
+                                    await Session.AddPlayerToCompetitionStage(
                                         competition.CompetitionID,
+                                        stage?.SeedingStageID,
                                         player
                                     ).then(() => {
                                         loadPlayers();
diff --git a/frontend/src/store.ts b/frontend/src/store.ts
index 797b72406ba5162b06d06d5b1ba5f45d541fd388..cb0e2d541bbc03a5ea8fc9b124060640a5feddd7 100644
--- a/frontend/src/store.ts
+++ b/frontend/src/store.ts
@@ -1,5 +1,7 @@
 import { writable } from 'svelte/store';
-import type { Competition } from '../bindings/changeme/astro/services/models';
+import type { Stage } from '../bindings/changeme/astro/services/models';
+import { type Competition } from '../bindings/changeme/astro/services/models';
 
 export const SelectedCompetition = writable<Competition | undefined>(undefined);
+export const CurrentStage = writable<Stage | undefined>(undefined);
 export const Competitions = writable<(Competition | undefined)[]>([]);
\ No newline at end of file