diff --git a/snapshot.cpp b/snapshot.cpp
new file mode 100644
--- /dev/null
+++ b/snapshot.cpp
@@ -0,0 +1,91 @@
+/*
+  Copyright © 2015 Hasan Yavuz Özderya
+
+  This file is part of serialplot.
+
+  serialplot is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  serialplot 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 General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with serialplot.  If not, see .
+*/
+
+#include 
+
+#include "snapshot.h"
+#include "snapshotview.h"
+
+Snapshot::Snapshot(QMainWindow* parent, QString name) :
+    QObject(parent),
+    _showAction(name, this),
+    _deleteAction("Delete", this)
+{
+    _name = name;
+
+    view = NULL;
+    mainWindow = parent;
+    connect(&_showAction, &QAction::triggered, this, &Snapshot::show);
+
+    _deleteAction.setToolTip(QString("Delete ") + _name);
+    connect(&_deleteAction, &QAction::triggered, this, &Snapshot::onDeleteTriggered);
+}
+
+Snapshot::~Snapshot()
+{
+    if (view != NULL)
+    {
+        delete view;
+    }
+}
+
+QAction* Snapshot::showAction()
+{
+    return &_showAction;
+}
+
+QAction* Snapshot::deleteAction()
+{
+    return &_deleteAction;
+}
+
+void Snapshot::show()
+{
+    if (view == NULL)
+    {
+        view = new SnapshotView(mainWindow, this);
+        connect(view, &SnapshotView::closed, this, &Snapshot::viewClosed);
+    }
+    view->show();
+    view->activateWindow();
+    view->raise();
+}
+
+void Snapshot::viewClosed()
+{
+    view->deleteLater();
+    view = NULL;
+}
+
+void Snapshot::onDeleteTriggered()
+{
+    emit deleteRequested(this);
+}
+
+QString Snapshot::name()
+{
+    return _name;
+}
+
+void Snapshot::setName(QString name)
+{
+    _name = name;
+    _showAction.setText(_name);
+    emit nameChanged(this);
+}