Index: components/editor/gtkhtml-editor.ui
===================================================================
--- components/editor/gtkhtml-editor.ui	(revision 9048)
+++ components/editor/gtkhtml-editor.ui	(working copy)
@@ -137,6 +137,12 @@
     <toolitem action='insert-table'/>
   </toolbar>
   <popup name='context-menu'>
+    <placeholder name='context-spell-suggest'/>
+    <separator/>
+    <menuitem action='context-spell-ignore'/>
+    <menu action='context-spell-add-menu'/>
+    <menuitem action='context-spell-add'/>
+    <separator/>
     <menuitem action='undo'/>
     <menuitem action='redo'/>
     <separator/>
@@ -175,12 +181,6 @@
       <menuitem action='context-delete-cell'/>
     </menu>
     <separator/>
-    <placeholder name='context-spell-suggest'/>
-    <separator/>
-    <menuitem action='context-spell-ignore'/>
-    <menu action='context-spell-add-menu'/>
-    <menuitem action='context-spell-add'/>
-    <separator/>
     <menu action='context-input-methods-menu'/>
   </popup>
 </ui>
Index: components/editor/gtkhtml-editor-private.c
===================================================================
--- components/editor/gtkhtml-editor-private.c	(revision 9048)
+++ components/editor/gtkhtml-editor-private.c	(working copy)
@@ -687,6 +687,74 @@ action_context_spell_suggest_cb (GtkActi
 	g_free (label);
 }
 
+static void
+editor_inline_spelling_suggestions (GtkhtmlEditor *editor,
+                                    GtkhtmlSpellChecker *checker)
+{
+	GtkActionGroup *action_group;
+	GtkUIManager *manager;
+	GtkHTML *html;
+	GList *list;
+	const gchar *path;
+	gchar *word;
+	gint count = 0;
+	guint merge_id;
+
+	html = gtkhtml_editor_get_html (editor);
+	word = html_engine_get_spell_word (html->engine);
+	list = gtkhtml_spell_checker_get_suggestions (checker, word, -1);
+
+	path = "/context-menu/context-spell-suggest/";
+	manager = gtkhtml_editor_get_ui_manager (editor);
+	action_group = editor->priv->suggestion_actions;
+	merge_id = editor->priv->spell_suggestions_merge_id;
+
+	while (list != NULL) {
+		gchar *suggestion = list->data;
+		gchar *action_name;
+		gchar *action_label;
+		GtkAction *action;
+		GtkWidget *child;
+		GSList *proxies;
+
+		/* Action name just needs to be unique. */
+		action_name = g_strdup_printf ("suggest-%d", count++);
+
+		action_label = g_markup_printf_escaped (
+			"<b>%s</b>", suggestion);
+
+		action = gtk_action_new (
+			action_name, action_label, NULL, NULL);
+
+		g_signal_connect (
+			action, "activate", G_CALLBACK (
+			action_context_spell_suggest_cb), editor);
+
+		gtk_action_group_add_action (action_group, action);
+
+		gtk_ui_manager_add_ui (
+			manager, merge_id, path,
+			action_name, action_name,
+			GTK_UI_MANAGER_AUTO, FALSE);
+
+		/* XXX GtkAction offers no support for Pango markup,
+		 *     so we have to manually set "use-markup" on the
+		 *     child of the proxy widget. */
+		gtk_ui_manager_ensure_update (manager);
+		proxies = gtk_action_get_proxies (action);
+		child = gtk_bin_get_child (proxies->data);
+		g_object_set (child, "use-markup", TRUE, NULL);
+
+		g_free (suggestion);
+		g_free (action_name);
+		g_free (action_label);
+
+		list = g_list_delete_link (list, list);
+	}
+
+	g_free (word);
+}
+
 /* Helper for gtkhtml_editor_update_context() */
 static void
 editor_spell_checkers_foreach (GtkhtmlSpellChecker *checker,
@@ -880,6 +948,12 @@ gtkhtml_editor_update_context (GtkhtmlEd
 	merge_id = gtk_ui_manager_new_merge_id (manager);
 	editor->priv->spell_suggestions_merge_id = merge_id;
 
+	/* Handle a single active language as a special case. */
+	if (g_list_length (list) == 1) {
+		editor_inline_spelling_suggestions (editor, list->data);
+		return;
+	}
+
 	/* Add actions and context menu content for active languages. */
 	g_list_foreach (list, (GFunc) editor_spell_checkers_foreach, editor);
 }
