diff --git a/gdk-pixbuf/io-jpeg.c b/gdk-pixbuf/io-jpeg.c
index 96f993f40..7a05327ae 100644
--- a/gdk-pixbuf/io-jpeg.c
+++ b/gdk-pixbuf/io-jpeg.c
@@ -520,10 +520,24 @@ jpeg_parse_exif (JpegExifContext *context, j_decompress_ptr cinfo)
 			jpeg_parse_exif_app1 (context, cmarker);
 		else if (cmarker->marker == JPEG_APP0+2)
 			jpeg_parse_exif_app2_segment (context, cmarker);
+
 		cmarker = cmarker->next;
 	}
 }
 
+static gchar*
+jpeg_get_comment ( j_decompress_ptr cinfo ) {
+	jpeg_saved_marker_ptr cmarker;
+	for ( cmarker = cinfo->marker_list;
+	      cmarker != NULL;
+	      cmarker = cmarker->next )
+	{
+		if (cmarker->marker == JPEG_COM)
+			return g_strndup( (const gchar*) cmarker->data, cmarker->data_length );
+	}
+	return NULL;
+}
+
 static void
 jpeg_destroy_exif_context (JpegExifContext *context)
 {
@@ -591,6 +605,7 @@ gdk_pixbuf__jpeg_image_load (FILE *f, GError **error)
 
 	jpeg_save_markers (&cinfo, JPEG_APP0+1, 0xffff);
 	jpeg_save_markers (&cinfo, JPEG_APP0+2, 0xffff);
+	jpeg_save_markers (&cinfo, JPEG_COM, 0xffff);
 	jpeg_read_header (&cinfo, TRUE);
 
 	/* parse exif data */
@@ -618,6 +633,12 @@ gdk_pixbuf__jpeg_image_load (FILE *f, GError **error)
 		goto out; 
 	}
 
+	gchar* comment = jpeg_get_comment( &cinfo );
+	if ( comment != NULL ) {
+		gdk_pixbuf_set_option (pixbuf, "comment", comment);
+		g_free(comment);
+	}
+
 	switch (cinfo.density_unit) {
 	case 1:
 		/* Dots per inch (no conversion required) */
@@ -1029,6 +1050,7 @@ gdk_pixbuf__jpeg_image_load_increment (gpointer data,
 		
 			jpeg_save_markers (cinfo, JPEG_APP0+1, 0xffff);
 			jpeg_save_markers (cinfo, JPEG_APP0+2, 0xffff);
+			jpeg_save_markers (cinfo, JPEG_COM, 0xffff);
 			rc = jpeg_read_header (cinfo, TRUE);
 			context->src_initialized = TRUE;
 			
@@ -1039,7 +1061,7 @@ gdk_pixbuf__jpeg_image_load_increment (gpointer data,
 
 			/* parse exif data */
 			jpeg_parse_exif (&exif_context, cinfo);
-		
+
 			width = cinfo->image_width;
 			height = cinfo->image_height;
 			if (context->size_func) {
@@ -1079,6 +1101,12 @@ gdk_pixbuf__jpeg_image_load_increment (gpointer data,
 				goto out;
 			}
 
+			gchar* comment = jpeg_get_comment( cinfo );
+			if ( comment != NULL ) {
+				gdk_pixbuf_set_option (context->pixbuf, "comment", comment);
+				g_free(comment);
+			}
+
 			switch (cinfo->density_unit) {
 			case 1:
 				/* Dots per inch (no conversion required) */
diff --git a/tests/bug725582-testrotate.jpg b/tests/bug725582-testrotate.jpg
index f95a38f51..7c3c93a71 100644
Binary files a/tests/bug725582-testrotate.jpg and b/tests/bug725582-testrotate.jpg differ
diff --git a/tests/pixbuf-jpeg.c b/tests/pixbuf-jpeg.c
index 073104a32..b5a2de088 100644
--- a/tests/pixbuf-jpeg.c
+++ b/tests/pixbuf-jpeg.c
@@ -96,6 +96,25 @@ test_bug_775218 (void)
   g_clear_object (&ref);
 }
 
+static void
+test_comment(void)
+{
+  GError *error = NULL;
+  GdkPixbuf *ref;
+
+  if (!format_supported ("jpeg") || !format_supported ("png"))
+    {
+      g_test_skip ("format not supported");
+      return;
+    }
+
+  ref = gdk_pixbuf_new_from_file (g_test_get_filename (G_TEST_DIST, "bug725582-testrotate.jpg", NULL), &error);
+  g_assert_no_error (error);
+
+  g_assert_cmpstr (gdk_pixbuf_get_option (ref, "comment"), ==, "COMMENT HERE");
+  g_object_unref (ref);
+}
+
 int
 main (int argc, char **argv)
 {
@@ -104,6 +123,7 @@ main (int argc, char **argv)
   g_test_add_func ("/pixbuf/jpeg/inverted_cmyk_jpeg", test_inverted_cmyk_jpeg);
   g_test_add_func ("/pixbuf/jpeg/type9_rotation_exif_tag", test_type9_rotation_exif_tag);
   g_test_add_func ("/pixbuf/jpeg/bug775218", test_bug_775218);
+  g_test_add_func ("/pixbuf/jpeg/comment", test_comment);
 
   return g_test_run ();
 }
