Index: tika-parsers/src/main/java/org/apache/tika/parser/ocr/TesseractOCRParser.java
===================================================================
--- tika-parsers/src/main/java/org/apache/tika/parser/ocr/TesseractOCRParser.java	(revision 1629787)
+++ tika-parsers/src/main/java/org/apache/tika/parser/ocr/TesseractOCRParser.java	(working copy)
@@ -29,6 +29,8 @@
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+import java.util.List;
+import java.util.ArrayList;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.FutureTask;
@@ -43,7 +45,12 @@
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.AbstractParser;
+import org.apache.tika.parser.image.ImageParser;
+import org.apache.tika.parser.image.PSDParser;
+import org.apache.tika.parser.image.TiffParser;
+import org.apache.tika.parser.jpeg.JpegParser;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.external.ExternalParser;
 import org.apache.tika.sax.XHTMLContentHandler;
@@ -97,7 +104,7 @@
 	
 	public void parse(Image image, ContentHandler handler, Metadata metadata, ParseContext context)
             throws IOException, SAXException, TikaException {
-		
+
 		TemporaryResources tmp = new TemporaryResources();
 		FileOutputStream fos = null;
 		TikaInputStream tis = null;
@@ -131,6 +138,17 @@
             InputStream stream, ContentHandler handler,
             Metadata metadata, ParseContext context)
             throws IOException, SAXException, TikaException {
+	    
+	String type = metadata.get(Metadata.CONTENT_TYPE);
+	if (type != null){
+	    List<Parser> imgMetParsers = getImageParsers();
+	    for (Parser parser: imgMetParsers){
+		if (parser.getSupportedTypes(context).contains(type)) {
+		    parser.parse(stream, handler, metadata, context);
+		}
+	    }
+	}
+
     	TesseractOCRConfig config = context.get(TesseractOCRConfig.class);
     	if(config == null) config = new TesseractOCRConfig();
 
@@ -139,8 +157,7 @@
         if (!ExternalParser.check(checkCmd)) return;
     	
     	XHTMLContentHandler xhtml = new XHTMLContentHandler(handler, metadata);
-    	xhtml.startDocument();
-    	
+
         TemporaryResources tmp = new TemporaryResources();
         File output = null;
         try {
@@ -167,7 +184,6 @@
         		output.delete();
             
         }
-        xhtml.endDocument();
     }
 
 	/**
@@ -241,19 +257,21 @@
      * @throws IOException if an input error occurred
      */
     private void extractOutput(InputStream stream, XHTMLContentHandler xhtml)
-            throws SAXException, IOException {
-    	
+	throws SAXException, IOException {
+ 
         Reader reader = new InputStreamReader(stream, "UTF-8");
+        xhtml.startDocument();
+        xhtml.startElement("div");
         try {
-            xhtml.startElement("div");
             char[] buffer = new char[1024];
             for (int n = reader.read(buffer); n != -1; n = reader.read(buffer)) {
-                xhtml.characters(buffer, 0, n);
+                if (n > 0) xhtml.characters(buffer, 0, n);
             }
-            xhtml.endElement("div");
         } finally {
             reader.close();
         }
+        xhtml.endElement("div");
+        xhtml.endDocument();
     }
 
     /**
@@ -284,6 +302,16 @@
         }.start();
     }
 
+
+    private List<Parser> getImageParsers(){
+        List<Parser> parsers = new ArrayList<Parser>();
+        parsers.add(new ImageParser());
+        parsers.add(new PSDParser());
+        parsers.add(new TiffParser());
+        parsers.add(new JpegParser());
+        return parsers;
+    }
+
 	
 }
 
Index: tika-parsers/src/test/java/org/apache/tika/parser/mail/RFC822ParserTest.java
===================================================================
--- tika-parsers/src/test/java/org/apache/tika/parser/mail/RFC822ParserTest.java	(revision 1629787)
+++ tika-parsers/src/test/java/org/apache/tika/parser/mail/RFC822ParserTest.java	(working copy)
@@ -36,6 +36,7 @@
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.Parser;
+import org.apache.tika.parser.ocr.TesseractOCRTest;
 import org.apache.tika.sax.BodyContentHandler;
 import org.apache.tika.sax.XHTMLContentHandler;
 import org.junit.Test;
@@ -84,8 +85,12 @@
             parser.parse(stream, handler, metadata, new ParseContext());
             verify(handler).startDocument();
             //4 body-part divs -- two outer bodies and two inner bodies
-            verify(handler, times(4)).startElement(eq(XHTMLContentHandler.XHTML), eq("div"), eq("div"), any(Attributes.class));
-            verify(handler, times(4)).endElement(XHTMLContentHandler.XHTML, "div", "div");
+            // TIKA-1422. TesseractOCRParser invokes the handler a fifth time, if Tesseract is installed.
+            int t = 4;
+            if (TesseractOCRTest.canRun()) t = 5;
+            System.err.println("\n\n\n" + t + "\n\n\n");
+            verify(handler, times(t)).startElement(eq(XHTMLContentHandler.XHTML), eq("div"), eq("div"), any(Attributes.class));
+            verify(handler, times(t)).endElement(XHTMLContentHandler.XHTML, "div", "div");
             //5 paragraph elements, 4 for body-parts and 1 for encompassing message
             verify(handler, times(5)).startElement(eq(XHTMLContentHandler.XHTML), eq("p"), eq("p"), any(Attributes.class));
             verify(handler, times(5)).endElement(XHTMLContentHandler.XHTML, "p", "p");
Index: tika-parsers/src/test/java/org/apache/tika/parser/ocr/TesseractOCRTest.java
===================================================================
--- tika-parsers/src/test/java/org/apache/tika/parser/ocr/TesseractOCRTest.java	(revision 1629787)
+++ tika-parsers/src/test/java/org/apache/tika/parser/ocr/TesseractOCRTest.java	(working copy)
@@ -33,6 +33,12 @@
 
 public class TesseractOCRTest  extends TikaTest {
 
+    public static boolean canRun() {
+        TesseractOCRConfig config = new TesseractOCRConfig();
+        TesseractOCRTest tesseractOCRTest = new TesseractOCRTest();
+        return tesseractOCRTest.canRun(config);
+    }
+
     private boolean canRun(TesseractOCRConfig config) {
         String[] checkCmd = {config.getTesseractPath() + "tesseract"};
         // If Tesseract is not on the path, do not run the test.
