diff --git a/astro/services/Competition.go b/astro/services/Competition.go
index 6af2f67b4befa2cdcb31bf2ac487511c64aba5fe..64eda4cde4cfb99100ce86e9fcf3551a0bd995fb 100644
--- a/astro/services/Competition.go
+++ b/astro/services/Competition.go
@@ -28,9 +28,25 @@ func CreateCompetition(competitionID uint8, competitionName string, competitionC
 	c.CompetitionStages = map[uint8]*Stage{}
 	c.CompetitionPlayers = map[uint16]*Player{}
 
+	c.InitCompetition()
+
 	return c
 }
 
+func (c *Competition) InitCompetition() bool {
+	if c.CompetitionState != REGISTERING {
+		return false
+	}
+
+	// Add new stage
+	var poolStage = CreateSeedingStage(0, 300, 300)
+	// TODO: Max player number should be dynamic
+
+	c.AddStage(poolStage)
+
+	return true
+}
+
 func (c *Competition) StartCompetition() bool {
 	if c.CompetitionState != REGISTERING {
 		return false
@@ -78,11 +94,11 @@ func (c *Competition) RemovePlayer(player *Player) bool {
 }
 
 func (c *Competition) AddPlayerToStage(player Player, stage Stage) bool {
-	return stage.AddPlayer(player)
+	return stage.AddPlayer(&player)
 }
 
 func (c *Competition) RemovePlayerFromStage(player Player, stage Stage) bool {
-	return stage.RemovePlayer(player)
+	return stage.RemovePlayer(&player)
 }
 
 func (c *Competition) UpdatePlayer(player *Player) bool {
@@ -95,3 +111,13 @@ func (c *Competition) UpdatePlayer(player *Player) bool {
 
 	return true
 }
+
+func (c *Competition) AddStage(stage Stage) bool {
+	if c.CompetitionState != REGISTERING {
+		return false
+	}
+
+	c.CompetitionStages[stage.GetID()] = &stage
+
+	return true
+}
diff --git a/astro/services/Seeding.go b/astro/services/Seeding.go
index d1b7815f0366508dab29f1805f78da8f1a3ef75f..753a4a38ee73c7f871000e3b5ca6753151da1e41 100644
--- a/astro/services/Seeding.go
+++ b/astro/services/Seeding.go
@@ -26,7 +26,7 @@ func (s *SeedingStage) String() string {
 	return str
 }
 
-func CreateSeedingStage(seedingStageID uint8, enteringPlayerNumber uint16, leavingPlayerNumber uint16) SeedingStage {
+func CreateSeedingStage(seedingStageID uint8, enteringPlayerNumber uint16, leavingPlayerNumber uint16) *SeedingStage {
 	var s SeedingStage
 
 	s.SeedingStageID = seedingStageID
@@ -35,16 +35,16 @@ func CreateSeedingStage(seedingStageID uint8, enteringPlayerNumber uint16, leavi
 	s.SeedingState = IDLE
 	s.SeedingSize = 0
 
-	return s
+	return &s
 }
 
 // From interface
-func (s *SeedingStage) PlayerPosition(player Player) uint16 {
+func (s *SeedingStage) PlayerPosition(player *Player) uint16 {
 	return s.SeedingSeedings[player.PlayerID].SeedingPosition
 }
 
 // From interface
-func (s *SeedingStage) AddPlayer(player Player) bool {
+func (s *SeedingStage) AddPlayer(player *Player) bool {
 	if s.SeedingState != REGISTERING {
 		return false
 	}
@@ -55,7 +55,7 @@ func (s *SeedingStage) AddPlayer(player Player) bool {
 
 	s.SeedingSeedings[player.PlayerID] = &Seeding{
 		SeedingPosition: s.SeedingSize,
-		SeedingPlayer:   &player,
+		SeedingPlayer:   player,
 	}
 
 	s.SeedingSize++
@@ -64,7 +64,7 @@ func (s *SeedingStage) AddPlayer(player Player) bool {
 }
 
 // From interface
-func (s *SeedingStage) RemovePlayer(player Player) bool {
+func (s *SeedingStage) RemovePlayer(player *Player) bool {
 	if s.SeedingState != REGISTERING {
 		return false
 	}
@@ -91,11 +91,11 @@ func (s *SeedingStage) GetState() State {
 }
 
 // From interface
-func (s *SeedingStage) GetPlayers() []Player {
-	players := []Player{}
+func (s *SeedingStage) GetPlayers() []*Player {
+	players := []*Player{}
 
 	for _, seeding := range s.SeedingSeedings {
-		players = append(players, *seeding.SeedingPlayer)
+		players = append(players, seeding.SeedingPlayer)
 	}
 
 	return players
diff --git a/astro/services/Stage.go b/astro/services/Stage.go
index 0be18200824ee8acee6dc19080f1e39643442fd4..da2e0d3a408ab1c3a9c91e697e80890e0d09e698 100644
--- a/astro/services/Stage.go
+++ b/astro/services/Stage.go
@@ -2,12 +2,12 @@ package services
 
 // Stage : Stage details
 type Stage interface {
-	PlayerPosition(player Player) uint16
-	AddPlayer(player Player) bool
-	RemovePlayer(player Player) bool
+	PlayerPosition(player *Player) uint16
+	AddPlayer(player *Player) bool
+	RemovePlayer(player *Player) bool
 	GetID() uint8
 	GetState() State
-	GetPlayers() []Player
+	GetPlayers() []*Player
 	Register() bool
 	Start() bool
 	End() bool
diff --git a/frontend/bindings/changeme/astro/services/competition.ts b/frontend/bindings/changeme/astro/services/competition.ts
index 4d98980accafa2416b76ce98dd85c44fd5bdbf13..e6ba82ddcf1ba247ea099fa2e31eef180ad246e0 100644
--- a/frontend/bindings/changeme/astro/services/competition.ts
+++ b/frontend/bindings/changeme/astro/services/competition.ts
@@ -24,11 +24,21 @@ export function AddPlayerToStage(player: $models.Player, stage: $models.Stage):
     return $resultPromise;
 }
 
+export function AddStage(stage: $models.Stage): Promise<boolean> & { cancel(): void } {
+    let $resultPromise = $Call.ByID(2261622806, stage) as any;
+    return $resultPromise;
+}
+
 export function FinishCompetition(): Promise<boolean> & { cancel(): void } {
     let $resultPromise = $Call.ByID(826570137) as any;
     return $resultPromise;
 }
 
+export function InitCompetition(): Promise<boolean> & { cancel(): void } {
+    let $resultPromise = $Call.ByID(582268878) as any;
+    return $resultPromise;
+}
+
 export function RemovePlayer(player: $models.Player | null): Promise<boolean> & { cancel(): void } {
     let $resultPromise = $Call.ByID(1491269932, player) as any;
     return $resultPromise;
diff --git a/frontend/bindings/changeme/astro/services/models.ts b/frontend/bindings/changeme/astro/services/models.ts
index dbf1e772d2927d7bb2bbfb8c60b1f0928853c09c..5de7a5a6c249dfc848e60cc848c53fceabf85472 100644
--- a/frontend/bindings/changeme/astro/services/models.ts
+++ b/frontend/bindings/changeme/astro/services/models.ts
@@ -344,7 +344,12 @@ export enum State {
     /**
      * 3
      */
-    IDLE = 3,
+    LOCKED = 3,
+
+    /**
+     * 4
+     */
+    IDLE = 4,
 };
 
 /**
diff --git a/frontend/bindings/changeme/astro/services/pool.ts b/frontend/bindings/changeme/astro/services/pool.ts
index 879a8ccc32d3966798bab032f619b11ed541c019..8d4f8dd50296c1bdcf840dcd0135edeaee8bbafc 100644
--- a/frontend/bindings/changeme/astro/services/pool.ts
+++ b/frontend/bindings/changeme/astro/services/pool.ts
@@ -9,22 +9,25 @@ import {Call as $Call, Create as $Create} from "@wailsio/runtime";
 // @ts-ignore: Unused imports
 import * as $models from "./models.js";
 
-export function AddPlayer(player: $models.Player): Promise<boolean> & { cancel(): void } {
+export function AddPlayer(player: $models.Player | null): Promise<boolean> & { cancel(): void } {
     let $resultPromise = $Call.ByID(2419770436, player) as any;
     return $resultPromise;
 }
 
-export function PlayerPosition(player: $models.Player): Promise<number> & { cancel(): void } {
+/**
+ * ------------------------------ Pool ------------------------------
+ */
+export function PlayerPosition(player: $models.Player | null): Promise<number> & { cancel(): void } {
     let $resultPromise = $Call.ByID(199697208, player) as any;
     return $resultPromise;
 }
 
-export function RemovePlayer(player: $models.Player): Promise<boolean> & { cancel(): void } {
+export function RemovePlayer(player: $models.Player | null): Promise<boolean> & { cancel(): void } {
     let $resultPromise = $Call.ByID(2585363663, player) as any;
     return $resultPromise;
 }
 
-export function SetReferee(referee: $models.Referee): Promise<void> & { cancel(): void } {
+export function SetReferee(referee: $models.Referee | null): Promise<boolean> & { cancel(): void } {
     let $resultPromise = $Call.ByID(1520561734, referee) as any;
     return $resultPromise;
 }
diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte
index a3c50005801fa85cf100c865338cb5dd54a5c203..02f850f1d21a9146e6c58a2fef0254db1d0aa01f 100644
--- a/frontend/src/App.svelte
+++ b/frontend/src/App.svelte
@@ -12,6 +12,11 @@
         competitions = await Session.GetCompetitions();
         loading = false;
     });
+
+    // Listen for the "need-to-update" event
+    window.addEventListener("need-to-update", async () => {
+        competitions = await Session.GetCompetitions();
+    });
 </script>
 
 <div class="container">
diff --git a/frontend/src/common/NavBar.svelte b/frontend/src/common/NavBar.svelte
index 17f3261ad6b33b4d85d49eb4cf85f89d85e70289..e4acc44d418382c0f93b0b6925f9b7b5dfeb7ad7 100644
--- a/frontend/src/common/NavBar.svelte
+++ b/frontend/src/common/NavBar.svelte
@@ -13,6 +13,9 @@
 
     async function loadCompetitions() {
         competitions = await GetCompetitions();
+
+        // Emit a signal to the parent component
+        dispatchEvent(new CustomEvent("need-to-update", {}));
     }
 
     onMount(loadCompetitions);
diff --git a/frontend/src/components/Seedings/Registrations.svelte b/frontend/src/components/Seedings/Registrations.svelte
index 8ab6e420905660f164efa2adb681ba6f9beab02b..1dd14c6f5c7790c9b5828f7aef3ce3862cf68fcd 100644
--- a/frontend/src/components/Seedings/Registrations.svelte
+++ b/frontend/src/components/Seedings/Registrations.svelte
@@ -130,6 +130,16 @@
                             sortBy = { key: "PlayerClub", asc: !sortBy.asc };
                         }}>Club</th
                     >
+                    <th
+                        on:click={() => {
+                            sortBy = { key: "PlayerRegion", asc: !sortBy.asc };
+                        }}>Region</th
+                    >
+                    <th
+                        on:click={() => {
+                            sortBy = { key: "PlayerCountry", asc: !sortBy.asc };
+                        }}>Country</th
+                    >
                 </tr>
             </thead>
             <tbody>
@@ -233,6 +243,14 @@
                                 >{#if player.PlayerClub}{player.PlayerClub
                                         .club_name}{:else}Sans Nom{/if}</td
                             >
+                            <td
+                                >{#if player.PlayerRegion}{player.PlayerRegion
+                                        .region_name}{:else}Sans Nom{/if}</td
+                            >
+                            <td
+                                >{#if player.PlayerNation}{player.PlayerNation
+                                        .nation_name}{:else}Sans Nom{/if}</td
+                            >
                         </tr>
                     {/if}
                 {/each}
diff --git a/main.go b/main.go
index 6cc102e46c60d33d724af2ad79575e0cadb41f53..544e98931365ad3ff1671dfc3a1d2a727c01258a 100644
--- a/main.go
+++ b/main.go
@@ -14,11 +14,6 @@ var assets embed.FS
 func main() {
 
 	session := services.Session{}
-	session.AddCompetition("Premier League", "U17", "Foil")
-	session.AddCompetition("Premier League", "U17", "Foil")
-	session.AddCompetition("Premier League", "U17", "Foil")
-	session.AddCompetition("Premier League", "U17", "Foil")
-	session.Competitions[0].AddPlayer(services.CreatePlayer(1, "John", "Doe"))
 
 	app := application.New(application.Options{
 		Name:        "AstroProject",