diff --git a/src/eog-image.c b/src/eog-image.c
index 57ea118..c0c3484 100644
--- a/src/eog-image.c
+++ b/src/eog-image.c
@@ -2212,3 +2212,11 @@ eog_image_get_transform (EogImage *img)
 }
 
 #endif
+
+gboolean
+eog_image_is_jpeg (EogImage *img)
+{
+	g_return_val_if_fail (EOG_IS_IMAGE (img), FALSE);
+
+	return ((img->priv->file_type != NULL) && (g_ascii_strcasecmp (img->priv->file_type, EOG_FILE_FORMAT_JPEG) == 0));
+}
diff --git a/src/eog-image.h b/src/eog-image.h
index 75181f9..07948d5 100644
--- a/src/eog-image.h
+++ b/src/eog-image.h
@@ -208,6 +208,7 @@ gboolean          eog_image_is_svg                   (EogImage *img);
 RsvgHandle       *eog_image_get_svg                  (EogImage *img);
 EogTransform     *eog_image_get_transform            (EogImage *img);
 #endif
+gboolean          eog_image_is_jpeg                  (EogImage *img);
 
 G_END_DECLS
 
diff --git a/src/eog-print.c b/src/eog-print.c
index a41ca82..82658b7 100644
--- a/src/eog-print.c
+++ b/src/eog-print.c
@@ -105,8 +105,35 @@ eog_print_draw_page (GtkPrintOperation *operation,
 		RsvgHandle *svg = eog_image_get_svg (data->image);
 
 		rsvg_handle_render_cairo (svg, cr);
+		return;
 	} else
 #endif
+	if (eog_image_is_jpeg (data->image) && !eog_image_is_modified (data->image))
+	{
+		GFile *file;
+		char *img_data;
+		gsize data_len;
+		cairo_surface_t *surface;
+
+		file = eog_image_get_file (data->image);
+		if (g_file_load_contents (file, NULL, &img_data, &data_len, NULL, NULL))
+		{
+			surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height);
+
+			cairo_surface_set_mime_data (surface,
+			                             CAIRO_MIME_TYPE_JPEG,
+			                             img_data, data_len,
+						     g_free, img_data);
+			cairo_set_source_surface (cr, surface, 0, 0);
+			cairo_paint (cr);
+			cairo_surface_destroy (surface);
+			g_object_unref (file);
+			return;
+		}
+		g_object_unref (file);
+
+	}
+
 	{
 		GdkPixbuf *pixbuf;
 
