diff --git a/src/base_tab/BasePanelBF.cpp b/src/base_tab/BasePanelBF.cpp
index 59dd152..e7a5dfb 100644
--- a/src/base_tab/BasePanelBF.cpp
+++ b/src/base_tab/BasePanelBF.cpp
@@ -33,7 +33,7 @@ BasePanelBF::BasePanelBF( wxWindow* parent, wxWindowID id, const wxPoint& pos, c
 
 	main_sizer->Add( top_sizer, 0, wxEXPAND, 5 );
 
-	game_list = new wxListCtrl( this, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxLC_ICON|wxLC_REPORT );
+	game_list = new wxListCtrl( this, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxLC_REPORT );
 	main_sizer->Add( game_list, 1, wxALL|wxEXPAND, 5 );
 
 	wxBoxSizer* bottom_sizer;
diff --git a/src/base_tab/BaseTab.cpp b/src/base_tab/BaseTab.cpp
index 9be9274..f1fd107 100644
--- a/src/base_tab/BaseTab.cpp
+++ b/src/base_tab/BaseTab.cpp
@@ -4,19 +4,29 @@
 BaseTab::BaseTab(wxFrame *parent)
     : BasePanelBF(parent), TabInfos(TabInfos::BASE), base(NULL) {
 
-  wxListItem col0;
-  col0.SetId(0);
-  col0.SetText(_("White"));
-  col0.SetWidth(200);
-  game_list->InsertColumn(0, col0);
+  game_list->InsertColumn(0, L"id", wxLIST_FORMAT_LEFT, 50);
+  game_list->InsertColumn(1, L"White", wxLIST_FORMAT_LEFT, 200);
+  game_list->InsertColumn(2, L"Black", wxLIST_FORMAT_LEFT, 200);
+  game_list->InsertColumn(3, L"Event", wxLIST_FORMAT_LEFT, 200);
+  game_list->InsertColumn(4, L"Round", wxLIST_FORMAT_LEFT, 100);
+  game_list->InsertColumn(5, L"Result", wxLIST_FORMAT_LEFT, 200);
+  game_list->InsertColumn(6, L"Result", wxLIST_FORMAT_LEFT, 200);
 
-  wxListItem col1;
-  col1.SetId(1);
-  col1.SetText(_("Black"));
-  col1.SetWidth(200);
-  game_list->InsertColumn(1, col1);
+  this->Bind(wxEVT_BUTTON, &BaseTab::OnBim, this, wxID_ANY);
+  this->Bind(wxEVT_LIST_ITEM_ACTIVATED, &BaseTab::OnOpenGame, this, wxID_ANY);
+}
 
-  //LoadFile("/home/loic/test.pgn");
+void BaseTab::OnBim(wxCommandEvent &event) {
+  //LoadFile("/home/loic/hartwig.pgn");
+}
+
+void BaseTab::OnOpenGame(wxListEvent &event) {
+  wxLogDebug("Open!");
+  long id=std::stoi(event.GetItem().GetText().ToStdString());
+  Game *g = base->GetGame(id);
+  if (g != NULL) {
+    wxLogDebug("Open game: %s", g->GetTag("White"));
+  }
 }
 
 void BaseTab::ApplyPreferences() {}
@@ -29,9 +39,15 @@ void BaseTab::LoadFile(std::string path) {
   }
 
   if (base != NULL) {
-    while (base->HasNextGame()) {
-      Game *g = base->GetNextGame();
-      long itemIndex = game_list->InsertItem(0, g->GetTag("White")); // want this for col. 1
+    long id = 0;
+    while (base->NextGame()) {
+      long index = game_list->InsertItem(0, std::to_string(id)); // want this for col. 1
+      game_list->SetItem(index, 1, base->GetTag("White"));
+      game_list->SetItem(index, 2, base->GetTag("Black"));
+      game_list->SetItem(index, 3, base->GetTag("Event"));
+      game_list->SetItem(index, 4, base->GetTag("Round"));
+      game_list->SetItem(index, 5, base->GetTag("Result"));
+      id++;
     }
   }
 }
\ No newline at end of file
diff --git a/src/base_tab/BaseTab.hpp b/src/base_tab/BaseTab.hpp
index 30d839a..5a71cd7 100644
--- a/src/base_tab/BaseTab.hpp
+++ b/src/base_tab/BaseTab.hpp
@@ -1,13 +1,16 @@
 
-#include "ochess.hpp"
 #include "BasePanelBF.h"
 #include "gamebase/GameBase.hpp"
 #include "gamebase/PGNGameBase.hpp"
+#include "ochess.hpp"
 
 class BaseTab : public BasePanelBF, public TabInfos {
   GameBase *base;
+
 public:
   BaseTab(wxFrame *parent);
   void ApplyPreferences();
   void LoadFile(std::string path);
+  void OnBim(wxCommandEvent &event);
+  void OnOpenGame(wxListEvent &event);
 };
\ No newline at end of file
diff --git a/src/base_tab/gamebase/GameBase.hpp b/src/base_tab/gamebase/GameBase.hpp
index 9982a7d..828248c 100644
--- a/src/base_tab/gamebase/GameBase.hpp
+++ b/src/base_tab/gamebase/GameBase.hpp
@@ -4,7 +4,8 @@
 class GameBase {
 
 public:
-  virtual bool HasNextGame() = 0;
   virtual Game *GetGame(std::uint32_t id) = 0;
-  virtual Game *GetNextGame() = 0;
+  virtual bool NextGame() = 0;
+  virtual std::string GetTag(std::string tag) = 0;
+  virtual void Reset() = 0;
 };
\ No newline at end of file
diff --git a/src/base_tab/gamebase/PGNGameBase.cpp b/src/base_tab/gamebase/PGNGameBase.cpp
index 39775d1..08c8803 100644
--- a/src/base_tab/gamebase/PGNGameBase.cpp
+++ b/src/base_tab/gamebase/PGNGameBase.cpp
@@ -1,35 +1,54 @@
 #include "PGNGameBase.hpp"
 
-PGNGameBase::PGNGameBase(std::string pgn_file)
-    : pgn(new pgnp::PGN()), hasNextGame(false) {
+PGNGameBase::PGNGameBase(std::string pgn_file) : pgn(new pgnp::PGN()) {
+  file = pgn_file;
   pgn->FromFile(pgn_file);
-  ParseNextGame();
 }
 
-bool PGNGameBase::HasNextGame() { return (hasNextGame); }
-
-void PGNGameBase::ParseNextGame() {
+bool PGNGameBase::NextGame() {
+  bool game_found = false;
   try {
     pgn->ParseNextGame();
-    hasNextGame = true;
+    game_found = true;
   } catch (...) {
-    hasNextGame = false;
+    game_found = false;
   }
+  return (game_found);
 }
 
-Game *PGNGameBase::GetNextGame() {
-  pgnp::HalfMove *pgnp_moves = new pgnp::HalfMove();
-  pgn->GetMoves(pgnp_moves);
-  std::string fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
-  if (pgn->HasTag("FEN")) {
-    fen = pgn->GetTagValue("FEN");
+std::string PGNGameBase::GetTag(std::string tag) {
+  if (pgn->HasTag(tag)) {
+    return (pgn->GetTagValue(tag));
   }
-  HalfMove *m = new HalfMove(pgnp_moves, fen);
-  Game *g = new Game(m, fen);
-  for (std::string &s : pgn->GetTagList()) {
-    g->SetTag(s, pgn->GetTagValue(s));
-  }
-
-  ParseNextGame();
-  return (g);
+  return ("");
+}
+
+void PGNGameBase::Reset() {
+  delete pgn;
+  pgn = new pgnp::PGN();
+  pgn->FromFile(file);
+}
+
+Game *PGNGameBase::GetGame(std::uint32_t id) {
+  Reset();
+  std::uint32_t curid = 0;
+  while(NextGame()) {
+    if (id == curid) {
+      pgnp::HalfMove *pgnp_moves = new pgnp::HalfMove();
+      pgn->GetMoves(pgnp_moves);
+      std::string fen =
+          "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
+      if (pgn->HasTag("FEN")) {
+        fen = pgn->GetTagValue("FEN");
+      }
+      HalfMove *m = new HalfMove(pgnp_moves, fen);
+      Game *g = new Game(m, fen);
+      for (std::string &s : pgn->GetTagList()) {
+        g->SetTag(s, pgn->GetTagValue(s));
+      }
+      return (g);
+    }
+    curid++;
+  }
+  return (NULL);
 }
diff --git a/src/base_tab/gamebase/PGNGameBase.hpp b/src/base_tab/gamebase/PGNGameBase.hpp
index b58bdca..1ad58a1 100644
--- a/src/base_tab/gamebase/PGNGameBase.hpp
+++ b/src/base_tab/gamebase/PGNGameBase.hpp
@@ -2,14 +2,14 @@
 #include "pgnp.hpp"
 
 class PGNGameBase : public GameBase {
-    pgnp::PGN *pgn;
-    bool hasNextGame;
+  pgnp::PGN *pgn;
+  bool hasNextGame;
+  std::string file;
 
-    void ParseNextGame();
 public:
   PGNGameBase(std::string pgn_file);
-
-  bool HasNextGame();
-  Game *GetGame(std::uint32_t id) { return (new Game()); };
-  Game *GetNextGame();
+  Game *GetGame(std::uint32_t id);
+  bool NextGame();
+  std::string GetTag(std::string tag);
+  void Reset();
 };
\ No newline at end of file
diff --git a/tools/wxframebuilder/BasePanel.fbp b/tools/wxframebuilder/BasePanel.fbp
index ca01e99..619984a 100644
--- a/tools/wxframebuilder/BasePanel.fbp
+++ b/tools/wxframebuilder/BasePanel.fbp
@@ -388,7 +388,7 @@
                         <property name="resize">Resizable</property>
                         <property name="show">1</property>
                         <property name="size">-1,-1</property>
-                        <property name="style">wxLC_ICON</property>
+                        <property name="style">wxLC_REPORT</property>
                         <property name="subclass">; ; forward_declare</property>
                         <property name="toolbar_pane">0</property>
                         <property name="tooltip"></property>