diff --git a/daemon/gvfsbackendsftp.c b/daemon/gvfsbackendsftp.c
index 342b996..913ef93 100644
--- a/daemon/gvfsbackendsftp.c
+++ b/daemon/gvfsbackendsftp.c
@@ -283,7 +283,7 @@ g_vfs_backend_sftp_init (GVfsBackendSftp *backend)
   backend->expected_replies = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)expected_reply_free);
 }
 
-static void
+static gboolean
 look_for_stderr_errors (GVfsBackend *backend, GError **error)
 {
   GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
@@ -299,47 +299,52 @@ look_for_stderr_errors (GVfsBackend *backend, GError **error)
           g_set_error_literal (error,
 	                       G_IO_ERROR, G_IO_ERROR_FAILED,
         	               _("ssh program unexpectedly exited"));
-          return;
+          return FALSE;
         }
-      
+      if (strstr (line, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@") != NULL)
+        {
+           return TRUE;
+        }
+
       if (strstr (line, "Permission denied") != NULL)
         {
           g_set_error_literal (error,
 	                       G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
         	               _("Permission denied"));
-          return;
+          return FALSE;
         }
       else if (strstr (line, "Name or service not known") != NULL)
         {
           g_set_error_literal (error,
 	                       G_IO_ERROR, G_IO_ERROR_HOST_NOT_FOUND,
         	               _("Hostname not known"));
-          return;
+          return FALSE;
         }
       else if (strstr (line, "No route to host") != NULL)
         {
           g_set_error_literal (error,
 	                       G_IO_ERROR, G_IO_ERROR_HOST_NOT_FOUND,
         	               _("No route to host"));
-          return;
+          return FALSE;
         }
       else if (strstr (line, "Connection refused") != NULL)
         {
           g_set_error_literal (error,
 	                       G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
         	               _("Connection refused by server"));
-          return;
+          return FALSE;
         }
       else if (strstr (line, "Host key verification failed") != NULL) 
         {
           g_set_error_literal (error,
 	                       G_IO_ERROR, G_IO_ERROR_FAILED,
         	               _("Host key verification failed"));
-          return;
+          return FALSE;
         }
       
       g_free (line);
     }
+    return FALSE;
 }
 
 static gchar*
@@ -796,6 +801,61 @@ get_hostname_and_fingerprint_from_line (const gchar *buffer,
   return TRUE;
 }
 
+static gboolean
+get_host_verification_failed_data_from_line (GVfsBackend *backend,
+                                             gchar      **hostname_out,
+                                             gchar      **fingerprint_out,
+                                             gchar      **file_out,
+                                             gint       **line_out)
+{
+  GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
+  gchar *hostname = NULL;
+  gchar *fingerprint = NULL;
+  gchar *filename = NULL;
+  gchar *line_char = NULL;  
+  gint file_line = -1;  
+  char *line;
+  gchar *pos;
+
+  while (1)
+    {
+      line = g_data_input_stream_read_line (op_backend->error_stream, NULL, NULL, NULL);
+      if (line == NULL)
+        {
+          goto done;
+        }
+      fprintf(stderr, "PRINT: %s\n", line);
+      if (g_str_has_prefix (line, "The fingerprint for the RSA key sent by the remote host is"))
+        {
+            /* Fingerprint is on the next line, but should remove last dot */
+            fingerprint = g_data_input_stream_read_line (op_backend->error_stream, NULL, NULL, NULL);
+        }
+      else if (g_str_has_prefix (line, "RSA host key for "))
+        {
+            pos = strchr (&line[18], ' ');
+            hostname = g_strndup (&line[17], pos - (&line[17]));
+        }
+      else if (g_str_has_prefix (line, "Offending key in "))
+        {
+            pos = strrchr (line, ':');
+            /* Fingerprint is on the next line, but should remove last dot */
+            line_char = g_strdup (pos+1);
+            filename = g_strndup (&line[18], pos - (&line[18]));
+            file_line = atoi(line_char);
+        }
+      g_free (line);
+    }
+done:
+    //TODO: check all data first
+
+  *hostname_out = hostname;
+  *fingerprint_out = fingerprint;
+  *file_out = filename;
+  *line_out = file_line;
+
+  return TRUE;
+}
+
 static const gchar *
 get_authtype_from_password_line (const char *password_line)
 {
@@ -1561,6 +1621,10 @@ do_mount (GVfsBackend *backend,
   GMountSpec *sftp_mount_spec;
   char *extension_name, *extension_data;
   char *display_name;
+  char *hostname;
+  char *fingerprint;
+  char *filename;
+  int file_line;
 
   args = setup_ssh_commandline (backend);
 
@@ -1620,9 +1684,84 @@ do_mount (GVfsBackend *backend,
   reply = read_reply_sync (op_backend, NULL, NULL);
   if (reply == NULL)
     {
-      look_for_stderr_errors (backend, &error);
-      g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
-      g_error_free (error);
+      if (!look_for_stderr_errors (backend, &error))
+        {
+          g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
+          g_error_free (error);
+        }
+      else
+        {
+          /* Probably host key verification failed error */
+          if (get_host_verification_failed_data_from_line (backend,
+                                                           &hostname,
+                                                           &fingerprint,
+                                                           &filename,
+                                                           &file_line))
+            {
+	          const gchar *choices[] = {_("Log In Anyway"), _("Cancel Login")};
+	          const gchar *choice_string;
+        	  gchar *message;
+        	  gint choice;
+              gboolean aborted = FALSE;
+              //TODO: better message
+              message = g_strdup_printf (_("Computer: %s\n"
+				       "Fingerprint: %s\n"
+				       "File: %s\n"
+				       "File Line: %i\n"),
+				       hostname , fingerprint, filename, file_line);
+
+        	  //? hostname : op_backend->host
+        	  g_free (fingerprint);
+
+              if (!g_mount_source_ask_question (mount_source,
+				                    message,
+				                    choices,
+				                    2,
+				                    &aborted,
+				                    &choice) || 
+                      aborted)
+                    {
+                      //TODO
+                      g_set_error_literal (error,
+			                   G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
+			                   _("Login dialog cancelled"));
+                      g_free (message);
+                      
+                      return;
+                    }
+                  g_free (message); 
+
+                  if (choice == 0) {
+                     /* Remove the offending line in the file by spawning ssh-keygen -R host */
+                     char *command;
+                     char *out;
+                     char *err;
+                     gint exit;
+
+                     command = g_strdup_printf ("ssh-keygen -R %s", hostname);
+                     g_free (hostname);
+                     g_spawn_command_line_sync (command, &out, &err, &exit, NULL);
+                     fprintf(stderr, "Exit code: %i\nOUT: %s\nERR: %s\n", exit, out, err);
+                     //TODO: check exit code
+
+                     /* Keys fixed, we need to re-spawn the ssh command */
+                     //g_error_free (error);
+                     do_mount (backend, job, mount_spec, mount_source, is_automount);
+                  } else {
+                      g_set_error_literal (error,
+			                   G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
+			                   _("Login dialog cancelled"));
+                  }
+            }
+          else
+            {
+                //TODO: error handling
+                g_set_error_literal (error,
+                       G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
+                       _("Login dialog cancelled"));
+            }
+
+        }
       return;
     }
   
