Index: tika-parsers/src/test/java/org/apache/tika/mime/MimeTypeTest.java
===================================================================
--- tika-parsers/src/test/java/org/apache/tika/mime/MimeTypeTest.java	(revision 1403575)
+++ tika-parsers/src/test/java/org/apache/tika/mime/MimeTypeTest.java	(working copy)
@@ -63,13 +63,34 @@
     }
 
     /** Test MimeType setDescription() */
-    public void testSetDescription() {
+    public void testSetEmptyValues() {
         try {
             text.setDescription(null);
             fail("Expected IllegalArgumentException");
         } catch (IllegalArgumentException e) {
             // expected result
         }
+        
+        try {
+            text.setAcronym(null);
+            fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            // expected result
+        }
+        
+        try {
+            text.addLink(null);
+            fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            // expected result
+        }
+
+        try {
+            text.setUniformTypeIdentifier(null);
+            fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            // expected result
+        }
     }
 
 }
Index: tika-core/src/test/java/org/apache/tika/mime/MimeTypesReaderTest.java
===================================================================
--- tika-core/src/test/java/org/apache/tika/mime/MimeTypesReaderTest.java	(revision 1403575)
+++ tika-core/src/test/java/org/apache/tika/mime/MimeTypesReaderTest.java	(working copy)
@@ -119,6 +119,17 @@
     }
     
     /**
+     * @since TIKA-1012
+     */
+    public void testReadExtendedMetadata() throws Exception {
+        MimeType bmp = this.mimeTypes.forName("image/x-ms-bmp");
+        assertEquals("BMP", bmp.getAcronym());
+        assertEquals("com.microsoft.bmp", bmp.getUniformTypeIdentifier());
+        assertEquals("http://en.wikipedia.org/wiki/BMP_file_format", 
+            bmp.getLinks().get(0).toString());
+    }
+    
+    /**
      * TIKA-746 Ensures that the custom mimetype maps were also 
      *  loaded and used
      */
Index: tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml
===================================================================
--- tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml	(revision 1403575)
+++ tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml	(working copy)
@@ -3677,6 +3677,8 @@
     <alias type="image/bmp"/>
     <acronym>BMP</acronym>
     <_comment>Windows bitmap</_comment>
+    <_link>http://en.wikipedia.org/wiki/BMP_file_format</_link>
+    <_uti>com.microsoft.bmp</_uti>
     <magic priority="50">
       <match value="BM" type="string" offset="0">
         <match value="0x0100" type="string" offset="26">
Index: tika-core/src/main/java/org/apache/tika/mime/MimeTypesReader.java
===================================================================
--- tika-core/src/main/java/org/apache/tika/mime/MimeTypesReader.java	(revision 1403575)
+++ tika-core/src/main/java/org/apache/tika/mime/MimeTypesReader.java	(working copy)
@@ -19,9 +19,10 @@
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.LinkedList;
 import java.util.List;
 
 import javax.xml.parsers.ParserConfigurationException;
@@ -154,7 +155,11 @@
         } else if (SUB_CLASS_OF_TAG.equals(qName)) {
             String parent = attributes.getValue(SUB_CLASS_TYPE_ATTR);
             types.setSuperType(type, MediaType.parse(parent));
-        } else if (COMMENT_TAG.equals(qName)) {
+        } else if (
+            COMMENT_TAG.equals(qName)||
+            ACRONYM_TAG.equals(qName)||
+            LINK_TAG.equals(qName)||
+            UTI_TAG.equals(qName)) {
             characters = new StringBuilder();
         } else if (GLOB_TAG.equals(qName)) {
             String pattern = attributes.getValue(PATTERN_ATTR);
@@ -199,6 +204,20 @@
             } else if (COMMENT_TAG.equals(qName)) {
                 type.setDescription(characters.toString().trim());
                 characters = null;
+            } else if (ACRONYM_TAG.equals(qName)) {
+                type.setAcronym(characters.toString().trim());
+                characters = null;
+            } else if (UTI_TAG.equals(qName)) {
+                type.setUniformTypeIdentifier(characters.toString().trim());
+                characters = null;
+            } else if (LINK_TAG.equals(qName)) {
+                try {
+                    type.addLink(new URI(characters.toString().trim()));
+                } 
+                catch (URISyntaxException e) {
+                    throw new IllegalArgumentException("unable to parse link: "+characters, e);
+                }
+                characters = null;
             } else if (MATCH_TAG.equals(qName)) {
                 current.stop();
             } else if (MAGIC_TAG.equals(qName)) {
Index: tika-core/src/main/java/org/apache/tika/mime/MimeTypesReaderMetKeys.java
===================================================================
--- tika-core/src/main/java/org/apache/tika/mime/MimeTypesReaderMetKeys.java	(revision 1403575)
+++ tika-core/src/main/java/org/apache/tika/mime/MimeTypesReaderMetKeys.java	(working copy)
@@ -27,8 +27,14 @@
 
     String MIME_TYPE_TYPE_ATTR = "type";
 
+    String ACRONYM_TAG = "acronym";
+
     String COMMENT_TAG = "_comment";
 
+    String LINK_TAG = "_link";
+    
+    String UTI_TAG = "_uti";
+
     String GLOB_TAG = "glob";
 
     String ISREGEX_ATTR = "isregex";
Index: tika-core/src/main/java/org/apache/tika/mime/MimeType.java
===================================================================
--- tika-core/src/main/java/org/apache/tika/mime/MimeType.java	(revision 1403575)
+++ tika-core/src/main/java/org/apache/tika/mime/MimeType.java	(working copy)
@@ -17,7 +17,9 @@
 package org.apache.tika.mime;
 
 import java.io.Serializable;
+import java.net.URI;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
@@ -75,6 +77,21 @@
     private final MediaType type;
 
     /**
+     * The MimeType acronym
+     */
+    private String acronym = "";
+
+    /**
+     * The http://en.wikipedia.org/wiki/Uniform_Type_Identifier
+     */
+    private String uti = "";
+    
+    /**
+     * Documentation Links
+     */
+    private List<URI> links = Collections.emptyList();
+    
+    /**
      * Description of this media type.
      */
     private String description = "";
@@ -148,8 +165,77 @@
         }
         this.description = description;
     }
+    
 
     /**
+     * Returns an acronym for this mime type.
+     *
+     * @return mime type acronym
+     */
+    public String getAcronym() {
+        return acronym;
+    }
+
+    /**
+     * Set an acronym for the mime type
+     *
+     * @param acronym
+     */
+    void setAcronym(String v) {
+        if (v == null) {
+            throw new IllegalArgumentException("Acronym is missing");
+        }
+        acronym = v;
+    }
+    
+    /**
+     * Get the UTI for this mime type.
+     * 
+     * @see http://en.wikipedia.org/wiki/Uniform_Type_Identifier
+     * 
+     * @return The Uniform Type Identifier
+     */
+    public String getUniformTypeIdentifier() {
+        return uti;
+    }
+
+    /**
+     * Set The Uniform Type Identifier
+     *
+     * @param uti
+     */
+    void setUniformTypeIdentifier(String v) {
+        if (v == null) {
+            throw new IllegalArgumentException("Uniform Type Identifier is missing");
+        }
+        uti = v;
+    }
+
+    /**
+     * Get a list of links to help document this mime type
+     * 
+     * @return an array of links (will never be null)
+     */
+    public List<URI> getLinks() {
+      return links; // this is already unmodifiable
+    }
+
+    /**
+     * Add a link to this mime type
+     * @param link
+     */
+    void addLink(URI link) {
+        if(link==null) {
+            throw new IllegalArgumentException("Missing Link");
+        }
+        List<URI> copy = new ArrayList<URI>(links.size()+1);
+        copy.addAll(links);
+        copy.add(link);
+        links = Collections.unmodifiableList(copy);
+    }
+
+
+    /**
      * Add some rootXML info to this mime-type
      *
      * @param namespaceURI
