diff --git a/ide/CellModel.cpp b/ide/CellModel.cpp
index 911c9a9..41acbe7 100644
--- a/ide/CellModel.cpp
+++ b/ide/CellModel.cpp
@@ -1,14 +1,14 @@
 #include "CellModel.h"
 
-CellModel::CellModel(QObject *parent)
+CellModel::CellModel(Notebook *parent)
     : QAbstractListModel(parent)
+    , _notebook(parent)
 {
 }
 
-CellModel::CellModel(const CellModel &model, QObject *parent)
-    : CellModel(parent)
+CellModel::CellModel(const CellModel &other)
+    : CellModel(other._notebook)
 {
-    _cells = model._cells;
 }
 
 int CellModel::rowCount(const QModelIndex &parent) const
@@ -18,7 +18,7 @@
     if (parent.isValid())
         return 0;
 
-    return _cells.size();
+    return _notebook->_cells.size();
 }
 
 QVariant CellModel::data(const QModelIndex &index, int role) const
@@ -29,9 +29,9 @@
     switch (role)
     {
     case CodeRole:
-        return _cells[index.row()].code();
+        return _notebook->_cells[index.row()].code();
     case ResultRole:
-        return _cells[index.row()].result();
+        return _notebook->_cells[index.row()].result();
     default:
         return QVariant();
     }
@@ -44,10 +44,10 @@
         switch (role)
         {
         case CodeRole:
-            _cells[index.row()].setCode(value.toString());
+            _notebook->_cells[index.row()].setCode(value.toString());
             break;
         case ResultRole:
-            _cells[index.row()].setResult(value.toString());
+            _notebook->_cells[index.row()].setResult(value.toString());
             break;
         default:
             return false;
@@ -74,7 +74,7 @@
     beginInsertRows(parent, row, row + count - 1);
 
     for (int i = 0; i < count; i++)
-        _cells.insert(row, Cell());
+        _notebook->_cells.insert(row, Cell());
 
     endInsertRows();
 
@@ -86,7 +86,7 @@
     beginRemoveRows(parent, row, row + count - 1);
 
     for (int i = 0; i < count; i++)
-        _cells.removeAt(row);
+        _notebook->_cells.removeAt(row);
 
     endRemoveRows();
 
@@ -103,11 +103,11 @@
 
 void CellModel::addCell(const Cell &cell)
 {
-    int i = _cells.size();
+    int i = _notebook->_cells.size();
 
     insertRows(i, 1, QModelIndex());
 
-    _cells[i] = cell;
+    _notebook->_cells[i] = cell;
     emit dataChanged(index(i), index(i), {CodeRole, ResultRole});
 }
 
