diff --git a/gtkhtml/gtkhtml.c b/gtkhtml/gtkhtml.c
index 6aa0cef..bd2d814 100644
--- a/gtkhtml/gtkhtml.c
+++ b/gtkhtml/gtkhtml.c
@@ -4481,8 +4481,7 @@ clipboard_paste_received_cb (GtkClipboard     *clipboard,
 			}
 
 			if (HTML_IS_TEXT (e->cursor->object))
-				html_text_magic_link (HTML_TEXT (e->cursor->object), e,
-						html_object_get_length (e->cursor->object));
+				html_text_magic_link (HTML_TEXT (e->cursor->object), e, 1);
 		}
 
 		if (utf8)
diff --git a/gtkhtml/htmlengine-edit-cut-and-paste.c b/gtkhtml/htmlengine-edit-cut-and-paste.c
index 6464823..c0318e4 100644
--- a/gtkhtml/htmlengine-edit-cut-and-paste.c
+++ b/gtkhtml/htmlengine-edit-cut-and-paste.c
@@ -1175,7 +1175,7 @@ check_magic_link (HTMLEngine *e, const gchar *text, guint len)
 	    && gtk_html_get_magic_links (e->widget)
 	    && len == 1
 	    && (*text == ' ' || text [0] == '\n' || text [0] == '>' || text [0] == ')'))
-		html_text_magic_link (HTML_TEXT (e->cursor->object), e, html_object_get_length (e->cursor->object));
+		html_text_magic_link (HTML_TEXT (e->cursor->object), e, 1);
 }
 
 static void
diff --git a/gtkhtml/htmltext.c b/gtkhtml/htmltext.c
index e48bfff..cb64bcc 100644
--- a/gtkhtml/htmltext.c
+++ b/gtkhtml/htmltext.c
@@ -3353,6 +3353,8 @@ html_text_add_link_full (HTMLText *text, HTMLEngine *e, gchar *url, gchar *targe
 		if (new_link && prev)
 			prev->next = g_slist_prepend (NULL, new_link);
 	}
+
+	HTML_OBJECT (text)->change |= HTML_CHANGE_RECALC_PI;
 }
 
 void
