diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/GeneralPreferences.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/GeneralPreferences.java
index 124f882..4e70760 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/GeneralPreferences.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/GeneralPreferences.java
@@ -23,5 +23,13 @@
     return preferenceStore().getBoolean(CLOSE_VIEW_ON_EXIT);
   }
 
+  public static boolean warnOnClose() {
+    return preferenceStore().getBoolean(WARN_ON_CLOSE);
+  }
+
+  public static void warnOnClose(boolean newValue) {
+    preferenceStore().setValue(WARN_ON_CLOSE, newValue);
+  }
+
   private GeneralPreferences() {}
 }
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.java
index b052984..63d42a9 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.java
@@ -28,6 +28,7 @@
   public static String unableToLoadPreviewContent;
   public static String useCustomFont;
   public static String useTextFont;
+  public static String warnOnClose;
 
   static {
     Class<Messages> type = Messages.class;
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.properties b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.properties
index 9696700..ce8b911 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.properties
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/Messages.properties
@@ -12,4 +12,5 @@
 unableToLoadPreviewContent=Unable to load preview content
 useCustomFont=Use custom font
 useTextFont=Use Eclipse's "Text Font"
+warnOnClose=Warn on close
 
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceInitializer.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceInitializer.java
index d598e9a..74dd573 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceInitializer.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceInitializer.java
@@ -23,6 +23,7 @@
   @Override public void initializeDefaultPreferences() {
     preferenceStore().setDefault(BUFFER_LINE_COUNT, 1000);
     preferenceStore().setDefault(CLOSE_VIEW_ON_EXIT, true);
+    preferenceStore().setDefault(WARN_ON_CLOSE, true);
     setDefault(BACKGROUND_COLOR, new RGB(0, 0, 0));
     setDefault(FOREGROUND_COLOR, new RGB(229, 229, 229));
     preferenceStore().setDefault(USE_CUSTOM_FONT, false);
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceNames.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceNames.java
index 4dea3b0..7983517 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceNames.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/PreferenceNames.java
@@ -14,6 +14,7 @@
 final class PreferenceNames {
   static final String BUFFER_LINE_COUNT = "bufferLineCount";
   static final String CLOSE_VIEW_ON_EXIT = "exitViewOnExit";
+  static final String WARN_ON_CLOSE = "warnOnClose";
   static final String BACKGROUND_COLOR = "backgroundColor";
   static final String FOREGROUND_COLOR = "foregroundColor";
   static final String USE_CUSTOM_FONT = "useCustomFont";
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/RootPreferencePage.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/RootPreferencePage.java
index 95f057a..b386521 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/RootPreferencePage.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/preferences/RootPreferencePage.java
@@ -29,8 +29,9 @@
   private static final String INVALID_BUFFER_LINE_COUNT_MESSAGE =
       NLS.bind(invalidBufferLineCount, MINIMUM_BUFFER_LINE_COUNT, MAXIMUM_BUFFER_LINE_COUNT);
 
-  private Button btnCloseViewOnExit;
   private Text txtBufferLineCount;
+  private Button btnCloseViewOnExit;
+  private Button btnWarnOnClose;
 
   private int newBufferLineCount;
 
@@ -75,6 +76,10 @@
     btnCloseViewOnExit.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
     btnCloseViewOnExit.setText(closeViewOnExit);
 
+    btnWarnOnClose = new Button(contents, SWT.CHECK);
+    btnWarnOnClose.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
+    btnWarnOnClose.setText(warnOnClose);
+
     updateContents();
     return contents;
   }
@@ -85,17 +90,21 @@
   }
 
   private void updateContents() {
-    btnCloseViewOnExit.setSelection(getPreferenceStore().getBoolean(CLOSE_VIEW_ON_EXIT));
     txtBufferLineCount.setText(getPreferenceStore().getString(BUFFER_LINE_COUNT));
+    btnCloseViewOnExit.setSelection(getPreferenceStore().getBoolean(CLOSE_VIEW_ON_EXIT));
+    btnWarnOnClose.setSelection(getPreferenceStore().getBoolean(WARN_ON_CLOSE));
   }
 
   @Override public boolean performOk() {
     getPreferenceStore().setValue(BUFFER_LINE_COUNT, newBufferLineCount);
     getPreferenceStore().setValue(CLOSE_VIEW_ON_EXIT, btnCloseViewOnExit.getSelection());
+    getPreferenceStore().setValue(WARN_ON_CLOSE, btnWarnOnClose.getSelection());
     return true;
   }
 
   @Override protected void performDefaults() {
+    txtBufferLineCount.setText(getPreferenceStore().getDefaultString(BUFFER_LINE_COUNT));
     btnCloseViewOnExit.setSelection(getPreferenceStore().getDefaultBoolean(CLOSE_VIEW_ON_EXIT));
+    btnWarnOnClose.setSelection(getPreferenceStore().getDefaultBoolean(WARN_ON_CLOSE));
   }
 }
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.java
index 1fbc4cc..96db96b 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.java
@@ -14,6 +14,9 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class Messages extends NLS {
+  public static String alwaysCloseWithoutWarn;
+  public static String closeTerminalQuestion;
+  public static String confirmCloseDialogTitle;
   public static String defaultViewTitle;
   public static String newLocalTerminal;
   public static String scrollLock;
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.properties b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.properties
index 0a447fb..a5c0377 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.properties
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.properties
@@ -1,3 +1,6 @@
+alwaysCloseWithoutWarn=Always close without warn
+closeTerminalQuestion=Close terminal?
+confirmCloseDialogTitle=Confirm Close
 defaultViewTitle=Local Terminal
 newLocalTerminal=New Local Terminal
 scrollLock=Scroll Lock
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java
index e1da3b4..e361343 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java
@@ -40,7 +40,7 @@
 /**
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class TerminalView extends ViewPart {
+public class TerminalView extends ViewPart implements ISaveablePart2 {
   private static final String SCROLL_LOCK_ENABLED = "scrollLock";
   private static final String TITLE_STATE_TYPE = "title";
   private static final String WORKING_DIRECTORY_STATE_TYPE = "workingDirectory";
@@ -56,6 +56,9 @@
   private Action newTerminalAction;
   private Action scrollLockAction;
 
+  private boolean checkCanBeClosed;
+  private boolean forceClose;
+
   public static void openTerminalView(IPath workingDirectory) {
     openTerminalView(null, workingDirectory);
   }
@@ -150,6 +153,7 @@
   private void closeViewOnExitIfPossible() {
     if (closeViewOnExit() && terminalWidget != null && !terminalWidget.isDisposed()) {
       // must run in UI thread.
+      forceClose = true;
       terminalWidget.getDisplay().asyncExec(new Runnable() {
         @Override public void run() {
           IWorkbenchPartSite site = getSite();
@@ -274,4 +278,38 @@
       enableScrollLockAndUpdateAction(newValue);
     }
   }
+
+  @Override public boolean isDirty() {
+    if (checkCanBeClosed) {
+      checkCanBeClosed = false;
+      return true;
+    }
+    return false;
+  }
+
+  @Override public boolean isSaveOnCloseNeeded() {
+    if (forceClose) {
+      return false;
+    }
+    checkCanBeClosed = true;
+    return true;
+  }
+
+  @Override public int promptToSaveOnClose() {
+    if (warnOnClose()) {
+      boolean close = WarnOnCloseDialog.open(terminalWidget.getShell());
+      if (!close) {
+        return CANCEL;
+      }
+    }
+    return NO;
+  }
+
+  @Override public void doSave(IProgressMonitor monitor) {}
+
+  @Override public void doSaveAs() {}
+
+  @Override public boolean isSaveAsAllowed() {
+    return false;
+  }
 }
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/WarnOnCloseDialog.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/WarnOnCloseDialog.java
new file mode 100644
index 0000000..e6261b7
--- /dev/null
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/WarnOnCloseDialog.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2012 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.terminal.local.ui.view;
+
+import static com.google.eclipse.terminal.local.ui.preferences.GeneralPreferences.warnOnClose;
+import static com.google.eclipse.terminal.local.ui.view.Messages.*;
+import static org.eclipse.jface.dialogs.IDialogConstants.*;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+class WarnOnCloseDialog extends MessageDialog {
+  private static final String[] BUTTON_LABELS = { YES_LABEL, NO_LABEL };
+
+  private Button btnCloseWithoutWarn;
+
+  static boolean open(Shell parent) {
+    WarnOnCloseDialog dialog = new WarnOnCloseDialog(parent);
+    return dialog.open() == OK;
+  }
+
+  private WarnOnCloseDialog(Shell parentShell) {
+    super(parentShell, confirmCloseDialogTitle, null, closeTerminalQuestion, QUESTION, BUTTON_LABELS, 0);
+  }
+
+  @Override protected Control createCustomArea(Composite parent) {
+    btnCloseWithoutWarn = new Button(parent, SWT.CHECK);
+    btnCloseWithoutWarn.setText(alwaysCloseWithoutWarn);
+    btnCloseWithoutWarn.setSelection(!warnOnClose());
+    return btnCloseWithoutWarn;
+  }
+
+  @Override protected void buttonPressed(int buttonId) {
+    boolean closeWithoutWarn = btnCloseWithoutWarn.getSelection();
+    warnOnClose(!closeWithoutWarn);
+    super.buttonPressed(buttonId);
+  }
+}
