diff --git a/backend/pdf/ev-poppler.cc b/backend/pdf/ev-poppler.cc
index 9306445..bf108c1 100644
--- a/backend/pdf/ev-poppler.cc
+++ b/backend/pdf/ev-poppler.cc
@@ -2455,6 +2455,36 @@ ev_annot_from_poppler_annot (PopplerAnnot *poppler_annot,
 	return ev_annot;
 }
 
+static EvAnnotation *
+pdf_document_annotations_create_annotation (EvDocumentAnnotations *document,
+					  EvPage                *page,
+					  EvRectangle 		*rect
+					  )
+{
+	PdfDocument *pdf_document;
+	PopplerPage *poppler_page;
+	PopplerAnnot *poppler_annot;
+	PopplerRectangle poppler_rect;
+
+	EvAnnotation *ev_annot;
+
+	poppler_rect.x1 = rect->x1;
+	poppler_rect.y1 = rect->y1;
+	poppler_rect.x2 = rect->x2;
+	poppler_rect.y2 = rect->y2;
+
+	pdf_document = PDF_DOCUMENT (document);
+	poppler_page = POPPLER_PAGE (page->backend_page);
+	poppler_annot = poppler_annot_text_new(pdf_document->document, 
+		&poppler_rect);
+
+    	poppler_page_add_annot(poppler_page, poppler_annot);
+
+	ev_annot = ev_annot_from_poppler_annot (poppler_annot, page);
+	pdf_document->modified = TRUE;
+	return ev_annot;
+}
+
 static GList *
 pdf_document_annotations_get_annotations (EvDocumentAnnotations *document_annotations,
 					  EvPage                *page)
@@ -2528,6 +2558,7 @@ static void
 pdf_document_document_annotations_iface_init (EvDocumentAnnotationsIface *iface)
 {
 	iface->get_annotations = pdf_document_annotations_get_annotations;
+	iface->create_annotation = pdf_document_annotations_create_annotation;
 	iface->annotation_set_contents = pdf_document_annotations_annotation_set_contents;
 }
 
diff --git a/data/evince-ui.xml b/data/evince-ui.xml
index 7ac4edb..2854d9f 100644
--- a/data/evince-ui.xml
+++ b/data/evince-ui.xml
@@ -71,6 +71,7 @@
     <menuitem name="GoNextPage" action="GoNextPage"/>
     <menuitem name="ViewReload" action="ViewReload"/>
     <menuitem name="ViewAutoscroll" action="ViewAutoscroll"/>
+    <menuitem name="CreateAnnotationHere" action="CreateAnnotationHere"/>
     <separator/>
     <menuitem name="EditCopy" action="EditCopy"/>
     <menuitem name="EditSelectAllPopup" action="EditSelectAll"/>
diff --git a/libdocument/ev-document-annotations.c b/libdocument/ev-document-annotations.c
index f42ae7d..b7de581 100644
--- a/libdocument/ev-document-annotations.c
+++ b/libdocument/ev-document-annotations.c
@@ -37,6 +37,16 @@ ev_document_annotations_get_annotations (EvDocumentAnnotations *document_annots,
 	return iface->get_annotations (document_annots, page);
 }
 
+EvAnnotation *
+ev_document_annotations_create_annotation (EvDocumentAnnotations *document_annots,
+					 EvPage                *page,
+					 EvRectangle 	       *rect)
+{
+	EvDocumentAnnotationsIface *iface = EV_DOCUMENT_ANNOTATIONS_GET_IFACE (document_annots);
+
+	return iface->create_annotation (document_annots, page, rect);
+}
+
 void
 ev_document_annotations_annotation_set_contents (EvDocumentAnnotations *document_annots,
 						 EvAnnotation          *annot,
diff --git a/libdocument/ev-document-annotations.h b/libdocument/ev-document-annotations.h
index ada6b37..6bea29a 100644
--- a/libdocument/ev-document-annotations.h
+++ b/libdocument/ev-document-annotations.h
@@ -49,6 +49,9 @@ struct _EvDocumentAnnotationsIface
 	/* Methods  */
 	GList *(* get_annotations)         (EvDocumentAnnotations *document_annots,
 					    EvPage                *page);
+	EvAnnotation *(*create_annotation) (EvDocumentAnnotations *document_annots,
+					    EvPage                *page,
+					    EvRectangle 	  *rect);
 	void   (* annotation_set_contents) (EvDocumentAnnotations *document_annots,
 					    EvAnnotation          *annot,
 					    const gchar           *contents);
@@ -57,6 +60,9 @@ struct _EvDocumentAnnotationsIface
 GType  ev_document_annotations_get_type                (void) G_GNUC_CONST;
 GList *ev_document_annotations_get_annotations         (EvDocumentAnnotations *document_annots,
 							EvPage                *page);
+EvAnnotation *ev_document_annotations_create_annotation (EvDocumentAnnotations *document_annots,
+					 EvPage                *page,
+					 EvRectangle 	       *rect);
 
 void   ev_document_annotations_annotation_set_contents (EvDocumentAnnotations *document_annots,
 							EvAnnotation          *annot,
diff --git a/libview/ev-view.c b/libview/ev-view.c
index ea26824..6bcc081 100644
--- a/libview/ev-view.c
+++ b/libview/ev-view.c
@@ -6524,3 +6524,40 @@ ev_view_previous_page (EvView *view)
 	}
 }
 		
+gboolean
+ev_view_create_annotation(GtkWidget *widget) {
+    EvView *view = EV_VIEW (widget);
+    gint x, y;
+    EvPage  *ev_page;
+    gint page;
+
+    GdkRectangle       page_area;
+    GtkBorder 	       border;
+    GdkRectangle       view_rect;
+    EvRectangle        doc_rect;
+
+    if (!view->document)
+	return FALSE;
+    page = ev_document_model_get_page (view->model);
+
+    ev_page = ev_document_get_page (view->document, page);
+
+    /* Get doc coordination. */
+    gtk_widget_get_pointer (widget, &x, &y);
+    view_rect.x = x + view->scroll_x;
+    view_rect.y = y + view->scroll_y;
+    view_rect.width = 40;
+    view_rect.height = 50;
+
+    get_page_extents (view, page, &page_area, &border);
+    view_rect_to_doc_rect (view, &view_rect, &page_area, &doc_rect);
+
+    ev_document_annotations_create_annotation (
+	EV_DOCUMENT_ANNOTATIONS (view->document),
+	ev_page, &doc_rect);
+
+    return TRUE;
+    /* XXX Somehow update page rendering? */
+
+}
+
diff --git a/libview/ev-view.h b/libview/ev-view.h
index fde6854..c15917e 100644
--- a/libview/ev-view.h
+++ b/libview/ev-view.h
@@ -123,6 +123,9 @@ gchar*         ev_view_page_label_from_dest (EvView *view, EvLinkDest *dest);
 void	       ev_view_autoscroll_start   (EvView *view);
 void           ev_view_autoscroll_stop    (EvView *view);
 
+/* Annotation */
+gboolean ev_view_create_annotation(GtkWidget *widget);
+
 G_END_DECLS
 
 #endif /* __EV_VIEW_H__ */
diff --git a/shell/ev-window.c b/shell/ev-window.c
index c96b5da..ff71bb8 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -3735,6 +3735,13 @@ ev_window_cmd_edit_toolbar (GtkAction *action, EvWindow *ev_window)
 }
 
 static void
+ev_window_cmd_create_annotation_here (GtkAction *action, EvWindow *ev_window)
+{
+        g_return_if_fail (EV_IS_WINDOW (ev_window));
+	ev_view_create_annotation(EV_VIEW (ev_window->priv->view));
+}
+
+static void
 ev_window_cmd_view_zoom_in (GtkAction *action, EvWindow *ev_window)
 {
         g_return_if_fail (EV_IS_WINDOW (ev_window));
@@ -4861,6 +4868,11 @@ static const GtkActionEntry entries[] = {
 	{ "EditRotateRight", EV_STOCK_ROTATE_RIGHT, N_("Rotate _Right"), "<control>Right", NULL,
 	  G_CALLBACK (ev_window_cmd_edit_rotate_right) },
 
+        { "CreateAnnotationHere", GTK_STOCK_REFRESH, N_("Create Annotation Here"), 
+	    NULL,
+          N_("Create an annotation"),
+          G_CALLBACK (ev_window_cmd_create_annotation_here) },
+
         /* View menu */
         { "ViewZoomIn", GTK_STOCK_ZOOM_IN, NULL, "<control>plus",
           N_("Enlarge the document"),
