Index: src/test/java/org/apache/tika/parser/microsoft/WordParserTest.java
===================================================================
--- src/test/java/org/apache/tika/parser/microsoft/WordParserTest.java	(Revision 1626556)
+++ src/test/java/org/apache/tika/parser/microsoft/WordParserTest.java	(Arbeitskopie)
@@ -230,17 +230,16 @@
         assertContains("Row 1 column 1 Row 2 column 1 Row 1 column 2 Row 2 column 2", content.replaceAll("\\s+"," "));
         assertContains("This is a hyperlink", content);
         assertContains("Here is a list:", content);
-        for(int row=1;row<=3;row++) {
+        for(int row=1;row<=3;row++) {        	
             //assertContains("·\tBullet " + row, content);
-            //assertContains("\u00b7\tBullet " + row, content);
-            assertContains("Bullet " + row, content);
+            assertContains("\u00b7 Bullet " + row, content);
+            //assertContains("Bullet " + row, content);
         }
         assertContains("Here is a numbered list:", content);
         for(int row=1;row<=3;row++) {
             //assertContains(row + ")\tNumber bullet " + row, content);
-            //assertContains(row + ") Number bullet " + row, content);
-            // TODO: WordExtractor fails to number the bullets:
-            assertContains("Number bullet " + row, content);
+            assertContains(row + ") Number bullet " + row, content);            
+            //assertContains("Number bullet " + row, content);            
         }
 
         for(int row=1;row<=2;row++) {
Index: src/main/java/org/apache/tika/parser/microsoft/WordExtractor.java
===================================================================
--- src/main/java/org/apache/tika/parser/microsoft/WordExtractor.java	(Revision 1626556)
+++ src/main/java/org/apache/tika/parser/microsoft/WordExtractor.java	(Arbeitskopie)
@@ -57,6 +57,7 @@
 
     private static final char UNICODECHAR_NONBREAKING_HYPHEN = '\u2011';
     private static final char UNICODECHAR_ZERO_WIDTH_SPACE = '\u200b';
+    private static final String LIST_DELIMITER = " "; // could be improved by using the real delimiter in xchFollow [MS-DOC], v20140721, 2.4.6.3, Part 3, Step 3
 
     public WordExtractor(ParseContext context) {
         super(context);
@@ -100,9 +101,10 @@
 
         // Do the main paragraph text
         Range r = document.getRange();
+        ListManager listManager = new ListManager(document);
         for(int i=0; i<r.numParagraphs(); i++) {
            Paragraph p = r.getParagraph(i);
-           i += handleParagraph(p, 0, r, document, FieldsDocumentPart.MAIN, pictures, pictureTable, xhtml);
+           i += handleParagraph(p, 0, r, document, FieldsDocumentPart.MAIN, pictures, pictureTable, listManager, xhtml);
         }
 
         // Do everything else
@@ -161,13 +163,14 @@
           throws SAXException, IOException, TikaException {
         if (countParagraphs(ranges) > 0) {
             xhtml.startElement("div", "class", type);
+            ListManager listManager = new ListManager(document);
             for (Range r : ranges) {
                 if (r != null) {
                     for(int i=0; i<r.numParagraphs(); i++) {
                         Paragraph p = r.getParagraph(i);
 
                         i += handleParagraph(p, 0, r, document,
-                                FieldsDocumentPart.HEADER, pictures, pictureTable, xhtml);
+                                FieldsDocumentPart.HEADER, pictures, pictureTable, listManager, xhtml);
                      }
                 }
             }
@@ -176,7 +179,7 @@
     }
 
     private int handleParagraph(Paragraph p, int parentTableLevel, Range r, HWPFDocument document,
-          FieldsDocumentPart docPart, PicturesSource pictures, PicturesTable pictureTable,
+          FieldsDocumentPart docPart, PicturesSource pictures, PicturesTable pictureTable, ListManager listManager,
           XHTMLContentHandler xhtml) throws SAXException, IOException, TikaException {
        // Note - a poi bug means we can't currently properly recurse
        //  into nested tables, so currently we don't
@@ -193,7 +196,7 @@
 
                 for(int pn=0; pn<cell.numParagraphs(); pn++) {
                    Paragraph cellP = cell.getParagraph(pn);
-                   handleParagraph(cellP, p.getTableLevel(), cell, document, docPart, pictures, pictureTable, xhtml);
+                   handleParagraph(cellP, p.getTableLevel(), cell, document, docPart, pictures, pictureTable, listManager, xhtml);
                 }
                 xhtml.endElement("td");
              }
@@ -211,11 +214,16 @@
        }
 
        TagAndStyle tas;
+       String numbering = null;
 
        if (document.getStyleSheet().numStyles()>p.getStyleIndex()) {
            StyleDescription style =
               document.getStyleSheet().getStyleDescription(p.getStyleIndex());
            if (style != null && style.getName() != null && style.getName().length() > 0) {
+        	   if (p.isInList()) {
+        		   String prefix = listManager.getFormattedNumber(p);
+        		   numbering = prefix;
+        	   }
                tas = buildParagraphTagAndStyle(style.getName(), (parentTableLevel>0));
            } else {
                tas = new TagAndStyle("p", null);
@@ -268,7 +276,7 @@
              Picture picture = pictures.getFor(cr);
              handlePictureCharacterRun(cr, picture, pictures, xhtml);
           } else {
-             handleCharacterRun(cr, tas.isHeading(), xhtml);
+             handleCharacterRun(cr, tas.isHeading(), xhtml, numbering);
           }
        }
 
@@ -291,7 +299,7 @@
        return 0;
     }
 
-    private void handleCharacterRun(CharacterRun cr, boolean skipStyling, XHTMLContentHandler xhtml)
+    private void handleCharacterRun(CharacterRun cr, boolean skipStyling, XHTMLContentHandler xhtml, String numbering)
           throws SAXException {
        // Skip trailing newlines
        if(!isRendered(cr) || cr.text().equals("\r"))
@@ -358,6 +366,11 @@
 
        // Control characters as line break
        text = text.replaceAll("[\u0000-\u001f]", "\n");
+       
+       // List numbering
+       if ((numbering != null) && (!numbering.equals(""))) {
+    	   text = numbering + LIST_DELIMITER + text;
+       }
        xhtml.characters(text);
     }
     /**
@@ -410,7 +423,7 @@
              );
              xhtml.startElement("a", "href", url);
              for(CharacterRun cr : texts) {
-                handleCharacterRun(cr, skipStyling, xhtml);
+                handleCharacterRun(cr, skipStyling, xhtml, null);
              }
              xhtml.endElement("a");
           } else {
@@ -420,7 +433,7 @@
                    Picture picture = pictures.getFor(cr);
                    handlePictureCharacterRun(cr, picture, pictures, xhtml);
                 } else {
-                   handleCharacterRun(cr, skipStyling, xhtml);
+                   handleCharacterRun(cr, skipStyling, xhtml, null);
                 }
              }
           }
@@ -428,7 +441,7 @@
           // We only had text
           // Output as-is
           for(CharacterRun cr : texts) {
-             handleCharacterRun(cr, skipStyling, xhtml);
+             handleCharacterRun(cr, skipStyling, xhtml, null);
           }
        }
 

