diff --git a/code/ryzom/tools/client/ryzom_installer/src/serversmodel.cpp b/code/ryzom/tools/client/ryzom_installer/src/serversmodel.cpp
new file mode 100644
index 000000000..7cda521de
--- /dev/null
+++ b/code/ryzom/tools/client/ryzom_installer/src/serversmodel.cpp
@@ -0,0 +1,82 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#include "stdpch.h"
+#include "serversmodel.h"
+
+CServersModel::CServersModel(QObject *parent):QAbstractListModel(parent)
+{
+ m_servers = CConfigFile::getInstance()->getServers();
+}
+
+CServersModel::CServersModel(const CServers &servers, QObject *parent):QAbstractListModel(parent), m_servers(servers)
+{
+}
+
+CServersModel::~CServersModel()
+{
+}
+
+int CServersModel::rowCount(const QModelIndex &parent) const
+{
+ return m_servers.size();
+}
+
+QVariant CServersModel::data(const QModelIndex &index, int role) const
+{
+ if (role != Qt::DisplayRole) return QVariant();
+
+ const CServer &server = m_servers.at(index.row());
+
+ return server.name;
+}
+
+bool CServersModel::removeRows(int row, int count, const QModelIndex &parent)
+{
+ if (row < 0) return false;
+
+ beginRemoveRows(parent, row, row + count - 1);
+
+ m_servers.removeAt(row);
+
+ endRemoveRows();
+
+ return true;
+}
+
+bool CServersModel::save() const
+{
+ CConfigFile::getInstance()->setServers(m_servers);
+
+ return true;
+}
+
+int CServersModel::getIndexFromServerID(const QString &serverId) const
+{
+ for(int i = 0; i < m_servers.size(); ++i)
+ {
+ if (m_servers[i].id == serverId) return i;
+ }
+
+ return -1;
+}
+
+QString CServersModel::getServerIDFromIndex(int index) const
+{
+ if (index < 0 || index >= m_servers.size()) return "";
+
+ return m_servers[index].id;
+}
diff --git a/code/ryzom/tools/client/ryzom_installer/src/serversmodel.h b/code/ryzom/tools/client/ryzom_installer/src/serversmodel.h
new file mode 100644
index 000000000..27f5daed3
--- /dev/null
+++ b/code/ryzom/tools/client/ryzom_installer/src/serversmodel.h
@@ -0,0 +1,51 @@
+// Ryzom - MMORPG Framework
+// Copyright (C) 2010 Winch Gate Property Limited
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#ifndef SERVERSMODEL_H
+#define SERVERSMODEL_H
+
+#include "configfile.h"
+
+/**
+ * Servers model
+ *
+ * \author Cedric 'Kervala' OCHS
+ * \date 2016
+ */
+class CServersModel : public QAbstractListModel
+{
+public:
+ CServersModel(QObject *parent);
+ CServersModel(const CServers &servers, QObject *parent);
+ virtual ~CServersModel();
+
+ virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
+ virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+
+ bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex());
+
+ CServers& getServers() { return m_servers; }
+
+ bool save() const;
+
+ int getIndexFromServerID(const QString &serverId) const;
+ QString getServerIDFromIndex(int index) const;
+
+private:
+ CServers m_servers;
+};
+
+#endif