diff --git a/GUI/Model/Files/DatafilesQModel.cpp b/GUI/Model/Files/DatafilesQModel.cpp
index 56b24c9f5b8789946fe99c812ef537dd77158224..a50ef4717135cafc3bd983bc57b91c91c24de9e2 100644
--- a/GUI/Model/Files/DatafilesQModel.cpp
+++ b/GUI/Model/Files/DatafilesQModel.cpp
@@ -17,25 +17,15 @@
 #include "GUI/Model/Files/DatafilesSet.h"
 
 DatafilesQModel::DatafilesQModel(QObject* parent, DatafilesSet* model)
-    : QAbstractItemModel(parent)
+    : QAbstractListModel(parent)
     , m_model(model)
 {
 }
 
-bool DatafilesQModel::setData(const QModelIndex& index, const QVariant& value, int role)
-{
-    if (role == Qt::EditRole && index.isValid() && index.column() == 0) {
-        itemForIndex(index)->setDatafileItemName(value.toString());
-        emit dataChanged(index, index);
-        return true;
-    }
-    return false;
-}
-
 void DatafilesQModel::injectDatafileItem(DatafileItem* item)
 {
     const int row = m_model->size();
-    beginInsertRows(indexOfHeadline(), row, row);
+    beginInsertRows({}, row, row);
     m_model->appendDatafileItem(item);
     endInsertRows();
 }
@@ -43,7 +33,7 @@ void DatafilesQModel::injectDatafileItem(DatafileItem* item)
 void DatafilesQModel::removeDatafileItemAt(int row)
 {
     ASSERT(0 <= row && row < (int)m_model->size());
-    beginRemoveRows(indexOfHeadline(), row, row);
+    beginRemoveRows({}, row, row);
     m_model->deleteDatafileItemAt(row);
     endRemoveRows();
 }
@@ -55,91 +45,31 @@ const DatafileItem* DatafilesQModel::topMostItem() const
     return nullptr;
 }
 
-QModelIndex DatafilesQModel::indexOfHeadline() const
-{
-    return createIndex(0, 0, nullptr);
-}
-
-QModelIndex DatafilesQModel::index(int row, int column, const QModelIndex& parent) const
-{
-    if (!hasIndex(row, column, parent))
-        return {};
-
-    if (!parent.isValid())
-        return createIndex(row, column, nullptr);
-
-    if (parent == indexOfHeadline())
-        return createIndex(row, column, m_model->dfileItemAt(row));
-
-    return {};
-}
-
-QModelIndex DatafilesQModel::parent(const QModelIndex& index) const
-{
-    if (!index.isValid())
-        return {};
-
-    if (index.internalPointer() == nullptr) // index is headline => no parent
-        return {};
-
-    return indexOfHeadline();
-}
-
-int DatafilesQModel::columnCount(const QModelIndex& /*parent*/) const
+int DatafilesQModel::rowCount(const QModelIndex& /*parent*/) const
 {
-    return 1;
-}
-
-int DatafilesQModel::rowCount(const QModelIndex& parent) const
-{
-    if (!parent.isValid())
-        return 1;
-
-    // parent is a headline
-    if (parent == indexOfHeadline())
-        return m_model->size();
-
-    return 0;
+    return m_model->size();
 }
 
 QVariant DatafilesQModel::data(const QModelIndex& index, int role) const
 {
-    if (isHeadline(index))
+    if (!index.isValid() || index.row() >= (int)m_model->size() || index.row() < 0)
         return {};
 
-    auto* const item = itemForIndex(index);
-
-    if (role == Qt::ToolTipRole)
-        return {};
+    const auto* item = itemForIndex(index);
+    ASSERT(item);
 
     if (role == Qt::DisplayRole)
         return item->realItemName();
 
-    if (role == Qt::EditRole)
-        return item->realItemName();
+    if (role == Qt::ToolTipRole)
+        return {};
 
     return {};
 }
 
-Qt::ItemFlags DatafilesQModel::flags(const QModelIndex& index) const
-{
-    if (isHeadline(index) || !index.isValid())
-        return Qt::NoItemFlags;
-
-    auto f = QAbstractItemModel::flags(index);
-    f |= Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled;
-
-    if (index.column() == 0) // col 0 contains name of the data entry
-        f |= Qt::ItemIsEditable;
-
-    return f;
-}
-
 DatafileItem* DatafilesQModel::itemForIndex(const QModelIndex& index) const
 {
-    if (!index.isValid())
-        return nullptr;
-    return reinterpret_cast<DatafileItem*>(index.internalPointer());
+    return m_model->dfileItemAt(index.row());
 }
 
 QModelIndex DatafilesQModel::indexForItem(const DatafileItem* item) const
@@ -149,10 +79,3 @@ QModelIndex DatafilesQModel::indexForItem(const DatafileItem* item) const
             return createIndex(i, 0, item);
     return {};
 }
-
-bool DatafilesQModel::isHeadline(const QModelIndex& index) const
-{
-    if (!index.isValid())
-        return false;
-    return index.internalPointer() == nullptr;
-}
diff --git a/GUI/Model/Files/DatafilesQModel.h b/GUI/Model/Files/DatafilesQModel.h
index 1846a00c4b43e3d32821eb3ff1fa16299cce8870..8221010ec521c278d807d205d3199d1ff9a3feef 100644
--- a/GUI/Model/Files/DatafilesQModel.h
+++ b/GUI/Model/Files/DatafilesQModel.h
@@ -15,36 +15,30 @@
 #ifndef BORNAGAIN_GUI_MODEL_FILES_DATAFILESQMODEL_H
 #define BORNAGAIN_GUI_MODEL_FILES_DATAFILESQMODEL_H
 
-#include <QAbstractItemModel>
+#include <QAbstractListModel>
 
 class DatafileItem;
 class DatafilesSet;
 
 //! Tree representation of DatafilesSet, for use in DatafilesSelector.
 
-class DatafilesQModel : public QAbstractItemModel {
+class DatafilesQModel : public QAbstractListModel {
     Q_OBJECT
 public:
     explicit DatafilesQModel(QObject* parent, DatafilesSet* model);
 
-    bool setData(const QModelIndex& index, const QVariant& value, int role) override;
     void injectDatafileItem(DatafileItem* item);
     void removeDatafileItemAt(int row);
 
-    QModelIndex index(int row, int column, const QModelIndex& parent = {}) const override;
-    QModelIndex parent(const QModelIndex& index) const override;
-    int columnCount(const QModelIndex& parent = {}) const override;
     int rowCount(const QModelIndex& parent = {}) const override;
     QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
-    Qt::ItemFlags flags(const QModelIndex& index) const override;
-    DatafileItem* itemForIndex(const QModelIndex& index) const;
+
+     DatafileItem* itemForIndex(const QModelIndex& index) const;
     QModelIndex indexForItem(const DatafileItem* item) const;
     const DatafileItem* topMostItem() const; //!< The topmost visible item. Can be null.
-    bool isHeadline(const QModelIndex& index) const;
+    bool isHeadline(const QModelIndex&) const { return false; }
 
 private:
-    QModelIndex indexOfHeadline() const;
-
     DatafilesSet* const m_model;
 };
 
diff --git a/GUI/Model/Files/DatafilesSet.h b/GUI/Model/Files/DatafilesSet.h
index 4fb3a4d427afc17e1a9a52b68b95d70b9981253e..09d7a89966ee06b60ac30d0e18acc18559e5a87a 100644
--- a/GUI/Model/Files/DatafilesSet.h
+++ b/GUI/Model/Files/DatafilesSet.h
@@ -41,6 +41,7 @@ public:
     size_t size() const { return m_dfile_items.size(); }
     const OwningVector<DatafileItem>& dfileItems() const { return m_dfile_items; }
     const DatafileItem* dfileItemAt(int i) const { return m_dfile_items.at(i); }
+    DatafileItem* dfileItemAt(int i) { return m_dfile_items.at(i); }
     QStringList realItemNames() const;
     int currentIndex() const { return m_current_index; }
     void writeTo(QXmlStreamWriter* w) const;