diff --git a/create_workspace_dialog.ui b/create_workspace_dialog.ui
index e56192e..f8e00c7 100644
--- a/create_workspace_dialog.ui
+++ b/create_workspace_dialog.ui
@@ -11,7 +11,7 @@
    </rect>
   </property>
   <property name="windowTitle">
-   <string>浏览文件夹</string>
+   <string>Browse for Folder</string>
   </property>
   <layout class="QGridLayout" name="gridLayout">
    <item row="0" column="0">
@@ -47,7 +47,7 @@
        <item>
         <widget class="QLabel" name="DirectoryLabel">
          <property name="text">
-          <string>文件夹:</string>
+          <string>Folder:</string>
          </property>
         </widget>
        </item>
@@ -93,7 +93,7 @@
        <item>
         <widget class="QPushButton" name="CreateDirectoryButton">
          <property name="text">
-          <string>新建文件夹(M)</string>
+          <string>New Folder(M)</string>
          </property>
          <property name="shortcut">
           <string>Alt+M</string>
@@ -119,14 +119,14 @@
        <item>
         <widget class="QPushButton" name="SureButton">
          <property name="text">
-          <string>确定</string>
+          <string>OK</string>
          </property>
         </widget>
        </item>
        <item>
         <widget class="QPushButton" name="CancelButton">
          <property name="text">
-          <string>取消</string>
+          <string>Cancel</string>
          </property>
         </widget>
        </item>
diff --git a/main_window.cpp b/main_window.cpp
index e426b26..a689223 100644
--- a/main_window.cpp
+++ b/main_window.cpp
@@ -20,11 +20,11 @@ void MainWindow::setFileMenu(void) {
     connect(main_ui_->actionNewSessionFromScript, SIGNAL(triggered()),
             this, SLOT(newSessionFromScript()));
     connect(main_ui_->actionOpenCheckpoint, SIGNAL(triggered()),
-            this, SLOT(openCheckpoint()));
+            &this->open_checkpoint_dialog, SLOT(openCheckpoint()));
     connect(main_ui_->actionAppendFromScript, SIGNAL(triggered()),
             this, SLOT(appendFromScript()));
     connect(main_ui_->actionAppendFromCheckpoint, SIGNAL(triggered()),
-            this, SLOT(appendFromCheckpoint()));
+            &this->open_checkpoint_dialog, SLOT(appendFromCheckpoint()));
     connect(main_ui_->actionRunPythonFile, SIGNAL(triggered()),
             this, SLOT(runPythonFile()));
     connect(main_ui_->actionCreateWorkspace, SIGNAL(triggered()),
diff --git a/main_window.h b/main_window.h
index 6ed4796..fbc0b38 100644
--- a/main_window.h
+++ b/main_window.h
@@ -2,6 +2,7 @@
 #define MAIN_WINDOW_H

 #include <QMainWindow>
+#include "open_checkpoint_dialog.h"
 #include "create_workspace_dialog.h"

 namespace Ui {
@@ -21,16 +22,16 @@ signals:
 private slots:
     void newEmptySession(void);
     void newSessionFromScript(void);
-    void openCheckpoint(void);
     bool saveCheckpoint(void);
     void appendFromScript(void);
-    void appendFromCheckpoint(void);
     bool loadPresistentState(void);
     bool savePresitentState(void);
     void runPythonFile(void);
 private:
     Ui::MainWindow *main_ui_;
+    OpenCheckpointDialog open_checkpoint_dialog;
     CreateWorkspaceDialog create_workspace_dialog;
+
 };

 #endif
diff --git a/main_window_file_slots.cpp b/main_window_file_slots.cpp
index 587a5e8..9b49f87 100644
--- a/main_window_file_slots.cpp
+++ b/main_window_file_slots.cpp
@@ -15,13 +15,6 @@ void MainWindow::newSessionFromScript(void) {
     }
 }

-void MainWindow::openCheckpoint(void) {
-    QString scriptName = QFileDialog::getOpenFileName(this,
-                                                      tr("Selete checkpoint"),
-                                                      ".",
-                                                      tr("Sim checkpoint (*.sc)"));
-}
-
 bool MainWindow::saveCheckpoint(void) {
     return true;
 }
@@ -31,13 +24,9 @@ void MainWindow::appendFromScript(void) {
                                                       tr("Selete start script"),
                                                       ".",
                                                       tr("Script files (*.sim)"));
-}
+    if (!scriptName.isEmpty()) {

-void MainWindow::appendFromCheckpoint(void) {
-    QString scriptName = QFileDialog::getOpenFileName(this,
-                                                      tr("Selete checkpoint"),
-                                                      ".",
-                                                      tr("Sim checkpoint (*.sc)"));
+    }
 }

 bool MainWindow::loadPresistentState(void) {
diff --git a/open_checkpoint_dialog.cpp b/open_checkpoint_dialog.cpp
index e69de29..1f6adc4 100644
--- a/open_checkpoint_dialog.cpp
+++ b/open_checkpoint_dialog.cpp
@@ -0,0 +1,12 @@
+#include "open_checkpoint_dialog.h"
+#include "ui_open_checkpoint_dialog.h"
+
+OpenCheckpointDialog::OpenCheckpointDialog(QWidget *parent) :
+    QWidget(parent),
+    open_checkpoint_dialog_ui_(new Ui::OpenCheckpointDialog) {
+    open_checkpoint_dialog_ui_->setupUi(this);
+}
+
+OpenCheckpointDialog::~OpenCheckpointDialog() {
+    delete open_checkpoint_dialog_ui_;
+}
diff --git a/open_checkpoint_dialog.h b/open_checkpoint_dialog.h
index e69de29..5c8009c 100644
--- a/open_checkpoint_dialog.h
+++ b/open_checkpoint_dialog.h
@@ -0,0 +1,24 @@
+#ifndef OPEN_CHECKPOINT_DIALOG_H
+#define OPEN_CHECKPOINT_DIALOG_H
+
+#include <QWidget>
+
+namespace Ui {
+    class OpenCheckpointDialog;
+}
+
+class OpenCheckpointDialog : public QWidget {
+    Q_OBJECT
+
+public:
+    explicit OpenCheckpointDialog(QWidget *parent = 0);
+    ~OpenCheckpointDialog();
+private slots:
+    void openCheckpoint(void);
+    void appendFromCheckpoint(void);
+private:
+    Ui::OpenCheckpointDialog *open_checkpoint_dialog_ui_;
+
+};
+
+#endif
diff --git a/open_checkpoint_dialog_slots.cpp b/open_checkpoint_dialog_slots.cpp
index e69de29..a11fb03 100644
--- a/open_checkpoint_dialog_slots.cpp
+++ b/open_checkpoint_dialog_slots.cpp
@@ -0,0 +1,10 @@
+#include "open_checkpoint_dialog.h"
+#include "ui_open_checkpoint_dialog.h"
+
+void OpenCheckpointDialog::openCheckpoint(void) {
+    this->show();
+}
+
+void OpenCheckpointDialog::appendFromCheckpoint(void) {
+    this->show();
+}
diff --git a/sim-qt.pro b/sim-qt.pro
index b8ab8a5..df3bf47 100644
--- a/sim-qt.pro
+++ b/sim-qt.pro
@@ -16,12 +16,15 @@ CONFIG  +=  console plugin link_pkgconfig
 SOURCES += main.cpp\
 		   main_window.cpp\
            main_window_file_slots.cpp\
+           open_checkpoint_dialog.cpp\
+           open_checkpoint_dialog_slots.cpp\
            create_workspace_dialog.cpp\
            create_workspace_dialog_slots.cpp\
            sim_application.cpp

 HEADERS += main_window.h\
            sim_application.h\
+           open_checkpoint_dialog.h\
            create_workspace_dialog.h

-FORMS += cli.ui main_window.ui create_workspace_dialog.ui
+FORMS += cli.ui main_window.ui open_checkpoint_dialog.ui create_workspace_dialog.ui
diff --git a/open_checkpoint_dialog.ui b/open_checkpoint_dialog.ui
index e69de29..4dd56e9 100644
--- a/open_checkpoint_dialog.ui
+++ b/open_checkpoint_dialog.ui
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>OpenCheckpointDialog</class>
+ <widget class="QWidget" name="OpenCheckpointDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>506</width>
+    <height>500</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <layout class="QVBoxLayout" name="verticalLayout">
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_2">
+       <item>
+        <widget class="QComboBox" name="SelectDirectoryComboBox"/>
+       </item>
+       <item>
+        <widget class="QPushButton" name="UpButton">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text">
+          <string>Up</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <widget class="QTreeView" name="CheckpointDirectoryTreeView"/>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout">
+       <item>
+        <widget class="QComboBox" name="SimCheckpointComboBox"/>
+       </item>
+       <item>
+        <spacer name="horizontalSpacer">
+         <property name="orientation">
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeType">
+          <enum>QSizePolicy::Fixed</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>78</width>
+           <height>20</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item>
+        <widget class="QPushButton" name="OpenButton">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text">
+          <string>Open</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="CancelButton">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text">
+          <string>Cancel</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>