diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp
index 7e50150..5ac3d0a 100644
--- a/src/MainWindow.cpp
+++ b/src/MainWindow.cpp
@@ -59,8 +59,8 @@ MainWindow::MainWindow()
   NewGame(std::shared_ptr<Game>(new Game()));
 
   // Temporary TO REMOVE JUST FOR TESTS:
-  //BaseTab *bt = new BaseTab((wxFrame *)notebook, "/home/loic/Downloads/PGN.pgn");
-  //this->AddPage(bt,bt);
+  BaseTab *bt = new BaseTab((wxFrame *)notebook, "/home/loic/pgn/twic1467.pgn");
+  this->AddPage(bt,bt);
 }
 
 void MainWindow::AddPage(wxWindow* window, TabInfos* infos){
diff --git a/src/base_tab/GameListManager.cpp b/src/base_tab/GameListManager.cpp
index fef0241..07c9feb 100644
--- a/src/base_tab/GameListManager.cpp
+++ b/src/base_tab/GameListManager.cpp
@@ -13,7 +13,7 @@ GameListManager::GameListManager(wxListCtrl *game_list): game_list(game_list), g
 
 void GameListManager::AddGame(CType White,CType Black,CType Event,CType Round, CType Result, CType Eco){
   // Update rows elements
-  rows.push_back({White,Black,Event,Round,Result,Eco});
+  rows.push_back({game_counter,White,Black,Event,Round,Result,Eco});
   // Display the row
   DisplayRow(game_counter);
   game_counter++;
@@ -22,7 +22,7 @@ void GameListManager::AddGame(CType White,CType Black,CType Event,CType Round, C
 void GameListManager::DisplayRow(long id){
   RType row=rows[id];
   long index =
-            game_list->InsertItem(game_counter, std::to_string(id)); // want this for col. 1
+            game_list->InsertItem(game_counter, std::to_string(row.id)); // want this for col. 1
   game_list->SetItem(index, 1, row.White);
   game_list->SetItem(index, 2, row.Black);
   game_list->SetItem(index, 3, row.Event);
@@ -30,16 +30,16 @@ void GameListManager::DisplayRow(long id){
   game_list->SetItem(index, 5, row.Result);
   game_list->SetItem(index, 6, row.Eco);
 
-  if(std::find(opened_items.begin(), opened_items.end(), index) != opened_items.end())
-    MarkItemAsOpen(index);
-  if(std::find(deleted_items.begin(), deleted_items.end(), index) != deleted_items.end())
-    MarkItemAsDeleted(index);
+  if(std::find(opened_games.begin(), opened_games.end(), row.id) != opened_games.end())
+    BG_OPEN(index);
+  if(std::find(deleted_games.begin(), deleted_games.end(), row.id) != deleted_games.end())
+    BG_DELETE(index);
 }
 
 void GameListManager::Clear(){
   game_list->DeleteAllItems();
-  deleted_items.clear();
-  opened_items.clear();
+  deleted_games.clear();
+  opened_games.clear();
   rows.clear();
 }
 
@@ -48,13 +48,25 @@ void GameListManager::ClearDisplayedRow(){
 }
 
 void GameListManager::MarkItemAsOpen(long item){
-  opened_items.push_back(item);
-  game_list->SetItemBackgroundColour(item, *wxGREEN);
+  opened_games.push_back(rows[item].id);
+  BG_OPEN(item);
 }
 
 void GameListManager::MarkItemAsDeleted(long item){
-  deleted_items.push_back(item);
-  game_list->SetItemBackgroundColour(item, *wxRED);
+  deleted_games.push_back(rows[item].id);
+  BG_DELETE(item);
+}
+
+void GameListManager::SortBy(short col){
+  ClearDisplayedRow();
+  switch(col){
+    case 1:
+      std::sort(rows.begin(),rows.end(), [&](RType a, RType b){return(a.White < b.White);});
+      break;
+    default:
+      std::sort(rows.begin(),rows.end(), [&](RType a, RType b){return(a.id < b.id);});
+  }
+  DISPLAY_ALL_ROWS();
 }
 
 std::vector<long> GameListManager::GetSelectedItems(){
@@ -94,8 +106,6 @@ void GameListManager::Filter(std::string terms){
 
 void GameListManager::ClearFilter() {
   ClearDisplayedRow();
-  for(int i=0;i<rows.size();i++){
-      DisplayRow(i);
-  }
+  DISPLAY_ALL_ROWS();
 }
 
diff --git a/src/base_tab/GameListManager.hpp b/src/base_tab/GameListManager.hpp
index 2e22dc4..e97ff8a 100644
--- a/src/base_tab/GameListManager.hpp
+++ b/src/base_tab/GameListManager.hpp
@@ -5,10 +5,14 @@
 #include <vector>
 
 #define TERMS_IN(COL) (row.COL.find(terms) != std::string::npos)
+#define BG_OPEN(INDEX) game_list->SetItemBackgroundColour(INDEX, *wxGREEN)
+#define BG_DELETE(INDEX) game_list->SetItemBackgroundColour(INDEX, *wxRED)
+#define DISPLAY_ALL_ROWS() {for(int i=0;i<rows.size();i++){DisplayRow(i);}}
 
 typedef std::string CType;
 
 typedef struct Item {
+    long id;
     CType White;
     CType Black;
     CType Event;
@@ -21,7 +25,7 @@ class GameListManager {
     wxListCtrl *game_list;
     long game_counter;
     std::vector<RType> rows;
-    std::vector<long> deleted_items, opened_items;
+    std::vector<long> deleted_games, opened_games;
 
     void DisplayRow(long id);
     void ClearDisplayedRow();
@@ -35,4 +39,5 @@ public:
     long GetItemGameId(long item);
     void Filter(std::string terms);
     void ClearFilter();
+    void SortBy(short col);
 };
\ No newline at end of file