diff --git a/exif.c b/exif.c
index ae2c2d1..098fa72 100644
--- a/exif.c
+++ b/exif.c
@@ -73,16 +73,22 @@ int exif_orientation(const fileinfo_t *file)
 	if (fd < 0)
 		return -1;
 
-	if (s_read(fd, file->name, data, 4) < 0)
+	if (s_read(fd, file->name, data, 2) < 0)
 		goto abort;
 	if (btous(data, order) != JPEG_MARKER_SOI)
 		goto abort;
-	if (btous(data + 2, order) != JPEG_MARKER_APP1)
+	if (s_read(fd, file->name, data, 4) < 0)
 		goto abort;
-
-	if (s_read(fd, file->name, data, 2) < 0)
+	if (btous(data, order) == JPEG_MARKER_APP0){
+		len = btous(data + 2, order);
+		if (s_read(fd, file->name, data, len - 2) < 0)
+			goto abort;
+		if (s_read(fd, file->name, data, 4) < 0)
+			goto abort;
+	}
+	if (btous(data, order) != JPEG_MARKER_APP1)
 		goto abort;
-	len = btous(data, order);
+	len = btous(data + 2, order);
 	if (len < 8)
 		goto abort;
 
diff --git a/exif.h b/exif.h
index b37b2cc..257f094 100644
--- a/exif.h
+++ b/exif.h
@@ -23,6 +23,7 @@
 
 enum {
 	JPEG_MARKER_SOI  = 0xFFD8,
+	JPEG_MARKER_APP0 = 0xFFE0,
 	JPEG_MARKER_APP1 = 0xFFE1
 };