Index: tika-core/src/main/java/org/apache/tika/mime/MimeTypesReader.java
===================================================================
--- tika-core/src/main/java/org/apache/tika/mime/MimeTypesReader.java	(revision 1468585)
+++ tika-core/src/main/java/org/apache/tika/mime/MimeTypesReader.java	(working copy)
@@ -98,22 +98,22 @@
  *
  * @see http://freedesktop.org/wiki/Standards_2fshared_2dmime_2dinfo_2dspec
  */
-class MimeTypesReader extends DefaultHandler implements MimeTypesReaderMetKeys {
+public class MimeTypesReader extends DefaultHandler implements MimeTypesReaderMetKeys {
 
-    private final MimeTypes types;
+    protected final MimeTypes types;
 
     /** Current type */
-    private MimeType type = null;
+    protected MimeType type = null;
 
-    private int priority;
+    protected int priority;
 
-    private StringBuilder characters = null;
+    protected StringBuilder characters = null;
 
-    MimeTypesReader(MimeTypes types) {
+    protected MimeTypesReader(MimeTypes types) {
         this.types = types;
     }
 
-    void read(InputStream stream) throws IOException, MimeTypeException {
+    public void read(InputStream stream) throws IOException, MimeTypeException {
         try {
             SAXParserFactory factory = SAXParserFactory.newInstance();
             factory.setNamespaceAware(false);
@@ -126,7 +126,7 @@
         }
     }
 
-    void read(Document document) throws MimeTypeException {
+    public void read(Document document) throws MimeTypeException {
         try {
             TransformerFactory factory = TransformerFactory.newInstance();
             Transformer transformer = factory.newTransformer();
@@ -151,7 +151,7 @@
                 try {
                     type = types.forName(name);
                 } catch (MimeTypeException e) {
-                    throw new SAXException(e);
+                  handleError(e, qName, attributes);
                 }
             }
         } else if (ALIAS_TAG.equals(qName)) {
@@ -172,7 +172,7 @@
                 try {
                     types.addPattern(type, pattern, Boolean.valueOf(isRegex));
                 } catch (MimeTypeException e) {
-                    throw new SAXException(e);
+                  handleError(e, qName, attributes);
                 }
             }
         } else if (ROOT_XML_TAG.equals(qName)) {
@@ -239,6 +239,10 @@
             characters.append(ch, start, length);
         }
     }
+    
+    protected void handleError(Exception ex, String qName, Attributes attributes) throws SAXException {
+      throw new SAXException(ex);
+    }
 
     private ClauseRecord current = new ClauseRecord(null);
 
Index: tika-core/src/test/java/org/apache/tika/mime/CustomReaderTest.java
===================================================================
--- tika-core/src/test/java/org/apache/tika/mime/CustomReaderTest.java	(revision 0)
+++ tika-core/src/test/java/org/apache/tika/mime/CustomReaderTest.java	(working copy)
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tika.mime;
+
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+import junit.framework.TestCase;
+
+
+public class CustomReaderTest extends TestCase {
+  
+  static class CustomMimeTypesReader extends MimeTypesReader {
+    public Map<String, String> values = new HashMap<String, String>();
+
+    CustomMimeTypesReader(MimeTypes types) {
+      super(types); 
+    }
+    
+
+    @Override
+    public void startElement(
+            String uri, String localName, String qName,
+            Attributes attributes) throws SAXException {
+      super.startElement(uri, localName, qName, attributes);
+      if ("hello".equals(qName)) {
+          characters = new StringBuilder();
+      }
+    }
+
+    @Override
+    public void endElement(String uri, String localName, String qName) {
+      super.endElement(uri, localName, qName);
+        if (type != null) {
+          if("hello".equals(qName)) {
+            values.put(type.toString(), characters.toString().trim());
+            characters = null;
+          }
+        }
+    }
+
+    @Override
+    protected void handleError(Exception ex, String qName, Attributes attributes) throws SAXException {
+      throw new SAXException(ex);
+    }
+  }
+  
+  /**
+   * 
+   */
+  public void testCustomReader() throws Exception {
+    MimeTypes mimeTypes = new MimeTypes();
+    CustomMimeTypesReader reader = new CustomMimeTypesReader(mimeTypes);
+    InputStream in = this.getClass().getResourceAsStream("custom-mimetypes.xml");
+    reader.read(in);
+    
+    String key = "hello/world-file";
+
+    System.out.println( mimeTypes.getMediaTypeRegistry().getTypes() );
+    
+    MimeType mime = mimeTypes.forName(key);
+    assertEquals("A \"Hello World\" file", mime.getDescription());    
+    assertEquals("world", reader.values.get(key));
+  }
+
+}
Index: tika-core/src/test/resources/org/apache/tika/mime/custom-mimetypes.xml
===================================================================
--- tika-core/src/test/resources/org/apache/tika/mime/custom-mimetypes.xml	(revision 1468585)
+++ tika-core/src/test/resources/org/apache/tika/mime/custom-mimetypes.xml	(working copy)
@@ -26,6 +26,7 @@
   <!-- A more complex mimetype, with a glob and a match -->
   <mime-type type="hello/world-file">
      <_comment>A "Hello World" file</_comment>
+     <hello>world</hello>
      <glob pattern="*.hello.world" />
      <magic priority="50">
         <match value="Hello, World!" type="string" offset="0:13" />
