diff --git a/open_checkpoint_dialog.cpp b/open_checkpoint_dialog.cpp
index e9bc555..f9855a0 100644
--- a/open_checkpoint_dialog.cpp
+++ b/open_checkpoint_dialog.cpp
@@ -1,21 +1,18 @@
+#include <QStringList>
 #include "open_checkpoint_dialog.h"
 #include "ui_open_checkpoint_dialog.h"
-#include <QStringList>
-#include <QFileSystemModel>

 OpenCheckpointDialog::OpenCheckpointDialog(QWidget *parent) :
     QWidget(parent),
     open_checkpoint_dialog_ui_(new Ui::OpenCheckpointDialog) {
     open_checkpoint_dialog_ui_->setupUi(this);

-    QFileSystemModel *model = new QFileSystemModel;
-    model->setRootPath(QDir::currentPath());
+    initFilesystemModel();
+    initCheckpointDirectoryTreeView(fsModel);
+    initSelectDirectoryComboBox(fsModel);

-    open_checkpoint_dialog_ui_->CheckpointDirectoryTreeView->setModel(model);
-    open_checkpoint_dialog_ui_->CheckpointDirectoryTreeView->setHeaderHidden(true);
-    for (int i = 1; i < 4; ++i) {       // fix me: have better idea?
-        open_checkpoint_dialog_ui_->CheckpointDirectoryTreeView->hideColumn(i);
-    }
+    connect(open_checkpoint_dialog_ui_->CheckpointDirectoryTreeView, SIGNAL(clicked(QModelIndex)),
+            this, SLOT(setComboRootIndex(QModelIndex)));

 #if 0
     QStringList test = QStringList()
@@ -27,3 +24,20 @@ OpenCheckpointDialog::OpenCheckpointDialog(QWidget *parent) :
 OpenCheckpointDialog::~OpenCheckpointDialog() {
     delete open_checkpoint_dialog_ui_;
 }
+
+void OpenCheckpointDialog::initFilesystemModel(void) {
+    fsModel = new QFileSystemModel;
+    fsModel->setRootPath(QDir::currentPath());
+}
+
+void OpenCheckpointDialog::initCheckpointDirectoryTreeView(QFileSystemModel *fsm) {
+    open_checkpoint_dialog_ui_->CheckpointDirectoryTreeView->setModel(fsm);
+    open_checkpoint_dialog_ui_->CheckpointDirectoryTreeView->setHeaderHidden(true);
+    for (int i = 1; i < 4; ++i) {       // fix me: have better idea?
+        open_checkpoint_dialog_ui_->CheckpointDirectoryTreeView->hideColumn(i);
+    }
+}
+
+void OpenCheckpointDialog::initSelectDirectoryComboBox(QFileSystemModel *fsm) {
+    open_checkpoint_dialog_ui_->SelectDirectoryComboBox->setModel(fsm);
+}
diff --git a/open_checkpoint_dialog.h b/open_checkpoint_dialog.h
index 5c8009c..5f9eecd 100644
--- a/open_checkpoint_dialog.h
+++ b/open_checkpoint_dialog.h
@@ -2,6 +2,9 @@
 #define OPEN_CHECKPOINT_DIALOG_H

 #include <QWidget>
+#include <QFileSystemModel>
+
+class QFileSystemModel;

 namespace Ui {
     class OpenCheckpointDialog;
@@ -13,12 +16,18 @@ class OpenCheckpointDialog : public QWidget {
 public:
     explicit OpenCheckpointDialog(QWidget *parent = 0);
     ~OpenCheckpointDialog();
+private:
+    void initFilesystemModel(void);
+    void initCheckpointDirectoryTreeView(QFileSystemModel *fsm);
+    void initSelectDirectoryComboBox(QFileSystemModel *fsm);
+
 private slots:
     void openCheckpoint(void);
     void appendFromCheckpoint(void);
+    void setComboRootIndex(const QModelIndex &index);
 private:
     Ui::OpenCheckpointDialog *open_checkpoint_dialog_ui_;
-
+    QFileSystemModel *fsModel;
 };

 #endif
diff --git a/open_checkpoint_dialog_slots.cpp b/open_checkpoint_dialog_slots.cpp
index a11fb03..98dfb66 100644
--- a/open_checkpoint_dialog_slots.cpp
+++ b/open_checkpoint_dialog_slots.cpp
@@ -1,5 +1,6 @@
 #include "open_checkpoint_dialog.h"
 #include "ui_open_checkpoint_dialog.h"
+#include <cstdio>

 void OpenCheckpointDialog::openCheckpoint(void) {
     this->show();
@@ -8,3 +9,13 @@ void OpenCheckpointDialog::openCheckpoint(void) {
 void OpenCheckpointDialog::appendFromCheckpoint(void) {
     this->show();
 }
+
+void OpenCheckpointDialog::setComboRootIndex(const QModelIndex &index) {
+    if(fsModel->canFetchMore(index)) {
+        fsModel->fetchMore(index);
+    }
+
+    open_checkpoint_dialog_ui_
+        ->SelectDirectoryComboBox
+        ->setRootModelIndex(index);
+}