Index: tika-parsers/src/main/java/org/apache/tika/parser/microsoft/OutlookExtractor.java
===================================================================
--- tika-parsers/src/main/java/org/apache/tika/parser/microsoft/OutlookExtractor.java	(revision 1087772)
+++ tika-parsers/src/main/java/org/apache/tika/parser/microsoft/OutlookExtractor.java	(working copy)
@@ -19,6 +19,7 @@
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 
+import org.apache.poi.hmef.attribute.MAPIRtfAttribute;
 import org.apache.poi.hsmf.MAPIMessage;
 import org.apache.poi.hsmf.datatypes.AttachmentChunks;
 import org.apache.poi.hsmf.datatypes.ByteChunk;
@@ -27,13 +28,15 @@
 import org.apache.poi.hsmf.datatypes.StringChunk;
 import org.apache.poi.hsmf.datatypes.Types;
 import org.apache.poi.hsmf.exceptions.ChunkNotFoundException;
-import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.html.HtmlParser;
+import org.apache.tika.parser.rtf.RTFParser;
 import org.apache.tika.parser.txt.CharsetDetector;
+import org.apache.tika.parser.txt.CharsetMatch;
 import org.apache.tika.sax.XHTMLContentHandler;
 import org.xml.sax.SAXException;
 
@@ -43,11 +46,11 @@
 public class OutlookExtractor extends AbstractPOIFSExtractor {
     private final MAPIMessage msg;
 
-    public OutlookExtractor(POIFSFileSystem filesystem, ParseContext context) throws TikaException {
+    public OutlookExtractor(NPOIFSFileSystem filesystem, ParseContext context) throws TikaException {
         super(context);
         
         try {
-            this.msg = new MAPIMessage(filesystem);
+            this.msg = new MAPIMessage(filesystem.getRoot());
         } catch (IOException e) {
             throw new TikaException("Failed to parse Outlook message", e);
         }
@@ -60,27 +63,22 @@
            
            // If the message contains strings that aren't stored
            //  as Unicode, try to sort out an encoding for them
-           // TODO Use new method
-           boolean hasNonUnicodeStrings = false;
-           for(Chunk chunk : msg.getMainChunks().getAll()) {
-              if(chunk instanceof StringChunk) {
-                 StringChunk sc = (StringChunk)chunk;
-                 if(sc.getType() == Types.ASCII_STRING) {
-                    hasNonUnicodeStrings = true;
-                    break;
-                 }
-              }
-           }
-           
-           if(hasNonUnicodeStrings) {
+           if(msg.has7BitEncodingStrings()) {
               if(msg.getHeaders() != null) {
                  // There's normally something in the headers
                  msg.guess7BitEncoding();
               } else {
                  // Nothing in the header, try encoding detection
                  //  on the message body
-                 CharsetDetector detector = new CharsetDetector();
-                 // TODO detect and use this
+                 StringChunk text = msg.getMainChunks().textBodyChunk; 
+                 if(text != null) {
+                    CharsetDetector detector = new CharsetDetector();
+                    detector.setText( text.getRawValue() );
+                    CharsetMatch match = detector.detect();
+                    if(match.getConfidence() > 35) {
+                       msg.set7BitEncoding( match.getName() );
+                    }
+                 }
               }
            }
            
@@ -167,7 +165,7 @@
               if(htmlChunk instanceof ByteChunk) {
                  data = ((ByteChunk)htmlChunk).getValue();
               } else if(htmlChunk instanceof StringChunk) {
-                 // TODO Needs POI 3.8 beta 3
+                 data = ((StringChunk)htmlChunk).getRawValue();
               }
               if(data != null) {
                  HtmlParser htmlParser = new HtmlParser();
@@ -179,7 +177,17 @@
               }
            }
            if(rtfChunk != null && !doneBody) {
-              // TODO Needs POI 3.8 beta 2 for TNEF support
+              ByteChunk chunk = (ByteChunk)rtfChunk;
+              MAPIRtfAttribute rtf = new MAPIRtfAttribute(
+                    MAPIProperty.RTF_COMPRESSED, Types.BINARY, chunk.getValue()
+              );
+              RTFParser rtfParser = new RTFParser();
+              // Disabled pending a fix to TIKA-632
+//              rtfParser.parse(
+//                    new ByteArrayInputStream(rtf.getData()),
+//                    xhtml, new Metadata(), new ParseContext()
+//              );
+//              doneBody = true;
            }
            if(textChunk != null && !doneBody) {
               xhtml.element("p", ((StringChunk)textChunk).getValue());
Index: tika-parsers/src/test/java/org/apache/tika/parser/microsoft/OutlookParserTest.java
===================================================================
--- tika-parsers/src/test/java/org/apache/tika/parser/microsoft/OutlookParserTest.java	(revision 1087655)
+++ tika-parsers/src/test/java/org/apache/tika/parser/microsoft/OutlookParserTest.java	(working copy)
@@ -126,6 +126,10 @@
         assertTrue(content.contains("Outlook 2003"));
         assertTrue(content.contains("Streamlined Mail Experience"));
         assertTrue(content.contains("Navigation Pane"));
+        
+        // As the HTML version should have been processed, ensure
+        //  we got some of the links
+        assertTrue(content.contains("<http://r.office.microsoft.com/r/rlidNewsletterSignUp?clid=1033>"));
     }
 
 }
