diff --git a/src/gpk-client.c b/src/gpk-client.c
index 3bc12b4..6792594 100644
--- a/src/gpk-client.c
+++ b/src/gpk-client.c
@@ -98,6 +98,7 @@ struct _GpkClientPrivate
 	gchar			*parent_title;
 	gchar			*parent_icon_name;
 	gchar			*error_details;
+	const gchar		*error_details_prompt_for_yast;
 	GMainLoop		*loop;
 };
 
@@ -198,8 +199,12 @@ gpk_client_libnotify_cb (NotifyNotification *notification, gchar *action, gpoint
 		egg_debug ("set %s to FALSE", GPK_CONF_NOTIFY_UPDATE_STARTED);
 		gconf_client_set_bool (gclient->priv->gconf_client, GPK_CONF_NOTIFY_UPDATE_STARTED, FALSE, NULL);
 	} else if (egg_strequal (action, "show-error-details")) {
-		/* TRANSLATORS: detailed text about the error */
-		gpk_error_dialog (_("Error details"), _("Package Manager error details"), gclient->priv->error_details);
+		if (gclient->priv->error_details_prompt_for_yast)
+			/* TRANSLATORS: detailed text about the error */
+			gpk_error_dialog_modal_prompt_yast (NULL, _("Error details"), _("Package Manager error details"), gclient->priv->error_details, gclient->priv->error_details_prompt_for_yast);
+		else
+			gpk_error_dialog (_("Error details"), _("Package Manager error details"), gclient->priv->error_details);
+			
 	} else if (egg_strequal (action, "cancel")) {
 		/* try to cancel */
 		ret = pk_client_cancel (gclient->priv->client_action, &error);
@@ -481,6 +486,14 @@ gpk_client_error_code_cb (PkClient *client, PkErrorCodeEnum code, const gchar *d
 		return;
 	}
 
+	if (code == PK_ERROR_ENUM_DEP_RESOLUTION_FAILED) {
+		egg_debug ("DEP_RES failed - will ask if they want to try yast");
+		gclient->priv->error_details_prompt_for_yast = _("To try and manually resolve problems use the YaST \"Online Update\" module");
+	}
+	else
+		gclient->priv->error_details_prompt_for_yast = NULL;
+		
+
 	egg_debug ("code was %s", pk_error_enum_to_text (code));
 
 	/* use a modal dialog if showing progress, else use libnotify */
@@ -488,7 +501,10 @@ gpk_client_error_code_cb (PkClient *client, PkErrorCodeEnum code, const gchar *d
 	message = gpk_error_enum_to_localised_message (code);
 	if (gclient->priv->show_progress) {
 		widget = GTK_WIDGET (gpk_client_dialog_get_window (gclient->priv->dialog));
-		gpk_error_dialog_modal (GTK_WINDOW (widget), title, message, details);
+		if (gclient->priv->error_details_prompt_for_yast)
+			gpk_error_dialog_modal_prompt_yast (GTK_WINDOW (widget), title, message, details, gclient->priv->error_details_prompt_for_yast);
+		else
+			gpk_error_dialog_modal (GTK_WINDOW (widget), title, message, details);
 		return;
 	}
 
@@ -654,7 +670,7 @@ gpk_client_error_msg (GpkClient *gclient, const gchar *title, GError *error)
 
 	/* hide the main window */
 	window = gpk_client_dialog_get_window (gclient->priv->dialog);
-	gpk_error_dialog_modal_with_time (window, title, message, details, gclient->priv->timestamp);
+	gpk_error_dialog_modal_with_time (window, title, message, details, gclient->priv->timestamp, NULL);
 }
 
 /**
diff --git a/src/gpk-error.c b/src/gpk-error.c
index 38aab70..18756e3 100644
--- a/src/gpk-error.c
+++ b/src/gpk-error.c
@@ -34,6 +34,32 @@
 
 #include "gpk-common.h"
 
+static gboolean
+gpk_error_dialog_run_yast (gpointer unused)
+{
+	gboolean retval;
+	GError *error = NULL;
+	
+	PkControl *control = pk_control_new ();
+	if (!pk_control_suggest_daemon_quit(control, &error))
+		egg_debug ("Failure calling pk_control_suggest_daemon_quit:%s", error->message);
+	g_object_unref (control);
+	
+	retval = g_spawn_command_line_async ("gnomesu -- /sbin/yast2 online_update", NULL);
+	if (!retval)
+		egg_debug ("Failure launching yast2 online_update");
+	return FALSE;
+}
+
+static void
+gpk_error_dialog_yast_cb (GtkButton *button, gpointer data)
+{
+	egg_debug ("user wants to try YaST...");
+	/* we want to make sure and finish up outstanding stuff before we launch yast so we can release the libzypp lock */
+	g_timeout_add_seconds (2, gpk_error_dialog_run_yast, NULL);
+	gtk_main_quit ();
+}
+
 /**
  * gpk_error_dialog_modal_with_time:
  * @window: the parent dialog
@@ -44,12 +70,14 @@
  * Shows a modal error, and blocks until the user clicks close
  **/
 gboolean
-gpk_error_dialog_modal_with_time (GtkWindow *window, const gchar *title, const gchar *message, const gchar *details, guint timestamp)
+gpk_error_dialog_modal_with_time (GtkWindow *window, const gchar *title, const gchar *message, const gchar *details, guint timestamp, const gchar *prompt_yast)
 {
 	GtkWidget *widget;
+	GtkWidget *button;
 	GladeXML *glade_xml;
 	GtkTextBuffer *buffer = NULL;
 	gchar *text;
+	gchar *full_message;
 
 	g_return_val_if_fail (title != NULL, FALSE);
 	g_return_val_if_fail (message != NULL, FALSE);
@@ -78,8 +106,21 @@ gpk_error_dialog_modal_with_time (GtkWindow *window, const gchar *title, const g
 	g_free (text);
 
 	/* message */
+	if (prompt_yast) {
+		full_message = g_strconcat (message, "\n\n", prompt_yast, NULL);
+		button = gtk_button_new_with_label(_("Start YaST and install updates manually"));
+		g_signal_connect (button, "clicked", G_CALLBACK (gpk_error_dialog_yast_cb), NULL);
+		/* add to box */
+		widget = glade_xml_get_widget (glade_xml, "dialog_error");
+		widget = gtk_dialog_get_action_area (GTK_DIALOG(widget));
+		gtk_box_pack_start (GTK_BOX (widget), button, TRUE, TRUE, 0);
+		gtk_widget_show (button);
+	}
+	else
+		full_message = g_strdup (message);
 	widget = glade_xml_get_widget (glade_xml, "label_message");
-	gtk_label_set_label (GTK_LABEL (widget), message);
+	gtk_label_set_label (GTK_LABEL (widget), full_message);
+	g_free (full_message);
 
 	/* show text in the expander */
 	if (egg_strzero (details)) {
@@ -111,6 +152,13 @@ gpk_error_dialog_modal_with_time (GtkWindow *window, const gchar *title, const g
 	return TRUE;
 }
 
+gboolean
+gpk_error_dialog_modal_prompt_yast (GtkWindow *window, const gchar *title, const gchar *message, const gchar *details, const gchar *yast)
+{
+	return gpk_error_dialog_modal_with_time (window, title, message, details, 0, yast);
+}
+
+
 /**
  * gpk_error_dialog_modal:
  * @window: the parent dialog
@@ -123,7 +171,7 @@ gpk_error_dialog_modal_with_time (GtkWindow *window, const gchar *title, const g
 gboolean
 gpk_error_dialog_modal (GtkWindow *window, const gchar *title, const gchar *message, const gchar *details)
 {
-	return gpk_error_dialog_modal_with_time (window, title, message, details, 0);
+	return gpk_error_dialog_modal_with_time (window, title, message, details, 0, NULL);
 }
 
 /**
diff --git a/src/gpk-error.h b/src/gpk-error.h
index 49240e8..8f0f4fd 100644
--- a/src/gpk-error.h
+++ b/src/gpk-error.h
@@ -33,11 +33,17 @@ gboolean	 gpk_error_dialog_modal			(GtkWindow	*window,
 							 const gchar	*title,
 							 const gchar	*message,
 							 const gchar	*details);
+gboolean	 gpk_error_dialog_modal_prompt_yast	(GtkWindow	*window,
+							 const gchar	*title,
+							 const gchar	*message,
+							 const gchar	*details,
+							 const gchar    *prompt_yast);
 gboolean	 gpk_error_dialog_modal_with_time	(GtkWindow	*window,
 							 const gchar	*title,
 							 const gchar	*message,
 							 const gchar	*details,
-							 guint		 timestamp);
+							 guint		 timestamp,
+							 const gchar    *prompt_yast);
 
 G_END_DECLS
 
